處理

DispatcherServlet 按如下方式處理請求

  • WebApplicationContext 被搜尋並作為屬性繫結到請求中,以便控制器和程序中的其他元素可以使用。它預設繫結在 DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE 鍵下。

  • 區域解析器繫結到請求,以便程序中的元素可以在處理請求時(渲染檢視、準備資料等)解析要使用的區域。如果您不需要區域解析,則不需要區域解析器。

  • 如果您指定了多部分檔案解析器,則會檢查請求是否存在多部分。如果找到多部分,請求將被封裝到 MultipartHttpServletRequest 中,以便程序中的其他元素進一步處理。有關多部分處理的更多資訊,請參閱 多部分解析器

  • 搜尋合適的處理器。如果找到處理器,則執行與處理器關聯的執行鏈(預處理器、後處理器和控制器)以準備用於渲染的模型。另外,對於註解控制器,可以在不返回檢視的情況下渲染響應(在 HandlerAdapter 內)。

  • 如果返回模型,則渲染檢視。如果沒有返回模型(可能是由於預處理器或後處理器攔截了請求,可能是出於安全原因),則不渲染檢視,因為請求可能已經完成。

WebApplicationContext 中宣告的 HandlerExceptionResolver bean 用於解決請求處理期間丟擲的異常。這些異常解析器允許自定義處理異常的邏輯。有關更多詳細資訊,請參閱 異常

對於 HTTP 快取支援,處理器可以使用 WebRequestcheckNotModified 方法,以及註解控制器的其他選項,如 控制器的 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。

© . This site is unofficial and not affiliated with VMware.