无法打开ServletContext资源

kun*_*ajs 33 java spring web.xml glassfish

这与一个较老的问题非常相似,但解决方案对我不起作用.

我有一个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>
Run Code Online (Sandbox Code Playgroud)

application-context.xml

<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>classpath:social.properties</value>
    </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

但得到这个:

org.springframework.beans.factory.BeanInitializationException:无法加载属性; 嵌套异常是java.io.FileNotFoundException:无法打开ServletContext资源[/social.properties]

我查了WAR包- .xml.properties文件都在/WEB-INF/classes

.properties文件是in src/main/resources.xmlin src/main/java(在默认包中)和maven在默认包中正确传输它们(我认为)WEB-INF/classes

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

编辑:我只是想补充一点,JUnit测试正确(我的意思是他们加载他们应该的东西social.properties)但是在运行应用程序时它会忽略我的classpath:前缀

kro*_*mit 32

不要使用classpath.这可能会导致不同的ClassLoader(容器与应用程序)出现问题.WEB-INF永远是更好的选择.

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring-config.xml</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
     <property name="location">
         <value>/WEB-INF/social.properties</value>
     </property>
</bean>
Run Code Online (Sandbox Code Playgroud)


pko*_*pac 13

把事情做好/src/main/resources/foo/bar.properties,然后将它们作为参考classpath:/foo/bar.properties.


小智 5

尝试使用classpath*:前缀代替.

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

还请尝试部署爆炸战争,以确保所有文件都在那里.