SpringMVC學習筆記1

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 
}
相關文章
相關標籤/搜索