Listener

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失效
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值