与 JSP 编译器交互

Interact with JSP compiler

我在数据库中存储了一些文本模板。我们需要使用模板引擎来处理这些文本。我们首先想到了 Velocity / Freemaker / Thymeleaf 来处理这些文本。但是,我认为(但可能是错误的)可以与应用程序服务器 JSP 编译器交互。我更愿意使用 JSP 编译器而不是导入一堆新的 jar。

谢谢

据我所知,它们是不同的概念并且工作方式不同,因此它们不会直接交互:

  • JSP 由 JSP 编译器处理,为在 运行 时编译的 servlet 生成 java 代码.class 文件。它稍后被 servlet 容器用作任何其他 servlet。您可以在带有 scriptlet 的 JSP 中包含任何 java 代码(即使它现在被认为是不好的做法)

  • 模板引擎 (Velocity / Freemaker / Thymeleaf) 采用 模板 并且只允许在 运行 时用值替换变量占位符产生文本。当然,它们也允许测试和循环,但不会生成 java 源和 class 对象。在 Web 应用程序中,他们使用一个 servlet,该 servlet 采用模板和替换值并生成将在响应中发送的文本。

当然,由于 JSP 可以包含任意 java 代码,您可以从 JSP 调用模板引擎,但我真的无法想象一个合适的用例。

根据评论编辑:

您可以尝试使用 JSP 作为模板引擎,但我的建议是:不要那样做!你需要:

  • 创建一个实现 ServletResponse 的存根,其中 getOutputStream()getWriter() 方法以字符串结尾。
  • 强制 ServletContainer 生成 java 源代码和 class 文件 - 或者在编译时设法做到这一点(我不知道具体怎么做,但我'我很确定它可以完成)
  • 在 运行 时将生成的 servlet 包含在响应存根中以生成输出字符串。

但请注意,即使您成功了,它也会导致难以维护的代码严重耦合到 servlet 容器或在构建时使用特殊步骤 (JSP -> java)。正如已经说过的:不要那样做。

我刚刚来到 JSP compilation to string or in memory bytearray with Tomcat/Websphere,看来你的问题与那个问题重复...