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

关于在struts 框架中使用Filter过滤器解决汉字编码问题

2005-01-27 14:23 906 查看
很简单的一个问题,只要两个步骤就可以了。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

1.在web.xml最开始的地方加上对filter过滤器的声明,指明过滤器使用的类<filter-class>,要使用的编码<param-value>,以及过滤器的适用范围

<url-pattern>:

 

       <filter>

              <filter-name>setEncoding</filter-name>

              <filter-class>

       进行过滤器处理的类             com.yourcompany.struts.FilterEncoding

              </filter-class>

              <init-param>

                     <param-name>encoding</param-name>

       指定使用的编码   <param-value>GBK</param-value>

              </init-param>

       </filter>

       <filter-mapping>

              <filter-name>setEncoding</filter-name>

       有效路径 <url-pattern>/*</url-pattern>

</filter-mapping>

 

注意,与servlet的声明一样,两个地方的<filter-name>的值是一样的。

 

 

2.过滤器类FilterEncoding的书写:

注意事项:实现javax.servlet.Filter接口,重写其中的3个方法:(init(FilterConfig filterConfig),doFilter(ServletRequest request, ServletResponse response, FilterChain chain),destroy())

       主要是从web.xml中取得要使用的编码,然后给request设置成取得的编码类型。示例代码如下:

       package com.yourcompany.struts;

 

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;

 

/**

 * @author n-liang

 *

 * TODO To change the template for this generated type comment go to

 * Window - Preferences - Java - Code Style - Code Templates

 */

public class FilterEncoding implements Filter {

       private FilterConfig filterConfig=null;

       private String encoding=null;

 

       /* (non-Javadoc)

        * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)

        */

       public void init(FilterConfig filterConfig) throws ServletException {

              this.filterConfig=filterConfig;

              this.encoding=filterConfig.getInitParameter("encoding");

       }

 

       /* (non-Javadoc)

        * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)

        */

       public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

              String encoding=this.encoding;

              if(encoding!=null)

              {

              request.setCharacterEncoding(encoding);  

              }

              chain.doFilter(request, response);

       }

 

       /* (non-Javadoc)

        * @see javax.servlet.Filter#destroy()

        */

       public void destroy() {

              this.encoding=null;

              this.filterConfig=null;

             

       }

  

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