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. 项目启动报错:Communications link failure

    2017-12-29 10:43:19,776 ERROR [com.alibaba.druid.pool.DruidDataSource] - <init datasource error, ...

  2. 配置gem5-gpu docker版

    1 安装docker:wget -qO- https://get.docker.com/ | sh,启动服务:sudo service docker start 2 把非root用户添加到docker ...

  3. [题解] LuoguP5666 树的重心

    这个题......确实是CSPNOIP题qwq 感觉猜到一个性质就差不多了,首先,对于一棵树,随便拎一个节点\(rt\)当根节点,那么他的重心一定在\(rt\)的重儿子里,进一步的,可以发现重心一定在 ...

  4. php笔记04

    PHP+MySQL 连接数据库 mysqli <?php $servername="localhost"; $username="root"; $pass ...

  5. NIFI

    Apache nifi 第一篇(概述) Apache nifi 第二篇(小白初试) nifi数据对接流程初次尝试 NIFI ExecuteSQL配置教程(1.8) Processor(处理器)之配置 ...

  6. Setup Factory删除TODO文件

    s1= Shell.GetFolder(SHF_STARTMENUPROGRAMS);s2 = String.Concat(s1, "\\*\\TODO");//将*替换成项目名F ...

  7. 八十九、SAP中ALV事件之三,查看事件自带说明

    一.双击REUSE_ALV_GRID_DISPLAY,来到SE37的这个函数模块中,查看IT_EVENT的相关说明,点击后面的显示按钮 二.翻译第一句 三.翻译第二句 四.翻译第三句 五.翻译第四句 ...

  8. 130-PHP子类通过类函数访问父类protected修饰的类成员

    <?php class father{ //定义father类 //定义protected修饰的成员属性和方法 protected $money=1000000; protected funct ...

  9. MongoDB Projection

    版权所有,未经许可,禁止转载 章节 MongoDB 入门 MongoDB 优势 MongoDB 安装 MongoDB 数据建模 MongoDB 创建数据库 MongoDB 删除数据库 MongoDB ...

  10. Cobalt Strike简单使用(9,29第十五天)

    本文转自:https://www.cnblogs.com/yuanshu/p/11616657.html 一.介绍: 后渗透测试工具,基于Java开发,适用于团队间协同作战,简称“CS”. CS分为客 ...