这位大侠,这是我的公众号:程序员江湖。 
分享程序员面试与技术的那些事。 干货满满,关注就送。 

servlet+tomcat原理剖析

 

servlet工作原理分析

 

servlet是运行在服务器上的java程序。

1ContextConfig负责web应用的配置文件的解析

2servlet被包装为wrapper对象,被添加到context中作为子容器,而web.xml被解析到context中,所以context才是真正的servlet容器,一个web应用对应一个context容器。

 

3

 

到达wrapper后还可能经过listener和filter。

listener涵盖servlet生命周期的每个事件。

filter用来转发请求和处理请求,传递filterchain对象,使用责任链模式,有init,dofilter,destroy这样的生命周期。

url-pattren的解析由mapper类来定义和完成。会分配到指定的servlet或者filter。

 

 

第十一章:

tomcat结构

 

核心是connector和container

 

1container只有一个,connector有多个,多个connector和一个container形成一个service,service由server管理,tomcat的生命周期由server控制。

 

2service可以为外部提供服务。其中connector负责创建 request和response用来接受请求和交换数据。

 

3container通过多线程处理多个connector的请求,是设计的核心,connector可分为connetor、processer、protocal。

 

其中connector封装socket成为request和response,并交给container进行处理。

 

4container包含engine host context wrapper,四个组件是父子关系。

 

5、

 

engine没有父容器

 

一个context对应一个应用,但需要war时就要有host容器,因为要靠host解析web.xml

 

 

 

使用wrapper容器可以实现servlet和tomcat容器的脱耦,在此容器中会调用servlet的init方法、然后调用filter方法,接着执行service。

 

 

设计模式:门面设计模式:

需要相互通信,但又不想暴露其他接口和数据时使用。

 

 

 

观察者模式:lifecycle和listener监听着servlet。

 

 

 

命令模式:connector封装请求作为命令传给container

 

责任链模式:从engine到host到context再到wrapper,体现责任链。