|
该用户从未签到
|
package cn.onecool.filter;7 `9 g0 {& W2 V3 H
; I1 _1 l4 L+ j, h. M( S" R
import java.io.IOException;
9 k: U( j4 {5 i2 Simport java.util.Map;5 D* ^$ V9 ?: Z. |5 ~
! O. K* u' f$ J/ D& P# D0 Simport javax.servlet.Filter;
) L! J+ t/ n9 c0 V1 I7 \import javax.servlet.FilterChain; w+ \2 P6 P2 P! F
import javax.servlet.FilterConfig;. {- [; [) _" X' l
import javax.servlet.ServletContext;1 o& h7 ?/ H# c# f; Z! F9 E3 }* U. _
import javax.servlet.ServletException;
% b7 l' @+ t# a; Qimport javax.servlet.ServletRequest;& X, _+ g. o! A o
import javax.servlet.ServletResponse;
) n; ?2 m6 J t/ _import javax.servlet.http.HttpServletRequest;: g& G$ v# N3 e1 ~$ n' `4 H5 L
import javax.servlet.http.HttpServletRequestWrapper;: S- e, v+ B9 z
% M1 G0 L) `9 e, g/ m* Cpublic class EncodingFilte implements Filter {* H" Q% P/ c% c. l# J$ G/ G
private FilterConfig config = null;
3 ? d3 S* y# D private ServletContext context = null;
4 d4 m' t1 Z" u private String encode = null;" l! r- Q+ \' M7 G+ t( X
! o9 O8 Z1 [/ z" F1 q" Z/ K public void init(FilterConfig filterConfig) throws ServletException {! y5 @) n! r5 _
this.config = filterConfig;+ `5 a( [9 b8 Q! n! k; u
this.context = filterConfig.getServletContext();
3 X" S) h5 |! y this.encode = context.getInitParameter("encoding")==null? "utf-8" : context.getInitParameter("encoding");
# c" w1 \3 m: h }4 T% U' C) o9 z% G9 g+ D" p. x) J
( e7 {0 @) }/ l* G. j
public void doFilter(ServletRequest request, ServletResponse response, h9 w9 t- \; s6 S$ f$ C
FilterChain chain) throws IOException, ServletException {6 Y$ l; N1 k" ^$ }% e( a
- G) n- h8 [% }5 m* }1 {
// --响应乱码解决4 {, T1 Y% v! A% p z+ T
response.setCharacterEncoding(encode);' `% Z# `& [9 S' n1 a4 U
response.setContentType("text/html;charset=" + encode);
- e% E# i, P8 e9 ^ // --利用装饰设计模式改变request对象和获取请求参数相关的方法,从而解决请求参数乱码问题
9 Q. ]( u9 g( d9 ?! s7 k chain.doFilter(new MyHttpServletRequest((HttpServletRequest) request),* }- G' B6 [9 F, E& c
response);
/ o" U+ S6 l8 n }; e7 U0 Q; l6 ?( t, h5 J
( b) o" M5 e; C% W
public void destroy() {: b1 D5 P: a" s( o* v; ?9 i& b5 R
w8 ^8 t5 _, b0 M5 [
}
/ ?$ q/ T" D& m1 v) W; {
! ^ r9 h" p( j7 b) X, S2 O private class MyHttpServletRequest extends HttpServletRequestWrapper {! ]0 W" @* ~' b+ [
private HttpServletRequest request = null;
2 Y4 ^$ R$ m# v# ~/ [/ x* e private boolean isNotEncode = true;/ I' J1 u/ |- X \* a
3 w! f0 j; o% V
public MyHttpServletRequest(HttpServletRequest request) {( i/ s: U4 E8 _1 O- |
super(request);
1 g% r4 x2 r( R4 @9 x" A this.request = request;$ \) Y; z' [! L1 S
}
/ T. @ `9 {8 `* l. e6 o; n( P. Y! G! k8 F4 E1 k$ ?
@Override
/ E- [. V |/ ~( h, W! ^ public Map<String, String[]> getParameterMap() {% i8 Z& m/ _/ }! v
try {3 c$ ~8 Y" `4 @& q, ^ {
if (request.getMethod().equalsIgnoreCase("POST")) {: A, b. r& p, [3 u( F* f. `9 ^$ ^
request.setCharacterEncoding(encode);- U; O2 F& J* y5 V
return request.getParameterMap();6 f6 Q! o- \; V( g
} else if (request.getMethod().equalsIgnoreCase("GET")) {
3 u% P6 |# q+ i) W! i8 S3 N) C, d Map<String, String[]> map = request.getParameterMap(); p" ?1 y: _3 V, ~( l0 o9 w2 V
if (isNotEncode) {# X/ B1 f" ], m! {; p# m( O
for (Map.Entry<String, String[]> entry : map.entrySet()) { F) t S; t" y' c9 X
String[] vs = entry.getValue();1 v; O6 T: o4 J6 ?6 U1 p U
for (int i = 0; i < vs.length; i++) {
6 ?9 z/ o; s: X# z, D vs[i] = new String(vs[i].getBytes("iso8859-1"),
7 o% f8 }' n7 @# u" ?2 }; }, ], M# v encode);7 q( [9 h5 o9 ]" a! I, q
} U) I: m5 q6 v# s4 P2 L/ h* A
}
# j' ]) {* v& m' v, X! s, F isNotEncode = false;( ~% q" g; b3 Z7 g
}& L& l3 }- K" k2 j' _' e4 m
return map;
( @" {# c: _6 A H } else {
9 w/ q# u% x c7 e3 j return request.getParameterMap();
9 ]3 s& k7 G2 h7 G }
1 S1 {8 V4 k- t } catch (Exception e) {8 ~9 [8 J* J) Z. K( \
e.printStackTrace();
. T! J# M# M+ I$ A1 y0 S5 Q1 T9 z4 R) F throw new RuntimeException(e);. E. f* s$ F1 H$ \1 ` _3 L5 u
}
% ~1 k( d S! H- c: R }
/ v C! _2 u" v8 x) c$ q- g7 b* e: f ^, E1 P: x( }
@Override. f+ I4 j2 t0 Q* |, l
public String[] getParameterValues(String name) {
4 m; [) Y6 C/ M7 x% B* K return getParameterMap().get(name);
, z+ l) C$ R2 ?$ s% Z9 l }
% d7 ^1 b+ F! V! q
9 t: }1 s: F! v* E) G0 D e- ? @Override
6 E# _2 a2 \/ i9 C* Y5 M( D# y public String getParameter(String name) {
% V' s+ ?, K) ~, ]3 t/ k$ X( N+ N" e7 ~ return getParameterValues(name) == null ? null+ h4 q- Z7 m. I8 p8 J7 J% u) J ^1 M! @
: getParameterValues(name)[0];3 R& Q" y' z7 V4 C4 _
}
( q4 {9 M; Q( ^3 }$ H. R
1 ~+ N$ _+ L) W" i' A7 b: { }
: J. M7 o5 |/ I2 q5 W6 c}
0 W# y+ K, f _: _
6 K# |9 L# b- I& R0 [) z: I) m! R3 P; _6 f7 m
|
|