1.helloWorld


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

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

獲取請求頭參數(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類型
其中可以包含視圖和模型類型


內(nèi)部原理:
springmvc會把modelandview的model中的數(shù)據(jù)放到request域?qū)ο笾小?/p>
8.處理模型數(shù)據(jù)的Map

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請求

二、增加操作,使用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ù)處理。