其他** 监听者被监听者监听到事件对象HttpSessionActivationListenerHttpSession – 监听HttpSession活化和顿化。HttpSessionEvent HttpSessionA ...
其他**
监听者 | 被监听者 | 监听到事件对象 |
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()%>
原标题:监听SevletContext的创建与监听一个Sesison被保存到一个文件中的过程 (57)
关键词:Sevlet
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。