【问题标题】:Programmatically invoke the JSP parser以编程方式调用 JSP 解析器
【发布时间】:2011-02-09 01:45:58
【问题描述】:

我想以编程方式调用 JSP 解析器。这意味着我希望能够在 Java 中“运行”一个 jsp 页面并获取其输出,而无需将其发送回客户端(我实际上想将输出保存到文件中)。我不想将请求“转发”到 JSP 页面。我希望能够连续在多个 JSP 页面上执行此操作。

最好的方法是什么?

我找到了这个question,但 BalusC 并没有真正直接回答这个问题。

如果您想知道,我需要这样做是因为我想“预编译”JSP 以便在 Java servlet 容器以外的其他平台上使用。

编辑

我需要的不是 .class 文件,而是 HTML 输出。事实上,一旦生成,这将是静态的,但我有一些自定义的 jsp 标签,我想利用 JSP 解析器来扩展它们。

【问题讨论】:

  • 对另一个问题的引用失去了链接。引用的问题是什么?
  • 更新了对问题的正确引用
  • 我希望 JSP 和 JSTL“模板引擎”可以像其他模板引擎允许的那样以编程方式调用。叹。我只想将数据合并到 HTML 中以生成电子邮件。有这么奇怪吗?

标签: java parsing jsp servlets jakarta-ee


【解决方案1】:

我不确定我是否理解这一切的意义。

JSP 被解析并预编译为.class 文件。那时它们是 Java servlet。您需要一个 servlet 引擎来执行它们。

如果您的意图是将生成的 HTTP 响应捕获为“预编译”响应,则表明没有动态内容,并且每次发送特定请求时响应都是相同的。如果是这样的话,你得到的是静态 HTML。

如果我是正确的,这似乎是一个糟糕的方式来生成这样的东西。

如果您希望将 JSP 预编译为 .class 文件,那么问题在于不同的 Java EE 应用服务器使用不同的 JSP 预编译引擎。您不能使用 Tomcat 预编译 JSP 并在 WebLogic 上使用它们。

【讨论】:

  • 感谢您的回答。我会有静态 HTML,但我希望能够解析(预编译)具有不同参数的几个 timez 的 JSP,从而获得几个不同的可能的 html 输出。我知道这不是 JSP 的使用方式,我所做的只是利用 JSP 解析器对自定义标签和诸如包含之类的东西的支持。
【解决方案2】:

从 jsp 页面获取 html 输出的最佳方法是将其实际部署到真实的 Web 服务器,然后调用该页面并保存呈现的输出。

如果您想自动化其中的某些部分,您可能需要考虑使用通过真实界面进行练习的测试工具,例如 Selenium 或模拟浏览器,例如 HttpUnit

但这不仅仅是调用 JSP 编译器。

【讨论】:

    【解决方案3】:

    也许使用http://freemarker.sourceforge.net/http://velocity.apache.org/ 之类的模板引擎会更实用

    Freemarker 甚至似乎支持 JSP Taglibs:http://freemarker.sourceforge.net/features.html

    【讨论】:

      【解决方案4】:

      你的 JSP 是动态生成的。如果是这样,那么您将陷入潜在的不利情况,您的 JSP 将被一次又一次地编译,从而导致性能问题。

      但是,如果您可以拥有一个包含准备显示所需的所有规则的单个大型 JSP,则可以使用 HttpClient 调用您自己的 JSP 并返回 HTML。这将确保您不依赖于应用服务器。如果您使用 JSP Parser,您将依赖于供应商。

      但是,如果您的 JSP 是动态构建的,那么您应该查看可以在 Java 端生成 HTML 的选项。但是,如果它涉及基于规则的 HTML 创建,则最好用 Java 创建它。您可以为此使用 Apache Jakarta ECS 库。

      是的,JSP 并不是为此目的而设计的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-13
        • 2016-04-16
        • 2010-12-15
        • 1970-01-01
        • 2012-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多