关于“Could not open ServletContext resource [/WEB-INF/applicationContext.xml]”解决方案

我最近在IDEA上构建了一个maven+SSM项目,但是启动tomcat后报错,错误很直接,重点就一句话,即Could not open ServletContext resource [/WEB-INF/applicationContext.xml],异常也很明显,FileNotException,无法打开ServletContext的资源文件。

下面是我的web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">

	<display-name>XVSDemo</display-name>
	

	<!--字符集过滤器,必须放在所有过滤器之前 -->
	<filter>
		<filter-name>characterEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<async-supported>true</async-supported>
		<!-- request -->
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<!-- response -->
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>characterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<!-- Spring监听器 -->
	<listener>
		<!-- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> -->
		<listener-class>com.xu.common.listener.CommonListener</listener-class>
	</listener>

	<!-- 防止Spring内存溢出监听器 -->
	<listener>
		<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
	</listener>

	<!-- Spring和mybatis的配置文件 -->
	<!--<context-param>-->
		<!--<param-name>contextConfigLocation</param-name>-->
		<!--<param-value>classpath:spring-mybatis.xml</param-value>-->
	<!--</context-param>-->

	 <!--Spring MVC servlet-->
	<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:spring-mvc.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
		<async-supported>true</async-supported>
	</servlet>

	<servlet-mapping>
		<servlet-name>SpringMVC</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	
	<!-- druid -->
	<!--<servlet>-->
		<!--<servlet-name>DruidStatView</servlet-name>-->
		<!--<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>-->

		<!--<init-param>-->
			<!--<!– 用户名 –>-->
			<!--<param-name>loginUsername</param-name>-->
			<!--<param-value>admin</param-value>-->
		<!--</init-param>-->
		<!--<init-param>-->
			<!--<!– 密码 –>-->
			<!--<param-name>loginPassword</param-name>-->
			<!--<param-value>admin!@#</param-value>-->
		<!--</init-param>-->
	<!--</servlet>-->
	<!--<servlet-mapping>-->
		<!--<servlet-name>DruidStatView</servlet-name>-->
		<!--<url-pattern>/druid/*</url-pattern>-->
	<!--</servlet-mapping>-->
	
	<!-- 如果需要监控uri,设置Web关联监控配置 -->
	<!--<filter>-->
		<!--<filter-name>DruidWebStatFilter</filter-name>-->
		<!--<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>-->
		<!--<init-param>-->
			<!--<param-name>exclusions</param-name>-->
			<!--<!– 排除统计干扰 –>-->
			<!--<param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>-->
		<!--</init-param>-->
	<!--</filter>-->
	<!--<filter-mapping>-->
		<!--<filter-name>DruidWebStatFilter</filter-name>-->
		<!--<url-pattern>/*</url-pattern>-->
	<!--</filter-mapping>-->
	
	<!-- 系统入口文件 -->
	<welcome-file-list>
		<welcome-file>/index.jsp</welcome-file>
	</welcome-file-list>

	<!-- 错误页面配置 -->
	<error-page>
		<error-code>404</error-code>
		<location>/404.jsp</location>
	</error-page>

	<error-page>
		<error-code>500</error-code>
		<location>/500.jsp</location>
	</error-page>
</web-app>
在Maven项目中,我的配置文件自然应该放在src下的resources文件夹下,那么在web.xml中我自然将<init-param>中contextConfigLocation的参数值由WEB-INF/applicationContext.xml修改为classpath:spring-mvc.xml了,但是启动tomcat之后报错,而从报错信息中可以看出容器依然是在WEB-INF下去找applicationContext.xml,很明显这个文件的位置已经被我们改变了,而且我们也修改了web.xml的配置为何还要从这里去加载呢?原因是我们缺少另一个重要的配置。


如果不特意指定参数名为contextConfigLoction<context-parameter>元素,那么spring的ContextLoderListener监听器就会在/WEB-INF/下去寻找并加载该目录下的名为applicationContext.xml这个文件。So,我们应该在web.xml中添加<context-param>标签并再次指定spring核心文件的位置

<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring-mvc.xml</param-value>
	</context-param>

这样就OK了,注意这段配置尽量写在靠前的位置,因为在tomcat启动后web项目会先初始化上下文,我们这段配置正是指定了上下文配置的文件位置,在上下文初始化完成之后才应当继续加载其余各种配置,而我们的springMVC的servlet仅仅是springMVC框架的相关配置,项目整体还是由spring去管理的。下面是修改之后的web.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">

	<display-name>XVSDemo</display-name>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring-mvc.xml</param-value>
	</context-param>

	<!--字符集过滤器,必须放在所有过滤器之前 -->
	<filter>
		<filter-name>characterEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<async-supported>true</async-supported>
		<!-- request -->
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<!-- response -->
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>characterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<!-- Spring监听器 -->
	<listener>
		<!-- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> -->
		<listener-class>com.xu.common.listener.CommonListener</listener-class>
	</listener>

	<!-- 防止Spring内存溢出监听器 -->
	<listener>
		<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
	</listener>

	<!-- Spring和mybatis的配置文件 -->
	<!--<context-param>-->
		<!--<param-name>contextConfigLocation</param-name>-->
		<!--<param-value>classpath:spring-mybatis.xml</param-value>-->
	<!--</context-param>-->

	 <!--Spring MVC servlet-->
	<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:spring-mvc.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
		<async-supported>true</async-supported>
	</servlet>

	<servlet-mapping>
		<servlet-name>SpringMVC</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	
	<!-- druid -->
	<!--<servlet>-->
		<!--<servlet-name>DruidStatView</servlet-name>-->
		<!--<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>-->

		<!--<init-param>-->
			<!--<!– 用户名 –>-->
			<!--<param-name>loginUsername</param-name>-->
			<!--<param-value>admin</param-value>-->
		<!--</init-param>-->
		<!--<init-param>-->
			<!--<!– 密码 –>-->
			<!--<param-name>loginPassword</param-name>-->
			<!--<param-value>admin!@#</param-value>-->
		<!--</init-param>-->
	<!--</servlet>-->
	<!--<servlet-mapping>-->
		<!--<servlet-name>DruidStatView</servlet-name>-->
		<!--<url-pattern>/druid/*</url-pattern>-->
	<!--</servlet-mapping>-->
	
	<!-- 如果需要监控uri,设置Web关联监控配置 -->
	<!--<filter>-->
		<!--<filter-name>DruidWebStatFilter</filter-name>-->
		<!--<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>-->
		<!--<init-param>-->
			<!--<param-name>exclusions</param-name>-->
			<!--<!– 排除统计干扰 –>-->
			<!--<param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>-->
		<!--</init-param>-->
	<!--</filter>-->
	<!--<filter-mapping>-->
		<!--<filter-name>DruidWebStatFilter</filter-name>-->
		<!--<url-pattern>/*</url-pattern>-->
	<!--</filter-mapping>-->
	
	<!-- 系统入口文件 -->
	<welcome-file-list>
		<welcome-file>/index.jsp</welcome-file>
	</welcome-file-list>

	<!-- 错误页面配置 -->
	<error-page>
		<error-code>404</error-code>
		<location>/404.jsp</location>
	</error-page>

	<error-page>
		<error-code>500</error-code>
		<location>/500.jsp</location>
	</error-page>
</web-app>


问题解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值