2019-06-09 Spring MVC的學(xué)習(xí)筆記(一)

三層架構(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)求

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容