Spring 官方文檔第十六章筆記(2):DispatcherServlet

Spring 官方文檔第十六章筆記(2):DispatcherServlet


DispatcherServlet的責任:接受請求,根據配置將請求轉發給相應的Controller。由於DispatcherServlet和Spring IOC容器集成在一塊兒,因此可使用Spring IOC容器的功能。web


DispatcherServlet處理請求的過程以下:圖中的Front Controller就是DispatcherServlet。spring



配置DispatcherServlet


DispatcherServlet就是一個J2EE servelt,須要在web.xm中就行配置:app

<web-app>

    <servlet>
        <servlet-name>example</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>example</servlet-name>
        <url-pattern>/example/*</url-pattern>
    </servlet-mapping>

</web-app>

全部以/example開頭的請求,都會被名稱爲example的DispatcherServlet實例處理。post


建立和配置[DispatcherServlet-name]-servlet.xml文件

Spring MVC中,容器使用bean來處理請求,這些bean定義在[DispatcherServlet-name]-servlet.xml文件中。url

在Spring MVC中,每個DispatcherServlet都擁有本身的WebApplicationContext,都繼承自root WebApplicationContext。spa

繼承圖以下:code


Spring MVC在初始化DispatcherServlet時,會讀取[DispatcherServlet-name]-servlet.xml 文件,使用裏面定義的bean覆蓋繼承來的同名的bean。orm

由於定義的DispatcherServlet的名稱爲example,因此建立example-servlet.xm文件。xml

DispatcherServlet使用特定的bean來process requests和render the appropriate views。這些特定的bean是Spring MVC的一部分。繼承

能夠在[DispatcherServlet-name]-servlet.xml中指定使用哪些bean。Spring MVC默認會配置一些bean,配置哪些bean在org.springframework.web.servlet包中的DispatcherServlet.properties指定。

DispatcherServlet處理請求的流程

一、WebApplicationContext將request封裝爲一個attribute,提供給controller和流程中其餘元素使用。封裝時的默認key爲DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE。

二、The locale resolver is bound to the request to enable elements in the process to resolve the locale to use when processing the request (rendering the view, preparing data, and so on). 若是不須要,能夠不使用。(如何配置,才能不使用?)

三、The theme resolver is bound to the request to let elements such as views determine which theme to use。若是不須要,能夠不使用。(如何配置,才能不使用?)

四、若是配置了multipart file resolver,Spring MVC會檢查request是否爲multiparts,若是是,request會被包裝爲MultipartHttpServletRequest。

五、查詢是否有相應的handler。若是有,則執行handler相關的execution chain(preprocessors, postprocessors, and controllers)。

六、若是返回了Model,則render view。反之則不render。


客製化DispatcherServlet

能夠經過在web.xml中使用servelet初始化參數,能夠客製化DispatcherServlet。

使用<init-param>進行配置。能夠配置的參數以下:

contextClass:實現了WebApplicationContext的類,用於建立Servlet關聯的context,默認爲XmlWebApplicationContext。

contextConfigLocation:指定配置文件存放路徑。可使用逗號分隔,用於指定多個context。若是在不一樣的context中定義了相同的bean,使用最後定義的那一個。

namespace:配置WebApplicationContext的namespace,默認爲[ DispatcherServlet-name]-servlet。

相關文章
相關標籤/搜索