java中的监听器Listener

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("属性修改了");
    }
}

 

Java监听器Listener)是一种广泛应用的设计模式,它用于处理程序的事件。通过监听器,我们可以在事件发生时执行一些特定的操作。在Java,我们可以使用内置的监听器API或自定义监听器实现此功能。 下面是Java的常见监听器类型: 1. ActionListener:用于处理按钮、菜单等组件的动作事件。 2. WindowListener:用于处理窗口事件,如窗口打开、关闭等。 3. MouseListener:用于处理鼠标事件,如单击、双击、拖动等。 4. KeyListener:用于处理键盘事件,如键盘按下、释放等。 5. FocusListener:用于处理组件焦点事件,如获得或失去焦点等。 使用监听器的步骤如下: 1. 创建一个监听器类,该类实现了相应的监听器接口。 2. 在需要监听的组件上添加监听器对象。 3. 在监听器实现相应的方法来处理事件。 下面是一个简单的示例代码,演示了如何使用ActionListener监听器处理按钮单击事件: ```java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ButtonListenerDemo implements ActionListener { private JFrame frame; private JButton button; public ButtonListenerDemo() { frame = new JFrame("Button Listener Demo"); button = new JButton("Click Me"); button.addActionListener(this); frame.getContentPane().add(button); frame.pack(); frame.setVisible(true); } public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(frame, "Button Clicked!"); } public static void main(String[] args) { new ButtonListenerDemo(); } } ``` 在上面的代码,我们创建了一个ButtonListenerDemo类,该类实现了ActionListener接口。在构造函数,我们创建了一个按钮对象,然后将该按钮添加到窗口,并将该按钮的监听器设置为当前类。当用户单击按钮时,程序将调用actionPerformed()方法来处理事件,该方法将弹出一个消息框来告诉用户按钮已被单击。 总之,监听器Java编程非常重要的组成部分。使用监听器,我们可以轻松地处理程序的事件,并实现交互式用户界面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值