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 的顺序进行调用的。
分享到:
相关推荐
理解`web.xml`的加载顺序和各个节点的作用对于开发和维护高质量的Web应用至关重要。 1. **加载顺序**: - 当应用服务器启动并加载Web应用程序时,首先读取`web.xml`文件。 - 首先解析的是`<context-param>`节点,...
web.xml是Java Servlet规范定义的一个部署描述文件,用于配置Java Web应用程序。它遵循XML的规则,必须有一个唯一的根节点,大小写敏感,并且标签需要严格配对。在大型Web工程中,web.xml文件非常重要,因为它提供了...
web.xml的配置顺序也遵循一定的规则,比如ServletContext总是在其他组件之前被创建,而servlet的加载顺序则根据值的大小和实际出现的顺序进行配置。正确理解web.xml的每个标签及其作用是开发Java EE Web应用的基础。
1. 当一个WEB项目启动时,Web容器首先读取web.xml文件,解析其中的和节点。 2. 随后,容器创建一个Servlet上下文(ServletContext),作为整个Web应用程序共享的数据存储区。 3. 被转化为键值对,并存储在...
因为没有办法完全自动进行转换,我们可以应用dwr.xml文件的special signatures syntax配置部分设置类型的转换处理过程. 2.5 DOM Objects DWR 自动将DOM、DOM4J、JDOM和XOM转换成DOM树,前面这几种类型都仅仅返回...
web.xml中的Servlet、Bean、Filter、Listener加载顺序详解 在Java Web应用程序中,web.xml文件扮演着非常重要的角色,它定义了Web应用程序的配置信息,包括Servlet、Bean、Filter、Listener等组件的配置。其中,...
5. **JAXB(Java Architecture for XML Binding)**:JAXB是Java提供的一种对象与XML之间的自动转换框架,简化了XML序列化和反序列化的过程,使得Java对象可以直接转换为XML文档或从XML文档中还原。 6. **JAXP...
在Web开发中,"web.xml"是一个特别重要的文件,它被称为Servlet配置文件,是Java Web应用程序的部署描述符。这个文件定义了应用的配置信息,包括Servlet的映射、过滤器、监听器等。通过`web.xml`,开发者可以指定...
这个过程通常被称为XML到Java对象的绑定或反序列化。本文将详细介绍如何解析XML并生成对应的Java类,以及使用工具助手来简化这一过程。 一、XML解析原理 1. DOM解析:DOM(Document Object Model)模型将XML文档视...
### Java XML 文件解析详解 #### 一、XML 文件解析概述 XML (Extensible Markup Language) 是一种用于标记数据的语言,它的设计目的是传输和存储数据。XML 的灵活性使其成为多种应用场景中的首选格式,尤其是在...
它提供了一种声明式的方式,将XML Schema映射到Java类,从而简化了XML数据的序列化和反序列化过程。JAXB适用于需要频繁进行XML数据转换的场景。 ### Java解析XML的实际应用 1. **数据交换**:在不同系统间进行数据...
总结,Java的XML解析提供了解决不同需求的工具,SAX解析器尤其适用于处理大文件或需要低内存占用的情况。通过编写事件处理器,开发者可以自定义XML数据的处理逻辑,灵活地读取和操作XML文档中的属性和内容。
DOM将整个XML文档加载到内存中,形成一棵节点树,便于遍历和操作,但对大文件不友好。SAX是事件驱动的解析器,逐行读取,节省内存,适合处理大型XML文件。StAX是流式API,允许开发者按需读取或写入XML,提供了更高的...
学习和掌握Java操作XML的这两种方法,对于开发人员来说至关重要,尤其是在处理XML数据交换、配置文件或与Web服务交互时。DOM适合小型XML文档和需要频繁访问的情况,而SAX则适合处理大型XML文档或资源有限的环境。...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在软件开发、Web服务以及数据交换中。Java平台提供了多种解析XML的方式,包括SAX(Simple API for XML)、DOM(Document Object Model)以及...
在IT领域,XML(eXtensible Markup Language)是一种用于存储和传输数据的标准化格式,广泛应用在各种系统间的数据交换、配置文件以及Web服务中。本文将深入探讨Java平台下解析XML的四种主流方法:DOM、SAX、DOM4J和...
【Java - XML解析总结】 XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件和Web服务。Java 提供了多种方法来解析 XML 文档,主要包括 DOM(Document Object Model)和 ...