|
该用户从未签到
|
package cn.onecool.filter;) ` c* ~! X1 R" R( j
" ?! \8 v$ Z% r2 B3 Jimport java.io.IOException;
; D) I# W ^& S9 A4 k6 Z( U, ^) [import java.util.Map;1 L' C8 u; R) r+ `# D: _
- x5 O; F8 }$ ^; Yimport javax.servlet.Filter;9 d% R6 }+ d! Q8 T: |* `: A3 m/ D5 e
import javax.servlet.FilterChain;5 Q B! ]3 w: N
import javax.servlet.FilterConfig;
6 \ Y) y& O( bimport javax.servlet.ServletContext;1 t: f/ c5 j: `$ @8 x
import javax.servlet.ServletException;
' ~6 o) r% C) c, v: M' Qimport javax.servlet.ServletRequest;- z {: B6 K7 \# Y7 i/ Q) j
import javax.servlet.ServletResponse;
% r: ]0 _9 @+ \( jimport javax.servlet.http.HttpServletRequest;, c$ C8 M7 [3 ^( ~
import javax.servlet.http.HttpServletRequestWrapper;; T) t- d! f/ v- e3 t3 d- I/ o
( I# |) O4 E2 |( f0 {6 ]public class EncodingFilte implements Filter {
( ^: q! `7 l0 d& h9 i private FilterConfig config = null;, g2 q8 f. n$ P; f
private ServletContext context = null;6 J8 m3 G4 R8 S& ?
private String encode = null;! j. ~, e+ k+ D8 O( @" `: b& B& C( Z
; u# M3 \) s) p, Q+ p' K% t public void init(FilterConfig filterConfig) throws ServletException {
( E+ d# @) D5 o& x/ E2 R4 l this.config = filterConfig;
V6 K1 R6 C$ m1 j! f9 @ this.context = filterConfig.getServletContext();. X$ F/ u7 |3 y4 l2 _% A
this.encode = context.getInitParameter("encoding")==null? "utf-8" : context.getInitParameter("encoding");* p/ ]. p7 S5 j5 r
}
e: ?6 ^3 M; q4 `# R3 t, A, \) G- i2 s* j" I8 l3 u
public void doFilter(ServletRequest request, ServletResponse response,& x9 ]: D p/ [8 O3 d
FilterChain chain) throws IOException, ServletException {# I) b! @5 y3 {7 y- W
2 s8 ?: z; C0 V% G // --响应乱码解决+ Y; b7 v5 q9 Z2 ~! f3 c6 T
response.setCharacterEncoding(encode);, t$ S1 X1 t; Q6 j( N$ H6 {
response.setContentType("text/html;charset=" + encode);# f. r7 l+ t! [( ~ o( x
// --利用装饰设计模式改变request对象和获取请求参数相关的方法,从而解决请求参数乱码问题
7 A8 Q7 ?, M* Q' [ p chain.doFilter(new MyHttpServletRequest((HttpServletRequest) request),1 _; @. g: a9 e* y1 |& r
response);; G4 ?6 W. _; G% m; L
}: O8 v7 `- u4 N, p" o3 {5 m
: P8 w2 z% e9 R5 y public void destroy() {
7 Q( A/ N) o" w- |& p- @3 {& s" }: C$ |
}, ^- R: J/ J4 ?( ?+ @- N
! ]" `. i* S7 u6 e4 C private class MyHttpServletRequest extends HttpServletRequestWrapper {6 u8 v1 C! }5 X2 j
private HttpServletRequest request = null;
& J) u& v5 A7 F) H private boolean isNotEncode = true;
5 X0 A4 D3 X+ j, A8 c8 I4 O- W$ _( m( W. m: z/ G4 f2 u* y, x+ Y
public MyHttpServletRequest(HttpServletRequest request) {
$ J9 W% ^4 t; V k! {6 t super(request);2 M5 B. |0 V$ u& Z$ P8 V9 U
this.request = request;
, U+ o" J9 @* ?0 G% V }
- t7 t, J/ Y( b. l4 d, P3 c$ S V
@Override2 A8 P7 c* P3 L, K" c
public Map<String, String[]> getParameterMap() {8 D: c! b V& O& e2 F* T, E9 ^
try {
. b. L: v6 {" S if (request.getMethod().equalsIgnoreCase("POST")) {
/ u( {$ u- }: X8 H4 K8 s. L0 X request.setCharacterEncoding(encode);% x9 G7 O$ s1 o- y$ N
return request.getParameterMap();
) x- {4 N3 L3 d0 g/ t. D } else if (request.getMethod().equalsIgnoreCase("GET")) {
, w3 z: [# f$ F( g8 J& O Map<String, String[]> map = request.getParameterMap();
6 Z. l% D0 {6 S E$ N J if (isNotEncode) {
$ P" m! D4 M& d0 @& d for (Map.Entry<String, String[]> entry : map.entrySet()) {
& H Z% A, z: X# F" O/ u String[] vs = entry.getValue();
0 x y) n' @4 ]2 g for (int i = 0; i < vs.length; i++) {/ K6 v% X* { {. B% A
vs[i] = new String(vs[i].getBytes("iso8859-1"),, P) F1 I+ l+ u8 U
encode);
) F" |# u* D8 K- @) b" f7 | }
T' }. X* E }* `6 s# Q }) `& |1 `- v# }/ l6 \# ~+ u
isNotEncode = false;5 o$ y. Y. }+ ~; b% x
}3 ]5 j2 ^5 `$ y
return map;
7 ^) x' c1 \0 j( A4 {' m- @2 a } else {
% l2 m8 ~) C) o" m: @ return request.getParameterMap();
. \0 q1 k9 G& A- T( `7 h }
l' G- y' p: N+ g, y) w1 V" Y } catch (Exception e) {
1 b2 \- G4 w& D e.printStackTrace();# x7 F7 C/ @9 c2 I
throw new RuntimeException(e);
5 L7 a. p8 ?" o9 m }
5 A1 F, Y) P% a. `9 e! R }4 k) J$ r l: r; `8 D
. K% g( U; d$ ?+ o, s7 t1 R @Override) a) n1 _* R$ {; X, f( A
public String[] getParameterValues(String name) {
. S4 u7 M) h. x9 d- n8 ~ return getParameterMap().get(name);
7 g1 b2 I- x6 Z/ @' @ }) G* k& F; w8 \+ ^$ W6 w% P
! G! d+ k/ V9 w/ g2 z f8 u @Override% E5 l" k8 F& U, ?; }6 K, L6 s
public String getParameter(String name) {% |" B4 R6 y- `# ~, ^" Q/ s9 E
return getParameterValues(name) == null ? null' i! k6 _4 c, q# i' D8 _; B6 A' g# O
: getParameterValues(name)[0];! H2 g. h ]: w2 s! N% c
}2 z% A4 n5 M2 @
' t0 U, |% n, Q }
) n. B' ?, b( p+ f0 h}
' u8 t% R( `; b5 Q
% W6 i) r. R* S9 ^2 L3 O
: E, d9 v$ `0 d& @! e |
|