【发布时间】:2015-01-26 08:48:12
【问题描述】:
我有一些文本模板存储在数据库中。我们需要使用模板引擎来处理这些文本。我们首先想到了 Velocity / Freemaker / Thymeleaf 来处理这些文本。但是,我认为(但可能是错误的)可以与应用服务器 JSP 编译器进行交互。我更喜欢使用 JSP 编译器,而不是导入一堆新的 jar。
谢谢
【问题讨论】:
标签: java jsp jakarta-ee application-server
我有一些文本模板存储在数据库中。我们需要使用模板引擎来处理这些文本。我们首先想到了 Velocity / Freemaker / Thymeleaf 来处理这些文本。但是,我认为(但可能是错误的)可以与应用服务器 JSP 编译器进行交互。我更喜欢使用 JSP 编译器,而不是导入一堆新的 jar。
谢谢
【问题讨论】:
标签: java jsp jakarta-ee application-server
AFAIK 它们是不同的概念并且工作方式不同,因此它们不会直接交互:
JSP 由 JSP 编译器处理,为在 .class 文件中编译(在运行时)的 servlet 生成 java 代码。它稍后被 servlet 容器用作任何其他 servlet。您可以在带有 scriptlet 的 JSP 中包含任何 Java 代码(即使现在被认为是不好的做法)
模板引擎(Velocity / Freemaker / Thymeleaf)采用 模板 并且只允许在运行时用值替换变量占位符以生成文本。当然,它们也允许测试和循环,但不会生成 java 源代码和类对象。在 Web 应用程序中,他们使用一个 servlet,该 servlet 接受模板和替换值并生成将在响应中发送的文本。
当然,由于 JSP 可以包含任意 java 代码,你可以从 JSP 调用模板引擎,但我真的无法想象一个合适的用例。
根据评论编辑:
您可以尝试使用 JSP 作为模板引擎,但我的建议是:不要这样做!你需要:
ServletResponse 的存根,其中getOutputStream() 和getWriter() 方法以字符串结尾。但请注意,即使您成功了,也会导致难以维护的代码严重耦合到 servlet 容器或在构建时使用特殊步骤(JSP -> java)。如前所述:不要那样做。
我刚来JSP compilation to string or in memory bytearray with Tomcat/Websphere,看来您的问题与那个问题重复...
【讨论】:
ServletResponse 对象。但见上面的编辑