Listener

1.ServletContextListener:
1).what:监听ServletContext对象被创建或销毁的Servlet监听器
2).how:
-创建一个实现了ServletContextListener的类,并且实现其中的两个方法
public class HelloServletContextListener implements ServletContextListener{
-在web.xml文件中配置Listener

 

	 <listener>
 		<listener-class>com.zc.javaweb.listener.HelloServletContextListener</listener-class>
	 </listener>

3).why:ServletContextListener是最常用的Listener,可以在当前WEB应用被加载时对当前WEB应用的相关资源进行初始化操作;
创建数据库连接池,创建Spring的IOC容器,读取当前WEB应用的初始化参数..

 

 

 

	//ServletContext对象被创建(即,当前WEB应用被加载时)的时候,Servlet容器调用该方法
	public void contextInitialized(ServletContextEvent sce)
	//ServletContext对象被销毁(即,当前WEB应用被卸载时)的时候,Servlet容器调用该方法
	public void contextDestroyed(ServletContextEvent sce) 
	
	ServletContextEvent中的 getServletContext()获取ServletContext

 

2.ServletRequestListener & HttpSessionListener
1).和ServletContextListener类似。
2).利用ServletRequestListener、HttpSessionListener以及ServletContextListener可以把request,session及
application的生命周期进一步的做一个了解
-request:是一个请求,当一个响应返回时,即被销毁,当发送一个请求时被创建。注意,请求转发的过程是一个
request对象

 

 

-session:当第一次访问WEB应用的一个JSP或Servlet时,且该JSP或Servlet中还需创建session对象。

 

                        此时服务器会创建一个session对象。

session销毁:session过期,直接调用session的invalidate方法,当前web应用被卸载(session可以被持久化)
*关闭浏览器,并不意味着session被销毁,还可以通过sessionid找到服务器中的session对象。

-application:贯穿当前WEB应用的生命周期。

 JSESSIONID=dadadjnkj23313dad313

http://localhost:8080/Listener/session.jsp;jsessionid=dadadjnkj23313dad313

当前WEB应用被加载时创建application对象,当前WEB应用被卸载时销毁application对象。

3.***AttributeListener
1).监听ServletContext, HttpSession, ServletRequest 中添加属性,替换属性,移除属性的事件监听器。
2).以ServletRequestAttributeListener 为例

 

 

 

//移除属性时被调用
  public void attributeRemoved(ServletRequestAttributeEvent srae)  { 
    	System.out.println("request移除属性");
    }
    //添加属性时被调用
    public void attributeAdded(ServletRequestAttributeEvent srae)  { 
    	System.out.println("request添加属性");
    }
    //替换属性时被调用
    public void attributeReplaced(ServletRequestAttributeEvent srae)  { 
    	System.out.println("request替换属性");
    }

 

3).这三个监听器相对而言较少会使用。
ServletContextAttributeListener
HttpSessionAttributeListener
ServletRequestAttributeListener

4).API:
ServletRequestAttributeListener:
>getName()获取属性的名字
>getValue()获取属性的值
4.HttpSessionBindingListener
1).监听实现了该接口的Java类的对象被绑定到session或从session中接触绑定的事件。

 

 

//当前对象被绑定到session时调用该方法
   public void valueBound(HttpSessionBindingEvent event)  { 
    	System.out.println("绑定session");
    	
    	Object value=event.getValue();
    	System.out.println(value==this);
    	System.out.println(event.getName());
  //  	System.out.println(event.getSource());
    //	System.out.println(event.getClass());
    //	System.out.println(event.getSession());
    	
    }
//当前对象从session中解除绑定调用该方法。
    public void valueUnbound(HttpSessionBindingEvent event)  { 
    	System.out.println("session解除绑定");
    }

2).注意:该监听器,不需要再web.xml文件中配置。JavaBean中以携带该方法
3).HttpSessionBindingEvent:
getName()
getValue()
getSession()

 

 

4).该监听器较少被使用    

