在Tomcat 6上部署webapp

时间:2015-12-23 09:39:00

标签: 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: 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.xml

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


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

我使用与DB的适当连接配置了Tomcat的文件context.xml。 我使用Tomcat 6和JDK 1.7

1 个答案:

答案 0 :(得分:0)

你的web.xml中可能有这样的声明:

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

这意味着您的SessionListener课程(您在WEB-INF/classes中找到的)必须位于包application.util中。例如。编译器需要将其编译为WEB-INF/classes/application/util/SessionListener.class(不要只是将其移动到那里)。

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

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

  • 额外增加额外确保类名或包名中没有拼写错误(使用web.xml声明很容易错过)
  • 检查您的SessionListener类是否引用了其所需的其他类(例如成员)。如果缺少 ,则JVM也无法实例化类SessionListener的对象,从而导致类似的问题。
  • 在您对此问题提出意见后,甚至(或特别是):请从评论中查看Jay's link上的答案。完成这些步骤。它可能是一个你不相同的jar,但无论确切的类是什么,底层的概念都是一样的。
  • 如果仍然没有帮助:请完成评论中的建议:删除LogLogFactory个引用只需几分钟,然后重试。即使它不能这个,最好通过尝试将其排除,而不是说“不能”。