JavaWeb学习——监听

JavaWeb学习——监听

监听三个作用域的生命周期

监听三个作用域创建和销毁

application --- ServletContext request ---httpServletRequest session ---httpSession

ServletContext的生命周期监听

servletcontext创建:启动服务器的时候 servletContext销毁:关闭服务器. 从服务器移除项目

实际用途:

1、在服务启动时,将数据库中的数据加载进内存,并将其赋值给一个属性名,其它的 Servlet 就可以通过 getAttribute 进行属性值的访问。

2、启动线程

1、创建ServletContextListener的实现类
public class MyservletContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println(" context inited");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println(" context destroy");
    }
}

2、在web.xml中进行注册
  
<listener>
  <listener-class>testContent.MyservletContextListener</listener-class>
</listener>
  

httpServletRequest的生命周期监听

request创建:访问服务器上的任意资源都会有请求出现。 访问 html: 会 访问 jsp: 会 访问 servlet : 会 request销毁:服务器已经对这次请求作出了响应。

1、创建ServletRequestListener的实现类
public class MyRequestListener implements ServletRequestListener {
    @Override
    public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
        System.out.println("init ---------111111111");
    }

    @Override
    public void requestInitialized(ServletRequestEvent servletRequestEvent) {
        System.out.println("destroy ---------2222222222");
    }
}


2、在web.xml中进行注册
<listener>
  <listener-class>testContent.MyRequestListener</listener-class>
</listener>

HttpSessionListenert的生命周期监听

session的创建:只要调用getSession

访问html: 不会 ​ jsp: 会 getSession(); ​ servlet: 会

session的销毁:超时 30分钟

非正常关闭 销毁 ​ 正常关闭服务器(序列化)

实际用途:

1、统计在线人数

1、创建HttpSessionListener的实现类
public class MySessionListener implements HttpSessionListener {

  @Override
  public void sessionCreated(HttpSessionEvent se) {
    System.out.println("创建session了");
  }

  @Override
  public void sessionDestroyed(HttpSessionEvent se) {
    System.out.println("销毁session了");
  }
}

2、在web.xml中进行注册
<listener>
  <listener-class>testContent.MySessionListener</listener-class>
</listener>

监听三个作用域属性状态变更

ServletContext中属性的变更监听

1、设置servletcontext
public class MyHttpAttrListener implements HttpSessionAttributeListener {
    @Override
    public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("add------11111");
    }

    @Override
    public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("remove------11111");
    }

    @Override
    public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("replace------11111");
    }
}

2、在web.xml中进行注册
<listener>
  <listener-class>testContent.MyHttpAttrListener</listener-class>
</listener>
  
3、jsp中属性变更
    <%
        session.setAttribute("name","123");
        session.setAttribute("name","456");
        session.removeAttribute("name");
    %>
    

httpSession状态变更监听

1、实现一个session的绑定监听接口,监听对象与session绑定和解绑定的动作
public class TestBean implements HttpSessionBindingListener {

    public  String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("valueBound");
    }

    @Override
    public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("valueUnbound");
    }
}

2、在jsp中为session赋值
<%
  TestBean testBean = new TestBean();
	testBean.setName("123");
	session.setAttribute("bean",testBean);
%>

HttpSessionActivationListener序列化与反序列化的监听

Session的序列化,反序列化作用:把session的值可以存储到硬盘上,等下一次在使用的时候,在从硬盘上提取出来。

1、对于实现了序列化接口的对象,在存储时会被进行序列化存储。
public class TestBean2 implements HttpSessionActivationListener , Serializable {
    public  String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void sessionWillPassivate(HttpSessionEvent httpSessionEvent) {

    }

    @Override
    public void sessionDidActivate(HttpSessionEvent httpSessionEvent) {

    }
}

2、通过实现HttpSessionActivationListener 进行监听序列化
public class MyHttpSessionActivation implements HttpSessionActivationListener {
    @Override
    public void sessionWillPassivate(HttpSessionEvent httpSessionEvent) {
        System.out.println("init ---------111111111");
    }

    @Override
    public void sessionDidActivate(HttpSessionEvent httpSessionEvent) {
        System.out.println("destroy ---------2222222222");
    }
}

序列化存储地址配置:

  1. 在tomcat里面 conf/context.xml 里面配置

    对所有的运行在这个服务器的项目生效

  2. 在conf/Catalina/localhost/context.xml 配置

    对 localhost生效。 localhost:8080

  3. 在自己的web工程项目中的 META-INF/context.xml

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

// maxIdleSwap : 1分钟不用就钝化
// directory :  钝化后的那个文件存放的目录位置:	D:\tomcat\apache-tomcat-7.0.52\work\Catalina\localhost\TestDemo\itheima

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值