`

web.xml中 listener、filter、servlet等 加载顺序

 
阅读更多
Web项目的很多信息都配置在web.xml文件中,而且项目启动时,容器(下文以Tomcat为例)会先读配置文件,那web.xml文件中的那么多内容是按照什么顺序加载的呢?

        这个读取顺序跟文件内容的上下文顺序基本没有关系,也就是说这些配置信息的读取顺序是一定的,跟他写在哪个位置没关系,写到最后的可能第一个执行。

        分析:

       (1)因为无论是Listener,Filter,Servlet都可能在初始化的时候用到ServletContext中的内容,而这个内容来自<context-param></context-param>配置。

所以首先在启动WEB项目的时候会先读<context-param></context-param>和<listener></listener>

<context-param></context-param>的位置可以随便写,但确是最早被加载。

在得到这个context-param的值之后,就可以做一些其他操作了,这个时候的WEB项目还没有完全启动完成,读取context-param是最早的操作,会比所有的Servlet等都要早。

      (2)然后,Tomcat会创建一个ServletContext对象,WEB项目整个Application都将共享这个ServletContext,Tomcat随后将<context-param></context-param>转化为键值对,并交给ServletContext。

      (3)Tomcat创建<listener></listener>中的类实例,即创建监听.

      (4)在监听中会有contextInitialized(ServletContextEvent args)初始化方法,在这个方法中可以获得ServletContext中的值:

            ServletContext = ServletContextEvent.getServletContext()      

            context-param的值 = ServletContext.getInitParameter("context-param的键")  

   (5)然后就是Filter和Servlet

  

         所以这个大致的顺序就是:context-param -> listener -> filter -> servlet

      

         对于某类配置节而言,与它们出现的顺序是有关的。

         以 filter 为例,web.xml 中当然可以定义多个 filter,与 filter 相关的一个配置节是 filter-mapping,这里一定要注意,对于拥有相同 filter-name 的 filter 和 filter-mapping 配置节而言,filter-mapping 必须出现在 filter 之后,否则当解析到 filter-mapping 时,它所对应的 filter-name 还未定义。web Tomcat启动时初始化每个 filter 时,是按照 filter 配置节出现的顺序来初始化的,当请求资源匹配多个 filter-mapping 时,filter 拦截资源是按照 filter-mapping 配置节出现的顺序来依次调用 doFilter() 方法的。

        Servlet的mapping 同 filter 类似。

        关于Servlet的load-on-startup:

        load-on-startup 元素在web应用启动的时候指定了servlet被加载的顺序,它的值必须是一个整数。如果它的值是一个负整数或是这个元素不存在,那么Tomcat会在该servlet被调用的时候,加载这个servlet 。如果值是正整数或零,Tomcat在加载配置的时候就加载并初始化这个servlet,Tomcat必须保证值小的先被加载。如果值相等,Tomcat可以自动选择先加载谁。

        在servlet的配置当中,<load-on-startup>0</load-on-startup>的含义是:

                (1)标记Tomcat是否在启动的时候就加载这个servlet。

                (2)当值为0或者大于0时,表示Tomcat在应用启动时就加载这个servlet;

                (3)当是一个负数时或者没有指定时,则指示Tomcat在该servlet被选择时才加载。

                (4)正数的值越小,启动该servlet的优先级越高。



最终结论:

        web.xml 的加载顺序是:[context-param -> listener -> filter -> servlet -> spring] ,而同类型节点之间的实际程序调用的时候的顺序是根据对应的 mapping 的顺序进行调用的。

分享到:
评论

相关推荐

    web.xml 中的listener、 filter、servlet 加载顺序及其详解.doc

    web.xml 中的listener、 filter、servlet 加载顺序及其详解

    关于web.xml配置文件servlet,filter,listener加载顺序

    关于filter、servlet在web.xml配置及加载顺序

    web.xml配置servlet,filter,listener加载顺序源代码

    本源码将详细介绍web.xml配置中servlet,filter,listener的加载顺序,可以让学习者更好的了解web.xml各种属性配置,自己写的东西,不足之处请大家见谅,顺便收点积分也好下资料,谢谢

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    web.xml详解(web-app_2_3.dtd)

    部署描述文件web.xml详解(web-app_2_3.dtd),全面介绍: 1. icon元素 2. display-name元素 3. description元素 4. distributable元素 5. context-param元素 6. filter元素 7. filter-mapping元素 8. ...

    Web.xml的作用及常用标签的功能

    web.xml文件是用来初始化工程配置信息的,比如说welcome页面,filter,listener,servlet,servlet-mapping,启动加载级别等等,当你的web工程中没用到这些当然也就不需要这个xml文件来配置你的apllication了 ...

    Java™ Servlet 规范.

    1.6.1 监听器(Listener)顺序 ...............................................................................................................14 1.6.2 注解处理 .............................................

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    Servlet3.1规范(最终版) PDF

    1.6.1 监听器(Listener)顺序 ...............................................................................................................14 1.6.2 注解处理 ...............................................

    spring mvc项目

    可用于分析spring mvc源码、spring mvc父子容器初始化流程、session和cookie机制、spring session等,也可以用于学习Java Web(servlet、filter、listener等)、spring源码等。 该项目使用servlet3.0规范,无web.xml...

    Spring MVC 框架应用实例

    org.springframework.web.servlet.DispatcherServlet &lt;/servlet-class&gt; &lt;load-on-startup&gt;1 &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;ideawu&lt;/servlet-name&gt; *.do &lt;/servlet-mapping&gt; ...

    Java Web整合开发王者归来:Java Web.part3

    第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为...

    Spring MVC 入门实例

    22 &lt;filter-class&gt;org.springframework.web.filter.CharacterEncodingFilter&lt;/filter-class&gt; 23 24 &lt;param-name&gt;encoding 25 &lt;param-value&gt;UTF-8 26 27 &lt;/filter&gt; 28 29 &lt;filter-mapping&gt; 30 &lt;filter-name&gt;...

    VereWebMVC案例(从数据到前端页面)

    在 test/WebContent/WEB-INF/web.xml 里面添加支持 VereMVC 配置 &lt;filter&gt; &lt;filter-name&gt;VereMVC&lt;/filter-name&gt; &lt;filter-class&gt;com.vere.mvc.dispatcher.filter.VereMVCPrepareFilter&lt;/filter-class&gt; &lt;/...

    VereMVC至简mvc微架构

    5.在 test/WebContent/WEB-INF/web.xml 里面添加支持 VereMVC 配置 &lt;filter&gt; &lt;filter-name&gt;VereMVC&lt;/filter-name&gt; &lt;filter-class&gt;com.vere.mvc.dispatcher.filter.VereMVCPrepareFilter&lt;/filter-class&gt; &lt;/...

    SpringBoot如何注册Servlet、Filter、Listener的几种方式

    在Servlet 3.0之前都是使用web.xml文件进行配置,这篇文章主要介绍了SpringBoot如何注册Servlet、Filter、Listener的几种方式,在Servlet 3.0之前都是使用web.xml文件进行配置,

    Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)

    第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为...

Global site tag (gtag.js) - Google Analytics