我有一个非常简单的网络应用程序,可以在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这个词。
这是用于测试简单Web应用程序的粗略代码。我不是在寻找有关最佳实践的建议(尽管我在本网站上看到的建议非常好),我只是想知道为什么这不起作用。它工作了一次,重新编译后,它停止了工作。我可以在我的命令行上运行该类,它可以正常工作(在main方法中输出日期)。
我正在运行Windows 7和tomcat 7.0.34。我现在不使用eclipse或netbeans等。我正在使用一个简单的文本编辑器,使用命令行javac
编译java类,手动创建Web文件夹,并将所有文件放在他们自己所属的位置,而不是使用maven或ant或其他任何内容构建它我。目前没有战争档案。只需处理webapps下tomcat文件夹中的文件即可。我知道有更复杂和推荐的方法可以做到这一点,但这只是对我自己的理解的一种考验,没有任何东西可以保护我免受正在发生的事情的影响。
再次,这曾经工作过一次。
提前感谢您的帮助。
答案 0 :(得分:1)
您忘记在java类的顶部添加语句package com.udate;
。添加和编译,你应该通过