【问题标题】:Read a JSP file and produce HTML - not with a web server读取 JSP 文件并生成 HTML - 不使用 Web 服务器
【发布时间】:2014-01-23 02:32:40
【问题描述】:

如果我想阅读这样的jsp:

File f = new File("my.jsp");

然后我希望它生成预期的 HTML,例如字符串(字节 []、OutputStream 等),我该怎么做?

我假设有一些变压器或其他东西。谁能指出我正确的方向?

【问题讨论】:

标签: java jsp


【解决方案1】:

一个JSP文件被翻译编译为一个Servlet类,所以它不会直接生成一个html文件,原因是一个JSP作为一个Servlet可以根据请求中的参数,在它使用的tomcat服务器中生成动态的html Jasper 2 JSP Engine 来实现处理 JSP 的 JavaServer Pages 2.1 规范,因此您可以检查它,但我不建议您这样做。

也许您真正想要的是模板机制,例如您有一个类似于 jsp 的文本文件,与可以访问某些对象的 EL 类似的 sintax,因此您可以使用模板引擎并将您的对象与文本绑定并生成您的 html。如果它适合您,您可以使用 Apache Velocity - HTML exampleFreeMaker - HTML example

【讨论】:

    【解决方案2】:

    Jasper 是 Tomcat 使用的 JSP 编译器,它获取 JSP 页面本身,解析它们,并生成 Java 代码(以 servlet 的形式,或者至少以前是这样的)将 JSP 的输出写入 servlet 响应。然后,该 Java 代码将针对 Servlet API 的容器实现进行编译和执行。

    Jasper 是一个独立的库,因此理论上您可以在自己的工具中实例化它的类,将其指向 JSP,生成 servlet 代码,然后编译并执行它。但是,您需要传入您自己的 Servlet API 接口的模拟实现,因为将调用这些实现来确定请求参数 (HttpServletRequest),并编写响应 (HttpServletResponse)。您需要提供一个版本的 HttpServletResponse 来缓冲输出以供您稍后获取。

    来自Tomcat 6 API,您想要的这些位在org.apache.jasper 包中。

    看看它,您可能想要创建一个指向您的 JSP 的 JspCompilationContext,调用 createCompiler(),然后从那里获取它。

    就模拟 Servlet API 而言,您可能会从存根实现 provided by the Spring Framework 中获得您需要的用于测试目的的东西

    【讨论】:

      【解决方案3】:

      Velocity 和 FreeMarker 在这方面都非常出色,并且更容易用于基本模板。

      但是,这是可以做到的。

      我在这里解释了一个例子:Tomcat JSP/JSTL without HTTP

      在网络应用程序中显然更容易(因为所有的 jar 都在那里),但它可以在外部完成,您只需要为您的程序识别和适当的 jar。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-27
        • 2015-07-26
        • 2013-05-21
        • 2019-09-01
        • 2010-09-19
        • 2011-10-31
        • 1970-01-01
        • 2018-11-15
        相关资源
        最近更新 更多