文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

tomcat整体设计解析

2023-10-25 11:35

关注

🔔简介

tomcat8源码maven方式组织

使用golang 语言 实现一个http server,只需几行代码即可,为何用java 实现如何“沉重”呢?这背后tomcat 是一个什么角色呢?

package mainimport (    "io"    "net/http")func helloHandler(w http.ResponseWriter, req *http.Request) {    io.WriteString(w, "hello, world!\n")}func main() {    http.HandleFunc("/", helloHandler)    http.ListenAndServe(":12345", nil)}

🔔从各个视角看tomcat

tomcat是一个Servlet 容器?

单纯的思考一下这句话,我们可以抽象出来这么一段代码:

class Tomcat {    List sers;}

如果Tomcat就长这样,那么它肯定是不能工作的,所以,Tomcat其实是这样:

class Tomcat {    Connector connector; // 连接处理器    List sers;}

🔔Servlet规范与tomcat实现

servlet_tomcat_object绿色的类定义 在servlet-api 包中,其它类除自定义外在tomcat 包中

🔔整体架构

Tomcat 要实现 2 个核心功能:

  1. 处理 Socket 连接,负责网络字节流与 Request 和 Response 对象的转化。
  2. 加载和管理 Servlet,以及具体处理 Request 请求。

tomcat_sample

从图上可以看到,最顶层是 Server,这里的 Server 指的就是一个 Tomcat 实例。一个 Server 中有一个或者多个 Service,一个 Service 中有多个连接器和一个容器。

tomcat 的功能简单说 就是让 一堆class文件+web.xml 可以对外支持http

tomcat_war

tomcat_overview

🔔启动过程

Tomcat 独立部署的模式下,我们通过 startup 脚本来启动 Tomcat,Tomcat 中的 Bootstrap 和 Catalina 会负责初始化类加载器,并解析server.xml和启动这些组件。

/usr/java/jdk1.8.0_191/bin/java -Dxx -Xxx org.apache.catalina.startup.Bootstrap start

tomcat_start

分别启动连接管理部分和业务处理部分

tomcat_object_overview

业务处理部分中,各个类的关系 在tomcat server.xml 中体现的也非常直观