RESTfulアプリ(jersey+Tomcat)デプロイ手順

Pocket

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

広告

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です