5.HttpSessionActivationListener
1).监听实现了该接口和Serializable接口(若不实现该接口,则只能写到磁盘上,但不能读取出来。)的Java类的对象随session钝化和活化事件
>活化:从磁盘中读取session对象
>钝化:向磁盘中写入session对象
>session对象存储在tomcat服务器的work\Catalina\localhost\contextPath目录下.SESSION.SER
2).注意:该监听器,不需要再web.xml文件中配置。JavaBean中以携带该方法
3).

 

 

 

//活化之后被调用
  public void sessionDidActivate(HttpSessionEvent se)  { 
    	System.out.println("从磁盘中读取出来");
    }
//钝化之后被调用
    public void sessionWillPassivate(HttpSessionEvent se)  { 
    	System.out.println("从内存中写到磁盘上.. ");
    }

4).该监听器较少被使用    

6.统计在线访客,可以把访客踢出其所在的session
1).利用HttpSessionListener 可以知道是否有新用户访问当前的WEB应用,若

 

 

 

public void sessionCreated(HttpSessionEvent se);被调用,说明有新访客到来;若

public void sessionDestroyed(HttpSessionEvent se);被调用,说明访客离开。
    

 

2).可以使用JSP页面显示当前的访客
访问共有xx人,其中匿名访客xx人,注册用户xx人。
访客IP 操作
192.168.3.12(匿名客户) 踢出(下次访问需登录)
192.168.3.13 踢出
192.168.3.14 踢出
牙牙乐(登录客户) 踢出(下次访问需登录)
192.168.3.15 踢出
阿萨斯 踢出
192.168.3.18 踢出


踢出效果为:若正在访问一个必须登录的页面,在点击刷新,发现该页面无法访问,需先登录。

3).踢出操作:即让其session失效
 

 

在编程领域,Listener(监听器)是一种设计模式中的重要概念,用于实现事件驱动编程。监听器的主要作用是监听特定事件的发生,并在事件发生时执行相应的操作。 ### 定义 Listener本质上是一个接口,它定义了一组方法,这些方法会在特定事件发生时被调用。不同的编程环境和框架中,Listener的具体定义和用途会有所不同。例如,在NDSPI接口中,IND2Listener接口用于侦听来自对等点的连接请求,它继承自IND2Overlapped接口,并且定义了Bind、Listen、GetLocalAddress、GetConnectionRequest等方法,分别用于将侦听器对象绑定到本地地址、开始监听传入的连接请求、获取监听对象的地址以及获取挂起连接请求的句柄[^2]。 ### 使用方法 以下从不同编程场景介绍Listener的使用方法: #### Web应用开发(JSP) 在JSP编程中,监听器可用于监听ServletContext、HttpSession和ServletRequest等对象的生命周期事件以及属性变化事件。以loginPro.jsp为例,它用于对登录界面的值进行处理,以及触发监听器。以下是部分代码: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录界面解析</title> </head> <body> <% String username = request.getParameter("username"); session.setAttribute("username",username); //直接跳转 /* response.sendRedirect("users.jsp"); */ if(!username.isEmpty()){ out.println(username+"登陆成功"); }else out.println("登陆失败"); %> <a href="users.jsp">跳转到用户中心</a> </body> </html> ``` 在这个例子中,虽然没有直接展示监听器的完整实现,但可以看出通过对登录界面传入的用户名进行处理,可能会触发相应的监听器来处理后续逻辑,比如记录登录信息等[^3]。 #### Android编程 在Android编程中,Listener常用于处理用户界面上的交互事件,如按钮点击事件。以下是一个使用类callOut实现OnClickListener接口的示例: ```java package com.mypack; import android.app.Activity; import android.view.View; import android.view.View.OnClickListener; import com.mypack.Button4Activity; public class callOut implements OnClickListener { private Button4Activity act; public callOut(Activity activity) { act = (Button4Activity)activity; } @Override public void onClick(View v) { String strTmp = "点击Button06"; act.ET.setText(strTmp); } } ``` 在这个例子中,callOut类实现了OnClickListener接口,并重写了onClick方法。当按钮被点击时,会调用该方法并执行相应的操作,即设置文本框的内容[^4]。 另外,有一篇关于Listener的简单介绍及使用讲解得十分详细的文章,可参考:https://blog.youkuaiyun.com/LiuShuXiaDeRiLuo/article/details/78361696 [^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值