1.springMVC是什么?他和struts2有什么区别?
2.框架结构
3.配置
<!-- 扫描controller注解,多个包中间使用半角逗号分隔 -->
<context:component-scan base-package="cn.itcast.springmvc.controller.first"/>
b) 注解处理器和适配器的配置:
springmvc使用<mvc:annotation-driven>自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter,可用在springmvc.xml配置文件中使用<mvc:annotation-driven>替代注解处理器和适配器的配置。
c) 视图解析器
在springmvc.xml文件配置如下:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
4.参数绑定
a) 绑定简单数据类型
使用Model和ModelMap的效果一样,如果直接使用Model,springmvc会实例化ModelMap。
如果使用Model则可以不使用ModelAndView对象,Model对象可以向页面传递数据,View对象则可以使用String返回值替代。不管是Model还是ModelAndView,其本质都是使用Request对象向jsp传递数据。 |
参数类型推荐使用包装数据类型,因为基础数据类型不可以为null.
使用@RequestParam常用于处理简单类型的绑定
value:参数名字
required:是否必须(默认是true)
defaultValue:默认值,表示如果请求中没有同名参数时的默认值
b) 绑定pojo
要求:pojo对象中的属性名和表单中的input的name属性一致
注意:提交的表单中不要有日期类型的数据,否则会报400错误,如果想提交日期类型的数据,需要用到自定义参数绑定.
c) 自定义参数绑定
因为日期数据有很多格式,springMVC没办法吧字符串转换成日期类型,所以需要自定义参数绑定.
前端控制器接收到请求后,找到注解形式的处理器适配器,对RequestMapping标记的方法进行适配,并对方法中的形参进行参数绑定。在springmvc这可以在处理器适配器上自定义Converter进行参数绑定。如果使用<mvc:annotation-driven/>可以在此标签上进行扩展
自定义converter
public class DateConverter implements Converter<String, Date> {
@Override
public Date convert(String source) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
return simpleDateFormat.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
配置converter
<!-- 加载注解驱动 -->
<mvc:annotation-driven conversion-service="conversionService "/>
<!-- 转换器配置 -->
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="cn.***.springmvc.convert.DateConverter"/>
</set>
</property>
</bean>
5.解决乱码问题
a) 解决post乱码
<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>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
b)get请求中文参数出现乱码解决方式(二种)
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
String userName new
String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")