---
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。

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/)

2. 解压或安装到一个没有特殊符号的目录中(最好不要包含中文路径)我这里下载的是zip包,解压即可

3. 配置环境变量
右键点击此电脑,打开属性,找到高级系统设置->环境变量->系统变量
(1) 新建一个变量CATALINA_HOME,值为tomcat安装的路径,结尾不要分号

(2) 配置Path变量,找到系统变量中的Path变量,点击编辑,新建一个,值为`%CATALINA_HOME%\bin`

(3) 配置ClassPath变量,找到系统变量中的ClassPath变量(没有就新建一个),值为`%CATALINA_HOME%\servlet-api.jar`

4. 将tomcat9安装到windows服务中**(可做可不做)**
打开cmd命令行输入`service install Tomcat9`

如果报以下错误:
```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服务。

#### tomcat内目录的含义

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...

2. 点击左侧`+`号,找到Tomcat Server---Local

3. 在Tomcat Server -> local-> Server -> Application server项目下,点击 Configuration ,找到本地 Tomcat 服务器,再点击 OK按钮。

至此,IntelliJ IDEA配置Tomcat完成。
#### 创建JavaWeb项目
1. 点击左上角的File-->New-->Project,选择Java Enterprise,在Application Sever中找到自己的Tomcat,同时勾中Web Application 和 Create web.xml,点击next,输入项目名称和路径,点击finish即可。

2. 创建好之后文件结构如下:

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

如果classes文件夹没有变颜色,就右键点击classes文件夹,选择Mark Diectory as —>Exclued

(2) 选择Dependencies,点右边的`+`号 选择1 JARs or directories,选择刚创建的lib文件夹,点ok,选择Jar Directory,点击ok。

5. 部署项目:将本地项目安装到服务器中
(1) idea主界面顶部菜单栏点击Run ,选择Edit Configurations,可以配置一些信息

(2) 运行


运行成功
#### tomcat常用操作
##### 修改端口号
修改配置文件:/conf/server.xml 的port
```xml
```
如果将端口号改成80,则访问项目时的请求路径就可以省略端口号。
##### 管理项目
给tomcat增加管理员信息:配置conf/tomcat-users.xml
在tomcat-users.xml文件中添加下面代码
```xml
```

点击Manager App会弹出下面这个框,我们输入tomcat-users.xml文件中添加的管理员账户密码就可以看到当前tomcat服务器中的所有web应用。


注意:tomcat启动的时候会加载webapps下的所有项目