2012-04-09 2 views
1

디스패처 서블릿과 해당 구성 파일을 동적으로로드해야합니다. 나는 봄에 아주 최근에 개발 된 webapplicationinitializer를 사용하여 dispatcher 서블릿을 주입하는 개념을보고있다. 다음 문서는 개요를 제공합니다 : http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/WebApplicationInitializer.htmlSpringmvc의 Webapplicationinitializer를 사용하여 디스패처 서블릿을 주입하십시오.

기본 설정을 수행하려고하는데 단지 작동하지 않습니다. 나는 전통적인 봄 발달에서 어디로 흔들 리기 시작할지를 이해할 수 없다. 누구든지이 새로운 메커니즘을 사용하는 방법에 대한 예를 설명 할 수 있습니까?

public class MyWebAppInitializer implements WebApplicationInitializer { 

@Override 
public void onStartup(ServletContext container) { 
    // Create the 'root' Spring application context 
    AnnotationConfigWebApplicationContext rootContext = 
    new AnnotationConfigWebApplicationContext(); 
    rootContext.register(AppConfig.class); 

    // Manage the lifecycle of the root application context 
    container.addListener(new ContextLoaderListener(rootContext)); 

    // Create the dispatcher servlet's Spring application context 
    AnnotationConfigWebApplicationContext dispatcherContext = 
    new AnnotationConfigWebApplicationContext(); 
    dispatcherContext.register(DispatcherConfig.class); 

    // Register and map the dispatcher servlet 
    ServletRegistration.Dynamic dispatcher = 
    container.addServlet("dispatcher", new DispatcherServlet(dispatcherContext)); 
    dispatcher.setLoadOnStartup(1); 
    dispatcher.addMapping("/"); 
} 

} 우리가 동적으로 디스패처 서블릿을 주입하는 경우

는 또한, 그것은 그 웹 컨테이너 동안 디스패처 서블릿로드 (바람둥이) 시작을 의미 하는가 : 나는 다음과 같은 코드를 사용?

+0

'WebApplicationInitializer'가 작동하는 것을 알고 있습니다. 당신은 "* 단지 일하지 않는다"고 설명 할 수 있습니까? –

+0

@TomaszNurkiewicz 의견을 주셔서 감사합니다. 기본 예제 자체를 설정할 수 없습니다. web.xml에 ContextLoaderListener를 구성했습니다. 문서에서 웹 응용 프로그램 초기화 프로그램을 일반 클래스로 사용할 수 있다고 언급되어 있습니다. 그래서, 나는 첫 번째 게시물에 언급 된 코드를 사용했습니다. 공유 할 모범이 있다면 저에게 보여 줄 수 있습니까? – codejammer

+0

@codejammer 답변을 업데이트했습니다. 당신은 그것에 대한 단서를 얻을 수 있습니다. –

답변

0

/에서 dispatcher.addMapping("/*")으로 매핑을 변경해보세요.

/은 이미 Tomcat의 기본 서블릿에 매핑되어 있으므로 addMapping("/")은 아무 것도 처리하지 않습니다. 톰캣 스타트 업에 톰캣 버전 < = 14

를 사용하는 경우

이 만 적용, 바람둥이 implements ServletContainerInitializer 그 클래스를 찾습니다. 봄에는 클래스 SpringServletContainerInitializer이 있습니다. 이 클래스에는 Tomcat로드 된 클래스 집합 (기본적으로 모든 클래스)이 제공됩니다. 그런 다음 implements WebApplicationInitializer 중 하나를 찾아 onStartup()으로 전화합니다. 바로 위에서 작성한 메소드가 컨텍스트와 Spring의 DispatcherServlet을 초기화하여 작동하는 곳입니다.

관련 문제