一、Spring2.5之前,我們都是通過實現Controller介面或其他實現來定義我們的處理器類。
二、Spring2.5引入註解式處理器支援,通過@Controller 和 @RequestMapping註解定義我們的處理器類。並且提供了一組強大的註解:
需要通過處理器對映DefaultAnnotationHandlerMapping和處理器介面卡AnnotationMethodHandlerAdapter來開啟支援@Controller 和 @RequestMapping註解的處理器。
@Controller:用於標識是處理器類;
@RequestMapping:請求到處理器功能方法的對映規則;
@RequestParam:請求引數到處理器功能處理方法的方法引數上的繫結;
@ModelAttribute:請求引數到命令物件的繫結;
@SessionAttributes:用於宣告session級別儲存的屬性,放置在處理器類上,通常列出模型屬性(如@ModelAttribute)對應的名稱,則這些屬性會透明的儲存到session中;
@InitBinder:自定義資料繫結註冊支援,用於將請求引數轉換到命令物件屬性的對應型別;
三、Spring3.0引入RESTful架構風格支援(通過@PathVariable註解和一些其他特性支援),且又引入了更多的註解支援:
@CookieValue:cookie資料到處理器功能處理方法的方法引數上的繫結;
@RequestHeader:請求頭(header)資料到處理器功能處理方法的方法引數上的繫結;
@RequestBody:請求的body體的繫結(通過HttpMessageConverter進行型別轉換);
@ResponseBody:處理器功能處理方法的返回值作為響應體(通過HttpMessageConverter進行型別轉換);
@ResponseStatus:定義處理器功能處理方法/異常處理器返回的狀態碼和原因;
@ExceptionHandler:註解式宣告異常處理器;
@PathVariable:請求URI中的模板變數部分到處理器功能處理方法的方法引數上的繫結,從而支援RESTful架構風格的URI;
四、還有比如:
JSR-303驗證框架的無縫支援(通過@Valid註解定義驗證後設資料);
使用Spring 3開始的ConversionService進行型別轉換(PropertyEditor依然有效),支援使用@NumberFormat 和 @DateTimeFormat來進行數字和日期的格式化;
HttpMessageConverter(Http輸入/輸出轉換器,比如JSON、XML等的資料輸出轉換器);
ContentNegotiatingViewResolver,內容協商檢視解析器,它還是檢視解析器,只是它支援根據請求資訊將同一模型資料以不同的檢視方式展示(如json、xml、html等),RESTful架構風格中很重要的概念(同一資源,多種表現形式);
Spring 3 引入 一個 mvc XML的名稱空間用於支援mvc配置,包括如:
<mvc:annotation-driven>: 自動註冊基於註解風格的處理器需要的DefaultAnnotationHandlerMapping、AnnotationMethodHandlerAdapter
支援Spring3的ConversionService自動註冊
支援JSR-303驗證框架的自動探測並註冊(只需把JSR-303實現放置到classpath)
自動註冊相應的HttpMessageConverter(用於支援@RequestBody 和 @ResponseBody)(如XML輸入輸出轉換器(只需將JAXP實現放置到classpath)、JSON輸入輸出轉換器(只需將Jackson實現放置到classpath))等。
<mvc:interceptors>:註冊自定義的處理器攔截器;
<mvc:view-controller>:和ParameterizableViewController類似,收到相應請求後直接選擇相應的檢視;
<mvc:resources>:邏輯靜態資源路徑到物理靜態資源路徑的支援;
<mvc:default-servlet-handler>:當在web.xml 中DispatcherServlet使用<url-pattern>/</url-pattern> 對映時,能對映靜態資源(當Spring Web MVC框架沒有處理請求對應的控制器時(如一些靜態資源),轉交給預設的Servlet來響應靜態檔案,否則報404找不到資源錯誤,)。
五、Spring3.1新特性:
對Servlet 3.0的全面支援。
@EnableWebMvc:用於在基於Java類定義Bean配置中開啟MVC支援,和XML中的<mvc:annotation-driven>功能一樣;
新的@Contoller和@RequestMapping註解支援類:處理器對映RequestMappingHandlerMapping和處理器介面卡RequestMappingHandlerAdapter組合來代替Spring2.5開始的處理器對映DefaultAnnotationHandlerMapping和處理器介面卡AnnotationMethodHandlerAdapter,提供更多的擴充套件點,它們之間的區別我們在處理器對映一章介紹。
新的@ExceptionHandler註解支援類:ExceptionHandlerExceptionResolver來代替Spring3.0的AnnotationMethodHandlerExceptionResolver,在異常處理器一章我們再詳細講解它們的區別。
@RequestMapping的"consumes" 和 "produces" 條件支援:用於支援@RequestBody 和 @ResponseBody,
1consumes指定請求的內容是什麼型別的內容,即本處理方法消費什麼型別的資料,如consumes="application/json"表示JSON型別的內容,Spring會根據相應的HttpMessageConverter進行請求內容區資料到@RequestBody註解的命令物件的轉換;
2produces指定生產什麼型別的內容,如produces="application/json"表示JSON型別的內容,Spring的根據相應的HttpMessageConverter進行請求內容區資料到@RequestBody註解的命令物件的轉換,Spring會根據相應的HttpMessageConverter進行模型資料(返回值)到JSON響應內容的轉換
3以上內容,本章第×××節詳述。
URI模板變數增強:URI模板變數可以直接繫結到@ModelAttribute指定的命令物件、@PathVariable方法引數在檢視渲染之前被合併到模型資料中(除JSON序列化、XML混搭場景下)。
@Validated:JSR-303的javax.validation.Valid一種變體(非JSR-303規範定義的,而是Spring自定義的),用於提供對Spring的驗證器(org.springframework.validation.Validator)支援,需要Hibernate Validator 4.2及更高版本支援;
@RequestPart:提供對“multipart/form-data”請求的全面支援,支援Servlet 3.0檔案上傳(javax.servlet.http.Part)、支援內容的HttpMessageConverter(即根據請求頭的Content-Type,來判斷內容區資料是什麼型別,如JSON、XML,能自動轉換為命令物件),比@RequestParam更強大(只能對請求引數資料繫結,key-alue格式),而@RequestPart支援如JSON、XML內容區資料的繫結;詳見本章的第×××節;
Flash 屬性 和 RedirectAttribute:通過FlashMap儲存一個請求的輸出,當進入另一個請求時作為該請求的輸入,典型場景如重定向(POST-REDIRECT-GET模式,1、POST時將下一次需要的資料放在FlashMap;2、重定向;3、通過GET訪問重定向的地址,此時FlashMap會把1放到FlashMap的資料取出放到請求中,並從FlashMap中刪除;從而支援在兩次請求之間儲存資料並防止了重複表單提交)。
Spring Web MVC提供FlashMapManager用於管理FlashMap,預設使用SessionFlashMapManager,即資料預設儲存在session中。
轉自:http://www.cnblogs.com/linjiqin/archive/2013/11/22/3437901.html