监听器Listener的基础知识

Listener

1、作用

监听某一个事件的发生。 状态的改变。

2、监听器的内部机制

其实就是接口回调.

2.1、监听机制举例

A在执行循环,当循环到5的时候, 通知B。

事先先把一个对象传递给 A , 当A 执行到5的时候,通过这个对象,来调用B中的方法。 但是注意,不是直接传递B的实例,而是传递一个接口的实例过去。

3、小总结

总共有8个 划分成三种类型

使用监听器的步骤:3.1、定义一个类,实现接口。3.2、注册 | 配置监听器

4、第一类监听器

4.1、作用:监听三个作用域创建和销毁

4.2、request ---httpServletRequest

4.2.1、实现类

package com.web.listener01;

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;

public class MyRequestListener implements ServletRequestListener {
	@Override
	public void requestDestroyed(ServletRequestEvent sre) {
		System.out.println("servletrequest 销毁了");
	}

	@Override
	public void requestInitialized(ServletRequestEvent sre) {
		System.out.println("servletrequest 初始化了");
	}
}

4.2.2、web.xml

<listener>
    <listener-class>com.web.listener01.MyRequestListener</listener-class>
</listener>

4.2.3、request的创建和销毁

request创建:

        访问服务器上的任意资源都会有请求出现。

        访问 html: 会
        访问 jsp:    会
        访问 servlet : 会 

request销毁:

        服务器已经对这次请求作出了响应。

4.3、session ---httpSession

4.3.1、实现类

package com.web.listener01;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class MySessionListener implements HttpSessionListener {

	@Override
	public void sessionCreated(HttpSessionEvent se) {
		System.out.println("创建session了");
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent se) {
		System.out.println("销毁session了");
	}
}

4.3.2、web.xml

<listener>
    <listener-class>com.web.listener01.MySessionListener</listener-class>
</listener>

4.3.3、session的创建和销毁

session的创建
        只要调用getSession

        html:        不会
        jsp:        会      getSession();
        servlet:     会

session的销毁
        超时  30分钟
        
        非正常关闭 销毁

        正常关闭服务器(序列化)

4.4、aapplication --- ServletContext

4.4.1、实现类

package com.web.listener01;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyServletContextListener implements ServletContextListener {

	//初始化的时候调用
	@Override
	public void contextInitialized(ServletContextEvent sce) {
		System.out.println("servletContext 初始化了...");
	}

	//销毁的时候调用
	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		System.out.println("servletContext 销毁了...");

	}

}

4.4.2、web.xml

<listener>
    <listener-class>com.web.listener01.MyServletContextListener</listener-class>
</listener>

4.4.3、servlet的创建和销毁

servletcontext创建:

        1. 启动服务器的时候

    servletContext销毁:

        1. 关闭服务器. 从服务器移除项目

5、第二类监听器

5.1、作用:监听三个作用域属性状态变更,即可以监听在作用域中值 添加 | 替换 | 移除的动作。

在这里只举一个例子,因为这一类中的三个是极其类似的

5.2、session --- HttpSessionAttributeListener

5.2.1、实现类

package com.web.listener02;

import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

public class MyHttpSession02 implements HttpSessionAttributeListener {

	@Override
	public void attributeAdded(HttpSessionBindingEvent se) {
		System.out.println("属性被添加进来了");

	}

	@Override
	public void attributeRemoved(HttpSessionBindingEvent se) {
		System.out.println("属性被移除了");

	}

	@Override
	public void attributeReplaced(HttpSessionBindingEvent se) {
		System.out.println("属性被替换了");
		
	}

}

5.2.2、web.xml

<listener>
  	<listener-class> com.web.listener02.MyHttpSession02</listener-class>
</listener>

5.3.3、用jsp简单测试下

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

	<%
		session.setAttribute("name", "aobama");
	
		session.setAttribute("name", "zhangsan");
		
		session.removeAttribute("name");
	%>

</body>
</html>

5.4、小结

5.4.1、servletContext --- ServletContextAttributeListener

5.4.2、request --- ServletRequestAttributeListener

5.4.3、session --- HttpSessionAttributeListener

6、第三类监听器(转载)

6.1、作用:监听httpSession里面存值的状态变更

这一类监听器不用注册。

  • HttpSessionBindingListener

监听对象与session 绑定和解除绑定 的动作

1. 让javaBean 实现该接口即可
​
        @Override
        public void valueBound(HttpSessionBindingEvent event) {
            System.out.println("对象被绑定进来了");
        }
    
        @Override
        public void valueUnbound(HttpSessionBindingEvent event) {
            System.out.println("对象被解除绑定");
        }
  • HttpSessionActivationListener

用于监听现在session的值 是 钝化 (序列化)还是活化 (反序列化)的动作

  • 钝化 (序列化)

把内存中的数据 存储到硬盘上

  • 活化 (反序列化)

把硬盘中的数据读取到内存中。

  • session的钝化活化的用意何在

session中的值可能会很多, 并且我们有很长一段时间不使用这个内存中的值, 那么可以考虑把session的值可以存储到硬盘上【钝化】,等下一次在使用的时候,在从硬盘上提取出来。 【活化】

  • 如何让session的在一定时间内钝化.

做配置即可

1. 在tomcat里面 conf/context.xml 里面配置
​
        对所有的运行在这个服务器的项目生效  
​
2. 在conf/Catalina/localhost/context.xml 配置
​
        对 localhost生效。  localhost:8080
​
3. 在自己的web工程项目中的 META-INF/context.xml
​
        只对当前的工程生效。
​
    maxIdleSwap : 1分钟不用就钝化
    directory :  钝化后的那个文件存放的目录位置。 
​
        D:\tomcat\apache-tomcat-7.0.52\work\Catalina\localhost\ListenerDemo\itheima
​
    <Context>
        <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
            <Store className="org.apache.catalina.session.FileStore" directory="itheima"/>
        </Manager>
    </Context>

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值