22

我在 Linux Ubuntu Natty Narwhal 中使用 Tomcat 7.0.12 运行 Eclipse Helios Service Release 1。

我一直很高兴地重新部署我的 web 应用程序,直到它显然无缘无故停止工作。显示以下异常:

SEVERE: Allocate exception for servlet Index
java.lang.ClassNotFoundException: obliquid.servlet.Index
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
  • 服务器选项卡中,我有“本地主机上的 Tomcat v7.0 服务器 [已启动,已同步]
  • 我的项目显示为 Tomcat v7.0 Server 的子项
  • 在 Properties, Java Build Path, Source 我有Project/src Source 文件夹
  • 在属性,Web 部署程序集,我有以下映射:/WebContent -> //src -> /WEB-INF/classes/test -> /build/classes
  • 我的src目录在obliquid/servlet/Index.java中包含一个 Servlet
  • 我已经尝试点击Clean Module Work Directory...发布
  • 我试图从 Eclipse 服务器选项卡中停止和启动服务器

我还应该检查什么?谢谢你。

更新尽管现在我正在处理新项目,但我还是回来检查旧项目,而且神秘地现在它正在工作。我想我将无法找到发生了什么。

但是今天在新项目中,我没有明显的原因出现 404 错误,我发现右键单击 Tomcat 服务器并选择“Clean ...”可能很有用。也许它可能会有所帮助。

选择“清理...”表示:“清理将丢弃所有发布状态并从头开始重新发布。您确定要清理所有已发布资源吗?”。选择是,我解决了问题

更新 2它再次发生在新项目上。404 错误,这次它们不会消失。

Stop -> Clean... -> Start (404)
Stop -> Clean Tomcat Work Directory... -> Start (404)
Stop -> Clean Tomcat Work Directory... -> Clean... -> Start (404)
Stop -> Remove on the application ->  Clean... -> Run As -> Run on Server -> (404)  
Exit Eclipse, Start Eclipse
Start the server -> (404)

更新 3原来,这一次我只是没有注意到启动期间由侦听器类引起的异常。解决问题后,它起作用了。我想我应该在凌晨 3 点停止工作。

4

10 回答 10

37

在 Tomcat 6 和 Eclipse Ganymede 上,我发现以下链可以像魅力一样工作:

1 停止服务器

2 项目 -> 清洁

3 项目构建(我禁用了自动构建)

4 删除服务器

5 删除服务器文件夹

6 重启Eclipse

7 创建新服务器,添加项目并启动 :)

需要一些时间,但像魅力一样工作。我的问题是一个恼人的侦听器启动问题,但这似乎是类似的:tomcat 的一个属性。顺便说一句:现在我也是 Glassfish 的忠实粉丝。

于 2011-05-21T20:47:58.180 回答
12

我发现这个过程很有用:

  • 单击服务器选项卡并停止正在使用的服务器(如果它正在运行)
  • 再次右键单击服务器并选择清理...
  • 再次右键单击并选择Clean Tomcat Work Directory...

希望 ClassNotFoundException 现在应该消失了。

还有一次,我在服务器启动时启动了一个类,监听器类 (ServletContextListener) 中出现异常。当 ServletContextListener 在启动期间引发异常时,应用程序部署将中止,因此出现 404 错误。在这种情况下,修复导致异常的问题,使应用程序再次运行。

编辑:这个较短的程序大部分时间都对我有用,但今天没有用,我不得不遵循 Mico 的扩展程序。我的建议是,如果您有类似的问题,请先尝试这个较短的过程。如果问题仍然存在,请尝试使用 Mico's。

于 2011-05-20T18:56:30.333 回答
2

我建议您停止并重新启动 Tomcat 服务器。热部署不会永远有效;有一些问题会导致您在几次重新部署后必须重新启动。

于 2011-05-09T09:31:09.673 回答
2

我想知道当我看到+25的公认答案时,它真的准确吗?

首先,如果您要删除服务器,那么清理它的意义何在?这将花费您不必要的时间,并且您不会获得任何有用的东西。

所以我会说只要5、6、7 步就能发挥作用

5 删除服务器文件夹

6 重启Eclipse

7 创建新服务器,添加项目并启动

于 2013-11-07T07:29:00.013 回答
1

这可能是我在confess 2011中学到的东西。对我来说,这听起来像是一个类加载器问题。

