SetCharacterEncodingFilter.java
上传用户:bj_pst
上传日期:2019-07-07
资源大小:7353k
文件大小:6k
源码类别:

Java编程

开发平台:

Java

  1. /*
  2. * Licensed to the Apache Software Foundation (ASF) under one or more
  3. * contributor license agreements.  See the NOTICE file distributed with
  4. * this work for additional information regarding copyright ownership.
  5. * The ASF licenses this file to You under the Apache License, Version 2.0
  6. * (the "License"); you may not use this file except in compliance with
  7. * the License.  You may obtain a copy of the License at
  8. *
  9. *     http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. */
  17. package filters;
  18. import java.io.IOException;
  19. import javax.servlet.Filter;
  20. import javax.servlet.FilterChain;
  21. import javax.servlet.FilterConfig;
  22. import javax.servlet.ServletException;
  23. import javax.servlet.ServletRequest;
  24. import javax.servlet.ServletResponse;
  25. import javax.servlet.UnavailableException;
  26. /**
  27.  * <p>Example filter that sets the character encoding to be used in parsing the
  28.  * incoming request, either unconditionally or only if the client did not
  29.  * specify a character encoding.  Configuration of this filter is based on
  30.  * the following initialization parameters:</p>
  31.  * <ul>
  32.  * <li><strong>encoding</strong> - The character encoding to be configured
  33.  *     for this request, either conditionally or unconditionally based on
  34.  *     the <code>ignore</code> initialization parameter.  This parameter
  35.  *     is required, so there is no default.</li>
  36.  * <li><strong>ignore</strong> - If set to "true", any character encoding
  37.  *     specified by the client is ignored, and the value returned by the
  38.  *     <code>selectEncoding()</code> method is set.  If set to "false,
  39.  *     <code>selectEncoding()</code> is called <strong>only</strong> if the
  40.  *     client has not already specified an encoding.  By default, this
  41.  *     parameter is set to "true".</li>
  42.  * </ul>
  43.  *
  44.  * <p>Although this filter can be used unchanged, it is also easy to
  45.  * subclass it and make the <code>selectEncoding()</code> method more
  46.  * intelligent about what encoding to choose, based on characteristics of
  47.  * the incoming request (such as the values of the <code>Accept-Language</code>
  48.  * and <code>User-Agent</code> headers, or a value stashed in the current
  49.  * user's session.</p>
  50.  *
  51.  * @author Craig McClanahan
  52.  * @version $Revision: 466607 $ $Date: 2006-10-21 17:09:50 -0600 (Sat, 21 Oct 2006) $
  53.  */
  54. public class SetCharacterEncodingFilter implements Filter {
  55.     // ----------------------------------------------------- Instance Variables
  56.     /**
  57.      * The default character encoding to set for requests that pass through
  58.      * this filter.
  59.      */
  60.     protected String encoding = null;
  61.     /**
  62.      * The filter configuration object we are associated with.  If this value
  63.      * is null, this filter instance is not currently configured.
  64.      */
  65.     protected FilterConfig filterConfig = null;
  66.     /**
  67.      * Should a character encoding specified by the client be ignored?
  68.      */
  69.     protected boolean ignore = true;
  70.     // --------------------------------------------------------- Public Methods
  71.     /**
  72.      * Take this filter out of service.
  73.      */
  74.     public void destroy() {
  75.         this.encoding = null;
  76.         this.filterConfig = null;
  77.     }
  78.     /**
  79.      * Select and set (if specified) the character encoding to be used to
  80.      * interpret request parameters for this request.
  81.      *
  82.      * @param request The servlet request we are processing
  83.      * @param result The servlet response we are creating
  84.      * @param chain The filter chain we are processing
  85.      *
  86.      * @exception IOException if an input/output error occurs
  87.      * @exception ServletException if a servlet error occurs
  88.      */
  89.     public void doFilter(ServletRequest request, ServletResponse response,
  90.                          FilterChain chain)
  91. throws IOException, ServletException {
  92.         // Conditionally select and set the character encoding to be used
  93.         if (ignore || (request.getCharacterEncoding() == null)) {
  94.             String encoding = selectEncoding(request);
  95.             if (encoding != null)
  96.                 request.setCharacterEncoding(encoding);
  97.         }
  98. // Pass control on to the next filter
  99.         chain.doFilter(request, response);
  100.     }
  101.     /**
  102.      * Place this filter into service.
  103.      *
  104.      * @param filterConfig The filter configuration object
  105.      */
  106.     public void init(FilterConfig filterConfig) throws ServletException {
  107. this.filterConfig = filterConfig;
  108.         this.encoding = filterConfig.getInitParameter("encoding");
  109.         String value = filterConfig.getInitParameter("ignore");
  110.         if (value == null)
  111.             this.ignore = true;
  112.         else if (value.equalsIgnoreCase("true"))
  113.             this.ignore = true;
  114.         else if (value.equalsIgnoreCase("yes"))
  115.             this.ignore = true;
  116.         else
  117.             this.ignore = false;
  118.     }
  119.     // ------------------------------------------------------ Protected Methods
  120.     /**
  121.      * Select an appropriate character encoding to be used, based on the
  122.      * characteristics of the current request and/or filter initialization
  123.      * parameters.  If no character encoding should be set, return
  124.      * <code>null</code>.
  125.      * <p>
  126.      * The default implementation unconditionally returns the value configured
  127.      * by the <strong>encoding</strong> initialization parameter for this
  128.      * filter.
  129.      *
  130.      * @param request The servlet request we are processing
  131.      */
  132.     protected String selectEncoding(ServletRequest request) {
  133.         return (this.encoding);
  134.     }
  135. }