最近做项目比较忙,一直没有更新新的知识,有好多好的代码没给大家分享出来,后期我会抽空整理出来的

这两天遇到一个项目编码问题,搞了两天了也没解决。问题是这样的:

项目是gbk的编码(我知道看到这里要被吐槽,但是项目编码是我在接受之前都写好的,我也不知道是谁用gbk来写的,呵呵哒。。。),之前一直在Windows的服务器上部署着,Linux服务器上也部署过一套,系统编码是gbk的,没出过什么问题。前天有个新的客户使用是Linux服务器,系统编码却是utf-8的,因为服务器上还有其他的项目(utf-8)的,所以没办法为了我这个项目而去改系统编码,没想到启动项目后post过来的参数都成了乱码,get方式的却没问题。

我看了下之前的编码过滤器是这样写的,首先获取request的parameter,如果是post方式则循环取值转码,最后是没问题的,但是在Linux上却莫名其妙的不行。最后百度了一下好多都是要setCharacterEncoding,于是乎我就又设置了编码格式,依旧不行,通过打印信息直到最后我才意识到,原来我之前通过遍历取值转码已经显示正常了,接着我又setCharacterEncoding就又不正常了,所以我干脆直接就setCharacterEncoding不做循环取值转码操作,这时候重新更新部署后,奇迹般的好了,get方式post方式一切正常。

说了这么多废话,可能有点乱,这里直接上代码吧:

 1 package com.blue.app.common;
 2
 3 import java.io.IOException;
 4 import java.util.Iterator;
 5 import java.util.Map;
 6
 7 import javax.servlet.Filter;
 8 import javax.servlet.FilterChain;
 9 import javax.servlet.FilterConfig;
10 import javax.servlet.ServletException;
11 import javax.servlet.ServletRequest;
12 import javax.servlet.ServletResponse;
13 import javax.servlet.http.HttpServletRequest;
14 import javax.servlet.http.HttpServletResponse;
15
16 /**
17  * 字符编码过滤器
18  * @author 爱茹一婉年
19  *
20  */
21 public class CommonFilter implements Filter {
22
23     /** 保存用户指定编码 */
24     protected String encoding = null;
25
26     /**
27      * 初始化过滤器方法,由系统创建Filter时自动调用 把web.xml中用户指定的编码保存在本类的属性中
28      */
29     public void init(FilterConfig filterConfig) throws ServletException {
30         this.encoding = filterConfig.getInitParameter("encoding");
31     }
32
33     /**
34      * 执行过滤功能 将参数信息按指定的编码进行转换
35      * 针对post进行编码处理,get方式略过
36      */
37     @SuppressWarnings("unchecked")
38     public void doFilter(ServletRequest arg0, ServletResponse arg1,
39             FilterChain chain) throws IOException, ServletException {
40
41         HttpServletRequest request = (HttpServletRequest) arg0;
42         HttpServletResponse response = (HttpServletResponse) arg1;
43
44         if ("POST".equals(request.getMethod())) {
45             //参数转换,因为我们已经它肯定是Http协议的请求。
46             request.setCharacterEncoding(this.encoding);
47             response.setCharacterEncoding(this.encoding);
48             response.setContentType("text/html;charset=" + this.encoding);
49             //------------注意这里上下的顺序不能颠倒-------------
50             //以下测试输出用
51             Map parameterMap = request.getParameterMap();
52             if (!parameterMap.isEmpty()) {
53                 Iterator it = parameterMap.keySet().iterator();
54                 String value[] = null;
55                 while (it.hasNext()) {
56                     value = (String[]) parameterMap.get(it.next());
57                     for (int i = 0; i < value.length; i++) {
58                         System.out.println("编码过滤后的值----" + value[i]);
59                         //System.out.println(this.encoding+"转换结果--------"+new String(value[i].getBytes("ISO-8859-1"),this.encoding));
60                     }
61                 }
62             }
63         }
64         chain.doFilter(arg0, arg1);
65     }
66
67     /**
68      * 销毁方法,在系统销毁Filter之前由系统自动调用
69      */
70     public void destroy() {
71         this.encoding = null;
72     }
73
74 } 

过滤器的代码已经写完了,下边是web.xml相关的配置

 1         <!-- 编码过滤器 -->
 2       <filter>
 3         <filter-name>CommonFilter</filter-name>
 4         <filter-class>com.blue.app.common.CommonFilter</filter-class>
 5         <init-param>
 6             <param-name>encoding</param-name>
 7             <param-value>gbk</param-value>
 8         </init-param>
 9     </filter>
