Tomcat で Jersey を使ってみた
ちょっと Jersey を使ってみたので、メモしておきます。
今回はサーブレットコンテナは Tomcat ( 7.0.59 ) にして、ライブラリのダウンロードは Maven 使いました。
1. pom.xml に Jersey 使う設定を追記
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>jersey-app</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet</artifactId> <version>2.17</version> </dependency> <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-client</artifactId> <version>2.17</version> </dependency> </dependencies> </project>
JAX-RS の実装含まないサーバってことで、以下を参考に。
・Chapter 2. Modules and dependencies
- 2.3.2. Servlet based server-side application
https://jersey.java.net/documentation/latest/modules-and-dependencies.html#servlet-app-general
2. リソースクラスの作成
■ HelloService.java
package com.example; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; @Path("/hello") public class HelloResource { @GET @Produces("text/plain") public String hello() { return "hello resource !!"; } }
"/hello" というパスでアクセスきたら、"hello resource !!" という文字列を返すだけの簡単なリソースクラスです。
以下あたりが参考に。
・Chapter 3. JAX-RS Application, Resources and Sub-Resources
https://jersey.java.net/documentation/latest/jaxrs-resources.html
3. 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" metadata-complete="true"> <servlet> <servlet-name>jersey-app</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>com.example</param-value> </init-param> <init-param> <param-name>jersey.config.server.provider.scanning.recursive</param-name> <param-value>false</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>jersey-app</servlet-name> <url-pattern>/test/*</url-pattern> </servlet-mapping> </web-app>
"/test/*" なパスでアクセスきたら、Jersey のサーブレットが呼ばれるって感じにしています。
以下あたりを参考に。
・Chapter 4. Application Deployment and Runtime Environments
- 4.7. Servlet-based Deployment
https://jersey.java.net/documentation/latest/deployment.html#deployment.servlet
Servlet 3.x をサポートしているコンテナであれば、@ApplicationPath アノテーションを使う方法もあるみたいです。
・Chapter 4. Application Deployment and Runtime Environments
- 4.7.2. Servlet 3.x Container
https://jersey.java.net/documentation/latest/deployment.html#deployment.servlet.3
あとは、Tomcat にデプロイして「http://localhost:8080/test/hello」にアクセスすると、"hello resource !!" と表示されるはずです。
クライアントの API も用意されているので、それ使ってもいいですね。
package com.example.client; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Invocation; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; public class HelloClient { public static void main(String[] args) { Client client = ClientBuilder.newClient(); WebTarget target = client.target("http://localhost:8080/jersey-app/test/hello"); Invocation.Builder builder = target.request(MediaType.TEXT_PLAIN_TYPE); Response response = builder.get(); System.out.println(response.getStatus()); System.out.println(response.readEntity(String.class)); } }
・Chapter 5. Client API
https://jersey.java.net/documentation/latest/client.html
簡単ですが、ひとまず使い方だけということで、以上です。