【问题标题】:how to reference a java .class file from a JSP page?如何从 JSP 页面引用 java .class 文件?
【发布时间】:2009-10-03 21:58:01
【问题描述】:

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

我尝试使用带有类名的 JSP 页面导入语句,但没有奏效。如何引用 Helper.class 以便我可以在我的 JSP 中使用它?我不想在包/JAR 中包含该类。

【问题讨论】:

  • 您可以粘贴您正在使用的导入语句吗?

标签: java jsp


【解决方案1】:

好的,直到我查了才知道。 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 中的标签

【讨论】:

    【解决方案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
     %>
    

    【讨论】:

    • 我正在尝试调用 Helper 的静态方法,但出现错误“Helper 无法解析”
    • 这是导致上述错误的代码:Connection conn = Helper.getDBConnection(url,datasource);
    • @duffymo - 我不以任何方式推荐某人使用 scriptlet - 我自己早就完全放弃了 JSP 以支持模板化。但是 - 从Helper.getDBConnection() 和默认包中猜测 - 我认为如果我回答他的问题而不是尝试推荐他使用 Spring MVC 或其他东西,这对 OP 会更有帮助:-)
    • 如果你有两个 Helper 类并且你使用第一个例子会发生什么?
    【解决方案3】:

    它必须在你的 WAR 的 CLASSPATH 中——要么是 WEB-INF 下的包,要么是 WEB-INF/lib 下的 JAR。这只是基本的 Java。

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

    您可以编写 scriptlet 代码,但我认为使用 JSTL 要好得多。从长远来看,无 Scriptlet JSP 是个好主意。

    【讨论】:

      【解决方案4】:

      以下必须工作&lt;%@ page import="com.*" %&gt;

      检查您正在使用的 J2EE 容器的文档。如果您使用的是 J2EE Sun 认证的容器,那么页面导入指令应该不会有问题。

      JSP Directives

      【讨论】:

        【解决方案5】:

        试试这样的:&lt;jsp:useBean id="now" class="java.util.Date"/&gt;

        上面创建了一个 Date 实例并将其添加为请求属性映射键now。 然后它就可以使用了,就像任何其他请求属性变量一样,例如 ${now.time} 等内部 el 表达式将以毫秒为单位打印时间。

        所以在你的场景中,你会做&lt;jsp:useBean id="Helper" class="com.your.company.name.Helper"/&gt;。确保 Helper 有一个无参数的公共构造函数。

        这里有更多信息http://java.sun.com/products/jsp/tags/11/syntaxref11.fm14.html

        【讨论】:

          猜你喜欢
          • 2010-12-30
          • 2012-05-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多