我的日常

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 盖世程序员 > java中过滤器与监听器的区别
总共48087条微博

动态微博

查看: 3322|回复: 3

java中过滤器与监听器的区别

[复制链接]

326

主题

72

听众

999

金钱

实习版主

该用户从未签到

优秀版主

跳转到指定楼层
楼主
发表于 2014-03-18 22:29:55 |只看该作者 |倒序浏览
过滤器
- l+ A" m3 B* v/ Y0 L  D        1)什么是过滤器" B2 t5 V- B9 \$ T
        servlet规范当中定义的一种特殊的类,用于对
( u: t& t+ X3 _) z        servlet容器的调用过程进行拦截。0 T# ^( Z, u% C2 |
        2)怎样写一个过滤器9 n5 o  e) I( q) E
                 step1 写一个java类,实现一个Filter接口。, t& \" N8 q1 N8 W
                 step2 在doFilter方法里,实现过滤的逻辑。
- d: N1 L- X% |1 `                 step3 配置(web.xml)。8 m0 `0 k, h: K2 I
        3)配置初始化参数
6 P) M* i" J; P  M                step1/ V  |' H& X: }+ b2 X: X7 L
                        web.xml中,使用<init-para>元素来配置初始
/ ?: x) M2 V+ t1 t) @" T1 y. N                        化参数
; R- V- M- x4 f+ H: _$ H                step24 n! A( l- Z" ]. ~% t  K1 p
                        在Filter类当中," o3 U; A$ ^* z9 q: U+ }8 ?
                        使用FilterConfig.getInitParameter(String paraName);
% u; s! S/ m) Z. x# J$ n/ ]* p                        来获得初始化参数。" B4 y5 b% y6 X$ l6 U+ U( Q+ @
        4)过滤器的优先级
8 ~- Q" P% q! c                        当有多个过滤器都满足过滤的条件时,依据
; M: l( ~+ D/ |# B  X: U1 X                        <filter-mapping>的先后顺序依次执行。* }' o; f: i' k
        5)过滤器的优点+ k9 N6 T9 N9 f, V
                        a,可以将多个web组件相同的逻辑写在一个
( Y0 r# n8 S: J/ Y. M  T                过滤器当中,方便代码的维护。
1 z8 f! j" W( h/ g' P, g6 a5 x                        b,可以实现代码的“可插拔性"。给一个软件  H# J' \9 V5 v% C* m. Y
                        增加或者减少某个功能,不会影响到已经存在
; r! E: D7 N& O  y0 y9 @) `                        的功能。. J$ q# v1 i/ e. V, f
        练习:
0 F. B  b1 \$ @; {3 u( W/ `* S                写一个CommentFilter2过滤器,该过滤器会
$ h% i/ g+ V9 l1 Z/ I        检查comment参数值是否长度超过指定的范围(
  b( _! J: G" |* D& b        该范围使用初始化参数来配置,比如20)。如果, P8 n( e  v' M5 q# [
        超过长度范围,提示用户,否则,显示comment参数, O7 F# V4 a5 ?( T# Y# [
        值。. ^$ ]! C( |8 \9 q0 {5 i: \
         & a9 p: U/ i2 |2 N5 M; Y5 }
监听器6 `- Z/ o9 p1 p9 G/ m: v; d
        1)什么是监听器?
8 m6 W7 O2 c$ T& N                servlet规范当中定义的一种特殊的类,
' @& H6 Q+ g: i/ ^0 p# X& r        作用是监听容器当中产生的一些事件并进行6 }  Z* S9 E0 Q7 q+ B
        相应的处理。
! b: g- G, K8 v( B4 \! h0 l6 q                容器产生的事件指的是两大类事件:
, C' s$ |' d; J2 ?( G6 R        第一大类:生命周期相关的事件,指的是当
8 K  u7 v% s# c        容器创建或者销毁request,session,# n% R7 H* n) v0 ]& q
        ServletContext对象时产生的事件。! S+ c9 u% e; O/ E' V4 w& H" g
        第二大类:绑订事件,指的是当调用request,
" b5 x/ ~7 H( J2 ~/ U6 j1 n- W9 f: t        session,ServletContext对象的setAttribute,7 M) o3 A( X: {3 J
        removeAttribute时产生的事件。
) i- p% s% A( D2 v4 T. Q  K  S        2)如何写监听器% @1 B- G1 k# M
                step1 写一个java类,
( X$ k' T  \: ~& k" X: Q                实现特定的监听器接口类(依据要监听的事件类型)。
2 g3 i5 r7 Y, d  {                step2 在接口声明的方法中,实现监听的逻辑。' u4 y2 U+ @4 L: K8 x+ W
                step3 配置(web.xml)。2 d3 N2 [7 ~! G+ W6 v
        3)ServletContext接口
: \; t3 a. V4 z                web服务器在启动时,会为每一个已经部署的应用
, m$ c6 Z0 r' T4 S) U+ h        创建唯一的一个ServletContext实例。该实例会一直
5 O9 y$ h( p" j) z- a+ q: c        存在,除非服务器关闭或者应用被删除。9 n5 t* T* G, e' @% t
                a,如何获得ServletContext实例。
% a4 w8 n5 P- e, k- T( \0 N                GenericServlet提供了getServletContext()方法。
; G# V% B) t5 M& g                HttpSession提供了getServletContext()方法。
: K% ~0 `  c  y) G1 W                ServletConfig提供了getServletContext()方法。; H5 ~& H  ?, }/ y* A) b
                b,常用方法
' N$ `2 x) c) q* r                        b1,绑订数据8 |& H) t0 T1 x
                                setAttribute(String name,Object obj);+ m/ s# N! c: |2 A2 Q
                                getAttribute(String name);
) X  m* ~1 W6 A/ N                                removeAttribute(String name);- f1 Y5 @; I: ^* N- y5 h
                        b2,配置全局的初始化参数
8 I. b* ]/ c1 f2 _! R                                step1 在web.xml中,使用<context-param>
! u" T0 o* M( b                        配置的参数,可以被所有的servlet共享。) j5 m& ]; I8 R/ p4 M- U
                                step2 使用  ]- ?" J  Z/ @3 Y' H9 e5 m6 b5 G$ Z+ S
                                String ServletContext8 J, W" _; `  j# }1 C/ e
                                .getInitParameter(String paraName);/ T2 Z# ?, P1 E, q; x
                        b3,依据逻辑路径获得实际部署时的物理路径。
$ s3 \2 G0 x2 L2 G                                String ) W4 N4 b. ~5 H  v) i$ I$ C1 V' F
                                ServletContext.getRealPath(String url);        . @7 i, s  Q* D# M2 a

) x% E" w+ @7 x& J: a

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


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

2

主题

0

听众

148

金钱

三袋弟子

该用户从未签到

沙发
发表于 2015-10-15 13:48:49 |只看该作者
看了看  学习学习  哈哈哈哈
回复

使用道具 举报

woniu 实名认证   

2

主题

0

听众

330

金钱

四袋长老

该用户从未签到

板凳
发表于 2016-04-12 12:19:45 |只看该作者
这个项目太棒勒!下下来学习下!
回复

使用道具 举报

5

主题

0

听众

316

金钱

四袋长老

该用户从未签到

地板
发表于 2017-08-12 20:44:59 |只看该作者
不错不错不错不错
回复

使用道具 举报

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

   

关闭

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

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