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. 【项目经验】 Html Select 遇上 Easyui

    一.背景: 当我在做课表选择触发事件的时候,我发现了一个问题,就是我们直接用的easyui-combobox里面的的绑定事件(onchange)貌似触发不了,这是为什么呢? 二.结论及方法 .原始方法 ...

  2. 【maven】 在 MyEcplise上使用maven搭建Web项目

    二.在My Ecplise上使用Maven搭建Web项目 1.新建一个maven项目   2.create一个简单的骨架 3.就像在ecplise中一样设置项目的以下配置   4.新创建的项目结构如下 ...

  3. android应用程序如何调用支付宝接口

    最近在做一个关于购物商城的项目,项目里面付款这块我选的是调用支付宝的接口,因为用的人比较多. 在网上搜索了以下,有很多这方面的教程,但大部分教程过于陈旧,而且描述的过于简单.而且支付宝提供的接口一直在 ...

  4. 时间模块。。time

  5. [BZOJ 2957]楼房重建(THU2013集训)(分块思想)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2957 分析: 首先明确问题,对于每栋楼房的斜率K=H/X,问题就是问有多少个楼房的K比前面所有 ...

  6. js整理1

    数组 比较时的隐式转化 var a = [1,2,3]; var b = [1,2,3]; a == b; //false a == '1,2,3'; //true; // var c = []; B ...

  7. 02 CSS/javaScript

    CSS(Cascading Style Sheets)是层叠样式表用来设置网页的显示效果.可以解决html代码对样式定义的重复,提高了后期样式代码的可维护性,并增强了网页的显示效果功能.简单一句话:C ...

  8. [bzoj4424]Fairy

    很久之前想写这题.结果还是把握不住CF的E,太神了啊....... 首先考虑的是二分图的性质,这个so easy,图中不存在奇数环. 然后分三种情况考虑: 1.只有一个奇数环,随便删除哪条 2.多个奇 ...

  9. Codeforces Round #347 (Div. 2)

    unrating的一场CF A - Complicated GCD #include <bits/stdc++.h> const int N = 1e5 + 5; char a[105], ...

  10. uva10106(大数乘法)

    public class Product { public static void main(String[] args){ Scanner sc = new Scanner(new Buffered ...