java中的监听器Listener

本文详细介绍了Sun公司定义的八大监听器,包括如何在Web开发中使用这些监听器来监听不同事件,以及如何通过实现特定接口并在web.xml中配置来开发自定义监听器。文章还提供了具体的代码示例,展示了如何监听HTTP会话的创建和销毁,以及会话属性的变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.概述

sun公司定义了八大监听器,用来监听web开发中对应的事件

2.监听器开发步骤

(1)写一个类实现监听器对应的接口

public class MyHttpSessionListener implements HttpSessionListener 

(2)再web.xml中配置监听器

    <!--配置监听器-->
    <listener>
        <listener-class>cn.tedu.listener.MyHttpSessionListener</listener-class>
    </listener>

3.八大监听器介绍

监听三大作用域创建和销毁的监听器(三个)

ServletContextListener

HttpSessionListener

ServletRequestListener

这三个监听器中都提供了两个方法,分别用来监听对应域的创建和销毁

监听三大作用域中属性变化的监听器(三个)

ServletContextAttributeListener

HttpSessionAttributeListener

ServletRequestAttributeListener

这三个监听器中都提供了三个方法,分别用来监听对应域中属性的增加、删除、修改

监听session中对象变化的监听器和session钝化的监听器(此处只做了解)

代码示例:

先在类SessionDemo1中设置session的值,然后sessiondemo2中修改session中的值,sessiondemo3杀死session。

类MyHttpSessionListener继承HttpSessionListener监听域对象的创建销毁。

类MySessionAttributeListener继承HttpSessionAttributeListener监听域对象中属性的变化。

依次执行sessiondemo1,sessiondemo2,sessiondemo3,。监听器输出的结果如下:

所有测试类的代码如下:

sessiondemo1

package cn.tedu.session;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/**
 * @author wyy
 * @date 2020/6/19 12:29
 */
@WebServlet(name = "SessionDemo1",urlPatterns = "/sessiondemo1")
public class SessionDemo1 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取session
        HttpSession session = request.getSession();
        //向session中存入域属性
        session.setAttribute("friend","李四");
        session.setAttribute("score",60);
        System.out.println("sessiondemo1:"+session.getAttribute("friend"));
    }
}

sessiondemo2

package cn.tedu.session;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * @author wwy
 * @date 2020/6/19 12:29
 */
@WebServlet(name = "SessionDemo2",urlPatterns = "/sessiondemo2")
public class SessionDemo2 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取session
        HttpSession session = request.getSession();
        //从session中获取域属性
        String friend = (String) session.getAttribute("friend");
        int score = (int) session.getAttribute("score");
        //修改属性
        session.setAttribute("friend","张三");
        //删除属性
        session.removeAttribute("friend");
        System.out.println("sessiondemo2:"+friend+"@"+score);
    }
}

sessiondemo3

package cn.tedu.session;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * @author wwy
 * @date 2020/6/19 12:29
 */
@WebServlet(name = "SessionDemo3",urlPatterns = "/sessiondemo3")
public class SessionDemo3 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //杀死session
        request.getSession().invalidate();
    }
}

MyHttpSessionListener

package cn.tedu.listener;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
 * 监听器SessionListener 示例
 * @author wyy
 * @date 2020/6/22 17:03
 */
public class MyHttpSessionListener implements HttpSessionListener {
    /**
     * 当session被创建时触发此方法
     * @param httpSessionEvent 被创建的事件,可以设置一些属性等 如:
     *  httpSessionEvent.getSession().setAttribute("msg","success");
     */
    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        System.out.println("session被创建了");
    }

    /**
     * 当session销毁时触发此方法
     * @param httpSessionEvent 被创建的事件,可以设置一些属性等
     */
    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        System.out.println("session被销毁了");
    }
}

MySessionAttributeListener

 

package cn.tedu.listener;

import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
/**
 * 监听三大作用域中属性变化的监听器示例
 * @author wyy
 * @date 2020/6/22 17:19
 */
public class MySessionAttributeListener implements HttpSessionAttributeListener {
    @Override
    public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("属性增加了");
    }

    @Override
    public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("属性删除了");
    }

    @Override
    public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("属性修改了");
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值