Spring總結之SpringMvc上
一、簡介
Spring Web MVC是一種基於Java的實現了Web MVC設計模式的請求驅動類型的輕量級Web框架。
二、流程架構
1.用戶發送請求至 前端控制器DispatcherServlet。
2.前端控制器DispatcherServlet收到請求後調用處理器映射器HandlerMapping。
3.處理器映射器HandlerMapping根據請求的Url找到具體的處理器,生成處理器對象Handler及處理器攔截器HandlerIntercepter(如果有則生成)一並返回給前端控制器DispatcherServlet。
4.前端控制器DispatcherServlet通過處理器適配器HandlerAdapter調用處理器Controller。
5.執行處理器(Controller,也叫後端控制器)
6.處理器Controller執行完後返回ModelAnView。
7.處理器映射器HandlerAdapter將處理器Controller執行返回的結果ModelAndView返回給前端控制器DispatcherServlet。
8.前端控制器DispatcherServlet將ModelAnView傳給視圖解析器ViewResolver。
9.視圖解析器ViewResolver解析後返回具體的視圖View。
10.前端控制器DispatcherServlet對視圖View進行渲染視圖(即:將模型數據填充至視圖中)
11.前端控制器DispatcherServlet響應用戶。
三、springmvc xml配置總結
-
springmvc.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context
2、web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance http://www.springmodules.org/schema/cache/springmodules-cache.xsd http://www.springmodules.org/schema/cache/springmodules-ehcache.xsd" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>MyBatisPro05</display-name> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list> <!-- Spring配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!-- 編碼過濾器 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <async-supported>true</async-supported> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Spring監聽器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 添加對springmvc的支持 --> <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
四、Springmvc常用註解總結
(1)@RequestMapping:(@RequestMapping(value="/book"))
RequestMapping是一個用來處理請求地址映射的註解(將請求映射到對應的控制器方法中),可用於類或方法上。用於類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。
@RequestMapping有三個屬性:value:指定實際的url、method:指定請求method類型(get,put,post,delete等)、params:指定request中必須包含某些參數值,才讓該方法處理、headers:指定request中必須包含某些指定的header值,才處理請求、consumes:指定處理請求的的提交內容類型(Content-type)、produces:指定返回的內容類型
例子@RequestMapping(value="/get/{bookid}",method = RequestMethod.GET, params="myParam=myValue",headers = "Accept=application/json")
(2)@RequestParam:
@RequestParam用於將請求參數區數據映射到功能處理方法的參數上。
@RequestParam有以下三個參數:
value:參數名字,即入參的請求參數名字,如username表示請求的參數區中的名字為username的參數的值將傳入;
required:是否必須,默認是true,表示請求中一定要有相應的參數,否則將拋出異常;
defaultValue:默認值,表示如果請求中沒有同名參數時的默認值,設置該參數時,自動將required設為false。例子: public String requestparam4(@RequestParam(value="username",required=false) String username)
(3)@PathVariable
@PathVariable用於將請求URL中的模板變量映射到功能處理方法的參數上。
例子:@RequestMapping(value="/users/{userId}/topics/{topicId}")
public String test(@PathVariable(value="userId") int userId, @PathVariable(value="topicId") int topicId)(4)@Responsebody
@ResponseBody 將內容或對象作為 HTTP 響應正文返回,並調用適合HttpMessageConverter的Adapter轉換對象,寫入輸出流。
作用:
該註解用於將Controller的方法返回的對象,通過適當的HttpMessageConverter轉換為指定格式後,寫入到Response對象的body數據區。
使用時機:
返回的數據不是html標簽的頁面,而是其他某種格式的數據時(如json、xml等)使用;(5)@RequestBody
@RequestBody 將HTTP請求正文轉換為適合的HttpMessageConverter對象。
作用:
i) 該註解用於讀取Request請求的body部分數據,使用系統默認配置的HttpMessageConverter進行解析,然後把相應的數據綁定到要返回的對象上;
ii) 再把HttpMessageConverter返回的對象數據綁定到 controller中方法的參數上。
使用時機:
A) GET、POST方式提時, 根據request header Content-Type的值來判斷:
application/x-www-form-urlencoded, 可選(即非必須,因為這種情況的數據@RequestParam, @ModelAttribute也可以處理,當然@RequestBody也能處理);
multipart/form-data, 不能處理(即使用@RequestBody不能處理這種格式的數據);
其他格式, 必須(其他格式包括application/json, application/xml等。這些格式的數據,必須使用@RequestBody來處理);
B) PUT方式提交時, 根據request header Content-Type的值來判斷:
application/x-www-form-urlencoded, 必須;
multipart/form-data, 不能處理;
其他格式, 必須;
說明:request的body部分的數據編碼格式由header部分的Content-Type指定;
Spring總結之SpringMvc上