Jettyを使用してRESTサーバを起動する
次に、RESTサーバを起動します。このプロジェクトのMaven POMファイルは、JettyWebサーバを使用するように設定されています。このプロジェクトにおいてJettyは、Mavenゴールとして動作するように設定されています。そのため起動は簡単です。
まず、図5に示すように、Mavenのinstallゴールを呼び出し、ローカルマシンのリポジトリにアーティファクトをコンパイル、ビルド、インストールします。
次に、図6に示すように、プロジェクトのWebアプリケーションが存在するディレクトリに移動し、mvn jetty:runによってJettyサーバを起動します。
すべてが正常である場合、図7に示すように、Jettyが起動したことを示すメッセージが端末に表示されます。
次に、クライアント側の処理を行います。
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を呼び出した結果を示します。
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プロパティを提供するファサードオブジェクトです。
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オブジェクトは、code、image、shoeIdという3つのプロパティを公開します。codeプロパティは、上述のカードコード命名規則に従って、カードの絵柄と番号を示します。shoeIdプロパティは、カードが取り出されたシューとそのプロパティを示します。Imageプロパティは、カードの画像を含む、Base64エンコードされた文字列です。リスト6に、CardDealer RESTサービスから取得したカードを表す、JSON形式の文字列の例を示します。
{"code":"c12",
"fileFormat:"gif",
"image":"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\\r\\nxjICAAA7\\r\\n",
"shoeId":"0ad84189-0ba3-46c3-a082-63f9e561d87d"}




