
在编写添加用户功能时,添加到mysql数据库中的汉字都会变成问号,查了一下是编码的问题,后来看视频中讲了解决方案,使用filter的方式,filter的工作方式如下图所示。
如图中所示,Filter就是一个过滤的功能,每个页面和后台进行交互都要经过它,这样页面在访问后台的时候就可以通过filter过滤,然后以相应的编码同数据库交互。不过它不对http的get方法过滤,只过滤post方法。
具体实现CharsetFilter.java
.. code:: 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中用到的设计模式是职责连模式,有空还需要好好学一下。
- from the5fire.com
        ----EOF-----
        
微信公众号:Python程序员杂谈
微信公众号:Python程序员杂谈
