1.SpringMVC中經常使用的幾個註解html
1)@Controller 代表當前類爲Controllerjava
2)@RequestMaping 當前類或者方法的映射路徑,@RequestMapping中經常使用的幾個參數web
①value 當前方法或者控制器的映射路徑。當後面還有參數時這一參數不能省略 如:@RequestMapping(value="/testSpringMVC")spring
②params 當前方法須要接收的參數,如:@RequestMapping(value="/testSpringMVC", params={"userName", "age!=10"})api
③headers 當前方法接收的請求頭, 如: @RequestMapping(value="/testSpringMVC", params={"username", "age!=10"},
headers={"Accept-Language=en-US,zh;q=0.8"})tomcat
④method 當前請求的請求類型, 如:@RequestMapping(value="/testSpringMVC", method=RequestMethod.POST), 通常狀況下可選的爲POST,GETsession
3)@PathVariable 當前方法接收的url佔位符參數 如: app
@RequestMapping("/testSpringMVC/{id}") public String testSpringMVC(@PathVariable("id") Integer id){ //fill this with necessary bussiness logic }
同時SpringMVC支持ant風格的url,如:@RequestMapping("/testSpringMVC/*/test")post
簡單ant風格:? 匹配單個字符。 * 匹配0或任意數量的字符。 **匹配0或任意數量的目錄測試
4)@RequestParam 映射請求參數
@RequestParam(value="age", required=false, defaultValue = "0") Integer age
①value 參數名稱
②required 是否必須,默認爲是
③defaultValue 默認值
5)@RequestHeader 獲取請求頭 如:@RequestHeader(value="Accept-Language") String val
①value 請求頭參數名
6)@CookieValue 獲取請求中的Cookie 如:@CookieValue(value="JSESSIONID") String val
7)@SessionAttribute 經過屬性名或者對象類型將屬性放置到Session中,如
@SessionAttributes(value={"user"}, types={String.class}) 將model中key爲user或者字符串的value放置到session中
注意:該註解只能用來修飾類不能用來修飾方法。
8)@ModelAttribute
被ModelAttribute註解標記的方法將在每一個目標方法執行以前被SpringMVC調用。
2.SpringMVC對Rest風格URL的支持
1)Rest風格
URL表示資源,http方法表示操做,get、post、put、delete等。
更多參照: http://wenku.baidu.com/view/660324c58bd63186bcebbcc3.html
2)Spring如何支持Rest風格。
①須要開啓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表單中開啓一個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設置爲對應的值:GET、POST、PUT、DELETE
3)出現的問題
因爲採用的是Rest風格URL請求,返回時也採用的是resf風格,如:DELELE,對應到返回的JSP則不適用,報錯JSPs only permit GET POST or HEAD
解決思路:
①最簡單粗暴的解決方法就是採用重定向"redirect:/specificURL",從新請求另外一個沒有使用Rest風格的資源,返回也就不是rest風格了。
②springMVC 對於Rest風格的請求,是經過post體中的"_method"(可自定義)參數值來識別的,咱們能夠在程序中的的某個地方從parameterMap中刪除這個參數,可是實現request接口的Servelet容器每每會鎖定parameterMap,因此可能須要反射,引入容器特有的jar
③擴展HiddenHttpMethodFilter類,增長對"_convertToPost"(不是parameter,而是attribute)屬性的識別,若是"_convertToPost"爲true,那麼跳過HiddenHttpMethodFilter全部操做。
④重寫HiddenHttpMethodFilter中的getMethod方法
第一種方法親測可行,二三四則沒有測試過,僅供參考。不過聽說使用tomcat8纔會出現上述問題,使用tomcat7則不會。
3.SpringMVC對servlet原生API做爲目標方法參數的支持
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 }