如何从Apache Velocity中的.vm文件获取整个HTML?

时间:2013-07-30 22:19:45

标签: javascript html velocity

感谢您对我的用例的帮助。我有一个Servlet,它在Apache Velocity模板(.vm)文件中使用javascript呈现一些信息。

现在,在我将此模板返回到浏览器之前,我想将整个HTML存储到我需要从.vm模板访问整个HTML的本地文件系统中。我坚持做最后一步。

1 个答案:

答案 0 :(得分:6)

Web应用程序是client⟷server应用程序,这意味着客户端(即您的浏览器)与Web服务器之间存在明显的分离。您在浏览器中看到的服务器和HTML之间没有直接连接。

尝试可视化过程:

  1. 用户尝试打开网页,因此浏览器会向服务器发送HTTP请求。
  2. 服务器处理所请求的URL,并确定它应该转到处理速度模板的servlet,并标识应该用于呈现响应的.vm文件。
  3. .vm文件由服务器上的servlet读取,并呈现为HTML的字符串表示形式。
  4. HTML将在HTTP响应中发送到客户端。从现在开始,服务器与该HTML没有任何关联。
  5. 浏览器从响应中读取HTML,解析并显示它。
  6. 与该HTML相关联的JavaScript资源也从服务器获取,解析并执行(在客户端浏览器中)。
  7. Velocity模板(或服务器上的任何其他代码)无法访问浏览器中现在的HTML,除非浏览器在另一个请求中明确地将其发送回服务器。

    你能做的是:

    1. 编写另一段侦听click事件的JavaScript代码。
    2. JS从目标元素获取序列化的HTML,类似于var html = document.getElementById('id_of_the_element').innerHTML;
    3. JS使用XMLHttpRequest将此字符串发送到服务器,使用浏览器的原始XHR支持或您选择的JS框架。
    4. 在服务器上编写另一个servlet(或扩展现有servlet的功能),接收此HTML并根据需要对其进行处理。