GoogleからJava開発者へのサプライズ!な贈り物、Google Web Toolkit[3]
JavaScript×HTMLとJavaのシームレスな開発環境を体験してみよう
リトルソフト株式会社 長尾寿宏
2006/8/26
サーバ側 サービスメソッドの実装 |
サーバ側プログラムは、GWTが提供するRemoteServiceServletクラスを拡張し、上記サービスインターフェイスを実装します。
package jp.littlesoft.gwttest1.server;
|
次はいよいよ画像検索サービスの呼び出しです。
Yahoo!検索WebサービスはREST(REpresentational State Transfer)と呼ばれ、HTTPリクエストに対してXMLをレスポンスとして返す大変シンプルなWebサービスです。
public ImageSearchResultSet execute(int start, int |
画像検索サービスのURLに引き続き、いくつかのパラメータが連結されています。上記コード中の[YOUR APP ID]には、実際にYahoo!デベロッパーネットワークで登録した値を設定してください。
そのほかは、executeメソッドのパラメータから、検索キーワード(keyword)、検索結果の先頭位置(start)、返却結果件数(size)が、HTTPリクエストパラメータへ内容が引き継がれています。
完成したHTTPリクエストパラメータ(requestParam)を使用して、実際にHTTPリクエストを行います。これにはjava.net.URL、java.net.HttpURLConnectionといった基本的なクラスを利用します。
HTTPリクエストのレスポンスはXMLファイルですので、これを解析して、戻り値であるImageSearchResultSetオブジェクトへ内容をセットする必要があります。
そこで、XMLを解析するクラスとしてYahooImageSearchResultHandlerを作成し、この中でImageSearchResultSetオブジェクトの内容を編集しています。
public ImageSearchResultSet execute(int start, int |
以上がサービスメソッドの完成した姿です。レスポンスのXMLを解析するため、YahooImageSearchResultHandlerクラスの内部では少々複雑な処理をしていますが、GWTの本質とは無関係な部分ですので、解説は割愛させていただきます。
詳細はZIP形式でこちらからダウンロードできるYahooImageSearchResultHandler.javaファイルを参照してください。
なお、ホステッドモードによるデバッグ実行時に、サーバ側モジュールが自動的にロードされるよう、モジュール.xmlファイル(ImageSearchClient.gwt.xml)に、<servlet>を追加します。
<module> |
非同期インターフェイスの定義 |
次に、もう1つ別のインターフェイスを作成します。
クライアント側では、サービスインターフェイス名に基づいて、リモートメソッド呼び出しで使用する代理オブジェクトを生成し、これに対しリモートメソッド呼び出しを指示します。
この代理オブジェクトには、非同期コールバックインターフェイス(AsyncCallback)を実装したオブジェクトをパラメータで引き渡す必要があり、また戻り値を返さないため、サービスメソッドとは異なる非同期処理用のインターフェイスを定義する必要があります。
この非同期処理用インターフェイスと本来のサービスインターフェイスは、同じパッケージの中で、同じ名前としますが、非同期処理用インターフェイスには“Async”という接尾詞を付けるという名前付けルールによって、お互いが関連付けられています。
ImageSearchServiceの非同期処理用インターフェイスは以下のようになります。
package jp.littlesoft.gwttest1.client; |
サービスメソッドでの戻り値はvoidに変更され、パラメータにはAsyncCallbackオブジェクトが追加されている点に注意してください。
リモートメソッド呼び出し代理オブジェクトは以下のようなコードで作成します。
ImageSearchServiceAsync searchService; |
GWT.createはホステッドモード、Webモードに応じて適切なオブジェクトを生成してくれるメソッドです。
本来のサービスインターフェイスを指定し、createメソッドを実行すると、それに対する適切な代理オブジェクトが返されます。このオブジェクトを非同期処理用インターフェイスへキャストします。
次に、サービスが実行されているURLを以下のコードで指定します。ターゲットとなるURLは、ホストページと同じドメイン、同じポートである必要があります。
ServiceDefTarget target = (ServiceDefTarget) searchService; |
以上で、RPCインターフェイスの定義とサービスメソッドの実装は完了です。
2/5 |
INDEX |
||
JavaScript×HTMLとJavaのシームレスな開発環境を体験してみよう | ||
Page1<Webサービスから結果セットを読み出して表示させるまで/RPCインターフェイスの定義とサービスメソッドの実装/検索結果セットのクラスを作成する/サービスインターフェイスの定義> | ||
Page2<サーバ側 サービスメソッドの実装/非同期インターフェイスの定義> | ||
Page3<クライアント側 検索機能の実装/ウィジェットへの値設定> | ||
Page4<グリッドの利用/グリッドのバグ回避/スクロールに伴う自動読み込み> | ||
Page5<背景色変更と内部フレーム表示/今後のバージョンアップも期待> |
Ajax関連記事 |
Ajaxフレームワーク「Spry」で作る「リンク集2.0」 特集:AdobeのAjaxフレームワーク「Spry」を使ってみよう アドビのAjaxフレームワーク「Spry」。さっそく簡単なリンク集のサンプルを作成しながら、その機能を探ってみよう 「リッチクライアント & 帳票」フォーラム 2006/6/21 |
古くて新しいAjaxの真実を見極める 「Webインターフェイスの新しい手法」「画期的なWebアプリケーションの仕組み」であるとして開発者たちの人気を集めるAjaxとは何なのか、その真実を見極めてみよう 最終更新 2005/8/2 |
- GASで棒、円、折れ線など各種グラフを作成、変更、削除するための基本 (2017/7/12)
資料を作る際に、「グラフ」は必要不可欠な存在だ。今回は、「グラフの新規作成」「グラフの変更」「グラフの削除」について解説する - GET/POSTでフォームから送信された値をPHPで受け取る「定義済みの変数」【更新】 (2017/7/10)
HTMLのフォーム機能についておさらいし、get/postメソッドなどの内容を連想配列で格納するPHPの「定義済みの変数」の中身や、フォーム送信値の取り扱いにおける注意点について解説します【PHP 7.1含め2017年の情報に合うように更新】 - PHPのfor文&ループ脱出のbreak/スキップのcontinue【更新】 (2017/6/26)
素数判定のロジックからbreak文やcontinue文の利点と使い方を解説。for文を使ったループ処理の基本とwhile文との違い、無限ループなども併せて紹介します【PHP 7.1含め2017年の情報に合うように更新】 - Spreadsheetデータの選択、削除、挿入、コピー、移動、ソート (2017/6/12)
Spreadsheetデータの選択、挿入、削除、コピー、移動、ソートに使うメソッドの使い方などを解説する
|
|