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";
}