〔characterencodinghttpservletrequestwrapper.java〕
package creator.common.filter;
import javax.servlet.http.*;
public class characterencodinghttpservletrequestwrapper extends httpservletrequestwrapper {
private string ecoding = null;
private string oldencoding = null;
public characterencodinghttpservletrequestwrapper(httpservletrequest request,string encoding) {
super(request);
this.ecoding = encoding;
this.oldencoding = request.getcharacterencoding();
}
public string getparameter(string value) {
try{
if((oldencoding == null || isios88591(oldencoding)) && super.getparameter(value)!=null){
return new string(super.getparameter(value).getbytes("iso-8859-1"),ecoding);
}
else{
return super.getparameter(value);
}
}
catch(exception e){
e.printstacktrace();
return null;
}
}
private boolean isios88591(string endcoding){
endcoding = endcoding.tolowercase();
return endcoding.startswith("iso")&& (endcoding.indexof("8859") != -1) && endcoding.endswith("1");
}
}
〔characterencodinghttpservletresponsewrapper.java〕
package creator.common.filter;
import javax.servlet.http.*;
public class characterencodinghttpservletresponsewrapper extends httpservletresponsewrapper {
private string ecoding = null;
public characterencodinghttpservletresponsewrapper(httpservletresponse response,string encoding) {
super(response);
this.ecoding = encoding;
}
/* (non-javadoc)
* @see javax.servlet.servletresponse#setcontenttype(java.lang.string)
*/
public void setcontenttype(string value) {
super.setcontenttype("text/html;charset="+ecoding);
}
}
〔charsetencodingfilter.java〕
package creator.common.filter;
import java.io.ioexception;
import javax.servlet.*;
import javax.servlet.http.*;
public class charsetencodingfilter implements filter {
private filterconfig config = null;
private string requestencoding = null;
private string responseencoding = null;
public void init(filterconfig arg0) throws servletexception {
this.config = arg0;
this.requestencoding = config.getinitparameter("requestencoding");
this.responseencoding = config.getinitparameter("responseencoding");
}
/* (non-javadoc)
* @see javax.servlet.filter#dofilter(javax.servlet.servletrequest, javax.servlet.servletresponse, javax.servlet.filterchain)
*/
public void dofilter(servletrequest req, servletresponse res, filterchain fc)
throws ioexception, servletexception {
if(this.config == null){
return;
}
httpservletrequest request = (httpservletrequest)req;
httpservletresponse response = (httpservletresponse)res;
characterencodinghttpservletrequestwrapper mrequestw = new characterencodinghttpservletrequestwrapper(request,responseencoding);
characterencodinghttpservletresponsewrapper wresponsew = new characterencodinghttpservletresponsewrapper(response,responseencoding);
fc.dofilter(mrequestw,wresponsew);
}
public void destroy() {
}
}
〔web.xml〕
<filter>
<filter-name>charsetencoding</filter-name>
<filter-class>javabean.com.charsetencodingfilter</filter-class>
<init-param>
<param-name>requestencoding</param-name>
<param-value>iso-8859-1</param-value>
</init-param>
<init-param>
<param-name>responseencoding</param-name>
<param-value>gb2312</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>charsetencoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
