22.2.3 DispatcherServlet的处理顺序
优质
小牛编辑
130浏览
2023-12-01
22.2.3 DispatcherServlet的处理顺序
在设立了一个DispatcherServlet
并且收到一个对该特定DispatcherServlet
的请求之后,这个DispatcherServlet
将按如下顺序开始处理该请求:
- 搜索
WebApplicationContext
,并将其绑定为请求中的一个属性,以使控制器和进程中的其他元素能够使用它。默认情况下,绑定在DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE
键下。 - 区域解析器被绑定到请求中,以使进程中的元素在处理请求(渲染视图、准备数据等等)时能解析要使用的区域。如果不需要区域解析则不需要该解析器。
- 主题解析器被绑定到请求中,以使诸如视图之类的元素确定使用哪个主题。如果不使用主题则可以忽略它。
- 如果指定了一个multipart文件解析器,则在该请求中检查multipart;如果找到了,则将请求包装在
MultipartHttpServletRequest
中,以便进程中的其他元素后续处理。有关multipart处理的更多信息,请参见22.10节“Spring的multipart(文件上传)支持”。 - 搜索合适的处理程序。如果找到了,则执行与处理程序(预处理程序、后处理程序和控制器)关联的执行链,以便准备model或渲染。
- 如果返回了model,则渲染视图。如果没有返回model(可能由于预处理程序或后处理程序出于安全原因拦截了该请求),不会渲染任何视图,因为该请求可能已经被完成了。
在WebApplicationContext
中声明的程序异常解析器收集处理请求过程中抛出的异常。使用这些异常解析器允许您定义自定义的行为来处理异常。
Spring的DispatcherServlet
还支持返回由Servlet API指定的最后修改日期。确定特定请求的最后修改日期的过程很简单:DispatcherServlet
查找一个适当的处理程序映射,并检验发现的处理程序是否实现了LastModified接口,如果实现了,LastModified
接口的long getLastModified(request)
方法的值将返回给客户端。
可以通过将Servlet初始化参数(init-param
元素)添加到web.xml
文件的Servlet声明中来自定义单独的DispatcherServlet
实例。支持的参数列表请参见下表。
Table 22.2. DispatcherServlet initialization parameters
参数 | 说明 |
---|---|
contextClass | 实现了WebApplicationContext 的类,它实例化了该Servlet所使用的上下文。默认情况下使用XmlWebApplicationContext 。 |
contextConfigLocation | 传递给上下文实例(由contextClass 指定)的字符串,以指示什么位置可以找到上下文。该字符串可能包含多个字符串(使用逗号分隔)来支持多个上下文。在多个上下文的情况下,如果一个bean被定义了两次,那么以最后的上下文为准。 |
namespace | WebApplicationContext 的命名空间。默认为[servlet-name]-servlet 。 |