Spring MVC 2018-10-18

1.helloWorld

1.spring-config.xml
2.web.xml

init-param不配置,有默認(rèn)文件,位于/WEB-INF/<servlet-name>-servlet.xml
3.注解方法:

@RequestMapping("/helloworld") 注解來映射請求的URL

public Stringhello(){

? ? System.out.println("hello World!");

? ? return "success"; }

通過配置試圖解析器,可跳轉(zhuǎn)到/WEB-INF/views/success.jsp頁面

2.@RequestMapping 映射請求

1.除了修飾方法,還能修飾類

2.method屬性,指定請求方式

例如:@RequestMapping(value="/testMethod", method = RequestMethod.POST)

3.params 、headers 請求參數(shù)和請求頭等于或者不等于指定數(shù)值

4.支持通配符

?匹配文件名中一個字

*匹配文件名中任意字

** ** 匹配多層徑

5.目標(biāo)方法中取參數(shù) @PathVariable

3.REST 資源表現(xiàn)層轉(zhuǎn)化

GET 獲取資源 /order/1

POST 新建資源 /order

PUT 更新資源 /order/1

DELETE 刪除資源 /order/1

在web.xml文件中配置

4.映射請求參數(shù)

獲取請求參數(shù)

get獲取請求參數(shù)? order?username=ai&age=12

獲取請求頭參數(shù)

獲取cookie中的參數(shù)

5.使用POJO對象綁定請求參數(shù)值-支持級聯(lián)屬性

Spring MVC 會按照請求參數(shù)名和 POJO 屬性名進(jìn)自動的匹配,為該對象填充屬性值。支持級聯(lián)屬性。

6.Sevlet原生api作為參數(shù)

7.處理模型數(shù)據(jù) ModelAndView

目標(biāo)返回方法的返回值可以使ModelAndView類型

其中可以包含視圖和模型類型

success.jsp

內(nèi)部原理:

springmvc會把modelandview的model中的數(shù)據(jù)放到request域?qū)ο笾小?/p>

8.處理模型數(shù)據(jù)的Map

可從requestScope中獲取


9.參數(shù)放入session中--只能放在類的上面,不能放在方法的上面

在Controller的類上面添加注解,可通過屬性和對象類型把對象放入session中

@SessionAttributes(value={"user","password"},types={String.class})

10.ModelAttribute注解

使用場景:

①注解標(biāo)記的方法,會在每個目標(biāo)方法執(zhí)行之前被springMVC調(diào)用

②可以修飾目標(biāo)方法POJO類型的入?yún)ⅲ?其value屬性值有如下作用:

>SpringMvc會使用value屬性值再implicitModel中查找對應(yīng)的對象,若存在則會直接傳入到目標(biāo)方法的入?yún)⒅?/b>

>SpringMVC會把value為key,POJO類型的對象為value,存入到request中

運(yùn)行流程:

1.執(zhí)行該注解的方法從數(shù)據(jù)庫中去除對象,把對象放入Map中,鍵位:User--鍵名需要與目標(biāo)方法的入?yún)㈩愋偷牡谝粋€字母小寫的字符串一致

2.springmvc從Map中取出User對象,并把表單的請求參數(shù)賦值給該User對象的對應(yīng)屬性

3.springmvc把上述對象傳入目標(biāo)方法的參數(shù)。

源碼分析的流程:

1.調(diào)動@ModelAttribute注解修飾的方法,實(shí)際上把@ModelAttribute方法中Map的數(shù)據(jù)放在了implicitModel中。

2.解析請求處理器的目標(biāo)參數(shù),實(shí)際上目標(biāo)參數(shù)來自于WebDatBinder對象的target屬性

2.1創(chuàng)建WebDataBinder對象:

① 確定objectName屬性:若傳入的attributeName是空串,則objectName為類名第一個字母小寫。

注意:attributeName.若目標(biāo)方法的POJO屬性使用了@ModelAttribute來修飾,則attributeName值即為@ModelAttribute的value屬性值。

② 確定target屬性:

>在implicitModel中查找,attributeName對應(yīng)的屬性值。若存在,ok。

>若不存在:則驗(yàn)證當(dāng)前Handler是否使用了@SessoinAttribute進(jìn)行修飾,若使用了,則嘗試從Session中獲取attrName所對應(yīng)的屬性值。若Session中沒有對應(yīng)的屬性值,則拋出異常。

>若Handler沒有使用@SessionAttribute進(jìn)行修飾,或@SessionAttribute中沒有使用value值指定的key和attrName相匹配,則通過反射創(chuàng)建了POJO對象。

2.2 spingmvc把請求表單的請求參數(shù)賦給了WebDataBinder的target對應(yīng)的屬性

2.3.SpringMvc會把WebDataBinder的attrName和target給到implicitModel

2.4把WebDataBinder的target作為參數(shù)傳遞給目標(biāo)方法的入?yún)?/p>


11.springMVC如何確定pojo的類型

12.視圖解析器

無論返回String、View或ModelMap等類型,SpringMVC會在內(nèi)部裝配稱一個ModelAndView對象,包含邏輯名和模型對象的視圖。

SpringMVC借助視圖解析器(ViewResolver)得到最終的物理視圖-View對象。

視圖對象由視圖解析器負(fù)責(zé)實(shí)例化,由于是無狀態(tài)的(每個請求創(chuàng)建新的對象),不會有線程安全問題。

13.mvc:view-controller標(biāo)簽

可直接按相應(yīng)轉(zhuǎn)發(fā)的頁面,而無需進(jìn)過Handler的方法,在spring 配置xml文件中添加

<mvc:view-controller path="/success" view-name="success"></mvc:view-controller>

使用該標(biāo)簽,需使用mvc:annotation-driven標(biāo)簽,否則controller不起作用

<mvc:annotation-driven></mvc:annotation-driven>

14.自定義視圖

1.在spring配置文件中配置,通過order設(shè)置優(yōu)先級,數(shù)值越小約高,默認(rèn)視圖解析器優(yōu)先級最低

<bean class="org.springframework.web.servlet.view.BeanNameViewResolver"> <property name="order" value="100"></bean>

2.創(chuàng)建視圖類,實(shí)現(xiàn)View接口,并進(jìn)行@Controller注釋

3.返回字段為類名即可調(diào)用視圖

15.重定向

在目標(biāo)方法返回的路徑前加 forward:/ 和redirect:/

16.CRUD

一、按照helloWorld進(jìn)行配置,再為了能夠獲取到delete和put請求

把post請求轉(zhuǎn)為delete或put請求

web.xml配置

二、增加操作,使用spring的表單標(biāo)簽,在jsp頁面中添加以下代碼

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

form表單標(biāo)簽可以更快速的開發(fā)出表單頁面,且更方便的進(jìn)行表單值的回顯,可通過modelAttribute屬性指定綁定的模型屬性,若沒有指定該屬性,則默認(rèn)從request域?qū)ο笾凶x取command的表單bean,如果該屬性不存在,則會發(fā)生錯誤。request域中的對象,即在handler中存入map的對象。path:表單字段,對應(yīng)html元素的那么屬性,支持級聯(lián)屬性

<form:form action="emp" method="post" modelAttribute="employee">

? ? LastName:<form:input path="lastName"></form:input>

</form:form>

三、刪除操作

1.SpringMVC處理靜態(tài)資源

問題:優(yōu)雅的REST風(fēng)格的資源URL不希望帶.html或.do等后綴。若將DispatcherServlet請求映射配置為/,則SpringMVC將獲取WEB容器的所有請求,包括靜態(tài)資源的請求,SpringMVC會將他們當(dāng)成一個普通的請求處理,因此找不到對應(yīng)的處理器將導(dǎo)致錯誤。

解決:再SpringMVC的配置文件中配置

<mvc:default-servlet-handler/><mvc:annotation-driven></mvc:annotation-driven>

default-servlet-handler 將在SpringMVC上下文中定義一個DefaultServletHttpRequestHandler,它會進(jìn)入DispatcherServlet的請求進(jìn)行篩選,如果發(fā)現(xiàn)是沒有經(jīng)過映射的請求,就將請求交由WEB應(yīng)用服務(wù)器默認(rèn)的Servlet處理。如果不是靜態(tài)資源的請求,才由DispatcherServlet繼續(xù)處理。

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

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

  • 不知如何向你開口 我這貪生怕死的焦慮 做了最壞的打算 或許就能聽到醫(yī)生說好的期望 病友交流經(jīng)歷 竟是有些自我懷疑的...
    小瑪蟈閱讀 148評論 0 0
  • 大暑的清晨,濱江風(fēng)光帶的大堤上已經(jīng)是人頭攢動,有晨練跑步的、有跳廣場舞的大爺大媽、有勞作的園林工人、還有抖空竹、打...
    老果樹閱讀 233評論 4 3
  • 幼兒床是孩子休息主要地方,為了讓孩子安心睡眠,不可設(shè)在橫梁下,不可面向有強(qiáng)烈陽光的窗戶,不可太靠近窗戶或落地窗,不...
    栩樦閱讀 456評論 0 0
  • 夜深了…我還是翻來覆去的無法入睡,正因?yàn)樽〉牡胤教拷诌?,街邊夜宵攤偶爾會傳來一陣陣酗酒猜拳的吵鬧聲,我起了床點(diǎn)著...
    釘子戶111閱讀 205評論 0 0
  • 我的生活不能沒有酒 張 敏 我的生活不能沒有酒 但我決不是嗜酒如命的酒徒 我怕我的血管萎縮 熱血再不會燃燒 ...
    禹鄉(xiāng)墨韻書畫閱讀 692評論 3 12

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