11.全站乱码过滤器
全站乱码过滤器
我们可以开发一个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.全站乱码过滤器相关推荐
- 【Java】全站编码过滤器GenericEncodingFilter代码与配置
编码过滤器GenericEncodingFilter: 1 package com.fuck.web.filter; 2 3 import java.io.IOException; 4 import ...
- java 中文乱码过滤器_JAVA中文乱码过滤器(用java过滤器解决中文乱码)V0422 整理版...
JAVA中文乱码过滤器(用java过滤器解决中文乱码)V0422 整理版 不用再担心java中文乱码问题,一步到位,一次性解决.更方便更快捷. web-xml配置 EncodingFilter com ...
- spingMVC 引用实体类绑定,中文乱码过滤器,时间类型转换器 。案例配置步骤
1.通过maven ,创建 webApp骨架项目,完成java文件夹的项目结构,并为web项目配置好Tomcat服务器. 具体步骤参照:https://blog.csdn.net/qq84719666 ...
- SpringMVC全局乱码过滤器、注解@RequestParam、自定义类型转换器
目录 配置全局乱码过滤器 参数绑定注解@RequestParam 注解@RequestParam的参数使用说明 获得Restful风格的参数 自定义类型转换器 自定义转换器的开发步骤: 获得Servl ...
- 使用乱码过滤器解决网页出现乱码的三种方法
1.自己手写的简易过滤器 简易版本,我们解决乱码:写一个简易过滤器,注册到web.xml里 public class EncodingFilter implements Filter {@Overri ...
- DbVisualizer 8.0.11 出现乱码问题
在SQL Commander中,sql语句中如果有中文,显示是'口口口'. 解决办法如下: 在Tools->tool Properties->General->Appearance- ...
- JavaWEB过滤器和监听器技术
过滤器介绍 什么是过滤器 生活中的例子: 滤水器,口罩,杯子上滤网,渔网 生活中的过滤器:留下我们想要的,排除,我们不想要的. 高考: 只有分数够高的同学才能进入理想的大学.有一部分同学被拦截在大学之 ...
- estore电子商城-知识整合
Estore电子商城 --- 知识的整合 分析需要的功能: 01.用户注册(发送激活邮件/JS前台实现数据校验/验证码) 02.用户激活 03.用户登录(记住用户名/30天内自动登陆) 04.用户注销 ...
- Estore电子商城 --- 知识的整合
Estore电子商城 --- 知识的整合 分析需要的功能: 01.用户注册(发送激活邮件/JS前台实现数据校验/验证码) 02.用户激活 03.用户登录(记住用户名/30天内自动登陆) 04.用户注销 ...
- Struts2基础知识
本文主要包括以下内容 struts2常用常量的定义与意义 struts2处理流程 拆分struts 动态方法调用,使用通配符 接收请求参数 中文编码问题 自定义类型转化器 访问或添加request/s ...
最新文章
- 封装了一套WeCenter的IOS SDK
- Java 匿名类也能使用构造函数
- Play Framework 2.2.6 安装
- 【图像分割应用】医学图像分割小总结
- 微软老毛病还没改:Win10版本多达七个 咋选?
- Java 接口小总结;
- 珍惜相聚,亦珍惜离别
- 将项目依赖也打到jar包中
- HTML中transform菜鸟,HTML canvas
- android宿舍管理系统源码,基于android操作系统的手机宿舍管理系统使用手册
- AI前导课-第一课AI概览(2018/10/20)
- 目标检测——域适应的学习笔记
- Publication的 immediate_sync 属性
- P2422 良好的感觉
- 人脸识别的十个关键技术组成及原理
- php导出excel处理微信昵称emoji表情符号和特殊颜文字符
- Mysql primary key主键冲突的可能性与解决方案
- 大数据带来了哪些改变
- 如何解决Word只能用安全模式打开
- HoloLens原理分析和硬件拆解
热门文章
- 做煎饼果子的N种方式——From Sequential to Reactive
- pureftpd 配置 mysql_Pure-ftp配置文件详解
- 享元模式——滴滴打车的共享经济思维
- 如何通过自我介绍打动面试官?
- 有效沟通bic法则_善用BIC法则,负面回馈不怕引起反弹!
- cygwin中安装apt-cyg管理工具注意事项
- android 监听本机网络请求_前端系列课程(2)-网络基础概念(URL)
- Gartner2015新兴技术炒作曲线图
- python怎么变成白色_在python中将一系列颜色更改为白色
- 计算机网络技术与应用张基温答案,计算机网络技术与应用教程张基温杜勇刘诗瑾廖伟国董兆军第3章接入技术课件教学.ppt...