2

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

jsp:useBean id="promotion" class="MY.NEWCLASS" scope="session" 

我错过了什么吗?我需要做一些特别的事情来将类添加到包中吗?提前致谢。

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

4

2 回答 2

3

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

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

于 2011-03-17T14:45:45.417 回答
1

这看起来像您忘记将新类部署到服务器。你怎么能调试这个?

首先,您可以检查类路径。在你得到异常的地方,获取当前的类加载器:

ClassLoader cl = getClass().getClassLoader();

如果那是URLClassLoader,请询问它的 URL:

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

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

于 2011-03-17T14:46:57.590 回答