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接口 / 序列化必须

猜你喜欢

转载自www.cnblogs.com/-Archenemy-/p/12771327.html
今日推荐