1. 程式人生 > >SpringMVC總結筆記

SpringMVC總結筆記

SpringMVC元件

  • DispatcherServlet前端控制器:接收request,進行response

  • HandlerMapping處理器對映器:根據url查詢Handler。(可以通過xml配置方式,註解方式)

  • HandlerAdapter處理器介面卡:根據特定規則去執行Handler,編寫Handler時需要按照HandlerAdapter的要求去編寫。

  • Handler處理器(後端控制器):需要程式設計師去編寫,常用註解開發方式。 Handler處理器執行後結果 是ModelAndView,具體開發時Handler返回方法值型別包括 :ModelAndView、String(邏輯檢視名)、void(通過在Handler形參中新增request和response,類似原始 servlet開發方式,注意:可以通過指定response響應的結果型別實現json資料輸出)

  • View resolver檢視解析器:根據邏輯檢視名生成真正的檢視(在springmvc中使用View物件表示)

  • View檢視:jsp頁面,僅是資料展示,沒有業務邏輯。

PS: DispatcherServlet 就是一個Servlet ,也是對請求進行轉發的核心Servlet 。在這裡即所有符合相應規範的請求將首先被DispatcherServlet 處理,而DispatcherServlet 它要作的工作就是對請求進行分發(也即是說把請求轉發給具體的Controller )。可以簡單地認為,它就是一個總控處理器,但事實上它除了具備總控處理理器對請求進行分發的能力外,還與spring 的IOC 容器完全整合在一起,從而可以更好地使用spring 的其它功能。

View Resolver:在給前後綴賦值時,應特別注意它和返回的 ModelAndView 物件能否組成一個正確的檔案全路徑

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/page/" />
    <property name="suffix" value=".jsp" />
</bean>

工作原理

1、啟動伺服器,根據web.xml 的配置載入前端控制器(也稱總控制器) DispatcherServlet 。在載入時、會完成一系列的初始化動作。 2、根據servlet 的對映請求,並參照“控制器配置檔案”(即applicationContext.xml 這樣的配置)檔案,把具體的請求分發給特定的後端控制器進行處理 3、後端控制器呼叫相應的邏輯層程式碼,完成處理並返回檢視物件( ModelAndView)給前端處理器。 4、前端控制器根據後端控制器返回的 ModelAndView 物件,並結合一些配置,返回一個相應的頁面給客戶端。

小結: 這種Front Controller 模式常應用在主流的web 框架中,比如典型的struts1.x 框架.FrontController 模式:所有請求先交給一個前端處理器(總控處理器)處理,然後前端處理器會參照一些配置檔案再把具體的請求交給相應的後端處理器。後端處理器呼叫邏輯層程式碼,並根據邏輯返回相應的檢視物件給前端控制器。然後前端控制器再根據檢視物件返回具體的頁面給客戶端(提示:和spring mvc一樣,在struts1.x 中前端控制器是Servlet, 而在struts2 中前端控制器是Filter )。 概述 FrontController 模式:前端控制器預處理並分發請求給後端控制器,後端控制器進行真正的邏輯處理並返回 檢視物件,前端控器器根據檢視物件返回具體頁面給客戶端。

執行流程

配置步驟

前端介面卡(配置web.xml)

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <servlet>
        <servlet-name>spmvc</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spmvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
</web-app>

處理器對映器和介面卡

使用註解方式的處理器對映器和介面卡:
    <!--註解對映器 -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
    <!--註解介面卡 -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

在實際開發,使用<mvc:annotation-driven>代替上邊處理器對映器和介面卡配置。

處理器 @controller註解必須要加,作用標識類是一個Handler處理器。 @requestMapping註解必須要加,作用: 1、對url和Handler的方法進行對映。 2、可以窄化請求對映,設定Handler的根路徑,url就是根路徑+子路徑請求方式 3、可以限制http請求的方法 對映成功後,springmvc框架生成一個Handler物件,物件中只包括 一個對映成功的method。