跳到主要内容
版本:7.0.3

Servlet 配置

Hunyuan 7b 中英对照 Servlet Config

在Servlet环境中,你可以选择以编程方式配置Servlet容器,或者将其与web.xml文件结合使用。以下示例注册了一个DispatcherServlet

import org.springframework.web.WebApplicationInitializer;

public class MyWebApplicationInitializer implements WebApplicationInitializer {

@Override
public void onStartup(ServletContext container) {
XmlWebApplicationContext appContext = new XmlWebApplicationContext();
appContext.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");

ServletRegistration.Dynamic registration = container.addServlet("dispatcher", new DispatcherServlet(appContext));
registration.setLoadOnStartup(1);
registration.addMapping("/");
}
}

WebApplicationInitializer 是 Spring MVC 提供的一个接口,它确保您的实现能够被发现,并被自动用于初始化任何 Servlet 3 容器。一个名为 AbstractDispatcherServletInitializerWebApplicationInitializer 抽象基类实现,通过覆盖方法来指定 Servlet 映射和 DispatcherServlet 配置的位置,使得注册 DispatcherServlet 变得更加简单。

这适用于使用基于Java的Spring配置的应用程序,如下例所示:

public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

@Override
protected Class<?>[] getRootConfigClasses() {
return null;
}

@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[] { MyWebConfig.class };
}

@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}

如果你使用基于XML的Spring配置,你应该直接从AbstractDispatcherServletInitializer继承,如下例所示:

public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {

@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}

@Override
protected WebApplicationContext createServletApplicationContext() {
XmlWebApplicationContext cxt = new XmlWebApplicationContext();
cxt.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");
return cxt;
}

@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}

AbstractDispatcherServletInitializer 还提供了一种方便的方法来添加 Filter 实例,并让它们自动映射到 DispatcherServlet,如下例所示:

public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {

// ...

@Override
protected Filter[] getServletFilters() {
return new Filter[] {
new HiddenHttpMethodFilter(), new CharacterEncodingFilter() };
}
}

每个过滤器都会根据其具体类型被赋予一个默认名称,并自动映射到DispatcherServlet上。

AbstractDispatcherServletInitializerisAsyncSupported受保护方法为在DispatcherServlet及其所有映射的过滤器上启用异步支持提供了一个统一的位置。默认情况下,此标志被设置为true

最后,如果你需要进一步自定义DispatcherServlet本身,你可以重写createDispatcherServlet方法。