Tomcat启动过程(三):从SocketProcessor到Container
1、Http11Protocol中的内部类Http11ConnectionHandler,执行其process方法
if (processor == null) {
processor = createProcessor();
}
SocketState state = processor.process(socket);//交给processor处理
2、上面的processor为Http11NioProcessor类的实例,在其process方法中,会调用适配器adapter进行数据的处理
adapter.service(request, response);
这里的adapter实际为CoyoteAdapter类型的实例,该adapter的作用就是作为从connector到container的入口来使用的
3、下面是adapter的处理过程,从该适配的connector中获取容器,进入容器的管道处理流程
public void service(org.apache.coyote.Request req,org.apache.coyote.Response res)throws Exception {
Request request = (Request) req.getNote(ADAPTER_NOTES);
Response response = (Response) res.getNote(ADAPTER_NOTES);
// Parse and set Catalina and configuration specific
// request parameters
req.getRequestProcessor().setWorkerThreadName(Thread.currentThread().getName());
if (postParseRequest(req, request, res, response)) {//postParseRequest用来解析request请求
connector.getContainer().getPipeline().getFirst().invoke(request, response);//这里开始进入容器的处理过程,返回结果为response
}
……
}
4、进入容器container处理后,就要使用到容器的一个重要的结构:管道pipeline。每个容器类组件都有一个pipeline属性,这个属性控制请求的处理过程,在pipeline上可以添加Valve,进而可以控制请求的处理流程。可以将请求想象成水的流动,请求需要在各个组件之间流动,中间经过若干的水管和水阀,等所有的水阀走完,请求也就处理完了,而每个组件都会有一个默认的水阀(以Standard作为类的前缀)来进行请求的处理,如果业务需要的话,可以自定义Valve,将其安装到容器中。
下面是对整个流程的一些图解,可以很形象地用来帮助理解:整个流程的最终目的就是走到Wrapper的地方,找到正确的Servlet,执行对应的过滤器和doService方法,返回response



Tomcat启动过程(三):从SocketProcessor到Container的更多相关文章
- Tomcat架构解析(二)-----Connector、Tomcat启动过程以及Server的创建过程
Connector用于跟客户端建立连接,获取客户端的Socket,交由Container处理.需要解决的问题有监听.协议以及处理器映射等等. 一.Connector设计 Connector要实现的 ...
- Tomcat启动过程原理详解 -- 非常的报错:涉及了2个web.xml等文件的加载流程
Tomcat启动过程原理详解 发表于: Tomcat, Web Server, 旧文存档 | 作者: 谋万世全局者 标签: Tomcat,原理,启动过程,详解 基于Java的Web 应用程序是 ser ...
- CentOS7 Tomcat 启动过程很慢,JVM上的随机数与熵池策略
1. CentOS7 Tomcat 启动过程很慢 在centos启动官方的tomcat时,启动过程很慢,需要几分钟,经过查看日志,发现耗时在这里:是session引起的随机数问题导致的: <co ...
- 浅读tomcat架构设计和tomcat启动过程(1)
一图甚千言,这张图真的是耽搁我太多时间了: 下面的tomcat架构设计代码分析,和这张图息息相关. 使用maven搭建本次的环境,贴出pom.xml完整内容: <?xml version=&qu ...
- Tomcat源码分析 (七)----- Tomcat 启动过程(二)
在上一篇文章中,我们分析了tomcat的初始化过程,是由Bootstrap反射调用Catalina的load方法完成tomcat的初始化,包括server.xml的解析.实例化各大组件.初始化组件等逻 ...
- 转:Tomcat启动过程中找不到JAVA_HOME JRE_HOME的解决方法
转自:http://blog.sina.com.cn/s/blog_61c006ea0100l1u6.html 原文: 在XP上明明已经安装了JDK1.5并设置好了JAVA_HOME,可偏偏Tomca ...
- Tomcat启动过程中找不到JAVA_HOME解决方法
在XP上明明已经安装了JDK1.5并设置好了JAVA_HOME,可偏偏Tomcat在启动过程中找不到. 报错信息如下:Neither the JAVA_HOME nor the JRE_HOME en ...
- Tomcat启动过程中找不到JAVA_HOME JRE_HOME的解决方法
转自:http://blog.sina.com.cn/s/blog_61c006ea0100l1u6.html 原文: 在XP上明明已经安装了JDK1.5并设置好了JAVA_HOME,可偏偏Tomca ...
- tomcat容器启动的启动过程(三)
Catalina的start方法 /** * Start a new server instance. */ public void start() { if (server == null) { l ...
随机推荐
- JAVA集合小结
下面是我自己画的,关系画得没上面好,但我自己看着清楚些 还有一张下载来的: 有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否 否 Hash ...
- 专注于提高“人肉测试”效率,Bugtags已完成600万元天使轮融资
导语:近日,专注于移动测试的缺陷发现及管理工具“Bugtags”创始人张磊独家透露,Bugtags已完成600万元天使轮投资,投资方为高捷资本. 近日,专注于移动测试的缺陷发现及管理工具“Bugtag ...
- mysql 增加用户
mysql 增加用户 3.增加用户: (注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符) 格式:grant select on 数据库.* to 用户名@登录 ...
- C#开发COM组件供其他开发环境或工具调用介绍(转)
由于工作原因涉及到这一块的开发,由于之前并未接触过,所以本篇文章也是在参考了各种资料后,自己实现并通过通过测试之后所整理的备忘录以及一些个人观点. 希望对刚接触这类型开发的朋友有所帮助,若有不足之处还 ...
- LeetCode 67. Add Binary
Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...
- Hbase基础操作
$HBASE_HOME/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'tablename'
- Goldengate trial队列维护
查看进程信息: Info replicat_name $Info replicat_name showch 注: 可以查看到详细的关于checkpoint的信息,用于查看GoldenGate进程处 ...
- Html5——地理定位及地图
常用的navigator.geolocation对象有以下三种方法: 获取当前地理位置:navigator.geolocation.getCurrentPosition(success_callbac ...
- Iptables 防火墙开放常见的22,53,80端口
用iptables防火墙 iptables -F # 允许包从22端口进入 iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许从22端口进入的包返回 ...
- C语言之实现控制台光标随意移动
原理引入windows.h,首先是要获得输入的东西,然后通过判断: 1.方向键:执行上下左右的移动功能 2:回车键:执行换行的功能. 3.普通键:输入功能. 终点就是要获取到屏幕上的坐标,当按下了方向 ...