全站乱码过滤器

我们可以开发一个Filter,拦截所有的动态web资源,在动态web资源执行之前,解决好乱码,从而一劳永逸的解决全站乱码问题。

对于响应数据乱码,只需要设置Content-Type即可解决乱码。

对于请求参数乱码,如果是POST提交,可以一行代码解决,如果是GET提交需要手动的编解码解决乱码。

代码实现

package cn.bingou.filter;import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Map;
import java.util.Map.Entry;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;// 实现 javax servlet 包中的Filter
public class EncodingFilter implements Filter {private String encode=null; // 使用全局字的符集
    @Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {// 1.解决应答乱码  response.setContentType("text/html;charset="+encode);// 设置响应类型为text/html// 2.解决请求乱码 -> 使用MyRequest替代requestMyRequest req=new MyRequest((HttpServletRequest) request);// 放行请求
        chain.doFilter(req, response);}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// 通过fileterConfig对象获取ServletContext对象ServletContext sc=filterConfig.getServletContext();// 通过sc获取web.xml配置的初始化参数,给encode属性赋值encode=sc.getInitParameter("encode");}@Overridepublic void destroy() {// TODO Auto-generated method stub
    }class MyRequest extends HttpServletRequestWrapper{// 该变量表明paramMap集合是否已经被进行过编码private boolean hasEncode=false;public MyRequest(HttpServletRequest request) {super(request);}@Overridepublic String getParameter(String name){// 调用本类重写的方法,获取已经进行过手动编码的map集合Map<String,String[]> paramMap=this.getParameterMap();// 从集合中获取name对应的valueString[] value=paramMap.get(name);if(value!=null){// 如果数组部位null,返回数组中的第一个元素return value[0];}// 如果数组为null,返回数组中的第一个元素return null;}@Overridepublic Map<String,String[]> getParameterMap(){// 获取被装饰者 -> request对象ServletRequest req=this.getRequest();// 调用被装饰者的方法,获取保存了请求参数的mapMap<String, String[]> paramMap=req.getParameterMap();if(this.hasEncode==false){ // 还没有进行过手动编码// 遍历这个map集合,进行手动编解码for(Entry<String,String[]> entry:paramMap.entrySet()){// 获取一个请求参数对应的值String[] values=entry.getValue();if(values!=null){// 对数组中的所有值进行手动编码for(int i=0;i<values.length;i++){try {values[i]=new String(values[i].getBytes("iso8859-1"),encode);} catch (UnsupportedEncodingException e) {e.printStackTrace();}}}}this.hasEncode=true;}return paramMap;}@Overridepublic String[] getParameterValues(String name){return this.getParameterMap().get(name);}}
}

注意:千万要看好编码标准8859-1,我就写反了,找了一下午bug才找到!

web.xml配置

  <!-- 配置过滤器 --><filter><filter-name>EncodingFilter</filter-name><filter-class>cn.bingou.filter.EncodingFilter</filter-class></filter><!-- 配置过滤器拦截的url --><filter-mapping><filter-name>EncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

转载于:https://www.cnblogs.com/chuijingjing/p/9812494.html

11.全站乱码过滤器相关推荐

  1. 【Java】全站编码过滤器GenericEncodingFilter代码与配置

    编码过滤器GenericEncodingFilter: 1 package com.fuck.web.filter; 2 3 import java.io.IOException; 4 import ...

  2. java 中文乱码过滤器_JAVA中文乱码过滤器(用java过滤器解决中文乱码)V0422 整理版...

    JAVA中文乱码过滤器(用java过滤器解决中文乱码)V0422 整理版 不用再担心java中文乱码问题,一步到位,一次性解决.更方便更快捷. web-xml配置 EncodingFilter com ...

  3. spingMVC 引用实体类绑定,中文乱码过滤器,时间类型转换器 。案例配置步骤

    1.通过maven ,创建 webApp骨架项目,完成java文件夹的项目结构,并为web项目配置好Tomcat服务器. 具体步骤参照:https://blog.csdn.net/qq84719666 ...

  4. SpringMVC全局乱码过滤器、注解@RequestParam、自定义类型转换器

    目录 配置全局乱码过滤器 参数绑定注解@RequestParam 注解@RequestParam的参数使用说明 获得Restful风格的参数 自定义类型转换器 自定义转换器的开发步骤: 获得Servl ...

  5. 使用乱码过滤器解决网页出现乱码的三种方法

    1.自己手写的简易过滤器 简易版本,我们解决乱码:写一个简易过滤器,注册到web.xml里 public class EncodingFilter implements Filter {@Overri ...

  6. DbVisualizer 8.0.11 出现乱码问题

    在SQL Commander中,sql语句中如果有中文,显示是'口口口'. 解决办法如下: 在Tools->tool Properties->General->Appearance- ...

  7. JavaWEB过滤器和监听器技术

    过滤器介绍 什么是过滤器 生活中的例子: 滤水器,口罩,杯子上滤网,渔网 生活中的过滤器:留下我们想要的,排除,我们不想要的. 高考: 只有分数够高的同学才能进入理想的大学.有一部分同学被拦截在大学之 ...

  8. estore电子商城-知识整合

    Estore电子商城 --- 知识的整合 分析需要的功能: 01.用户注册(发送激活邮件/JS前台实现数据校验/验证码) 02.用户激活 03.用户登录(记住用户名/30天内自动登陆) 04.用户注销 ...

  9. Estore电子商城 --- 知识的整合

    Estore电子商城 --- 知识的整合 分析需要的功能: 01.用户注册(发送激活邮件/JS前台实现数据校验/验证码) 02.用户激活 03.用户登录(记住用户名/30天内自动登陆) 04.用户注销 ...

  10. Struts2基础知识

    本文主要包括以下内容 struts2常用常量的定义与意义 struts2处理流程 拆分struts 动态方法调用,使用通配符 接收请求参数 中文编码问题 自定义类型转化器 访问或添加request/s ...

最新文章

  1. 封装了一套WeCenter的IOS SDK
  2. Java 匿名类也能使用构造函数
  3. Play Framework 2.2.6 安装
  4. 【图像分割应用】医学图像分割小总结
  5. 微软老毛病还没改:Win10版本多达七个 咋选?
  6. Java 接口小总结;
  7. 珍惜相聚,亦珍惜离别
  8. 将项目依赖也打到jar包中
  9. HTML中transform菜鸟,HTML canvas
  10. android宿舍管理系统源码,基于android操作系统的手机宿舍管理系统使用手册
  11. AI前导课-第一课AI概览(2018/10/20)
  12. 目标检测——域适应的学习笔记
  13. Publication的 immediate_sync 属性
  14. P2422 良好的感觉
  15. 人脸识别的十个关键技术组成及原理
  16. php导出excel处理微信昵称emoji表情符号和特殊颜文字符
  17. Mysql primary key主键冲突的可能性与解决方案
  18. 大数据带来了哪些改变
  19. 如何解决Word只能用安全模式打开
  20. HoloLens原理分析和硬件拆解

热门文章

  1. 做煎饼果子的N种方式——From Sequential to Reactive
  2. pureftpd 配置 mysql_Pure-ftp配置文件详解
  3. 享元模式——滴滴打车的共享经济思维
  4. 如何通过自我介绍打动面试官?
  5. 有效沟通bic法则_善用BIC法则,负面回馈不怕引起反弹!
  6. cygwin中安装apt-cyg管理工具注意事项
  7. android 监听本机网络请求_前端系列课程(2)-网络基础概念(URL)
  8. Gartner2015新兴技术炒作曲线图
  9. python怎么变成白色_在python中将一系列颜色更改为白色
  10. 计算机网络技术与应用张基温答案,计算机网络技术与应用教程张基温杜勇刘诗瑾廖伟国董兆军第3章接入技术课件教学.ppt...