Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有eclipse的tomcat中servlet的java.lang.ClassNotFoundException_Java_Eclipse_Tomcat_Servlets_Classnotfoundexception - Fatal编程技术网

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

带有eclipse的tomcat中servlet的java.lang.ClassNotFoundException,java,eclipse,tomcat,servlets,classnotfoundexception,Java,Eclipse,Tomcat,Servlets,Classnotfoundexception,我开始使用servlet在eclipse中开发java web应用程序,并在本地主机上使用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:

我开始使用servlet在eclipse中开发java web应用程序,并在本地主机上使用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>

ImageServlet
test.ImageServlet
ImageServlet
/形象
而myproject.xml的内容是:


有人能告诉我如何修复代码,使其不会抛出ClassNotFoundException吗?

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


我猜是因为您没有将WAR文件正确编译、打包和部署到Tomcat上。

这是一个maven项目?在maven项目中,src/test是单元测试的位置,被排除在build和war之外,请尝试更改包名,然后重试。

看起来您正在构建一个基于maven的项目,而您将类放在了错误的位置


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

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

最近在我的一个项目中遇到了这个问题(我这样说是因为另一个项目尽管使用了相同的jar和所有jar,但工作得非常好)。多次尝试清理项目,多次删除.metadata文件夹。什么都没用。这些类根本没有被编译

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

  • 右键单击项目并转到“属性”
  • 转到“部署程序集”
  • 确保有下图中给出的两个映射。 . 如果没有,则添加缺少的映射
  • 单击应用
  • 清理、构建和运行您的项目

  • 如果您的项目是Maven项目,您可以尝试清理它。单击“项目>清理”,然后选择要清理的所需项目

    有时,如果您将Maven与控制台和Eclipse一起使用,目标会变得“疯狂”,唯一的方法就是清理项目


    还有一次,您必须在ProjectFacets(例如Tomcat 9.0)中添加相应的服务器运行时。

    @dyffymo谢谢,但我正在使用上下文路径和XML配置文件从Tomcat manager应用程序中进行部署。这种方法适用于其他应用程序,而不使用WAR文件。你能提出一些与我所采取的方法相一致的建议吗+感谢您的帮助。不,我建议您创建一个正确的WAR文件。我不会被它曾经“有效”的事实所愚弄。战争是正确的。对Eclipse的依赖不是。谢谢,但它不是一个maven项目。见我对达菲莫的评论+谢谢你的帮助。还有其他建议吗?@Christian Meneses谢谢,但这不是一个专业项目+谢谢你的帮助。还有其他想法吗?+1谢谢你花时间回答这个老问题。我希望你的回答能帮助其他人。清理项目确实有帮助。。谢谢不要忘记启用自动生成
    Project
    buildautomatically
    “启用自动生成Project>buildautomatically”也帮助了我和清理项目。感谢您和+1为这个老问题添加了见解。在我的例子中,我发现项目的构建路径没有引用有效的servlet-api.jar文件。因此,我通过指向有效的jar文件并删除旧的引用来配置构建路径。谢谢您的有用回答。