• 过滤器使用之全站乱码处理


     1 public class EncodeFilter implements Filter {
     2     private String encode;
     3     public void init(FilterConfig config) throws ServletException {
     4         encode = config.getInitParameter("encode");
     5     }
     6     class MyHSR extends HttpServletRequestWrapper{
     7         private HttpServletRequest request;
     8         private boolean hasEncode = false;
     9         public MyHSR(HttpServletRequest request) {
    10             super(request);
    11             this.request = request;
    12         }
    13         @Override
    14         public Map<String,String[]> getParameterMap() {
    15             //获取提交的方式post/get
    16             if("POST".equals(request.getMethod())){
    17                 try {
    18                     request.setCharacterEncoding(encode);
    19                 } catch (UnsupportedEncodingException e) {
    20                     e.printStackTrace();
    21                 }
    22                 return request.getParameterMap();
    23             }else if("GET".equals(request.getMethod())){
    24                 //定义一个Map集合对象
    25                 Map<String,String[]> map = request.getParameterMap();
    26                 if(!hasEncode){
    27                     //遍历map
    28                     for(Map.Entry<String, String[]> entry:map.entrySet()){
    29                         //获取原来的vals
    30                         String[] vals = entry.getValue();
    31                         //遍历数组处理乱码
    32                         for (int i = 0;i<vals.length;i++) {
    33                             try {
    34                                 vals[i] = new String(vals[i].getBytes("ISO8859-1"),encode);
    35                             } catch (UnsupportedEncodingException e) {
    36                                 e.printStackTrace();
    37                             }
    38                         }
    39                     }
    40                     hasEncode = true;
    41                 }
    42                 return map;
    43             }else{//既不是get方式也不是post方式
    44                 return super.getParameterMap();
    45             }
    46         }
    47         @Override
    48         public String[] getParameterValues(String name) {
    49             return getParameterMap().get(name);
    50         }
    51         @Override
    52         public String getParameter(String name) {
    53             return getParameterValues(name)==null?"":getParameterValues(name)[0];
    54         }
    55     }
    56     public void doFilter(ServletRequest request, ServletResponse response,
    57             FilterChain chain) throws IOException, ServletException {
    58         response.setContentType("text/html;charset=utf-8");
    59         chain.doFilter(new MyHSR((HttpServletRequest)request), response);
    60 
    61     }
    62     public void destroy() {
    63     }
    64 }

     web.xml配置别忘了写啊!

  • 相关阅读:
    VS2017 C# winform 项目使用 sqlite (二)
    VS2017 C# winform 项目使用 sqlite (一)
    JS权威指南笔记(171页)-this关键字的作用域
    量化交易之下单函数和context对象
    量化交易策略基本框架
    初始量化交易
    金融量化之Tushare模块
    Python之基础算法介绍
    数据分析之Matplotlib和机器学习基础
    数据分析之Pandas
  • 原文地址:https://www.cnblogs.com/pxffly/p/7576891.html
Copyright © 2020-2023  润新知