使用过滤器来解决中文乱码

来源:互联网 发布:农村淘宝 大米 编辑:程序博客网 时间:2024/04/30 04:56

使用过滤器处理乱码

    以前的做法是在负责接受中文请求数据的每个页面编写用于处理中文乱码的代码。这样不利于代码重用。由于过滤器可在请求执行之前进行预处理,所以可把处理中文乱码的代码置于过滤器中。


该示例的编写步骤如下: 


(1) 创建一个过滤器,命名为 encodeFilter.java 。代码如下:


package filters;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 javax.servlet.UnavailableException;public class SetCharacterEncodingFilter implements Filter {  protected FilterConfig filterConfig;  protected String encodingName;           //你要设置的字符编码  protected boolean enable;                //定义boolean类型参数设置这个过滤器是不是必须的  public SetCharacterEncodingFilter() {    this.encodingName = "gb2312";    this.enable = false;  }  public void init(FilterConfig filterConfig) throws ServletException {    this.filterConfig = filterConfig;    loadConfigParams();  }    //读取配置文件定义的参数  private void loadConfigParams() {    this.encodingName = this.filterConfig.getInitParameter("encoding");    String strIgnoreFlag = this.filterConfig.getInitParameter("enable");    if (strIgnoreFlag.equalsIgnoreCase("true")) {      this.enable = true;    } else {      this.enable = false;    }  }  public void doFilter(ServletRequest request, ServletResponse response,                       FilterChain chain) throws IOException, ServletException {    if(this.enable) {      request.setCharacterEncoding(this.encodingName);    }    chain.doFilter(request, response);  }  public void destroy() {    this.filterConfig = null;  }}


(2) 在 web.xml 文件中配置该 Filter 。

 

<!-- SetCharacterEncodingFilter 配置开始-->   <filter>     <filter-name>SetCharacterEncodingFilter</filter-name>     <filter-class>filters.SetCharacterEncodingFilter</filter-class>     <init-param>       <param-name>encoding</param-name>       <param-value>gb2312</param-value>     </init-param>     <init-param>       <param-name>enable</param-name>       <param-value>true</param-value>     </init-param>   </filter>   <filter-mapping>      <filter-name>SetCharacterEncodingFilter</filter-name>      <url-pattern>/*</url-pattern>   </filter-mapping> <!-- SetCharacterEncodingFilter 配置结束-->





原创粉丝点击