java的web程序经常出现中文乱码的问题,用一个实现了Filter接口的过滤器类可以较好地解决这个问题。

方式一 EncodingFilter

import java.io.IOException;
import javax.servlet.*;

public class EncodingFilter implements Filter {

private FilterConfig filterConfig =
null;
    private String encoding = null;

@Override
    public void destroy() {
         filterConfig = null;
         encoding = null;
     }

@Override
    public void doFilter(ServletRequest
request, ServletResponse response,
             FilterChain filterChain)
throws IOException, ServletException {
        if
(request.getCharacterEncoding() == null) {
            if (encoding != null) {
                
request.setCharacterEncoding(encoding);
             }
            
filterChain.doFilter(request, response);
         }
     }

@Override//初始化的时候就去web.xml配置文件中拿到对应编码格式
    public void init(FilterConfig
filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
        this.encoding =
filterConfig.getInitParameter("encoding");
     }
}

web.xml中配置

<filter>
     
<filter-name>EncodingFilter</filter-name>
     
<filter-class>EncodingFilter</filter-class>
      <init-param>
          <param-name>encoding</param-name>
         
<param-value>UTF-8</param-value>
      </init-param>
  </filter>
  <filter-mapping>
     
<filter-name>EncodingFilter</filter-name>
     
<url-pattern>/*</url-pattern>
  </filter-mapping>

方式二

import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.*;

public class WordFilter implements Filter {

public void destroy() {
// TODO Auto-generated method stub

}

@SuppressWarnings("unchecked")
public void doFilter(ServletRequest req, ServletResponse res,
  FilterChain chain) throws IOException, ServletException {
  HttpServletRequest request=(HttpServletRequest)req;
  HttpServletResponse response=(HttpServletResponse)res;
  if(request.getMethod().equalsIgnoreCase("get")){//get提交方式
    Enumeration em=request.getParameterNames();
    while(em.hasMoreElements()){
      String name=em.nextElement().toString();
      String[] values=request.getParameterValues(name);
      for(int i=0;i<values.length;i++){
        values[i]=new String(values[i].getBytes("iso-8859-1"),"utf-8");//把所有字符都转换为指定的编码格式
      }
    }
  }else{
    request.setCharacterEncoding("utf-8");
  }
  chain.doFilter(request, response);
}

  public void init(FilterConfig arg0) throws ServletException {
    // TODO Auto-generated method stub

  }

}

web.xml中配置

<filter>
<filter-name>WordFilter</filter-name>
<filter-class>filter.WordFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>WordFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

java中用过滤器解决字符编码问题的更多相关文章

  1. 001. Java内存中的字符编码

    Java内存中的字符编码 Unicode字符集及utf-8 .utf-16.utf-32 等字符编码方式 字符集:字符表示的数字集合,元素称为码点或码位: 字符编码:字符实际的储存表示: 码点:一个码 ...

  2. Java基础-二进制以及字符编码简介

    Java基础-二进制以及字符编码简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 想必计算机毕业的小伙伴或是从事IT的技术人员都知道数据存储都是以二进制的数字存储到硬盘的.从事开 ...

  3. Java中常用的字符编码-解析

    ASCII字符编码 美国信息互换标准代码,为罗马字母编制的一套编码,主要用于表达现代英语和其他西欧语言中的字符,1字节的7位表示一个字符. ISO-8859-1字符编码 ISO为西欧语言中的字符制定的 ...

  4. Java工具类-设置字符编码

    package common; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.Filter ...

  5. Java工具类-转换字符编码

    package common; /** *字符串处理公用类 */ public class DealString { /** * 转换字符编码 由“iso-8859-1”西文转换为简体中文 */ pu ...

  6. java中用线程解决进出水问题

    //进水 class Inflow implements Runnable{ //水对象 Water wat; public Inflow(Water w){ this.wat = w; } @Ove ...

  7. JAVA的字符编码及问题

    web开发时,字符编码及有时候也会是一个麻烦的问题,没有经验的话,肯定不知道怎么解决,有一定的经验的话,那还是比较简单的.以下,是我学习过程中总结出来的几种字符编码级问题和其解决的方法 1.文档乱码, ...

  8. [原创]java WEB学习笔记45:自定义HttpFilter类,理解多个Filter 代码的执行顺序,Filterdemo:禁用浏览器缓存的Filter,字符编码的Filter,检查用户是否登陆过的Filter

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  9. springboot全局字符编码设置

    1.在application.properties中设置 #编码格式 spring.http.encoding.force=true spring.http.encoding.charset=UTF- ...

随机推荐

  1. C#联通新版验证码识别的实现

    以前写了篇 联通充值卡自动充值的实现,最近发现联通官网改版了,随便看了下发现新版的验证码和以前的不同,发了点时间研究了下他的识别码,它现在的验证码如下 现在将识别步骤说下 1,转换灰度图片 2,清除2 ...

  2. MySQL级联删除的问题

    一.FOREIGN KEY 的定义分为两种:列级约束和表级约束 .列及约束的话,可以在列定义的同时,定义外键约束.比如 如果有2张表,主表:T1(A1 )) 要在从表T2中定义外键列这可以: Crea ...

  3. vim 分屏功能

    分屏启动Vim 使用大写的O参数来垂直分屏. vim -On file1 file2 ... 使用小写的o参数来水平分屏. vim -on file1 file2 ... 注释: n是数字,表示分成几 ...

  4. winform里怎样在一个按钮上实现“单击”和“双击”事件?

    Button按钮是没有双击事件(DoubleClick)的. button1.DoubleClick+=new EventHandler(button1_DoubleClick);使用这种方法在双击的 ...

  5. springMVC 的工作原理和机制(转)

    工作原理上面的是springMVC的工作原理图: 1.客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web. ...

  6. TweenMax参数补充

    构造函数:TweenMax(target:Object, duration:Number, vars:Object) target:Object -- 需要缓动的对象 duration:Number ...

  7. java中new关键字和newInstance()方法有什么区别?

    1.new可以调用带参数的构造函数,newInstance不可以. 2.new 是 java 的关键字,用来构造一个类的实例.而 newInstance 是 Class 的一个方法,不过两个写法的效果 ...

  8. shell中命令之间数据的传递

    1.管道 "|" ls | cat -n > out.txt 2. 子shell 2.1 子shell 说明 在shell脚本中可以用()操作符可以定义一个子shell #/ ...

  9. WPF 2D 碰撞检测

        var intersectionDetail = path1.Data.FillContainsWithDetail(path2.Data); if (intersectionDetail ! ...

  10. 数据仓库原理<2>:数据仓库系统的体系结构

    1. 引言 本篇主要讲述数据仓库系统的体系结构与组成要素.数据集市与数据仓库之间的关系.元数据的定义与作用. 在上一篇,笔者介绍了数据仓库的定义: "数据仓库是一个面向主题的.集成的.不可更 ...