3

私のユースケースについてご協力いただければ幸いです。Apache Velocity テンプレート (.vm) ファイルで JavaScript を使用していくつかの情報をレンダリングするサーブレットがあります。

ここで、このテンプレートをブラウザーに返す前に、.vm テンプレートから HTML 全体にアクセスする必要があるローカル ファイル システムに HTML 全体を保存したいと考えています。私は最後のステップを行うことに行き詰まっています。

4

1 に答える 1

9

Web アプリケーションはクライアント⟷サーバーアプリケーションです。つまり、ブラウザーであるクライアントと Web サーバーは明確に分離されています。サーバーとブラウザに表示される HTML との間に直接的な接続はありません。

プロセスを視覚化してみてください。

  1. ユーザーが Web ページを開こうとすると、ブラウザーは HTTP 要求をサーバーに送信します。
  2. サーバーは、要求された URL を処理し、速度テンプレートを処理するサーブレットに送信する必要があることを識別し.vm、応答のレンダリングに使用する必要があるファイルを識別します。
  3. .vmファイルはサーバー上のサーブレットによって読み取られ、HTML の文字列表現にレンダリングされます。
  4. HTML は、HTTP 応答でクライアントに送信されます。これ以降、サーバーはその HTML に接続しません。
  5. ブラウザーは応答から HTML を読み取り、解析して表示します。
  6. その HTML に関連付けられた JavaScript リソースもサーバーから取得され、解析されて (クライアント ブラウザーで) 実行されます。

Velocity テンプレート (またはサーバー上のその他のコード) が現在ブラウザーにある HTML にアクセスする方法はありません。ただし、ブラウザーが別の要求で明示的にそれをサーバーに送り返す場合を除きます。

あなたができることは次のとおりです。

  1. イベントをリッスンする別の JavaScript コードを記述しますclick
  2. JS は、次のようなターゲット要素からシリアル化された HTML を取得します。var html = document.getElementById('id_of_the_element').innerHTML;
  3. XMLHttpRequestJSは、ブラウザからの生の XHR サポート、または選択した JS フレームワークのいずれかを使用して、この文字列をサーバーに送信します。
  4. サーバー上で、この HTML を受け取って必要に応じて処理する別のサーブレットを作成 (または既存のサーブレットの機能を拡張) します。
于 2013-08-01T13:33:41.747 に答える