JAX-RSを活用して、JavaクラスをWebサービス化しよう特集:JAX-RS入門(2/4 ページ)

» 2014年11月10日 15時07分 公開
[arton,]

機能をメソッドへパッケージする

 最初にプログラムを修正して、オブジェクトのメソッドを呼び出す形式とする。

 メモ帳で先ほど作成したAdd.javaファイルを開く。

> notepad Add.java


Add.javaファイルを開いて、編集する

 次に、ソースファイルを以下のリストのように修正する。

package com.example;
import java.math.BigDecimal;

public class Add {
  public String add(String ax, String ay) {
    BigDecimal x = new BigDecimal(ax);
    BigDecimal y = new BigDecimal(ay);
    return x.add(y).toString();
  }
  public static void main(String[] args) {
    Add a = new Add();
    System.out.println(a.add(args[0], args[1]));
  }
}


Add.javaファイル
最初のコードは、mainメソッドで全ての処理を行っていたが、今度はaddメソッドに処理を抜き出している。Addクラスのオブジェクトは無引数のコンストラクターで生成し、mainメソッドではそのオブジェクトに対してaddメソッドを呼び出している。

 修正が完了したら、先ほどと同様にjavacコマンドでコンパイルし、作成されたクラスファイルを「com\example」ディレクトリへコピーし、プログラムを実行する。

> javac Add.java
> copy *.class com\example
Add.class
com\example\Add.class を上書きしますか? (Yes/No/All): all   ←上書き確認が表示されるのでallと入力する
        1 個のファイルをコピーしました。
> java com.example.Add 100000000 80000000000
80100000000     ← 100000000に80000000000を足した結果が表示される


修正したAddクラスのコンパイルとテスト実行

 実は、この状態にすれば、つまり無引数コンストラクターによってオブジェクトを生成できるクラスを用意すれば、これにアノテーションを付けるだけでJAX-RSを利用してWebサービス化できるのだ。ポイントは今述べた無引数コンストラクターによるインスタンス生成が可能であることと、Webサービス化したい機能をメソッドに切り出すことだ。

 次にTomcatとJerseyをインストールする。

TomcatとJerseyのインストール

 最初に述べたように、アノテーションには特別なクラスを利用する。

 JAX-RS用アノテーションクラスは、Java SE JDKには含まれていないため、別途入手する必要がある。

 ここではJerseyの配布パッケージに含まれるJAX-RSの標準クラス(javax.ws.rs-api-2.0.1.jarファイル)を使用しよう。

 Jerseyは、そのダウンロードページからダウンロードする。ダウンロードするのは、JAX-RSのAPIを含むパッケージで、[Jersey JAX-RS 2.0 RI bundle]という名前でリンクされている。リンクをクリックするとjaxrs-ri-2.13.zipファイルがダウンロードできる。なお、バージョン番号部分はリリース状況によって変わるので異なる番号でも問題はない。

 ここでダウンロードしたzipファイルは以下の構造である。

Jerseyの配布パッケージに含まれるファイルの構成 Jerseyの配布パッケージに含まれるファイルの構成

 このうち、api、ext、libの各ディレクトリの内容をコピーして利用することになる。

 ただし、ここでは、直接Webアプリケーション用のディレクトリへコピーしたいので、ひとまずJerseyについては展開せずに置いておいて、先にTomcatをインストールしよう。

 Tomcatは、Apache Tomcatのダウンロードページから最新のTomcat 8をダウンロードする。ここではサービス化などの機能は利用しないので、OSに合わせて[32-bit Windows zip]または[64-bit Windows zip]のいずれかのリンクをクリックしてダウンロードする。

 ダウンロードが完了したら、Windowsエクスプローラーなどを使って「C:\Users\ログインユーザー名」ディレクトリに展開する(ここでは「C:\Users\user」ディレクトリ)。以下では、「C:\Users\user\apache-tomcat-8.0.14」以下にTomcatを展開したものとする。

 再度コマンドプロンプトへ戻って、展開したTomcatのディレクトリにWebアプリケーション用のディレクトリを作成する。

 最初にTomcatのインストールディレクトリをCATALINA_HOME環境変数に設定する。その後、以下のディレクトリも作成しておく。Tomcatではインストールディレクトリの下にある「webapps」ディレクトリに個々のWebアプリを配備していく。

  • 「%CATALINA_HOME%\webapps\calc」ディレクトリ: 「calc」という名前で公開するWebアプリ用のディレクトリ。HTMLファイルやJavaScriptファイルなどはここに置く(本稿ではHTMLファイルもJavaScriptファイルも使用しない)
  • 「%CATALINA_HOME%\webapps\calc\WEB-INF」ディレクトリ: Webアプリの情報やWebでの公開対象としないファイルを格納する
  • 「%CATALINA_HOME%\webapps\calc\WEB-INF\lib」ディレクトリ: そのWebアプリで利用するライブラリを格納する
  • 「%CATALINA_HOME%\webapps\calc\WEB-INF\classes」ディレクトリ: そのWebアプリを実装するJavaクラスを格納する

