【问题标题】:Failing import in on-the-fly JSP compilation在动态 JSP 编译中导入失败
【发布时间】:2010-03-09 22:03:30
【问题描述】:

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

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

<%@ 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

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

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

【问题讨论】:

  • 完成。我会包含一个堆栈跟踪,但它与任何其他 JSP 编译错误没有什么不同。 (其中似乎没有任何内容可以提供问题的线索。)

标签: jsp tomcat


【解决方案1】:

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

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

【讨论】:

  • 非常感谢!我们遇到了同样的问题,无法理解为什么只有一个包不断给出这个恼人的错误“无法解决导入”。我们重命名了课程:)
  • 非常有趣。我想知道为什么我在我的 Mac 开发机器上(文件系统不区分大小写)而不是在我们的测试服务器上收到此错误!我想知道这是否可以通过 Tomcat 设置来解决...
【解决方案2】:

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

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

【讨论】:

  • 两个引用的类都在同一个 jar 中(以及大量其他类)。这是一个已经存在多年的大型 Web 应用程序,因此我可以保证 jar 不在类路径中不是问题。我现在想知道包名是否有问题,接下来会尝试重命名包。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
  • 2020-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多