---
title: JavaWeb环境搭建(Tomcat)
date: 2020-12-12 13:47:17
tags:
- JavaWeb
- tomcat
categories:
- JavaWeb
---

## HTTP 协议

### 简介

超文本传输协议（`HyperText Transfer Protocol`，缩写：HTTP）是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。

<!--more-->

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协议中共定义了八种方法（动作）来以不同方式操作指定的资源：

*   **<font color=red>GET</font>**
    向指定的资源发出「显式」请求。使用GET方法应该只用在读取数据，而不应当被用于产生「副作用」的操作中，例如在Web Application中。其中一个原因是GET可能会被网络爬虫等随意访问。
*   **HEAD**
    与GET方法一样，都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于，使用这个方法可以在不必传输全部内容的情况下，就可以获取其中「关于该资源的信息」(元信息或称元数据)。
*   **<font color=red>POST</font>**
    向指定资源提交数据，请求服务器进行处理（例如提交表单或者上传文件）。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源，或二者皆有。
*   **<font color=red>PUT</font>**
    向指定资源位置上传其最新内容。
*   **<font color=red>DELETE</font>**
    请求服务器删除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有着更加强大的功能，还可以实现子程序之间的切换； <br>2. 安全性强，只适用于局域网，相对来说其安全比较好； <br>3. 处理信息能力强，C/S的通信量相对B/S是少了很多的；<br>4. 速度较快，更加利于处理大量数据。 | 1. 只适用于局域网； <br>2. 客户端要安装专用的客户端软件； <br>3. 每当系统升级时，每一台客户机需要重新安装； <br>4. 操作系统可能会有限制。 |
| B/S  | 1. 客户端零维护；<br>2. 系统扩展容易； <br>3. 在电脑可上网的前提下，可以在任何操作系统上使用并且不需要安装专门的软件 。 | 1. 相对C/S来说交互能力差，不能够在子程序间自由切换；<br>2. 安全性较差，B/S其安全性只能靠数据库服务器上管理密码的数据库来保证；<br>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
<Connector port="8888" protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443" />
```

如果将端口号改成80，则访问项目时的请求路径就可以省略端口号。

##### 管理项目

给tomcat增加管理员信息：配置conf/tomcat-users.xml

在tomcat-users.xml文件中添加下面代码

```xml
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>
```

![](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下的所有项目