如何从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