全网最详细:监听器listener(跟着宝哥学java:listener)

1 listener概念

listener:监听器
          对域对象(servlet的三大域:request、session、servletContext)进行监听
分类:
    域对象生死监听器:::监听三大域的生命周期
    域属性监听器:::::监听三大域属性的增删改

2 生死监听器具体使用

2.1 生死监听器

  • 创建request的生死监听器
package com.zhiyou100_06.listener;

import java.io.UnsupportedEncodingException;

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpServletRequest;

public class Demo01RequestLifeLinstener   implements  ServletRequestListener{
	{
		System.out.println("监听器构造代码块:::Demo01RequestLifeLinstener");
	}

	//request对象销毁时执行的方法
	public void requestDestroyed(ServletRequestEvent sre) {
		System.out.println("request对象销毁:::");
	}
    //request对象创建时执行的代码
	public void requestInitialized(ServletRequestEvent sre) {
		System.out.println("request对象创建:::");
		System.out.println("getSource:::"+sre.getSource());
		//创建之前对request设置编码集:
		HttpServletRequest req=(HttpServletRequest)sre.getServletRequest();
		try {
			req.setCharacterEncoding("utf-8");
		} catch (UnsupportedEncodingException e) {
			throw new RuntimeException(e);
		}
	}
}
  • 创建session生死监听器
package com.zhiyou100_06.listener;

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

public class Demo02SessionLifeListener   implements HttpSessionListener{
	//使用seesion生死监听器 记录当前项目的在线人数::
	//记录在线人数的变量::此变量要存储在上下文对象中count
	//session创建此变量值+1
	//session销毁此变量值-1
	
    //session创建时执行的代码
	public void sessionCreated(HttpSessionEvent se) {
		    HttpSession session=se.getSession();
		    System.out.println("一个回话创建了----"+se.getSession().getId());
		    //设置session的过期时间:默认过期时间是30min
		    //session.setMaxInactiveInterval(60);// i的单位是秒。
		    //获取上下文对象中的count
		    ServletContext application=session.getServletContext();
//		    int count=0;
//		    if(application.getAttribute("count")!=null){
//		    	count=(Integer)application.getAttribute("count");
//		    }
//		    count++;
//		    application.setAttribute("count", count++);
		    //application.setAttribute("count", 1+(application.getAttribute("count")==null?0:(Integer)application.getAttribute("count")));
		    
		    //在application的生死监听器中已经设置的count属性  不需要判断一定有count域属性
		    application.setAttribute("count", 1+(Integer)application.getAttribute("count"));
	}
    //session销毁时创建的代码
	public void sessionDestroyed(HttpSessionEvent se) {
		 System.out.println("一个回话创建销毁了::"+se.getSession().getId());
		  HttpSession session=se.getSession();
		  //获取上下文对象中的count
		  ServletContext application=session.getServletContext();
		  application.setAttribute("count", (Integer)application.getAttribute("count")-1);
	}
}
  • 创建application的生死监听器
package com.zhiyou100_06.listener;

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

public class Demo03ApplicationLifeListener   implements ServletContextListener{
    //tomcat关闭前 要销毁上下文对象 此方法执行
	public void contextDestroyed(ServletContextEvent sce) {
		System.out.println("上下文生死监听器::::contextDestroyed");
	}
	//tomcat启动后 要创建项目的上下文对象 此方法执行
	public void contextInitialized(ServletContextEvent sce) {
		//System.out.println("上下文生死监听器::::contextInitialized");
		sce.getServletContext().setAttribute("count", 0);
	}
}

2.2 配置监听器

  <!-- 设置sssion的过期时间 ::;单位是分钟-->
  <session-config>
      <session-timeout>1</session-timeout>
  </session-config>
  
  <listener>
    <listener-class>com.zhiyou100_06.listener.Demo02SessionLifeListener</listener-class>
  </listener>
  
  <listener>
    <listener-class>com.zhiyou100_06.listener.Demo03ApplicationLifeListener</listener-class>
  </listener>
  <listener>
    <listener-class>com.zhiyou100_06.listener.Demo01RequestLifeLinstener</listener-class>
  </listener>

3 域属性监听器监听使用

3.1 创建属性监听器

  • request域属性监听器
package com.zhiyou100_06.listener;

import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;

public class Demo02RequestAttributeListener  implements ServletRequestAttributeListener {

	//域属性添加
	public void attributeAdded(ServletRequestAttributeEvent srae) {
		System.out.println("request域中添加了域属性::"+srae.getName()+"="+srae.getValue());
	}
	//域属性删除
	public void attributeReplaced(ServletRequestAttributeEvent srae) {
		System.out.println("request域中修改了域属性::"+srae.getName()+"::修改前的值="+srae.getValue()+",修改后的值="+srae.getServletRequest().getAttribute(srae.getName()));
	}
	//域属性修改
	public void attributeRemoved(ServletRequestAttributeEvent srae) {
		System.out.println("request域中删除了域属性::"+srae.getName()+"="+srae.getValue());
	}
   
}
  • session域属性监听器
package com.zhiyou100_06.listener;

import java.security.GeneralSecurityException;

import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

public class Demo02SessionApplicationListener   implements HttpSessionAttributeListener{

	public void attributeAdded(HttpSessionBindingEvent se) {
		System.out.println("session中创建了域属性::"+se.getName()+"="+se.getValue());
	}

	public void attributeRemoved(HttpSessionBindingEvent se) {
		System.out.println("session中删除了域属性::"+se.getName()+"="+se.getValue());
	}

	public void attributeReplaced(HttpSessionBindingEvent se) {
		System.out.println("session中修改了域属性::"+se.getName()+"="+se.getValue()+",新值是:"+se.getSession().getAttribute(se.getName()));
	}
}
  • application属性监听器
package com.zhiyou100_06.listener;

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;

public class Demo02ApplicationAttributeListener implements ServletContextAttributeListener {

	public void attributeAdded(ServletContextAttributeEvent scae) {
		System.out.println("application添加域属性:::"+scae.getName()+"="+scae.getValue());
	}

	public void attributeRemoved(ServletContextAttributeEvent scae) {
		System.out.println("application删除域属性:::"+scae.getName()+"="+scae.getValue());
	}

	public void attributeReplaced(ServletContextAttributeEvent scae) {
		System.out.println("application修改域属性:::"+scae.getName()+"="+scae.getValue()+",新值="+scae.getServletContext().getAttribute(scae.getName()));
	}
}

3.2 配置属性监听器

<listener>
    <listener-class>com.zhiyou100_06.listener.Demo02RequestAttributeListener</listener-class>
</listener>
<listener>
    <listener-class>com.zhiyou100_06.listener.Demo02ApplicationAttributeListener</listener-class>
</listener>
<listener>
    <listener-class>com.zhiyou100_06.listener.Demo02SessionApplicationListener</listener-class>
</listener>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值