2012-04-09 7 views
1

Ich muss Dispatcher Servlet und seine Konfigurationsdateien dynamisch laden. Ich betrachte das Konzept des Injizierens von Dispatcher-Servlet unter Verwendung von webapplicationinitializer, eine sehr neue Entwicklung im Frühjahr. Das folgende Dokument gibt einen Überblick: http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/WebApplicationInitializer.htmlInject Dispatcher Servlet mit Webapplicationinitializer in Springmvc

Ich versuche, eine grundlegende Einrichtung zu tun und es funktioniert einfach nicht. Ich bin nicht in der Lage zu verstehen, wo ich mich von der traditionellen Frühlingsentwicklung abwenden sollte. Kann mir jemand ein Beispiel dafür geben, wie man diesen neuen Mechanismus benutzt? Ich habe den folgenden Code:

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("/"); 
} 

}

Außerdem, wenn wir dynamisch Dispatcher Servlet injizieren, bedeutet es, dass Dispatcher Servlet Lasten während des Web-Container (Tomcat) Startup?

+0

Ich weiß aus Erfahrung, dass "WebApplicationInitializer" funktioniert. Kannst du "* einfach nicht arbeiten" erklären? –

+0

@TomaszNurkiewicz Danke für den Kommentar. Ich bin nicht in der Lage, grundlegende Beispiel selbst zu konfigurieren. Ich habe ContextLoaderListener in web.xml konfiguriert. In der Dokumentation wird erwähnt, dass webapplicationinitializer als normale Klasse verwendet werden kann. Also habe ich Code in meinem ersten Beitrag erwähnt. Wenn Sie Beispiele zum Teilen haben, können Sie mir bitte einen Blick darauf werfen? – codejammer

+0

@codejammer Ich habe meine Antwort aktualisiert. Sie könnten einige Hinweise davon bekommen. –

Antwort

0

Versuchen Sie, Ihr Mapping von / zu dispatcher.addMapping("/*") zu ändern.

/ ist bereits dem Standard-Servlet von Tomcat zugeordnet und daher wird addMapping("/") nichts tun.

Dies gilt nur, wenn Sie Tomcat verwenden Version < = 14.

Auf Tomcat Start-up wird tomcat dass implements ServletContainerInitializer für eine Klasse suchen. Im Frühjahr wird es die Klasse SpringServletContainerInitializer finden. Diese Klasse wird mit einer Reihe von Tomcat geladenen Klassen gespeist (im Prinzip alle Ihre Klassen). Es wird dann nach einem von ihnen suchen, dass implements WebApplicationInitializer und onStartup() auf ihnen aufrufen. Hier kommt die Methode zum Tragen, die Sie oben gepostet haben, indem Sie Kontexte und Spring's DispatcherServlet initialisieren.

Verwandte Themen