以前の記事「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の公式ドキュメント(英語)に目を通さないといけない予感がしますが。。。