SHOEISHA iD

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

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

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

japan.internet.com翻訳記事

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

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

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

 ブラウザDOMに返されたJSON形式のオブジェクトRestCardに情報を設定する機能を提供するAJAXコールバックJavaScript関数を、リスト7に示します。コールバック関数の名前は、非常に単純ですがcallback()となっています。

リスト7 AJAX HttpRequestが正しく処理された場合に呼び出されるJavaScriptコード
function callback(){
  if(xmlhttp.readyState==4){
    //Create the card JSON object
    var card = eval( "(" + xmlhttp.responseText + ")" );
    //Get the <img> element
    var img = document.getElementById("cardViewer");
    //Apply the Base64 string, telling the image element about the nature of
    //the data
    img.src="data:image/" + card.fileFormat + ";base64," + card.image;
    //Put the card code in the image alt text
    img.alt = card.code;
    //Get the hidden element and apply the shoeId value
    var shoeId = document.getElementById("shoeId");
    shoeId.value = card.shoeId;
    //Also, display the shoeId value on the page          
    var shoeIdDiv = document.getElementById("shoeIdDiv");
    shoeIdDiv.innerHTML = card.shoeId;
    //Display the card code on the page          
    var cardCodeDiv = document.getElementById("cardCodeDiv");
    cardCodeDiv.innerHTML = card.code;
  }
}

 基本的に関数callback()は、RESTサーバから返された文字列であるxmlhttp.responseText(正式にはXMLHttpRequest.ResponseText)に対し、Javascriptであるeval()メソッドを実行します。eval()を実行することにより、文字列がJSON形式のRestCardオブジェクトに変換されます。文字列をオブジェクトに変換した後、JavaScriptは、Webページ上の関連するDOMオブジェクトを検出し、JSON形式のRestCardオブジェクトからの対応する値をDOMに代入します。上のJavaScriptから引用した、以下のコード行に着目してください。

img.src="data:image/" + card.fileFormat + ";base64," + card.image;

 このコードにより、コールバックの中のJavaScriptは、Base64文字列を画像としてWebページにレンダリングできます。この短いコードで、多くの処理が行われます。バイト列を、実行時に画像としてWebページに表示するという処理は、簡単な作業ではありません。これができるのは、data URLスキームを使用しているからです。

 data:[<mediatype>][;base64],<data>は、URLを純粋なデータとして定義するURLスキームです。これによって、Base64エンコードされた文字列を実行時に画素に変換できるのです。

コードの取得

 最後に、このプロジェクトで使用したJavaおよびJavaScriptソースコードを紹介します。表2は、各コードへのリンクの一覧です。また、各リンクの説明も示されています。

表2 CardDealerプロジェクトのソースコード
コードファイル名 説明 レイヤ
index.html ランダムにカードを表示するWebページ Webサイト
CardDealerRest.java RESTサービスを公開するJersey Javaリソースクラス REST
RestCard.java カード画像としてBase64文字列を公開するファサードオブジェクト REST
Card.java カードを表すPOJO(Plain Old Java Object: 普通のJavaオブジェクト) サービス
CardDealerHelper.java ホストコンピュータ上の画像ファイルへのアクセスを提供するヘルパークラス サービス
EmptyShoeException.java Shoeの中のカードが空である場合に発生する例外 サービス
InvalidCardDeckException.java 画像ディレクトリに、必要な画像ファイルが揃っていない場合に発生する例外。画像ファイルはそれぞれ1枚のカードに対応し、ファイル名はCardDealerのカードコード命名規則に従って命名されている。 サービス
Shoe.java カジノで見られるカードシューを抽象化したPOJO。ShoeにはShoeFactoryを介してアクセスする。 サービス
Shoeable.java Shoeが提供する基本サービスを表すインターフェイス サービス
ShoeFactory.java Shoeオブジェクトを作成、提供、管理するシングルトン サービス

まとめ

 以上、長い道のりを経て、やっとWebページにトランプのカードを表示することができました。しかし、ページ上にカードを表示するという処理は、RESTとJerseyの重要性と使い方を示すためのごく初歩的な例にすぎません。RESTはこれからも活躍の場を広げ、Jerseyはますます使用されるようになるでしょう。この記事では、JerseyアノテーションとURLパスの基本を習得すれば、非常に簡単にRESTのメリットをJavaコードに取り込めるということを示しました。この記事の内容が、読者の皆さんにとって有意義なものであったとすれば幸いです。

CardDealerサンプルプロジェクトのインストール

 この記事のサンプルプロジェクト「CardDealer」は、Mavenプロジェクトとして完全に構成されています。そのため、このコードを実行するには、使用しているマシンにMavenをインストールする必要があります(Mavenは、Windows、Linux、およびMac OSXにおいてサポートされています)。プロジェクトを起動するには、以下の手順に従ってください。

  1. プロジェクトのソースコードzipファイル(card-dealer-1.0.zip)と、カード画像ディレクトリのzipファイル(card-deck.zip)をダウンロードします。
  2. プロジェクトコードzipファイル(card-dealer-1.0.zip)をマシン上にunzipします。
  3. プロジェクトの画像ディレクトリzipファイル(card-deck.zip)をマシン上にunzipします。
  4. ファイル/YOUR_INSTALLATION_DIRECTORY/card-dealer-1.0/card-dealer-rest/src/main/webapp/WEB-INF/spring-context.xmlの中のノード<property name="imageDirectoryLocationFileSpec" value="LOCATION_OF_IMAGE_DIR_ON_YOUR_MACHINE" />に、画像ディレクトリの場所を設定します。
  5. 図5に示したように、ローカルなMavenリポジトリにコードをインストールします。
  6. 図6に示したように、Mavenの下でJettyWebサーバを起動します。
  7. ブラウザで、http://localhost:9090/card-dealer-rest/index.htmlというURLを入力します。

関連資料

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

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー