zoukankan      html  css  js  c++  java
  • JavaWeb的三大组件之事件监听组件(Listener)

    JavaWeb监听器

    三大组件:

    1. Servlet
    2. Listener
    3. Filter

    监听器:

    1. 它是一个接口,内容由我们来实现;
    2. 它需要注册,例如注册在按钮上!
    3. 监听器中的方法,会在特殊事件发生时被调用!

     

    JavaWeb中的监听器

    一、生命周期监听与属性监听

    ServletContext

         生命周期监听:ServletContextListener,它有两个方法,一个在创建时调用,一个在销毁时调用;

    •                void contextInitialized(ServletContextEvent sce):创建Servletcontext时
    •                void contextDestroyed(ServletContextEvent sce):销毁Servletcontext时

         属性监听:ServletContextAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,

                                    最后一个是在移除属性时调用。

    HttpSession

         生命周期监听:HttpSessionListener,它有两个方法,一个在创建时调用,一个在销毁时调用;

    •                void sessionCreated(HttpSessionEvent se):创建session时
    •                void sessionDestroyed(HttpSessionEvent se):销毁session时

         属性监听:HttpSessioniAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,

                                  最后一个是在移除属性时调用。

    ServletRequest

         生命周期监听:ServletRequestListener,它有两个方法,一个在创建时调用,一个在销毁时调用;

         属性监听:ServletRequestAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,

                                  最后一个是在移除属性时调用。

    1. javaWeb中完成编写监听器:
    • 写一个监听器类:要求必须去实现某个监听器接口;
    • 注册,是在web.xml中配置来完成注册!
    <listener>
        <listener-class>包名.类名</listener-class>
     </listener>
    1. 事件对象:
    • ServletContextEvent:ServletContext getServletContext()
    • HttpSessionEvent:HttpSession getSession()
    • ServletRequest:
    • ServletContext getServletContext();
    • ServletReques getServletRequest();
    • ServletContextAttributeEvent:
    • ServletContext getServletContext();
    • String getName():获取属性名
    • Object getValue():获取属性值

     

    二、感知监听(都与HttpSession相关)

    • 它用来添加到JavaBean上,而不是添加到三大域上!
    • 这两个监听器都不需要在web.xml中注册!

    1、JavaBean中继承HttpSessionBindingListener接口:感知Bean对象是否存放到Session(存放触发,删除触发)

    2、JavaBean中继承HttpSessionActivationListener,java.io.Serializable接口:Bean对象是否跟随Session钝化(钝化触发,

                                                                                                                              活化触发)Serializable接口用来序列化

          Session的钝化:即会话在一定时间内没有操作,Session信息自动保存至硬盘中以节省内存空间的技术

               --------具体操作:Tomcat7/conf/context.xml添加以下代码,就会将session

                                           保存至Tomcat7workCatalinalocalhost项目名mysession中,如果保存属性有Bean对象

                                           ,要将Bean对象实现序列化(即继承java.io.Serializable接口)。

        <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
    		<Store className="org.apache.catalina.session.FileStore" directory="mysession"/>
        </Manager>	

    总结:看视频说Session钝化后保存至硬盘,Session的活化可在浏览器重新打开(即一个会话关闭后)再次取出对象信息;

               但实际经验是Session的生命周期只有一个会话,或许是我Tomcat的问题,在会话关闭后重新打开时虽然有保存Session

               信息到磁盘,但此时取不出Session信息。

               

  • 相关阅读:
    log4j2配置详解
    【数据库性能相关知识汇总】
    【Java并发知识点汇总】
    Spring实践系列-入门篇(一)
    分布式实践之概念解析
    平时工作需要注意总结面试中必然会问到的问题
    DataX支持mysql8.X
    springboot集成shiro
    ELK 6.2.4搭建
    DataX-MysqlWriter 插件文档
  • 原文地址:https://www.cnblogs.com/MrQlyn/p/10236312.html
Copyright © 2011-2022 走看看