繁体   English   中英

读取JSP文件并生成HTML-而不是通过Web服务器

[英]Read a JSP file and produce HTML - not with a web server

如果我想阅读类似的jsp:

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

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

我认为这里有一些变压器。 谁能指出我正确的方向?

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

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

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

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

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

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

就模拟Servlet API而言,您可能会从Spring框架提供的用于测试目的的存根实现中获得所需的东西

Velocity和FreeMarker在这方面都非常出色,并且对于基本模板制作而言则更加容易。

但是,可以做到。

我在这里解释了一个示例: 不带HTTP的Tomcat JSP / JSTL

从Web应用程序中显然很容易(因为所有jar都在其中),但是可以在外部完成,您只需要为程序标识和合适的jar即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM