跳到主要内容

DispatcherServlet

ChatGPT-4o-mini 中英对照 DispatcherServlet

Spring MVC,像许多其他 web 框架一样,是围绕前控制器模式设计的,其中一个中央 Servlet,即 DispatcherServlet,提供了一个共享的请求处理算法,而实际的工作由可配置的委托组件执行。这个模型灵活且支持多样化的工作流程。

DispatcherServlet 和任何 Servlet 一样,需要根据 Servlet 规范通过 Java 配置或在 web.xml 中进行声明和映射。反过来,DispatcherServlet 使用 Spring 配置来发现它所需的委托组件,以进行请求映射、视图解析、异常处理,以及更多

以下 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/*");
}
}
java
备注

除了直接使用 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>
xml
备注

Spring Boot 遵循不同的初始化顺序。Spring Boot 不通过连接到 Servlet 容器的生命周期,而是使用 Spring 配置来引导自身和嵌入式 Servlet 容器。FilterServlet 声明在 Spring 配置中被检测并注册到 Servlet 容器中。有关更多详细信息,请参见 Spring Boot 文档

章节摘要