import javax.servlet.*; import java.io.IOException; publicclass SetCharacterEncodingFilter implements Filter ...{ /** *//** * The default character encoding to set for requests that pass through * this filter. */ protected String encoding =null; /** *//** * The filter configuration object we are associated with. If this value * is null, this filter instance is not currently configured. */ protected FilterConfig filterConfig =null; /** *//** * Should a character encoding specified by the client be ignored? */ protectedboolean ignore =true; // --------------------------------------------------------- Public Methods /** *//** * Take this filter out of service. */ publicvoid destroy() ...{ this.encoding =null; this.filterConfig =null; } /** *//** * Select and set (if specified) the character encoding to be used to * interpret request parameters for this request. * * @param request The servlet request we are processing * @param result The servlet response we are creating * @param chain The filter chain we are processing * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet error occurs */ publicvoid doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException ...{ // Conditionally select and set the character encoding to be used if (ignore || (request.getCharacterEncoding() ==null)) ...{ String encoding = selectEncoding(request); if (encoding !=null) request.setCharacterEncoding(encoding); } // Pass control on to the next filter chain.doFilter(request, response); } /** *//** * Place this filter into service. * * @param filterConfig The filter configuration object */ publicvoid init(FilterConfig filterConfig) throws ServletException ...{ this.filterConfig = filterConfig; this.encoding = filterConfig.getInitParameter("encoding"); String value = filterConfig.getInitParameter("ignore"); if (value ==null) this.ignore =true; elseif (value.equalsIgnoreCase("true")) this.ignore =true; elseif (value.equalsIgnoreCase("yes")) this.ignore =true; else this.ignore =false; } // ------------------------------------------------------ Protected Methods /** *//** * Select an appropriate character encoding to be used, based on the * characteristics of the current request and/or filter initialization * parameters. If no character encoding should be set, return * <code>null</code>. * <p> * The default implementation unconditionally returns the value configured * by the <strong>encoding</strong> initialization parameter for this * filter. * * @param request The servlet request we are processing */ protected String selectEncoding(ServletRequest request) ...{ return (this.encoding); } }
WEB.XML配置
<filter> <filter-name>Set Character Encoding</filter-name> <filter-class>com.yourcompany.struts.SetCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>gb2312</param-value> </init-param> <init-param> <param-name>ignore</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>Set Character Encoding</filter-name> <servlet-name>action</servlet-name> </filter-mapping>
Server.xml配置
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 --> <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK" useBodyEncodingForURI="true" />
import javax.servlet.*;import java.io.IOException;public class SetCharacterEncodingFilter implements Filter ...{ /** *//** * The default character encoding to set for requests that pass through * th