🔔简介
- 简介
- 从各个视角看tomcat
- tomcat是一个Servlet 容器?
- Servlet规范与tomcat实现
- 整体架构
- 启动过程
- io处理
- connector 架构
- io 和线程模型
- 业务处理
- container 架构
- tomcat的类加载
- Sprint Boot如何利用Tomcat加载Servlet?
- Tomcat如何支持异步Servlet?
- 其它
- tomcat为什么运行war 而不是jar
- 安全
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-api 包中,其它类除自定义外在tomcat 包中
🔔整体架构
Tomcat 要实现 2 个核心功能:
- 处理 Socket 连接,负责网络字节流与 Request 和 Response 对象的转化。
- 加载和管理 Servlet,以及具体处理 Request 请求。
从图上可以看到,最顶层是 Server,这里的 Server 指的就是一个 Tomcat 实例。一个 Server 中有一个或者多个 Service,一个 Service 中有多个连接器和一个容器。
tomcat 的功能简单说 就是让 一堆class文件+web.xml 可以对外支持http
🔔启动过程
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 server.xml 中体现的也非常直观