标签:value coding atom xtend pre ret ini post loaded
JavaWeb中的普通过滤器
对POST请求的乱码解决不了
SpringMVC的过滤器
在web.xml中配置编码格式
<filter>
<filter-name>encoding</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>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
有些极端情况下,这个过滤器对get的支持不好,解决办法如下:
1、配置tomcat的编码
2、使用通用过滤器
通用过滤器
/**
* 解决get和post请求 全部乱码的过滤器
*/
public class GenericEncodingFilter implements Filter {
?
public void init(FilterConfig filterConfig) throws ServletException {
}
?
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
?
//处理response的字符编码
HttpServletResponse myResponse=(HttpServletResponse) response;
myResponse.setContentType("text/html;charset=UTF-8");
?
// 转型为与协议相关对象
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
// 对request包装增强
HttpServletRequest myrequest = new MyRequest(httpServletRequest);
chain.doFilter(myrequest, response);
?
}
?
public void destroy() {
}
}
?
//自定义request对象,HttpServletRequest的包装类
class MyRequest extends HttpServletRequestWrapper {
?
private HttpServletRequest request;
//是否编码的标记
private boolean hasEncode;
//定义一个可以传入HttpServletRequest对象的构造函数,以便对其进行装饰
public MyRequest(HttpServletRequest request) {
super(request);// super必须写
this.request = request;
}
?
// 对需要增强方法 进行覆盖