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