如何从JSP页面引用java .class文件?
我在我的app目录的根目录中有JSP文件(/page.jsp)。 我想使用位于/WEB-INF/classes/Helper.class中的这个类。
我尝试使用带有类名的JSP页面导入语句,但这不起作用。 我如何引用Helper.class以便我可以将它用于我的JSP? 我不想在class / JAR中包含该类。
好吧,直到我查了一下,我才知道这一点。 JSP Spec(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中指定标记的类名时
如果您的类直接位于/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 %>
它必须位于WAR的CLASSPATH中 – WEB-INF下的包或WEB-INF / lib下的JAR。 那只是基本的Java。
对象必须位于请求,页面,会话或应用程序范围内。 这通常意味着servlet将它放在那里。 你必须有一个servlet和JSP协作才能做到这一点。
您可以编写scriptlet代码,但我认为使用JSTL要好得多。 从长远来看,无Scriptlet的JSP是个好主意。
以下必须工作<%@ page import="com.*" %>
。
检查您正在使用的J2EE容器的文档。 如果您使用的是J2EE Sun认证容器,则不应该对页面导入指令有任何问题。
请参阅JSP指令 。
尝试这样的事情:
上面创建了一个Date实例,并将其添加为请求属性映射键。 然后可以使用它,就像任何其他请求属性变量一样,例如,在${now.time}
类的el表达式中将以毫秒为单位打印时间。
所以在你的场景中,你要做
。 确保Helper没有arg公共构造函数。
额外信息http://java.sun.com/products/jsp/tags/11/syntaxref11.fm14.html