web-xml加载过程

上图

tomcat架构图

5a26687d0001ca2712300718.png

20180109110049444.jpg

tomcat的启动过程

20161209134750534.png

tomcat架构图中可以看到
一个web项目 在tomcat逻辑里其实就是一个StandardContext ,一个web项目对应一个web.xml。

顺着这个思路 看tomcat启动图中可以看到
4.1.1.1.1.1.1.6 ------ 4.1.1.1.1.1.1.7 中tomcat 加载web.xml 的类也是StandardContext, 最终解析是在ContextConfig中的webConfig 方法解析完生成一个WebXml 对象
解析和生成WebXml对象的过程如下

注(点击可进入具体文章):
web-fragment.xml 为 servlet3.0规范
SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件
ServletContainerInitializer

 

`web.xml加载过程`
1.全局默认配置文件:tomcat目录下conf/web.xml解析为WebXml对象。
2.具体应用程序下的web.xml解析:例 /examples/WEB-INF/web.xml
3.扫描应用程序examples下的所有Jar,查找`META-INF/web-fragment.xml`文件并解析,保存到变量fragments中,格式<String,WebXml>。
4.已经检索到的WebXml配置进行排序。
5.基于SPI机制查找ServletContainerInitializer的实现。
6.扫描/WEB-INF/classes下面的类,处理Annotation:@ WebServlet,@ WebFilter,@ WebListener
7、扫描jar包中的Annotation:web-fragment.xml所在的jar包。
8、合并配置:所有web-fragment.xml中的配置,合并到应用程序examples中的配置web.xml。
9、合并配置:全局默认配置defaults 合并到应用程序的web.xml。
10、将JSP转换为Servlet。
11、将合并后的最终配置web.xml对象webXml应用到servlet容器(ServletContext),装配servlet上下文;
12、将配置信息保存容器中,供其他组件访问,使得其他组件不需要再次重复上面的步骤去获取配置信息了。
13、查找jar包中的静态资源。
14、将ServletContainerInitializer应用到上下文。

参考链接:
https://blog.csdn.net/tuoni123/article/details/80149752
https://blog.csdn.net/ahou2468/article/details/79015251
https://sq.163yun.com/blog/article/189808829158150144
https://jinnianshilongnian.iteye.com/blog/1750736



作者:MakeACoder
链接:https://www.jianshu.com/p/090e7a7e6403
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值