JavaEE之监听器

监听器

a 监听对象的创建和销毁

四个范围对象:PageContext request session application
监听器监听的对象主要监听 request session application
对应的监听器监听对象
request-------- ServletRequestListener
session--------HttpSessionListener
application--------ServletContextListener
每个监听器各自提供了两个方法,监听开始、监听结束的方法
在这里插入图片描述
实现一个监听器

public class ServletListener implements ServletRequestListener,HttpSessionListener,ServletContextListener{
    //监听application(ServletContext)
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("监听ServletContext,创建ServletContext对象...:"+servletContextEvent);
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("监听ServletContext,销毁ServletContext对象...:"+servletContextEvent);
    }

    //监听request对象
    @Override
    public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
        System.out.println("监听ServletRequest,销毁ServletRequest对象...:"+servletRequestEvent);
    }

    @Override
    public void requestInitialized(ServletRequestEvent servletRequestEvent) {
        System.out.println("监听ServletRequest,创建ServletRequest对象...:"+servletRequestEvent);
    }
    //监听session对象
    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        System.out.println("监听HttpSession,创建HttpSession对象...:"+httpSessionEvent);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        System.out.println("监听HttpSession,销毁HttpSession对象...:"+httpSessionEvent);
    }
}

配置监听器

<!--配置监听器-->
    <listener>
        <listener-class>cn.tju.Listener.ServletListener</listener-class>
    </listener>

ServletContext 在servlet容器启动时,自动创建
ServletContext 在servlet容器关闭时,自动销毁i
当访问浏览器第一次访问一个页面时:
1 首先创建一个request对象
2 服务端对客户端创建一个session对象
3 请求结束销毁request对象
输出结果
监听ServletRequest,创建ServletRequest对象
监听HttpSession,创建HttpSession对象
监听ServletRequest,销毁ServletRequest对象
在这里插入图片描述

1在session.jsp点击超链接发起一次新的请求
2在sessionInvalidate.jsp 销毁session对象
3 请求结束
输出
监听ServletRequest,创建ServletRequest对象
监听HttpSession,销毁HttpSession对象
监听ServletRequest,销毁ServletRequest对象

在这里插入图片描述

b 监听对象中属性的变更

request-------- ServletRequestAttributeListener
session--------HttpSessionAttributeListener
application--------ServletContextAttributeListener
每一个接口有三个方法
增加 删除 替换
在这里插入图片描述
实现属性监听器

public class Attribute implements ServletRequestAttributeListener,HttpSessionAttributeListener,ServletContextAttributeListener {
    @Override
    public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {
        String name = servletContextAttributeEvent.getName();//目前正在操作的属性名
        Object value = servletContextAttributeEvent.getServletContext().getAttribute(name);
        System.out.println("ServletContext增加属性"+"属性名"+name+"属性值"+value);
    }

    @Override
    public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {
        String name = servletContextAttributeEvent.getName();//目前正在操作的属性名
        Object value = servletContextAttributeEvent.getServletContext().getAttribute(name);
        System.out.println("ServletContext删除属性"+"属性名"+name+"属性值"+value);
    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {
        String name = servletContextAttributeEvent.getName();//目前正在操作的属性名
        Object value = servletContextAttributeEvent.getServletContext().getAttribute(name);
        System.out.println("ServletContext替换属性"+"属性名"+name+"属性值"+value);
    }

    @Override
    public void attributeAdded(ServletRequestAttributeEvent servletRequestAttributeEvent) {
        String name = servletRequestAttributeEvent.getName();//目前正在操作的属性名
        Object value = servletRequestAttributeEvent.getServletRequest().getAttribute(name);
        System.out.println("ServletRequest增加属性"+"属性名"+name+"属性值"+value);
    }

    @Override
    public void attributeRemoved(ServletRequestAttributeEvent servletRequestAttributeEvent) {
        String name = servletRequestAttributeEvent.getName();//目前正在操作的属性名
        Object value = servletRequestAttributeEvent.getServletRequest().getAttribute(name);
        System.out.println("ServletRequest删除属性"+"属性名"+name+"属性值"+value);
    }

    @Override
    public void attributeReplaced(ServletRequestAttributeEvent servletRequestAttributeEvent) {
        String name = servletRequestAttributeEvent.getName();//目前正在操作的属性名
        Object value = servletRequestAttributeEvent.getServletRequest().getAttribute(name);
        System.out.println("ServletRequest替换属性"+"属性名"+name+"属性值"+value);
    }

    @Override
    public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
        String name = httpSessionBindingEvent.getName();//目前正在操作的属性名
        Object value = httpSessionBindingEvent.getSession().getAttribute(name);
        System.out.println("HttpSession增加属性"+"属性名"+name+"属性值"+value);
    }

    @Override
    public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
        String name = httpSessionBindingEvent.getName();//目前正在操作的属性名
        Object value = httpSessionBindingEvent.getSession().getAttribute(name);
        System.out.println("HttpSession删除属性"+"属性名"+name+"属性值"+value);
    }

    @Override
    public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
        String name = httpSessionBindingEvent.getName();//目前正在操作的属性名
        Object value = httpSessionBindingEvent.getSession().getAttribute(name);
        System.out.println("HttpSession替换属性"+"属性名"+name+"属性值"+value);
    }
}

配置属性监听器

<listener>
        <listener-class>cn.tju.Listener.Attribute</listener-class>
</listener>

实验页面

<%
//ServletContext对象 就是application
    application.setAttribute("name","zs");
    application.setAttribute("name","ls");
    application.removeAttribute("name");

    session.setAttribute("user","zs");
    session.setAttribute("user","ls");
    session.removeAttribute("user");

    request.setAttribute("user2","zs");
    request.setAttribute("user2","ls");
    request.removeAttribute("user2");
%>

输出
ServletContext增加属性属性名name属性值zs
ServletContext替换属性属性名name属性值ls
ServletContext删除属性属性名name属性值null
HttpSession增加属性属性名user属性值zs
HttpSession替换属性属性名user属性值ls
HttpSession删除属性属性名user属性值null
ServletRequest增加属性属性名user2属性值zs
ServletRequest替换属性属性名user2属性值ls
ServletRequest删除属性属性名user2属性值null

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值