【使用SSM框架開發企業級應用】Spring MVC體系結構和處理請求控制器
Spring MVC體系結構和處理請求控制器
MVC設計模式
檢視(View)-對應元件:JSP或者HTML檔案
控制器(Controller)-對應元件:Servlet
模型(Model) -對應元件:JavaBean
JSP Model1
JSP Model2
JSP:負責生成動態網頁
Servlet:負責流程控制
JavaBean:負責業務邏輯處理
MVC 處理過程
MVC整體處理過程:
- 首先檢視提供系統與使用者互動的介面,併發送使用者輸入給控制器
- 控制器接收使用者的請求,並決定應該呼叫哪個模型來進行處理
- 模型根據使用者請求進行相應的業務邏輯處理,並返回處理結果(資料)
- 控制器根據返回的處理結果,呼叫相應的檢視格式化模型返回的資料,並通過檢視呈現給使用者結果
MVC 優點
多檢視共享一個模型,大大提高程式碼的可重用性
MVC三個模組相互獨立,鬆耦合架構
控制器提高了應用程式的靈活性和可配置性
有利於軟體工程化管理
完美的系統架構 = 鬆耦合+高重用性+高擴充套件性
MVC 缺點
原理複雜
增加了系統結構和實現的複雜性
檢視對模型資料的低效率訪問
Spring MVC框架介紹
Spring MVC
結構最清晰是Spring框架中用於web應用開發的一個模組,是Spring提供的一個基於MVC設計模式的優秀web開發框架,它本質上相當於Servlet,在mvc設計模式中,Spring MVC
作為控制器(Controller)來建立模型與檢視的資料互動,是結構最清晰的MVC Model2實現,可稱為最典型的MVC框架
【注意】
Spring MV
框架採用鬆耦合可插拔的元件結構,具有高度可配置性,比起其他MVC框架更具擴充套件性和靈活性.此外,Spring MVC 的註解驅動和對REST風格的支援,也是它最具特色的功能,無論是在框架設計,還是擴充套件性、靈活性等方面都已經全面超越了Struts2等MVC框架,並且它本身就是Spring框架的一部分,與Spring框架整合可以說是無縫整合,效能方面具有天生的優越性,對於開發者來說,開發效率也高於其他的Web框架,在企業中的應用越來越廣泛,稱為主流的mvc框架
Spring MVC環境搭建
Spring MVC框架搭建步驟
下載jar檔案並匯入工程
spring-web-3.2.13.RELEASE.jar
spring-webmvc-3.2.13.RELEASE.jar
配置檔案
在web.xml中配置Servlet
建立Spring MVC的配置檔案
建立Controller-處理請求的控制器
BeanNameUrlHandlerMapping
建立View-JSP
部署執行
註解驅動控制器
基於註解的處理器
<context:component-scan />
- @Controller:標註一個普通的JavaBean成為可以處理請求的控制器
- @RequestMapping:通過請求URL進行對映
<mvc:annotation-driven />
- 一鍵式配置,通過註解的方式進行Spring MVC開發
- DefaultAnnotationHandlerMapping
- AnnotationMethodHandlerAdapter
Spring MVC請求處理流程
Spring MVC體系結構
DispatcherServlet(前端控制器)
- Spring MVC最核心的類
- web.xml中配置
Handler(處理器):對應MVC中C(Controller層)
- 型別:Object
- 作用:實際處理請求
- 標註了@RequestMapping的所有方法都可以看作是一個Handler
ModelAndView
- 邏輯檢視名
- 模型物件
核心元件
HandlerMapping(處理器對映)
- BeanNameUrlHandlerMapping(預設)
- 將請求URL對映到同名的控制器Bean上
- DefaultAnnotationHandlerMapping
- 將請求對映到標註@RequestMapping註解的控制器和處理方法上
- RequestMappingHandlerMapping
HandlerAdapter(介面卡)
- AnnotationMethodHandlerAdapter
- RequestMappingHandlerAdapter
ViewResolver(檢視解析器)
- InternalResourceView
Spring MVC框架特點
- 清晰地角色劃分
- 靈活的配置功能
- 提供了大量的控制器介面和實現類
- 真正做到與View層的實現無關(JSP、Velocity、Xslt等)
- 國際化支援
- 面向介面程式設計
- Spring提供了Web應用開發的一整套流程,不僅僅是MVC,他們之間可以很方便的結合一起
引數傳遞(View to Controller)
Controller方法中引數前加@RequestParam進行直接入參
部署執行
http://localhost:8090/SMBMS_C09_03/welcome?username=admin
http://localhost:8090/SMBMS_C09_03/welcome
@RequestMapping
- 標註在類定義處
- 標註在方法定義處
- 對映規則
- 通過請求URL進行對映
- 通過請求引數進行對映
- 若選擇方法引數直接入參的話,方法入參名必須與請求中引數名保持一致
- 通過請求方法進行對映
- GET
- POST
注意: @RequestMapping對映的請求資訊必須保證全域性唯一
@RequestParam
- Value:引數名
- Required:是否必需,預設true,表示請求中必須包含對應的引數名,若不存在將丟擲異常
- defaultValue:預設引數名,不推薦使用
ModelAndView
- 包含檢視資訊和模型資料資訊
- 常用方法
- 新增模型資料
- ModelAndView addObject(String attributeName, Object attributeValue);
- ModelAndView addAllObjects(Map<String,?> modelMap);
- 設定檢視
- void setView(View view);指定一個具體的檢視物件
- void setViewName(String viewName);指定一個邏輯檢視名。
Model
- 資料結構:Map型別
- 常用方法:新增模型資料
Model.addAttribute(String attributeName,Object attributeValue);
- 處理方法的入參為Model型別
注意:在Model中增加模型資料,若不指定key,
則預設使用物件的型別作為key
作為Spring MVC的標準用法,推薦使用Model
檢視解析器
檢視解析器-ViewResolver
將邏輯檢視名與JSP等檢視技術進行匹配
InternalResourceViewResolver
prefix
suffix
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
本章總結
- MVC設計模式在各種成熟框架中都得到了良好的運用,它將view、Controller、model三層清晰的劃分開、搭建一個鬆耦合,高重用性、高可適用性的完美架構
- Spring MVC框架是典型的MVC框架,是一個結構最清晰的jsp Model2實現。他基於Servlet,DispatcherServlet是整個框架的核心
- Spring MVC的處理器對映(HandlerMapping)可配置為支援註解式處理器,只配置<mvc:annotation-driven/>標籤即可
- Spring MVC的控制器的處理方法返回的ModelAndView物件內包括資料模型和檢視資訊
- Spring MVC通過檢視解析器來完成檢視解析工作,把控制器的處理方法返回的邏輯檢視名解析成一個真正的檢視物件
內容就到這,
我是陳恰恰.77