> set CATALINA_HOME=C:\Users\user\apache-tomcat-8.0.14 ← 14の部分はリリースによって異なる
> mkdir %CATALINA_HOME%\webapps\calc          ← calcという名前でWebアプリ用ディレクトリを作成する
> mkdir %CATALINA_HOME%\webapps\calc\WEB-INF  ← Webアプリの情報ディレクトリを作成する
> mkdir %CATALINA_HOME%\webapps\calc\WEB-INF\lib  ← Webアプリのライブラリディレクトリを作成する
> mkdir %CATALINA_HOME%\webapps\calc\WEB-INF\classes  ← Webアプリのクラスディレクトリを作成する


必要な環境変数を設定し、AddクラスをWebアプリとしてホストするのに必要なディレクトリを作成

 ここまで完了したら、上で作成したライブラリディレクトリ(「%CATALINA_HOME%\webapps\calc\WEB-INF\lib」ディレクトリ)へ、Jerseyのapi、ext、libの各ディレクトリに含まれる内容を全てコピーする。このとき、ディレクトリ構造をそのままコピーするのではなく、3つのディレクトリにある全ファイルをlibディレクトリにコピーすること。

 最後に、Webアプリの設定ファイルを「%CATALINA_HOME%\webapps\calc\WEB-INF」ディレクトリに作成する。

notepad %CATALINA_HOME%\webapps\calc\WEB-INF\web.xml


Webアプリの設定ファイル(web.xmlファイル)を作成

 メモ帳が「ファイルweb.xmlが見つかりません。新しく作成しますか?」とポップアップ表示するので、[はい]ボタンをクリックする。

 以下の内容を打ち込み、保存する。

<web-app version="3.0"
  xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <servlet>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
  </servlet>
  <servlet-mapping>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
    <url-pattern></url-pattern>
  </servlet-mapping>
</web-app>


Webアプリの設定ファイルの内容

 このweb.xmlファイルでは<servlet>要素で、Webアプリが使用するサーブレットを指定し、<servlet-mapping>要素でURLとサーブレットのマッピングを行っている。

 ここで<servlet>要素の<servlet-name>要素で指定したjavax.ws.rs.core.ApplicationはJAX-RSのAPIに含まれる抽象クラスである。ここではWEB-INF\libディレクトリに配置したjarファイルから、Jerseyが提供するjavax.ws.rs.core.Applicationを継承した具象クラスをTomcatが自動的に利用してくれるので、具象クラス名を記述する必要はない。また、<servlet-mapping>要素の<servlet-name>要素の値も同じ「javax.ws.rs.core.Application」となっている。これにより、<url-pattern>要素で指定されたURLへのリクエストが対応するサーブレットで処理されるようになっている。このように、JAX-RSでWebサービス(アプリ)を作成する場合は通常のJavaクラスのみを作成すればよいため、web.xmlファイルは定型的なもので済ませられる。

 そして、<url-pattern>要素で指定されている「/*」はこのWebアプリ(calc)をルートとした「calc/*」を意味する。この結果、後述のAddクラスへ記述したアノテーションと合わせて「http://IPアドレス:ポート/calc/〜」以下へのリクエストがAddクラスで処理されるようになるわけだ。

web.xmlファイルの内容 web.xmlファイルの内容

 以上で、インストールと実行のための準備作業は完了だ。次に、先ほど作成したAddクラスにアノテーションを組み込むことにする。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。