[英]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.