SpringMVC參數綁定過程:從客戶端請求key/value的數據,通過參數綁定,將key/value的數據綁定管道controller方法的形參中。java
在SpringMVC中,接收頁面提交的數據時,經過方法形參來接收,而不是controller類定義成員變量來接收。web
流程:
客戶端請求key/value數據 >> 處理器適配器調用SpringMVC提供參數綁定組件將key/value數據轉成controller方法的形參(參數綁定組件:在springmvc早期版本中使用PropertyEditor只能將字符串轉成Java對象;後期使用converter能夠進行任意類型的轉換)。springmvc提供了不少converter轉換器,在特殊狀況下須要自定義converter(如對日期數據綁定須要自定義converter)>> 調用controller方法(形參)spring
參數綁定默認支持的類型:
如要使用參數幫i的那個默認支持的類型,只須要直接在controller方法形參中定義默認支持的類型對象便可。這些對象就是在參數綁定的過程當中,適配器如須要默認支持的類型直接進行綁定。
HttpServletRequest:經過request對象獲取請求信息。
HttpServletResponse:經過response處理響應信息。
HttpSession:經過session對象獲得session中存放的對象。
Model/ModelMap:Model是一個接口,ModelMap是一個接口實現。它們的做用就是將model模型數據填充到request域。數組
參數綁定簡單類型:session
經過@RequestParam對簡單類型的參數進行綁定。若不使用@RequestParam,要求request傳入參數名稱和controller方法的參數名稱保持一致。若使用@RequestParam,不限制request參數參數名稱和controller方法的形參名稱一致。mvc
//如:請求url http://localhost/springmvc_projectname/goods/query.action?id=1 @RequestMapping(value="/query",method={RequestMethod.GET,RequestMethod.POST}) public String query1(Model model,Integer id)throws Exception{ } @RequestMapping(value="/query",method={RequestMethod.GET,RequestMethod.POST}) public String query2(Model model,@RequestParam(value="id") Integer goods_id)throws Exception{ //@RequestParam中指定request傳入參數名稱id和形參good_id進行綁定 } @RequestMapping(value="/query",method={RequestMethod.GET,RequestMethod.POST}) public String query3(Model model,@RequestParam(value="id"required=true) Integer goods_id)throws Exception{ //若在@RequestParam中指定required屬性,則表示指定參數是否必需要傳入。true時,若沒有該參數則會報錯。 } @RequestMapping(value="/query",method={RequestMethod.GET,RequestMethod.POST}) public String query(Model model,@RequestParam(value="id",required=true,defaultValue="") Integer goods_id)throws Exception{ //在@RequestParam中還能夠指定defaultValue屬性來設置默認值,當required=true且id沒有傳入時,將默認值和形參綁定。 }
參數綁定pojo類型:app
頁面中input標籤的name屬性值和controller的pojo形參中的屬性名稱一致。才能夠將頁面中的數據綁定到pojo中。post
參數綁定包裝類型pojo:ui
頁面中input標籤的name屬性值和controller的形參包裝類型pojo中的普通pojo的屬性名稱保持一致。才能夠將頁面中的數據幫i的那個到pojo中。該頁面中input標籤的name屬性值的表現形式爲:pojo類型.屬性名.屬性名......編碼
參數綁定數組類型:
如、複選框。
controller形參中數組變量名要和頁面中name值保持一致。
參數綁定List類型:
使用List接收頁面提交的批量數據,經過包裝pojo接收,在包裝pojo中定義list屬性。頁面name屬性對應包裝pojo中的 list屬性名[下標].包裝pojo中list類型屬性中的pojo屬性名。
自定義參數綁定:
實現日期類型綁定,對於controller形參中pojo對象,若屬性中有日期類型,須要自定義參數綁定。將請求日期數據串轉成日期類型,要轉換的日期類型和pojo中日期屬性的類型保持一致。因此自定義參數綁定將日期串轉成java.util.Date類型,須要向處理器適配器中注入自定義參數綁定組件。
配置方式:
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven> <!-- 自定義參數綁定 --> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <!-- 轉換器 --> <property name="converter"> <list> <!-- 日期類型轉換 --> <bean class="cn.ccir.springmvctest.converter.CustomDateConverter"/> <bean class="自定義類型轉換器類路徑"/> </list> </property> </bean>
自定義日期轉換器須要實現Converter<S,T>接口。
public class CustomDateConverter implements Converter<String,Date>{ public Date convert(String source){ //將日期串轉成日期類型,格式:yyyy-MM-dd HH:mm:ss SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try{ return sdf.parse(source); }catch(ParseException pe){ pe.printStackTrace(); } return null; } }
SpringMVC中POST提交中文亂碼:
post提交中文亂碼web.xml過濾器配置:
<!-- 配置springMVC編碼過濾器 --> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <!-- 設置過濾器中的屬性值 --> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <!-- 啓動過濾器 --> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <!-- 過濾全部請求 --> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>