zoukankan      html  css  js  c++  java
  • Filter

    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 }
  • 相关阅读:
    每天一道LeetCode--141.Linked List Cycle(链表环问题)
    每天一道LeetCode--119.Pascal's Triangle II(杨辉三角)
    每天一道LeetCode--118. Pascal's Triangle(杨辉三角)
    CF1277D Let's Play the Words?
    CF1281B Azamon Web Services
    CF1197D Yet Another Subarray Problem
    CF1237D Balanced Playlist
    CF1239A Ivan the Fool and the Probability Theory
    CF1223D Sequence Sorting
    CF1228D Complete Tripartite
  • 原文地址:https://www.cnblogs.com/FengZeng666/p/11654069.html
Copyright © 2011-2022 走看看