javaweb监听器详解

监听器启动顺序

1.多个监听器时按照web.xml加载顺序执行

2.优先级:监听器→过滤器→servlet

监听对象划分

1.用于监听应用程序对象(ServletContext)的事件监听器

2.用于监听用户会话对象(HttpSession)的事件监听器

3.用于监听请求消息对象(ServletRequest)的事件监听器

web.xml加入监听

<listener>
	<listener-class>com.listener.FirstListener</listener-class>
</listener>

创建监听器

public class Listenerdemo implements ServletContextListener
{
    //启动时执行
	public void contextInitialized(ServletContextEvent servletcontextevent){
	
	}
    //结束时执行
	public void contextDestroyed(ServletContextEvent servletcontextevent){
	}
}

监听域对象自身的创建和销毁的事件监听器

ServletContext、HttpSession、ServletRequest

1.ServletContext主要用途:定时器、全局属性对象

public class Listenerdemo implements ServletContextListener
{
	public void contextInitialized(ServletContextEvent servletcontextevent){
		String initParam = servletcontextevent.getServletContext().getInitParameter("initParam");
		servletcontextevent.getServletContext().setAttribute("变量名","变量值");
	
	}
	public void contextDestroyed(ServletContextEvent servletcontextevent){
	}
}


web.xml配置
//配置全局变量
<context-param>
	//变量名称
	<param-name>initParam</param-name>
	//变量值
	<param-value>baidu</param-value>
</context-param>

2.HttpSession主要用途:统计在线人数、记录访问日志

public class HttpSessionListener implements HttpSessionListener{
	//浏览器访问执行
	public void sessionCreated(HttpSessionEvent httpsessionevent){
	
	}
	//销毁session时执行
	public void sessionDestroyed(HttpSessionEvent httpsessionevent){
	
	}

}


web.xml注册监听器
<listener>
	<listener-class>com.listener.MyHttpSessionListener</listener-class>
</listener>
//session超时时间
<session-config>
	<session-timeout>1</session-timeout>
</session-config>

3.ServletRequest用于读取参数和记录访问历史

public class MyServletRequestListener implements ServletRequestListener{
	
	public void requestInitialized(ServletRequestEvent servletrequestevent){
	//获取请求的参数
	String name = servletrequestevent.getServletRequest().getParameter("name");
	}
	
	public void requestDestroyed(ServletRequestEvent servletrequestevent){
	
	}
}

监听域对象的属性的增加和删除的事件监听器

 

  • ServletContexAttributeListener
  • HttpSessionAttributeListener  
  • ServletRequestAttributeListener

每个监听器中都有3个相同的方法

attributeAdded 方法

      当向被监听对象中增加一个属性时,web容器就调用事件监听器的attributeAdded方法进行响应,这个方法接收一个事件类型的参数,监听器可以通过这个参数来获得正在增加属性的域对象和被保存到域中的属性对象
各个域属性监听器中的完整语法定义为:

public void attributeAdded(ServletContextAttributeEvent scae)
public void attributeReplaced(HttpSessionBindingEvent  hsbe)
public void attributeRmoved(ServletRequestAttributeEvent srae)

attributeRemoved 方法

      当删除被监听对象中的一个属性时,web容器调用事件监听器的attributeRemoved方法进行响应
各个域属性监听器中的完整语法定义为: 

public void attributeRemoved(ServletContextAttributeEvent scae)

public void attributeRemoved (HttpSessionBindingEvent hsbe)

 public void attributeRemoved (ServletRequestAttributeEvent srae)

attributeReplaced 方法

      当监听器的域对象中的某个属性被替换时,web容器调用事件监听器的attributeReplaced方法进行响应
各个域属性监听器中的完整语法定义为:

 public void attributeReplaced(ServletContextAttributeEvent scae)
 public void attributeReplaced (HttpSessionBindingEvent  hsbe)
 public void attributeReplaced (ServletRequestAttributeEvent srae)

监听绑定到HttpSession域中的某个对象的状态的事件监听器

钝化:1,由Session.StandardManager:Tocat服务器关闭或Web应用程序被重新加载时把当前内存中的Session序列化到文件或数据库中。
2,由Session.Persistentmanager:除了1,中的两种,第3种可以将不常用的Session序列化到文件或数据库中。
(默认Tocat两种钝化驱动:org.apache.Catalina.FileStore和org.apache.Catalina.JDBCStore)
活化:服务器启动是把钝化的Seesion反序列化到服务器上
前提:先绑定session

绑定就是session.setAttribute()把属性保存到Session对象当中,解除绑定:session.getAttribute()

(1)HttpSession【Binding】Listener //绑定、解除绑定
a) 创建一个javabean类,实现接口【HttpSessionBindingListener,】无需到Web.xml注册
b) 2个方法
1) void valueBound 绑定 JSP: request.getsession.setattribute("ab",new javabean全名);
2) void valueUnbound 解除绑定 JSP: request.getsession().removeAttribute("ab")
(2)HttpSessionActivationListener //钝化(持久化到存储设备时)、活化(从存储设备恢复)
a) 在已经创建的javabean类,实现接口HttpSessionActivationListener无需到Web.xml注册
b) 2个方法
1) void sessionWillPassivate 钝化 JSP: 无需写,前提javabean进行绑定了
2) void sessionDidActivate 活化 JSP:request.getSession.getAttribute("ab");
需要【活化必须】再继承一个接口:【Serializable】

public void valueBound(HttpSessionBindingEvent arg0) {
System.out.println("valueBound:" + arg0.getName());
}

public void valueUnbound(HttpSessionBindingEvent arg0) {
System.out.println("valueUnbound:" + arg0.getName());
}

// 活化
public void sessionDidActivate(HttpSessionEvent se) {
System.out.println("sessionDidActivate:" + se.getSource());
}

// 钝化
public void sessionWillPassivate(HttpSessionEvent se) {
System.out.println("sessionWillPassivate:" + se.getSource());
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值