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


??2

??3

??4

??5

??6

??7

??8

??9


?10

?11

?12

?13

?14

?15

?16

?17

?18

?19

?20

?21

?22

?23

?24

?25

?26

?27

?28

?29

?30

?31

?32

?33

?34

?35


?36

?37

?38

?39

?40

?41

?42

?43

?44

?45

?46

?47

?48

?49

?50

?51

?52

?53

?54

?55

?56

?57

?58

?59

?60

?61

?62

?63

?64



?65

?66

?67

?68

?69

?70


?71

?72

?73

?74

?75

?76


?77

?78

?79

?80

?81

?82

?83

?84

?85

?86

?87


?88

?89

?90

?91

?92

?93

?94

?95

?96


?97

?98

?99



100

101

102

103

104

105

106

107


108

109

110

111

112

113

114

115

116

117

118

119

120



121

122

123



124

125

126

127

128

129

130

131

132

133

134


135

136

137

138

139

140

141



142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160


161

162

163

164

165

166

167

168

169

170

171

172



173

174

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>

?2

?3

?4

?5

?6

?7

?8

?9

10

11

12

13

14

15

16

17

18

19
