如何在JSP页面中引用Java .class文件?

3

我有一个JSP文件(/page.jsp)在我的应用程序目录的根目录下。我想使用位于/WEB-INF/classes/Helper.class的这个类。

我尝试使用JSP页面导入语句来引用类名,但是没有成功。我该如何引用Helper.class以便在我的JSP中使用它?我不想将这个类包含在一个包/ JAR中。


你能复制粘贴你正在使用的导入语句吗? - Billy Bob Bain
5个回答

6

好的,我在查阅资料后发现JSP规范 (JSP.11.2 JSP页面实现类)对你很有帮助。你需要将该类从默认包中移动。

从JSP 2.0开始,引用未命名(也称为默认)包中的任何类都是非法的。这可能会导致某些容器(特别是在JDK 1.4或更高版本环境中运行的容器)出现翻译错误。很不幸,但不可避免的是,这将破坏一些旧的JSP应用程序的兼容性。然而,从JDK 1.4开始,从未命名包中导入类是无效的(有关详细信息,请参见http://java.sun.com/j2se/1.4/compatibility.html#source)。因此,为了向前兼容,应用程序不能依赖未命名包。这个限制也适用于所有其他引用类的情况,比如在TLD中指定标签的类名时。

2
如果你的类位于/WEB-INF/classes目录下,那么它使用默认包,这通常是不推荐的。由于这个原因,你不需要导入它;你可以直接在你的JSP中使用它:directly
<%
 Helper helper = new Helper(); // use appropriate constructor
 %>

更好的解决方案是将其作为包的一部分。您需要将其放入/WEB-INF/classes的适当子文件夹中,例如/WEB-INF/classes/com/mypackage/Helper.class。您可以在JSP中使用完全限定名称或导入它:
<%
 com.mypackage.Helper helper = new com.mypackage.Helper(); // use appropriate constructor
 %>

我正在尝试调用 Helper 的静态方法,但是我收到了“Helper 无法解析”的错误。 - Sajee
这是导致上述错误的代码:Connection conn = Helper.getDBConnection(url, datasource); - Sajee
1
@duffymo - 我并不以任何方式推荐使用脚本片段 - 我自己已经完全放弃了JSP,转而使用模板。 但是 - 根据Helper.getDBConnection()和默认包 - 我认为回答他的问题比尝试建议他使用Spring MVC或其他框架更有帮助 :-) - ChssPly76
如果您有两个 Helper 类并且使用第一个示例,会发生什么? - Koekiebox

0

它必须在你的WAR的CLASSPATH中 - 可以是WEB-INF下的包或WEB-INF/lib下的JAR。这只是基本的Java。

对象必须在请求、页面、会话或应用程序范围内。这通常意味着一个servlet将其放在那里。你必须有一个servlet和JSP协作才能做到这一点。

你可以编写脚本代码,但我认为最好使用JSTL。无脚本的JSP在长期来看是个好主意。


0
以下代码必须正常工作:<%@ page import="com.*" %>
请查看您所使用的J2EE容器的文档。如果您正在使用经过Sun认证的J2EE容器,则不应该出现页面导入指令的问题。
请参阅JSP指令

0
尝试类似这样的操作:<jsp:useBean id="now" class="java.util.Date"/> 以上代码创建了一个Date实例并将其作为请求属性映射键now添加。 它随后可供使用,就像任何其他请求属性变量一样,例如,${now.time}在el表达式中将打印以毫秒为单位的时间。
因此,在您的情况下,您可以执行<jsp:useBean id="Helper" class="com.your.company.name.Helper"/>。 确保Helper具有无参公共构造函数。
额外的信息在这里http://java.sun.com/products/jsp/tags/11/syntaxref11.fm14.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接