自定义类加载器的JSP编译错误

时间:2014-09-20 01:58:31

标签: jsp tomcat classloader

我在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中没有任何错误但在“普通”tomcat安装中没有任何错误?如果您需要任何进一步的信息,请告诉我们!提前谢谢!

1 个答案:

答案 0 :(得分:0)

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

如果磁盘上有目录和类,则可能需要将其删除并重命名包或目录。

Eclipse与独立版本的区别可能与Eclipse使用的不同部署描述符有关。您可能想要查看Eclipse正在做什么......可能会有一些略有不同的配置或打包策略。