2011-05-17 158 views
32

这是一个很老的问题,但解决方案并不适合我。无法打开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:无法[/social.properties]

我查了WAR包开ServletContext的资源 - .xml.properties文件都在/WEB-INF/classes

.properties文件是src/main/resources.xmlsrc/main/java(默认包两个)和maven运输它们(我认为)正确的默认包WEB-INF/classes

有谁知道为什么我可以得到这个异常?谢谢。

编辑:我只想补充一点,JUnit测试去正确(我的意思是,他们装载他们从social.properties应该),我认为目前的应用程序的context.xml但在运行应用程序时,它忽略了我的classpath:前缀

+1

你肯定'类路径:'前缀是居然有? – axtavt 2011-05-17 18:35:16

+1

是的,编译后告诉我'/ home /...- DEVELOPMENT-0.0.1.war'构建成功。当我打开战争并查看'/ WEB-INF/classes/application-context.xml'时,我看到'classpath:'前缀 – kuncajs 2011-05-17 18:40:23

+0

你说“.xml和.properties文件都在/ WEB-INF/classes” - 这是否意味着“social.properties”特别在/ WEB-INF/classes中? – 2011-05-17 18:41:50

回答

30

请勿使用classpath。这可能会导致不同ClassLoaders(容器与应用程序)的问题。 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> 
+0

我们如何使用'BufferedWriter'来加载以这种方式加载的文件? – 2014-02-13 02:40:30

+1

@ user75782131你可以尝试'getServletContext()。getRealPath(“/ WEB-INF/somefile.txt”)' – kromit 2014-02-14 08:30:41

+0

以上因为文件里面的类应该使用/WEB-INF/classes/spring-config。 XML user2505915 2015-07-21 13:56:06

0

文件进入src/main/resources并且social.properties文件进入src/main/java ...所以当你打包(mvn package)或者当你运行tomcat(mvn tomcat:run)时,你的social.properties消失了知道你说当你检查.war文件在这里...但你的例外说相反)。

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

0

你有Tomcat解压WAR文件吗?当加载WAR文件时,似乎在类路径中找不到这些文件,并且而不是被解压缩。

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

把东西像/src/main/resources/foo/bar.properties,然后引用它们为classpath:/foo/bar.properties

0

马克确保propertie文件在 “/ WEB-INF/classes中” 尝试使用

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