복붙노트

[SPRING] 스프링 3의 DispatcherServlet 대신 ContextLoaderListener를 통한 DefaultAnnotationHandlerMapping

SPRING

스프링 3의 DispatcherServlet 대신 ContextLoaderListener를 통한 DefaultAnnotationHandlerMapping

DispatcherServlet을 사용할 때 java.lang.IllegalStateException가 발생합니다 : No WebApplicationContext found : No ContextLoaderListener가 등록 되었습니까?  DelegatingFilterProxy 필터를 사용하면 오류가 발생합니다. 따라서 DispatcherServlet을 제거하고 대신 ContextLoaderListener를 사용하고 Spring 애플리케이션이 잘로드됩니다. 그러나, 나는 하나의 아주 중요한 빈에 문제가있다 :

   <context:component-scan base-package="com.mydomain"/>  
   <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
      <property name="interceptors">
         <list>
            <ref bean="openSessionInViewInterceptor" />
         </list>
      </property>
   </bean>

이 빈은 더 이상 작동하지 않으며, @ 컨트롤러의 URL은 더 이상 매핑되지 않습니다. DispatcherServlet을 사용하여 다시 전환하면 아무런 문제가 없습니다 (내 필터가 다시 쓸모 없다는 것만 제외하고). 이 Bean을 ContextLoaderListener 내에서 올바르게로드하려면 어떻게해야합니까?

건배

해결법

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

    1.ContextLoaderListener와 DispatcherServlet이 모두 필요합니다. 오류 메시지가 서블릿을 제거하라는 메시지를 표시하지 않았습니다.

    ContextLoaderListener와 DispatcherServlet이 모두 필요합니다. 오류 메시지가 서블릿을 제거하라는 메시지를 표시하지 않았습니다.

    Spring이 여기에서 무엇을하는지 명확하게하기 위해 DispatcherServlet은 (보통 xxx-servlet.xml을 사용하여) 자체 ApplicationContext를 생성하지만 web.xml에서 구성한 모든 스프링 필터는 서블릿의 ApplicationContext에 액세스 할 수 없습니다.

    ContextLoaderListener는 두 번째 ApplicationContext (전체 webapp와 연결됨)를 생성하고 서블릿의 ApplicationContext와 연결하여 필터와 서블릿이 Spring을 통해 통신 할 수 있도록합니다.

  2. ==============================

    2.Spring MVC 기본 app의 web.xml에는 ContextLoaderListener가 없다. https://src.springframework.org/svn/spring-samples/mvc-basic/trunk/src/main/webapp/WEB-INF/web.xml을 참조하십시오.

    Spring MVC 기본 app의 web.xml에는 ContextLoaderListener가 없다. https://src.springframework.org/svn/spring-samples/mvc-basic/trunk/src/main/webapp/WEB-INF/web.xml을 참조하십시오.

    내 응용 프로그램에서 다음 오류가 발생하기 때문에 내가 묻는 이유 :

    ERROR [[Spring MVC Dispatcher Servlet]] 서블릿 용 Servlet.service () Spring MVC Dispatcher Servlet이 예외를 던졌습니다. java.lang.IllegalStateException : No WebApplicationContext found : no ContextLoaderListener가 등록 되었습니까?

    ContextLoaderListener (문제가 발생할 가능성이 높음)가 없습니다.

    MVC 기본 응용 프로그램이 작동하는 이유는 무엇입니까?

  3. from https://stackoverflow.com/questions/1464881/defaultannotationhandlermapping-via-contextloaderlistener-instead-of-dispatchers by cc-by-sa and MIT license