JavaサーバーからXMLHttpRequestを使用して圧縮されたJSONデータを受信する方法

ポール

XMLHttpRequestを使用してjsonデータをリクエストして解析しています。組み込みJetty9を使用するJava8サーバーがリクエストを受信し、データを返します。コードを以下に示します。最初のブロックにクライアント側のJavaScriptがあり、2番目のブロックにサーバー側のJavaコードがあります。

var http = new XMLHttpRequest();
http.onreadystatechange=function() {
  if (this.readyState == 4) {
    if (this.status == 200) {
      data = JSON.parse(this.responseText);
    }
  }
};
http.open("GET", "/mydata", true);
http.send();

 public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

  response.setContentType("application/json");
  response.setStatus(Response.SC_OK);
  PrintWriter pw = response.getWriter();
  pw.write(myDataInJsonStringFormat);
  pw.close();
  baseRequest.setHandled(true);
}

質問は、Javaから圧縮されたjsonデータを送信し、XMLHttpRequestを使用してデータを解凍するように上記のコードを変更するにはどうすればよいですか?

すでに使用しているものよりも、追加のクライアントまたはサーバー側のライブラリを使用したくない。

ポール

この場合、同じデータセットがクライアントに繰り返し提供されます。桟橋ハンドラーを追加するのではなく、jsonテキスト文字列はgzip圧縮されたバイト配列に変換されます。

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import java.util.zip.GZIPOutputStream;

ByteArrayOutputStream bos = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(bos);
OutputStreamWriter osw = new OutputStreamWriter(gzip, StandardCharsets.UTF_8);
osw.write(myDataInJsonStringFormat);
osw.close();

compressedJsonData = bos.toByteArray();

次に、データはjettyハンドラーによってJavaクライアントに返されます。

public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

  response.setContentType("application/json");
  response.setHeader("Content-Encoding", "gzip");
  response.setContentLength(compressedJsonData .length);

  response.setStatus(Response.SC_OK);

  response.getOutputStream().write(compressedJsonData );
  response.getOutputStream().close();

  baseRequest.setHandled(true);
}

クライアント側XMLHttpRequestjavascriptコードでは、変更は必要ありません。ブラウザ(Edge、IE11、Chromeで確認済み)は、jsonを自動的に解凍し、テキストに変換してからthis.responseTextに渡します

var http = new XMLHttpRequest();
http.onreadystatechange=function() {
  if (this.readyState == 4) {
    if (this.status == 200) {
      data = JSON.parse(this.responseText);
    }
  }
};
http.open("GET", "/mydata", true);
http.send();

また、ダウンロードされたデータの量をクライアントに表示するプログレスバーを追加しました。このため、圧縮前の長さが保存され、サーバー側でカスタムhttpヘッダーとして追加されます

response.setHeader("Uncompressed-Length", myDataInJsonStringFormat.length + "");

クライアントではreadyState == 2の場合、このヘッダーはonreadystatechangeハンドラーでestimatedLengthとして読み取られ、進行状況ハンドラーは次のように設定されます。

    http.onprogress = function(event) {
      var percentComplete = Math.round((event.loaded/estimatedLength) * 100);
      progressMessage = Math.round(event.loaded/1000) + "KB downloaded and uncompressed, " + percentComplete + "%";
    };

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

外部から投稿された受信jsonデータを受信する方法

分類Dev

サーバーから受信したJSONデータを使用してUIを更新するにはどうすればよいですか?

分類Dev

Jersey APIを使用してRESTful WebサービスからJSONデータを送受信する方法

分類Dev

コピーからgzip圧縮されたjsonデータをロードする方法

分類Dev

ajaxを使用してdjangoサーバーからダウンロードした圧縮データ( `gz`)が膨らみ、壊れている

分類Dev

LINQからデータを受信したのに、500の内部サーバーエラーを受信する

分類Dev

SAS:バイナリで圧縮されたデータセットをcharを使用して圧縮されたデータセットに、またはその逆に変換する最も簡単な方法は何ですか?

分類Dev

Angularサービスからパラメーターを使用してデータを受信する方法

分類Dev

$ .postを使用してフォームからphpサーバーでデータを受信する

分類Dev

iOSのソケットを介してサーバーからデータを受信する方法は?

分類Dev

受信しているオブジェクトを表すパラメーターのタイプが宣言されている間に、サーバーから受信したJSON文字列を手動で解析する必要がありますか?

分類Dev

PHPを使用して1つのサーバーから別のサーバーにデータを受信する方法

分類Dev

Kivy-サーバーからデータを継続的に受信し、kivyを使用してインターフェースを更新する方法