10     <filter-mapping>
11         <filter-name>CommonFilter</filter-name>
12         <url-pattern>/*</url-pattern>
13     </filter-mapping>

转载于:https://www.cnblogs.com/wanying521/p/5545985.html

JavaWeb中post提交乱码之编码拦截器Filter相关推荐

  1. 去哪网实习总结:JavaWeb中文传參乱码问题的解决(JavaWeb)

    本来是以做数据挖掘的目的进去哪网的.结构却成了系统开发... 只是还是比較认真的做了三个月.老师非常认同我的工作态度和成果... 实习立即就要结束了,总结一下几点之前没有注意过的变成习惯和问题,分享给 ...

  2. ssh框架从页面传中文发生乱码时怎么解决,就是添加一个字符编码拦截器。用springframework自带的便可...

    ssh框架从页面传中文发生乱码时怎么解决,就是添加一个字符编码拦截器.用springframework自带的便可 转载于:https://www.cnblogs.com/oymx/p/3976392. ...

  3. ASP.NET MVC案例教程——拦截器 Filter

    摘要       本文将对"MVC公告发布系统"的发布公告功能添加日志功能和异常处理功能,借此来讨论ASP.NET MVC中拦截器的使用方法. 一个小难题       我们继续完善 ...

  4. html页面设置拦截器,SpringBoot拦截器Filter的使用方法详解

    SpringBoot拦截器Filter的使用方法详解 发布时间:2020-08-27 22:44:03 来源:脚本之家 阅读:107 作者:玉天恒 前言: 最新Servlet 3.0拦截器的使用 1. ...

  5. vue2中使用axios,以及axios拦截器的配置

    目录 一.vue2项目中如何实现异步请求 1.axios:是一个基于Promise的网络请求库.既可以在node.js(服务器端)使用,也可以在浏览器端使用 2.vue中的使用方法 ​ (2)引用方法 ...

  6. java 拦截器响应中取所有参数,spring boot拦截器中获取request post请求中的参数

    最近有一个需要从拦截器中获取post请求的参数的需求,这里记录一下处理过程中出现的问题. 首先想到的就是request.getParameter(String )方法,但是这个方法只能在get请求中取 ...

  7. spring中的监视器,过滤器,拦截器

    1.监视器 (1)首先监视器是观察者模式的实现,在我之前的博客中有关于监视器模式的解释.监视器相当于观察者 (2)我们在springMvc中最常见的监视器 ContextLoaderlistener ...

  8. Spring3中的mvc:interceptors标签配置拦截器

    mvc:interceptors 这个标签用于注册一个自定义拦截器或者是WebRequestInterceptors. 可以通过定义URL来进行路径请求拦截,可以做到较为细粒度的拦截控制. 例如在配置 ...

  9. SpringBoot 防止XSS攻击和SQL攻击拦截器(Filter)

    什么是SQL攻击.什么是XSS攻击 SQL 攻击:把SQL命令插入到Web表单并提交,欺骗服务器执行恶意的SQL命令. XSS 攻击:向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏 ...

最新文章

  1. virtualbox 启动时Kernel driver not installed (rc=-1908) 错误的解决方法
  2. hdu4884 模拟
  3. microscope image 3D reconstruction
  4. 2016 年崛起的 JS 项目
  5. 前端学习(573):margin无效情形table无效
  6. python 取余_玩转Python源码(一) quot;%squot;与“%d”
  7. 软件测试面试-测试的目的是什么?【高频】
  8. javamailsender注入失败_Springboot 之 JavaMailSender发送电子邮件
  9. 推荐一款文献管理工具 Zotero |附使用教程和学习路径
  10. 您未被授权查看该页 的解决办法。
  11. python h5游戏_记一次游戏H5开发经验
  12. 计算机无法装补丁,Win7系统无法安装补丁提示缺少Service Pack系统组件的原因及解决方法...
  13. 最新版Eclipse2020创建项目红叉问题(“Failed to init ct.sym ...\jrt-fs.jar )
  14. VS2017 LINK : fatal error LNK1104: cannot open file ‘atls.lib‘错误解决方案
  15. LOAM源码解析2——laserOdometry
  16. 电脑超时空保卫者——光华反病毒软件(转)
  17. Mac OS下Charles抓包小程序的保姆级操作过程
  18. 2018 金华市中小学学生计算机,2018年金华市中小学生校园足球秋季联赛圆满落幕...
  19. 怎样获得元气骑士的损坏的机器人_元气骑士损坏的机器人怎么修复?机器人修复方法...
  20. Winform指示灯

热门文章

  1. Linux shell 编程入门 - 使用ubuntu-14.10
  2. Windows下调试PostGreSQL源码第一步 - 下载和编译源码、构造VS工程
  3. 用VC++实现一个文本文件阅读器
  4. python3: 数字日期和时间(1)
  5. ACID、数据库隔离级别
  6. [Egret]长按截屏分享、分享截屏图片、本地存储
  7. mysql-事务隔离级别
  8. shell 从1加到100
  9. hdu---5455---fang fang
  10. Linux Shell常用技巧(七)