복붙노트

[SPRING] ServletContext 리소스를 열 수 없습니다.

SPRING

ServletContext 리소스를 열 수 없습니다.

이것은 나이가 든 사람과 상당히 비슷한 질문이지만 해결책은 나에게 도움이되지 못했습니다.

WAR 패키지가 있습니다.

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

그러나 이것을 얻는 것 :

WAR 패키지 확인 - .xml 및 .properties 파일은 모두 / WEB-INF / classes에 있습니다.

.properties 파일은 src / main / resources에 있고 src / main / java에있는 .xml (기본 패키지 모두)이고 maven은 WEB-INF / classes의 기본 패키지

아무도 내가 왜이 예외를 얻을 수 있는지 아십니까? 고맙습니다.

편집 : JUnit 테스트가 올바르게 진행된다는 것을 추가하고 싶습니다. (social.properties에서로드해야하는 것을로드한다는 의미입니다.)하지만 앱을 실행하면 내 클래스 경로 : 접두어가 무시됩니다.

해결법

  1. ==============================

    1.classpath를 사용하지 마십시오. 이로 인해 다른 ClassLoader (컨테이너 대 응용 프로그램)에 문제가 발생할 수 있습니다. WEB-INF는 언제나 더 나은 선택입니다.

    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>
    
  2. ==============================

    2./src/main/resources/foo/bar.properties와 같은 것을 넣은 다음 classpath : /foo/bar.properties로 참조하십시오.

    /src/main/resources/foo/bar.properties와 같은 것을 넣은 다음 classpath : /foo/bar.properties로 참조하십시오.

  3. ==============================

    3.대신 classpath * : 접두어를 사용하십시오.

    대신 classpath * : 접두어를 사용하십시오.

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

    또한 폭발 된 전쟁을 전개하여 모든 파일이 있는지 확인하십시오.

  4. ==============================

    4.현재 application-context.xml 파일은 src / main / resources에 있고 social.properties 파일은 src / main / java에 있다고 생각합니다. 그래서 패키지를 만들 때 (mvn 패키지) 또는 tomcat을 실행할 때 (mvn tomcat : 실행) 귀하의 social.properties 사라진 (나는 당신이 파일을 여기에 .war에 체크인했을 때 당신이 말한 것을 알고 있지만 예외는 반대라고 말합니다).

    현재 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 표준 구조를 따르는 것입니다.

  5. ==============================

    5.Tomcat에서 WAR 파일의 압축을 풀고 있습니까? WAR 파일이로드되고 압축이 풀리지 않을 때 classpath에서 파일을 찾을 수없는 것 같습니다.

    Tomcat에서 WAR 파일의 압축을 풀고 있습니까? WAR 파일이로드되고 압축이 풀리지 않을 때 classpath에서 파일을 찾을 수없는 것 같습니다.

  6. ==============================

    6.이 코드로 시도해보십시오 ...

    이 코드로 시도해보십시오 ...

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

    7.속성 파일이 "/ WEB-INF / classes"에 있는지 확인하십시오.

    속성 파일이 "/ WEB-INF / classes"에 있는지 확인하십시오.

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location">
            <value>/WEB-INF/classes/social.properties</value>
        </property>
    </bean>
    
  8. from https://stackoverflow.com/questions/6035464/could-not-open-servletcontext-resource by cc-by-sa and MIT license