使用我写的这个Class,然后再Tomcat里配置一下,比在自己的Webapp里配置的过滤器还要方便,高效。 一行配置就搞定:
  server.xml里增加下面的配置: <Valve className="org.apache.catalina.valves.CharSetValve" encoding="GBK"/> 可以放到Engine, Host, 或者 Context 元素中:
  例如: <Context docBase="d:\lizongbo\mywebapp" path="/lizongbo"          privileged="true" antiResourceLocking="false" antiJARLocking="false"> <Valve className="org.apache.catalina.valves.CharSetValve" encoding="GBK"/> </Context>
  当然这个class不存在的,于是,下面是java代码, 把编译好的class放到 D:\jakarta-tomcat-5.5.7 \server\classes\org\apache\catalina\valves\下,就可以了。
  java 代码:
  package org.apache.catalina.valves; 
import java.io.*; import javax.servlet.*; 
import org.apache.catalina.*; import org.apache.catalina.connector.*; import org.apache.catalina.util.*; 
/**  * <p>Title: CharSetValve </p>  * <p>Description: a CharSet Filter for Tomcat Application</p>  * <p>Copyright: Apache License Version 2.0  </p>  * <p>Company: lizongbo</p>  * @author lizongbo @ gmail.com  * @version 1.0  */ public class CharSetValve     extends ValveBase implements Lifecycle {   public CharSetValve() {     super();   } 
  protected LifecycleSupport lifecycle = new LifecycleSupport(this); 
  private StringManager sm =       StringManager.getManager(Constants.Package); 
  private boolean started = false;   private String encoding = System.setProperty("file.encoding", "GBK"); 
  public String getEncoding() {     return encoding;   } 
  public void setEncoding(String encoding) {     this.encoding = encoding;   } 
  public void invoke(Request request, Response response) throws IOException,       ServletException {     request.getRequest().setCharacterEncoding(getEncoding());     getNext().invoke(request, response); 
  } 
  public void addLifecycleListener(LifecycleListener listener) {     lifecycle.addLifecycleListener(listener);   } 
  public LifecycleListener[] findLifecycleListeners() {     return lifecycle.findLifecycleListeners(); 
  } 
  public void removeLifecycleListener(LifecycleListener listener) { 
    lifecycle.removeLifecycleListener(listener); 
  } 
  public void start() throws LifecycleException { 
    if (started) {       throw new LifecycleException           (sm.getString("accessLogValve.alreadyStarted"));     } 
  } 
  public void stop() throws LifecycleException {     if (!started) {       throw new LifecycleException           (sm.getString("accessLogValve.notStarted"));     }     lifecycle.fireLifecycleEvent(STOP_EVENT, null);     started = false; 
  } }
 
 
  详情请参考: http://issues.apache.org/bugzilla/show_bug.cgi?id=32795 http://jakarta.apache.org/tomcat/tomcat-5.5-doc/config/valve.html
  对了,Tomcat的示例里: D:\jakarta-tomcat-5.5.7\webapps\servlets-examples\WEB-INF\web.xml
  里被日本人强制指定默认值为日文编码了,FT!!!!!!!!!!!!!!!!!!!!!!!!!!!
  <filter> <filter-name>Set Character Encoding</filter-name> <filter-class>filters.SetCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>EUC_JP</param-value> </init-param> </filter> 
   
 
  |