JavaWeb之--监听器

1. 代理设计模式(引入)

1.什么是代理模式:
	当某一个对象发生某一个事件时,通知另一个对象,让另一个对象做某事
	
2.代理设计模式步骤
	定义好协议(也就是接口)
	遵守协议
	成为代理
3.监听器的内部使用的就是代理模式
4.代理模式的例子代码如下图所示

JavaWeb之--监听器_第1张图片

--------------------------------------------------------------------------------------------

2. 监听器简介

1.什么是监听器:
	能监听某个对象的状态变化的组件
	监听域对象的变化

2.监听器相关的概念
	1.事件源:
		被监听的对象
			request
			session
			servletContext
	2.监听器:
		监听事件源的对象
			有8个监听器
	3.注册监听器:
		监听器与事件源相绑定
	4.响应行为:
		监听到事件源变化时,去做什么事情
		
3.监听器划分:
	1.三个监听域对象的创建与销毁
		ServletContextListener
		HttpSessionListener
		ServletRequestListener
	2.三个监听域对象当中属性变化
		ServletContextAttributeListener
		HttpSessionAttributeListener
		ServletRequestAttributeListener
-----------------------------------------------------------------------------

3 _ ServletContext域监听器

3.1 编写一个监听器类去实现监听器接口,并覆盖该接口的方法

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class ServletContextListenerTest implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
  		 //获取到监听事件源
        //ServletContext servletContext =servletContextEvent.getServletContext();
        ServletContext servletContext2 =    (ServletContext)servletContextEvent.getSource();
        System.out.println("服务器启动成功");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("服务器销毁成功");
    }
}

3.2 需要在web.xml中进行配置(上面的代码只是定义了这么的一个监听器,并没有成为人家的监听器)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    
    //让ServletContextListenerTest成为ServletContext的监听器
    <listener>
        <listener-class>ServletContextListenerTest</listener-class>
    </listener>
    
</web-app>
--------------------------------------------------------------------------

4 - HttpSessionListener监听器

简介:
	1.监听HttpSession域的创建与销毁的监听器HttpSessionListener
	2.HttpSession的生命周期:
		第一次调用request.getSession时创建
		服务器关闭:需要把tomcat目录中的conf->context.xml 中的<Manager pathname="" />的注释打开
		session过期:session过期/失效(默认30分钟)是从最后一次操作结束时计时
		手动销毁:session.invadate
	3.应用场景:在线人数

4 .1 编写一个监听器类去实现监听器接口,并覆盖该接口的方法

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

public class HttpSessionListenerTest implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        System.out.println("sessionCreated---创建");
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        System.out.println("sessionDestroyed---销毁");
    }
}

4.2 需要在web.xml中进行配置(上面的代码只是定义了这么的一个监听器,并没有成为人家的监听器)

 <listener>
        <listener-class>HttpSessionListenerTest</listener-class>
 </listener>
---------------------------------------------------------------------------

5 .ServletRequestListener监听器

简介:
	1.监听ServletRequest域创建与销毁的监听器ServletRequestListener
	2.ServletRequest的生命周期:
		创建:每一次请求都会创建request
		销毁:请求结束
	3.应用场景:不常用,因为request请求太多太频繁了。

5.1编写一个监听器类去实现监听器接口,并覆盖该接口的方法

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

public class ServletRequestListenerTest implements ServletRequestListener{
    @Override
    public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
        System.out.println("requestDestroyed--销毁");
    }

    @Override
    public void requestInitialized(ServletRequestEvent servletRequestEvent) {
        System.out.println("requestInitialized--创建");
    }
}

5.2 需要在web.xml中进行配置(上面的代码只是定义了这么的一个监听器,并没有成为人家的监听器)

<listener>
        <listener-class>ServletRequestListenerTest</listener-class>
    </listener>

你可能感兴趣的:(javaweb)