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