1

我必须动态加载调度程序 servlet 及其配置文件。我正在研究使用 webapplicationinitializer 注入调度程序 servlet 的概念,这是春季的一项最新发展。以下文档给出了概述: http ://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/WebApplicationInitializer.html

我正在尝试进行基本设置,但它不起作用。我无法理解从哪里开始摆脱传统的弹簧开发。谁能举例说明如何使用这种新机制?我使用了以下代码:

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

}

此外,如果我们动态注入调度程序 servlet,是否意味着调度程序 servlet 在 Web 容器(tomcat)启动期间加载?

4

1 回答 1

0

尝试将您的映射从 更改/dispatcher.addMapping("/*")

/已经映射到 Tomcat 的默认 Servlet,所以addMapping("/")不会做任何事情。

这仅适用于您使用的 Tomcat 版本 <= 14。

在 Tomcat 启动时,tomcat 会寻找一个implements ServletContainerInitializer. 在 Spring 中,它会找到 class SpringServletContainerInitializer。这个类将被提供一组 Tomcat 加载的类(基本上是你的所有类)。然后它将寻找其中任何一个implements WebApplicationInitializer并调用onStartup()它们。这就是您在上面发布的方法发挥作用的地方,初始化上下文和 Spring 的 `DispatcherServlet.

于 2013-02-22T16:37:26.317 回答