1. 程式人生 > >Spring MVC總結之工作原理詳解

Spring MVC總結之工作原理詳解

目錄

1.MVC思想/模式

2.Spring MVC的前端控制器(DispatcherServlet)

3.業務控制器Handle

4.Spring MVC的請求流程:



1.MVC思想/模式

1.1 MVC思想將一個應用分為三個基本部分:Model(模型)、View(檢視)和Controller(控制器);

1.2 在Java web 中,客戶端傳送請求,Servlet作為前端控制器(Controller) ,負責接收客戶端的請求,呼叫後端JavaBean(Model)來完成邏輯處理,最後將其轉發到相應的檢視(View)來渲染顯示;

 

2.Spring MVC的前端控制器(DispatcherServlet)

2.1 Spring MVC提供一個org.springframework.web.servlet.DispatcherServlet的Servlet充當前端控制器,所有的請求都由這個DispatcherServlet來分派;

2.2 配置DispatcherServlet:

 <servlet>
    <!-- Servlet 名稱 -->
    <servlet-name>springmvc</servlet-name>
    <!-- Servlet 對應的java類 -->
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- Servlet 的引數資訊,引數值為Spring MVC配置檔案路徑,預設會找/WEB-INF/[spring-name]-servlet.xml檔案-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:mvc/springmvc.xml</param-value>
    </init-param>
    <!-- 在Web應用啟動時立即載入Servlet -->
    <load-on-startup>1</load-on-startup>
  </servlet>
<!-- Servlet 對映宣告 -->
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
<!-- 監聽當前域.do的所以請求 -->
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

 

3.業務控制器Handle

3.1 DispatcherServlet前端控制器攔截到請求,請求會被分發到對應處理的Java類(Handle);Handle負責排程後臺業務邏輯程式碼類處理業務;

3.2 在Spring2.5版本前,開發Handle的唯一方法是實現Controller介面,介面必須實現handleRequest這個方法,實現Controler介面的這個類只能處理一個單一的請求動作,而在Spring 2.5之後,新增了基於註解的控制器,支援同時處理多個請求動作,也無需實現Controller和其他介面;

3.3 基於註解的控制器@Controller

1)示例:

2)修改Spring MVC配置:

<!--  自動掃描包,SpringMVC 會將該包下用@Controller註解的類註冊為spring的控制器 -->
    <context:component-scan base-package="org.demo"></context:component-scan>
	
	<!-- 簡化SpringMVC配置,自動註冊處理器對映器和處理器介面卡兩個bean -->
	<mvc:annotation-driven></mvc:annotation-driven>
	
	<!-- FreeMarker 檢視解析器-->
    <bean id="freemarkResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
       <property name="contentType" value="text/html;charset=UTF-8"/>
       <property name="cache" value="true" />
		<property name="prefix" value="/freemarker/" />
		<property name="suffix" value=".html" />
    </bean>

4.Spring MVC的請求流程:

    第一步: 前端控制器(DispatcherServlet)攔截請求

    第二步:前端控制器請求HandlerMapping查詢Handler可以根據xml配置、註解進行查詢

    第三步:處理器對映器HandlerMapping向前端控制器返回Handler

    第四步:前端控制器呼叫處理器介面卡去執行Handler

    第五步:處理器介面卡去執行Handler

    第六步:Handler執行完成給介面卡返回ModelAndView

    第七步:處理器介面卡向前端控制器返回ModelAndView。ModelAndView是springmvc框架的一個底層物件,包括 Model和view

    第八步:前端控制器請求檢視解析器去進行檢視解析,根據邏輯檢視名解析成真正的檢視(jsp)

    第九步:檢視解析器向前端控制器返回View

    第十步:前端控制器進行檢視渲染。檢視渲染將模型資料(在ModelAndView物件中)填充到request域

    第十一步:前端控制器向用戶響應結果