Servlet工作原理解析

  • Post author:
  • Post category:其他


1 Servlet容器


Tomcat容器分四个等级,真正管理servlet的容器是context容器,一个web应用对应一个context容器,也就是servlet运行时的servlet容器。添加一个web应用创建一个standcontext容器,并且给这个context设置必要的参数,url和path分别代表这个应该在tomcat中的访问路径和物理路径。

2 web应用的初始化

应用的初始化主要是解析web.xml文件,这个文件描述了一个web应用的关键信息,也是一个web应用的入口。

web.xml中各个配置项将会被解析成对应属性保存在webxml对象中,然后webxml对象的属性设置在context容器中。

3 servlet工作原理

3.1创建servlet对象:servlet在load-on-startup配置项大于0,context容器启动就会被实例化;否则,调用时实例化

3.2初始化servlet:调用servlet的init()方法

3.3tomcat接受到请求,根据url从mapper(mapper类保存了container容器中所有子容器信息)中选择正确的servlet容器,并在请求到达最终的servlet之前还要完成必要的一些步骤,必须要执行的Filter链,以及通知在web.xml中定义的listener。

3.4 执行servlet的service()方法

3.5当servlet从servlet容器中移除,servlet生命周期结束,调用servlet的destroy方法,销毁

4 servlet中listener

tomcat服务器中,listener使用非常广泛,基于观察者模式设计,listener设计给开发servlet应用程序带来很大便捷,能够方便的另一个纵向维度控制程序和数据。目前在servlet中提供了6种两类事件的观察者接口,分别是EventListener(某个事件出发)ServletContextAttributeListener、ServletRequestAttributeListener、ServletRequestListener、HttpSessionAttributeListener和LifecycleListener(生命周期不同状态触发)类型的ServletContextListener、HttpSessionListener。

5 Filter工作

在web.xml中<filter>和<filter-mapping>组合使用Filter

符合匹配规则的所有filter执行完成之后才会执行最终的servlet,如果在某个filter的doFilter方法中,调用FilterChain.doFilter请求继续传递,否则,直接返回

6 Servlet中url-pattern

匹配规则

精准匹配

路径匹配:/foo/*匹配以foo为前缀的url

后缀匹配:*.html会匹配以.html为后缀的url

理解最长路径匹配规则



版权声明:本文为android_gogogo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。