三層架構(gòu)與MVC模型
B/S交互:瀏覽器和服務(wù)器端,將服務(wù)器端分為三層架構(gòu)
第一層:表現(xiàn)層(Spring MVC)
第二層:業(yè)務(wù)層(Spring)
第三層:持久層(Mybatis)
瀏覽器首先發(fā)出http請(qǐng)求,傳輸請(qǐng)求參數(shù),最終由表現(xiàn)層響應(yīng)結(jié)果
Spring MVC框架介紹:通過(guò)一套注解和一個(gè)簡(jiǎn)單的java類成為請(qǐng)求處理的控制器,無(wú)須實(shí)現(xiàn)任何接口,同時(shí)還支持其他風(fēng)格的編程請(qǐng)求。
與Struts 2框架相對(duì)比的優(yōu)勢(shì):
共同點(diǎn):
都是表現(xiàn)層框架,都是基于MVC框架編寫(xiě)的
底層都依賴ServletAPI
他們的處理請(qǐng)求的機(jī)制都是一個(gè)核心控制器
區(qū)別:
Spring的入口的Servlet,strus2基于filter
Spring MVC基于方法,strus2基于類,Spring會(huì)較為簡(jiǎn)潔
Spring還支持JSR303 處理ajax請(qǐng)求更加方便
Strus2的OGNL的表達(dá)式讓頁(yè)面的開(kāi)發(fā)效率更加高效
書(shū)寫(xiě)一個(gè)有前端控制器到視圖解析器的處理程序,其中涉及到以下幾個(gè)組件
前端控制器:DispatcherServlet,接口用戶請(qǐng)求和響應(yīng)
處理映射器 handlerMapping:根據(jù)用戶請(qǐng)求通過(guò)HandlerMapping 讓controller類中的方法去執(zhí)行,返回一個(gè)執(zhí)行鏈
處理器適配器(handlerAdapter):無(wú)論訪問(wèn)什么類,都會(huì)經(jīng)過(guò)處理器適配器組件,適配任何Controlleer
視圖解析器:從返回各種jsp頁(yè)面,頁(yè)面渲染,跳轉(zhuǎn)各種頁(yè)面。
注:在SpringMVC中加上《MVC:annotation-driven》自動(dòng)加上了處理器映射器、處理器是適配器、視圖解析器
第二講:requestMapping的注解的作用
該注解加載類中的方法之前,也可以放在類上。處理請(qǐng)求路徑和類中的方法,該注解建立了二者的關(guān)聯(lián)關(guān)系。加上一個(gè)映射關(guān)聯(lián)
注解放在類上,有一個(gè)類的路徑,之后應(yīng)該在xml文件中將注解的文件
2. RequestMapping注解的屬性:
根據(jù)源碼,找到value和path兩個(gè)API,value是path的別名。二者作用相同
method方法:屬性類型是一個(gè)對(duì)象,枚舉類。設(shè)置請(qǐng)求方式;意味著可以添加多個(gè)屬性。value=。。。;value=。。?!?/p>
params:用于指定限制請(qǐng)求參數(shù)條件 params={e.g.: "username"}字符串形式的數(shù)組。必須按照params的形式請(qǐng)求
headers:請(qǐng)求必須包含headers,用于指定限制請(qǐng)求頭的條件
第三講:請(qǐng)求參數(shù)的綁定
param.jsp頁(yè)面,含有一個(gè)超鏈接,點(diǎn)擊之后,后臺(tái)的param可以執(zhí)行。
method請(qǐng)求為post請(qǐng)求
直接在value位置編寫(xiě)對(duì)應(yīng)的屬性名,可以自動(dòng)完成賦值操作。
解決中文亂碼問(wèn)題:
web.xml中配置filter與fliter-Mapping,初始化參數(shù)UTF-8設(shè)置命令如下:
<param-name>encoding</>? ?;<param-value>UTF-8</>
自定義類型轉(zhuǎn)換器:解決自定義轉(zhuǎn)換器的異常
類型轉(zhuǎn)換器注冊(cè),實(shí)現(xiàn)Convert接口< S , T >,實(shí)現(xiàn)其中的convert方法,將yyyy-mm-dd轉(zhuǎn)換為字符串類型String
配置bean id的class為這個(gè)接口的路徑,property-name =converters(轉(zhuǎn)換),<set> bean class=實(shí)現(xiàn)接口的類的路徑</set>
第四講:常用的注解
RequestBody:get方法不適用,用于獲取請(qǐng)求體內(nèi)容,直接用到的是key value的數(shù)據(jù)結(jié)構(gòu)
獲得某個(gè)請(qǐng)求體的呢絨 在參數(shù)前面加上requestBody獲取請(qǐng)求體,不是單純的用戶名,而是表單的所有屬性組成的json字符串
pathVariable注解:用于綁定url的占位符。演示過(guò)程依然是先寫(xiě)Controller方法,testPathVariable,在requestMapping注解中寫(xiě)上方法名/{id}
HiddenHttpMethodFilter過(guò)濾器
requestHeader注解:在形式參數(shù)的括號(hào)里面加上注解requestHeader,可以獲取請(qǐng)求頭的值
CookieValue:原理同上,了解即可
ModelAttribute注解:放在方法上面會(huì)優(yōu)先執(zhí)行。作用:在提交一個(gè)表單的時(shí)候,沒(méi)有新提交的值繼續(xù)使用原來(lái)的值
Sessionattribute:多次請(qǐng)求