该用户从未签到
|
package cn.onecool.filter;$ H0 b- b( \2 O3 C
+ J' [& M$ k/ R3 V
import java.io.IOException;
# a7 Z i) }& {" k* t& O( nimport java.util.Map;
3 V' u( d( [+ I# T- x6 d. `. z2 ?1 a, D' }
import javax.servlet.Filter;
, I( X3 ?5 u' i0 P8 Mimport javax.servlet.FilterChain;
/ o/ w: y+ ?2 \* f; ]import javax.servlet.FilterConfig;
$ C% C- v+ }$ T/ eimport javax.servlet.ServletContext;
" Q* N! W0 i. p# ]3 F% |, Himport javax.servlet.ServletException;- G' V: o2 n. s! K. b/ q
import javax.servlet.ServletRequest;
# K) U9 \1 A; Y$ V% Gimport javax.servlet.ServletResponse;; ^4 v2 X# T v' W9 r2 n6 V
import javax.servlet.http.HttpServletRequest;
0 B. Y `/ ~- Q+ B8 G7 `# O; J, rimport javax.servlet.http.HttpServletRequestWrapper;. T+ B2 {; V& t. W+ G8 Y
7 }, G8 a, G- T8 p
public class EncodingFilte implements Filter {6 n( R5 K3 E; T% o
private FilterConfig config = null;
8 O) ?- d8 E) I$ m private ServletContext context = null;* V3 g/ t7 j/ \% s" e4 |
private String encode = null;- _1 p" {& x, L, i; u8 I/ V
! l, n: o& H2 l; l( _* f+ y% \3 d
public void init(FilterConfig filterConfig) throws ServletException {$ [; R( c4 _9 O+ Z& o
this.config = filterConfig;' I2 {5 s. T/ o4 @* B
this.context = filterConfig.getServletContext();4 u2 E. ^ Q) V
this.encode = context.getInitParameter("encoding")==null? "utf-8" : context.getInitParameter("encoding");5 g/ g$ I" \# i( m; y7 i
}
* ^2 D0 s% ^) h, L$ [2 X( v- ^5 ]' ?9 m; m, N$ A( G
public void doFilter(ServletRequest request, ServletResponse response, Z/ N" g4 Y5 D; M. x& {* W- C% Z+ ]
FilterChain chain) throws IOException, ServletException {% g; ~- z# x2 I% C6 p
/ p+ a, x- ~3 T( b, F) V // --响应乱码解决2 K: f6 m; N- W% w$ w# D: W1 M# }
response.setCharacterEncoding(encode);
5 {2 Q% \# ]- {0 w$ K" x" H response.setContentType("text/html;charset=" + encode);
; `+ c% o, i2 X; y. _+ }8 o' I // --利用装饰设计模式改变request对象和获取请求参数相关的方法,从而解决请求参数乱码问题. t3 ~: y6 Z h% y6 U9 _2 R
chain.doFilter(new MyHttpServletRequest((HttpServletRequest) request),' D- E4 B: z5 ?7 B$ Z4 }
response);% p3 P$ h+ U' `8 t, J; u
}/ H. ?7 E1 F& N. l8 U
1 B2 W k. c" g- q) t0 x# _5 E) h
public void destroy() {8 p9 T1 h+ r& C/ V/ n7 D7 O `4 l
/ i- d2 v% F4 E, h* I5 x }
) f' r% H1 W' K' I- C1 s2 ^5 o9 t; P9 I. R% [
private class MyHttpServletRequest extends HttpServletRequestWrapper {
, ?' X U5 k2 {7 A- |0 c3 j private HttpServletRequest request = null;
7 q5 P9 L( G1 _$ B, w/ k! x- @3 ]0 _8 y/ q private boolean isNotEncode = true;" f2 S2 ? A- V1 m
! q' y: Q; F# K5 y
public MyHttpServletRequest(HttpServletRequest request) {
, L1 c$ H- R. P( ]: |; ?' e+ v super(request);
6 y3 C6 n& M; z, N. A* J6 \: Z this.request = request;
0 v8 T. K4 C2 M) b }
: D9 l: _4 T" U0 P, Y) j1 ]/ u* s& S' @; Q" k
@Override7 Y, I* y# @$ w6 ~% f) W
public Map<String, String[]> getParameterMap() {
2 _; k# B; f4 T3 a2 x+ a try {' u- r2 d* v5 b: s7 [/ p# e# C, P
if (request.getMethod().equalsIgnoreCase("POST")) {7 i. h: k6 O# i, i/ G
request.setCharacterEncoding(encode);& @" U% U f& a1 Y7 u6 F
return request.getParameterMap();
: i! G& K, y6 v) o' d$ k } else if (request.getMethod().equalsIgnoreCase("GET")) {
& K1 _( G6 ^4 A# P: g Map<String, String[]> map = request.getParameterMap();" F. I& @: O1 l' G
if (isNotEncode) {4 e% ~" ^% p& W
for (Map.Entry<String, String[]> entry : map.entrySet()) {8 f; _5 H& W9 [3 I. i# K% M
String[] vs = entry.getValue();2 H5 r& a& y8 E H
for (int i = 0; i < vs.length; i++) {
6 j% z: b% y' ]3 L' F6 O% N* U vs[i] = new String(vs[i].getBytes("iso8859-1"),
8 A+ E* ]" O" Z4 p encode);1 F( A; }! j! W' L. V, q
}# u2 a, s: l, h9 |) L" ]0 K# _
}
: l5 c8 B$ @/ ^, y2 a; U. {1 R isNotEncode = false;: c! R3 V, T" r. R% c1 l9 k
}
4 l8 k' L+ \4 Q1 J5 I return map;
: ?" U/ s9 q) p+ k+ E+ [% | } else {
; V6 E" C# \: V: c0 ?2 \ return request.getParameterMap();# r- W4 ]/ r' e0 q
}
s0 Y/ _. B8 ~- n } catch (Exception e) {* f1 g6 y; D8 [+ \% h5 A
e.printStackTrace();
( }0 G7 }2 i7 Y( k throw new RuntimeException(e);
( F; F0 ~" c; _* a7 f$ q1 O }0 x0 L. m- ~+ F3 a% U$ ~# p5 g
}
; }- h, N* r) i( o0 I' w4 F. \- { k4 `9 u% @
@Override
* c2 d7 t5 K0 J- u$ k* T C public String[] getParameterValues(String name) { o1 v4 H& e) x) U" `
return getParameterMap().get(name);; e- E% g2 H& Z* e
}
5 z* A9 a* X r
3 }; r" b( ?: M @Override- D3 }# w8 Q# z7 l. }
public String getParameter(String name) {. h8 x) P4 `6 A1 ?1 J% f2 n
return getParameterValues(name) == null ? null8 a6 l8 o0 d& @, J' T* G0 ]: |
: getParameterValues(name)[0];( u* N t' I# l
}% |. O, N. o3 k7 ]
' O! Q" C, P* U
}4 R8 b; P, @ O/ m
}
, Q' a5 h5 w% k
2 ^3 J+ m! b/ |# L, |
# _1 M3 X$ O5 s0 Q4 ` |
|