servlet上下文监听
servlet上下文监听
servlet上下文:在服务器上使用Session对象来维持同单一客户相关的状态,为多个用户的Web应用维持一个状态时使用Servlet环境(Context).
常用方法:getAttribute(Stringname),getContext(Stringuripath),removeAttribute(String name),setAttribute(String name,Object object)
监听ServletContext的信息:
实现ServletContextListener,ServletContextAttributeListener接口,以便可以监听ServletContext创建,销毁以及它的属性的变化的信息。并且通过private void logout(String message)方法把信息打印到c:\\test.txt文件中。
ServletContext初始化是在服务器启动时,销毁在关闭时。
下面让我们来看以下MyServletContextListener.java这个程序来深入了解以上的知识点。
package com.jspdev.ch8;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import java.io.*;
public final class MyServletContextListener
implements ServletContextListener,ServletContextAttributeListener {
private ServletContext context = null;
/**
*以下代码实现ServletContextListener接口。
*/
public void contextDestroyed(ServletContextEvent sce) {
logout("contextDestroyed()-->ServletContext被销毁");
this.context = null;
}
public void contextInitialized(ServletContextEvent sce) {
this.context = sce.getServletContext();
logout("contextInitialized()-->ServletContext初始化了");
}//ServletContextListener
/**
*以下代码实现 ServletContextAttributeListener接口
*/
public void attributeAdded(ServletContextAttributeEvent scae) {
logout("增加了一个ServletContext属性:attributeAdded('" + scae.getName() + "', '" +
scae.getValue() + "')");
}
public void attributeRemoved(ServletContextAttributeEvent scae) {
logout("删除了一个ServletContext属性:attributeRemoved('" + scae.getName() + "', '" +
scae.getValue() + "')");
}
public void attributeReplaced(ServletContextAttributeEvent scae) {
logout("某个ServletContext的属性被改变:attributeReplaced('" + scae.getName() + "', '" +
scae.getValue() + "')");
}
private void logout(String message) {
PrintWriter out=null;
try
{
out=new PrintWriter(new FileOutputStream("c:\\test.txt",true));
out.println(new java.util.Date().toLocaleString()+"::Form ContextListener: " + message);
out.close();
}
catch(Exception e)
{
out.close();
e.printStackTrace();
}
}
}
<--------------------------------------->
部署这个监听器
web.xml
<web-app>
<listener> <listener-class>com.jspdev.ch8.MyServletContextListener</listener-class> </listener>
......
</web-app>
<---------------------------------------->
简单的测试程序
context_test.jsp
<%@ page language="java" contentType="text/html; charset=gb2312"%>
<%
out.println("add attribute");
getServletContext().setAttribute("userName","hellking");
out.println("replace attribute");
getServletContext().setAttribute("userName","asiapower");
out.println("remove attribute");
getServletContext().removeAttribute("userName");
%>
运行context_test.jsp后,在c:\test.txt中的信息:
21:38 2005-9-21
2005-9-21 21:36:39::Form ContextListener: 增加了一个ServletContext属性:attributeAdded('userName', 'hellking')
2005-9-21 21:36:39::Form ContextListener: 某个ServletContext的属性被改变:attributeReplaced('userName', 'hellking')
2005-9-21 21:36:39::Form ContextListener: 删除了一个ServletContext属性:attributeRemoved('userName', 'asiapower')
servlet上下文:在服务器上使用Session对象来维持同单一客户相关的状态,为多个用户的Web应用维持一个状态时使用Servlet环境(Context).
常用方法:getAttribute(Stringname),getContext(Stringuripath),removeAttribute(String name),setAttribute(String name,Object object)
监听ServletContext的信息:
实现ServletContextListener,ServletContextAttributeListener接口,以便可以监听ServletContext创建,销毁以及它的属性的变化的信息。并且通过private void logout(String message)方法把信息打印到c:\\test.txt文件中。
ServletContext初始化是在服务器启动时,销毁在关闭时。
下面让我们来看以下MyServletContextListener.java这个程序来深入了解以上的知识点。
package com.jspdev.ch8;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import java.io.*;
public final class MyServletContextListener
implements ServletContextListener,ServletContextAttributeListener {
private ServletContext context = null;
/**
*以下代码实现ServletContextListener接口。
*/
public void contextDestroyed(ServletContextEvent sce) {
logout("contextDestroyed()-->ServletContext被销毁");
this.context = null;
}
public void contextInitialized(ServletContextEvent sce) {
this.context = sce.getServletContext();
logout("contextInitialized()-->ServletContext初始化了");
}//ServletContextListener
/**
*以下代码实现 ServletContextAttributeListener接口
*/
public void attributeAdded(ServletContextAttributeEvent scae) {
logout("增加了一个ServletContext属性:attributeAdded('" + scae.getName() + "', '" +
scae.getValue() + "')");
}
public void attributeRemoved(ServletContextAttributeEvent scae) {
logout("删除了一个ServletContext属性:attributeRemoved('" + scae.getName() + "', '" +
scae.getValue() + "')");
}
public void attributeReplaced(ServletContextAttributeEvent scae) {
logout("某个ServletContext的属性被改变:attributeReplaced('" + scae.getName() + "', '" +
scae.getValue() + "')");
}
private void logout(String message) {
PrintWriter out=null;
try
{
out=new PrintWriter(new FileOutputStream("c:\\test.txt",true));
out.println(new java.util.Date().toLocaleString()+"::Form ContextListener: " + message);
out.close();
}
catch(Exception e)
{
out.close();
e.printStackTrace();
}
}
}
<--------------------------------------->
部署这个监听器
web.xml
<web-app>
<listener> <listener-class>com.jspdev.ch8.MyServletContextListener</listener-class> </listener>
......
</web-app>
<---------------------------------------->
简单的测试程序
context_test.jsp
<%@ page language="java" contentType="text/html; charset=gb2312"%>
<%
out.println("add attribute");
getServletContext().setAttribute("userName","hellking");
out.println("replace attribute");
getServletContext().setAttribute("userName","asiapower");
out.println("remove attribute");
getServletContext().removeAttribute("userName");
%>
运行context_test.jsp后,在c:\test.txt中的信息:
21:38 2005-9-21
2005-9-21 21:36:39::Form ContextListener: 增加了一个ServletContext属性:attributeAdded('userName', 'hellking')
2005-9-21 21:36:39::Form ContextListener: 某个ServletContext的属性被改变:attributeReplaced('userName', 'hellking')
2005-9-21 21:36:39::Form ContextListener: 删除了一个ServletContext属性:attributeRemoved('userName', 'asiapower')
air_tuyh
2005-09-21 21:41:18
评论:4
阅读:2762
引用:0
呵呵
@2007-05-10 21:19:17 大口吃饭
想不到到时间跨度是这么的大,看清时间才吓我一跳
问题解决
@2007-05-10 21:17:25 大口吃饭
问题找到了,在控制台出现的信息前面有下在面的语句:(仁兄没有贴出来)
2007-5-10 21:08:43 org.apache.catalina.core.StandardContextValve invoke
严重: Exception sending request initialized lifecycle event to listener instance of class com.jspdev.ch8.MyRequestListener
这里提到出错的是监听器:com.jspdev.ch8.MyRequestListener
故在web.xml页面中把
<listener>
<listener-class>com.jspdev.ch8.MyRequestListener</listener-class>去掉,再试就可以了。
</listener>
2007-5-10 21:08:43 org.apache.catalina.core.StandardContextValve invoke
严重: Exception sending request initialized lifecycle event to listener instance of class com.jspdev.ch8.MyRequestListener
这里提到出错的是监听器:com.jspdev.ch8.MyRequestListener
故在web.xml页面中把
<listener>
<listener-class>com.jspdev.ch8.MyRequestListener</listener-class>去掉,再试就可以了。
</listener>
我的也一样
@2007-05-10 21:00:27 大口吃饭
我的情与你完全一样,不知道究竟是什么原因!
我急
我急
我的报错了! 为啥啊?
@2006-04-06 23:31:09 hawk
java.lang.LinkageError: Class javax/servlet/ServletRequestEvent violates loader constraints
java.lang.ClassLoader.defineClass1(Native Method)
java.lang.ClassLoader.defineClass(ClassLoader.java:620)
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1812)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:866)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1319)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1198)
java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
com.jspdev.ch8.MyRequestListener.requestInitialized(MyRequestListener.java:17)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
org.apache.catalina.con
java.lang.ClassLoader.defineClass1(Native Method)
java.lang.ClassLoader.defineClass(ClassLoader.java:620)
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1812)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:866)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1319)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1198)
java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
com.jspdev.ch8.MyRequestListener.requestInitialized(MyRequestListener.java:17)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
org.apache.catalina.con
