1.ServletContextListener:
1).what:监听ServletContext对象被创建或销毁的Servlet监听器
2).how:
-创建一个实现了ServletContextListener的类,并且实现其中的两个方法
public class HelloServletContextListener implements ServletContextListener{
-在web.xml文件中配置Listener
<listener>
<listener-class>com.zc.javaweb.listener.HelloServletContextListener</listener-class>
</listener>
3).why:ServletContextListener是最常用的Listener,可以在当前WEB应用被加载时对当前WEB应用的相关资源进行初始化操作;
创建数据库连接池,创建Spring的IOC容器,读取当前WEB应用的初始化参数..
//ServletContext对象被创建(即,当前WEB应用被加载时)的时候,Servlet容器调用该方法
public void contextInitialized(ServletContextEvent sce)
//ServletContext对象被销毁(即,当前WEB应用被卸载时)的时候,Servlet容器调用该方法
public void contextDestroyed(ServletContextEvent sce)
ServletContextEvent中的 getServletContext()获取ServletContext
2.ServletRequestListener & HttpSessionListener
1).和ServletContextListener类似。
2).利用ServletRequestListener、HttpSessionListener以及ServletContextListener可以把request,session及
application的生命周期进一步的做一个了解
-request:是一个请求,当一个响应返回时,即被销毁,当发送一个请求时被创建。注意,请求转发的过程是一个
request对象
-session:当第一次访问WEB应用的一个JSP或Servlet时,且该JSP或Servlet中还需创建session对象。
此时服务器会创建一个session对象。
session销毁:session过期,直接调用session的invalidate方法,当前web应用被卸载(session可以被持久化)
*关闭浏览器,并不意味着session被销毁,还可以通过sessionid找到服务器中的session对象。
-application:贯穿当前WEB应用的生命周期。
JSESSIONID=dadadjnkj23313dad313
http://localhost:8080/Listener/session.jsp;jsessionid=dadadjnkj23313dad313
当前WEB应用被加载时创建application对象,当前WEB应用被卸载时销毁application对象。
3.***AttributeListener
1).监听ServletContext, HttpSession, ServletRequest 中添加属性,替换属性,移除属性的事件监听器。
2).以ServletRequestAttributeListener 为例
//移除属性时被调用
public void attributeRemoved(ServletRequestAttributeEvent srae) {
System.out.println("request移除属性");
}
//添加属性时被调用
public void attributeAdded(ServletRequestAttributeEvent srae) {
System.out.println("request添加属性");
}
//替换属性时被调用
public void attributeReplaced(ServletRequestAttributeEvent srae) {
System.out.println("request替换属性");
}
3).这三个监听器相对而言较少会使用。
ServletContextAttributeListener
HttpSessionAttributeListener
ServletRequestAttributeListener
4).API:
ServletRequestAttributeListener:
>getName()获取属性的名字
>getValue()获取属性的值
4.HttpSessionBindingListener
1).监听实现了该接口的Java类的对象被绑定到session或从session中接触绑定的事件。
//当前对象被绑定到session时调用该方法
public void valueBound(HttpSessionBindingEvent event) {
System.out.println("绑定session");
Object value=event.getValue();
System.out.println(value==this);
System.out.println(event.getName());
// System.out.println(event.getSource());
// System.out.println(event.getClass());
// System.out.println(event.getSession());
}
//当前对象从session中解除绑定调用该方法。
public void valueUnbound(HttpSessionBindingEvent event) {
System.out.println("session解除绑定");
}
2).注意:该监听器,不需要再web.xml文件中配置。JavaBean中以携带该方法
3).HttpSessionBindingEvent:
getName()
getValue()
getSession()
4).该监听器较少被使用
5.HttpSessionActivationListener
1).监听实现了该接口和Serializable接口(若不实现该接口,则只能写到磁盘上,但不能读取出来。)的Java类的对象随session钝化和活化事件
>活化:从磁盘中读取session对象
>钝化:向磁盘中写入session对象
>session对象存储在tomcat服务器的work\Catalina\localhost\contextPath目录下.SESSION.SER
2).注意:该监听器,不需要再web.xml文件中配置。JavaBean中以携带该方法
3).
//活化之后被调用
public void sessionDidActivate(HttpSessionEvent se) {
System.out.println("从磁盘中读取出来");
}
//钝化之后被调用
public void sessionWillPassivate(HttpSessionEvent se) {
System.out.println("从内存中写到磁盘上.. ");
}
4).该监听器较少被使用
6.统计在线访客,可以把访客踢出其所在的session
1).利用HttpSessionListener 可以知道是否有新用户访问当前的WEB应用,若
public void sessionCreated(HttpSessionEvent se);被调用,说明有新访客到来;若
public void sessionDestroyed(HttpSessionEvent se);被调用,说明访客离开。
2).可以使用JSP页面显示当前的访客
访问共有xx人,其中匿名访客xx人,注册用户xx人。
访客IP 操作
192.168.3.12(匿名客户) 踢出(下次访问需登录)
192.168.3.13 踢出
192.168.3.14 踢出
牙牙乐(登录客户) 踢出(下次访问需登录)
192.168.3.15 踢出
阿萨斯 踢出
192.168.3.18 踢出
踢出效果为:若正在访问一个必须登录的页面,在点击刷新,发现该页面无法访问,需先登录。
3).踢出操作:即让其session失效
2万+

被折叠的 条评论
为什么被折叠?



