我在app目录的根目录中有JSP文件(/page.jsp)。我想使用位于/WEB-INF/classes/Helper.class中的这个类。
我尝试使用带有类名的JSP页面导入语句,但这不起作用。如何引用Helper.class以便我可以使用它的JSP?我不想将这个类包含在一个包/ JAR中。
答案 0 :(得分:6)
好吧,直到我查了一下,我才知道这一点。 JSP Spec (JSP.11.2 JSP Page Implementation Class)是你的朋友。您需要从默认包中移动该类。
从JSP 2.0开始,引用是非法的 来自未命名的任何类 (a.k.a. default)包。这可能 导致某些翻译错误 容器,特别是那些容器 以JDK 1.4或更高版本运行 环境。不幸的是,但是 不可避免的,这会破裂 与一些旧的JSP兼容 应用。但是,从JDK 1.4开始, 从未命名的类导入类 包无效(见 http://java.sun.com/j2se/1.4/compatibility.html#source 详情)。因此,对于前锋 兼容性,应用程序不得 依赖于未命名的包。这个 限制也适用于所有其他 引用类的情况, 例如在指定类名时 对于TLD中的标签
答案 1 :(得分:2)
如果您的课程位于/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
%>
答案 2 :(得分:0)
它必须位于WAR的CLASSPATH中 - WEB-INF下的包或WEB-INF / lib下的JAR。那只是基本的Java。
对象必须位于请求,页面,会话或应用程序范围内。这通常意味着servlet将它放在那里。你必须有一个servlet和JSP合作来完成它。
您可以编写scriptlet代码,但我认为使用JSTL要好得多。从长远来看,无Scriptlet的JSP是一个好主意。
答案 3 :(得分:0)
以下内容必须有效<%@ page import="com.*" %>
。
检查您正在使用的J2EE容器的文档。如果您使用的是J2EE Sun认证容器,则不应该遇到页面导入指令的问题。
答案 4 :(得分: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没有arg公共构造函数。
此处的额外信息http://java.sun.com/products/jsp/tags/11/syntaxref11.fm14.html