处理
DispatcherServlet
处理请求的过程如下:
-
在请求中搜索并绑定
WebApplicationContext
,以便控制器和处理过程中的其他元素可以使用。默认情况下,它绑定在DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE
键下。 -
将区域解析器绑定到请求,让处理过程中的元素解析在处理请求时要使用的区域设置(渲染视图、准备数据等)。如果不需要区域解析,则不需要区域解析器。
-
将主题解析器绑定到请求,让视图等元素确定要使用的主题。如果不使用主题,则可以忽略它。
-
如果指定了多部分文件解析器,则会检查请求中的多部分内容。如果找到多部分内容,则请求将被包装在
MultipartHttpServletRequest
中,以便其他处理过程中的元素进一步处理。有关多部分处理的更多信息,请参见多部分解析器。 -
搜索适当的处理程序。如果找到处理程序,则与处理程序相关联的执行链(预处理器、后处理器和控制器)将被运行以准备模型进行渲染。或者,对于注释控制器,响应可以在
HandlerAdapter
中呈现,而不是返回视图。 -
如果返回模型,则渲染视图。如果没有返回模型(可能是由于预处理器或后处理器拦截请求,也许是出于安全原因),则不会渲染视图,因为请求可能已经被满足。
在WebApplicationContext
中声明的HandlerExceptionResolver
bean用于解析请求处理过程中抛出的异常。这些异常解析器允许自定义逻辑来处理异常。有关更多详细信息,请参见异常。
对于HTTP缓存支持,处理程序可以使用WebRequest
的checkNotModified
方法,以及注释控制器的进一步选项,如控制器的HTTP缓存中所述。
您可以通过向web.xml
文件中的Servlet声明添加Servlet初始化参数(init-param
元素)来自定义单个DispatcherServlet
实例。以下表列出了支持的参数:
参数 | 说明 |
---|---|
|
实现 |
|
传递给上下文实例(由 |
|
|
|
当未找到请求的处理程序时是否抛出 请注意,如果还配置了默认Servlet处理程序,则未解析的请求始终会被转发到默认Servlet,并且永远不会引发404错误。 |