一、日期及请求乱码问题
1.1、日期格式化
- 在controller实现类中注册属性编辑器:
/**
* 注册属性编辑器(字符串转换为日期)
*/
@InitBinder
public void initBinder(HttpServletRequest request,ServletRequestDataBinder binder) throws Exception {
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));
}
1.2、Post请求中文乱码的解决
- 在web.xml中加入过滤器:
<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>
1.3、GET请求中文乱码的解决
- 1、修改tomcat配置文件添加编码与工程编码一致
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
- 2、对每一个请求参数进行重新编码,如:
String userName new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")
具体的post和get请求乱码原理及处理逻辑可以参考我以前的博文:servlet请求乱码问题解决
二、与struts2不同
1、springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过虑器。
2、springmvc是基于方法开发,请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。
3、Struts采用值栈存储请求和响应的数据,通过OGNL存取数据, springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。
注意:
不要在action类中定义方法所用到的变量,变量要定义到方法体中。因为方法是在栈内存中,不会导致线程问题。
三、springmvc请求路径问题
详情参见:请求转发与重定向