java_web_5-filter-listener_第1页
java_web_5-filter-listener_第2页
java_web_5-filter-listener_第3页
java_web_5-filter-listener_第4页
java_web_5-filter-listener_第5页
已阅读5页,还剩18页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java WebJava Web开发开发第五课第五课 FilterFilter与与ListenerListener讲师:李玉明讲师:李玉明目标lFilterlListenerFilterlFilter技术是servlet2.3增加的功能;lWEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp,Servlet,静态图片文件或静态html文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。示意图lFilter和servlet的对应关系为多对多的关系:可以配置一个filter到一个或多个servlet;一个

2、servlet可以有多个filter。l一个filter必须实现javax.servlet.Filter接口并定义三个方法:1.voidinit(FilterConfigconfig);2.voiddestroy();3.voiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)FilterFileter生命周期Filter的创建和销毁由WEB服务器负责。1在应用启动的时候装载Filter类(与Servlet的load-on-startup配置效果相同)。2容器创建好Filter对象,调用init()方法。接着被Web

3、容器保存进应用级的集合容器中,等待用户访问资源。3当用户访问的资源正好被Filter的url-pattern拦截时,容器会取出Filter类调用doFilter方法,下次或多次访问被拦截的资源时,Web容器会直接取出指定Filter对象实例调用doFilter方法(Filter对象常驻留Web容器了)。4当应用服务被停止或重新装载了,则会执行Filter的destroy方法,Filter对象销毁。init与destroy方法只会执行一次。示例publicclassLogFilterimplementsFilterFilterConfigconfig;publicvoidinit(FilterC

4、onfigconfig)this.config=config;publicFilterConfiggetFilterConfig()returnconfig;publicvoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)ServletContextcontext=getFilterConfig().getServletContext();longbef=System.currentTimeMillis();chain.doFilter(req,res);/nochainparameterneededherelo

5、ngaft=System.currentTimeMillis();context.log(Requestto+req.getRequestURI()+:+(aft-bef);在web.xml中配置logcom.mrk.LogFilterlogservletname部署注意事项1filter-mapping标签中servlet-name与url-pattern。Filter不仅可以通过url-pattern来指定拦截哪些url匹配的资源。还可以通过servlet-name来指定拦截哪个指定的servlet(专门为某个servlet服务了,servlet-name对应Servlet的相关配置)部署

6、注意事项2filter-mapping标签中dispatcher。指定过滤器所拦截的资源被Servlet容器调用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST。用户可以设置多个子元素用来指定Filter对资源的多种调用方式进行拦截。REQUEST:当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问或ERROR情况时,那么该过滤器就不会被调用。INCLUDE:如果目标资源是通过RequestDispatcher的include()方法访问时,则过滤器

7、被调用。除此之外,不会被调用。FORWARD:如果目标资源是通过RequestDispatcher的forward()方法访问时,则过滤器将被调用,除此之外,不会被调用。ERROR:在跳转到error.jsp时,若过滤器配置了ERROR的dispather那么则会拦截,否则不会拦截。Listenerl目前Servlet中提供了两类6种事件的观察者接口:4个EventListeners类型接口ServletContextAttributeListenerServletRequestAttributeListenerServletRequestListenerHttpSessionAttribut

8、eListener2个LifecycleListeners类型接口ServletContextListenerHttpSessionListener。用HttpSessionListener统计在线用户数l思考:当一个用户登入一个WEB应用时,就开始一个会话;当会话被销毁,则表示用户离开了WEB应用。publicclassOnlineCounterListenerimplementsHttpSessionListenerpublicvoidsessionCreated(HttpSessionEventevent)HttpSessionsession=event.getSession();Ser

9、vletContextcontext=session.getServletContext();Integercount=(Integer)context.getAttribute(count);if(null=count)count=newInteger(1);elsecount=newInteger(count+1);context.setAttribute(count,count);session.setMaxInactiveInterval(60);System.out.println(Anewsessioniscreated.sessionidis+session.getId();pu

10、blicvoidsessionDestroyed(HttpSessionEventevent)HttpSessionsession=event.getSession();ServletContextcontext=session.getServletContext();Integercount=(Integer)context.getAttribute(count);if(null=count)return;elsecount=newInteger(count-1);context.setAttribute(count,count);/session.setMaxInactiveInterva

11、l(60);System.out.println(Anewsessionistobedestroyed.sessionidis+session.getId();Listener.jsp当前在线人数为:Web.xmlcom.mrk.listener.OnlineCounterListener用HttpSessionBindingListeners统计在线用户人数l单例类OnlineUsers:表示在线用户名单lUser类实现了HttpSessionBindingListeners接口(不需要在web.xml中注册)publicclassOnlineUsersprivatestaticfinalO

12、nlineUsersonlineUsers=newOnlineUsers();privateListusers=newArrayList();publicstaticOnlineUsersgetInstance() returnonlineUsers;publicvoidadd(Stringname)users.add(name);publicvoidremove(Stringname)users.remove(name);publicListgetUsers() returnusers;publicintgetCount() returnusers.size();publicclassUse

13、rimplementsHttpSessionBindingListenerprivateOnlineUsersonlineUsers=OnlineUsers.getInstance();privateStringname=null;publicUser(Stringname) =name;publicvoidsetName(Stringname) =name;publicStringgetName() ;publicvoidvalueBound(HttpSessionBindingEventevent)onlineUsers.add(name);System.out.println(name+isboundwithasession);publicvoidvalueUnbound(HttpSessionBindingEventevent)onlineUsers.remove(name);System.out.println(name+isunboundwithasess

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论