代码之家  ›  专栏  ›  技术社区  ›  James

Java侦听器未在Tomcat下启动

  •  1
  • James  · 技术社区  · 17 年前

    SEVERE: Error listenerStart
    24-Mar-2009 13:23:10 org.apache.catalina.core.StandardContext start
    SEVERE: Context [/exampleA] startup failed due to previous errors
    

    我不知道我为什么会得到这个。在我的web.xml中,我有以下内容

    <listener>
        <listener-class>
            uk.co.a.listener.SessionListener
        </listener-class>
    </listener>
    
    <listener>
        <listener-class>
            uk.co.a.listener.SessionAttributeListener
        </listener-class>
    </listener>
    

    public class SessionAttributeListener implements HttpSessionAttributeListener {
        static Log log = LogFactory.getLog(SessionAttributeListener.class.getName());
    
        public void attributeAdded(HttpSessionBindingEvent hsbe) {
            log.debug("VALUE attributeAdded to THE SESSION:" + hsbe.getName());
        }
    
        public void attributeRemoved(HttpSessionBindingEvent hsbe) {
            log.debug("VALUE attributeRemoved from THE SESSION:" + hsbe.getName());
        }
    
        public void attributeReplaced(HttpSessionBindingEvent hsbe) {
            log.debug("VALUE attributeReplaced in THE SESSION:" + hsbe.getName());
        }
    }
    

    和

    public class SessionListener implements HttpSessionListener {
    
        static Log log = LogFactory.getLog(SessionListener.class.getName());
    
        private static int activeSessions = 0;
        public void sessionCreated(HttpSessionEvent evt)
        {
            activeSessions++;
            log.debug("No. of active sessions on:"+
                    new java.util.Date()+" : "+activeSessions);
        }
        public void sessionDestroyed (HttpSessionEvent evt)
        {
            activeSessions--;
        }
    } 
    

    为什么这还没有开始?或者我可以在哪里查找更多信息?

    更新

    更新

    使用的JAR文件有问题。SessionAttributeListener的类未包含在内。当它被包含进来时,应用程序就启动了。

    更新

    3 回复  |  直到 17 年前
        1
  •  2
  •   John Smith    13 年前

    您的更新是否为“AttributeListener似乎没有运行。使用它时,代码会失败。是否有一种简单的方法来检查侦听器是否正在运行?”您是否尝试过添加静态初始化器?大约

    static {
    log.debug("static initialiser called");
    }
    

    这样,第一次引用类时,您应该得到一个日志记录。

        2
  •  1
  •   stjohnroe    17 年前

    由于我最终在其他地方找到了解决方案,我认为用这些信息更新这个问题会很有用。

    这一切都与底层异常有关,该异常导致可怕的“SEVERE:Error listenerStart”消息没有记录在任何地方,以及如何配置日志记录以产生异常。

    自 here 日志问题有一个非常清晰的描述和解决方案。

    就我而言,我选择了一个更精简的版本,并补充道

    org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/web-app].level = FINE
    org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/web-app].handlers = java.util.logging.ConsoleHandler
    

    转到tomcatconf/logging.properties,并用适当的web应用程序上下文路径替换/web-app。

    神奇的是,隐藏的异常出现了,它告诉我Java 6运行时不想知道Java 7编译的代码。尴尬,但很容易解决。

    这适用于Tomcat 7。您的里程数可能会有所不同。

        3
  •  0
  •   Kyle W. Cartmell    17 年前

    当您在Tomcat日志中遇到“由于以前的错误导致启动失败”时,您将在日志中找到导致此问题的异常,或者您需要在Tomcat中完全配置日志记录,以便将异常写入日志。一旦将根本原因写入日志,解决方案通常很简单。

    推荐文章