## 一、Tomcat 专题内容
### 1、Tomcat 专题 根本:
- Tomcat根本
- Tomcat架构
- Tomcat Jasper引擎
- Tomcat做事器设置
### 2、Tomcat 专题 进阶:
- Tomcat Web运用配置
- Tomcat 管理配置
- Tomcat JVM 配置
- Tomcat集群
- Tomcat安全
- Tomcat性能调优
- Tomcat 附件功能
- Tomcat WebSocket案例
## 二、Tomcat专题 - Tomcat根本 - Web干系观点
### 1、软件架构
1) C/S: 客户端/做事器端 ‐‐‐> 如: QQ , 360 ....。
2) B/S: 浏览器/做事器端 ‐‐‐> 如:京东, 网易 , 淘宝等。
### 2、资源分类
1)静态资源:
所有用户访问后,得到的结果都是一样的,称为静态资源。静态资源可以直接被浏览器解析。如: html,css,JavaScript,jpg。
2)动态资源:
每个用户访问相同资源后,得到的结果可能不一样 , 称为动态资源。动态资源被访问后,须要先转换为静态资源,再返回给浏览器,通过浏览器进行解析。如:servlet/jsp,php,asp....。
### 3、网络通信三要素
1)IP:电子设备(打算机)在网络中的唯一标识。
2)端口:运用程序在打算机中的唯一标识。 0~65536
3)传输协议:规定了数据传输的规则。
### 4、根本协议:
1)tcp : 安全协议,三次握手。 速率稍慢。
2)udp:不屈安协议。 速率快。
## 三、Tomcat专题 - Tomcat根本 - 常见的Web做事器软件
### 1、做事器干系观点
1)做事器:安装了做事器软件的打算机。
2)做事器软件:吸收用户的要求,处理要求,做出相应。
3)web做事器软件:吸收用户的要求,处理要求,做出相应。在web做事器软件中,可以支配web项目,让用户通过浏览器来访问这些项目。
### 2、常见web做事器软件
1)webLogic:oracle 公司,大型的JavaEE做事器,支持所有的JavaEE规范,收费的,常日运用于金融领域。
2)webSphere:IBM公司,大型的JavaEE做事器,支持所有的JavaEE规范,收费的,常日运用于金融领域。
3)JBOSS:JBOSS公司的,大型的JavaEE做事器,支持所有的JavaEE规范,收费的,常日运用于金融领域。
4)Tomcat:Apache基金组织,中小型的JavaEE做事器,仅仅支持少量的JavaEE规范
servlet/jsp。开源的,免费的,常日运用于互联网项目。
## 四、Tomcat专题 - Tomcat根本 - Tomcat安装及目录构造
### 1、Tomcat 历史
1) Tomcat 最初由Sun公司的软件架构师 James Duncan Davidson 开拓,名称为
“JavaWebServer”。
2) 1999年 ,在 Davidson 的帮助下,该项目于1999年于apache 软件基金会旗下的
JServ 项目合并,并发布第一个版本(3.x), 即是现在的Tomcat,该版本实现了
Servlet2.2 和 JSP 1.1 规范 。
3) 2001年,Tomcat 发布了4.0版本, 作为里程碑式的版本,Tomcat 完备重新设计了其架构,并实现了 Servlet 2.3 和 JSP1.2规范。
4)2005 年景为 Apache 顶级项目。
### 2、Tomcat 下载安装
1)Tomcat下载
https://tomcat.apache.org/download-80.cgi
2)Tomcat 安装
将下载的 .zip 压缩包 , 解压到系统的目录(建议是没有中文不带空格的目录)下即可。
### 3、Tomcat 目录构造
目录
目录下文件
解释
--
--
--
bin
/
存放Tomcat的启动、停滞等批处理脚本文件
startup.bat , startup.sh
用于在windows和linux下的启动脚本
shutdown.bat , shutdown.sh
用于在windows和linux下的停滞脚本
conf
/
用于存放Tomcat的干系配置文件
Catalina
用于存储针对每个虚拟机的Context配置
context.xml
用于定义所有web运用均需加载的Context配置,如果web运用指定了自己的context.xml,该文件将被覆盖
catalina.properties
Tomcat 的环境变量配置
catalina.policy
Tomcat 运行的安全策略配置
logging.properties
Tomcat 的日志配置文件, 可以通过该文件修正Tomcat 的日志级别及日志路径等
server.xml
Tomcat 做事器的核心配置文件
tomcat-users.xml
定义Tomcat默认的用户及角色映射信息配置
web.xml
Tomcat 中所有运用默认的支配描述文件, 紧张定义了根本Servlet和MIME映射。
lib
/
Tomcat 做事器的依赖包
logs
/
Tomcat 默认的日志存放目录
webapps
/
Tomcat 默认的Web运用支配目录
work
/
Web 运用JSP代码天生和编译的临时目录
| 目录 | 目录下文件 | 解释 |
|--|--|--|
| bin | / | 存放Tomcat的启动、停滞等批处理脚本文件 |
| | startup.bat , startup.sh | 用于在windows和linux下的启动脚本 |
| | shutdown.bat , shutdown.sh | 用于在windows和linux下的停滞脚本 |
| conf | / | 用于存放Tomcat的干系配置文件 |
| | Catalina | 用于存储针对每个虚拟机的Context配置 |
| | context.xml | 用于定义所有web运用均需加载的Context配置,如果web运用指定了自己的context.xml,该文件将被覆盖 |
| | catalina.properties | Tomcat 的环境变量配置 |
| | catalina.policy | Tomcat 运行的安全策略配置 |
| | logging.properties | Tomcat 的日志配置文件, 可以通过该文件修正Tomcat 的日志级别及日志路径等 |
| | server.xml | Tomcat 做事器的核心配置文件 |
| | tomcat-users.xml | 定义Tomcat默认的用户及角色映射信息配置 |
| | web.xml | Tomcat 中所有运用默认的支配描述文件, 紧张定义了根本Servlet和MIME映射。 |
| lib | / | Tomcat 做事器的依赖包 |
| logs | / | Tomcat 默认的日志存放目录 |
| webapps | / | Tomcat 默认的Web运用支配目录 |
| work | / | Web 运用JSP代码天生和编译的临时目录 |
| | | |
### 4、Tomcat 启动停滞(必须安装 JDK,并配置好环境变量)
1)打开CMD窗口:输入 java -version 查询是否安装了JDK并配置了环境变量。
```java
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\Administrator>java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
C:\Users\Administrator>
```
2)Tomcat 启动:
- windows 系统:双击 bin/startup.bat 文件。
- linux 系统:bin/startup.sh
3)Tomcat 停滞:
- windows 系统:双击 bin/shutdown.bat 文件(也可以直接关闭CMD窗口)。
- linux 系统:bin/shutdown.sh
4)Tomcat 访问:http://localhost:8080
## 五、Tomcat专题 - Tomcat根本 - Tomcat源码支配运行
### 1、下载 Tomcat 源码
地址: https://tomcat.apache.org/download-80.cgi
apache-tomcat-8.5.42-src.zip
### 2、解压 apache-tomcat-8.5.42-src.zip 源码压缩包
apache-tomcat-8.5.42-src 目录。
### 3、进入解压目录,并创建一个目录,命名为 home , 并将 conf、webapps目录 移入home 目录中。
apache-tomcat-8.5.42-src
apache-tomcat-8.5.42-src\home
apache-tomcat-8.5.42-src\home\conf\
apache-tomcat-8.5.42-src\home\webapps\
### 4、在当前目录下创建一个 pom.xml 文件,引入 tomcat 的依赖包
apache-tomcat-8.5.42-src\pom.xml
```java
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.tomcat</groupId>
<artifactId>apache‐tomcat‐8.5.42‐src</artifactId>
<name>Tomcat8.5</name>
<version>8.5</version>
<!-- Ctrl+Alt+L 快速格式化 pom.xml 文件 -->
<build>
<finalName>Tomcat8.5</finalName>
<sourceDirectory>java</sourceDirectory>
<!-- <testSourceDirectory>test</testSourceDirectory> -->
<resources>
<resource>
<directory>java</directory>
</resource>
</resources>
<!--
<testResources>
<testResource>
<directory>test</directory>
</testResource>
</testResources>
-->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3</version>
<configuration>
<encoding>UTF‐8</encoding>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>ant</groupId>
<artifactId>ant</artifactId>
<version>1.7.0</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>javax.xml</groupId>
<artifactId>jaxrpc</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.eclipse.jdt.core.compiler</groupId>
<artifactId>ecj</artifactId>
<version>4.5.1</version>
</dependency>
</dependencies>
</project>
<!-- D:\java_test\Intesij_idea\project_tomcat\apache-tomcat-8.5.42-src\pom.xml -->
```
### 5、打开 idea,创建一个空项目 project_tomcat,导入 tomcat 源码工程。
1)打开 idea,创建一个空项目 project_tomcat
```java
--> idea --> File
--> New --> Project
--> Empty Project
--> Next
--> Groupld : ( djh.it )
Artifactld : ( jedis )
Version : 1.0-SNAPSHOT
--> Project Name: ( project_tomcat )
Project Location: ( D:\java_test\Intesij_idea\project_tomcat )
--> Finish
```
2)把解压的 tomcat 源码目录,复制到 idea 空项目 project_tomcat 目录中。
如:D:\java_test\Intesij_idea\project_tomcat\ 目录中。
3)首先确认在你的 idea 中,配置好 maven 及 maven 仓库。
```java
--> idea --> File
-->Settings
--> Build,Execution,Deployment
--> Build Tools
--> Maven
Maven home diretory: (你的maven安装路径,如:D:/Maven/apache-maven-3.3.9)
User settings file: ( 你的maven配置文件settings.xml路径,如:D:\Maven\apache-maven-3.3.9\conf\settings.xml )
Local repository: ( 你的maven本地仓库路径,如:D:\Maven\maven_repository )
```
4)导入 tomcat 源码工程 pom.xml 文件到 空项目 project_tomcat 中。
```java
--> idea
--> Project Structure
--> Modules
--> 点击 “+”
--> Import Modules
--> 找到 tomcat 源码下,新创建的 pom.xml 主配置文件。 (如:D:\java_test\Intesij_idea\project_tomcat\apache-tomcat-8.5.42-src\pom.xml 配置文件。)
--> 点击 OK。
--> Apply
--> 点击 OK。
# 或者也可以点击 idea 右边 Maven 实行同样操作。
```
### 6、配置 idea 的启动类, 配置 MainClass , 并配置 VM 参数。
1)找到 tomcat 启动类(入口类main()方法)
```java
apache-tomcat-8.5.42-src\java\org\apache\catalina\startup\Bootstrap.java
project_tomcat\apache-tomcat-8.5.42-src\java\org\apache\catalina\startup\Bootstrap.java
D:\java_test\Intesij_idea\project_tomcat\apache-tomcat-8.5.42-src\java\org\apache\catalina\startup\Bootstrap.java
```
2)配置 VM 参数
```java
‐Dcatalina.home=D:\java_test\Intesij_idea\project_tomcat\apache-tomcat-8.5.42-src\home
‐Dcatalina.base=D:\java_test\Intesij_idea\project_tomcat\apache-tomcat-8.5.42-src\home
‐Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
‐Djava.util.logging.config.file=D:\java_test\Intesij_idea\project_tomcat\apache-tomcat-8.5.42-src\home\conf\logging.properties
‐Dcatalina.home=D:/java_test/Intesij_idea/project_tomcat/apache-tomcat-8.5.42-src/home
‐Dcatalina.base=D:/java_test/Intesij_idea/project_tomcat/apache-tomcat-8.5.42-src/home
‐Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
‐Djava.util.logging.config.file=D:/java_test/Intesij_idea/project_tomcat/apache-tomcat-8.5.42-src/home/conf/logging.properties
```
3)配置 idea 的启动类
```java
idea --> Add Configuration...
--> 点击“+”
--> Application
Name: ( BootStrap )
Main class : ( org.apache.catalina.startup.Bootstrap )
(解释:点击后面 “...” 定位到 Project 项目中的 Bootstrap.java 类)
VM options : 复制上面配置 VM 参数,即:
( ‐Dcatalina.home=D:/java_test/Intesij_idea/project_tomcat/apache-tomcat-8.5.42-src/home
‐Dcatalina.base=D:/java_test/Intesij_idea/project_tomcat/apache-tomcat-8.5.42-src/home
‐Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
‐Djava.util.logging.config.file=D:/java_test/Intesij_idea/project_tomcat/apache-tomcat-8.5.42-src/home/conf/logging.properties )
--> Apply
--> 点击OK。
```
### 7、启动主理法,运行 Tomcat,访问 Tomcat 。
### 8、如果启动 tomcat 涌现缺点
涌现上述非常的缘故原由,是我们直接启动 org.apache.catalina.startup.Bootstrap 的时候没有加载 JasperInitializer,从而无法编译 JSP。
办理办法是:
1)在 tomcat 的源码 ContextConfig 中的 configureStart 函数中手动将 JSP 解析器初始化:
```java
# 搜索 ContextConfig.java 类,添加如下初始化:
webConfig();
context.addServletContainerInitializer(new JasperInitializer(), null);
```
2)重启 tomcat 就可以正常访问了。