原文: https://javatutorial.net/dispatcher-servlet-in-spring

调度器 Servlet 是 Spring Web MVC 中最重要的组件

Spring 中的`DispatcherServlet` - 图1

为什么调度器 servlet 是最重要的组件? 因为它充当胶水,这意味着它接收到传入的 URL 并找到正确的方法和视图。 它通过 HTTP 请求接收 URL。 您还可以将其视为中间件,因为它与两端进行通信 - HTTP 请求的发送方和 Spring 应用程序。调度器 Servlet 完全集成在 IoC 容器中,并允许您使用 Spring 拥有的所有功能。

Spring 中的`DispatcherServlet` - 图2

DispatcherServlet工作流程

以上介绍是顶级概述。 现在,让我们更具体地了解它在幕后的发生方式。

  1. 服务器请求到达服务器,并且调度器 Servlet 收到。
  2. 为调度器 Servlet 授予了处理程序对象,在大多数情况下,它将是HandlerExecutionChain的实例,该实例来自HandlerMapping对象,该对象基于 URL 映射 。

    1. 有两种定义 URL 映射的方法:

      1. web.xml文件
      2. 控制器的方法注释
  3. 已从处理程序对象中检索到HandlerInterceptor对象的一个或多个实例。
  4. 从处理程序对象中检索HandlerAdapter的实例。

    1. 由于这个实例,我们可以调用句柄方法,该方法导致执行控制器类具有的任何逻辑。
  5. HandlerInterceptor实例上的后处理逻辑已执行。 这是调用渲染方法之前的最后一步。
  6. ViewResolver实例完成返回给响应的适当视图组件。
  7. 最后,在该视图的实例上调用了渲染方法。

分派器 Servlet 继承自HttpServlet,并在 Web 应用程序的web.xml文件中声明。 同样,如果您从上面阅读了步骤 2,您将看到我们需要 URL 映射。 首先,URL 映射将请求映射到分派器处理程序进行处理。 现在,使用 URL 映射的一种方法是将其存储在相同的web.xml文件中。

  1. <web-app>
  2. <servlet>
  3. <servlet-name>example</servlet-name>
  4. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  5. <load-on-startup>1</load-on-startup>
  6. </servlet>
  7. <servlet-mapping>
  8. <servlet-name>example</servlet-name>
  9. <url-pattern>*.form</url-pattern>
  10. </servlet-mapping>
  11. </web-app>

此代码段示例摘自 Spring 文档

示例代码段显示,所有以.form结尾的请求都将由示例调度器 servlet 处理。

初始化调度器 servlet 后,框架将在应用程序的web-inf目录中查找名称为[servlet-name]-servlet.xml的文件,并在该目录中创建 Bean 并覆盖在全局范围内以相同名称定义的 bean 的所有定义。