过滤类
1
/** *//**
2
*
3
*
4
* apache 出的 struts hibernate 字符编码处理过滤器
5
*
6
*
7
*/
8
package 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
25
import java.io.IOException;
26
27
import javax.servlet.Filter;
28
import javax.servlet.FilterChain;
29
import javax.servlet.FilterConfig;
30
import javax.servlet.ServletException;
31
import javax.servlet.ServletRequest;
32
import 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
64
public 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
一手的小窝窝 阅读(1907)
评论(1) 编辑 收藏 所属分类:
JAVA