1.


public class CharacterFilter implements Filter {
private String characterEncoding = null;
FilterConfig fc;
public void init(FilterConfig filterConfig) throws ServletException {
fc = filterConfig;
if (null != fc &&
null != fc.getInitParameter("encoding") &&
!"".equals(fc.getInitParameter("encoding"))) {
characterEncoding = fc.getInitParameter("encoding");
} else {
characterEncoding = "UTF-8";
}
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
// 拦截所有的请求 解决全站中文乱码
// 指定 request 和 response 的编码
request.setCharacterEncoding(characterEncoding);
//将response对象中的数据以UTF-8解码后发向浏览器
response.setCharacterEncoding(characterEncoding);
//告诉浏览器输出内容为HTML,并使用UTF-8对HTML内容进行解码
response.setContentType("text/html;charset="+characterEncoding);
chain.doFilter(request, response);
} public void destroy() {
}
}

2.配置Filter,注意编码Filter注册要放到最前面

<filter>
<filter-name>CharacterFilter</filter-name>
<filter-class>com.hbxy.web.c04.filter.CharacterFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter> <filter-mapping>
<filter-name>CharacterFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping

补充:关千编码问题

在Servlet中,request/response处理中文时,使用默认配置往往会出现乱码,如:

public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
OutputStream out = response.getOutputStream();
String data =“张三”;
out.write(data.getBytes("UTF-8"));
}

输出乱码的问题是程序用UTF-8编码,而如果浏览器用GB2312解码,会出现乱码

Servlet乱码分为request乱码和response乱码

Response响应乱码解决办法

  • 1、response.setCharacterEncoding(“UTF-8”); 用千response.getWriter()输出的字符流的乱码问题,如果是response.getOutputStream()是不需要设置(因为数据里已经进行了编码)
  • 2response.setContentType("text/html;charset=UTF-8"); 是为了控制浏览器的行为,即控制浏览器用UTF-8进行解码
  • 3、建议全站设置统一的编码:JSP/Servlet统一设置成UTF-8或者GBK
  • 也即在FilterResponse设置:
    • response.setCharacterEncoding(“UTF-8”);
    • response.setContentType("text/html;charset=UTF-8");

RequestPOST请求

RequestGET请求

JavaWeb乱码问题及统一全站编码(通过Filter实现)的更多相关文章

  1. eclipse 统一设置编码_项目工程统一设置成utf8编码_eclipse代码规范

    在做项目的时候文件有的时候编码不同一 经常出现乱码,eclipse统一设置编码 可以解决项目编码混乱的问题, 设置eclipse java,jsp,css,js文件编码的方法如下: 1.在工具栏中点击 ...

  2. javaweb的Filter过滤器设置全站编码

    FIlter配置全站编码有一种方法是重写getParameter方法,也就是继承HttpServletRequestWrapper在重写getParameter方法,还有一种就是如下: public ...

  3. 如何解决JavaWeb乱码问题

    作为一个合格的web开发人员应该是什么问题都遇到过的,尤其是乱码问题.大家也许都体会到了,我们中国人学编程,很大的一个不便就是程序的编码问题,无论学习什么技术,我们都需要探讨他的编码问题. 今天来讲一 ...

  4. JavaWeb 乱码问题终极解决方案!

    经常有读者在公众号上问 JavaWeb 乱码的问题,昨天又有一个小伙伴问及此事,其实这个问题很简单,但是想要说清楚却并不容易,因为每个人乱码的原因都不一样,给每位小伙伴都把乱码的原因讲一遍也挺费时间的 ...

  5. java-web乱码问题解决

    <一>乱码问题(设置tomcat uriencoding=’utf-8’); 统一设置编码过滤器 <1>get请求: request.setCharacterEncoding( ...

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

    编码过滤器GenericEncodingFilter:   package com.fuck.web.filter; import java.io.IOException; import java.i ...

  7. windows 控制台cmd乱码(及永久修改编码)的解决办法

    注册 windows 控制台cmd乱码(及永久修改编码)的解决办法 转载 2017年11月02日 22:49:52 1067 windows 控制台cmd乱码的解决办法 我本机的系统环境: OS Na ...

  8. MySQL的搜索引擎,统一字符编码 和忘记MySQL密码如何破解

    忘记mysql密码 linux平台下,破解密码的两种方式 [root@egon ~]# rm -rf /var/lib/mysql/mysql #所有授权信息全部丢失!!! [root@egon ~] ...

  9. mysql 统一字符编码

    配置文件中的注释可以有中文,但是配置项中不能出现中文 #在mysql的解压目录下,新建my.ini,然后配置 #1. 在执行mysqld命令时,下列配置会生效,即mysql服务启动时生效 [mysql ...

随机推荐

  1. 05.swoole学习笔记--定时器

    <?php //循环执行的定时器 swoole_timer_tick(,function($timer_id){ echo "执行 $timer_id \n"; }); sw ...

  2. NIO组件Channel

    基本介绍 NIO的通道类似于流, 但有些区别: 通道可以同时进行读写, 而流只能读或者只能写 通道可以实现异步读写数据 通道可以从缓冲区(Buffer)读数据, 也可以写数据到缓冲区 BIO中的str ...

  3. Python中基于Unpacking与Packing进行分割,组合操作的嵌套元组数据结构的应用

    对于二叉树,图等,Python可采用基于Packing与Unpacking形成的嵌套元组数据结构来模拟,这里Packing指,比如a=b,c则,a就成了一个包含b,c的元组,Unpacking是指,比 ...

  4. S7-200 smart输入输出接口试验

    工具 西门子 s7-200smart PLC 西门子s7-200 smart 试验 CPU型号是 SR30 这个 编译环境 符号 选择 了 "输入1"以后, 会自动的编地址为I0. ...

  5. python 编写程序输出50以内勾股数,如下图所示,要求每组显示六祖,各组勾股数无重复

    import math n = 0 for a in range(1,49): for b in range(a,49): c = math.ceil(math.sqrt(a**2+b**2)) if ...

  6. 057-while循环

    <?php $x=1; //初始化变量 while($x<=5){ //执行while循环 echo "$x<br />"; $x++; } ?>

  7. flink笔记(三) flink架构及运行方式

    架构图 Job Managers, Task Managers, Clients JobManager(Master) 用于协调分布式执行.它们用来调度task,协调检查点,协调失败时恢复等. Fli ...

  8. python中的__code__

    简单总结几个常用的__code__的用法: (1)func.__code__.co_argcount:返回函数的参数个数,这里的参数个数不包含*args与**kwargs,具体来讲就是*args前的参 ...

  9. Spring 事件(1)- 内置事件

    Spring 系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of ...

  10. 数据备份 rsyncd服务器

    web服务器传文件到备份服务器: 一. rsync备份服务器,yum install -y rsync makdir /etc/rsyncd touch /etc/rsyncd/rsyncd.conf ...