SprimgMVC學習筆記(一)—— SpringMVC入門
一、什麼是 SpringMVC ?
在介紹什麼是 SpringMVC 之前,我們先看看 Spring 的基本架構。如下圖:
我們可以看到,在 Spring 的基本架構中,紅色圈起來的 Spring Web MVC ,也就是SpringMVC,它是屬於Spring基本架構裡面的一個組成部分,屬於SpringFrameWork的後續產品,已經融合在Spring Web Flow裡面,所以我們在後期和 Spring 進行整合的時候,幾乎不需要別的什麼配置。
SpringMVC 是類似於 Struts2 的一個 MVC 框架,都屬於表現層的框架,它的底層是servlet,在實際開發中,接收瀏覽器的請求響應,對資料進行處理,然後返回頁面進行顯示,但是上手難度卻比 Struts2 簡單多了。而且由於 Struts2 所暴露出來的安全問題,SpringMVC 已經成為了大多數企業優先選擇的框架。
二、SpringMVC架構介紹
2.1 架構流程
1、使用者傳送請求至前端控制器DispatcherServlet
2、DispatcherServlet收到請求呼叫HandlerMapping處理器對映器。
3、處理器對映器根據請求url找到具體的處理器,生成處理器物件及處理器攔截器(如果有則生成)一併返回給DispatcherServlet
4、DispatcherServlet通過HandlerAdapter處理器介面卡呼叫處理器
5、執行處理器(Controller,也叫後端控制器)。
6、Controller執行完成返回ModelAndView
7、HandlerAdapter將controller執行結果ModelAndView((springmvc框架的一個底層物件,包括Model和View))返回給DispatcherServlet
8、DispatcherServlet將ModelAndView傳給ViewReslover檢視解析器
9、ViewReslover解析後返回具體View
10、DispatcherServlet對View進行渲染檢視(即將模型資料填充至檢視中)
11、DispatcherServlet向用戶響應結果
2.2 元件說明
- DispatcherServlet:前端控制器(核心)
作用:接收請求,響應結果,相當於轉發器,中央處理器。有了dispatcherServlet減少了其它元件之間的耦合度。
使用者請求到達前端控制器,它就相當於mvc模式中的c,dispatcherServlet是整個流程控制的中心,由它呼叫其它元件處理使用者的請求,dispatcherServlet的存在降低了元件之間的耦合性。
-
HandlerMapping:處理器對映器
作用:根據請求的url查詢Handler
HandlerMapping負責根據使用者請求url找到Handler即處理器,springmvc提供了不同的對映器實現不同的對映方式,例如:配置檔案方式,實現介面方式,註解方式等。
-
Handler:處理器(由程式設計師開發)
Handler 是繼DispatcherServlet前端控制器的後端控制器,在DispatcherServlet的控制下Handler對具體的使用者請求進行處理。
由於Handler涉及到具體的使用者業務請求,所以一般情況需要程式設計師根據業務需求開發Handler。
-
HandlAdapter:處理器介面卡
作用:按照特定規則(HandlerAdapter要求的規則)去執行Handler
通過HandlerAdapter對處理器進行執行,這是介面卡模式的應用,通過擴充套件介面卡可以對更多型別的處理器進行執行。
-
ViewResolver:檢視解析器
作用:進行檢視解析,根據邏輯檢視名解析成真正的檢視(view)
View Resolver負責將處理結果生成View檢視,View Resolver首先根據邏輯檢視名解析成物理檢視名即具體的頁面地址,再生成View檢視物件,最後對View進行渲染將處理結果通過頁面展示給使用者
-
View:檢視(由程式設計師開發)
springmvc框架提供了很多的View檢視型別的支援,包括:jstlView、freemarkerView、pdfView等。我們最常用的檢視就是jsp。
一般情況下需要通過頁面標籤或頁面模版技術將模型資料通過頁面展示給使用者,需要由程式設計師根據業務需求開發具體的頁面。
說明:在springmvc的各個元件中,處理器對映器、處理器介面卡、檢視解析器稱為springmvc的三大元件。
需要使用者開發的元件有handler、view
2.3 預設載入的元件
我們沒有做任何配置,就可以使用這些元件。因為框架已經預設載入這些元件了,配置檔案位置如下圖:
2.4 元件掃描器
使用元件掃描器省去在spring容器配置每個Controller類的繁瑣。
使用<context:component-scan>自動掃描標記@Controller的控制器類,
在springmvc.xml配置檔案中配置如下:
<!-- 配置controller掃描包,多個包之間用,分隔 --> <context:component-scan base-package="cn.itcast.springmvc.controller" />
2.5 註解對映器和介面卡
-
配置處理器對映器
註解式處理器對映器,對類中標記了@ResquestMapping的方法進行對映。根據@ResquestMapping定義的url匹配@ResquestMapping標記的方法,匹配成功返回HandlerMethod物件給前端控制器。
HandlerMethod物件中封裝url對應的方法Method。
從spring3.1版本開始,廢除了DefaultAnnotationHandlerMapping的使用,推薦使用RequestMappingHandlerMapping完成註解式處理器對映。
在springmvc.xml配置檔案中配置如下:
<!-- 配置處理器對映器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
註解描述:
@RequestMapping:定義請求url到處理器功能方法的對映
-
配置處理器介面卡
註解式處理器介面卡,對標記@ResquestMapping的方法進行適配。
從spring3.1版本開始,廢除了AnnotationMethodHandlerAdapter的使用,推薦使用RequestMappingHandlerAdapter完成註解式處理器適配。
在springmvc.xml配置檔案中配置如下:
<!-- 配置處理器介面卡 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
-
註解驅動(開發中常用此方式)
直接配置處理器對映器和處理器介面卡比較麻煩,可以使用註解驅動來載入。
SpringMVC使用<mvc:annotation-driven>自動載入RequestMappingHandlerMapping和RequestMappingHandlerAdapter
可以在springmvc.xml配置檔案中使用<mvc:annotation-driven>替代註解處理器和介面卡的配置。
<!-- 註解驅動 --> <mvc:annotation-driven />
2.6 檢視解析器
檢視解析器使用SpringMVC框架預設的InternalResourceViewResolver,這個檢視解析器支援JSP檢視解析。
在springmvc.xml配置檔案中配置如下:
<!-- Example: prefix="/WEB-INF/jsp/", suffix=".jsp", viewname="test" -> "/WEB-INF/jsp/test.jsp" --> <!-- 配置檢視解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 配置邏輯檢視的字首 --> <property name="prefix" value="/WEB-INF/jsp/" /> <!-- 配置邏輯檢視的字尾 --> <property name="suffix" value=".jsp" /> </bean>
邏輯檢視名需要在controller中返回ModelAndView指定,比如邏輯檢視名為ItemList,則最終返回的jsp檢視地址:“WEB-INF/jsp/itemList.jsp”
最終jsp實體地址:字首+邏輯檢視名+字尾