jsp - 在即时 JSP 编译中导入失败

标签 jsp tomcat

我们有一个大型网络应用程序安装,使用 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 编译器定位其中一个类而不定位另一个类的原因是什么?

最佳答案

我们终于确定了发生这种情况的原因。显然,即时编译器不区分大小写,包 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 - 在即时 JSP 编译中导入失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2412906/

相关文章:

java - 当我尝试导入静态文件时出现 JSP 异常

java - 如何对 JSP 标签进行单元测试?

jsp - 如何使用具有不同 URL 模式的单个 Servlet?

java - Ubuntu 12.04 上的 CAS 问题

java - Tomcat、WAR 和多个操作系统

session - Wicket 口 session

java - 在tomcat上设置一个servlet

javascript - 调用客户端重定向后 session 属性丢失

java - 替换JSP中的HTML特殊字符

Tomcat 6.0 无法启动