web.xml加载次序ITeye - 凯时娱乐

web.xml加载次序ITeye

2019-01-13 17:39:16 | 作者: 光济 | 标签: 加载,次序,装备 | 浏览: 2614

web.xml加载进程(过程):
       1.发动WEB项目的时分,容器(如:Tomcat)会去读它的装备文件web.xml.读两个节点:   

   listener /listener 和 context-param /context-param

2.紧接着,容器创立一个ServletContext(上下文),这个WEB项目一切部分都将同享这个上下文.

3.容器将 context-param /context-param 转化为键值对,并交给ServletContext.

4.容器创立 listener /listener 中的类实例,即创立监听.

5.在监听中会有contextInitialized(ServletContextEvent args)初始化办法,在这个办法中取得:

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

6.得到这个context-param的值之后,你就能够做一些操作了.留意,这个时分你的WEB项目还没有彻底发动完结.这个动作会比 所 有的Servlet都要早.
换句话说,这个时分,你对 context-param 中的键值做的操作,将在你的WEB项目彻底发动之前被执行.

7.举例.你或许想在项目发动之前就翻开数据库.
那么这儿就能够在 context-param 中设置数据库的衔接办法,在监听类中初始化数据库的衔接.

8.这个监听是自己写的一个类,除了初始化办法,它还有毁掉办法.用于封闭使用前开释资源.比方说数据库衔接的封闭.

web.xml节点加载次序:

能够必定的是,节点的加载次序与它们在 web.xml 文件中的先后次序无关。即不会由于 filter 写在 listener 的前面而会先加载 filter。终究得出的定论是:listener - filter - servlet

        一起还存在着这样一种装备节点:context-param,它用于向 ServletContext 供给键值对,即使用程序上下文信息。咱们的 listener, filter 等在初始化时会用到这些上下文中的信息,那么 context-param 装备节是不是应该写在 listener 装备节前呢?实践上 context-param 装备节可写在恣意方位,因而真实的加载次序为:

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 容器发动时初始化每个 filter 时,是依照 filter 装备节呈现的次序来初始化的,当恳求资源匹配多个 filter-mapping 时,filter 阻拦资源是依照 filter-mapping 装备节呈现的次序来顺次调用 doFilter() 办法的。

       servlet 同 filter 相似,此处不再赘述。

【加载Spring】

       比方filter 需求用到 bean ,但加载次序是: 先加载filter 后加载spring,则filter中初始化操作中的bean为null;

       所以,假如过滤器中要使用到 bean,能够将spring 的加载 改成 Listener的办法 :


listener   
         listener-class   
             org.springframework.web.context.ContextLoaderListener   
         /listener-class   
/listener

    终究定论:

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

 

转载 : http://blog.163.com/qulei_lei/blog/static/186144231201141945740356/

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表凯时娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章