1)新建EncodingFilter过滤器

新建过滤器过去所有请求,用于处理请求参数的解码方式为UTF-8,解决中文乱码

/*** 统一编码* @author Administrator*/
@WebFilter("/*")//过滤所有路径
public class EncodingFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// TODO Auto-generated method stub}@Overridepublic void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {//1.强转HttpServletRequest request=(HttpServletRequest) req;HttpServletResponse response=(HttpServletResponse) resp;//2.放行chain.doFilter(request, response);}@Overridepublic void destroy() {// TODO Auto-generated method stub}}

2)自定义请求继承HttpServletRequestWrapper

HttpServletRequestWrapper实现了HttpServletRequest接口,自己写类继承HttpServletRequestWrapper,然后实现重写其中的String getParameter(String name)、String[] getParameterValues(String name)、String[] getParameterValues(String name)三个方法。它们就可以根据我们的需求做改变,比如设置字符,去掉空格。
在EncodingFilter文件中创建类MyRequest:

class MyRequest extends HttpServletRequestWrapper{private HttpServletRequest request;private boolean flag=true;public MyRequest(HttpServletRequest request) {super(request);this.request=request;}@Overridepublic String getParameter(String name) {  if(name==null || name.trim().length()==0){return null;}String[] values = getParameterValues(name);if(values==null || values.length==0){return null;}return values[0];}@Override/*** hobby=[eat,drink]*/public String[] getParameterValues(String name) {if(name==null || name.trim().length()==0){return null;}Map<String, String[]> map = getParameterMap();if(map==null || map.size()==0){return null;}return map.get(name);}@Override/*** map{ username=[tom],password=[123],hobby=[eat,drink]}*/public Map<String,String[]> getParameterMap() {  /*** 首先判断请求方式* 若为post  request.setchar...(utf-8)* 若为get 将map中的值遍历编码就可以了*/String method = request.getMethod();if("post".equalsIgnoreCase(method)){try {request.setCharacterEncoding("utf-8");return request.getParameterMap();} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}}else if("get".equalsIgnoreCase(method)){Map<String,String[]> map = request.getParameterMap();//需要遍历map 修改value的每一个数据的编码if(flag){for (String key:map.keySet()) {String[] arr = map.get(key);//继续遍历数组for(int i=0;i<arr.length;i++){//编码try {arr[i]=new String(arr[i].getBytes("iso8859-1"),"utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}}}flag=false;}return map;}return super.getParameterMap();}}

3)过滤器中使用自定义请求完成编码的设置

 ...//2.放行chain.doFilter(new MyRequest(request), response);...

这样一来,在servlet中调用包装器的getParameters方法来获取参数,就已经完成了字符编码的转换过程,我们就不需要在每次获取参数时来进行字符编码转换了。


4)测试注册

查看数据库:

