Spring2.5引入註解式處理器支持,經過@Controller 和 @RequestMapping註解定義咱們的處理器類。
而且提供了一組強大的註解:
須要經過處理器映射DefaultAnnotationHandlerMapping和處理器適配器
AnnotationMethodHandlerAdapter來開啓支持@Controller 和 @RequestMapping註解的處理器。
@Controller:用於標識是處理器類;
@RequestMapping:請求處處理器功能方法的映射規則;
@RequestParam:請求參數處處理器功能處理方法的方法參數上的綁定;
@ModelAttribute:請求參數到命令對象的綁定;
@SessionAttributes:用於聲明session級別存儲的屬性,放置在處理器類上,一般列出
模型屬性(如@ModelAttribute)對應的名稱,則這些屬性會透明的保存到session中;
@InitBinder:自定義數據綁定註冊支持,用於將請求參數轉換到命令對象屬性的對應類型;java
Spring3.0引入RESTful架構風格支持(經過@PathVariable註解和一些其餘特性支持),且又引入了
更多的註解支持:
@CookieValue:cookie數據處處理器功能處理方法的方法參數上的綁定;
@RequestHeader:請求頭(header)數據處處理器功能處理方法的方法參數上的綁定;
@RequestBody:請求的body體的綁定(經過HttpMessageConverter進行類型轉換);
@ResponseBody:處理器功能處理方法的返回值做爲響應體(經過HttpMessageConverter進行類型轉換);
@ResponseStatus:定義處理器功能處理方法/異常處理器返回的狀態碼和緣由;
@ExceptionHandler:註解式聲明異常處理器;
@PathVariable:請求URI中的模板變量部分處處理器功能處理方法的方法參數上的綁定,
從而支持RESTful架構風格的URI;web
Spring3.1使用新的HandlerMapping 和 HandlerAdapter來支持@Contoller和@RequestMapping註解處理器。
新的@Contoller和@RequestMapping註解支持類:處理器映射RequestMappingHandlerMapping和處理器適配器RequestMappingHandlerAdapter組合來代替Spring2.5開始的處理器映射
DefaultAnnotationHandlerMapping和處理器適配器AnnotationMethodHandlerAdapter,提供更多的擴展點。正則表達式
@Controller // 或 @RequestMapping //將一個POJO類聲明爲處理器 public class HelloWorldController { @RequestMapping(value = "/hello") //請求URL處處理器功能處理方法的映射 public ModelAndView helloWorld() { //一、收集參數 //二、綁定參數到命令對象 //三、調用業務對象 //四、選擇下一個頁面 ModelAndView mv = new ModelAndView(); //添加模型數據 能夠是任意的POJO對象 mv.addObject("message", "Hello World!"); //設置邏輯視圖名,視圖解析器會根據該名字解析到具體的視圖頁面 mv.setViewName("hello"); return mv; //模型數據和邏輯視圖名 } }
http請求信息包含六部分信息:
①請求方法,如GET或POST,表示提交的方式;
②URL,請求的地址信息;
③協議及版本;
④請求頭信息(包括Cookie信息);
⑤回車換行(CRLF);
⑥請求內容區(即請求的內容或數據),如表單提交時的參數數據、URL請求參數(?abc=123 ?後邊的)等。json
處理器的功能處理方法的映射,所以請求的映射分爲以下幾種:
URL路徑映射:使用URL映射請求處處理器的功能處理方法;
請求方法映射限定:如限定功能處理方法只處理GET請求;
請求參數映射限定:如限定只處理包含「abc」請求參數的請求;
請求頭映射限定:如限定只處理「Accept=application/json」的請求。cookie
普通URL路徑映射
@RequestMapping(value={"/test1", "/user/create"}):多個URL路徑能夠映射到同一個處理器的功能處理方法。
URI模板模式映射
@RequestMapping(value="/users/{userId}"):{×××}佔位符, 請求的URL能夠是 「/users/123456」或「/users/abcd」,經過@PathVariable能夠提取URI模板模式中的{×××}中的×××變量。
@RequestMapping(value="/users/{userId}/create"):這樣也是能夠的,請求的URL能夠是「/users/123/create」。
@RequestMapping(value="/users/{userId}/topics/{topicId}"):這樣也是能夠的,請求的URL能夠是「/users/123/topics/123」。
Ant風格的URL路徑映射
@RequestMapping(value="/users/**"):能夠匹配「/users/abc/abc」,但「/users/123」將會被【URI模板模式映射中的「/users/{userId}」模式優先映射到】@RequestMapping(value="/product?"):可匹配「/product1」或「/producta」,但不匹配「/product」或「/productaa」;
@RequestMapping(value="/product*"):可匹配「/productabc」或「/product」,但不匹配「/productabc/abc」;
@RequestMapping(value="/product/*"):可匹配「/product/abc」,但不匹配「/productabc」;
@RequestMapping(value="/products/**/{productId}"):可匹配「/products/abc/abc/123」或「/products/123」,也就是Ant風格和URI模板變量風格可混用;session
正則表達式風格的URL路徑映射
從Spring3.0開始支持正則表達式風格的URL路徑映射,格式爲{變量名:正則表達式},經過@PathVariable提取模式中的{×××:正則表達式匹配的值}中的×××變量了。
@RequestMapping(value="/products/{categoryCode:\\d+}-{pageNumber:\\d+}"):能夠匹配「/products/123-1」,但不能匹配「/products/abc-1」,這樣能夠設計更加嚴格的規則。
正則表達式風格的URL路徑映射是一種特殊的URI模板模式映射:
URI模板模式映射是{userId},不能指定模板變量的數據類型,如是數字仍是字符串;
正則表達式風格的URL路徑映射,能夠指定模板變量的數據類型,能夠將規則寫的至關複雜。架構
組合使用是「或」的關係
如 @RequestMapping(value={"/test1", "/user/create"}) 組合使用是或的關係,即「/test1」或「/user/create」請求URL路徑均可以映射到@RequestMapping指定的功能處理方法。
以上URL映射的測試類爲:cn.javass.chapter6.web.controller.mapping.MappingController.java。
Spring WebMVC不單單提供URL路徑映射,還提供了其餘強大的映射規則。app