From 861f142ead46fbdf0db4e7612b2ff1f2be9c1248 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E6=A5=9A?= <823169880@qq.com> Date: Tue, 15 Jan 2019 21:56:30 +0800 Subject: [PATCH] Merge remote-tracking branch 'remotes/origin/master' into hechu1 # Conflicts: # src/core/process/C_TeacherSearchStudent.java # web/jsFile/upload_action.js --- src/filter/CharSet.java | 105 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 src/filter/CharSet.java diff --git a/src/filter/CharSet.java b/src/filter/CharSet.java new file mode 100644 index 0000000..3c64f86 --- /dev/null +++ b/src/filter/CharSet.java @@ -0,0 +1,105 @@ +package filter; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.util.Map; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.annotation.WebFilter; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import javax.servlet.http.HttpServletResponse; + +@WebFilter(urlPatterns = "/*") +public class CharSet implements Filter { + public void destroy() { + } + + public void doFilter(ServletRequest req, ServletResponse resp, + FilterChain chain) throws ServletException, IOException { + HttpServletRequest httpServletRequest = (HttpServletRequest) req; + // 对request包装增强 + HttpServletRequest myrequest = new MyRequest(httpServletRequest); + ((HttpServletResponse)resp).setContentType("text/html;charset=utf-8"); + chain.doFilter(myrequest, resp); + + } + + public void init(FilterConfig config) throws ServletException { + + } +} +class MyRequest extends HttpServletRequestWrapper { + + private HttpServletRequest request; + + private boolean hasEncode; + + public MyRequest(HttpServletRequest request) { + super(request); + this.request = request; + } + + // 对需要增强方法 进行覆盖 + @Override + public Map getParameterMap() { + // 先获得请求方式 + String method = request.getMethod(); + if (method.equalsIgnoreCase("post")) { + // post请求 + try { + // 处理post乱码 + request.setCharacterEncoding("utf-8"); + return request.getParameterMap(); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } else if (method.equalsIgnoreCase("get")) { + // get请求 + Map parameterMap = request.getParameterMap(); + if (!hasEncode) { // 确保get手动编码逻辑只运行一次 + for (String parameterName : parameterMap.keySet()) { + String[] values = parameterMap.get(parameterName); + if (values != null) { + for (int i = 0; i < values.length; i++) { + try { + // 处理get乱码 + values[i] = new String(values[i].getBytes("ISO-8859-1"), "utf-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + } + } + hasEncode = true; + } + return parameterMap; + } + + return super.getParameterMap(); + } + + @Override + public String getParameter(String name) { + Map parameterMap = getParameterMap(); + String[] values = parameterMap.get(name); + if (values == null) { + return null; + } + return values[0]; // 取回参数的第一个值 + } + + @Override + public String[] getParameterValues(String name) { + Map parameterMap = getParameterMap(); + String[] values = parameterMap.get(name); + return values; + } + +} +