【问题标题】:NoClassDefFoundError in the simplest tomcat web app ever有史以来最简单的 tomcat Web 应用程序中的 NoClassDefFoundError
【发布时间】:2013-04-27 19:36:06
【问题描述】:

我有一个非常简单的 web 应用程序,用于在 java 中进行试验。我定义了以下 java 类:

UtilDate.java http://www.philbair.org/samples/UtilDate_java.jpg

还有一个JSP文件如下:

UtilDate.java http://www.philbair.org/samples/getdate_jsp.jpg

tomcat 文件夹/文件如下所示(这不是官方语法,只是文件夹结构的抽象表示):

UtilDate.java http://www.philbair.org/samples/tree.jpg

mywebapp/WEB-INF/classes/com/udate/UtilDate.class

jsp文件在'mywebapp'根文件夹下(名字无关紧要),所有这些都在tomcat的webapps文件夹下。

在编译完这个 java 类 (UtilDate.java) 之后,我重新启动了 tomcat 以确保它没有挂在任何旧的缓存上。

我得到以下...

javax.servlet.ServletException: java.lang.NoClassDefFoundError: UtilDate

当我尝试将 jsp 页面放入浏览器时。

如果我把jsp文件的print语句中的uDate()方法替换成

out.print("hello");

我在浏览器输出中看到了 hello 这个词。

这是用于测试简单网络应用的粗略代码。我不是在寻找关于最佳实践的建议(尽管从我在这个网站上看到的内容来看,这个建议非常好),我只是想知道为什么这不起作用。它工作过一次,在重新编译类后,它停止工作。我可以在我的命令行上运行这个类,它工作得很好(在 main 方法中输出日期)。

我正在运行 Windows 7 和 tomcat 7.0.34。目前我没有使用 eclipse 或 netbeans 等。我正在使用一个简单的文本编辑器,使用命令行javac 编译 java 类,手动创建 web 文件夹,并将所有文件放在它们属于我自己的位置,而不是让 maven 或 ant 或其他任何东西为我构建它。暂时没有战争档案。只需使用 webapps 下的 tomcat 文件夹中的文件即可。我知道有更复杂和推荐的方法可以做到这一点,但这只是对我自己理解的测试,没有任何东西可以保护我免受正在发生的事情的影响。

再次,这工作了一次。

提前感谢您的帮助。

【问题讨论】:

  • 您的UtilDate 班级中有package com.udate 吗?至少它不会出现在您的屏幕截图中。
  • 试试:out.print(com.udate.UtilDate.uDate());

标签: java class tomcat


【解决方案1】:

您忘记在 java 类的顶部添加语句 package com.udate;。添加编译,应该是通过了

【讨论】:

  • 我确实忘记添加该声明。我添加了它,重新编译,重新启动了tomcat,不幸的是问题仍然存在。
  • 你可以试试这个 UtilDate u = new UtilDate();
  • 我试过了,它奏效了。我不明白为什么它之前没有那个声明。我的(可能有缺陷的)理解是,如果一个方法被声明为静态的,那么在您可以使用该方法之前,没有必要基于该类为对象创建一个实例变量。我可能遗漏了什么。
  • @PhilBair 你的意思是你可以从实例调用uDate(),但不能静态(从类)?
猜你喜欢
  • 2011-02-09
  • 1970-01-01
  • 2013-01-25
  • 2016-09-10
  • 2013-03-26
  • 2010-10-27
  • 2013-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多