05_过滤器解决请求中文乱码(继承HttpServletRequestWrapper)相关推荐

  1. ​ SpringMVC表单请求参数的绑定,配置编码过滤器解决请求参数中文乱码问题,自定义类型转换器

    文章目录 ​ SpringMVC的参数绑定支持的数据类型 基本数据类型和字符串类型 JavaBean 包装类 Map类型 List类型 POST请求参数中文乱码的解决方法 自定义类型转换器(Date类 ...

  2. postmain请求中午乱码_完美解决Get和Post请求中文乱码的问题

    对于Post请求,只需在Servlet或者jsp中写入如下代码就可以把解决从表单中传入的中文乱码问题 request.setCharacterEncoding("utf-8"); ...

  3. 解决get请求中文乱码问题

    在很多情况下get请求会发生中文乱码的情况,而换做post就不会,这其中的根本原因是get请求默认的是使用"iso-8859-1"编码,接下来介绍两种种解决get请求编码的方法 1 ...

  4. 解决Tomcat7中文乱码问题

    最近使用ssh框架写一个小项目时,发现使用tomcat7,post和get请求会出现中文乱码的为问题,spring框架下提供了一个CharacterEncodingFilter类来解决post中文乱码 ...

  5. 【Servlet】HTTP请求中文乱码的问题

    请求中文乱码 在进行请求参数传递时,经常会遇到请求数据为中文时的乱码问题,当Form表单的文本域中输入中文时会产生乱码问题,出现乱码的原因与客户端的请求编码方式(GET请求或POST请求)以及服务器的 ...

  6. JAVAEE解决页面中文乱码问题

    1.首先jsp页面的pageEncoding以及contentType编码都改成UTF-8 2.解决get请求中文乱码: 在tomcat的Servers项目中打开server.xml文件,在该行添加U ...

  7. mysql gbk_MySQL字符集 GBK、GB2312、UTF8区别 解决MYSQL中文乱码问题

    MySQL字符集 GBK.GB2312.UTF8区别 解决MYSQL中文乱码问题 更新时间:2012年08月27日 21:17:11   作者: MYSQL中文乱码问题原因有很多,脚本之家以前发布过很 ...

  8. 解决putty中文乱码并远程访问linux界面功能

    1,解决putty中文乱码 打开putty主程序,选择window-〉Appearance-〉Font settings-〉Change...,选择汉字字体为宋体或楷体 在window-〉Appear ...

  9. 解决Linux中文乱码

    解决Linux中文乱码 方法一:    修改/root/.bash_profile文件,增加export LANG=zh_CN.GB18030 对于其他用户,也必须相应修改该文件 使用该方法时putt ...

  10. Spring-解决请求中文乱码问题

    Spring-解决请求中文乱码问题 参考文章: (1)Spring-解决请求中文乱码问题 (2)https://www.cnblogs.com/andyfengzp/p/6197993.html (3 ...

最新文章

  1. ERROR: Failed to resolve: com.android.databinding:library:3.4.2
  2. 【算法】快速选择算法 ( 数组中找第 K 大元素 )
  3. 安装 | R2021a链接及Matlab运行图
  4. mysql-proxy完成mysql读写分离
  5. c# DataTable DataBinding 应用笔记
  6. 移动办公、企业-移动办公:移动过程中的办公触手可及-by小雨
  7. 依图做语音了!识别精度创中文语音识别新高点
  8. PHP网站加功能,如何实现添加分类的功能
  9. 15.导入网表及status介绍[原创]
  10. 微信后台服务器能查撤回的消息吗,微信撤回的消息还能看到吗?查看方法介绍...
  11. 如何练就DOTA绝世神功宝典(转)
  12. 【框架-MFC】MFC 显示和隐藏 星号密码 以及如何预防被查看
  13. 大数据技术如何有效阻击网络黑产?
  14. 见一博客搬家公司 把老紫竹火龙果和我的blog全搬他家去了
  15. 为什么没人比程序员更讨厌软件
  16. SVN服务器管理工具——VisualSVN Server Manager
  17. RSA---n分解攻击
  18. 轻型载货汽车后悬架钢板弹簧设计
  19. 启明星辰2018年营收达25亿元 同比增长10.58%
  20. 软件测试面试中关于线上bug,线上出现bug测试人员怎么办

热门文章

  1. 回文自动机算法+马拉车算法概述及习题【回文串系列问题】
  2. mysql高性能sql引擎剖析_Oracle+高性能SQL引擎剖析:SQL优化与调优机制详解-笔记之执行计划(一)...
  3. 三次握手四次挥手必掌握,看了绝对不吃亏!
  4. php画弧,75、PHP图像处理之画圆、弧线、网站饼状统计图绘制
  5. 西安集训B层Day1 test 问题 A: 旅行日记
  6. java图文并排_JAVA如何实现图文混合显示
  7. 数据结构之B树查找、插入、删除详解
  8. Mybatis工作中常见关系映射总结
  9. Redis内存淘汰策略及内存管理
  10. Java创建型设计模式之简单工厂,工厂方法,抽象工厂