该用户从未签到
|
package cn.onecool.filter;
" y3 H1 W) b1 Q. ~/ [
1 j F& T. a1 ]) Kimport java.io.IOException;
* O; h/ K- l4 e H1 U+ [import java.util.Map;
# x3 Z3 @# T- ]8 }6 V# N1 K0 r. Z; a& j3 F3 i
import javax.servlet.Filter;
+ {2 l4 u+ a' |; zimport javax.servlet.FilterChain;
! z& e. x% c4 }import javax.servlet.FilterConfig;6 w% t3 G' S* w
import javax.servlet.ServletContext;
* e8 n0 h, h! M9 Qimport javax.servlet.ServletException;
# w) s# f: s7 F9 i' iimport javax.servlet.ServletRequest;9 s7 F5 t% G# Z# T' _& G' X
import javax.servlet.ServletResponse;6 H3 R V, c$ ?% ?
import javax.servlet.http.HttpServletRequest;
9 G1 o" }) S" c: f' \import javax.servlet.http.HttpServletRequestWrapper;9 j$ w; X5 N5 f1 m) }
; t' v; Z7 w; j& y) n* d+ I% L
public class EncodingFilte implements Filter {* t: S; D! m6 i1 t$ { s) ?
private FilterConfig config = null;
0 A) C! w$ v B4 B private ServletContext context = null;
- M* `, N7 U l2 k private String encode = null;
% V9 H* O l5 u z8 Y
F3 K, f: F, s* ^" y: _5 Y# W public void init(FilterConfig filterConfig) throws ServletException {
" N7 i% t2 K* Y% w6 Q4 Z this.config = filterConfig;
( K: y) F, j; \. c/ ~5 h' j this.context = filterConfig.getServletContext();- s: O# q/ p) a! m
this.encode = context.getInitParameter("encoding")==null? "utf-8" : context.getInitParameter("encoding");. X% t8 h: @- l, H2 i
}
. G/ ~( D6 Y" N: L3 D
6 ?) o2 N( c9 B# B( ~, ^ public void doFilter(ServletRequest request, ServletResponse response,
; b( C: ~( v+ h. {" N2 V* z3 S9 l+ u( V5 c FilterChain chain) throws IOException, ServletException {9 w1 l3 }$ `# J- l8 q8 Y; [
. }+ R" n3 T0 K // --响应乱码解决
2 b; u5 P. o/ i1 v# t response.setCharacterEncoding(encode);6 Z. }& b2 P" |
response.setContentType("text/html;charset=" + encode);: H d& k8 v5 i/ F6 U7 E% N, N
// --利用装饰设计模式改变request对象和获取请求参数相关的方法,从而解决请求参数乱码问题( x/ }8 Z$ b( q
chain.doFilter(new MyHttpServletRequest((HttpServletRequest) request),* ?% `5 y4 u7 {* M0 Z5 J! ?. I" Q
response);
) v9 p% k, \- F. C7 I } w: ?- x, O4 }/ K5 ?
% `# L3 l+ H+ F4 l" U4 p* P! R% P9 x3 B( R public void destroy() {5 E+ g% m- B8 ]" S- `
: o0 y, p8 q: d& x- ]7 j4 b) u4 v- M3 y }
7 v3 C! y: V. l' A# f
4 V% i7 T4 j% G* R2 E private class MyHttpServletRequest extends HttpServletRequestWrapper {
4 t% J& a* ~5 ^5 X( K private HttpServletRequest request = null;1 m$ x, h2 d& ?' g( f
private boolean isNotEncode = true;" N5 a7 L4 N. f& K
& H" s; U; c2 g
public MyHttpServletRequest(HttpServletRequest request) {
4 Y% [* ] o+ k2 I$ w y6 T super(request);
0 t: X/ R0 ~" z8 L/ K1 U this.request = request;
/ f% i" v I$ Q2 l# E }
3 a9 X9 h3 T, ^4 z9 a
! F) j6 W0 {4 e$ V1 b @Override
1 J# B9 d2 p3 S. c public Map<String, String[]> getParameterMap() {! N. ?6 _7 R! v5 Y
try {
5 q7 U9 i7 Y. J& g( @( T' w if (request.getMethod().equalsIgnoreCase("POST")) {
; @6 @( L. ~* L& Y5 b! ~ request.setCharacterEncoding(encode);
' V" b8 ?% _8 R& a" n5 c- J6 A return request.getParameterMap();
6 K8 m- T& O+ b/ A l- ~ } else if (request.getMethod().equalsIgnoreCase("GET")) {, q; F2 x/ H7 L% q5 u
Map<String, String[]> map = request.getParameterMap();+ }7 \- B1 n F/ { W5 Y
if (isNotEncode) {0 v9 C! c+ d* s O
for (Map.Entry<String, String[]> entry : map.entrySet()) {
3 Z" X% H* Q5 _5 S6 H* v) k* d3 \ String[] vs = entry.getValue();% p8 z1 d( L, N( v2 T) ]4 I0 q
for (int i = 0; i < vs.length; i++) {
; A9 W1 E w; W$ o vs[i] = new String(vs[i].getBytes("iso8859-1"),. ~5 Q" a, i$ @% O# o
encode);
. b$ r6 J2 y, W' n8 { j- v( ~! r }3 c- b2 _; i- V4 Y( H0 u
}
1 ^- ~3 C- P; p: ^& f5 h- h3 Z isNotEncode = false;
# V; x7 V# u- J4 Z+ J }+ e" H7 G2 L4 @# Z
return map;
; w3 z% ?0 i0 M( t3 Y# h+ L4 e, ^9 o } else {
; g' [! [( m4 B& H6 _; ^2 H3 B return request.getParameterMap();+ R7 {, \' m3 N. r7 \
}- r4 a, q, q. o+ i7 a) _
} catch (Exception e) {1 _, S! a3 @3 q) @
e.printStackTrace();1 n" A! N0 P! s6 n6 p, h" i9 k# X- `
throw new RuntimeException(e);; ^7 A: ]8 A7 q9 y4 k( x: i
}: |$ w7 ]: s9 w
}
) H; X- S8 S$ } {4 q7 k ?; G+ ~: a% r5 h8 {
@Override) H$ }1 V# v) a0 H+ b8 d! {
public String[] getParameterValues(String name) {6 q2 A- k) z" f. K1 Z' p Y
return getParameterMap().get(name);
" ^ v6 S( v1 n* j0 y; D+ S }
" W3 z) w x3 v3 Q+ y# E* [5 ^4 J3 m4 i' K" m
@Override% `4 @) S- g+ u6 J
public String getParameter(String name) {% [. q6 D7 b; s) y$ d& o' m
return getParameterValues(name) == null ? null
% @; m& ]! j: @" ^; A+ E : getParameterValues(name)[0];6 C% Q! W( S2 b
}8 U1 A9 J3 q: S" { F
& M8 s* U$ _/ R( ~' y4 q9 j+ S }: m1 | `* z8 ^; d3 C5 K
}$ l7 {1 S6 l3 z
, \+ v9 Q: b. b4 h& D
/ o9 w6 s: N" n9 y+ U0 C* A% H
|
|