the5fire的技术博客

关注python、vim、linux、web开发和互联网--life is short, we need python.


通过java filter设置字符集编码

作者:the5fire | 标签:       | 发布:2010-12-07 12:22 a.m. | 阅读量: 4839, 4801
http://www.the5fire.com/wp-content/uploads/2010/12/filter.jpg

在编写添加用户功能时,添加到mysql数据库中的汉字都会变成问号,查了一下是编码的问题,后来看视频中讲了解决方案,使用filter的方式,filter的工作方式如下图所示。

如图中所示,Filter就是一个过滤的功能,每个页面和后台进行交互都要经过它,这样页面在访问后台的时候就可以通过filter过滤,然后以相应的编码同数据库交互。不过它不对http的get方法过滤,只过滤post方法。

具体实现CharsetFilter.java

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.apache.catalina.connector.Request;

public class CharsetEncodingFilter implements Filter {

    private String encoding;
    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }

    @Override
    public void doFilter(ServletRequest arg0, ServletResponse arg1,
            FilterChain arg2) throws IOException, ServletException {
        System.out.println("charsetEncodingFilter....begin");
        //设置字符集
        arg0.setCharacterEncoding(encoding);

        //继续执行
        arg2.doFilter(arg0, arg1);

        System.out.println("filter .....end");
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        this.encoding = arg0.getInitParameter("encoding");

    }


}

建立web.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
    <filter>
        <filter-name>CharsetEncodingFilter</filter-name>
        <filter-class>filter.CharsetEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>GB18030</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>CharsetEncodingFilter</filter-name>
        <url-pattern>*.jsp</url-pattern>
    </filter-mapping>
</web-app>

这样你的当你把表单提交到数据库之后就不会出现乱码了,并且关于编码的格式使用filter也可以很好的解决,这个解决方案有点像“注入”。不过filter中用到的设计模式是职责连模式,有空还需要好好学一下。


----EOF-----

扫码关注,或者搜索微信公众号:码农悟凡


其他分类: