带有eclipse的tomcat中servlet的java.lang.ClassNotFoundException

时间:2013-07-31 22:41:04

标签: java eclipse tomcat servlets classnotfoundexception

我开始使用servlet在eclipse中开发一个java web应用程序,并在我的localhost上使用tomcat服务器进行测试。我已经在tomcat中部署了应用程序,但是当我尝试在浏览器中加载目标URL时,我得到以下堆栈跟踪:

Jul 31, 2013 2:58:31 PM org.apache.catalina.core.ApplicationContext log
INFO: Marking servlet ImageServlet as unavailable
Jul 31, 2013 2:58:31 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Allocate exception for servlet ImageServlet
java.lang.ClassNotFoundException: test.ImageServlet
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:527)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:509)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:137)
        at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1144)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:865)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:136)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1852)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)  

ImageServlet类非常清楚地位于我的eclipse工作区的myproject / src / test文件夹中,其中myproject是eclipse项目的名称,test是包。

web.xml位于myproject / web / WEB-INF / web.xml中,myproject.xml位于myproject / myproject.xml

web.xml的内容是:

<?xml version="1.0"?>
<web-app 
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">

    <servlet>
        <servlet-name>ImageServlet</servlet-name>
        <servlet-class>test.ImageServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ImageServlet</servlet-name>
        <url-pattern>/image</url-pattern>
    </servlet-mapping>
</web-app>

myproject.xml的内容是:
      

有人能告诉我如何修复我的代码,以免它抛出ClassNotFoundException吗?

7 个答案:

答案 0 :(得分:20)

有时在创建过滤器或servlet时,类文件不会在eclipse中的build文件夹中生成。清除应用程序并构建一次,在上面的路径中生成一个.class文件。在某些情况下,这会删除class not found错误。

答案 1 :(得分:2)

这是一个maven项目?在maven项目中,src / test是单元测试的位置,从构建和战争中排除,尝试更改包名称并重试。

答案 2 :(得分:2)

看起来您正在构建一个基于Maven的项目,并且您将课程放在错误的位置

您应该使用src/main/java来放置您的类,并使用src/test/java来测试它(例如,如果您有任何JUnit测试)。

答案 3 :(得分:2)

最近我的一个项目遇到了这个问题(我之所以说这是因为尽管使用了相同的JAR和其他所有项目,但其他项目工作得非常好)。多次尝试清理项目,多次删除.metadata文件夹。没有任何效果。这些课程根本没有编译。

在项目的构建路径中删除未绑定的jre6库是有效的。

答案 4 :(得分:2)

  1. 右键单击项目并转到&#34;属性&#34;
  2. 转到&#34;部署程序集&#34;
  3. 确保您有两个映射,如下图所示。 Web deployment assembly in eclipse。如果没有,则添加缺少的映射。
  4. 点击“应用”。
  5. 清理,构建和运行您的项目。

答案 5 :(得分:1)

如果您的WEB-INF / classes部署中没有类test.ImageServlet,那么Tomcat将无法找到它。

我的猜测是你没有正确编译,打包和部署WAR文件到Tomcat。

答案 6 :(得分:1)

如果您的项目是Maven项目,您可以尝试清理它。单击项目&gt;清洁并选择要清理的所需项目。

有时,如果你将Maven与控制台和Eclipse一起使用,那么目标就会变得疯狂&#34;并且唯一的方法是清理项目。