全局编码过滤器
这个是之前做的一个项目时,遇到请求回来的中文有乱码的问题,通过这个全局编码过滤器,不论是post请求还是get请求,乱码问题都可以解决
1 import java.io.IOException; 2 3 import java.io.UnsupportedEncodingException; 4 import java.util.Map; 5 6 import javax.servlet.Filter; 7 import javax.servlet.FilterChain; 8 import javax.servlet.FilterConfig; 9 import javax.servlet.ServletException; 10 import javax.servlet.ServletRequest; 11 import javax.servlet.ServletResponse; 12 import javax.servlet.http.HttpServletRequest; 13 import javax.servlet.http.HttpServletRequestWrapper; 14 15 /** 16 * 通用解决 get 和 post乱码过滤器 17 * 18 * 19 * 20 */ 21 public class EncodingFilter implements Filter { 22 23 @Override 24 public void destroy() { 25 } 26 27 @Override 28 public void doFilter(ServletRequest request, ServletResponse response, 29 FilterChain chain) throws IOException, ServletException { 30 // 处理请求乱码 31 HttpServletRequest httpServletRequest = (HttpServletRequest) request; 32 HttpServletRequest myRequest = new MyRequest(httpServletRequest); 33 34 // 处理响应乱码 35 response.setContentType("text/html;charset=utf-8"); 36 37 chain.doFilter(myRequest, response); 38 } 39 40 @Override 41 public void init(FilterConfig filterConfig) throws ServletException { 42 } 43 44 } 45 46 // 自定义request对象 47 class MyRequest extends HttpServletRequestWrapper { 48 49 private HttpServletRequest request; 50 51 private boolean hasEncode; 52 53 public MyRequest(HttpServletRequest request) { 54 super(request);// super必须写 55 this.request = request; 56 } 57 58 // 对需要增强方法 进行覆盖 59 @Override 60 public Map getParameterMap() { 61 // 先获得请求方式 62 String method = request.getMethod(); 63 if (method.equalsIgnoreCase("post")) { 64 // post请求 65 try { 66 // 处理post乱码 67 request.setCharacterEncoding("utf-8"); 68 return request.getParameterMap(); 69 } catch (UnsupportedEncodingException e) { 70 e.printStackTrace(); 71 } 72 } else if (method.equalsIgnoreCase("get")) { 73 // get请求 74 Map<String, String[]> parameterMap = request.getParameterMap(); 75 if (!hasEncode) { // 确保get手动编码逻辑只运行一次 76 for (String parameterName : parameterMap.keySet()) { 77 String[] values = parameterMap.get(parameterName); 78 if (values != null) { 79 for (int i = 0; i < values.length; i++) { 80 try { 81 // 处理get乱码 82 values[i] = new String(values[i] 83 .getBytes("ISO-8859-1"), "utf-8"); 84 } catch (UnsupportedEncodingException e) { 85 e.printStackTrace(); 86 } 87 } 88 } 89 } 90 hasEncode = true; 91 } 92 return parameterMap; 93 } 94 95 return super.getParameterMap(); 96 } 97 98 @Override 99 public String getParameter(String name) { 100 Map<String, String[]> parameterMap = getParameterMap(); 101 String[] values = parameterMap.get(name); 102 if (values == null) { 103 return null; 104 } 105 return values[0]; // 取回参数的第一个值 106 } 107 108 @Override 109 public String[] getParameterValues(String name) { 110 Map<String, String[]> parameterMap = getParameterMap(); 111 String[] values = parameterMap.get(name); 112 return values; 113 } 114 115 }

浙公网安备 33010602011771号