百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

# 利刃出鞘_Tomcat 核心原理解析(一)

csdh11 2025-03-03 18:11 1 浏览

# 利刃出鞘_Tomcat 核心原理解析(一)

## 一、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

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

4.0.0

org.apache.tomcat

apache‐tomcat‐8.5.42‐src

Tomcat8.5

8.5

Tomcat8.5

java

java

org.apache.maven.plugins

maven-compiler-plugin

2.3

UTF‐8

1.8

1.8

junit

junit

4.12

test

org.easymock

easymock

3.4

ant

ant

1.7.0

wsdl4j

wsdl4j

1.6.2

javax.xml

jaxrpc

1.1

org.eclipse.jdt.core.compiler

ecj

4.5.1

```

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

相关推荐

万字硬核解析!RocketMQ集群环境搭建

一、RocketMQ集群架构通过之前安装单台RocketMQ,并演示了消息的收发,已经基本了解了RocketMQ是怎么样工作的,下面就来搭建一个集群...

推荐一款单机10W+的可用即时通讯工具

今天给大家推荐一款单机10W+的可用即时通讯工具,她就是:courier-信使。她是一款简洁轻量的即时通讯工具。?展示截图...

tar、gzip、zip、jar是什么,怎么查看?

...

建议收藏!深入理解Java虚拟机:JVM垃圾回收算法+垃圾收集器

02JVM垃圾回收算法2.1什么是垃圾回收?...

Spring boot——Actuator 详解

一、什么是ActuatorSpringBootActuator模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP跟踪等,帮助我们监控和管理SpringBoot应用。...

JVM 参数调优

时至今日,生产环境中依旧是JDK8占据主流,因此,本文将围绕JDK8常用的CMS和G1进行相关参数的讲解。...

Java开发工程师进阶篇- 扫盲Java中的各种锁,你学会了吗?

-Java中锁的概念...

Linux入门手册

Linux是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的性能稳定的操作系统,可免费使用并自由传播。Linux是众多操作系统之一,目前流行的服务器和PC端操作系统有Li...

java:Cassandra入门与实战——下

Cassandra入门与实战——上...

带你来搭建虚拟机和Redis集群,记得收藏

来源于公众号Java爱好者社区,作者东升的思考1、前言我们看到分析Redis使用或原理的文章不少,但是完整搭建一套独立的Redis集群环境的介绍,并不是很多或者说还不够详细。那么,本文会手把...

做开发这么久了,还不会搭建服务器Maven私有仓库?这也太Low了吧

大家好,我是冰河~~...

JDK 17 之 JVM调优 史诗级 教程

JDK17之JVM调优史诗级教程文章目录...

带你认识JDK8中超nice的Native Memory Tracking

本文分享自华为云社区《NativeMemoryTracking详解(1):基础介绍》,作者:毕昇小助手。0.引言我们经常会好奇,我启动了一个JVM,他到底会占据多大的内存?他的内存都消耗在哪...

JVM 堆外内存泄漏排查

现象:operation服务持续内存增长不释放导致超过80%阈值告警,通过观察内存不会下降,而且占用内存为14G超过了jvm参数-Xmx10G的限制...

Spring Boot整合MybatisPlus和Druid

在Java中,我比较ORM...