|
该用户从未签到
|
package cn.onecool.filter;5 f: _# z# n, j
3 A) R# g- k3 b' z' Mimport java.io.IOException;; _9 C6 K% X, K& T
import java.util.Map;+ C* L5 g9 w% F! d
) _' F* h( H/ O7 i( B8 eimport javax.servlet.Filter;9 x% D2 _* O& w' t( B' H! k ^
import javax.servlet.FilterChain;
* ^0 m5 t& O, Dimport javax.servlet.FilterConfig;" s# @+ M. k0 Z# z9 [
import javax.servlet.ServletContext;: K* p/ g% G7 J1 \& `6 D# |' H: V
import javax.servlet.ServletException;# w1 A2 M! _. a: h2 [( P
import javax.servlet.ServletRequest;
1 {) Z2 F$ p. ~# Uimport javax.servlet.ServletResponse;
2 ]) Q! p' G* V9 j" W' M E4 {import javax.servlet.http.HttpServletRequest;
# @( e+ Z6 ~6 o+ J; qimport javax.servlet.http.HttpServletRequestWrapper;) Y2 m' q: S) `" k- X h
; G3 E! u# D( Y+ r% ^" e0 \) B
public class EncodingFilte implements Filter {/ d6 o6 i4 P, t( y' V( a0 L" h# T
private FilterConfig config = null;$ p/ R1 c4 y( Z: e
private ServletContext context = null;& W- e. P3 c. ~3 A$ K! ]$ k/ |+ Y
private String encode = null;) u, u) O9 I9 [- i& d
0 [% }+ X6 [1 W# ~* I/ f `8 S
public void init(FilterConfig filterConfig) throws ServletException {
0 x# s$ `9 w3 e' ~& l, W' n; W this.config = filterConfig;
. y1 C6 D2 p4 \" O) ?$ D! } L9 o this.context = filterConfig.getServletContext();
! d7 t* ~) t+ J3 h this.encode = context.getInitParameter("encoding")==null? "utf-8" : context.getInitParameter("encoding");$ d( X* ^6 K' m0 T; J7 j: V1 |: d
}
t! h) [ w$ ^1 e4 g9 l
4 q2 j6 q4 S) ^# H2 z4 f$ G! K public void doFilter(ServletRequest request, ServletResponse response,
2 e6 e ]# s/ ]$ u5 n9 ~ FilterChain chain) throws IOException, ServletException {
+ d8 k! D+ F. z$ N* i) ^0 e
# {- B. Z7 W. A; s( O0 j // --响应乱码解决
# D4 j4 n1 _5 E response.setCharacterEncoding(encode);
3 _7 N! ]6 |4 v1 P response.setContentType("text/html;charset=" + encode);
: h4 i, F1 U% o9 [# k // --利用装饰设计模式改变request对象和获取请求参数相关的方法,从而解决请求参数乱码问题- `7 j) F" [' m2 g* ^/ Q; X) Y
chain.doFilter(new MyHttpServletRequest((HttpServletRequest) request), }# M5 k1 P- u4 B( P
response);$ P5 |4 X" x: w+ d! s, c, ]) P$ x
}% m1 j ?( G: x o# _
4 t7 u8 w4 h( \0 {- b public void destroy() {
# j+ x& a5 y3 K+ F1 B0 L2 n; ~* E' s1 y" B" H3 |7 Z! `- G
}
0 s& ~ P! S) N+ @8 V5 s2 m. U t4 T" c" l+ H7 I3 I: A
private class MyHttpServletRequest extends HttpServletRequestWrapper {; E' L" E" l; V* L7 y5 \- E9 Q
private HttpServletRequest request = null;
3 T4 b5 p6 S7 Q; f8 X private boolean isNotEncode = true;) D3 |6 q! d/ y1 d
7 Q" |* N9 H* w, k8 b/ [5 M public MyHttpServletRequest(HttpServletRequest request) {
, d: V. i- l" \9 y' a8 {" n super(request);9 ~3 I U0 `9 S) A
this.request = request;
& x2 v8 @& H1 J/ G7 u }: A- o1 Y% f% a$ t% g$ S
/ a# ]4 B$ `$ b8 {9 b
@Override
+ n ]! v d$ ? public Map<String, String[]> getParameterMap() {
+ n+ G+ T& H, ~% t1 t: ?# m7 q try {1 O3 M5 B) v p3 S) a
if (request.getMethod().equalsIgnoreCase("POST")) {
& [0 P6 }% b9 R request.setCharacterEncoding(encode);4 q( u5 d8 n; W) p# J. {+ B! D
return request.getParameterMap();" I/ ]/ {. o' E9 n
} else if (request.getMethod().equalsIgnoreCase("GET")) {1 x4 J' _$ i8 N
Map<String, String[]> map = request.getParameterMap();
$ T0 W0 y6 X7 I9 W if (isNotEncode) {1 ~ k5 v% K* K
for (Map.Entry<String, String[]> entry : map.entrySet()) {
/ H$ o7 j* v w2 d String[] vs = entry.getValue();/ n0 n# c3 ^0 ]+ A9 ?. b
for (int i = 0; i < vs.length; i++) {
$ m: s- ~/ S2 f0 Y vs[i] = new String(vs[i].getBytes("iso8859-1"),
. O0 e& q1 S) m, Q' y% R encode);
- h- x% @0 B4 B }2 @/ u# ^. Y# d) ^
}9 o1 y$ A" P- J( |0 y2 @( \
isNotEncode = false;
3 s7 p* o, I, _% W8 z9 m$ X }2 x6 k! { ]# D" U5 Z8 u( V/ `
return map;: x1 V) ~: a! s0 c/ x0 p: }. |2 C' X
} else {
m4 n$ S3 G' {8 [5 L9 s. l) ` return request.getParameterMap();* p& B4 a- K" b& e! S+ m- N
}# @, z H) Z2 Y$ A& J' I
} catch (Exception e) {
4 G# Y5 ?& ]/ r2 R e.printStackTrace();9 T: ?. ?! K8 u/ }% `/ [
throw new RuntimeException(e);: w: g5 ^1 `8 U/ E# [, G
}2 E' ]" `( m' i9 Y
}
0 Y8 U6 w& K) ]
5 J( T( b- u3 v) `* a# } @Override u0 r! a. A+ p6 ^0 d3 v9 ^9 g
public String[] getParameterValues(String name) {
0 X: _/ C; e7 y6 d" }. }/ [ return getParameterMap().get(name);
! i7 F( W) O r# N- z }& L$ {* y8 N3 {$ A! s! ?
/ i3 I) ^5 E2 ~, k% v @Override* F! H9 f3 ^$ q* o" V1 r$ A
public String getParameter(String name) {$ x: z& Z1 c' u8 B
return getParameterValues(name) == null ? null( h3 r7 C1 ^2 m
: getParameterValues(name)[0];& m9 i7 ?4 M0 M; [) Q7 i
}) }1 `! E; M0 y( |9 f2 Q
0 J; M) f% Z9 D }0 X% y( L! k! s, r" {
}
( U, y1 [8 L% \ a z, ~# z2 N. ?" M
- I; L( p( i) m9 [1 B+ m |
|