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')


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-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

发表评论>>

署名发表(评论可管理,不必输入下面的姓名)

姓名:

主题:

内容: 最少15个,最长1000个字符

验证码: (如不清楚,请刷新)

Copyright@2006 powered by YuLog