找不到tomcat eclipse主jsp随机类

Posted

技术标签:

【中文标题】找不到tomcat eclipse主jsp随机类【英文标题】:tomcat eclipse main jsp random class not found 【发布时间】:2015-02-01 00:14:55 【问题描述】:

好吧,我的 eclipse、maven、tomcat 配置有一个相当奇怪的问题。不知何故,我为我的项目的主 jsp(总是被调用并包含每个页面的正文)的 jsp 随机获得 ClassNotFoundException。 该应用程序在测试服务器和实时服务器上正常运行,而不会遇到此问题。 在我的开发系统上进行 Clean Project、Clean on Tomcat 和 Clean Tomcat 工作目录后,它有时会再次工作。但大多数情况下,我必须多次(10 到 20 次)执行此过程,直到它再次开始工作。比经过一些小的更改后它再次停止工作,我必须再次清洁和清洁 10 到 20 次,直到它再次开始工作。这真的很烦人,我现在真的知道如何解决这个问题了。

例外:

org.apache.jasper.JasperException:java.lang.ClassNotFoundException:org.apache.jsp.frame_jsp 在 org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:177) 在 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369) 在 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 在 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 com.framepool.web.filters.RequestFilter.doFilter(RequestFilter.java:177) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 com.framepool.web.filters.RequestAttributesFilter.doFilter(RequestAttributesFilter.java:146) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748) 在 org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:486) 在 org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:411) 在 org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338) 在 org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1054) 在 org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:384) 在 org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229) 在 com.framepool.web.VideoRequestProcessor.process(VideoRequestProcessor.java:64) 在 org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858) 在 com.framepool.web.ValidableActionServlet.doGet(ValidableActionServlet.java:59) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:620) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 com.framepool.web.filters.RequestFilter.doFilter(RequestFilter.java:177) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 com.framepool.web.filters.RequestAttributesFilter.doFilter(RequestAttributesFilter.java:146) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748) 在 org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:486) 在 org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:411) 在 org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338) 在 com.framepool.web.filters.rest.LanguageFilter.doFilter(LanguageFilter.java:79) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 com.framepool.web.filters.DomainRedirectFilter.doFilter(DomainRedirectFilter.java:86) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 com.framepool.web.filters.XSSFilter.doFilter(XSSFilter.java:39) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:745) 引起:java.lang.ClassNotFoundException:org.apache.jsp.frame_jsp 在 java.net.URLClassLoader$1.run(URLClassLoader.java:366) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:355) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:354) 在 org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:132) 在 org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:63) 在 org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:145) 在 org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:172) ... 66 更多

【问题讨论】:

什么是完整的例外? 添加到描述中 如果该类存在并且您可以在您面前看到它,则这是一个日食问题。我有很多次,通常我会清理项目,或者只是删除 .eclipse 文件夹(在 linux 中),检查项目设置以确保类路径正确。 【参考方案1】:

解决方案是完全删除 eclipse/tomcat 暂存目录。搜索 .class 文件需要很长时间并且不会给出任何结果。 可以在 /.metadata/.plugins/org.eclipse.wst.server.core 中找到临时目录,在那里您可以找到一个名为 tmp0 的文件夹。删除此文件夹解决了我的问题。

【讨论】:

这对我也有用。就我而言,突然所有 .class 文件都从 tomcat 目录中消失了。然后我必须做 Clean, Clean, Pray, Clean , Publish 魔法,直到它再次工作......当然是下一次它再次中断。你用的是最新的 Neon.1 还是有这个问题。这是一些已知的错误吗?【参考方案2】:

从基础开始。 ClassNotFoundException 的唯一两个原因是该类不存在,或者运行时的配置未包含指向该类所在位置的正确指针。

找出您的开发系统期望类文件在您的项目中的位置。精通 eclipse 的人可以准确地告诉你这是在哪里配置的,或者可以配置它的各个地方,我无法想象。根据您运行 Tomcat 的方式,它可能不是日食;例如,将 Tomcat 作为一个单独的程序运行会使其与 eclipse 配置分离。

另一种可能的方法是,当它工作时,在整个磁盘中搜索 .class 文件以查找显示丢失的类(或其中一个,您不清楚它是否始终相同文件)。它可能有多个副本,请注意所有副本。下次它不起作用时,请执行相同的搜索。

我假设您没有在开发环境中将类文件打包到 jar 中。如果是这样,那么这两个搜索应该告诉您类文件应该在哪里,但不是。也许你可以从那里向后工作,找出为什么它看起来是随机的,哪个过程应该把它放在那里但没有。

我不认为它实际上是随机的,我不认为它是日食。我认为在您清理并重新启动的 10-20 次中,正在发生一些不同的事情。我希望您也已确认您没有用完磁盘空间或忽略表明编译问题的日志。

【讨论】:

嗯,主要问题是,为什么它有时有效,有时无效。所以我确定这与配置无关。我也确定我没有空间不足,也没有看到任何编译问题。我还与团队中的其他开发人员进行了交谈,他们有时也遇到了这个问题。但是他们总是可以通过清理项目、tomcat和工作目录来解决问题。 部分“从基础开始”的意思是“尽量不要假设事物;仅从直接证据开始工作”。我不知道是不是配置,没说我有,这不是我的意思。我是说我相当有信心日食不会将其作为错误(或故意)这样做,您的问题出在其他地方。这个错误的好处是它不是由太多的根源造成的,所以收集关于它的证据来排除故障。我想搜索磁盘似乎很麻烦,但它不会比您反复重置更麻烦。 根据您对原始问题的补充,我看到缺少的类最终是从 JSP 创建的。知道该类文件是在您运行应用程序之前创建的,还是动态创建的(或两者都创建)会很有用。 总是同一个文件吗? 是不是一直都是同一个文件,是webapp发布到tomcat的时候创建的。并且发布是在清理时完成的构建之后完成的。发布后,tomcat 会重新加载,这应确保使用新发布的版本。

以上是关于找不到tomcat eclipse主jsp随机类的主要内容,如果未能解决你的问题,请参考以下文章

java 主启动类找不到

Eclipse中HttpServlet类找不到

myeclipse 下执行mian函数报类找不到主函数

eclipse中启动tomcat出现错误: 找不到或无法加载主类 org.apache.tomcat.startup.Main

TOMCAT启动,找不到建立的JSP网页

Eclipses使用小技巧