刚开始学Java三大框架没多久,自己尝试写一下小程序,遇到了很多问题,比如中文乱码
我用的大概是最简单的办法了
就是在响应前将request和response的编码格式全部设置成utf-8(方便起见)
因为ServletRequest中setCharacterEncoding方法设置的是请求消息中的实体内容的字符编码名称, 它只影响getParmeter方法对POST方式下的“application/x-www-form-urlencoded”编码格式的实体内容进行URL编码的结果,而不影响getParmeter方法对HTTP请求消息的请求行中的URL地址后的参数进行URL解码的结果(不过可以再容器中进行配置,使之照样影响).(摘自 《深入体验Java_Web开发内幕-核心基础》)
所以这样设置只能解决通过post方式传递的参数中的中文乱码问题
过滤器代码
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
// HttpServletRequest request = (HttpServletRequest) req;
/**
* 只对post方法传递的参数有效
*/
String charset = "utf-8";
//设置请求响应字符编码
req.setCharacterEncoding(charset);
res.setCharacterEncoding(charset);
// System.out.println("----请求被"+config.getFilterName()+"过滤");
//跳转到被拦截的action并且执行完还要再返回filter.chain相当于一扇门
chain.doFilter(request, res);
// System.out.println("----响应被"+config.getFilterName()+"过滤");
}
配置过滤器web.xml
<filter>
<filter-name>struts2</filter-name>
<filter-class>tool.filter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
参考链接http://lwfshr.iteye.com/blog/517918