My-Blog-Hexo/source/_posts/JavaWeb环境搭建-Tomcat.md
2024-12-18 20:27:43 +08:00

310 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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 ConsortiumW3C和互联网工程任务组Internet Engineering Task ForceIETF进行协
最终发布了一系列的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.batstartup.bat用来启动Tomcatshutdown.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下的所有项目