JAX-RSでRESTなWebサービスを作ってみる
JAX-RSを使うとRESTFullなWebサービスがさくっと作成できるらしい。ということで試してみました。
1.JAX-RSの実装(Jersey)をダウンロード
JAX-RSの実装であるJerseyをSunのサイトからダウンロードします。mavenのリポジトリも公開されているみたいですが、とりあえずzipになっているものを取得して使用しました。ダウンロードして展開し、lib以下のjarをパスに通せば開発環境の用意は完了です。
2.Webサービスクラスを書いて、アノテーションを付ける
Webサービスとして公開するJavaのクラスを書き、専用のアノテーションを設定します。
- javax.ws.rs.Path
- javax.ws.rs.GET
- GETリクエストを処理するクラスのメソッドに設定します。
- 同様に、「javax.ws.rs.POST」「javax.ws.rs.DELETE」もあります。
package jaxrs.sample; import javax.ws.rs.GET; import javax.ws.rs.Path; /** * Webサービスとして公開するクラス。 */ @Path("/hello") // 「/hello」にアクセスされた場合、このクラスで処理する。 public class HelloService { @GET // 「GET」の場合、このメソッドを実行する。 // 戻り値のStringはそのままレスポンスの本文となる。 public String hello() { return "Hello World!"; } }
3.HTTPサーバーを起動するランチャを書く
次に、HTTPサーバーを起動するランチャを書きます。
- ファクトリが用意されているので、それを呼び出せばOK。
- 作成した「HelloService」は、サーバー内部で自動探索される(!)らしいので、マッピングの指定などは不要です。
package jaxrs.sample; import java.io.IOException; import com.sun.jersey.api.container.httpserver.HttpServerFactory; import com.sun.net.httpserver.HttpServer; /** * HTTPサーバーを起動してサービスの提供を開始するランチャ */ public class Launcher { public static void main ( String[] args ) throws IllegalArgumentException, IOException { // サーバーを作成して起動する。 // Serviceクラスは内部で自動探索される(!)らしいので特に指定は不要。 // なお、引数で指定するURLでは、末尾の「/」が必須なのでご注意。 HttpServer server = HttpServerFactory.create( "http://localhost:8080/" ); server.start(); // ほんとはちゃんと終了処理をしないとダメ。 } }
4.作成したクラスをコンバイルして実行。
あとは、「HelloService」「Launcher」をコンパイルして実行すればOK。
http://localhost:8080/hello
にブラウザでアクセスすると、
Hello World!
が表示されるはずです。