Khan's Notebook GCC/GNU/Linux Delphi/Window Java/Anywhere

路漫漫,长修远,我们不能没有钱

java servlet 的字符filter (转载至chinajavaworld.com)

配置字符过滤器,就不用每个中文都转换,filter会自动将符合条件的编码进行自动转换了.呵呵. 一劳永逸

 package filters;
/*
* XP Forum
*
* Copyright (c) 2002-2003 RedSoft Group. All rights reserved.
*
*/

import javax.servlet.
*;
import java.io.IOException;

/**
* <p>Filter that sets the character encoding to be used in parsing the
* incoming request, either unconditionally or only if the client did not
* specify a character encoding. Configuration of this filter is based on
* the following initialization parameters:</p>
* <ul>
* <li><strong>encoding</strong> - The character encoding to be configured
* for this request, either conditionally or unconditionally based on
* the <code>ignore</code> initialization parameter. This parameter
* is required, so there is no default.</li>
* <li><strong>ignore</strong> - If set to "true", any character encoding
* specified by the client is ignored, and the value returned by the
* <code>selectEncoding()</code> method is set. If set to "false,
* <code>selectEncoding()</code> is called <strong>only</strong> if the
* client has not already specified an encoding. By default, this
* parameter is set to "true".</li>
* </ul>
*
* <p>Although this filter can be used unchanged, it is also easy to
* subclass it and make the <code>selectEncoding()</code> method more
* intelligent about what encoding to choose, based on characteristics of
* the incoming request (such as the values of the <code>Accept-Language</code>
* and <code>User-Agent</code> headers, or a value stashed in the current
* user's session.</p>
*
* @author <a href="mailto:jwtronics@yahoo.com">John Wong</a>
*
* @version $Id: SetCharacterEncodingFilter.java,v 1.1 2002/04/10 13:59:27 johnwong Exp $
*/
public class SetCharacterEncodingFilter
   implements Filter {

// ----------------------------------------------------- Instance Variables

 
/**
  * The default character encoding to set for requests that pass through
  * this filter.
  
*/
 protected String encoding 
= null;

 
/**
  * The filter configuration object we are associated with. If this value
  * is null, this filter instance is not currently configured.
  
*/
 protected FilterConfig filterConfig 
= null;

 
/**
  * Should a character encoding specified by the client be ignored?
  
*/
 protected 
boolean ignore = true;

// --------------------------------------------------------- Public Methods

 
/**
  * Take this filter out of service.
  
*/
 public 
void destroy() {

   
this.encoding = null;
   
this.filterConfig = null;

 }

 
/**
  * Select and set (if specified) the character encoding to be used to
  * interpret request parameters for this request.
  *
  * @param request The servlet request we are processing
  * @param result The servlet response we are creating
  * @param chain The filter chain we are processing
  *
  * @exception IOException if an input/output error occurs
  * @exception ServletException if a servlet error occurs
  
*/
 public 
void doFilter(ServletRequest request, ServletResponse response,
                      FilterChain chain) throws IOException, ServletException {

// Conditionally select and set the character encoding to be used
   if (ignore || (request.getCharacterEncoding() == null)) {
     String encoding 
= selectEncoding(request);
     
if (encoding != null) {
       request.setCharacterEncoding(encoding);
     }
   }

// Pass control on to the next filter
   chain.doFilter(request, response);

 }

 
/**
  * Place this filter into service.
  *
  * @param filterConfig The filter configuration object
  
*/
 public 
void init(FilterConfig filterConfig) throws ServletException {

   
this.filterConfig = filterConfig;
   
this.encoding = filterConfig.getInitParameter("encoding");
   String value 
= filterConfig.getInitParameter("ignore");
   
if (value == null) {
     
this.ignore = true;
   }
   
else if (value.equalsIgnoreCase("true")) {
     
this.ignore = true;
   }
   
else if (value.equalsIgnoreCase("yes")) {
     
this.ignore = true;
   }
   
else {
     
this.ignore = false;
   }

 }

// ------------------------------------------------------ Protected Methods

 
/**
  * Select an appropriate character encoding to be used, based on the
  * characteristics of the current request and/or filter initialization
  * parameters. If no character encoding should be set, return
  * <code>null</code>.
  * <p>
  * The default implementation unconditionally returns the value configured
  * by the <strong>encoding</strong> initialization parameter for this
  * filter.
  *
  * @param request The servlet request we are processing
  
*/
 protected String selectEncoding(ServletRequest request) {

   
return (this.encoding);

 }

//EOC


web.xml 中的配置:

 <filter>
   
<filter-name>Set Character Encoding</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>ignore</param-name>
     
<param-value>true</param-value>
   
</init-param>
 
</filter> 

 
<filter-mapping>
   
<filter-name>Set Character Encoding</filter-name>
   
<servlet-name>action</servlet-name>
 
</filter-mapping> 

 
<servlet>
   
<servlet-name>action</servlet-name>
   
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
.... 

测试通过.


他的过滤器我试了有问题,这样就没有问题了
<filter>
   
<filter-name>EncodingFilter</filter-name>
   
<display-name>EncodingFilter</display-name>
   
<description>no description</description>
   
<filter-class>com.zhaoqi.util.EncodingFilter</filter-class>
   
<init-param>
     
<param-name>encoding</param-name>
     
<param-value>GB2312</param-value>
   
</init-param>
 
</filter>
 
<filter-mapping>
   
<filter-name>EncodingFilter</filter-name>
   
<url-pattern>/*</url-pattern>
 
</filter-mapping>


看 看下面这短代码,由于struts的每个请求都要由actionservlet处理,所以我自己写了一个actionservlet的子类,在这个类中我 调用request.setCharacterEncoding("GB2312");方法,然后在所有的jsp页面中的字符显示为GB2312,所有的 问题都解决了,哈哈。大家试试啊
 
import org.apache.struts.action.ActionServlet;
import javax.servlet.http.
*;
public class MainActionServlet extends ActionServlet{
 public MainActionServlet() {
 }
 protected 
void process(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException {
   
/**@todo Override this org.apache.struts.action.ActionServlet method*/
   request.setCharacterEncoding(
"GB2312");
   super.process(request, response);
 }

posted on 2004-10-22 21:52 Khan 阅读(508) 评论(0)  编辑 收藏 引用 所属分类: 跨平台开发Java


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2004年10月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

导航

统计

常用链接

留言簿(33)

随笔分类(225)

随笔档案(169)

相册

技术

友情链接

最新随笔

搜索

积分与排名

最新随笔

最新评论

阅读排行榜

评论排行榜