首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Tomcat的构造和对请求的处理

2012-08-11 
Tomcat的结构和对请求的处理Tomcat的结构和对请求的处理Writenby 蒋彪@东京2012/7/3 1.问题起因是今天帮一

Tomcat的结构和对请求的处理

Tomcat的结构和对请求的处理

Writenby 蒋彪@东京

2012/7/3

 

1.  问题

起因是今天帮一个小朋友装开发环境。

工程是javaEE的,基于maven管理依赖,开发工具是eclipse和tomcat。

工程怎么搞都启动出错,最后发现是该工程的web.xml中定义了自己的defaultservlet和jspservlet。

而tomcat启动的时候,会首先读取conf/web.xml下的定义,两者之间肯定要有一个被comment掉。

tomcat玩了这么多年,有必要把东西理一遍。

 

2.    Tomcat的大结构

tomcat启动之后,将作为一个运行于JVM上的进程存在。

 

Tomcat的构造和对请求的处理

tomcat从层次上,最外围是server本身。

然后server里可以有多个service。每个service可以监听几个不同的端口号。

接下来,每个service里有多个connector。不同的connector监听不同的端口好,使用不同的通信协议。多个connector连接同一个container,container管辖多个webapp。

所有的这一切都定义在server.xml中。


 

作为tomcat的启动而言,一般来说

①    根据conf/server.xml启动所有必要组建

②    加载conf/web.xml中所有配置

③    依次加载所有webapp中的web.xml

 

3.    Tomcat中请求的处理

假设来自客户的请求为:http://www.xxx.com/test/index.jsp

a.     请求被发送到该物理机器的默认端口80,被在那里侦听的Coyote HTTP/1.1 Connector获得 (没有考虑apache)

b.     Connector封装http请求,并且从线程池中唤醒一个线程,将任务调度给该线程

    被唤醒线程在Engine中寻找www.xxx.com匹配的虚拟主机被找到的Host获得请求/test/index.jsp,匹配它所拥有的所有Context Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为""的Context去处理) path="/test"的Context获得请求/index.jspContext开始解析http请求,首先由filter处理,再次交给servlet

现行的Web框架都是由filter拦截

顺便提一下,这也就是为什么很多人说servlet不是线程安全的。

    Context把执行完了之后的HttpServletResponse对象返回给Host Host把HttpServletResponse对象返回给Engine Engine把HttpServletResponse对象返回给Connector Connector把HttpServletResponse对象返回给客户browser线程重回wait状态

 

#以上#

 

热点排行