2013-07-30 62 views
1

我希望你對我的用例有所幫助。我有一個Servlet在Apache Velocity模板(.vm)文件中使用JavaScript呈現一些信息。現在,在將此模板返回給瀏覽器之前,我想將整個HTML存儲到本地文件系統中,我需要從.vm模板訪問整個HTML。我被困在做最後一步。Apache Velocity ::如何從.vm文件獲取整個HTML

有人可以告訴我如何做到這一點...?

在此先感謝!

+0

或者,如果我可以以任何方式將HTML從瀏覽器返回給我的servlet ......? – ASingh

+0

這個問題還不夠清楚。你能更詳細地描述這個過程的每一步嗎? –

+0

你有什麼問題? –

回答

6

Web應用程序是客戶端服務器應用程序,這意味着您的瀏覽器即客戶端與Web服務器之間存在明顯分離。服務器和您在瀏覽器中看到的HTML之間沒有直接聯繫。

嘗試以可視化的過程:

  1. 用戶試圖打開一個網頁,讓瀏覽器發送一個HTTP請求到服務器。
  2. 服務器處理所請求的URL,並確定它應該轉到處理速度模板的servlet,並標識應該用於呈現響應的.vm文件。
  3. .vm文件被服務器上的servlet讀取並呈現爲HTML的字符串表示形式。
  4. HTML在HTTP響應中發送給客戶端。從現在開始,服務器沒有連接到該HTML。
  5. 瀏覽器從響應中讀取HTML,解析並顯示它。
  6. 與該HTML關聯的JavaScript資源也從服務器獲取,解析並執行(在客戶端瀏覽器中)。

Velocity模板(或服務器上的任何其他代碼)無法訪問現在在瀏覽器中的HTML,除非瀏覽器在另一個請求中明確地將其發送回服務器。

你可以做的是:

  1. 寫另一塊偵聽到click事件的JavaScript代碼。
  2. 的JS會以連續的HTML從你的目標元素,像var html = document.getElementById('id_of_the_element').innerHTML;
  3. 的JS使用XMLHttpRequest,或者使用從瀏覽器,或者您選擇的JS框架的原始XHR支持發送此字符串到服務器。
  4. 在服務器上,您編寫另一個servlet(或擴展現有servlet的功能),接收此HTML並按需處理它。
+0

謝謝Sergiu您的詳細回覆。我試過你的解決方案,我能夠存儲我的HTML。但我想保留我的Javascript事件。通過您的解決方案,javascript事件不會被保留...您能幫助我嗎? – ASingh

+2

你是什麼意思? _event_是由瀏覽器發送的同步通知或信號......它們不以任何方式包含在HTML中。 –

相關問題