可以在 Java 中使用 JSP 模板吗?

Posted

技术标签:

【中文标题】可以在 Java 中使用 JSP 模板吗?【英文标题】:Can a JSP template be used from within Java? 【发布时间】: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 等模板引擎。 ***.com/questions/2613404/… StringTemplate 也是一个不错的模板库,从简单到完整的语法。 【参考方案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 解释了如何做到这一点:

What is the best way to create JSP layout template? JSP tricks to make templating easier?

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

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

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

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

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

【讨论】:

以上是关于可以在 Java 中使用 JSP 模板吗?的主要内容,如果未能解决你的问题,请参考以下文章

Java使用JSP Tag Files & JSP EL Functions打造你自己的页面模板

javaweb-JSP基本语法

java 导出excel表格 高手进

Java 使用 freemarker 模板引擎的相关疑问 ,求大神走过路过不要错过

SpringBoot系列——Thymeleaf模板

java如何将html静态模板写入数据库+和如何从数据库中读出