携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第14天,点击查看活动详情
写在前面
tomcat作为一个中间件,相信绝大多数java程序员,多多少少都应该用到过吧。尤其是在springboot还未流行的时候,本地环境,没少跑tomcat服务吧?
我们一般都是直接使用,将我们的web服务,直接部署在tomcat中,然后就能跑起我们的项目。
那这个过程,究竟是怎样的一个原理呢?为什么tomcat能启动我们的应用呢?
相信大多数人都多多少少有过这样的疑问吧?好喽,如果你没这个疑问,说明你还是个初级程序员喽。
小伙,咋们还得多多加把劲喔,毕竟学海无涯,要想成为一个装逼程序员,那我们得努力做到知其然、知其所以然、知其所以必然。
答应我,认真看下去,保准你有收获喔。觉得没啥用得,大家伙轻点喷!!!
Tomcat原理剖析
我们从以下这些方面进行剖析:
- 掌握Tomcat源码分析idea环境的搭建
- 掌握Tomcat服务器编码设计思想【面向接口编程,解耦的关键】
- 掌握Tomcat管理端配置,集群下Session的三大共享方案
- 掌握Tomcat性能调优,Tomcat整体架构:连接器Coyote和Catalina容器
- 理解JSP页面编译期基本原理,Tomcat服务器配置及其原理【server.xml、web.xml】
- 了解Tomcat启动代码执行流程,了解一次请求Tomcat的执行流程
一、Tomcat 介绍
1.1 什么是Tomcat
Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选。
几乎所有Java程序员初期都会使用它,今天我们就带着大家深入Tomcat底层原理。
除了tomcat服务器,我们还可以使用其他的web服务器,那常见还还有以下这些:
- Undertow:是一个采用 Java 开发的灵活的高性能 Web 服务器,提供包括阻塞和基于 NIO 的非堵塞机制。
- JBoss:JBoss公司的,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
- WebLogic:Oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
- WebSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
历史沿革
- Tomcat 最初由Sun公司的软件架构师 James Duncan Davidson 开发,名称为 “JavaWebServer”。
- 1999年,在 Davidson 的帮助下,该项目于 1999 年于apache 软件基金会旗下的 JServ 项目合并, 并发布第一个版本(3.x), 即是现在的Tomcat,该版本实现了Servlet2.2 和 JSP 1.1 规范 。
- 2001年,发布4.0版本,作为里程碑式的版本,Tomcat 完全重新设计了其架构,并实现了 Servlet 2.3 和 JSP1.2规范。
- 2003年,发布5.0版本,实现 Servlet 2.4 和 JSP2.0规范。
- 2007年,发布6.0版本,实现 Servlet 2.5 、JSP2.1 规范。支持EL1.1规范。
- 2011年,发布7.0版本,实现 Servlet 3.0 和 JSP2.2规范。支持EL2.2规范。加入了WebSocket规 范。
- 2014年,发布8.0版本,实现 Servlet 3.1 和 JSP2.3规范。支持EL3.0规范。
- 2016年,发布8.5版本,实现 Servlet 3.1 和 JSP2.3规范。支持HTTP/2,OpenSSL,TLS虚拟主机 和JASPIC1.1。
- 2018年,发布9.0版本,实现 Servlet 4.0 规范。
- 目前 Tomcat 已经更新到 10.0.x版本 , 但是目前企业中的Tomcat服务器, 主流版本是8.5 , 所以 本课程是基于 8.5 版本进行讲解。
好吧,这tomcat的发展历史,大家伙稍微看一下即可。
来吧,我们直接去tomcat官网下载一个tomcat服务器吧:下载地址
点击下载即可。
启动(解压下载下来的zip压缩包)
window下,直接双击startup.bat启动
bin/startup.bat
停止 window下,shutdown.bat启动
bin/shutdown.bat
1.2 目录结构介绍
解压下,我们可以看下以下的目录结构:
对于这些目录结构,我们来做个说明:
目录 | 目录下文件 | 说明 |
---|---|---|
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代码生成和编译的临时目录 |
好了,以上就是tomcat的目录结构说明了。
那我们今天的主要是对tomcat的源码进行构建,这里我们使用idea工具进行tomcat源码构建。
1.3 Tomcat源码学习环境搭建
这里我们先下载好tomcat的源码,tomcat版本:8.5.81
1、源码下载
2、源码idea工程搭建
- 搭建步骤:
1. 解压源码zip压缩包
2. 进入解压目录,并创建文件夹,命名为home 。 并将conf、webapps目录移入home 目录中
3.这里还需拷贝lib目录,到home文件夹里面
这里的lib目录,可以用上面我们下载好的tomcat服务器的lib文件夹
4. 在当前目录下创建一个 pom.xml 文件,引入tomcat相关的依赖
pom.xml
<?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.81-src</artifactId>
<name>Tomcat8.5</name>
<version>8.5</version>
<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.2</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>
5. 导入工程到idea
导入到idea中,并进行maven构建。
6. 配置主函数启动类 ,并配置 VM 参数
这里的vm参数,贴一下喽:
-Dcatalina.home=D:/mywork/tomcat/apache-tomcat-8.5.81-src/home
-Dcatalina.base=D:/mywork/tomcat/apache-tomcat-8.5.81-src/home
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=D:/mywork/tomcat/apache-tomcat-8.5.81-src/home/conf/logging.properties
7. 启动Tomcat 源码主方法, 运行访问
启动成功!
那我们访问一下:
好了,直接访问:http://localhost:8080
即可看到tomcat的界面了!!!
看吧,是不是很简单呢,赶紧动手操作一下吧!!!
基于该系列篇幅比较长,所以今天就先到这里了,剩下的内容,下次再分享了。
好了,以上就是Tomcat原理剖析-tomcat介绍和源码idea构建的分享了。
个人得实操,可能也有些不足,大家轻点喷!!!
个人理解,可能也不够全面,班门弄斧了。
如果觉得有收获的,帮忙点赞、评论、收藏
一下呗!!!
今天的文章Tomcat原理剖析-tomcat介绍和源码idea构建分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/16567.html