无法打开ServletContext资源

时间:2011-05-17 18:31:43

标签: java spring glassfish web.xml

这与一位老人的问题非常相似,但解决方案对我不起作用。

我有一个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在默认包{{}中正确传输它们(我认为) 1}}

有谁知道为什么我会得到这个例外?谢谢。

编辑:我只是想补充说JUnit测试正确(我的意思是他们从WEB-INF/classes加载它们应该得到的)但是在运行应用程序时它会忽略我的social.properties前缀

8 个答案:

答案 0 :(得分:32)

不要使用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>

答案 1 :(得分:13)

添加/src/main/resources/foo/bar.properties之类的内容,然后将其引用为classpath:/foo/bar.properties

答案 2 :(得分:5)

尝试使用classpath*:前缀。

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/resources.html#resources-classpath-wildcards

另请尝试部署爆炸战争,以确保所有文件都存在。

答案 3 :(得分:0)

我认为当前application-context.xml文件是src / main / resources而且social.properties文件是src / main / java ...所以当你打包(mvn包)或运行tomcat时( mvn tomcat:run)你的social.properties消失了(我知道你说当你检查.war时文件在这里......但是你的异常反过来说了。)

解决方案是将所有配置文件(application-context.xml和social.properties)放入src / main / resources中,以遵循maven标准结构。

答案 4 :(得分:0)

您是否让Tomcat解压缩WAR文件?加载WAR文件并且正在解压缩时,似乎无法在类路径中找到这些文件。

答案 5 :(得分:0)

尝试使用此代码...

 <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>

答案 6 :(得分:0)

确定属性文件位于“/ WEB-INF / classes”中尝试使用

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>/WEB-INF/classes/social.properties</value>
    </property>
</bean>

答案 7 :(得分:0)

我有同样的错误。

我的文件名是jpaContext.xml,并放在了src/main/resources中。我指定了参数value="classpath:/jpaContext.xml"

最后,我将文件重命名为applicationContext.xml并将其移至WEB-INF目录,并将param值更改为/WEB-INF/applicationContext.xml,然后它起作用了!