分類Dev

サーバーからデータを受信し、Javaでデータを受信した場合にサーバーにデータを送信するプログラムの作成方法

分類Dev

RFCを使用してJavaから送信するabapからテーブルデータを受信する方法

分類Dev

Webサービスから受信したxml応答を取得してデータソースにする方法

分類Dev

JSONを使用してデータベースからサブ配列を受信するAndroid

分類Dev

RESTAPIを使用してWebサービスからJSONデータを受信する

分類Dev

SwiftのJsonのサーバーからデータを受信します

分類Dev

サーバーからデータを受信するVue

分類Dev

github-pagesでホストされているWebサイトから受信したJSONデータを保存します

分類Dev

SpringWebClientがhttp / 1.1を使用しているSpringWebfluxサーバーからストリームデータを受信する方法

分類Dev

puppeteerを使用してノードjsで受信したデータから改行を削除する方法

分類Dev

Node.jsを使用してサーバー側のAJAXPOST関数からデータを受信するにはどうすればよいですか?

分類Dev

Python(WebSocketを備えたサーバー)とJavaScript(クライアント側)を使用してJSONデータを受信する方法

分類Dev

Python ソケットを使用してブロードキャスト サーバーから大きなデータを受信する方法

分類Dev

サーバーからすべてのデータを受信したときにのみUIViewを表示する方法

分類Dev

NAudioを使用してマイクからの着信PCMデータを圧縮するにはどうすればよいですか?

分類Dev

サーバーが受信したXMLHttpRequestを使用してPUTメソッドが送信されないのはなぜですか?

Related 関連記事

  1. 1

    外部から投稿された受信jsonデータを受信する方法

  2. 2

    サーバーから受信したJSONデータを使用してUIを更新するにはどうすればよいですか?

  3. 3

    Jersey APIを使用してRESTful WebサービスからJSONデータを送受信する方法

  4. 4

    コピーからgzip圧縮されたjsonデータをロードする方法

  5. 5

    ajaxを使用してdjangoサーバーからダウンロードした圧縮データ( `gz`)が膨らみ、壊れている

  6. 6

    LINQからデータを受信したのに、500の内部サーバーエラーを受信する

  7. 7

    SAS:バイナリで圧縮されたデータセットをcharを使用して圧縮されたデータセットに、またはその逆に変換する最も簡単な方法は何ですか?

  8. 8

    Angularサービスからパラメーターを使用してデータを受信する方法

  9. 9

    $ .postを使用してフォームからphpサーバーでデータを受信する

  10. 10

    iOSのソケットを介してサーバーからデータを受信する方法は?

  11. 11

    受信しているオブジェクトを表すパラメーターのタイプが宣言されている間に、サーバーから受信したJSON文字列を手動で解析する必要がありますか?

  12. 12

    PHPを使用して1つのサーバーから別のサーバーにデータを受信する方法

  13. 13

    Kivy-サーバーからデータを継続的に受信し、kivyを使用してインターフェースを更新する方法

  14. 14

    サーバーからデータを受信し、Javaでデータを受信した場合にサーバーにデータを送信するプログラムの作成方法

  15. 15

    RFCを使用してJavaから送信するabapからテーブルデータを受信する方法

  16. 16

    Webサービスから受信したxml応答を取得してデータソースにする方法

  17. 17

    JSONを使用してデータベースからサブ配列を受信するAndroid

  18. 18

    RESTAPIを使用してWebサービスからJSONデータを受信する

  19. 19

    SwiftのJsonのサーバーからデータを受信します

  20. 20

    サーバーからデータを受信するVue

  21. 21

    github-pagesでホストされているWebサイトから受信したJSONデータを保存します

  22. 22

    SpringWebClientがhttp / 1.1を使用しているSpringWebfluxサーバーからストリームデータを受信する方法

  23. 23

    puppeteerを使用してノードjsで受信したデータから改行を削除する方法

  24. 24

    Node.jsを使用してサーバー側のAJAXPOST関数からデータを受信するにはどうすればよいですか?

  25. 25

    Python(WebSocketを備えたサーバー)とJavaScript(クライアント側)を使用してJSONデータを受信する方法

  26. 26

    Python ソケットを使用してブロードキャスト サーバーから大きなデータを受信する方法

  27. 27

    サーバーからすべてのデータを受信したときにのみUIViewを表示する方法

  28. 28

    NAudioを使用してマイクからの着信PCMデータを圧縮するにはどうすればよいですか?

  29. 29

    サーバーが受信したXMLHttpRequestを使用してPUTメソッドが送信されないのはなぜですか?

ホットタグ

アーカイブ