月別: 2011年9月

Communicating with the server

http://code.google.com/intl/ja/webtoolkit/doc/latest/tutorial/clientserver.html

 サーバとの通信

すべてのGWTアプリケーションはエンドユーザーのwebブラウザ内でJavaScriptとして走ります。だけれども、あなたはしばしばよりスタンドアロンなクライアントサイドアプリケーションを作成することを望むでしょう。あなたのアプリケーションは、リクエストを送信したり、更新を受信したり、サーバと通信する必要があります。
古いwebアプリケーションはwebサーバとやり取りする毎に、完全に新しいHTMLページを取ってきます。対照的に、AJAXアプリケーションはクライアントにユーザーインターフェイスロジックを押し付けて、データのみを送受信するためにサーバに非同期呼び出しを行います。これはアプリケーションの帯域幅の要件とサーバの負荷を軽減すると同時に、AJAXアプリケーションのUIをより応答性が高く、流動的にすることを可能にします。
この時点で、クライアントサイドのコードで株価データをシミュレートするストックウォッチャー(株価監視)アプリケーションの最初の実装を作成済です。以下の3つのチュートリアルで、サーバから株価データを取得する方法を学びます。
Note: GWTアプリケーションでのクライアント-サーバ間通信のより広いガイドについては
Communicate with a Serverを見てください。

 実装方法の選択

GWTはサーバと通信するための幾つかの異なる方法を提供します。どのデータフォーマットを使用するかは最終的に対話する必要があるサーバに依存します。

リモートプロシージャコールの作成(GWT RPC)

あなたがバックエンドでJavaを走らせることが出来て、あなたのアプリケーションのサーバサイドビジネスロジックを作成出来るならば、おそらくGWT RPCがベストチョイスです。GWT RPCは標準のHTTP越しにサーバとJavaオブジェクトを受け渡すための仕組みです。 透過的にJavaサーブレットを呼び出したり、オブジェクトのシリアライゼーションのようなローレベルの細部を処理するためにGWT RPCフレームワークを使用することが出来ます。
これを試す場合はリモートプロシージャコールの作成を参照してください。

HTTP経由でのJSONデータの取得

あなたのアプリケーションがJavaサーブレットをホスト出来ないサーバまたは既にJSONやXMLのような別のデータフォーマットを使用しているサーバと通信する場合は、データを取得するためにHTTPリクエストを作成することが出来ます。GWTはリクエストを構築する為に使用することが出来る一般的なHTTPクラスやレスポンスを処理する為に使用することが出来るJSONとXMLクライアントクラスを提供します。 さらに開発している間はJavaScriptオブジェクトをあなたの統合開発環境で対話することの出来るJavaオブジェクトへ変換する為にオーバーレイタイプを使用することも出来ます。
これを試す場合はJSONデータの取得を参照してください。 このチュートリアルはJSONデータ用のHTTPリクエストの作成のみをカバーしていますが、コードは代わりにXMLデータでも動作するように適応させることが出来ます。

JSONP用クロスサイトリクエストの作成

1つ以上のリモートwebサーバからのデータを使用する必要があるマッシュアップアプリケーションを作成する場合、SOP(同一生成元ポリシー)アクセス制限を回避する必要があります。このチュートリアルでは、パディング付きJSON(JSONP)を取得する<script>タグを書く為にJavaScriptネイティブインターフェイス(JSNI)を使用します。
これを試す場合はクロスサイトリクエストの作成を参照してください。
Note:  Google Data APIsYahoo! Web Servicesなど、試すことの出来るJSON形式データのさまざまな公開ソースがあります。

 非同期呼び出しの実行

GWT RPCを使用する場合でもHTTP経由でJSONデータ取得をする場合でも、作成するHTMLページからサーバへの呼び出しは全て非同期です。これは呼び出しが戻るのを待っている間、ブロックしないことを意味します。呼び出しに続くコードは直ちに実行されます。呼び出しが完了した場合、呼び出し作成時に指定したコールバックメソッドが実行されます。
非同期呼び出しはAJAX (Asynchronous JavaScript And XML)開発の中核となる原則です。  (開発者にとって)シンプルな同期呼び出しではなく、非同期呼び出しを行うことの利点は、改良されたエンドユーザーエクスペリエンスです:
  • ユーザーインターフェイスは応答性は高いままです。
    webブラウザのJavaScriptエンジンは一般的にシングルスレッドです。だからサーバを同期呼び出しすることは、呼び出しが完了するまでwebページが”ハング”することを引き起こします。ネットワークが遅かったり、サーバが応答しない場合、これはエンドユーザーエクスペリエンスをめちゃくちゃにするでしょう。
  • 未確定のサーバ呼び出しを待っている間、他の作業を実行出来ます。
    例えば、インターフェイスを配置するためにサーバからデータを取得している間に同時にユーザーインターフェイスを構築することが出来ます。これはユーザーがページ上のデータを見るために要する時間を短縮します。
  • 同時に複数のサーバ呼び出しを行うことが出来ます。
    しかしながら、通常、ブラウザは同時発信ネットワーク接続数を2つに制限するので、非同期呼び出しを使用した追加することが出来る並行処理は制限されます?
    (*how muchがどう訳せばいいかわからない)
あなたがAJAX開発が初めてならば、非同期呼び出しについて慣れるのに最も困難なことは呼び出しがノンブロッキングであることです。しかしながら、Javaインナークラスはこれを管理可能にすることに効果があります。
非同期呼び出しの作成についてのより詳しい情報は開発者ガイドの Getting Used to Asynchronous Callsを参照してください。