实际上我已经在tomcat中本地设置了一个java应用程序,那个时候它的工作正常但是在一个月后它再次给出了以下错误而没有改变任何代码。
javax.servlet.ServletException: Servlet.init() for servlet action threw exception
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
java.lang.Thread.run(Thread.java:595)
根本原因
java.lang.NoClassDefFoundError
com.lexmark.efoundations.lxpd.gui.struts.ActionServlet.init(Unknown Source)
javax.servlet.GenericServlet.init(GenericServlet.java:212)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
java.lang.Thread.run(Thread.java:595)
我还检查提及类“com.lexmark.efoundations.lxpd.gui.struts.ActionServlet”是否存在于适当的位置。
答案 0 :(得分:1)
不确定这是否与任何方式相关:但如果类中的静态初始化程序块失败(因此导致类加载失败,因此没有ClassDef),也可能抛出此错误。
答案 1 :(得分:0)
看起来像是耗尽了一些资源给我。
无法连接,因为它们不会导致NoClassDefFound。因此必须是记忆。究竟是什么导致类加载器突然忘记了这个类的逻辑 - 我还没准备好说,但是任何操作人员都知道这个问题:在周末自动回收服务器。
P.S。有趣的是异常来自init()方法。这意味着正在创建一个Servlet类的新实例。每个Servlet只创建一个类实例,这意味着应用程序已重新初始化。如果没有人碰到服务器,那可能是某些Tomcat失败(再次,可能是资源短缺造成的)。需要阅读日志并深入了解。