【发布时间】:2009-10-03 21:58:01
【问题描述】:
我的应用程序目录的根目录中有 JSP 文件 (/page.jsp)。我想使用位于 /WEB-INF/classes/Helper.class 中的此类。
我尝试使用带有类名的 JSP 页面导入语句,但没有奏效。如何引用 Helper.class 以便我可以在我的 JSP 中使用它?我不想在包/JAR 中包含该类。
【问题讨论】:
-
您可以粘贴您正在使用的导入语句吗?
我的应用程序目录的根目录中有 JSP 文件 (/page.jsp)。我想使用位于 /WEB-INF/classes/Helper.class 中的此类。
我尝试使用带有类名的 JSP 页面导入语句,但没有奏效。如何引用 Helper.class 以便我可以在我的 JSP 中使用它?我不想在包/JAR 中包含该类。
【问题讨论】:
好的,直到我查了才知道。 JSP Spec (JSP.11.2 JSP Page Implementation Class) 是您的朋友。您需要将该类从默认包中移出。
从 JSP 2.0 开始,引用是非法的 从未命名的任何类 (又名默认)包。这可能 导致某些翻译错误 容器,特别是那些 在 JDK 1.4 或更高版本中运行 环境。很不幸,但是 不可避免,这将打破 与一些较旧的 JSP 兼容 应用程序。但是,从 JDK 1.4 开始, 从未命名的类中导入类 包无效(请参阅 http://java.sun.com/j2se/1.4/compatibility.html#source 详情)。因此,对于前锋 兼容性,应用程序不得 依赖未命名的包。这 限制也适用于所有其他 引用类的情况, 例如在指定类名时 对于 TLD 中的标签
【讨论】:
如果您的课程直接位于/WEB-INF/classes,这意味着它使用通常不推荐的默认包。因此,您不需要导入它;你可以直接在你的 JSP 中使用它:
<%
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.getDBConnection() 和默认包中猜测 - 我认为如果我回答他的问题而不是尝试推荐他使用 Spring MVC 或其他东西,这对 OP 会更有帮助:-)
它必须在你的 WAR 的 CLASSPATH 中——要么是 WEB-INF 下的包,要么是 WEB-INF/lib 下的 JAR。这只是基本的 Java。
对象必须在请求、页面、会话或应用程序范围内。这通常意味着一个 servlet 把它放在那里。您必须有一个 servlet 和 JSP 协作才能做到这一点。
您可以编写 scriptlet 代码,但我认为使用 JSTL 要好得多。从长远来看,无 Scriptlet JSP 是个好主意。
【讨论】:
以下必须工作<%@ page import="com.*" %>。
检查您正在使用的 J2EE 容器的文档。如果您使用的是 J2EE Sun 认证的容器,那么页面导入指令应该不会有问题。
【讨论】:
试试这样的:<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
【讨论】: