你的位置:首页 > Java教程

[Java教程]监听SevletContext的创建与监听一个Sesison被保存到一个文件中的过程 (57)


其他监听器

      

监听者

被监听者

监听到事件对象

HttpSessionActivationListener

HttpSession – 监听HttpSession活化和顿化。

HttpSessionEvent 

HttpSessionAttributeListener

HttpSession – 监听session的属性变化的。S.setAttributee();

HttpSessionBindingEvent 

HttpSessionBindingListener

HttpSession - 监听哪一个对象,绑定到了session上。S.setAtrri(name,User);

 

HttpSessionListener

HttpSesion – 监听sessioin创建销毁

HttpSessionEvent

ServletContextAttributeListener

ServletContext – 属性变化的

 

ServletContextListener[W1] 

ServletContext 创建销毁

 

ServletRequestListener - SerlvetRequestAttibuteListner

Rrequest -创建销毁

Request属性变化

 

 1 ServletContextListener 用于监听SevletContext的创建

在web中的所的监听器都是全局的 - 都是在项目启动时直接由tomcat创建。

监听器没有顺序。只是监听的对象不一样。

在一个项目中可以存在多个监听器。

package cn.hx.listener;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.PrintWriter;

import java.net.URL;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

public class MyContextListener implements ServletContextListener {

    //在启动时读取数据库之前保存的数据

    public void contextInitialized(ServletContextEvent sc) {

       System.err.println("application被创建了:"+sc.getServletContext());

       URL url = MyContextListener.class.getClassLoader().getResource("count.txt");

       String path = url.getFile();

       System.err.println(path);

       try {

           BufferedReader bf = new BufferedReader(new FileReader(path));

           String line = bf.readLine();

           Integer count = Integer.valueOf(line);

           sc.getServletContext().setAttribute("count",count);

           System.err.println("初始的值是:"+count);

       } catch (Exception e) {

           e.printStackTrace();

       }

 

    }

    //在销毁这个对象时保存一些数据到数据库或是文件中

    public void contextDestroyed(ServletContextEvent e) {

       System.err.println("销毁了:"+e.getServletContext());

       //保存到文件中去

       URL url = MyContextListener.class.getClassLoader().getResource("count.txt");

       String path = url.getFile();

       System.err.println(path);

       File file = new File(path);

       try {

           PrintWriter out = new PrintWriter(file);

           //获取applicat的数据

           Integer count = (Integer) e.getServletContext().getAttribute("count");

           out.print(count);

           out.close();

       } catch (FileNotFoundException e1) {

           e1.printStackTrace();

       }

    }

}

在项目启动时一次加载所有的配置文件。

2 监听一个Sesison被保存到一个文件中的过程

第一步:书写Bean实现HttpSessionActivationListener

package cn.hx.domain;

import java.io.Serializable;

import javax.servlet.http.HttpSessionActivationListener;

import javax.servlet.http.HttpSessionEvent;

public class Person implements Serializable,HttpSessionActivationListener{

    private String name;

    public Person() {

    }

    public Person(String name) {

       this.name = name;

    }

    public String getName() {

       return name;

    }

    public void setName(String name) {

       this.name = name;

    }

    public void sessionWillPassivate(HttpSessionEvent se) {

       System.err.println("保存到文件中去了..."+this.getName());

    }

    public void sessionDidActivate(HttpSessionEvent se) {

       System.err.println("从文件中活化了...."+this.getName());

    }

    @Override

    public String toString() {

       return "Person [name=" + name + "]";

    }

}


第二步:配置这个项目

<Context  docBase="D:\\programfiles\\MyEclipse10\\wk3\\WebRoot">

       <Manager className="org.apache.catalina.session.PersistentManager"

                      saveOnRestart="true" >

                     <Store className="org.apache.catalina.session.FileStore"

                               directory="d:/a"> 

                     </Store>

       </Manager>

</Context>


第三步:测试

<%

    if(session.getAttribute("p")==null){

        int a = new Random().nextInt(100);

        Person p = new Person(""+a);

        session.setAttribute("p",p);

    }

    //保存cookie

    Cookie c = new Cookie("JSESSIONID",session.getId());

    c.setMaxAge(60*30);

    c.setPath(request.getContextPath());

    response.addCookie(c);

    %>

    <hr/>

    ${p}

    <hr/>

    <%=session.getId()%>