zoukankan      html  css  js  c++  java
  • Servlet监听器(二)

    Servlet监听器(二)

    监听器接口中的方法 / 会话事件

    生命周期

    会话对象的创建 / 第一次 调用getSession()时创建

    会话对象的销毁 / 设置回话超时 : 1.设置最大激活时间;2.调用.invalidate()方法;3.在web.xml 进行配置 <session-config>2</session-config>

    //监听会话对象的生命周期需要实现HttpSessionListener接口
        public class MySessionListener implements HttpSessionListener {
            
            //session对象被创建时调用    
            @Override
            public void sessionCreated(HttpSessionEvent event) {
                String sessionId = event.getSession().getId();
                //获取session对象的id
               }
            
            //session对象被销毁时调用
            @Override
            public void sessionDestroyed(HttpSessionEvent event) {}
        }

    属性变化

    //监听会话对象的属性变化需要实现HttpSessionAttributeListener接口
    public class MySessionListener implements HttpSessionAttributeListener {
        //会话对象添加属性时调用
        @Override
        public void attributeAdded(HttpSessionBindingEvent event) {
            //获得属性的键名
            String name = event.getName();
            //获得属性的值
            String value = event.getValue();
        }
        
        //会话对象删除属性时调用
        @Override
        public void attributeRemoved(HttpSessionBindingEvent event) {}
    
        //会话对象修改属性时调用
        @Override
        public void attributeReplaced(HttpSessionBindingEvent event) {
            //获得修改后的值
            String  new_value = (String)event.getSession().getAttribute(event.getName());
        }
    }

    会话迁移(不需要绑定)

    //会话迁移需要实现HttpSessionActivationListene接口
    
    //对session对象做持久化操作
        //1. session对象的钝化 : session对象的序列化(从内存中--->文件中)
            @Override
            public void sessionWillPassivate(HttpSessionEvent event) {}
        //2. session对象的激活:  session对象的反序列化(文件中--->内存中)
            @Override
            public void sessionDidActivate(HttpSessionEvent event) {}

    序列会需要进行文件配置

    <!--tomcat -> conf -> context.xml中的配置文件-->
    <Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="true" maxIdleSwap="1">  
        <Store className="org.apache.catalina.session.FileStore" directory="mysession"/>  
    </Manager>

    对象绑定

    必须跟对象进行绑定

    //对象绑定需要实现HttpSessionBindingListener接口
    
        // 该对象被存放到session对象中时被调用
        @Override
        public void valueBound(HttpSessionBindingEvent event) {}
    
        // 该对象被session对象删除时调用
        @Override
        public void valueUnbound(HttpSessionBindingEvent event) {}

    监听器接口中的方法 / 请求事件

    生命周期

    当服务器接收到请求时,request就会被创建 当服务器响应回去时: request就会被销毁

    //监听请求事件的生命周期需要实现ServletRequestListener接口
    
        //请求对象被创建时调用
        @Override
        public void requestInitialized(ServletRequestEvent sre) {}
        
        //请求对象被销毁时调用
        @Override
        public void requestDestroyed(ServletRequestEvent sre) {}

    属性变化

    //监听请求事件的生命周期需要实现ServletRequestAttributeListener接口
    ·@Override
        public void attributeAdded(ServletRequestAttributeEvent srae) {
            //请求对象中添加数据时调用
        }
    
        @Override
        public void attributeRemoved(ServletRequestAttributeEvent srae) {
            //请求对象中删除数据时调用
        }
    
        @Override
        public void attributeReplaced(ServletRequestAttributeEvent srae) {
            //请求对象中修改数据时调用
        }

    其他

    1. Thread.sleep(5000); / 线程休眠 单位ms

    2. 对象类一般需要实现Serializable接口 / 序列化必须

  • 相关阅读:
    51NOD 1371填数字
    51NOD1052 最大M字段和
    ZROI2018提高day4t3
    ZROI2018提高day4t2
    ZROI2018提高day4t1
    ZROI2018普转提day2t4
    ZROI2018普转提day2t2
    ZROI2018普转提day2t1
    ZROI2018普转提day2t3
    ZROI2018提高day3t3
  • 原文地址:https://www.cnblogs.com/-Archenemy-/p/12771327.html
Copyright © 2011-2022 走看看