【问题标题】:JSP compilation error with custom classloader使用自定义类加载器的 JSP 编译错误
【发布时间】:2014-09-21 01:19:17
【问题描述】:

我在 tomcat (7.0.55) 中有一个自定义 WebappClassLoader,它在 server.xml 中配置为

<Context allowCasualMultipartParsing="true">
    <Loader loaderClass="org.project.system.core.classloader.DynamicClassLoader" />
</Context>

它已加载,一切都很好,但是当我打开一个加载类 org.test.User 的 JSP 时,该类不在 WEB-INF/classes 下,但可通过我的 DynamicClassLoader 加载,我收到此错误:

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 7 in the generated java file
Only a type can be imported. org.test.User resolves to a package

所以,我进行了一些调试,并检查了每个 loadClass 调用是否已加载,并且是的:就在此错误消息之前,我看到了我的调试消息:

Trying to load org.test.User found!
Trying to load org.test NOT FOUND!!
Trying to load org.test NOT FOUND!!
Trying to load org.apache.el.ExpressionFactoryImpl found!
Trying to load com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl found!
Trying to load com.sun.org.apache.xerces.internal.impl.dv.dtd.DTDDVFactoryImpl found!
Trying to load org.apache.el.ExpressionFactoryImpl found!
org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 7 in the generated java file
Only a type can be imported. org.test.User resolves to a package

看来,jsp 编译器需要 User 类。但真正奇怪的是,如果我从 Eclipse 中执行它,一切正常!当然,除了错误消息之外,输出看起来是一样的。我仔细检查了 eclipse 生成的配置文件和我的配置文件,但没有发现任何区别。

您知道可能出了什么问题吗?为什么它在 Eclipse 中没有任何错误,但在“正常”的 tomcat 安装中却没有?如果您需要任何进一步的信息,请告诉我!提前致谢!

【问题讨论】:

    标签: jsp tomcat classloader


    【解决方案1】:

    JSP 编译器有时很难处理类路径中可以解析为package(目录)和class.class 文件)的项目。如果您的类是从 JAR 文件加载的,请尝试从 JAR 文件中删除目录条目(当然要保留 .class 文件)。

    如果目录和类在磁盘上,你可能不得不把它吸起来并重新命名包或目录。

    Eclipse 与独立的差异可能与 Eclipse 使用的不同部署描述符有关。您可能想看看 Eclipse 正在做什么......可能会有稍微不同的配置或打包策略在起作用。

    【讨论】:

    • 名字和例子中的“org.test.User”一样,所以命名应该没有问题吧?
    • 你也有org.test.user.OtherClass吗?
    • 是的,这个包里有多个类。
    • 考虑一个 ZIP (JAR) 存档:它由目录和文件组成,但目录是可选的。如果省略目录,则条目org.test.User 只能引用一个事物:类。如果该目录(也称为 Java 命名法中的包)也存在,则 org.test.User(尤其是在不区分大小写的文件系统上)可以引用 either 目录 类。这种模棱两可让编译器抱怨。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    相关资源
    最近更新 更多