天天看點

SpringMVC執行流程和web.xml配置springMVC的執行流程如圖所示:

springMVC的執行流程如圖所示:

SpringMVC執行流程和web.xml配置springMVC的執行流程如圖所示:

解析(對應上圖):①用戶端的所有請求都交給前端控制器DispatcherServlrt來處理,他會負責調用系統的其他子產品來真正處理使用者請求

②DispatcherServlet收到請求後,根據請求資訊(包括URL、HTTP協定方法、請求頭、請求參數、Cookie等)以及HandlerMapping的配置找到該請求的Handler(任何一個對象都可以作為請求的Handler)。

③如果比對成功(找到對應的Handler)會傳回這個Handler的處理鍊HandlerExecutionChain對象,在getHandler得到的HandlerExecutionChain對象裡還包含了interceptor(攔截器)。

④-⑦:Spring會通過HandlerAdapter對該處理器進行封裝。HandlerAdapter是一個擴充卡,它使用統一接口對Handler中的各種方法進行調用。Handler完成對使用者的請求後,會傳回一個ModelAndVIew對象給DispatcherServlet,ModelAndView顧名思義,包含了資料模型和相應的視圖資訊。

⑧-⑨:ModelAndView的視圖的作用是邏輯視圖,DispatcherServlet還要借助ViewResolver(視圖解析器)完成從邏輯視圖到真實視圖的解析工作。

⑩之後:當得到真正的響應視圖對象後,DispatcherServlet會利用視圖對象對模型進行渲染。用戶端得到響應,可能是一個普通的HTNML頁面,也可能是XML或者JSON字元串,還可以是一張圖檔或者一個PDF檔案。

注意

上面的圖是springMVC的底層實作的流程,而通常情況下我們在程式設計中能接觸到的過程如下:(springMVC封裝了大量細節)

SpringMVC執行流程和web.xml配置springMVC的執行流程如圖所示:

使用SpringMVC的程式必須在伺服器啟動時就加載

org.springframework.web.servlet.DispatcherServl

(通過配置web.xml實作)

并且可以配置加載

org.springframework.web.context.ContextLoaderListener

讓spring容器完全接管網頁的Bean(這步一并非必要,但大家都這麼做參見ContextLoaderListener介紹)

常見的一個web.xml長這樣

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-context*.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>springServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:/spring-mvc*.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
           

繼續閱讀