首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

Servlet上下文监听出错!(初学者请大侠帮助!1)

2012-02-01 
Servlet上下文监听出错!!(菜鸟请大侠帮助!!!!!!1)下面是一个对ServletContext和其属性监听的类MyServletCo

Servlet上下文监听出错!!(菜鸟请大侠帮助!!!!!!1)
下面是一个对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();
        }

        }    

}

MyServletContextListener实现了ServletContextListener和ServletContextAttrivuteListener接口,所以它能监听ServletContext创建,销毁及它的属性修改的信息.下面是部署这个监听器web.xml,相应的代码是
<web-app>
        <listener>
                <listener-class> com.jspdev.ch8.MyServletContextListener </listener-class>
        </listener>
</web-app>

下面是一个测试程序context_test.jsp
<%

out.println( "add   attribute ");
getServletContext().setAttribute( "userName ", "hellking ");
out.println( "replace   attribute ");
getServletContext().setAttribute( "userName ", "asiapower ");
out.println( "remove   attrivute ");
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 ')

但是出现了错误:
2007-8-23   11:07:05   org.apache.catalina.core.StandardContextValve   invoke
严重:   Exception   sending   request   initialized   lifecycle   event   to   listener   instance   of   class   com.jspdev.ch8.MyRequestListener
java.lang.LinkageError:   Class   javax/servlet/ServletRequestEvent   violates   loader   constraints
at   java.lang.ClassLoader.defineClass1(Native   Method)
at   java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at   java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at   org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1847)
at   org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:873)
at   org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1326)
at   org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1205)
at   java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at   com.jspdev.ch8.MyRequestListener.requestInitialized(MyRequestListener.java:17)
at   org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:163)
at   org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at   org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at   org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at   org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at   org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at   org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at   org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at   org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at   org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)


at   java.lang.Thread.run(Thread.java:595)
请各位大哥帮忙解决!

[解决办法]
java.lang.LinkageError: Class javax/servlet/ServletRequestEvent violates loader constraints
--------------------------------------------
连接的时候出错,这个比较麻烦了,先标记一个.

热点排行