【问题标题】:Can a JSP template be used from within Java?可以在 Java 中使用 JSP 模板吗?
【发布时间】:2013-09-23 12:37:21
【问题描述】:

我对 JSP 很陌生。到目前为止,处理流程似乎是 Java 先运行,然后填充 JSP 模板。

我想知道在 Java 中是否有一种方法可以利用 JSP 模板。我的意思是,假设我在类路径上有一个简单的“SimpleDiv.jsp”模板,如下所示:

<div id="${id}" class="${class}">
    ${content}
</div>

然后在任意 Java 文件中(甚至可能不在 servlet 上运行),我可以执行以下操作:

private String getDivHtml( id, html ) {
    Template simpleDiv = TemplateLoader.load("SimpleDiv.jsp");
    simpleDiv.set("id", id);
    simpleDiv.set("class", Whatever.CLASS_NAME);
    simpleDiv.set("content", html);

    return simpleDiv.toString();
}

这是一个非常简单的示例,所以不要纠结于其中的细节。主要问题是——我可以在 Java 中引入一个 JSP 模板并使其生成 HTML 内联吗?

【问题讨论】:

  • 我不确定 JSP 是否不可能,但我肯定认为其他模板工具,如 Freemarker 或 Velocity 更适合此。
  • 为此我会使用 Freemarker 或 Velocity 等模板引擎。
  • StringTemplate 也是一个不错的模板库,从简单到完整的语法。

标签: java jsp


【解决方案1】:

Freemarker 和 Velocity 在从模板生成内容方面非常流行,您可以尝试其中的一种。由于 JSP 是作为 servlet 实现的(并且 JSP 规范将它们定义为 Web 组件),因此它们与 servlet 容器相关联。

【讨论】:

  • 模板语言和功能与 JSP 的相似程度如何?如果语法尽可能相似会很好(即使它们缺少标签库等功能)
  • @Joe:这取决于你想要什么,引用 bean 非常接近,控制结构有不同的语法。见freemarker.org/docs/dgui_quickstart_template.html
  • Velocity 和 FreeMarker 完全不同(来自 JSP)——它们不使用 XML 标签。但根据我的经验,这是一件好事。标签更容易发现和编辑。最有价值的 IDE/编辑器也会在语法上突出显示它们。这些库中的任何一个都没有假设生成的输出将 a) 发送到 Web 客户端(即从 servlet 容器发回),或 b) 实际输出 HTML 或 XML。都不支持标签库(来自内存),但它们确实支持其他方法(更好的方法,恕我直言)来创建可重用的内容“标签”。
  • @Paul 我想要相似的原因是我们仍将使用真正的 JSP 模板。因此,附加的模板语言应该非常相似(所以人们可以假装它相同)或非常不同(所以人们不会错误地认为它是相同的)。否则就是恐怖谷问题!
  • @zhong.j.yu - 同上 Nathan 的评论,这是正确的答案!
【解决方案2】:

没有简单的方法可以使用纯 JSP 完成此任务。网站上有相关的 Q/As 解释了如何做到这一点:

使用纯 JSP 的另一种选择是使用外部框架来完成任务,例如 Apache Tiles 和 SiteMesh(此处提到:JSP template implementation (Composite View Pattern))。

如果可以,请升级到Faceletsthe current view technology since Java EE 6。如herehere 所述,该技术已经提供了内置模板系统。

【讨论】:

    【解决方案3】:

    考虑这个不依赖于 servlet 的 JSP 子集:

    http://jstp.sourceforge.net/manual.html

    【讨论】:

    • 正在审查这个项目,它自 2005 年以来就没有更新过。
    【解决方案4】:

    jsp是一个内层servlt,一个java类,一般执行完就输出html。

    也许您应该将 jsp 文件视为纯字符串,“simpeDiv.set”方法只是进行替换工作:将 ${key} 替换为 ${value}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2010-12-16
      相关资源
      最近更新 更多