科帮网

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 项目源码 > 包装设计模式 实现全站乱码过滤器
总共48087条微博

动态微博

查看: 1703|回复: 9

包装设计模式 实现全站乱码过滤器

[复制链接]

2

主题

1

听众

16

金钱

一袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2016-09-14 00:13:45 |只看该作者 |倒序浏览
package cn.onecool.filter;1 n* U2 @# U% s% o

; D5 {2 W6 c# W$ Dimport java.io.IOException;
7 e* w/ r& ~' W. A* timport java.util.Map;% h7 J6 y; y& @" h
4 O2 w% j" K1 F, o3 j1 v8 v
import javax.servlet.Filter;
0 c, e( s3 Q% c1 d% P. Zimport javax.servlet.FilterChain;
# r" G$ ?: F+ O" x2 ]1 Y& y' oimport javax.servlet.FilterConfig;
( a- W6 U$ o/ e" B2 zimport javax.servlet.ServletContext;! l! y) R- s! ~0 H( Y3 V
import javax.servlet.ServletException;
: V+ b) Q- U5 [* h6 dimport javax.servlet.ServletRequest;# b+ U- Q; f  n
import javax.servlet.ServletResponse;" z$ }" {6 ~: n
import javax.servlet.http.HttpServletRequest;) ]! l9 L% x2 T. I
import javax.servlet.http.HttpServletRequestWrapper;
, W" O! j- L7 I( j
& e7 z1 D* s( a' Upublic class EncodingFilte implements Filter {8 \; E6 ?6 R1 U* v
        private FilterConfig config = null;! s" Q" U- q4 }# ]# N9 v, u
        private ServletContext context = null;% w$ `5 t, [4 G" t) e& n6 _
        private String encode = null;; S+ E8 U5 @8 R1 o" C
( S7 Z3 Y' _, O7 u, p
        public void init(FilterConfig filterConfig) throws ServletException {" n4 r; ]( [* W, z3 s, n
                this.config = filterConfig;
- b4 Q4 G% H, Y$ H0 K; `/ z                this.context = filterConfig.getServletContext();' `+ y% m% E. d+ H
                this.encode = context.getInitParameter("encoding")==null? "utf-8" : context.getInitParameter("encoding");" |$ m2 e' [" z& e7 ]& w5 H4 B6 Q
        }
& c3 m# u! U9 E, {
' |% P, M  j& ^+ T; z        public void doFilter(ServletRequest request, ServletResponse response,
6 l1 I5 T. [0 ?& f+ ?                        FilterChain chain) throws IOException, ServletException {
- |3 ~& T9 R; x7 O5 r* h, l- B8 w/ g! \' P* R
                // --响应乱码解决; y* X4 ?+ l# ~6 J6 M% G. B
                response.setCharacterEncoding(encode);
) C; F7 |. y- D( l; V, F5 C                response.setContentType("text/html;charset=" + encode);4 x- t4 a3 r* W. a
                // --利用装饰设计模式改变request对象和获取请求参数相关的方法,从而解决请求参数乱码问题
& w* T: A) _/ Q3 S7 {4 ^" A) E                chain.doFilter(new MyHttpServletRequest((HttpServletRequest) request),. ^3 W5 P0 ~; M& j( Z* D6 Y
                                response);0 A! W8 T0 m8 u% `
        }
2 Q" Y) z! B  V
0 ]- v; s# m% u, Z) K: X        public void destroy() {4 Y/ M8 s+ C4 o$ `, g- L

: ]' \) i6 U* F5 Q        }7 b9 O1 d" [7 B( M% k( a

