Java 最简单的tomcat web应用程序中的NoClassDefFoundError

Java 最简单的tomcat web应用程序中的NoClassDefFoundError,java,class,tomcat,Java,Class,Tomcat,我有一个非常简单的web应用程序,用于在java中进行实验。我定义了以下java类: 和JSP文件,如下所示: tomcat文件夹/文件如下所示(这不是官方语法,只是文件夹结构的抽象表示): jsp文件位于根“mywebapp”文件夹下(名称无关紧要),所有这些都位于tomcat的webapps文件夹下 编译完这个java类(UtilDate.java)后,我重新启动tomcat以确保它没有挂起任何旧的缓存内容 我得到以下信息 javax.servlet.ServletException:

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

和JSP文件,如下所示:

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

jsp文件位于根“mywebapp”文件夹下(名称无关紧要),所有这些都位于tomcat的webapps文件夹下

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

我得到以下信息

javax.servlet.ServletException: java.lang.NoClassDefFoundError: UtilDate
当我尝试将jsp页面放入浏览器时

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

out.print("hello");
我在浏览器输出中得到了hello这个词

这是测试简单web应用程序的原始代码。我不是在寻找关于最佳实践的建议(尽管我在这个网站上看到的建议非常好),我只是想知道为什么这样做不起作用。它工作了一次,在重新编译类之后,它停止了工作。我可以在我的命令行上运行这个类,它工作得很好(输出日期,与main方法一样)

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

同样,这一点曾经奏效


提前感谢您的帮助。

您忘记添加声明
package com.udate位于java类的顶部。添加和编译,您应该通过在
UtilDate
类中是否有
package com.udate
?它至少不在您的屏幕截图中。请尝试:
out.print(com.udate.UtilDate.udate())我确实忘记添加那个语句了。我添加了它,重新编译,重新启动了tomcat,不幸的是问题仍然存在;我试过了,它成功了。我不明白为什么没有那句话之前它能起作用。我(可能有缺陷)的理解是,如果一个方法被声明为静态的,那么在使用该方法之前,没有必要基于该类为对象创建一个实例变量。我可能遗漏了什么。@PhilBair您的意思是可以从实例调用
uDate()
,但不能静态地(从类)调用?
out.print("hello");