Tomcat7以前需要处理get乱码,tomcat8以后不需要处理get乱码,因为tomcat内部会处理。
乱码原因:
1 package cn.itcast.web.filter;
2
3 import java.io.IOException;
4 import java.io.UnsupportedEncodingException;
5 import java.util.Map;
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.annotation.WebFilter;
13 import javax.servlet.http.HttpServletRequest;
14 import javax.servlet.http.HttpServletRequestWrapper;
15
16 /**
17 * 编码过滤器(用于统一项目编码,防止出现乱码)
18 */
19 @WebFilter("/*")
20 public class EncodingFilter2 implements Filter {
21 public void init(FilterConfig filterConfig) throws ServletException {
22
23 }
24
25 public void doFilter(ServletRequest request, ServletResponse response,
26 FilterChain chain) throws IOException, ServletException {
27 // 处理请求乱码
28 HttpServletRequest httpServletRequest = (HttpServletRequest) request;
29 HttpServletRequest myRequest = new MyRequest(httpServletRequest);
30 // 处理响应乱码
31 response.setContentType("text/html;charset=utf-8");
32 chain.doFilter(myRequest, response);
33 }
34
35 public void destroy() {
36
37 }
38 }
39
40 // 自定义request对象
41 class MyRequest extends HttpServletRequestWrapper {
42 private HttpServletRequest request;
43
44 public MyRequest(HttpServletRequest request) {
45 super(request);// super必须写
46 this.request = request;
47 }
48
49 // 对需要增强方法 进行覆盖
50 @SuppressWarnings({"unchecked", "rawtypes"})
51 @Override
52 public Map getParameterMap() {
53 // 先获得请求方式
54 String method = request.getMethod();
55 if (method.equalsIgnoreCase("post")) {
56 // post请求
57 try {
58 // 处理post乱码
59 request.setCharacterEncoding("utf-8");
60 return request.getParameterMap();
61 } catch (UnsupportedEncodingException e) {
62 e.printStackTrace();
63 }
64 } else if (method.equalsIgnoreCase("get")) {
65 // get请求
66 Map<String, String[]> parameterMap = request.getParameterMap();
67 for (String parameterName : parameterMap.keySet()) {
68 String[] values = parameterMap.get(parameterName);
69 if (values != null) {
70 for (int i = 0; i < values.length; i++) {
71 try {
72 values[i] = new String(values[i].getBytes("iso8859-1"), "utf-8");
73 } catch (UnsupportedEncodingException e) {
74 e.printStackTrace();
75 }
76 }
77 }
78 }
79 return parameterMap;
80 }
81 return super.getParameterMap();
82 }
83
84 @Override
85 public String getParameter(String name) {
86 @SuppressWarnings("unchecked")
87 Map<String, String[]> parameterMap = getParameterMap();
88 String[] values = parameterMap.get(name);
89 if (values == null) {
90 return null;
91 }
92 return values[0]; // 取回参数的第一个值
93 }
94
95 @Override
96 public String[] getParameterValues(String name) {
97 @SuppressWarnings("unchecked")
98 Map<String, String[]> parameterMap = getParameterMap();
99 String[] values = parameterMap.get(name);
100 return values;
101 }
102 }