与JSP编译器交互

时间:2015-01-26 08:48:13

标签: java jsp java-ee application-server

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

由于

1 个答案:

答案 0 :(得分:1)

AFAIK他们是不同的概念,工作方式不同,所以他们不会直接互动:

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

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

但是当然JSP可以包含任意java代码,你可以从JSP调用模板引擎,但我真的无法想象一个正确的用例。

根据评论编辑:

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

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

但请注意,即使您成功,也会导致难以维护的代码与servlet容器紧密耦合或在构建时使用特殊步骤(JSP - > java)。如前所述:不要这样做。

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