: D0 T  A' S8 f4 _; U' H        private class MyHttpServletRequest extends HttpServletRequestWrapper {
3 J1 \9 ~' c) `# v' ?: d( d0 T                private HttpServletRequest request = null;1 Q9 A& y4 k  u7 \5 W
                private boolean isNotEncode = true;& f" W; J  T1 g/ C
4 Y# z: w( a6 [- f: e. u3 t
                public MyHttpServletRequest(HttpServletRequest request) {
5 z: B$ {0 Y0 ]  L! X                        super(request);
/ `$ X7 S- \. `& t" r                        this.request = request;
! |. @( z* a# J& S                }, j- `7 T4 L* Z
; l) J' y) c, I- a5 t
                @Override
7 Q. B" S+ B. }7 f* ]                public Map<String, String[]> getParameterMap() {
; h! \; |' H% k4 N  O                        try {7 [& R. |$ e+ u  p  {
                                if (request.getMethod().equalsIgnoreCase("POST")) {1 f7 e$ \+ o2 q" O" V
                                        request.setCharacterEncoding(encode);! N0 K+ S  L7 Z2 _
                                        return request.getParameterMap();
1 h% S8 K7 E% o5 q                                } else if (request.getMethod().equalsIgnoreCase("GET")) {
8 O8 P5 {4 Z2 j9 w: h1 s' ]0 f                                        Map<String, String[]> map = request.getParameterMap();
! u& t  w9 n7 [+ b2 H# z: R) O. w                                        if (isNotEncode) {  ?* n9 Q/ _- ~; B
                                                for (Map.Entry<String, String[]> entry : map.entrySet()) {
+ [4 _7 A5 A$ i5 N0 m) M                                                        String[] vs = entry.getValue();* v( k, ?: \+ F$ [  Z* S" `1 t
                                                        for (int i = 0; i < vs.length; i++) {
8 a7 b9 d, @* a' o5 |                                                                vs[i] = new String(vs[i].getBytes("iso8859-1"),
# }: w2 L1 ?/ v' [/ J; X                                                                                encode);
5 C' M9 H3 ^# m4 j8 C. ~" |; w                                                        }8 D4 }5 ~3 Y& o
                                                }4 H3 d$ n6 ~. k+ g( k
                                                isNotEncode = false;
8 P& z. S4 }1 _" l4 h( }! s$ W* P0 g                                        }9 R, j9 m6 s* k# k, V8 S8 k5 z! _6 Z- H
                                        return map;
# h6 O% v, W1 c* H& k$ U! d2 R                                } else {
& w8 i0 Z5 T& _! B: @; P+ O2 Y                                        return request.getParameterMap();5 |: S) M, B& K
                                }
  {& T1 ~* t! b: H) i                        } catch (Exception e) {7 @$ P4 S$ Q% f, L
                                e.printStackTrace();
7 V2 y" ~4 o& h) r, o( q7 E                                throw new RuntimeException(e);, e& G' K7 E7 |. W  a9 I
                        }
4 h+ r. Q9 X$ B4 d4 |                }
5 I4 X3 E2 F* [, g% l% m6 \  O5 K* U
                @Override
7 S6 T. ^* e4 V  a1 R                public String[] getParameterValues(String name) {
# E9 F9 T9 M" H. t, |+ ]9 `  W( _5 v  M                        return getParameterMap().get(name);2 Q' T+ a' Z9 |) X7 E- {7 ~& Y( u
                }
; ~1 F. ~* N/ |2 a6 t1 w) N# T( `9 x* T' `
$ J' A0 C. A! I! y                @Override
  y/ O! B0 y$ S; E. `4 h+ r1 U6 Z                public String getParameter(String name) {
2 K; \; W3 ?+ \0 A$ X. M5 Y                        return getParameterValues(name) == null ? null  U1 I5 c- h! w! W& q3 O1 @, A
                                        : getParameterValues(name)[0];; `% i" B$ C3 Z$ S
                }! n) S( X% s1 z$ F0 [8 {6 J
/ G! {8 a- R+ }! W. t1 [
        }
+ `. ?. N# v2 z( c. A9 I}& {5 D! t/ E# q9 X* y1 x

' S8 @$ g  B( A5 j$ ]/ h6 D  M" _7 Y/ w9 @: l9 ?+ h9 z9 T

科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、科帮网管理员和版主有权不事先通知发贴者而删除本文


JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

4

主题

0

听众

302

金钱

四袋长老

该用户从未签到

沙发
发表于 2016-09-27 19:12:39 |只看该作者
很不错呦每天都可以学到很多东西
回复

使用道具 举报

4

主题

0

听众

302

金钱

四袋长老

该用户从未签到

板凳
发表于 2016-09-27 19:12:55 |只看该作者
很不错呦每天都可以学到很多东西
回复

使用道具 举报

4

主题

0

听众

302

金钱

四袋长老

该用户从未签到

地板
发表于 2016-09-27 19:13:25 |只看该作者
很不错呦每天都可以学到很多东西
回复

使用道具 举报

4

主题

0

听众

302

金钱

四袋长老

该用户从未签到

5#
发表于 2016-09-27 19:13:47 |只看该作者
很不错呦每天都可以学到很多东西
回复

使用道具 举报

4

主题

0

听众

302

金钱

四袋长老

该用户从未签到

6#
发表于 2016-09-27 19:14:13 |只看该作者
很不错呦每天都可以学到很多东西
回复

使用道具 举报

4

主题

0

听众

302

金钱

四袋长老

该用户从未签到

7#
发表于 2016-09-27 19:14:25 |只看该作者
很不错呦每天都可以学到很多东西
回复

使用道具 举报

4

主题

0

听众

302

金钱

四袋长老

该用户从未签到

8#
发表于 2016-09-27 19:14:43 |只看该作者
很不错呦每天都可以学到很多东西
回复

使用道具 举报

35

主题

0

听众

457

金钱

四袋长老

该用户从未签到

9#
发表于 2016-10-06 23:48:02 |只看该作者
不错啊,处理乱码问题
回复

使用道具 举报

5

主题

0

听众

316

金钱

四袋长老

该用户从未签到

10#
发表于 2017-08-14 08:51:00 |只看该作者
不错不错不错,学习一下
回复

使用道具 举报

快速回复
您需要登录后才可以回帖 登录 | 立即注册

   

关闭

站长推荐上一条 /1 下一条

发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
快速回复 返回顶部 返回列表