|
该用户从未签到
|
package cn.onecool.filter;1 n* U2 @# U% s% o
; D5 {2 W6 c# W$ Dimport java.io.IOException;
7 e* w/ r& ~' W. A* timport java.util.Map;% h7 J6 y; y& @" h
4 O2 w% j" K1 F, o3 j1 v8 v
import javax.servlet.Filter;
0 c, e( s3 Q% c1 d% P. Zimport javax.servlet.FilterChain;
# r" G$ ?: F+ O" x2 ]1 Y& y' oimport javax.servlet.FilterConfig;
( a- W6 U$ o/ e" B2 zimport javax.servlet.ServletContext;! l! y) R- s! ~0 H( Y3 V
import javax.servlet.ServletException;
: V+ b) Q- U5 [* h6 dimport javax.servlet.ServletRequest;# b+ U- Q; f n
import javax.servlet.ServletResponse;" z$ }" {6 ~: n
import javax.servlet.http.HttpServletRequest;) ]! l9 L% x2 T. I
import javax.servlet.http.HttpServletRequestWrapper;
, W" O! j- L7 I( j
& e7 z1 D* s( a' Upublic class EncodingFilte implements Filter {8 \; E6 ?6 R1 U* v
private FilterConfig config = null;! s" Q" U- q4 }# ]# N9 v, u
private ServletContext context = null;% w$ `5 t, [4 G" t) e& n6 _
private String encode = null;; S+ E8 U5 @8 R1 o" C
( S7 Z3 Y' _, O7 u, p
public void init(FilterConfig filterConfig) throws ServletException {" n4 r; ]( [* W, z3 s, n
this.config = filterConfig;
- b4 Q4 G% H, Y$ H0 K; `/ z this.context = filterConfig.getServletContext();' `+ y% m% E. d+ H
this.encode = context.getInitParameter("encoding")==null? "utf-8" : context.getInitParameter("encoding");" |$ m2 e' [" z& e7 ]& w5 H4 B6 Q
}
& c3 m# u! U9 E, {
' |% P, M j& ^+ T; z public void doFilter(ServletRequest request, ServletResponse response,
6 l1 I5 T. [0 ?& f+ ? FilterChain chain) throws IOException, ServletException {
- |3 ~& T9 R; x7 O5 r* h, l- B8 w/ g! \' P* R
// --响应乱码解决; y* X4 ?+ l# ~6 J6 M% G. B
response.setCharacterEncoding(encode);
) C; F7 |. y- D( l; V, F5 C response.setContentType("text/html;charset=" + encode);4 x- t4 a3 r* W. a
// --利用装饰设计模式改变request对象和获取请求参数相关的方法,从而解决请求参数乱码问题
& w* T: A) _/ Q3 S7 {4 ^" A) E chain.doFilter(new MyHttpServletRequest((HttpServletRequest) request),. ^3 W5 P0 ~; M& j( Z* D6 Y
response);0 A! W8 T0 m8 u% `
}
2 Q" Y) z! B V
0 ]- v; s# m% u, Z) K: X public void destroy() {4 Y/ M8 s+ C4 o$ `, g- L
: ]' \) i6 U* F5 Q }7 b9 O1 d" [7 B( M% k( a
: D0 T A' S8 f4 _; U' H private class MyHttpServletRequest extends HttpServletRequestWrapper {
3 J1 \9 ~' c) `# v' ?: d( d0 T private HttpServletRequest request = null;1 Q9 A& y4 k u7 \5 W
private boolean isNotEncode = true;& f" W; J T1 g/ C
4 Y# z: w( a6 [- f: e. u3 t
public MyHttpServletRequest(HttpServletRequest request) {
5 z: B$ {0 Y0 ] L! X super(request);
/ `$ X7 S- \. `& t" r this.request = request;
! |. @( z* a# J& S }, j- `7 T4 L* Z
; l) J' y) c, I- a5 t
@Override
7 Q. B" S+ B. }7 f* ] public Map<String, String[]> getParameterMap() {
; h! \; |' H% k4 N O try {7 [& R. |$ e+ u p {
if (request.getMethod().equalsIgnoreCase("POST")) {1 f7 e$ \+ o2 q" O" V
request.setCharacterEncoding(encode);! N0 K+ S L7 Z2 _
return request.getParameterMap();
1 h% S8 K7 E% o5 q } else if (request.getMethod().equalsIgnoreCase("GET")) {
8 O8 P5 {4 Z2 j9 w: h1 s' ]0 f Map<String, String[]> map = request.getParameterMap();
! u& t w9 n7 [+ b2 H# z: R) O. w if (isNotEncode) { ?* n9 Q/ _- ~; B
for (Map.Entry<String, String[]> entry : map.entrySet()) {
+ [4 _7 A5 A$ i5 N0 m) M String[] vs = entry.getValue();* v( k, ?: \+ F$ [ Z* S" `1 t
for (int i = 0; i < vs.length; i++) {
8 a7 b9 d, @* a' o5 | vs[i] = new String(vs[i].getBytes("iso8859-1"),
# }: w2 L1 ?/ v' [/ J; X encode);
5 C' M9 H3 ^# m4 j8 C. ~" |; w }8 D4 }5 ~3 Y& o
}4 H3 d$ n6 ~. k+ g( k
isNotEncode = false;
8 P& z. S4 }1 _" l4 h( }! s$ W* P0 g }9 R, j9 m6 s* k# k, V8 S8 k5 z! _6 Z- H
return map;
# h6 O% v, W1 c* H& k$ U! d2 R } else {
& w8 i0 Z5 T& _! B: @; P+ O2 Y return request.getParameterMap();5 |: S) M, B& K
}
{& T1 ~* t! b: H) i } catch (Exception e) {7 @$ P4 S$ Q% f, L
e.printStackTrace();
7 V2 y" ~4 o& h) r, o( q7 E throw new RuntimeException(e);, e& G' K7 E7 |. W a9 I
}
4 h+ r. Q9 X$ B4 d4 | }
5 I4 X3 E2 F* [, g% l% m6 \ O5 K* U
@Override
7 S6 T. ^* e4 V a1 R public String[] getParameterValues(String name) {
# E9 F9 T9 M" H. t, |+ ]9 ` W( _5 v M return getParameterMap().get(name);2 Q' T+ a' Z9 |) X7 E- {7 ~& Y( u
}
; ~1 F. ~* N/ |2 a6 t1 w) N# T( `9 x* T' `
$ J' A0 C. A! I! y @Override
y/ O! B0 y$ S; E. `4 h+ r1 U6 Z public String getParameter(String name) {
2 K; \; W3 ?+ \0 A$ X. M5 Y return getParameterValues(name) == null ? null U1 I5 c- h! w! W& q3 O1 @, A
: getParameterValues(name)[0];; `% i" B$ C3 Z$ S
}! n) S( X% s1 z$ F0 [8 {6 J
/ G! {8 a- R+ }! W. t1 [
}
+ `. ?. N# v2 z( c. A9 I}& {5 D! t/ E# q9 X* y1 x
' S8 @$ g B( A5 j$ ]/ h6 D M" _7 Y/ w9 @: l9 ?+ h9 z9 T
|
|