SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Jersey、AJAX、JSONを使ってRESTに挑戦しよう

RESTのメリットをJavaコードに簡単に取り込む方法

Jettyを使用してRESTサーバを起動する

 次に、RESTサーバを起動します。このプロジェクトのMaven POMファイルは、JettyWebサーバを使用するように設定されています。このプロジェクトにおいてJettyは、Mavenゴールとして動作するように設定されています。そのため起動は簡単です。

 まず、図5に示すように、Mavenのinstallゴールを呼び出し、ローカルマシンのリポジトリにアーティファクトをコンパイル、ビルド、インストールします。

図5 Mavenのinstallゴールを用いて、プロジェクトをビルドする
図5 Mavenのinstallゴールを用いて、プロジェクトをビルドする

 次に、図6に示すように、プロジェクトのWebアプリケーションが存在するディレクトリに移動し、mvn jetty:runによってJettyサーバを起動します。

図6 Jettyサーバを使用して、Webページを取得し、RESTサービスにアクセスする
図6 Jettyサーバを使用して、Webページを取得し、RESTサービスにアクセスする

 すべてが正常である場合、図7に示すように、Jettyが起動したことを示すメッセージが端末に表示されます。

図7 プロジェクトのWebアプリケーションは、ポート9090を使用する
図7 プロジェクトのWebアプリケーションは、ポート9090を使用する

 次に、クライアント側の処理を行います。

WADLを使用してRESTアプリケーション情報を取得する

 Jerseyの優れた機能の1つに、サーバ上で利用可能なRESTサービスを説明するWADLファイルを表示するように、設定できるというものがあります。WADLとは、Web Application Description Languageの略です。WADLは、JavaリソースクラスとREST URLのバインド方法などが記述されたXMLファイルです。CardDealerRestプロジェクトのPOMファイルでは、必要なアーティファクトが設定されており、自動表示を可能としています。従って、プロジェクトのWADLファイルを表示するには、次のURLを入力します。

http://localhost:9090/card-dealer-rest/rest/application.wadl

 WADLファイルを自動的に表示するための仕組みは、RESTサービスへのエントリポイントのすぐ後に「application.wadl」が続くURLを提供することです。図8に、CardDealerRESTサービスのWADLを呼び出した結果を示します。

図8 Web Application Description Language(WADL)は、自己記述的なXML構造である
図8 Web Application Description Language(WADL)は、自己記述的なXML構造である

Ajaxを使用してRESTサービスを呼び出す

 次に、Webページを介してカードをいくつか取得してみます。クライアント側のカード取得コードを含むページであるhttp://localhost:9090/card-dealer-rest/index.htmlを呼び出します。[Get Card]ボタンをクリックすると、カードが表示されます。この処理の背景にあるのが、AJAXです。

 [Get Card]ボタンのクリックイベントは、JavaScriptのgetCard()関数にバインドされています。getCard()では、RESTサーバに対するAJAXコールバックを実行します(リスト5を参照ください)。RESTサーバは、カードを表す文字列を、JSON形式のRestCardオブジェクトとして返します。RestCardは、Base64エンコードされた文字列としてCard.imageBytesプロパティを提供するファサードオブジェクトです。

リスト5 [Get Card]ボタンをクリックすると、JavaScript関数getCard()が呼び出される
function getCard()
  {
    if (window.XMLHttpRequest)
       {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
       }
     else if (window.ActiveXObject)
       {
         // code for IE6, IE5
         xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
     else
        {
          alert("Your browser does not support XMLHTTP!");
        }
     //get the card's shoeId, if one is in play
     var currentShoeId = document.getElementById("shoeId").value;
     //Prepare the REST URL 
     var URL = "rest/card-dealer/card?shoeId=" + currentShoeId;
     xmlhttp.open("GET",url,true);
     xmlhttp.onreadystatechange=callback;
     xmlhttp.send(null);
  }

 JSON形式に変換されたRestCardオブジェクトは、codeimageshoeIdという3つのプロパティを公開します。codeプロパティは、上述のカードコード命名規則に従って、カードの絵柄と番号を示します。shoeIdプロパティは、カードが取り出されたシューとそのプロパティを示します。Imageプロパティは、カードの画像を含む、Base64エンコードされた文字列です。リスト6に、CardDealer RESTサービスから取得したカードを表す、JSON形式の文字列の例を示します。

リスト6 JSON形式のCardオブジェクトは、code、image、shoeIdという3つのプロパティを公開する。imageプロパティは、Base64エンコードされたカード画像である
{"code":"c12",

"fileFormat:"gif",

"image":"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\\r\\nxjICAAA7\\r\\n",

"shoeId":"0ad84189-0ba3-46c3-a082-63f9e561d87d"} 

次のページ
JSON形式の画像をブラウザにレンダリングする

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Bob Reselman(Bob Reselman)

Edmunds Incのシニアテクニカルライター兼テクニカルエディター。Edmunds Inc.は、多彩な情報と高い可用性を誇る、最先端のJavaベースの各種自動車情報Webサイトを運営する大手パブリッシャーである。http://www.edmunds.com/およびhttp://www.insid...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4596 2009/12/09 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー