对象感知监听器

与session中绑定的对象相关。

1、session的绑定与解绑:

(1)创建Person类,实现HttpSessionBindingListener 接口,用来监听session对象的绑定与解绑。

package pers.zhb.domain;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
public class Student implements HttpSessionBindingListener {
    private String studentno;
    private String sname;
    private String sex;

    @Override
    public String toString() {
        return "Student{" +
                "studentno=‘" + studentno + ‘\‘‘ +
                ", sname=‘" + sname + ‘\‘‘ +
                ", sex=‘" + sex + ‘\‘‘ +
                ‘}‘;
    }

    public String getStudentno() {
        return studentno;
    }
    public void setStudentno(String studentno) {
        this.studentno = studentno;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    @Override
    public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("Student对象被绑定了。");
    }
    @Override
    public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("Student对象被解绑了");
    }

}

(2)创建Servlet,向Session中添加对象元素,并将对象元素移除:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Student student=new Student();
        student.setSex("男");
        student.setSname("zhai");
        student.setStudentno("20171514141");
        HttpSession session=request.getSession();
        session.setAttribute("student",student);
        session.removeAttribute("student");
    }

与域对象监听器不同,对象感知监听器不需要在web.xml文件中进行配置。

2、session对象的钝化与活化:

钝化:将Session中的对象持久化存储到磁盘上。

活化:将磁盘上的对象再次恢复到Session内存中。

(1)钝化:在Student类中实现HttpSessionActivationListener接口,用来监听Session中的对象的钝化与活化。

package pers.zhb.domain;
import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionEvent;
import java.io.Serializable;

public class Student implements HttpSessionActivationListener , Serializable {
    private String studentno;
    private String sname;
    private String sex;

    @Override
    public String toString() {
        return "Student{" +
                "studentno=‘" + studentno + ‘\‘‘ +
                ", sname=‘" + sname + ‘\‘‘ +
                ", sex=‘" + sex + ‘\‘‘ +
                ‘}‘;
    }

    public String getStudentno() {
        return studentno;
    }
    public void setStudentno(String studentno) {
        this.studentno = studentno;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public void sessionWillPassivate(HttpSessionEvent httpSessionEvent) {
        System.out.println("session域中的对象被钝化了");
    }

    @Override
    public void sessionDidActivate(HttpSessionEvent httpSessionEvent) {
        System.out.println("Session域中的对象被活化了");
    }
}

(2)创建一个Servlet将Student对象存放到Session域中:

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Student student=new Student();
        student.setSex("男");
        student.setSname("zhai");
        student.setStudentno("20171514141");
        HttpSession session=request.getSession();
        session.setAttribute("student",student);
        System.out.println("Student对象已经被放到Session域当中了");
    }

(3)钝化过程:先访问Servlet,将Student对象存放到Session中,关闭服务器的时候被钝化。可以在服务器work文件夹下面查看。(.ser文件)

(4)将不经常用的Session对象钝化到磁盘上:

在META-INF目录下,创建context.xml文件,可以通过设置时间将Session中存储的对象自动钝化:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <!-- maxIdleSwap:session中的对象多长时间不使用就钝化 -->
    <!-- directory:钝化后的对象的文件写到磁盘的哪个目录下 配置钝化的对象文件在 work/catalina/localhost/钝化文件 -->
    <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
        <Store className="org.apache.catalina.session.FileStore" directory="dunhua" />
    </Manager>
</Context>

原文地址:https://www.cnblogs.com/zhai1997/p/11651085.html

时间: 2024-12-19 03:31:08

对象感知监听器的相关文章

配置Spring的用于初始化容器对象的监听器

<!-- 配置Spring的用于初始化容器对象的监听器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> &l

JavaWeb学习笔记八 监听器

监听器Listener jservlet规范包括三个技术点:servlet :listener :filter:监听器就是监听某个对象的的状态变化的组件.监听器的相关概念事件源: 被监听的对象(三个域对象 request,session,servletContext) 监听器:监听事件源对象, 事件源对象的状态的变化都会触发监听器 . 注册监听器:将监听器与事件源进行绑定. 响应行为:监听器监听到事件源的状态变化时,所涉及的功能代码(程序员编写代码) 按照被监听的对象划分:ServletRequ

Java Web学习总结(13)Listener监听器

一,监听器介绍 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行. 监听器的相关概念: 事件源 被监听的对象 监听器 监听事件源对象,事件源对象的状态的变化都会触发监听器 注册监听器 将监听器与事件源进行绑定. 响应行为 监听器监听到事件源的状态变化时 所涉及

【JAVAWEB学习笔记】23

监听器Listener 学习目标 案例-使用监听器完成定时生日祝福 一.监听器Listener javaEE包括13门规范 在课程中主要学习 servlet技术 和 jsp技术 其中 servlet规范包括三个技术点:servlet  listener  filter 1.什么是监听器? 监听器就是监听某个对象的的状态变化的组件 监听器的相关概念: 事件源:被监听的对象  ----- 三个域对象 request  session  servletContext 监听器:监听事件源对象  事件源对

【JAVAWEB学习笔记】23_Listener和邮箱服务器

监听器Listener 学习目标 案例-使用监听器完成定时生日祝福 一.监听器Listener javaEE包括13门规范 在课程中主要学习 servlet技术 和 jsp技术 其中 servlet规范包括三个技术点:servlet  listener  filter 1.什么是监听器? 监听器就是监听某个对象的的状态变化的组件 监听器的相关概念: 事件源:被监听的对象  ----- 三个域对象 request  session  servletContext 监听器:监听事件源对象  事件源对

Day20 javaWeb监听器和国际化

day20 JavaWeb监听器 三大组件: Servlet Listener Filter ? Listener:监听器 初次相见:AWT 二次相见:SAX ? 监听器: 它是一个接口,内容由我们来实现: 它需要注册,例如注册在按钮上! 监听器中的方法,会在特殊事件发生时被调用! ? 观察者: 事件源: 小偷 事件: 偷东西 监听器: 警察 监听器中的方法:抓捕 ? JavaWeb中的监听器 事件源:三大域! ServletContext 生命周期监听:ServletContextListen

JavaWeb监听器Listener

在监听器的对象作用领域中一般涉及监听主体(监听器).监听客体(事件源).监听事件(事件). 在警察监听小偷中,警察是监听器,小偷是事件源,偷东西是时间. JavaWeb中监听器的事件源(ServletContext.HttpSession.ServletRequest.JavaBean) 1.ServletContext 生命周期监听:ServletContextListener 属性监听:ServletContextAttributeListener 2.HttpSession 生命周期监听:

JavaWeb-18 (JDBC之分页与监听器listener)

JavaWeb-18 JDBC之分页与监听器listener 一.分页 1.分页概述:分页的结果就是要让指定的记录加载到内存 2.原因: 1.人的习惯 2.内存的限度(核心问题) 3.屏幕的限度 3.如何分页: 不同的环境方式不一样 3.1.数据库层面: select * from acount limit startIndex,size;//只是针对MySql而言(startIndex从0开始,size:共查询多少条记录) select * from acount limit 0,3; 第一页

JavaWeb中的监听器

JavaWeb中的监听器 l  事件源:三大域! ServletContext ¨       生命周期监听:ServletContextListener,它有两个方法,一个在出生时调用,一个在死亡时调用: 2       void contextInitialized(ServletContextEvent sce):创建SErvletcontext时 2       void contextDestroyed(ServletContextEvent sce):销毁Servletcontext