9 Servlet工作原理解析

Tomcat为例解释:

Tomcat容器等级中,Context容器直接管理Servlet在容器中的包装类wrapper,故Context运行方式直接影响servlet

计算机生成了可选文字:“ 的 容 器 等 级 中 , context 容 器 直 接 管 理 serviet 在 容 器 中 的 包 装 类 、 , ` t 容 器 如 何 运 行 将 直 接 影 响 serviet 的 工 作 方 工 。 Tom 。 谷 型 如 图 9 , TO , 00 t Container* 器 Engi Host Servlet*?# 00m0 , CO 图 9 刁 Tomcat 容 器 模 型 · 1 可 以 看 出 , Tomcat 的 容 器 分 为 4 个 等 级 , 真 正 管 理 servlet 的 容 器 丿

 

一个Context应用对应一个web工程

 

在添加一个web应用的时候,会创建一个StandardContext容器,并给这个容器必要的参数,urlpath对应的是Tomcat中的访问路径和应用的物理路径。整个配置中最重要的是ContextConfig,这个类主要负责整个Web应用配置的解析工作,最后将这个Context容器加到父容器Host中。

 

Tomcat的启动逻辑

Tomcat的启动逻辑是基于观察者模式设计的,所有容器都会继承Lifecycle接口,它管理着容器的整个生命周期,所有容器的修改和状态的改变都会有他去通知已经注册的观察者。

 

9.1 Servlet容器的启动过程

Context容器初始化状态设为init时,添加到Context容器的Listener将会被调用。ContextConfig继承了LifecycleListener接口,他是在调用Tomcat.addWebapp时被加入到StandardContext容器中。ContextConfighi负责整个web应用的配置文件的解析工作。

ContextConfiginit方法主要完成:

创建用于解析XML配置文件的contextDigester对象

读取默认的context.xml文件

读取默认的Host配置文件

读取默认的Context配置文件

设置ContextDocBase

 

init完成之后,ContextConfig会执行startInternal方法。执行流程如下

创建读取资源文件的对象

创建ClassLoader对象

设置应用程序的工作牡蛎

启动相关的辅助类,loggerrealmresources

修改启动状态,通知感兴趣的观察者

子容器的初始化

获取ServletContext并设置必要的参数

初始化“load on startup”的servlet

 

9.2 web应用的初始化工作

Tomcat在启动的时候会找globalWebXml(在engine工作目录下conf/web.xml中),接着找hostWeXml(在System.getProperty("catalina.base")/conf/${EngineName}/${HostName}/web.xml/default中)进而寻找应用配置文件web.xml,读取并存放在WebXml目录中。

 

为什么servlet包装成StandardWrapper,而不是servlet

之所以将servlet包装成ContextStandardWrapper,是因为StandardWrapperTomcat的一部分,而servlet是独立的web开发标准,不应该强耦合

 

9.3 创建servlet

Tomcat启动的时候读取globalWebXml,并启动org.apache.servlets.DefaultServletorg.apache.jasper.servelt.JspServlet。他们的load-on-map分别是13故会实例化Context

 

9.4 servlet的体系结构

servlet主动关联的是ServletConfigServletRequestServletResponse

ServletRequesthttp的请求

ServletResponseservlet的响应

ServletConfigServlet的一些配置属性

ServletContext:由于Servlet是“握手型交互模式”,即两个模块交换数据需要一定交易场景,交易场景就有ServletContext描述,配置信息就由ServletConfig描述。

 

9.5 Servlet如何工作

一个请求发送过来首先经过org.apache.tomcat.util.http.mapper(该对象保存了Tomcat Container中所有子容器的信息,通过观察者模式实现的)

计算机生成了可选文字:9-10 Request Wrapper Wrapper Serviet Filter fit, web.xml listenero request. getWrapper StandardWrapperValve MapperListener init Mapper est StandardContextValve request. getContext ing Data Pipeline request. getHost StandardEngineVa1ve StandardHostVaIve 9-10 Request

 

9.6 Servlet中的Listener

是基于观察者模式设计的,

Init()初始化接口

doFilter()每个用户请求进来是这个方法都会被调用

Destory()对象销毁是这个方法被调用

 

9.7url-pattern

匹配一次请求是否会执行这个Servlet或者Filter

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值