Java 在Tomcat 6上部署webapp

Java 在Tomcat 6上部署webapp,java,eclipse,maven,tomcat,Java,Eclipse,Maven,Tomcat,我得到了一个“mavenized”的webapp项目,我终于得到了我的文件.war 之后,我在Tomcat 6中部署了它,但我无法理解上下文,我遇到了以下错误: GRAVE: Erreur lors de la configuration de la classe d'écoute de l'application (application listener) application.util.SessionListener java.lang.ClassNotFoundException:

我得到了一个“mavenized”的webapp项目,我终于得到了我的文件.war 之后,我在Tomcat 6中部署了它,但我无法理解上下文,我遇到了以下错误:

GRAVE: Erreur lors de la configuration de la classe d'écoute de l'application (application listener) application.util.SessionListener

java.lang.ClassNotFoundException: application.util.SessionListener
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4153)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4709)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1060)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:822)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1060)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
    at org.apache.catalina.core.StandardService.start(StandardService.java:525)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:759)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
SessionListener类的实现方式如下:

package application.util;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class SessionListener implements HttpSessionListener {

    private final Log log = LogFactory.getLog(this.getClass());

    public void sessionCreated(HttpSessionEvent event) {
        log.debug("session créée : " + event.getSession().getId());
    }

    public void sessionDestroyed(HttpSessionEvent event) {
    }

}
<web-app ...>
    <listener>
        <listener-class>application.util.SessionListener</listener-class>
    </listener>
</web-app>
web.xml

<!-- Spring intialisation -->
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>


    <listener>
        <listener-class>
            application.util.SessionListener
        </listener-class>
    </listener>

org.springframework.web.context.ContextLoaderListener
application.util.SessionListener
我将Tomcat的context.xml文件配置为与数据库的适当连接。
我使用Tomcat 6和JDK 1.7,您可能在web.xml中有这样的声明:

package application.util;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class SessionListener implements HttpSessionListener {

    private final Log log = LogFactory.getLog(this.getClass());

    public void sessionCreated(HttpSessionEvent event) {
        log.debug("session créée : " + event.getSession().getId());
    }

    public void sessionDestroyed(HttpSessionEvent event) {
    }

}
<web-app ...>
    <listener>
        <listener-class>application.util.SessionListener</listener-class>
    </listener>
</web-app>

application.util.SessionListener
这意味着您的
SessionListener
类(您在
WEB-INF/classes
中找到的)必须在包
应用程序.util
中。例如,编译器需要将其编译为
WEB-INF/classes/application/util/SessionListener.class
(不要将其移到那里)

或者,更改web.xml中的声明以省略
application.util.
部分

编辑:我不知道如何阅读您的评论-它可能已经在该软件包中。如果确实如此,还有两种选择:

  • 另外确保类或包名中没有输入错误(web.xml声明很容易忽略这一点)
  • 检查您的
    SessionListener
    类是否引用了它所需的其他类(例如作为成员)。如果缺少它们,JVM也无法实例化类
    SessionListener
    的对象,从而导致类似的问题
  • 甚至(特别是)在你对这个问题发表评论之后:请检查评论中的答案。完成这些步骤。它可能是您缺少的另一个jar,但无论确切的类是什么,底层概念都是相同的
  • 如果这仍然没有帮助:查看我在评论中的建议:删除
    Log
    LogFactory
    引用几分钟,再试一次。即使不可能是这样,最好通过尝试来排除这种可能性,而不是说“不可能”

不存在“application.util.SessionListener”类。您必须在应用程序的类或应用程序的libs中拥有它,或者在服务器libs中。
application.util.SessionListener
是应用程序代码拥有的东西,比如
java.util.EventListener
?我在
src/main/java:SessionListener.java
下获得了它,并且在编译项目时,我在下面获得了类
target\application-0.0.1-SNAPSHOT\WEB-INF\CLASSES:SessionListener.class
它是包
application.util
下的一个类,看看这是否有帮助-谢谢您的回复;这是我的类SessionListenerThnx,用于更新我从
org.apache.commons.logging
中删除应答器您的侦听器引用类-如果它们不可用,我的第二个公告点(“…引用其他类…”)将有效。删除这些引用并临时替换为
System.out.println
-这将排除这种可能性,或者为您指出根本原因。我在Maven dependencies中获得了jar commons-logging-1.0.4.jar,如果项目没有识别它们,我很可能会在代码中得到一个eror:import org.apache.commons.logging.Log;导入org.apache.commons.logging.LogFactory;如何将它们添加到maven依赖项中?我经常看到编译器对它们很满意,只是它们在运行时不可用,所以tomcat找不到它们。检查jar是否在
WEB-INF/lib
中结束,然后您就可以得到它了。