调度器 Servlet 是 Spring Web MVC 中最重要的组件。
为什么调度器 servlet 是最重要的组件? 因为它充当胶水,这意味着它接收到传入的 URL 并找到正确的方法和视图。 它通过 HTTP 请求接收 URL。 您还可以将其视为中间件,因为它与两端进行通信 - HTTP 请求的发送方和 Spring 应用程序。调度器 Servlet 完全集成在 IoC 容器中,并允许您使用 Spring 拥有的所有功能。
DispatcherServlet
工作流程
以上介绍是顶级概述。 现在,让我们更具体地了解它在幕后的发生方式。
- 服务器请求到达服务器,并且调度器 Servlet 收到。
为调度器 Servlet 授予了处理程序对象,在大多数情况下,它将是
HandlerExecutionChain
的实例,该实例来自HandlerMapping
对象,该对象基于 URL 映射 。有两种定义 URL 映射的方法:
web.xml
文件- 控制器的方法注释
- 已从处理程序对象中检索到
HandlerInterceptor
对象的一个或多个实例。 从处理程序对象中检索
HandlerAdapter
的实例。- 由于这个实例,我们可以调用句柄方法,该方法导致执行控制器类具有的任何逻辑。
HandlerInterceptor
实例上的后处理逻辑已执行。 这是调用渲染方法之前的最后一步。- 由
ViewResolver
实例完成返回给响应的适当视图组件。 - 最后,在该视图的实例上调用了渲染方法。
分派器 Servlet 继承自HttpServlet
,并在 Web 应用程序的web.xml
文件中声明。 同样,如果您从上面阅读了步骤 2,您将看到我们需要 URL 映射。 首先,URL 映射将请求映射到分派器处理程序进行处理。 现在,使用 URL 映射的一种方法是将其存储在相同的web.xml
文件中。
<web-app>
<servlet>
<servlet-name>example</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>example</servlet-name>
<url-pattern>*.form</url-pattern>
</servlet-mapping>
</web-app>
此代码段示例摘自 Spring 文档。
示例代码段显示,所有以.form
结尾的请求都将由示例调度器 servlet 处理。
初始化调度器 servlet 后,框架将在应用程序的web-inf
目录中查找名称为[servlet-name]-servlet.xml
的文件,并在该目录中创建 Bean 并覆盖在全局范围内以相同名称定义的 bean 的所有定义。