〔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>
|