未捕获异常:java.lang.ClassNotFoundException:

未捕获异常:java.lang.ClassNotFoundException:,java,jsp,classnotfoundexception,Java,Jsp,Classnotfoundexception,这是一个运行Apache和Tomcat的windows服务器。我向现有包中添加了一个新类,并尝试从jsp页面引用它,如下所示: jsp:useBean id="promotion" class="MY.NEWCLASS" scope="session" 我错过什么了吗?我需要做一些特殊的事情才能将类添加到包中吗?提前谢谢 jsp页面加载良好,但当我尝试单击使用该类的按钮时,我得到 未捕获异常:java.lang.ClassNotFoundException:MY.NEWCLASS您需要确保类

这是一个运行Apache和Tomcat的windows服务器。我向现有包中添加了一个新类,并尝试从jsp页面引用它,如下所示:

jsp:useBean id="promotion" class="MY.NEWCLASS" scope="session" 
我错过什么了吗?我需要做一些特殊的事情才能将类添加到包中吗?提前谢谢

jsp页面加载良好,但当我尝试单击使用该类的按钮时,我得到
未捕获异常:
java.lang.ClassNotFoundException:MY.NEWCLASS

您需要确保类文件存在于部署的webapplication的
/WEB-INF/classes/MY/NEWCLASS.class
中。或者,当它位于名为
filename.JAR
的JAR文件中的文件夹
/MY/NEWCLASS.class
中时,您需要确保它存在于部署的webapplication的
/WEB-INF/lib/filename.JAR


请注意,完全限定名称区分大小写。因此,名称必须完全匹配。也许您对问题中的代码示例很粗心,但以这种方式使用大写字母是不正常的。例如,它实际上很可能被称为
my.NewClass
。然后,您应该在
jsp:useBean

中声明,这看起来好像您忘记了将新类部署到服务器上。如何调试这个

首先,您可以检查类路径。在获取异常的位置,获取当前类加载器:

ClassLoader cl = getClass().getClassLoader();
如果是a,请询问其URL:

while( cl != null ) {
    if( cl instanceof URLClassLoader ) {
        URL[] urls = ((URLClassLoader)cl).getURLs()
        for( URL url : urls ) System.out.println(url);
    }
    cl = cl.getParent();
}

现在,您可以检查输出是否包含您期望的内容。

@BalucC该包是全大写的,这是在我开始编写代码之前。类文件位于/WEB-INF/classes/MY目录中,但我不知道要签入/WEB-INF/lib的jar文件。如果jar中没有该文件,则不需要检查jar:),无论如何,此异常都会告诉您指定的类不在类路径中。可能是名称输入错误、文件名错误、文件扩展名错误、部署错误等等。因为您可以直接访问环境,所以您是唯一能够说出这一点的人。问题不可能出在类路径上,因为同一目录中的所有其他类都可以正常加载。。。但现在它决定自己离开。让我们看看它是否有效。然后它可能没有正确地重建/重新部署/重新启动。有些服务器在tmp/work目录中也有缓存。您可能还需要清理它。