|
该用户从未签到
|
package cn.onecool.filter;# [6 ?- ]5 t7 N. L" Q- f2 ?
5 I o+ s. H- H) Uimport java.io.IOException;& R1 S- C, b! |" T3 _
import java.util.Map;* D6 W% Q9 i7 u" [; `! l
1 ~ C. {- {# @import javax.servlet.Filter;' {4 L$ I `' ~5 C
import javax.servlet.FilterChain;! X, {8 G; T/ t4 O" F8 K
import javax.servlet.FilterConfig;, j, D& S, D/ F/ K Y% H
import javax.servlet.ServletContext;
1 Q, E% k" n/ u. \! Dimport javax.servlet.ServletException;
: u) w$ ]0 @) O. oimport javax.servlet.ServletRequest;! r8 q+ u x; X0 V! l7 i- l @
import javax.servlet.ServletResponse;
4 o5 V4 s6 n, zimport javax.servlet.http.HttpServletRequest;
& ~+ v. o4 C5 _% i8 S5 k2 mimport javax.servlet.http.HttpServletRequestWrapper;
, S" p& C1 K5 z/ n9 U5 N' Z4 N
1 }7 L, d/ X& i) I$ N+ q9 Q# f$ T: @public class EncodingFilte implements Filter {
) ^7 i$ U. j4 T4 O( t private FilterConfig config = null;
O8 B# d S$ S0 t D+ `/ g5 y private ServletContext context = null;
2 s! k9 i R$ |1 G' e$ X- \ private String encode = null;
" l6 V. U' k" g3 j
: x# W! P3 N* x% A+ i Z public void init(FilterConfig filterConfig) throws ServletException {3 |4 a- n8 } N% C
this.config = filterConfig;% u7 f; |* @; u! A& r( r# s: o3 I
this.context = filterConfig.getServletContext();
) w; j; g- K8 l$ x' U1 u this.encode = context.getInitParameter("encoding")==null? "utf-8" : context.getInitParameter("encoding");+ K2 K6 }2 c4 x. Z
}/ c2 P0 M" j) z# v w* R Z: u
+ G0 F2 e F& k( F, P+ H) A% J1 Y
public void doFilter(ServletRequest request, ServletResponse response,
' v9 ]6 K" Y8 R% j |+ F. l$ v FilterChain chain) throws IOException, ServletException {
4 f2 W1 f# ^; n3 H3 g7 b- @8 D
8 }# T: p6 f- U+ e7 v1 G& [ // --响应乱码解决- o" O( I+ U4 ~4 h
response.setCharacterEncoding(encode);
1 V; J& d, O+ j; U `9 a+ N( D response.setContentType("text/html;charset=" + encode);0 T( N- z) e: S" |" g0 ~& W. M
// --利用装饰设计模式改变request对象和获取请求参数相关的方法,从而解决请求参数乱码问题
( C5 E9 T! ?, N3 B chain.doFilter(new MyHttpServletRequest((HttpServletRequest) request),
( H: e( o/ q( t& h response);- X+ L& [3 n' \, K& @- e
}
: C) ]2 ?2 d; Q* Q5 m+ o `" c* v. z3 m: s8 R
public void destroy() {1 P$ d* ~' M* u1 g. h
! D5 }+ A% g+ B+ P% r- e
}; h, d, T2 X; ?: O0 k+ n
/ Y1 j# }2 h# a. `9 p private class MyHttpServletRequest extends HttpServletRequestWrapper {
2 ], X# @3 K/ F private HttpServletRequest request = null;) J8 r6 D i6 ~/ o) T+ V6 f$ I1 \# F: [
private boolean isNotEncode = true;
1 E* g4 s+ g+ L, B0 H# x" a& s3 |- v5 Q" Y. ]: a! g
public MyHttpServletRequest(HttpServletRequest request) {* @2 K4 N8 Y' {% e+ o4 N
super(request);! x5 ]# `; H% y+ i6 L0 Y/ T. ]) d
this.request = request;* p7 ]8 Z' _8 }) x% Q3 b- F' _
}" S3 a7 q: [6 }6 K
9 N% s/ i# c+ d! f- s
@Override* q9 M% X; G* _
public Map<String, String[]> getParameterMap() {, h' K3 i) ]. f4 T( ]9 W
try {
% @' ^# U$ E: y) R if (request.getMethod().equalsIgnoreCase("POST")) {7 `1 T/ N! ^& z" J& n c
request.setCharacterEncoding(encode);/ \6 W3 E8 w# P
return request.getParameterMap();: Y1 I5 n. g4 U& V6 ?" e+ j
} else if (request.getMethod().equalsIgnoreCase("GET")) {7 g) U$ a% H% `1 i
Map<String, String[]> map = request.getParameterMap();
$ U( V' {! l7 h* g! [) H) m, x8 e/ S if (isNotEncode) {! R% z; L) q4 e( U
for (Map.Entry<String, String[]> entry : map.entrySet()) {) v* M& n/ C3 ~/ }6 e
String[] vs = entry.getValue();# m* y- i2 U/ B2 f9 }5 M/ l4 I1 \# i
for (int i = 0; i < vs.length; i++) {
0 ]; f. L6 z- { vs[i] = new String(vs[i].getBytes("iso8859-1"),5 R# d$ h- } t5 Z( z8 s
encode);/ T+ m4 Q1 x0 i$ b
}' o9 D \% C! v* H
}; Z' U9 l9 S$ \, H
isNotEncode = false;
, c( A* g* j6 b/ t$ ] }/ I+ ?) Y! ~5 Z( U' W2 R0 e; o+ b
return map;' N' r! Q& I+ L6 V, j1 f' k6 H7 ~
} else {
R R( r( a9 [; K8 {8 k; Y; D return request.getParameterMap();
" {9 x7 Z( \" X+ T, u1 B }
2 h* D0 p3 ]1 a } catch (Exception e) {
3 S8 ]% q, ]3 W; j7 Z e.printStackTrace();6 j) C3 w# Q0 I
throw new RuntimeException(e);
+ F+ x* S. N: u* s) n+ j* a; [1 n }& j/ a: K E: Y* X
}
. Y3 }) g" Y9 c1 S3 g
/ n M& ]1 c6 \" Z) m- [ @Override
" g3 I) ^* K+ t' | public String[] getParameterValues(String name) {4 ?/ W( U; G& ~$ }
return getParameterMap().get(name);
2 O7 y) @7 a% d+ W! f1 C& z. R ~ }$ c/ ]: ~% O7 Z s& m& c3 C
/ q, H( @* w' Z
@Override+ O' e! p1 ^7 W1 e8 S1 l; Y
public String getParameter(String name) {
" n, ]) {1 N/ O; W9 l2 B5 J( r return getParameterValues(name) == null ? null# V8 l. } J/ o! ^8 X% ^+ O3 r! _
: getParameterValues(name)[0];
6 b, y' F7 q* n6 k }+ W; H" G0 l- E( W
: W1 {- V( q9 p* r- q$ D) g }
. a3 c2 L3 X0 \ X}9 Z5 z) i, Y8 c Z4 j
5 w+ `/ R2 d y* D7 N' l1 w' k& w6 T
) c; L' ]! g% l9 }( M: |) p- L$ O |
|