## 一、Tomcat 专题内容

### 1、Tomcat 专题 根本:

- Tomcat根本

jspphpasp工作原理 芒刃出鞘Tomcat 焦点道理解析一 Angular

- 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 就可以正常访问了。