跳到主要内容
版本:7.0.3

DispatcherServlet

Hunyuan 7b 中英对照 DispatcherServlet

Spring MVC与其他许多Web框架一样,是基于前端控制器(front controller)模式设计的。在这个模式中,一个中央的Servlet——即DispatcherServlet——提供了请求处理的共享算法,而实际的工作则由可配置的委托组件(delegate components)来完成。这种模型具有灵活性,能够支持多种工作流程。

DispatcherServlet与任何Servlet一样,需要根据Servlet规范通过Java配置或在web.xml中进行声明和映射。反过来,DispatcherServlet利用Spring配置来发现其进行请求映射、视图解析、异常处理等所需的委托组件(详见[special-bean-types.md])。

以下是Java配置的示例,该配置注册并初始化了DispatcherServlet,该Servlet由Servlet容器自动检测(参见Servlet Config):

public class MyWebApplicationInitializer implements WebApplicationInitializer {

@Override
public void onStartup(ServletContext servletContext) {

// Load Spring web application configuration
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(AppConfig.class);

// Create and register the DispatcherServlet
DispatcherServlet servlet = new DispatcherServlet(context);
ServletRegistration.Dynamic registration = servletContext.addServlet("app", servlet);
registration.setLoadOnStartup(1);
registration.addMapping("/app/*");
}
}
备注

除了直接使用 ServletContext API 之外,你还可以扩展 AbstractAnnotationConfigDispatcherServletInitializer 并重写特定方法(请参见 上下文层次结构 下的示例)。

备注

对于程序化的使用场景,GenericWebApplicationContext可以作为AnnotationConfigWebApplicationContext的替代选项。详情请参见GenericWebApplicationContext的Javadoc。

以下是一个web.xml配置的示例,该示例用于注册和初始化DispatcherServlet

<web-app>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/app-context.xml</param-value>
</context-param>

<servlet>
<servlet-name>app</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>

</web-app>
备注

Spring Boot遵循不同的初始化顺序。它不依赖于Servlet容器的生命周期,而是通过Spring配置来启动自身以及嵌入的Servlet容器。FilterServlet的声明会在Spring配置中被检测到,并注册到Servlet容器中。更多详情,请参阅Spring Boot文档

部分总结