java 监听器

参考文件1
参考文件2

1. context&request&response

request与response对象是起到在服务端与客户端之间传递信息的作用。
- context:是jsp页面包装页面的上下文,由容器创建与初始化。
- request:用来接收客户端提交的信息。
- response:将服务器的数据发送到客户端。

2. 监听来源

  • 客户端的请求
  • 服务端的响应

3. Servlet 监听器理论

3.1 对应三个与对象的方法

a、如三个域对象的创建与销毁方法签名:

ServletRequestListener有以下两个方法


void requestDestroyed(ServletRequestEvent sre)  

void requestInitialized(ServletRequestEvent sre) 

HttpSessionListener有以下两个方法

void sessionCreated(HttpSessionEvent se) 

void sessionDestroyed(HttpSessionEvent se)  

ServletContextListener

void contextDestroyed(ServletContextEvent sce) 

void contextInitialized(ServletContextEvent sce)  
b、三个类型对象域中增、删、改的监听器(3个)
ServletContextAttributeListener,

HttpSessionAttributeListener,

ServletRequestAttributeListener
c、感知型监听器(2个)
  • 监听自己何时被帮到session上,何时解绑了;何时被钝化了,何时被活化了(序列化到某个存储设置中)。

  • 注意:这种监听器不需要注册。某个javabean实现这些接口后就可以监听何时被绑定、解绑或被激活或钝化。

HttpSessionBindingListener:实现该接口的类,能检测自己何时被Httpsession绑定,和解绑

HttpSessionActivationListener:实现该接口的类(要求些javabean必须是实现了Serializable接口的),能监测自己何时随着HttpSession一起激活和钝化。

3.2 应用场景

1>在ServletContextLintener监听器的contextInitialized方法中,进行应用级的资源初始化以便提高效率,在contextDestroyed方法中对应用级的资源进行释放。

2>又比如web应用中,会存在会话,通常的作法是将当前登录的用户存放在session会话中。那么如何统计在线人数话,如何显示出当前登录的用户呢。如何踢出某些已登录的用户呢。就可以通过HttpSessionAttributeListener监听器的attributeAdded方法。

4. 实战练习

4.1 Context 监听

4.1.1 生命周期的监听

创建listenters 类实现ServletContextListener 接口,并进行web.xml配置如下:

package test;

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

public class listenters implements ServletContextListener {

    public void contextDestroyed(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
System.out.println("web销毁");
    }

    public void contextInitialized(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
System.out.println("web创建初始化");
    }
}
  <listener>
  <listener-class>test.listenters</listener-class>
  </listener>

这样只要创建与销毁Context就会打印相应的文字。

4.1.2 Context上Attribute变化监听。

创建实现ServletContextAttributeListener 接口的类,并进行web.xml配置。

package test;

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

public class contextAttribute implements ServletContextAttributeListener {

    public void attributeAdded(ServletContextAttributeEvent arg0) {
        System.out.println("add"+arg0.getName());
    }

    public void attributeRemoved(ServletContextAttributeEvent arg0) {
        System.out.println("remove");
    }

    public void attributeReplaced(ServletContextAttributeEvent arg0) {
        System.out.println("replace");
    }
}
    <listener>
        <listener-class>test.contextAttribute</listener-class>
    </listener>

测试test.jsp

<%
    request.setAttribute("one", 1);
    request.setAttribute("one", 2);
    out.print(request.getAttribute("one"));
    request.removeAttribute("one"); 
%>

这样就会在控制台发现相对应的打印。

遗留问题:上面的替换与移除打印不出来信息

5. session监听

5.1 session 寿命监听

创建类实现了接口 HttpSessionListener ,web.xml配置同上,其中两个方法如下:

sessionCreated()//session创建时调用
sessionDestroyed()//session毁灭时调用

5.2 Session上Attribute变化监听

创建类实现接口 HttpSessionAttributeListener,配置web.xml,

attributeAdded()//当在session中增加属性时触发

attributeRemoved()//当在session中移除属性时触发

attributeReplaced()当在session中替换属性时触发

6. Request 监听

6.1 Request生命周期监听

6.2 Request上Attribute变化监听

7. web3.0配置

3.0不用到web.xml中进行配置,只需要进行注解,如下:

package com.imooc.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener("This is My Servlet 3.0 Listener")//这里就是监听器的注解

public class MyServletContextListener implements ServletContextListener {
    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        System.out.println("contextDestroyed");
    }
    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        System.out.println("contextInitialized");
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值