zoukankan      html  css  js  c++  java
  • 监听器的使用

    java web中监听器的使用

    使用Listener类
    当java  web应用程序在web容器中运行时,在java web应用程序内部会不断发生各种事件,例如web应用的启动,暂停,销毁等。以及web应用中session开始和结束
    这些web应用对开发者来说通常是看不见的。其实在servletapi中。提供了大量的监听器来监听web应用事件,其中Listener类是最为常用的。此类允许当web内部事件发生时回掉事件
    监听器的方法。

    2.Listener基础。
    在java  web应用程序中使用listener时,需要先定义Listener实现类,然后通过Annoation或在web.xml文件中进行配置Listener
    与AWT事件编程是完全相同的。如下是web事件监听器的接口。
    1)ServletContextListener监听web应用的启动和关闭
    2)ServletContextAttributeListener监听ServletContext范围内属性的改变
    3)ServletRequestListener监听用户的请求
    4)ServletRequestAttributeListener监听ServletRequest范围内(request)内属性的变化
    5)HttpSessionListener监听用户session的开始和结束
    6)HttpSessionAttributeListener监听HttpSession范围内session内属性的改变。
    Filter过滤器,如果有一个页面配置了多个Filter,其执行顺序为,在web.xml中配置的顺序,首先执行完成的过滤器是,最后配置的那个过滤器。

    实例一、创建一个ServletContex的监听器。
    ServletContextListener是最常用的Listener,可以在当前web应用被加载
    时对web应用的相关资源进行初始化操作:创建数据库连接池,创建spring的ioc容器,读取当前web应用的初始化参数

    步骤如下:
    1.创建一个类HelloServletContextListener实现ServletContextListener接口
    晚上两个接口中所包含的两个方法。
    2.配置该监听器。
    <!-- 配置Listener -->
      <listener>
      <listener-class>com.listener.test.HelloServletContextListener
      </listener-class>
      </listener>

    实例二、
    ServletRequestListener&HttpSessionListener
    步骤同上也可以实现相关接口监听器的实现

    最后利用ServletRequestListener,HttpSessionListener,以及ServeletContextListener,可以把
    application,session,request的生命周期进一步作为了解。
    request:是一个请求,当一个响应返回时,即被销毁。当发一个请求时,
    当浏览器访问到某个页面时,只是发出一个request的请求。发送完毕返回之后就立即销毁,此外,它不能带有任何的
    请求参数。平常的一个request.setAttribute是发送的一个request的请求对象。
    关于session对象的创建时间问题。
    1.当浏览器第一次访问web应用的一个jsp或者servlet时,且该jsp或servlet中还需要创建
    创建session对象。此时才会创建session对象,默认情况下每个jsp页面这个属性都是true  session="true",所以当某个web应用在
    某个浏览器中第一次访问某个页面都会创建一个session对象。
    2.session的销毁:
    session的销毁有如下三种方法,一种是调 session.invalidate().第二种是夫妻关闭当前web应用。
    但是关闭当前web应用存在session持久化问题,所以它并不能从根本上解决关闭sesion的问题
    第三种是session过期,设置过期时间为:session.setMaxInactiveInterval(300).单位是秒
    3.关闭浏览器并不意味着session被销毁。还可以通过sessionID找到服务器对象。
    4.application贯穿于当前web应用的整个生命周期,当前web应用被加载时创建application。当前web应用被卸载时销毁application对象
     


    Listener小结
    监听域对象(pageContext request,application)自身的创建和销毁的事件监听器
    1.ServletContextListener
    2.ServletRequestListener
    3.HttpSessionListener
    在每个监听器中都有两个方法。
    1)在域对象创建后立即被调用的方法
    2)在域对象销毁前被调用的方法
    监听ServletContext,HttpSession,ServletRequest中添加属性,替换属性,移除属性的时间监听器
    1)以ServletRequestAttributeListener为例
    有如下三个方法添加属性,移除属性,替换属性
    attributeAdded(),attributeRemoved(),attributeReplace()
    api: ServletRequestAttributeEvent
    getName()获取属性名字
    getValue()获取属性的值
    HttpSessionBindListener
    1)监听实现该接口的java类对象被绑定到sesion或从session中解除绑定事件
    当前对象被绑定到sesion时调用该方法
    public void valuedBound(HttpSesoinBindingEvent,event)
    当前对象从sesion中解除绑定调用该方法。
    public void valueUnboud(HttpSessionindingEvent event)
    注意该事件不需要再web.xml文件中进行配置。
    HttpSessionBindEvent
    getName();
    getValue();
    getSession();
    HttpSessionActivationListener(该监听器较少被使用)
    监听实现了该接口和Seralizable接口(若不实现该接口,则只能写到磁盘上都不出来)
    的java类对象
    典例。
    利用HttpSessonListener可以和知道是否有新访客访问当前we应用
    public vidsessionCreateed()被调用说明有新访客到来
    public' void sessioDestroye()被调用说明访客离开

    可以使用一个jsp页面显示当前访客的ip

    访客共有**人,匿名**人,注册用户**人
    190.169.213(匿名) 剔除

    剔除效果:若真该访问一个必须登录的效果,在点击刷新,发现该页面无法访问,而先需要登录。
    剔除操作:即让其session失效。
  • 相关阅读:
    SpringBoot启动流程分析(六):IoC容器依赖注入
    SpringBoot启动流程分析(五):SpringBoot自动装配原理实现
    SpringBoot启动流程分析(四):IoC容器的初始化过程
    Razor语法大全
    VS快捷方式小技巧
    DataTable 修改列名 删除列 调整列顺序
    更改DataTable列名方法
    log4net使用详解
    C#使用Log4Net记录日志
    经典SQL语句大全
  • 原文地址:https://www.cnblogs.com/min-yu/p/11132835.html
Copyright © 2011-2022 走看看