1.SpringMVC中常用的幾個(gè)注解
1)@Controller 表明當(dāng)前類為Controller
2)@RequestMaping 當(dāng)前類或者方法的映射路徑,@RequestMapping中常用的幾個(gè)參數(shù)
〗朗础①value 當(dāng)前方法或者控制器的映射路徑
如 @RequestMapping(value="/testSpringMVC")
〖卑颉②params 當(dāng)前方法需要接收的參數(shù)秧廉。
如 @RequestMapping(value="/testSpringMVC"馏段, params={"userName", "age!=10"})
】仇③headers 當(dāng)前方法接收的請(qǐng)求頭
如 @RequestMapping(value="/testSpringMVC", params={"username", "age!=10"}, headers={"Accept-Language=en-US,zh;q=0.8"})
∥绕洹④method 當(dāng)前請(qǐng)求的請(qǐng)求類型驶赏, 如:@RequestMapping(value="/testSpringMVC", method=RequestMethod.POST), 一般情況下可選的為POST,GET
3)@PathVariable 當(dāng)前方法接收的url占位符參數(shù) 如:
@RequestMapping("/testSpringMVC/{id}")
public String testSpringMVC(@PathVariable("id") Integer id){
//fill this with necessary bussiness logic
}
同時(shí)SpringMVC支持ant風(fēng)格的url既鞠,如:@RequestMapping("/testSpringMVC/*/test")
簡(jiǎn)單ant風(fēng)格:煤傍? 匹配單個(gè)字符≈龅埃 * 匹配0或任意數(shù)量的字符蚯姆。 **匹配0或任意數(shù)量的目錄
4)@RequestParam 映射請(qǐng)求參數(shù)
@RequestParam(value="age", required=false, defaultValue = "0") Integer age
∪髅簟①value 參數(shù)名稱
×淞怠②required 是否必須,默認(rèn)為是
⌒谆铩③defaultValue 默認(rèn)值
5)@RequestHeader 獲取請(qǐng)求頭
如: @RequestHeader(value="Accept-Language") String val
」稀①value 請(qǐng)求頭參數(shù)名
6)@CookieValue 獲取請(qǐng)求中的Cookie
如:@CookieValue(value="JSESSIONID") String val
7)@SessionAttribute 通過屬性名或者對(duì)象類型將屬性放置到Session中,如
@SessionAttributes(value={"user"}, types={String.class}) 將model中key為user或者字符串的value放置到session中
注意:該注解只能用來修飾類不能用來修飾方法函荣。
8)@ModelAttribute
被ModelAttribute注解標(biāo)記的方法將在每個(gè)目標(biāo)方法執(zhí)行之前被SpringMVC調(diào)用显押。
2.SpringMVC對(duì)Rest風(fēng)格URL的支持
1)Rest風(fēng)格
URL表示資源,http方法表示操作傻挂,get煮落、post、put踊谋、delete等。
更多參照: http://wenku.baidu.com/view/660324c58bd63186bcebbcc3.html
2)Spring如何支持Rest風(fēng)格旋讹。
≈巢稀①需要開啟org.springframework.web.filter.HiddenHttpMethodFilter
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
②在form表單中開啟一個(gè)name為_method,value為PUT或DELETE隱藏域
<form action="/TestSpringMVC/testRest/1" method="post">
<input type="hidden" name="_method" value="DELETE">
<input type="submit" value="testRestDelete" />
</form>
③RequestMethod設(shè)置為對(duì)應(yīng)的值:GET沉迹、POST睦疫、PUT、DELETE
3)出現(xiàn)的問題
由于采用的是Rest風(fēng)格URL請(qǐng)求鞭呕,返回時(shí)也采用的是resf風(fēng)格蛤育,如:DELELE,對(duì)應(yīng)到返回的JSP則不適用,報(bào)錯(cuò)JSPs only permit GET POST or HEAD
解決思路:
⊥吒狻①最簡(jiǎn)單粗暴的解決方法就是采用重定向"redirect:/specificURL"底洗,重新請(qǐng)求另一個(gè)沒有使用Rest風(fēng)格的資源,返回也就不是rest風(fēng)格了咕娄。
『ヒ尽②springMVC 對(duì)于Rest風(fēng)格的請(qǐng)求,是通過post體中的"_method"(可自定義)參數(shù)值來識(shí)別的圣勒,我們可以在程序中的的某個(gè)地方從parameterMap中刪除這個(gè)參數(shù)费变,但是實(shí)現(xiàn)request接口的Servelet容器往往會(huì)鎖定parameterMap,所以可能需要反射圣贸,引入容器特有的jar
≈科纭③擴(kuò)展HiddenHttpMethodFilter類,增加對(duì)"_convertToPost"(不是parameter吁峻,而是attribute)屬性的識(shí)別滑负,如果"_convertToPost"為true,那么跳過HiddenHttpMethodFilter所有操作锡搜。
〕壤А④重寫HiddenHttpMethodFilter中的getMethod方法
不過使用tomcat8才會(huì)出現(xiàn)上述問題,使用tomcat7則不會(huì)耕餐。
3.SpringMVC對(duì)servlet原生API作為目標(biāo)方法參數(shù)的支持
HttpServletRequest 凡傅、 HttpServletResponse 、HttpSession肠缔、java.security.Principal 夏跷、Locale InputStream 、OutputStream 明未、Reader 槽华、Writer。如:
public void servletAPISupport(HttpServletRequest request, HttpServletResponse response, Writer out) {
//fill this with necessary business logic
}