Day61 Listener监听器

Day61 Listener监听器

JavaWeb 三大组件(Servlet、Filter、Listener)

概念

监听器用于监听web应用中某些对象信息的创建、销毁、增加,修改,删除等动作的发生,然后作出相应的响应处理。当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法

常用于统计在线人数和在线用户,系统加载时进行信息初始化,统计网站的访问量等

监听器可以监听就是在 applicationsessionrequest 三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。

applicationServletContext 类型的对象,ServletContext 代表整个web应用,在服务器启动的时候,tomcat会自动创建该对象。在服务器关闭时会自动销毁该对象

创建步骤

1.创建类

2.实现指定的监听器接口中的方法

3.在web.xml文件中配置监听/在类上标注@WebListener 注解

JavaEE的监听器:

在这里插入图片描述

没有这个pageContext:上下文对象

1.第一大类监听器:监听请求对象的创建和销毁

监听域对象 创建与销毁的监听器

需要导包,servlet-api.jar

监听器接口 描述
ServletRequestListener 监听请求对象的创建、销毁
HttpSessionListener 监听会话对象的创建、销毁
ServletContextListener 监听全局域对象的创建、销毁

1.1 ServletRequestListener

请求对象的生命周期:

​ 创建:客户端发送请求,Tomcat会创建请求对象(请求对象可以存储数据,但是时间很短,在项目中要跳转时,需要临时数据,就存储在请求对象中)

​ 销毁:服务器返回响应,Tomcat会将请求对象销毁

MyServletRequestListener

package com.qf.listener01;

public class MyServletRequestListener implements ServletRequestListener {
   
   

    @Override
    public void requestInitialized(ServletRequestEvent servletRequestEvent) {
   
   

        //获取请求对象
        ServletRequest request = servletRequestEvent.getServletRequest();
        System.out.println("请求对象被创建了"+request);
    }
    @Override
    public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
   
   

        //获取请求对象
        ServletRequest request = servletRequestEvent.getServletRequest();
        System.out.println("请求对象被销毁了"+request);
    }


}

web.xml

也可以使用@WebListener注解

<listener>
	<listener-class>com.qf.listener01.MyServletRequestListener</listener-class>
</listener>

Welcome.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h1>Welcome.html</h1>

</body>
</html>

page01.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>page01.jsp</h1>
</body>
</html>

运行结果:

在这里插入图片描述

1.2 HttpSessionListener

监听会话域对象的创建和销毁

会话对象的生命周期:

​ 创建:服务端使用到会话对象才会被创建

​ 销毁:会话域对象过期时间到后会被销毁

注意:

1.客户端访问服务器里的html页面不会创建会话对象,因为没有使用到session

2.客户端访问服务器里的jsp页面会创建会话对象,因为使jsp里9大内置对象里有session

3.会话域对象过期时间默认30分钟

4.在web.xml中可以设置session的过期时间(时间单位:分钟),注意:最后一次使用session的时间往后移(闲置时间)

<session-config>
	<session-timeout>60</session-timeout>
</session-config>

经验:

session对象在服务器中存储,默认30分钟过期时间

JSESSIONID存储在客户端的Cookie中,默认过期时间是会话结束时

这样会导致,关闭客户端后,session对象还存活在服务端,相同的客户端再次开启并发送请求访问session时就会创建新的session对象,原有的session对象就视作为占用资源的无效对象

我们可以设置JSESSIONID的过期时间(和session对象的过期时间一致),用户关闭客户端再次开启后才能找到之前在服务器对应的session对象

package com.qf.listener01;

@WebListener
public class MyHttpSessionListener implements HttpSessionListener {
   
   
    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
   
   
        HttpSession session = httpSessionEvent.getSession();
        System.out.println("会话域对象被创建了:" + session.getId());
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
   
   

        HttpSession session = httpSessionEvent.getSession();
        System.out.println("会话域对象被销毁了:" + session.getId());
    }
}

运行结果:
在这里插入图片描述

Welcome.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A 北枝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值