javascript
5.SpringMVC
1.SpringMVC概述
概述:
SpringMVC是基于請求驅(qū)動(dòng),圍繞一個(gè)核心Servlet 轉(zhuǎn)發(fā)請求到對應(yīng)的Controller而設(shè)計(jì)的
優(yōu)點(diǎn):
是一個(gè)典型的教科書式的MVC構(gòu)架,易學(xué)易用
提供了清晰的角色劃分,比如Controller、validator、handler mapping、view resolver等
可重用的業(yè)務(wù)代碼
可定制的數(shù)據(jù)綁定和驗(yàn)證,可定制的視圖解決方案
提供了一套強(qiáng)大又使用簡單的標(biāo)簽庫
支持Restful風(fēng)格
體系結(jié)構(gòu):
1、客戶端發(fā)出請求,交給DispatcherServlet處理
2、DispatcherServlet根據(jù)請求信息及HandlerMapping的配置找到處理請求的處理器(Handler)
3、DispatcherServlet通過HandlerAdapter對Handler進(jìn)行封裝,再以統(tǒng)一的適配器接口調(diào)用Handler
4、處理器完成業(yè)務(wù)邏輯,返回一個(gè)ModelAndVIew給DispatcherServlet,ModelAndView包含視圖邏輯名和模型數(shù)據(jù)信息
5、DispatcherServlet借由ViewResolver完成邏輯視圖名到真實(shí)視圖的解析工作
6、得到View真實(shí)視圖后,DispatcherServlet就使用這個(gè)View對象對ModelAndView中的模型數(shù)據(jù)進(jìn)行渲染
7、最終客戶得到響應(yīng)
?
?2.控制器
DispatcherServlet:
DispatcherServlet繼承自HttpServlet,是整個(gè)SpringMVC中的前端控制器,主要負(fù)責(zé)流程控制
DispatcherServlet使用了專有的Bean來處理請求和渲染視圖,可以在WebApplicationContext中進(jìn)行配置,這些Bean包括:
| Bean類型 | 解釋 |
| HandlerMapping | 將傳入請求映射到處理器 |
| HandlerAdapter | 將處理器包裝為適配器,從而支持多種類型的處理器 |
| ViewResolver | 將邏輯視圖名解析為具體的View |
| LocaleResolver & LocaleContextResolver | 解釋客戶端所在地區(qū)和其時(shí)區(qū)(本地化),以便提供國際化的視圖 |
| ThemeResolver | 解釋W(xué)eb程序可用主題,比如提供個(gè)性化布局 |
| MultipartResolver | 解釋multi-part請求,比如表單里支持文件上傳 |
當(dāng)一個(gè)請求傳進(jìn)來后,DispatcherServlet會(huì)按以下順序處理:
尋找 WebApplicationContext,并將 WebApplicationContext作為一個(gè)屬性綁定到請求里,以便控制器或其他原件在后續(xù)中使用。默認(rèn)會(huì)以DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE 鍵綁定到請求里
將本地化解析器綁定到請求里,以便在處理這個(gè)請求時(shí),原件可以解析到客戶端的地區(qū)(為了渲染視圖,準(zhǔn)備日期等)
將主題解析其綁定到請求里,讓原件(如視圖)決定去使用哪一種主題
若指定一個(gè)multipart file解析器,會(huì)檢查這個(gè)請求包含multiparts請求
尋找合適的 handler。如何找到這個(gè) handler,執(zhí)行與這個(gè) handler 關(guān)聯(lián)的執(zhí)行鏈
如果返回一個(gè) model,渲染相對應(yīng)的視圖
?
Controller:
客戶請求經(jīng)由前端控制器DispatcherServlet后,分發(fā)給后續(xù)子控制器Controller
SpringMVC的Controller會(huì)獲取用戶的輸入,訪問由服務(wù)接口定義的業(yè)務(wù)邏輯功能,并通過視圖將模型數(shù)據(jù)再響應(yīng)給用戶
從Spring2.5以后,提供了一組注解用于SpringMVC的編程,比如:@Controller、@RequestMapping、@RequestParam
@RequestMapping中,還可以使用method來限制請求的類型,比如以下例子中映射login的URL,并且是Get方式的請求
?
URI模板模式
URI模版是一個(gè)類似于URI的字符串,其中包含了一個(gè)或多個(gè)變量。當(dāng)你將這些變量替換掉市,就變回了URI
例如:路徑為http://www.example.com/owners/fred,則方法中ownerId的值即為“fred”
路徑模式
@RequestMapping注解處理支持URI模版,也支持使用Ant風(fēng)格模式
/user/regist, 匹配/user/regist
/user/*/regist, 匹配/user/aaa/regist
/user/**/regist, 匹配/user/regist、/user/aaa/bbb/regist等
/user/regist?, 匹配/user/regista等
@RequestMapping還支持組合使用URI模版和Ant風(fēng)格模式
如:/owners/*/pets/{petId}
矩陣變量:
開啟矩陣變量的支持:<mvc:annotation-driven enable-matrix-variables="true"/>矩陣變量實(shí)例:
?
?
@RequestParam將請求參數(shù)綁定到方法參法:
@CookieValue注解允許將方法參數(shù)與HTTPcookie 值綁定
?
?
@RequestHeader 映射請求頭字段屬性
?
@ResponseBody此注解用在方法上,用來表示直接將返回?cái)?shù)據(jù)寫到HTTP響應(yīng)體里
一般用于響應(yīng)AJAX的請求,返回JSON格式的字符串
注意:不是將數(shù)據(jù)放到Model中,或解析為視圖名稱
3.攔截器
Spring的handler映射機(jī)制包含了handler攔截器
使用handler攔截器,可以在某些的請求中應(yīng)用的特殊的功能,比如說檢查權(quán)限、防止表單重復(fù)提交等等
handler映射的攔截器必須實(shí)現(xiàn)HandlerInterceptor接口,該接口有3個(gè)方法:
preHandle(..) 在handler執(zhí)行前調(diào)用
postHandle(..) 在handler執(zhí)行后調(diào)用
afterCompletion(..) 在整一個(gè)請求完成后調(diào)用
注意:不是將數(shù)據(jù)放到Model中,或解析為視圖名稱
攔截器在SpringMVC配置文件中如下配置:
4.文件上傳
文件上傳在Web項(xiàng)目中使用廣泛,而SpringMVC提供了2種常用的方法來實(shí)現(xiàn)
基于Servlet3.0的文件上傳
基于Commons FileUpload的文件上傳
頁面表單代碼如下:
基于Servlet3.0的實(shí)現(xiàn):
在web.xml中的DispatcherServlet增加“multipart-config”配置
在SpringMVC配置文件中增加
?
編寫Controller類:
Commons Fileupload:
需要導(dǎo)入commons-fileupload.jar和commons-io.jar
在SpringMVC配置文件中增加:
編寫Controller類:
?
轉(zhuǎn)載于:https://www.cnblogs.com/Firesun/p/9921111.html
總結(jié)
以上是生活随笔為你收集整理的5.SpringMVC的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xr和8p性价比
- 下一篇: JS实现Unix时间戳(Unix tim