无法打开ServletContext资源
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法打开ServletContext资源相关的知识,希望对你有一定的参考价值。
这与一个较老的问题非常相似,但解决方案对我不起作用。
我有一个WAR包。
在web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application-context.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
在application-context.xml
<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:social.properties</value>
</property>
</bean>
但得到这个:
org.springframework.beans.factory.BeanInitializationException:无法加载属性;嵌套异常是java.io.FileNotFoundException:无法打开ServletContext资源[/social.properties]
我检查了WAR包 - .xml
和.properties
文件都在/WEB-INF/classes
.properties
文件位于src/main/resources
中的.xml
和src/main/java
(默认包中)和maven在WEB-INF/classes
的默认包中正确传输它们(我认为)
有谁知道为什么我会得到这个例外?谢谢。
编辑:我只想补充一点,JUnit测试正确(我的意思是他们从social.properties
加载他们应该的东西)但是在运行应用程序时它会忽略我的classpath:
前缀
不要使用classpath。这可能会导致不同的ClassLoader(容器与应用程序)出现问题。 WEB-INF永远是更好的选择。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-config.xml</param-value>
</context-param>
和
<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>/WEB-INF/social.properties</value>
</property>
</bean>
把像/src/main/resources/foo/bar.properties
这样的东西,然后引用它们作为classpath:/foo/bar.properties
。
尝试使用classpath*:
前缀代替。
还请尝试部署爆炸战争,以确保所有文件都在那里。
我认为当前application-context.xml文件是src / main / resources而且social.properties文件是src / main / java ...所以当你打包(mvn包)或运行tomcat时(mvn tomcat:你的social.properties消失了(我知道你说当你检查.war时文件在这里......但你的例外说明相反)。
解决方案只是将所有配置文件(application-context.xml和social.properties)放入src / main / resources中,以遵循maven标准结构。
您是否让Tomcat解压缩WAR文件?当加载WAR文件并且未解压缩时,似乎无法在类路径中找到这些文件。
尝试使用此代码...
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<property name="locations">
<list>
<value>/social.properties</value>
</list>
</property>
</bean>
确保属性文件在“/ WEB-INF / classes”中尝试使用
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>/WEB-INF/classes/social.properties</value>
</property>
</bean>
我有同样的错误。
我的文件名是jpaContext.xml
,它被放置在src/main/resources
。我指定了param value="classpath:/jpaContext.xml"
。
最后,我将文件重命名为applicationContext.xml
并将其移至WEB-INF目录并将param值更改为/WEB-INF/applicationContext.xml
,然后就可以了!
以上是关于无法打开ServletContext资源的主要内容,如果未能解决你的问题,请参考以下文章
Python 自动化 - 浏览器chrome打开F12开发者工具自动Paused in debugger调试导致无法查看网站资源问题原因及解决方法,javascript反调试问题处理实例演示(代码片段
SpringBoot:ServletContext资源无法解析S3 URL