类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:










页面导航:
正文内容:使用我写的这个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>