您的位置:首页 > 编程语言 > Java开发

看了网友Roy的评论,研究了一下用filter来解决Struts中文乱码的问题!

2008-03-11 17:10 441 查看
.CodeFormat {font-family:"Courier New", Courier, mono; font-size:10pt; }Roy 网友指出,用Filter处理Struts中文乱码才是王道,原文请参考这里:

Struts Hack!解决中文参数在Form Bean中的乱码问题!

filter的用法,的确是比较有扩展性的一种方法...可以通过filter结合读取web.xml中的filter参数来完成一系列的动作,做法如下:

首先,实现javax.servlet.Filter接口,编写一个处理request编码的过滤器类...

package tutorial.struts.filter;

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

import javax.servlet.ServletResponse;
import javax.servlet.FilterChain;
import java.io.IOException;

public class SetCharacterEncodingFilter implements Filter {

  protected FilterConfig filterConfig;
  protected String encodingName;
  protected boolean enable;

  public SetCharacterEncodingFilter() {
    this.encodingName = "UTF-8";
    this.enable = false;
  }

  public void init(FilterConfig filterConfig) throws ServletException {
    this.filterConfig = filterConfig;
    loadConfigParams();
  }

  private void loadConfigParams() {
    //encoding     
    this.encodingName = this.filterConfig.getInitParameter("encoding");
    //filter enable flag
    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() {
  }
		
}
然后,需要在web.xml中注册我们的过滤器类:


   Set Character Encoding
   tutorial.struts.filter.SetCharacterEncodingFilter
   
     encoding
     UTF-8
   
   
     enable
     true
   
 
 
   Set Character Encoding
   Action Servlet
 
 
   Set Character Encoding
   Faces Servlet
 
这样,任何通过Struts,或是JSF的Controller Servlet处理的request,都会在过滤器中先行处理,才把控制权交还给Struts或是JSF,而且Filter中有一个Process Chain的概念,是一个很吸引人的东东~~!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: