1.SpringMVC是什麼?
-
顧名思義SpringMVC是一個基於MVC設計思想的框架。
-
什麼是mvc?MVC是模型(model)-視圖(view)-控制器(controller)的縮寫 ,是一種軟件設計思想,主要的作用就是解決應用開發的耦合性,將應用的輸入、控制、輸出進行強制解耦。
mvc中的模型、視圖、控制器分別擔負着不同的角色:
-
模型:頁數的數據和業務的處理。我們平常用的service和dao層就屬於這一層面
-
視圖:只用於用戶的顯示,不進行任何的業務處理。主要用來獲取和顯示數據
-
控制器:控制視圖層與用戶的交互,將對應的操作調用對應的模型。簡單的說,就是管理交互的
理解了mvc,我們就來說一說mvc的執行過程:用戶通過view層向服務器發出請求,controller接收請求後,調用對應的model後獲取數據,控制器在將數據返回給view。
Spring web mvc和Struts2都屬於表現層的框架,它是Spring框架的一部分,我們可以從Spring的整體結構中看得出來:
2.SpringMVC處理流程
- 用戶請求提交到前端控制器
- 前端控制器請求業務處理給處理器
- 處理器把處理結果返回給前端控制器
- 前端控制器把處理結果交給jsp頁面
- jsp頁面返回html給前端控制器
- 前端控制器響應客戶
3.SpringMVC 詳細架構
- 用戶發送請求至DispatcherServlet(前端控制器)
- DispatcherServlet收到請求調用HandlerMapping(處理器映射器)。
- HandlerMapping根據請求url找到具體的Handler(處理器),可以根據 xml 配置、註解進行查找,生成處理器對象及處理器攔截器(如果有則生成)一併返回給DispatcherServlet。Handler就是我們定義的controller。
- DispatcherServlet通過HandlerAdapter(處理器適配器)調用Handler(處理器)
- 執行處理器(Controller,也叫後端控制器)。
- Controller執行完成返回ModelAndView
- HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet
- DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器
- ViewReslover解析後返回具體View
- DispatcherServlet對View進行渲染視圖(即將模型數據填充至視圖中)。
- DispatcherServlet響應用戶
處理器映射器:類中標記@ResquestMapping的方法進行映射,根據ResquestMapping定義的url匹配ResquestMapping標記的方法,匹配成功返回HandlerMethod對象給前端控制器,HandlerMethod對象中封裝url對應的方法Method
處理器適配器:對標記@ResquestMapping的方法進行適配。
4.基本入門開發程序步驟
1.創建javaweb工程
2.導入springMVC相關jar包
3.在/WEB-INF/jsp下創建jsp
4.編寫Controller類
5.配置SpringMVC.xml,配置組件掃描器掃描@Controller,配置處理器映射器和處理器適配器,配置視圖解析器
6.web.xml配置前端控制器
3.核心註解講解
1. @Controller 標記爲控制器類,讓處理器映射器查找到此hadler
2. @RequestMapping 路徑配置
通過RequestMapping註解可以定義不同的處理器映射規則。
URL路徑映射解釋
@RequestMapping(value="/item")或@RequestMapping("/item")
value的值是數組,可以將多個url映射到同一個方法
@RequestMapping註解作用
1)標記url到請求方法的映射(其實就是通過一段url路徑來找到需要訪問的controller中的方法)
2) 窄化請求映射:就是在類上面又加入@RequestMapping ,相當於在類上面又定義了一層url
這樣的好處就是防止在企業中團隊開發的時候, 你和你的同事起的url重名
3)@RequestMapping 可以限定請求類型:
請求類型: post, get, put, delete等,可以在@RequestMapping(value="/list", method=RequestMethod.post) 限制請求的類型
如果定義成如post指定的類型,那麼像get這樣其他的訪問類型將訪問不到這個方法,會報405錯誤
GET和POST都可以的限定,@RequestMapping(method={RequestMethod.GET,RequestMethod.POST})
4.springmvc與struts2不同
-
springmvc的入口是一個servlet即前端控制器,而struts2入口是一個filter過慮器。
-
springmvc是基於方法開發(一個url對應一個方法),請求參數傳遞到方法的形參,可以設計爲單例或多例(建議單例),struts2是基於類開發,傳遞參數是通過類的屬性,只能設計爲多例。
-
Struts採用值棧存儲請求和響應的數據,通過OGNL存取數據, springmvc通過參數解析器是將request請求內容解析,並給方法形參賦值,將數據和視圖封裝成ModelAndView對象,最後又將ModelAndView中的模型數據通過reques域傳輸到頁面。Jsp視圖解析器默認使用jstl。