SpringMVC项目中web.xml中的节点加载顺序问题

简介: SpringMVC项目中web.xml中的节点加载顺序问题,之前以为web.xml中就是一些配置信息,和节点的顺序没有关系,后来才发现初始化时的加载顺序是和节点的顺序相关的。完整的web.xml文件内容: contextConfigLocation classpath*:/spring/*.

SpringMVC项目中web.xml中的节点加载顺序问题,之前以为web.xml中就是一些配置信息,和节点的顺序没有关系,后来才发现初始化时的加载顺序是和节点的顺序相关的。

完整的web.xml文件内容:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
		<!--
		Spring ApplicationContext配置文件的路径,可使用通配符,多个路径用,号分隔
		此参数用于后面的Spring-Context loader
	-->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath*:/spring/*.xml</param-value>
	</context-param>
	
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<filter>
		<filter-name>authenticationFilter</filter-name>
		<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
	</filter>
	
	<filter-mapping>
         <filter-name>authenticationFilter</filter-name>
         <url-pattern>/*</url-pattern>
    </filter-mapping>
         
    <filter>
		<filter-name>authorizationFilter</filter-name>
		<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
	</filter>
	
	<filter-mapping>
         <filter-name>authorizationFilter</filter-name>
         <url-pattern>/*</url-pattern>
    </filter-mapping>

	<listener>
        <listener-class>com.auth.spring.listener.SpringLoaderListener</listener-class>
    </listener>
    
  	 <listener>
        <listener-class>com.abc.mobile.web.MobileLoader</listener-class>
    </listener>
   
    <listener>  
         <listener-class>  
            com.auth.listener.HttpSessionManager  
        </listener-class>  
    </listener>  
   
	<!-- 防止spring内存溢出监听器 -->
	<listener>
		<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
	</listener>
	
	<listener>
    	<listener-class>com.abc.conference.context.RpcManager</listener-class>
  	</listener>
  	<servlet>
		<servlet-name>Action</servlet-name>
		<servlet-class>com.abc.conference.apis.Action</servlet-class>
	</servlet>
	
	 <servlet>    
        <servlet-name>t1</servlet-name>    
        <servlet-class>com.abc.base.web.init.BaseDataServlet</servlet-class>    
       <!-- 如果需要自动加载,加下面一句 -->    
       <load-on-startup>1</load-on-startup>    
    </servlet>
	
	<servlet-mapping>
		<servlet-name>Action</servlet-name>
		<url-pattern>/public/Action</url-pattern>
	</servlet-mapping>
	
	<servlet>
        <servlet-name>middleware</servlet-name>
        <servlet-class>com.abc.mobile.web.ActionProxy</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>middleware</servlet-name>
        <url-pattern>/public/middleware</url-pattern>
    </servlet-mapping>


	<!-- spring mvc servlet -->
<!-- springmvc 配置 -->
	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		 <init-param>  
            <param-name>contextConfigLocation</param-name>  
            <param-value>classpath*:/springmvc-servlet.xml</param-value>  
        </init-param>  
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>*.do</url-pattern>  
	</servlet-mapping>
	
	<servlet>
		<description></description>
		<display-name>ServletLoader</display-name>
		<servlet-name>ServletLoader</servlet-name>
		<servlet-class>com.abc.conference.context.ServletLoader</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	
	<servlet>
		<display-name>middlewareInit</display-name>
		<servlet-name>middlewareInit</servlet-name>
		<servlet-class>com.abc.middleware.init.MiddlewareServletLoader</servlet-class>
		<load-on-startup>2</load-on-startup>
	</servlet>
	
	<welcome-file-list>
		<welcome-file>/index.jsp</welcome-file>
	</welcome-file-list>
	<!-- 配置session超时时间,单位分钟 -->
	<session-config>
		<session-timeout>15</session-timeout>
	</session-config>
</web-app>
因为在Action中用到了一些静态变量,而这个静态变量是在BaseDataServlet中初始化的,所以如果

	 <servlet>    
        <servlet-name>t1</servlet-name>    
        <servlet-class>com.abc.base.web.init.BaseDataServlet</servlet-class>    
       <!-- 如果需要自动加载,加下面一句 -->    
       <load-on-startup>1</load-on-startup>    
    </servlet>
配置节点,在Action:
	<servlet-mapping>
		<servlet-name>Action</servlet-name>
		<url-pattern>/public/Action</url-pattern>
	</servlet-mapping>
节点之后的话,那调用静态变量的时候,静态变量的值就是Null,因为这时还没有初始化呢。


目录
相关文章
|
22天前
|
缓存 JSON 监控
如何在项目中保证 Web 组件化的性能
保证 Web 组件化的性能需要从多个方面入手,综合运用各种优化方法和策略。通过持续的优化和改进,能够提高组件化的整体性能,为用户提供更好的体验,同时也有助于提高项目的开发效率和质量。
32 8
|
22天前
|
存储 前端开发 JavaScript
如何在项目中高效地进行 Web 组件化开发
高效地进行 Web 组件化开发需要从多个方面入手,通过明确目标、合理规划、规范开发、加强测试等一系列措施,实现组件的高效管理和利用,从而提高项目的整体开发效率和质量,为用户提供更好的体验。
27 7
|
29天前
|
监控 安全 测试技术
如何在实际项目中应用Python Web开发的安全测试知识?
如何在实际项目中应用Python Web开发的安全测试知识?
28 4
|
28天前
|
中间件 Go API
Go语言中几种流行的Web框架,如Beego、Gin和Echo,分析了它们的特点、性能及适用场景,并讨论了如何根据项目需求、性能要求、团队经验和社区支持等因素选择最合适的框架
本文概述了Go语言中几种流行的Web框架,如Beego、Gin和Echo,分析了它们的特点、性能及适用场景,并讨论了如何根据项目需求、性能要求、团队经验和社区支持等因素选择最合适的框架。
70 1
|
1月前
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
126 8
|
1月前
|
JavaScript 前端开发 开发工具
web项目规范配置(husky、eslint、lint-staged、commit)
通过上述配置,可以确保在Web项目开发过程中自动进行代码质量检查和规范化提交。Husky、ESLint、lint-staged和Commitlint共同作用,使得每次提交代码之前都会自动检查代码风格和语法问题,防止不符合规范的代码进入代码库。这不仅提高了代码质量,还保证了团队协作中的一致性。希望这些配置指南能帮助你建立高效的开发流程。
45 5
|
1月前
|
JavaScript 前端开发 数据安全/隐私保护
Web开发者必看:手把手教你如何轻松播放m3u8流地址,解锁视频播放新技能,让你的项目更上一层楼!
【10月更文挑战第23天】随着互联网技术的发展,m3u8格式因良好的兼容性和高压缩率被广泛用于网络流媒体传输。本文介绍如何在Web端播放m3u8流地址,包括引入视频播放器(如Video.js)、创建播放器容器、初始化播放器及播放m3u8流的具体步骤。此外,还涉及处理加密m3u8流的示例。
242 1
|
2月前
|
JSON 搜索推荐 API
Python的web框架有哪些?小项目比较推荐哪个?
【10月更文挑战第15天】Python的web框架有哪些?小项目比较推荐哪个?
75 1
|
2月前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
XML DOM 遍历节点树
|
2月前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
XML DOM 遍历节点树
下一篇
DataWorks