首页 > 学院 > 开发设计 > 正文

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

2019-11-15 00:05:58
字体:
来源:转载
供稿:网友
监听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属性变化

1ServletContextListener 用于监听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()%>


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表