310 lines
18 KiB
Markdown
310 lines
18 KiB
Markdown
---
|
||
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。
|
||
|
||

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

|
||
|
||
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
|
||
<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"/>
|
||
```
|
||
|
||

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

|
||
|
||
|
||
|
||

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