3

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

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

4

1 回答 1

9

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,或者使用浏览器的原始 XHR 支持,或者使用您选择的 JS 框架。
  4. 在服务器上,您编写另一个 servlet(或扩展现有 servlet 的功能)来接收此 HTML 并根据需要对其进行处理。
于 2013-08-01T13:33:41.747 回答