背后的理论:

  • Java 不仅使用类的类型,还使用加载它的类加载器来识别实例的类型。这意味着一个简单的操作可能会失败,例如

    A 类 a1 = 新 a1;ClassA a2 = SomeOtherClass.giveMeInstanceOfA(); a1 = a2;

如果 SomeOtherClass 使用不同的类加载器,此示例将失败,因为 Java 会说它们不一样。

  • 演讲者还提到,一些服务器默认使用大约 45 个不同的类加载器。

这在实践中意味着什么:

您将 webapp 部署到服务器,一切运行良好。服务器缓存类和他在某处加载它们所需的一切。现在您进行热部署,服务器可能会使用新的(或不同的)类加载器加载新类。这是它开始变得危险的地方,因为从现在开始,您的内存中有两个不同的类,它们应该是相同的。诸如强制转换 (ClassA a = (ClassA) new ClassA()) 之类的简单操作失败,找不到类中的新方法(因为服务器采用了没有此方法的缓存版本),....

这是我重新启动服务器、清理工作目录(以摆脱缓存的版本)并开始考虑热部署的关键点。

如果可以尝试 Mikkos procedere 并且这解决了问题,那么这个解释可以帮助您理解原因。

我知道这并不能解决您的问题,但可以给您一些提示,可能会发生什么。

于 2011-05-26T06:57:15.393 回答
1

说到Tomcat的热部署,确实会遇到各种各样的问题,其中最少的就是内存泄漏,这就是为什么你必须重新启动应用程序的原因。我建议尝试 JRebel 以快速完成“进行并保存任何更改,然后刷新浏览器并立即查看更改”。您可以找到 JRebel 动手实验室,它展示了如何将它与 Tomcat 和 Eclipse 一起使用。http://www.javapassion.com/rebels/jrebel_basics/

于 2011-05-27T16:29:44.367 回答
1

我在编程方面获得了一些新经验,并且不再对 Eclipse + Tomcat 组合感到饥饿。这里有几种方法可以帮助您摆脱使用该组合的需要:

首先,不要一起使用它们!

  • 您可以使用其他可用的 IDE,例如 IntellijIdea(不是免费的,但值得投资)有一个属性,当您调试 Java 代码时,您可以动态更改代码并逐个编译 Java 文件,然后它会建议如果您想在服务器上更新它。几乎从不需要重新启动(当然它有时会丢失,但主要是它有效)。

  • 使用独立的 tomcat 服务器,而不是 Eclipse / 你的 IDE 中的那个。第一个技巧仅在您调试外部服务器时有效,在 IDE 内没有任何作用。第二个提示:如果您碰巧只更改了jsp或html内容,可以使用unix cp或windows复制命令手动将这些文件复制到tomcat的webapp文件夹中的正确位置,如果您碰巧长时间在同一个文件中开发文件,您可以根据需要多次复制文件夹内容(例如 myFolder/*.jsp),并且根本不需要重新启动。当您在 webapps 文件夹中触摸或编辑和保存 web.xml 文件时,更改会变得可见,然后在浏览器上刷新可见页面。使用 CTRL+F5 进行硬刷新可能是最好的方法。

感谢@Verdan 关于他的评论,否则我不会再回来回答了。

于 2012-08-22T20:37:54.980 回答
1

我能够通过禁用 maven 特性来解决这个问题(右键单击项目 >> maven >> 禁用 maven 特性)。然后重新启用它(右键单击项目>>配置>>转换为maven项目)。我已经尝试了上述所有其他提示和技巧,但这是最终奏效的。

于 2017-06-02T05:44:28.143 回答
0

我遇到了同样的问题 - 尝试了以上所有方法,当我尝试启动服务器时 Eclipse 总是冻结,即使我删除了所有服务器配置并使用新下载的 tomcat 实例创建了一个新配置。无论如何,直到我搬到一个新的工作区,重新导入项目并创建了一个新的服务器,问题才得到解决。对我来说似乎是一个 Eclipse 错误......所以如果没有其他工作,这就是要走的路......

于 2012-05-07T08:41:53.133 回答
0

我目前正在努力解决同样的问题,但这里提到的任何内容都对我没有帮助。无论如何,我发现如果我:

  1. 在eclipse中停止服务器
  2. 在其他地方运行tomcat(在我的情况下是xamp发行版)
  3. 停止当前运行的 Tomcat
  4. 在eclipse中启动tomcat

一切正常,当然,直到我更改代码并尝试再次测试它。

于 2013-08-20T09:34:10.650 回答