监听器的使用

java web中监听器的使用

使用Listener类
当java  web应用程序在web容器中运行时,在java web应用程序内部会不断发生各种事件,例如web应用的启动,暂停,销毁等。以及web应用中session开始和结束
这些web应用对开发者来说通常是看不见的。其实在servletapi中。提供了大量的监听器来监听web应用事件,其中Listener类是最为常用的。此类允许当web内部事件发生时回掉事件
监听器的方法。

2.Listener基础。
在java  web应用程序中使用listener时,需要先定义Listener实现类,然后通过Annoation或在web.xml文件中进行配置Listener
与AWT事件编程是完全相同的。如下是web事件监听器的接口。
1)ServletContextListener监听web应用的启动和关闭
2)ServletContextAttributeListener监听ServletContext范围内属性的改变
3)ServletRequestListener监听用户的请求
4)ServletRequestAttributeListener监听ServletRequest范围内(request)内属性的变化
5)HttpSessionListener监听用户session的开始和结束
6)HttpSessionAttributeListener监听HttpSession范围内session内属性的改变。
Filter过滤器,如果有一个页面配置了多个Filter,其执行顺序为,在web.xml中配置的顺序,首先执行完成的过滤器是,最后配置的那个过滤器。

实例一、创建一个ServletContex的监听器。
ServletContextListener是最常用的Listener,可以在当前web应用被加载
时对web应用的相关资源进行初始化操作:创建数据库连接池,创建spring的ioc容器,读取当前web应用的初始化参数

步骤如下:
1.创建一个类HelloServletContextListener实现ServletContextListener接口
晚上两个接口中所包含的两个方法。
2.配置该监听器。
<!-- 配置Listener -->
  <listener>
  <listener-class>com.listener.test.HelloServletContextListener
  </listener-class>
  </listener>

实例二、
ServletRequestListener&HttpSessionListener
步骤同上也可以实现相关接口监听器的实现

最后利用ServletRequestListener,HttpSessionListener,以及ServeletContextListener,可以把
application,session,request的生命周期进一步作为了解。
request:是一个请求,当一个响应返回时,即被销毁。当发一个请求时,
当浏览器访问到某个页面时,只是发出一个request的请求。发送完毕返回之后就立即销毁,此外,它不能带有任何的
请求参数。平常的一个request.setAttribute是发送的一个request的请求对象。
关于session对象的创建时间问题。
1.当浏览器第一次访问web应用的一个jsp或者servlet时,且该jsp或servlet中还需要创建
创建session对象。此时才会创建session对象,默认情况下每个jsp页面这个属性都是true  session="true",所以当某个web应用在
某个浏览器中第一次访问某个页面都会创建一个session对象。
2.session的销毁:
session的销毁有如下三种方法,一种是调 session.invalidate().第二种是夫妻关闭当前web应用。
但是关闭当前web应用存在session持久化问题,所以它并不能从根本上解决关闭sesion的问题
第三种是session过期,设置过期时间为:session.setMaxInactiveInterval(300).单位是秒
3.关闭浏览器并不意味着session被销毁。还可以通过sessionID找到服务器对象。
4.application贯穿于当前web应用的整个生命周期,当前web应用被加载时创建application。当前web应用被卸载时销毁application对象
 


Listener小结
监听域对象(pageContext request,application)自身的创建和销毁的事件监听器
1.ServletContextListener
2.ServletRequestListener
3.HttpSessionListener
在每个监听器中都有两个方法。
1)在域对象创建后立即被调用的方法
2)在域对象销毁前被调用的方法
监听ServletContext,HttpSession,ServletRequest中添加属性,替换属性,移除属性的时间监听器
1)以ServletRequestAttributeListener为例
有如下三个方法添加属性,移除属性,替换属性
attributeAdded(),attributeRemoved(),attributeReplace()
api: ServletRequestAttributeEvent
getName()获取属性名字
getValue()获取属性的值
HttpSessionBindListener
1)监听实现该接口的java类对象被绑定到sesion或从session中解除绑定事件
当前对象被绑定到sesion时调用该方法
public void valuedBound(HttpSesoinBindingEvent,event)
当前对象从sesion中解除绑定调用该方法。
public void valueUnboud(HttpSessionindingEvent event)
注意该事件不需要再web.xml文件中进行配置。
HttpSessionBindEvent
getName();
getValue();
getSession();
HttpSessionActivationListener(该监听器较少被使用)
监听实现了该接口和Seralizable接口(若不实现该接口,则只能写到磁盘上都不出来)
的java类对象
典例。
利用HttpSessonListener可以和知道是否有新访客访问当前we应用
public vidsessionCreateed()被调用说明有新访客到来
public' void sessioDestroye()被调用说明访客离开

可以使用一个jsp页面显示当前访客的ip

访客共有**人,匿名**人,注册用户**人
190.169.213(匿名) 剔除

剔除效果:若真该访问一个必须登录的效果,在点击刷新,发现该页面无法访问,而先需要登录。
剔除操作:即让其session失效。
原文地址:https://www.cnblogs.com/min-yu/p/11132835.html