Java 在Tomcat 6上部署webapp
我得到了一个“mavenized”的webapp项目,我终于得到了我的文件.war 之后,我在Tomcat 6中部署了它,但我无法理解上下文,我遇到了以下错误: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:
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声明很容易忽略这一点)
- 检查您的
类是否引用了它所需的其他类(例如作为成员)。如果缺少它们,JVM也无法实例化类SessionListener
的对象,从而导致类似的问题SessionListener
- 甚至(特别是)在你对这个问题发表评论之后:请检查评论中的答案。完成这些步骤。它可能是您缺少的另一个jar,但无论确切的类是什么,底层概念都是相同的
- 如果这仍然没有帮助:查看我在评论中的建议:删除
和Log
引用几分钟,再试一次。即使不可能是这样,最好通过尝试来排除这种可能性,而不是说“不可能”LogFactory
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
中结束,然后您就可以得到它了。