处理
DispatcherServlet
处理请求的步骤如下:
-
WebApplicationContext
在请求中被搜索并作为一个属性绑定,控制器和过程中的其他元素可以使用它。默认情况下,它绑定在DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE
键下。 -
语言解析器被绑定到请求中,以便过程中的元素在处理请求时(渲染视图、准备数据等)解析要使用的语言。如果您不需要语言解析,您可以不需要语言解析器。
-
主题解析器被绑定到请求中,以便视图等元素确定使用哪个主题。如果您不使用主题,可以忽略它。
-
如果您指定了一个多部分文件解析器,请求会被检查是否包含多部分文件。如果找到多部分文件,请求会被包装在
MultipartHttpServletRequest
中,以便过程中的其他元素进一步处理。有关多部分处理的更多信息,请参见 Multipart Resolver。 -
将搜索合适的处理程序。如果找到处理程序,将运行与该处理程序关联的执行链(预处理器、后处理器和控制器)以准备渲染模型。或者,对于注解控制器,可以在
HandlerAdapter
内部渲染响应,而不是返回视图。 -
如果返回了模型,则渲染视图。如果没有返回模型(可能是由于预处理器或后处理器拦截了请求,可能出于安全原因),则不渲染视图,因为请求可能已经被满足。
在 WebApplicationContext
中声明的 HandlerExceptionResolver
bean 用于解决在请求处理过程中抛出的异常。这些异常解析器允许自定义处理异常的逻辑。有关更多详细信息,请参见 Exceptions。
对于 HTTP 缓存支持,处理程序可以使用 WebRequest
的 checkNotModified
方法,以及针对注解控制器的进一步选项,如 控制器的 HTTP 缓存 中所述。
您可以通过在 web.xml
文件中的 Servlet 声明中添加 Servlet 初始化参数(init-param
元素)来定制单个 DispatcherServlet
实例。下表列出了支持的参数:
表 1. DispatcherServlet 初始化参数
参数 | 说明 |
---|---|
contextClass | 实现 ConfigurableWebApplicationContext 的类,将由此 Servlet 实例化并在本地配置。默认使用 XmlWebApplicationContext 。 |
contextConfigLocation | 传递给上下文实例(由 contextClass 指定)的字符串,用于指示可以找到上下文的位置。该字符串可能由多个字符串组成(使用逗号作为分隔符),以支持多个上下文。在多个上下文位置中,如果有重复定义的 bean,则最新的位置优先。 |
namespace | WebApplicationContext 的命名空间。默认为 [servlet-name]-servlet 。 |
throwExceptionIfNoHandlerFound | 当请求未找到处理程序时,是否抛出 NoHandlerFoundException 。然后可以使用 HandlerExceptionResolver 捕获该异常(例如,通过使用 @ExceptionHandler 控制器方法)并像处理其他异常一样处理。从 6.1 开始,此属性设置为 true 并已弃用。请注意,如果 默认 Servlet 处理 也已配置,则未解决的请求始终会转发到默认 Servlet,并且不会引发 404。 |