`
leo1211
  • 浏览: 137963 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

web.xml被文件加载过程,各节点加载顺序总结

    博客分类:
  • J2EE
阅读更多

今天2010-3-11日,上班无事,想来将web.xml项目描述文件的加载过程做个总结贴在这里,以备忘:

 

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 的顺序进行调用的。

 

 

 

分享到:
评论
1 楼 CharlesChanHello 2016-06-23  
  总结得很好~!赞~~~

相关推荐

    web.xml加载顺序与web.xml常用节点解析

    web.xml加载顺序与web.xml常用节点解析

    DWR.xml配置文件说明书(含源码)

    因为没有办法完全自动进行转换,我们可以应用dwr.xml文件的special signatures syntax配置部分设置类型的转换处理过程. 2.5 DOM Objects DWR 自动将DOM、DOM4J、JDOM和XOM转换成DOM树,前面这几种类型都仅仅返回...

    web.xml中servlet, bean, filter, listenr 加载顺序_动力节点Java学院整理

    主要介绍了web.xml中servlet, bean, filter, listenr 加载顺序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    web项目的启动时文件加载顺序1

    一、1、启动一个WEB项目,WEB容器会先去读取它的配置文件web.xml,读取和两个节点 二、load-on

    ssh(structs,spring,hibernate)框架中的上传下载

     本文后面的章节将从数据持久层->业务层->Web层的开发顺序,逐层讲解文件上传下载的开发过程。  数据持久层  1、领域对象及映射文件  您可以使用Hibernate Middlegen、HIbernate Tools、Hibernate ...

    asp.net专家疑难解答200问源码

    101.如何使用TreeView Web控件绑定XML文件-示例1 101.如何使用TreeView Web控件绑定XML文件-示例2 第6章 数据服务控件 103.如何使用Repeater控件显示数据 104.如何使用Repeater控件的模板 105.如何实现...

    JavaScript完全自学宝典 源代码

    13.3.xml 使用XSLT实现“Hello World”的XML文件。 13.4.xsl 使用XSLT实现“Hello World”的XSLT文件。 13.5.html 内嵌的XML数据岛。 13.6.html 外嵌的XML数据岛。 13.7.html 在HTML中显示XML...

    asp.net专家疑难解答200问

    如何使用TreeView Web控件绑定XML文件-示例2 第6章 数据服务控件 103.如何使用Repeater控件显示数据 104.如何使用Repeater控件的模板 105.如何实现Repeater控件的分页 106.如何使用DataList...

    2.ASP.NET.2.0.高级编程(第4版) [1/7]

    14.8.1 为本地化构建Web.sitemap文件 502 14.8.2 修改Web.config文件 503 14.8.3 创建程序集资源(.resx)文件 504 14.8.4 测试结果 505 14.9 小结 506 第15章 个性化 507 15.1 个性化模型 507 15.2 创建个性化...

    ASP.NET2.0高级编程(第4版)1/6

    26.3 使用简单的XML Web服务953 26.3.1 添加Web引用953 26.3.2 在客户应用程序中  调用Web服务955 26.4 Web服务的传输协议957 26.4.1 HTTP-GET959 26.4.2 HTTP-POST961 26.4.3 SOAP962 26.5 WebMethod的重载962 ...

    flex3的cookbook书籍完整版dpf(包含目录)

    加载一个XML文件 19.2节. 通过E4X语法遍历XML文档 19.3节. 使用正则表达式在E4X中进行查询 19.4节. 添加一个XMLList到XML对象 19.5节. 对一个XMLList或E4X查询进行绑定 19.6节. 从数组中生成XML对象 19.7节. 如何...

    Quartz-Job-Scheduling-Framework-中文版-V0.9.1.zip

    内容提要:Quartz 从属性文件中加载多个插件类时不能保证加载的顺序,所以本节引入一个自定义的统一按顺序加载其他插件的,名之为插件加载器的东西,其实也就是其他插件类的父亲。 第八章. 使用 Quartz 插件 (第五...

    UANodesetWebViewer:一个 OPC UA 信息模型网络查看器

    您可以加载节点集文件,然后浏览它们。 如果您想查看 OPC UA 配套规范中定义的标准化节点集文件,则非常方便。 用法 它发布在 DockerHub 上: ://hub.docker.com/r/barnstee/uanodesetwebviewer 通过以下方式运行...

    asp.net博客系统

    修改了关于css列表加载顺序的bug,增强对ie6的支持(不过仍有些小问题- -||) 首页结构有小修改,并修正了一些小问题 v1.080516更新记录: 增加相片生成缩略图功能 增加生成静态页功能(目前只针对日志) 增加...

    C#开发经验技巧宝典

    0466 如何判断TreeView控件中被勾选的节点 265 0467 用SiteMapPath控件绑定SiteMap文件实现导航 266 0468 如何设置SiteMapPath控件路径分隔符 266 0469 如何设置SiteMapPath控件路径方向 267 0470 如何设置...

    asp.net知识库

    SQL过程自动C#封装,支持从表到基本存储过程生成 使用SQLDMO控制 SQL Server 使用SQL-DMO实现定制SQL Scripts Create Tables and Build inserts from Tables by using Mygeneration Templates(Sql Server) C# 获取...

    jQuery详细教程

    选择器允许您对 DOM 元素组或单个 DOM 节点进行操作。 jQuery 元素选择器 jQuery 使用 CSS 选择器来选取 HTML 元素。 $("p") 选取 &lt;p&gt; 元素。 $("p.intro") 选取所有 class="intro" 的 &lt;p&gt; 元素。 $("p#demo") 选取 ...

Global site tag (gtag.js) - Google Analytics