最初にプログラムを修正して、オブジェクトのメソッドを呼び出す形式とする。
メモ帳で先ほど作成したAdd.javaファイルを開く。
> notepad 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]));
}
}
修正が完了したら、先ほどと同様に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を足した結果が表示される
実は、この状態にすれば、つまり無引数コンストラクターによってオブジェクトを生成できるクラスを用意すれば、これにアノテーションを付けるだけでJAX-RSを利用してWebサービス化できるのだ。ポイントは今述べた無引数コンストラクターによるインスタンス生成が可能であることと、Webサービス化したい機能をメソッドに切り出すことだ。
次に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ファイルは以下の構造である。
このうち、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アプリを配備していく。
> 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アプリのクラスディレクトリを作成する
ここまで完了したら、上で作成したライブラリディレクトリ(「%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.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.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クラスで処理されるようになるわけだ。
以上で、インストールと実行のための準備作業は完了だ。次に、先ほど作成したAddクラスにアノテーションを組み込むことにする。
Copyright© Digital Advantage Corp. All Rights Reserved.