處理

DispatcherServlet 處理請求的方式如下

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

  • 地區設定解析器繫結到請求,讓程序中的元素在處理請求時(呈現視圖、準備資料等等)解析要使用的地區設定。如果您不需要地區設定解析,則不需要地區設定解析器。

  • 主題解析器繫結到請求,讓視圖等元素決定要使用的主題。如果您不使用主題,可以忽略它。

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

  • 搜尋適當的處理器。如果找到處理器,則會執行與該處理器關聯的執行鏈(前處理器、後處理器和控制器),以準備用於呈現的模型。或者,對於註解控制器,可以直接呈現回應(在 HandlerAdapter 內),而不是傳回視圖。

  • 如果傳回模型,則會呈現視圖。如果未傳回模型(可能是由於前處理器或後處理器攔截了請求,可能是出於安全原因),則不會呈現視圖,因為請求可能已經完成。

WebApplicationContext 中宣告的 HandlerExceptionResolver Bean 用於解析請求處理期間擲出的例外。這些例外解析器允許自訂邏輯以處理例外。請參閱 例外 以獲取更多詳細資訊。

為了支援 HTTP 快取,處理器可以使用 WebRequestcheckNotModified 方法,以及註解控制器的其他選項,如 控制器的 HTTP 快取 中所述。

您可以透過將 Servlet 初始化參數 (init-param 元素) 新增至 web.xml 檔案中的 Servlet 宣告,來自訂個別的 DispatcherServlet 實例。下表列出了支援的參數

表 1. DispatcherServlet 初始化參數
參數 說明

contextClass

實作 ConfigurableWebApplicationContext 的類別,將由此 Servlet 實例化並在本機組態。預設情況下,使用 XmlWebApplicationContext

contextConfigLocation

傳遞給 context 實例(由 contextClass 指定)的字串,用於指示可以在哪裡找到 context。該字串可能由多個字串組成(使用逗號作為分隔符),以支援多個 context。在多個 context 位置具有重複定義的 bean 的情況下,最新的位置優先。

namespace

WebApplicationContext 的命名空間。預設為 [servlet-name]-servlet

throwExceptionIfNoHandlerFound

當請求找不到處理器時,是否擲出 NoHandlerFoundException。然後可以使用 HandlerExceptionResolver(例如,透過使用 @ExceptionHandler 控制器方法)捕獲例外,並像其他例外一樣處理。

自 6.1 起,此屬性設定為 true 且已棄用。

請注意,如果也組態了 預設 servlet 處理,則未解析的請求始終會轉發到預設 servlet,並且永遠不會引發 404。