美文网首页
web-xml加载过程

web-xml加载过程

作者: MakeACoder | 来源:发表于2019-06-16 16:08 被阅读0次

    上图

    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

    相关文章

      网友评论

          本文标题:web-xml加载过程

          本文链接:https://www.haomeiwen.com/subject/ngepfctx.html