对于最新稳定版本,请使用 Spring Framework 7.0.6spring-doc.cadn.net.cn

处理

DispatcherServlet 按如下方式处理请求:spring-doc.cadn.net.cn

  • WebApplicationContext 会被查找并在请求中作为属性进行绑定,以便控制器和处理流程中的其他组件可以使用。默认情况下,它会以 DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE 键进行绑定。spring-doc.cadn.net.cn

  • 区域设置解析器绑定到请求,以便在处理请求(渲染视图、准备数据等)过程中,相关元素能够解析出要使用的区域设置。如果您不需要区域设置解析功能,则无需使用区域设置解析器。spring-doc.cadn.net.cn

  • 主题解析器绑定到请求上,以便视图等元素能够确定使用哪个主题。如果您不使用主题,可以忽略它。spring-doc.cadn.net.cn

  • 如果你指定了一个多部分文件解析器(multipart file resolver),请求将被检查是否包含多部分内容(multiparts)。如果发现多部分内容,该请求会被包装成一个 MultipartHttpServletRequest,以便流程中的其他组件进行进一步处理。有关多部分处理的更多信息,请参见Multipart Resolverspring-doc.cadn.net.cn

  • 系统会搜索一个合适的处理器。如果找到处理器,则会执行与该处理器关联的执行链(包括预处理器、后处理器和控制器),以准备用于渲染的模型。或者,对于带注解的控制器,可以在HandlerAdapter中直接渲染响应,而不是返回一个视图。spring-doc.cadn.net.cn

  • 如果返回了一个模型,则会渲染视图。如果没有返回模型(可能是由于预处理器或后处理器出于安全等原因拦截了请求),则不会渲染视图,因为该请求可能已经被处理完成。spring-doc.cadn.net.cn

HandlerExceptionResolver 中声明的 WebApplicationContext Bean 用于 解析请求处理过程中抛出的异常。这些异常解析器允许 自定义处理异常的逻辑。更多详情请参见异常spring-doc.cadn.net.cn

为了支持 HTTP 缓存,处理器可以使用 checkNotModifiedWebRequest 方法, 以及针对带注解控制器的更多选项,详见 控制器的 HTTP 缓存spring-doc.cadn.net.cn

您可以通过在 DispatcherServlet 文件中的 Servlet 声明里添加 Servlet 初始化参数(init-param 元素)来定制各个 web.xml 实例。下表列出了所支持的参数:spring-doc.cadn.net.cn

表1. DispatcherServlet 初始化参数
参数 说明

contextClassspring-doc.cadn.net.cn

实现 ConfigurableWebApplicationContext 接口的类,将由该 Servlet 实例化并在本地进行配置。默认情况下,使用 XmlWebApplicationContextspring-doc.cadn.net.cn

contextConfigLocationspring-doc.cadn.net.cn

传递给上下文实例(由 contextClass 指定)的字符串,用于指示可在何处找到上下文。该字符串可能包含多个字符串(使用逗号作为分隔符),以支持多个上下文。当多个上下文位置中存在重复定义的 bean 时,以最新位置的定义为准。spring-doc.cadn.net.cn

namespacespring-doc.cadn.net.cn

WebApplicationContext 的命名空间。默认为 [servlet-name]-servletspring-doc.cadn.net.cn

throwExceptionIfNoHandlerFoundspring-doc.cadn.net.cn

当请求找不到处理器时,是否抛出 NoHandlerFoundException 异常。 随后可以通过 HandlerExceptionResolver 捕获该异常(例如,使用 @ExceptionHandler 注解的控制器方法),并像处理其他异常一样进行处理。spring-doc.cadn.net.cn

默认情况下,此值设置为 false,此时 DispatcherServlet 会将响应状态设置为 404(NOT_FOUND),而不会抛出异常。spring-doc.cadn.net.cn

请注意,如果同时配置了默认 Servlet 处理, 则所有无法解析的请求都会被转发到默认 Servlet,而永远不会抛出 404 错误。spring-doc.cadn.net.cn