1.什么是代理模式:
当某一个对象发生某一个事件时,通知另一个对象,让另一个对象做某事
2.代理设计模式步骤
定义好协议(也就是接口)
遵守协议
成为代理
3.监听器的内部使用的就是代理模式
4.代理模式的例子代码如下图所示
--------------------------------------------------------------------------------------------
1.什么是监听器:
能监听某个对象的状态变化的组件
监听域对象的变化
2.监听器相关的概念
1.事件源:
被监听的对象
request
session
servletContext
2.监听器:
监听事件源的对象
有8个监听器
3.注册监听器:
监听器与事件源相绑定
4.响应行为:
监听到事件源变化时,去做什么事情
3.监听器划分:
1.三个监听域对象的创建与销毁
ServletContextListener
HttpSessionListener
ServletRequestListener
2.三个监听域对象当中属性变化
ServletContextAttributeListener
HttpSessionAttributeListener
ServletRequestAttributeListener
-----------------------------------------------------------------------------
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>
--------------------------------------------------------------------------
简介:
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>
---------------------------------------------------------------------------
简介:
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>