在动态JSP编译中导入失败

在动态JSP编译中导入失败,jsp,tomcat,Jsp,Tomcat,我们有一个大型web应用程序安装,使用Apache/Tomcat/Jasper和jboss。在开发环境中,JSP是动态编译的。不幸的是,有一个特别的包,动态编译似乎无法导入。对于某些类,使用完全限定的引用而不是导入是可行的,但并非对所有类都有效。所有有问题的类都在一个jar(nonEjb.jar)中。预编译JSP工作得很好,但是每次我们需要更改一个受影响的文件时都必须这样做,这当然是非常痛苦的。这个问题已经存在了相当长的一段时间,我真的很想解决它,因为我准备在受影响的地区做一些工作 这是一个小测

我们有一个大型web应用程序安装,使用Apache/Tomcat/Jasper和jboss。在开发环境中,JSP是动态编译的。不幸的是,有一个特别的包,动态编译似乎无法导入。对于某些类,使用完全限定的引用而不是导入是可行的,但并非对所有类都有效。所有有问题的类都在一个jar(nonEjb.jar)中。预编译JSP工作得很好,但是每次我们需要更改一个受影响的文件时都必须这样做,这当然是非常痛苦的。这个问题已经存在了相当长的一段时间,我真的很想解决它,因为我准备在受影响的地区做一些工作

这是一个小测试页面。第一次导入失败。导入的两个类非常相似,唯一显著的区别是它们的包位置。(是的,我已经验证了包声明对于这两个类都是正确的。)

如果删除导入并完全限定引用(如com.elementk.lms.product.org.OtrProviderType),则会出现相同的错误


是什么导致JSP编译器定位其中一个类而不是另一个类?

nonEjb.jar在哪里?编译错误表明它不在类路径中(我假设包/类名是100%正确的,并且在这个JAR中可用)


它至少应该放在
Webapp/WEB-INF/lib
中,让JSP识别它。另一个位置是
Tomcat/lib
,但这需要对服务器进行完全的管理控制,并且应用服务器上所有部署的webapps都可以访问JAR文件。

我们最终确定了发生这种情况的原因。显然,动态编译器没有区分大小写,包com.elementk.lms.product包含一个名为Otr的类。编译器无法区分包“com.elementk.lms.product.otr”和类“com.elementk.lms.product.otr”之间的区别。这解释了为什么错误消息仅引用“com.elementk.lms.product.otr”,即使原始导入是“com.elementk.lms.product.otr.OtrProviderType”


我们必须通过基本上避免问题来修复:我们重命名了包。

完成。我会包括一个堆栈跟踪,但它与任何其他JSP编译错误没有什么不同。(里面似乎没有任何东西可以提供问题的线索。)两个引用的类都在同一个jar中(以及大量其他类)。这是一个已经存在多年的大型web应用程序,因此我可以保证jar不在类路径中不会有问题。我现在想知道包名是否有问题,下一步将尝试重命名包。非常感谢!我们也遇到了同样的问题,无法理解为什么只有一个软件包不断出现这个恼人的错误“导入无法解决”。我们把这个班改名为:)非常有趣。我想知道为什么我在我的Mac开发机器上(文件系统不区分大小写)而不是在我们的测试服务器上出现这个错误!我想知道这是否可以用Tomcat设置来修复。。。
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page errorPage="/error.jsp" %>

<%@ page import="com.elementk.lms.product.otr.OtrProviderType" %>
<%@ page import="com.elementk.lms.product.course.CourseType" %>

<html>
<body>
<hr>
Displaying the page...
<br>
<%= OtrProviderType.B24x7_PROVIDER.getId() %> value
<br>
<%= CourseType.SELF_STUDY.getId() %> value
</hr>
</body>
<html>
09 Mar 2010 21:29:40,555 ERROR [K] [RequestTimingFilter.doFilter:65] Unable to compile class for JSP:

An error occurred at line: 6 in the generated java file
The import com.elementk.lms.product.otr cannot be resolved