1.springMVC的參數綁定:
把從客戶端獲取的參數數據綁定到controller方法的形參上.
2. Spring的數據綁定過程:
SpringMVC所有的參數封裝(ServletRequest)到WebDataBinder組件中,ConversionService組件進行數據的轉換和格式化,數據驗證(validator) ,springMVC的類型轉換來說,我們所需要的大部分的數據類型轉換(基本類型的數據轉換)他已經給實現了可以詳見ConversionService這個接口
2.5版本之前支持 String ---Date的自動轉換
3.0 + 需要 顯示的進行數據類型轉換器的定義
Spring類型對於Date類型的轉換有兩種方式
1) 實現Converter接口實現String-date
2) 需要在目標類的屬性上添加@dateTimeFormat註解即可
3. SpringMVC的自定義數據轉換類型的步驟
1)實現Converter接口
@Component
public class DateConverter implements Converter<String, Date> {
@Override
public Date convert(String string) {
Long l=Long.parseLong(string);
if(l!=null){
Date date=new Date(l);
return date;
}
return null;
}
}
2)需要組件掃描器進行對類型轉換組件的掃描
mvc:annotation-driven
3)配置類型轉換器組件,將自定義的類型轉換器納入到conversionService組件中
<!-- 組件掃描器 -->
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
<bean id="conversionService"
class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<ref bean="dateConverter" />
</set>
</property>
</bean>
- SpringMVC的Converter formatter接口
Converter是萬能的(後臺)把任何的源類型轉換爲目標類型 Formatter主要用於頁面的轉換(前臺)而且源類型必須是String類型的
<!-- 組件掃描器 -->
<mvc:annotation-driven conversion-service="conversionService">
</mvc:annotation-driven>
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<ref bean="dateConverter"/>
</set>
</property>
</bean>
5 SpringMVC的數據模塊進行輸出數據時,如果使用的是ModelAndView,那麼model中的數據會放到request作用域中。
6 SpringMVC處理輸入模型的第二種方式是在目標方法的入參處使用map類型結合接受數據,默認下會放置到request作用域中
注意存放的不是map,而是所有的鍵值對
7 SpringMVC同樣支持redirect和forward ,需要使用關鍵字:的方式調用,而且必須是在返回值爲String類型情況下使用。
8 SpringMVC使用View接口進行自定義視圖的定義,可以使用getContextType來設定將要放回的視圖的類型
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
<property name="order" value="100"></property>
</bean>
@Component
public class TestView implements View {
@Override
public String getContentType() {
return "image/jpeg";
}
@Override
public void render(Map<String, ?> arg0, HttpServletRequest request,
HttpServletResponse response) throws Exception {
ServletContext context=request.getServletContext();
InputStream input=context.getResourceAsStream("/img/test.jpg");
ServletOutputStream out=response.getOutputStream();
System.out.println(input);
int i=0;
while(-1!=(i=input.read())){
out.write(i);
}
out.close();
input.close();
}
}
@RequestMapping("/getImg")
public String getImg(){
return "testView";
}