以前の記事「Web API/Restfulアプリ開発環境構築」で
まとめた環境で、RESTプログラムをデプロイする手順をまとめました。
ちなみに以下の書籍や各種サイト、jersey公式ドキュメントで勉強中です。
まずデプロイに際してはTomcatでRESTプログラムをサーブレットとして対応してもらう必要があるようです。
要はweb.xmlに必要なサーブレットを登録しないと、TomatがRESTプログラムを取り扱えないみたい。
で、各種サイトを見るのですが、springを使っていたりApplicationクラスが何だと情報がばらばらでよくわからない。。。
いずれ基本から調査してみようと思いますが、今回は書籍の内容をベースにできるだけ最低限の環境で動作させます。以下のサイトが参考になりました。
参考サイト:Jerseyを使用してTomcat6(JavaEE5)でRESTFullサービスを作成する
環境は以下。
| ソフトウェア | バージョン |
| Windows | 10 |
| JDK | 1.8.0_65 |
| Tomcat | 7.0.67 |
| jersey | 1.17.1 |
| maven | 3.2.5 |
まずweb.xmlは以下とします。
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<servlet>
<servlet-name>Rest</servlet-name>
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>JAX-RSサービスを実装したJavaクラス配置パッケージ名</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Rest</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
上記、「JAX-RSサービスを実装したJavaクラス」は@GETや@Path等を記述したRESTアプリのJavaクラスです。
これを配置しているパッケージ名を設定してください。
サーブレットの知識となりますが、servletとservlet-mappingにあるservlet-nameはそれぞれ同じ名前であれば何でも良いです。
url-patternはRESTプログラムにアクセスする際のURLパスなので、「/*」や「/任意の名前/*」等で設定します。
例えば「com.restfully.services.SimpleResource.java」を以下のように作成したとします。
package com.restfully.services;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@Path("/simple")
public class SimpleResource {
@GET
public String hello() {
return "Hello World";
}
}
この場合、web.xmlは
<param-value>com.restfully.services<param-value>
のようになります。
<url-pattern>/resource/*</url-pattern>
と設定している場合、「http://localhost:8080/アプリケーション名/simple」にアクセスすれば「Hello World」と表示されます。
※アプリケーション名は作成したTomcatプロジェクトの最上位フォルダ名
で、ライブラリは今回mavenで管理しています。pom.xmlは以下としました。(dependenciesとbuild部分のみ)
<dependencies>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>1.17.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.17.1</version>
</dependency>
</dependencies>
<build>
<finalName>01_simple_jaxrs</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
maven-compiler-pluginのバージョンは何が適切なのか分からないのですが、今回の本題ではないので触れません。ひとまずdependencyに「jersey-servlet」と「jersey-json」さえ入れれば動作しました。よく用いられている「jersey-server」は「jersey-servlet」に含まれるようなので除外。
mavenを使っていない人用に、上記でダウンロードするライブラリをまとめました。
| maven指定 | 取得するJAR |
| jersey-servlet(1.17.1) | jersey-servlet-1.17.1.jar jersey-core-1.17.1.jar jersey-server-1.17.1.jar asm-3.1.jar |
| jersey-json(1.17.1) | jersey-json-1.17.1.jar jettison-1.1.jar jaxb-impl-2.2.3-1.jar jaxb-api-2.2.2.jar stax-api-1.0-2.jar activation-1.1.jar jackson-core-asl-1.9.2.jar jackson-mapper-asl-1.9.2.jar jackson-jaxrs-1.9.2.jar jackson-xc-1.9.2.jar |
あとは作成したプログラムをTomcatのwebappsに配置すればOKです。
「http://localhost:8080/アプリケーション名/simple」と記述すれば動作が確認できます。
ちなみに今回Windows環境で動作させたのでUTF-8の日本語が文字化けしてしまいました。Tomcat起動時に環境変数としてCATALINA_OPTSを設定すれば解消できます。
例)set CATALINA_OPTS=-Dfile.encoding=utf-8
※コマンドプロンプト上の記述は文字化けしますが。。。対応方法はないものか
デプロイ方法は他にも色々あるようなので、また調べて記事を作る予定です。jerseyの公式ドキュメント(英語)に目を通さないといけない予感がしますが。。。
