在Web应用开发中经常会遇到乱码问题,使用过滤器解决HTTP 请求导致的乱码问题,是十分有效的解决方案。
01
案例:编码转换
(1) 自定义过滤器,实现Filter接口。
@ WebFilter( urlPatterns="/*", initParams={@ WebInitParam( name=" encoding", value=" utf- 8")}) public class CharacterEncodingFilter implements Filter {● urlPatterns="/*"表示对所有的HTTP请求进行过滤。
● 设置了初始化参数,名字为encoding,参数值可以按需要配置。
(2) 在初始化方法中读取参数。
publicclassCharacterEncodingFilterimplementsFilter{ privateString encoding; publicvoidinit(FilterConfig filterCondig) throwsServletException { this.encoding = filterConfig.getInitParameter( "encoding"); } }(3) 在doFilter中过滤请求。
先把HTTP请求的参数转换成单字节码ISO-8859-1,然后用配置的encoding进行编码。此处只对GET请求进行了处理,POST请求一般不会乱码。
publicvoiddoFilter(ServletRequest request, ServletResponse response, FilterChain chain)throwsIOException, ServletException { if(encoding != null) request.setCharacterEncoding(encoding); HttpServletRequest r = (HttpServletRequest)request; if(r.getMethod.equalsIgnoreCase( "get")){ Enumeration<?> names = request.getParameterNames; while(names.hasMoreElements){ String[] values = request.getParameterValues(names.nextElement.toString); for( inti = 0; i < values.length; ++i){ values[i] = newString(values[i].getBytes( "ISO-8859-1"), encoding ); } } } chain.doFilter(request, response); }02
参考书籍
扫码京东优惠购书