--- title: JavaWeb环境搭建(Tomcat) date: 2020-12-12 13:47:17 tags: - JavaWeb - tomcat categories: - JavaWeb --- ## HTTP 协议 ### 简介 超文本传输协议(`HyperText Transfer Protocol`,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。 HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协 调,最终发布了一系列的RFC,其中最著名的是1999年6月公布的 RFC 2616,定义了HTTP协议中现今广泛使用的一个版本——HTTP 1.1。 ![五层协议](https://i.loli.net/2020/11/18/hfFxIbpreuc3siy.png) HTTP协议是基于TCP/IP协议之上的应用层协议。 HTTP是一种不保存状态,即无状态(stateless)协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。也就是说在HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理。 ### 请求/响应的步骤 1. **客户端连接到Web服务器** 一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。 2. **发送HTTP请求** 通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。 3. **服务器接受请求并返回HTTP响应** Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。 4. **释放TCP连接** 在HTTP/1.0中默认使用**短连接**。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。 而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:`Connection:keep-alive` 在使用**长连接**的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。 > HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。 5. **客户端浏览器解析HTML内容** 客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。 > 例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程: > > 1. 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址; > 2. 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接; > 3. 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器; > 4. 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器; > 5. 浏览器将该 html 文本并显示内容; ### HTTP请求方法 HTTP/1.1协议中共定义了八种方法(动作)来以不同方式操作指定的资源: * **GET** 向指定的资源发出「显式」请求。使用GET方法应该只用在读取数据,而不应当被用于产生「副作用」的操作中,例如在Web Application中。其中一个原因是GET可能会被网络爬虫等随意访问。 * **HEAD** 与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中「关于该资源的信息」(元信息或称元数据)。 * **POST** 向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。 * **PUT** 向指定资源位置上传其最新内容。 * **DELETE** 请求服务器删除Request-URI所标识的资源。 * **TRACE** 回显服务器收到的请求,主要用于测试或诊断。 * **OPTIONS** 这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用`*`来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。 ### C/S与B/S `C/S`:又称Client/Server或客户/服务器模式。服务器通常采用高性能的PC、工作站或小型机,客户端需要安装专用的客户端软件。如QQ,微信等软件 `B/S`:是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser)。Browser/Server是建立在广域网的基础上的。 **C/S和B/S结构各自的优、缺点:** | | 优点 | 缺点 | | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ | | C/S | 1. 交互性强,客户端有着一套完整的应用程序,相对B/S有着更加强大的功能,还可以实现子程序之间的切换;
2. 安全性强,只适用于局域网,相对来说其安全比较好;
3. 处理信息能力强,C/S的通信量相对B/S是少了很多的;
4. 速度较快,更加利于处理大量数据。 | 1. 只适用于局域网;
2. 客户端要安装专用的客户端软件;
3. 每当系统升级时,每一台客户机需要重新安装;
4. 操作系统可能会有限制。 | | B/S | 1. 客户端零维护;
2. 系统扩展容易;
3. 在电脑可上网的前提下,可以在任何操作系统上使用并且不需要安装专门的软件 。 | 1. 相对C/S来说交互能力差,不能够在子程序间自由切换;
2. 安全性较差,B/S其安全性只能靠数据库服务器上管理密码的数据库来保证;
3. 逻辑结构比C/S多一层,处理速度较慢 | ### Web服务器的分类 Web服务器是运行及发布Web应用的容器,只有将开发的Web项目放置到该容器中,才能使网络中的所有用户通过浏览器进行访问。开发Java Web应用所采用的服务器主要是与JSP/Servlet兼容的Web服务器,比较常用的有 Tomcat、Resin、JBoss、WebSphere 和 WebLogic 等。 * **Tomcat 服务器** 目前最为流行的Tomcat服务器是Apache-Jarkarta开源项目中的一个子项目,是一个小型、轻量级的支持JSP和Servlet 技术的Web服务器,也是初学者学习开发JSP应用的首选。 * **Resin 服务器** Resin是Caucho公司的产品,是一个非常流行的支持Servlet和JSP的服务器,速度非常快。Resin本身包含了一个支持HTML的Web服务器,这使它不仅可以显示动态内容,而且显示静态内容的能力也毫不逊色,因此许多网站都是使用Resin服务器构建 * **JBoss服务器** JBoss是一个种遵从JavaEE规范的、开放源代码的、纯Java的EJB服务器,对于J2EE有很好的支持。JBoss采用JML API实现软件模块的集成与管理,其核心服务又是提供EJB服务器,不包含Servlet和JSP的Web容器,不过它可以和Tomcat完美结合 * **WebSphere 服务器** WebSphere是IBM公司的产品,可进一步细分为 WebSphere Performance Pack、Cache Manager 和WebSphere Application Server等系列,其中WebSphere Application Server 是基于Java 的应用环境,可以运行于 Sun Solaris、Windows NT 等多种操作系统平台,用于建立、部署和管理Internet和Intranet Web应用程序。 * **WebLogic 服务器** WebLogic 是BEA公司的产品(现在已经被Oracle收购),可进一步细分为 WebLogic Server、WebLogic Enterprise 和 WebLogic Portal 等系列,其中 WebLogic Server 的功能特别强大。WebLogic 支持企业级的、多层次的和完全分布式的Web应用,并且服务器的配置简单、界面友好。对于那些正在寻求能够提供Java平台所拥有的一切应用服务器的用户来说,WebLogic是一个十分理想的选择 ### Tomcat > tomcat的使用是基于java的,所以要保证我们的电脑已经有了java环境。 #### 安装与配置 1. 去官网下载对应版本的Tomcat 官网地址:[https://tomcat.apache.org/](https://tomcat.apache.org/) ![](https://i.loli.net/2020/11/19/LFWV4eRbshPjHT2.png) 2. 解压或安装到一个没有特殊符号的目录中(最好不要包含中文路径)我这里下载的是zip包,解压即可 ![](https://i.loli.net/2020/11/19/ZU4FcjzMwsgvBmI.png) 3. 配置环境变量 右键点击此电脑,打开属性,找到高级系统设置->环境变量->系统变量 (1) 新建一个变量CATALINA_HOME,值为tomcat安装的路径,结尾不要分号 ![](https://i.loli.net/2020/11/19/R48ChW7Ke62lBJX.png) (2) 配置Path变量,找到系统变量中的Path变量,点击编辑,新建一个,值为`%CATALINA_HOME%\bin` ![image-20201119154624242](https://i.loli.net/2020/11/19/NLkDgfbMwEXK37z.png) (3) 配置ClassPath变量,找到系统变量中的ClassPath变量(没有就新建一个),值为`%CATALINA_HOME%\servlet-api.jar` ![](https://i.loli.net/2020/11/19/Sr8WiypNugD5bhv.png) 4. 将tomcat9安装到windows服务中**(可做可不做)** 打开cmd命令行输入`service install Tomcat9` ![](https://i.loli.net/2020/11/19/9lVhyzNZaGBHLgi.png) 如果报以下错误: ```bash The file Tomcat9.exe was not found... Either the CATALINA_HOME environment variable is not defined correctly or ....省略 ``` 找到环境变量Path,编辑文本,去除`%CATALINA_HOME%\bin`后面的分号,安装成功后再加上分号。 > **注意:** 第四步将tomcat9安装到windows服务中,可做可不做,做这步的目的就是使解压后bin文件夹下的tomcat9.exe和tomcat9w.exe也可以运行,使得绿色解压版和exe安装版安装tomcat的功能一样完整。 至此,配置工作完成!打开bin文件夹,双击startup.bat(或tomcat9.exe)启动tomcat服务,因为配置了环境变量也可以直接在cmd中输入startup.bat(或tomcat9.exe),它会自动打开一个控制台界面。不要关闭控制台界面,打开浏览器,输入http://localhost:8080,出现Tomcat的网页,证明安装并配置成功!最后关闭控制台,关闭控制台即关闭Tomcat服务。 ![](https://i.loli.net/2020/11/19/gJXnYDIEoVxWpU1.png) #### tomcat内目录的含义 ![](https://i.loli.net/2020/11/19/6BX4YlwgFntjVka.png) 1. **bin**:该目录下存放的是二进制可执行文件,有两个exe文件:tomcat9.exe、tomcat9w.exe,前者是在控制台下启动Tomcat,后者是弹出GUI窗口启动Tomcat;有有两个bat文件:startup.bat和shutdown.bat,startup.bat用来启动Tomcat,shutdown.bat用来停止Tomcat; 2. **conf**:这是一个**非常非常重要**的目录,这个目录下有四个最为重要的文件: * server.xml:配置整个服务器信息。例如修改端口号,添加虚拟主机等; * tomcat-users.xml:存储tomcat用户的文件,这里保存的是tomcat的用户名及密码,以及用户的角色信息。可以按着该文件中的注释信息添加tomcat用户,然后就可以在Tomcat主页中进入Tomcat Manager页面了; * web.xml:部署描述符文件,这个文件中注册了很多MIME类型,即文档类型。这些MIME类型是客户端与服务器之间说明文档类型的,如用户请求一个html网页,那么服务器还会告诉客户端浏览器响应的文档是text/html类型的,这就是一个MIME类型。客户端浏览器通过这个MIME类型就知道如何处理它了,但如果服务器响应的是一个exe文件,那么浏览器就不可能显示它,而是应该弹出下载窗口才对。 MIME就是用来说明文档的内容是什么类型的! * context.xml:对所有应用的统一配置,通常我们不会去修改它。 3. **lib**:Tomcat的类库,里面是一大堆jar文件。如果需要添加Tomcat依赖的jar文件,可以把它放到这个目录中,当然也可以把应用依赖的jar文件放到这个目录中,这个目录中的jar所有项目都可以共享之,但这样你的应用放到其他Tomcat下时就不能再共享这个目录下的Jar包了,所以建议只把Tomcat需要的Jar包放到这个目录下; 4. **logs**:这个目录中都是日志文件,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,那么异常也会记录在日志文件中。 5. **temp**:存放Tomcat的临时文件,这个目录下的东西可以在停止Tomcat后删除! 6. **webapps**:存放web项目的目录,其中每个文件夹都是一个项目;如果这个目录下已经存在了目录,那么都是tomcat自带的项目。其中ROOT是一个特殊的项目,在地址栏中没有给出项目目录时,对应的就是ROOT项目。 如:http://localhost:8080/examples,进入示例项目。其中examples就是项目名,即文件夹的名字 7. **work**:运行时生成的文件,最终运行的文件都在这里。通过webapps中的项目生成的!可以把这个目录下的内容删除,再次运行时会生再次生成work目录。当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件,生成的java和class文件都会存放到这个目录下。 8. LICENSE:许可证。 9. NOTICE:说明文件。 > 通过url访问服务器: > > url:`http://服务器的ip地址:端口号/项目名/被访问的页面` > > 示例:http://localhost:8080/test > > 注: (1)启动tomcat后,tomcat会加载部署在服务器端的所有项目 > > (2) 浏览器访问的页面是服务器端的页面,基本上服务器的项目和工作空间的项目要保持一致 #### IntelliJ IDEA配置Tomcat 1. 点击Run---Edit Configurations... ![image-20201119140937936](https://i.loli.net/2020/11/19/1Cn2XGP9qJDSbps.png) 2. 点击左侧`+`号,找到Tomcat Server---Local ![image-20201119141510118](https://i.loli.net/2020/11/19/jNtDmAagkslSCHQ.png) 3. 在Tomcat Server -> local-> Server -> Application server项目下,点击 Configuration ,找到本地 Tomcat 服务器,再点击 OK按钮。 ![](https://i.loli.net/2020/11/19/lzRZYnPJ7isoBuD.png) 至此,IntelliJ IDEA配置Tomcat完成。 #### 创建JavaWeb项目 1. 点击左上角的File-->New-->Project,选择Java Enterprise,在Application Sever中找到自己的Tomcat,同时勾中Web Application 和 Create web.xml,点击next,输入项目名称和路径,点击finish即可。 ![](https://i.loli.net/2020/11/19/ObvQ3RBUK5f4ptT.png) 2. 创建好之后文件结构如下: ![](https://i.loli.net/2020/11/19/phctYUqvHFOK87P.png) 3. 在WEB-INF文件夹下创建classes和lib文件夹,名字不可改 * classes用来存放java文件编译后的字节码文件 * lib用来存放项目所需的jar依赖包 4. 配置jar包和classes包 (1) 在File中找到Project Structure,点击Modules,选择Paths,选中Use module compile output path,把路径改成刚刚创建的classes文件夹,点击apply ![](https://i.loli.net/2020/11/19/2IEsGwbJ7cfHZWo.png) 如果classes文件夹没有变颜色,就右键点击classes文件夹,选择Mark Diectory as —>Exclued ![image-20201119152102261](https://i.loli.net/2020/11/19/qVIJ6zkiA8pamwF.png) (2) 选择Dependencies,点右边的`+`号 选择1 JARs or directories,选择刚创建的lib文件夹,点ok,选择Jar Directory,点击ok。 ![image-20201119150048728](https://i.loli.net/2020/11/19/oRJ6tG2417QYXyB.png) 5. 部署项目:将本地项目安装到服务器中 (1) idea主界面顶部菜单栏点击Run ,选择Edit Configurations,可以配置一些信息 ![image-20201119151516787](https://i.loli.net/2020/11/19/YBGwXlTr8RtyEgC.png) (2) 运行 ![image-20201119151559538](https://i.loli.net/2020/11/19/yYjEz69HNfcUKVs.png) ![](https://i.loli.net/2020/11/19/lWfI9AZjS8RKsuB.png) 运行成功 #### tomcat常用操作 ##### 修改端口号 修改配置文件:/conf/server.xml 的port ```xml ``` 如果将端口号改成80,则访问项目时的请求路径就可以省略端口号。 ##### 管理项目 给tomcat增加管理员信息:配置conf/tomcat-users.xml 在tomcat-users.xml文件中添加下面代码 ```xml ``` ![](https://i.loli.net/2020/11/19/T8Jt6WEqbKahwuR.png) 点击Manager App会弹出下面这个框,我们输入tomcat-users.xml文件中添加的管理员账户密码就可以看到当前tomcat服务器中的所有web应用。 ![](https://i.loli.net/2020/11/19/O9NwRqvClfs4kHu.png) ![](https://i.loli.net/2020/11/19/amVHeL2jqshwYtA.png) 注意:tomcat启动的时候会加载webapps下的所有项目