当前位置: 首页 > 知识库问答 >
问题:

带有Tomcat WAR文件的java.lang.ClassNotFoundException

赵宏达
2023-03-14

我试图为一个我目前正在工作的项目制作一个简单的REST API,以简化我每天必须做的任务,当我到达托管它的地方时,我遇到了一个500服务器的错误。查看(tomcat home dir)/logs/localhost.2021-10-22.log中的日志,我发现了这个错误:

22-Oct-2021 21:33:58.974 SEVERE [http-nio-13760-exec-64] org.apache.catalina.core.StandardWrapperValve.invoke Allocate exception for servlet [OrderServlet]
java.lang.ClassNotFoundException: api.OrderServlet
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1407)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1215)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:538)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:519)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:149)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1070)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:788)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:128)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)

我在这里还有“不存在”的类的代码:

package api;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.json.JSONObject;

import data.Order;

public class OrderServlet extends HttpServlet {
    
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        
        String requestUrl = request.getRequestURI();
        String id = requestUrl.substring("cafe/orders/".length());
        
        
        Order order = Requests.getInstance().getOrder(id);
        
        if (order != null) {
            String json = "{\n";
            json += "\"id\": " + JSONObject.quote(order.getID()) + ",\n";
            json += "\"id\": " + JSONObject.quote(order.getName()) + ",\n";
            json += "\"id\": " + JSONObject.quote(String.valueOf(order.getTime())) + ",\n";
            //various parameters removed to prevent abuse in the future (I'm looking at you, Dax)
            //I'd rather not have a coffee order show up with a comically large amount of creamers in it
            json += "};";
            response.getOutputStream().println(json);
        } else {
            //order was not found
            response.sendError(404);
        }
    }
    
    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse responce) throws IOException, ServletException {
        String id = request.getParameter("id");
        String name = request.getParameter("name");
        int time = Integer.parseInt(request.getParameter("time"));
        //various parameters removed
        
        Requests.getInstance().putOrder(new Order(id, name, time, type, //various parameters removed
));
    }

}

我检查了这个类是否确实存在,尝试重新构建这些类,将其导入为未编译的文件,并使用web.xml进行处理,并且检查了构建路径中是否没有随机的jre6库(从这里开始)。我没有使用Maven,Tomcat可以很好地加载文档和manager。如何使Tomcat能够识别类?

共有1个答案

鲜于璞瑜
2023-03-14

看起来文件没有从Eclipse中正确导出,这使得它手动修复了这个问题。

Edit:原来问题是我的源文件夹不是Eclipse试图导出的文件夹。进入属性>部署程序集并更改源文件夹修复了它(谢谢@Piotr P Karwasz!)

 类似资料:
  • 我有一个问题,log4j没有登录到我的一个文件,我不知道为什么。我有一些运行脚本的代码,脚本可以添加日志记录,日志记录到使用log4j的文件中,我正在尝试创建一个只记录特定脚本的appender。 上面的appender可以工作,我在日志文件中得到了它 当脚本记录某些内容时,它会以这将使用my log4j中的上述配置显示在日志中。属性文件。 如果我将上述内容更改为: 文件中未记录任何内容。我本以为

  • 我使用库Jaudiotagger创建了一个java类,它运行起来没有问题。然后我用它做了一个罐子,得到了noclassdefounderror。事情是这样的: 然后创建了清单和jar文件。 我得到了以下输出: 然后我运行jar文件,得到“A Java Exception has currence.”。我也试过: 我使用的是Windows8和最新的java(1.7.0_17)。

  • 问题内容: 文件孔是文件中的空白空间,但是不占用任何磁盘空间,并且包含空字节。因此,文件大小大于其在磁盘上的实际大小。 但是,我不知道如何创建带有文件孔的文件进行试验。 问题答案: 将命令与参数一起使用。 这会为您创建一个从字节8192到字节28671的漏洞。 这是一个示例,说明该文件确实存在漏洞(该命令告诉您文件正在使用多少磁盘块): 如您所见,带孔的文件尽管大小相同,但占用的磁盘块较少。 如果

  • 我刚刚开始研究apache camel(使用蓝图路线),我已经被卡住了。 我需要处理一组不同格式的csv文件。我有5个文件,foo_X_X指定csv文件的类型,文件有日期戳。这些文件可能很大,所以一旦写入所有文件,就会写入一个“完成”文件。完成的文件名为foo_trigger_20160110.csv. 我在文件中看到了doneFileName选项,但它只支持静态名称(我在文件名中有一个日期),或

  • 问题内容: http://www.mkyong.com/webservices/jax-rs/file-upload-example-in- jersey/ 我正在遵循本指南并遇到问题。我有一些问题。 是否所有依赖项都必须对应?我的项目有一些org.glassfish.jersey依赖项,本指南建议使用org.sun.jersey。我是否也必须使用相同的版本进行更改? 我有这个错误 这是我的网络服

  • 我有一个目录,它是在执行应用程序后创建的。在使用应用程序的过程中,它充满了一些图片,这些图片是ComboBox的ItemsSource。在关闭应用程序之前,我试图通过设置new()或NULL来清除ItemsSource并删除该目录。如果目录为空,则会正常删除。但除此之外——什么都没有发生,也没有例外。我做错了什么? 创建目录并将路径值分配给“FeedBackScreenshotsPath” 删除