随笔-6  评论-38  文章-40  trackbacks-0
过滤类
  1/**
  2 *
  3 *
  4 * apache 出的 struts hibernate 字符编码处理过滤器
  5 *
  6 *
  7 */

  8package com.zeroidea.common;
  9/*
 10* Copyright 2004 The Apache Software Foundation
 11*
 12* Licensed under the Apache License, Version 2.0 (the "License");
 13* you may naot use this file except in compliance with the License.
 14* You may obtain a copy of the License at
 15*
 16*     http://www.apache.org/licenses/LICENSE-2.0
 17*
 18* Unless required by applicable law or agreed to in writing, software
 19* distributed under the License is distributed on an "AS IS" BASIS,
 20* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 21* See the License for the specific language governing permissions and
 22* limitations under the License.
 23*/

 24
 25import java.io.IOException;
 26
 27import javax.servlet.Filter;
 28import javax.servlet.FilterChain;
 29import javax.servlet.FilterConfig;
 30import javax.servlet.ServletException;
 31import javax.servlet.ServletRequest;
 32import javax.servlet.ServletResponse;
 33
 34
 35/**
 36 * <p>Example filter that sets the character encoding to be used in parsing the
 37 * incoming request, either unconditionally or only if the client did not
 38 * specify a character encoding.  Configuration of this filter is based on
 39 * the following initialization parameters:</p>
 40 * <ul>
 41 * <li><strong>encoding</strong> - The character encoding to be configured
 42 *     for this request, either conditionally or unconditionally based on
 43 *     the <code>ignore</code> initialization parameter.  This parameter
 44 *     is required, so there is no default.</li>
 45 * <li><strong>ignore</strong> - If set to "true", any character encoding
 46 *     specified by the client is ignored, and the value returned by the
 47 *     <code>selectEncoding()</code> method is set.  If set to "false,
 48 *     <code>selectEncoding()</code> is called <strong>only</strong> if the
 49 *     client has not already specified an encoding.  By default, this
 50 *     parameter is set to "true".</li>
 51 * </ul>
 52 *
 53 * <p>Although this filter can be used unchanged, it is also easy to
 54 * subclass it and make the <code>selectEncoding()</code> method more
 55 * intelligent about what encoding to choose, based on characteristics of
 56 * the incoming request (such as the values of the <code>Accept-Language</code>
 57 * and <code>User-Agent</code> headers, or a value stashed in the current
 58 * user's session.</p>
 59 *
 60 * @author Craig McClanahan
 61 * @version $Revision: 1.2 $ $Date: 2004/03/18 16:40:28 $
 62 */

 63
 64public class SetCharacterEncodingFilter implements Filter {
 65
 66
 67    // ----------------------------------------------------- Instance Variables
 68
 69
 70    /**
 71     * The default character encoding to set for requests that pass through
 72     * this filter.
 73     */

 74    protected String encoding = null;
 75
 76    /**
 77     * The filter configuration object we are associated with.  If this value
 78     * is null, this filter instance is not currently configured.
 79     * 
 80     * @uml.property name="filterConfig"
 81     * @uml.associationEnd multiplicity="(0 1)"
 82     */

 83    protected FilterConfig filterConfig = null;
 84
 85
 86
 87    /**
 88     * Should a character encoding specified by the client be ignored?
 89     */

 90    protected boolean ignore = true;
 91
 92
 93    // --------------------------------------------------------- Public Methods
 94
 95
 96    /**
 97     * Take this filter out of service.
 98     */

 99    public void destroy() {
100
101        this.encoding = null;
102        this.filterConfig = null;
103
104    }

105
106
107    /**
108     * Select and set (if specified) the character encoding to be used to
109     * interpret request parameters for this request.
110     *
111     * @param request The servlet request we are processing
112     * @param result The servlet response we are creating
113     * @param chain The filter chain we are processing
114     *
115     * @exception IOException if an input/output error occurs
116     * @exception ServletException if a servlet error occurs
117     */

118    public void doFilter(ServletRequest request, ServletResponse response,
119                         FilterChain chain)
120    throws IOException, ServletException {
121
122        // Conditionally select and set the character encoding to be used
123        if (ignore || (request.getCharacterEncoding() == null)) {
124            String encoding = selectEncoding(request);
125            if (encoding != null)
126                request.setCharacterEncoding(encoding);
127        }

128
129    // Pass control on to the next filter
130        chain.doFilter(request, response);
131
132    }

133
134    /**
135     * Place this filter into service.
136     * 
137     * @param filterConfig The filter configuration object
138     * 
139     * @uml.property name="filterConfig"
140     */

141    public void init(FilterConfig filterConfig) throws ServletException {
142
143        this.filterConfig = filterConfig;
144        this.encoding = filterConfig.getInitParameter("encoding");
145        String value = filterConfig.getInitParameter("ignore");
146        if (value == null)
147            this.ignore = true;
148        else if (value.equalsIgnoreCase("true"))
149            this.ignore = true;
150        else if (value.equalsIgnoreCase("yes"))
151            this.ignore = true;
152        else
153            this.ignore = false;
154
155    }

156
157    // ------------------------------------------------------ Protected Methods
158
159
160    /**
161     * Select an appropriate character encoding to be used, based on the
162     * characteristics of the current request and/or filter initialization
163     * parameters.  If no character encoding should be set, return
164     * <code>null</code>.
165     * <p>
166     * The default implementation unconditionally returns the value configured
167     * by the <strong>encoding</strong> initialization parameter for this
168     * filter.
169     *
170     * @param request The servlet request we are processing
171     */

172    protected String selectEncoding(ServletRequest request) {
173
174        return (this.encoding);
175
176    }

177
178
179}

180

web.xml 中的设置
 1 <!-- 编码转换过滤器  -->
 2 <filter>
 3  <filter-name>Encoding</filter-name>
 4  <filter-class>com.zeroidea.common.SetCharacterEncodingFilter</filter-class>
 5  <init-param>
 6   <param-name>encoding</param-name>
 7   <param-value>GBK</param-value>
 8  </init-param>
 9 </filter>
10 
11 <!-- 映射过滤器-->
12 <filter-mapping>
13  <filter-name>Encoding</filter-name>
14  <url-pattern>*.jsp</url-pattern>
15 </filter-mapping>
16 <filter-mapping>
17  <filter-name>Encoding</filter-name>
18  <url-pattern>*.do</url-pattern>
19 </filter-mapping>

posted on 2006-11-30 16:32 一手的小窝窝 阅读(1882) 评论(1)  编辑  收藏 所属分类: JAVA

评论:
# re: STRUTS 字符编码处理过滤器[未登录] 2007-12-03 17:03 | shawn
谢谢

找了很多都有问题
  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: