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
理解最长路径匹配规则