Tomcat源码分析
Tomcat架构
连接器 Coyote
Catalina容器
源码分析
启动流程
Tomcat请求处理流程
Tomcat是通过Mapper组件来完成这个任务。
Mapper组件的功能就是将一个URL定位到一个Servlet.
Host容器里配置的域名、Context容器里的web应用路径,以及Wrapper容器里Servlet映射的路径.
当一个请求到来时,Mapper组件通过解析请求URI里的域名和路径,再到自己保存的Map里去查找,就能定位到一个servlet。
请你注意,一个请求URL最后只会定位到一个wrapper容器,也就是一个servlet。
pipeline是责任链模式
在Tomcat中定义了pipeline 和 valve 两个接口,Pipeline 用于构建责链,后者代表责任链上的每人处理器。pipeline 中维护了个其础的valve,它始终位于pipeline的未端( 最后执行),封装了具体的请求处理和输出响应的过程,当然,我们也可以调用addvalve()方法,为Pipeline 添如其他的valve ,后添加的yalve 位于某的valve前,并按照添加顺宝执行。Pipiline通过获得首人Valve来启动整合链条的执行。
Jasper模板引擎
Jasper模块 是Tomcat的JSP核心引擎,我们知道JSP本质上是一个servlet,Tomcat使用Jasper对JSP语法进行解析,生成Servlet并生成class字节码,用户在进行访问jsp时,会访问servlet,最终将访问的结果直接响应在浏览器端。
另外,在运行的时候,Jasper还会检测JSP文件是否修改,如果修改,则会重新编译JSP文件。
JSP编译方式:运行时编译、预编译
Server.xml
给连接器指定共享线程池
Connector
Engine
HOST
Nginx
概率:1/3 2/3
Session共享方案
方案1:nginx的负载均衡策略 ip_hash
方案2:session复制:tomcat内部广播机制
方案3:sso单点登录
安全:
1.修改shutdown命令 确保配置安全
2.使用https 保证传输安全
性能
WebSocket 和 Tomcat对WebSocket的支持