前言

这是jersey2.2的用户向导,我们会尽力维护它的更新并且也会增加新的章节。当阅读本用户指南的时候,也要参阅Jersey API 文档,额外的信息补充JERSEY的新特性和API

如果你想要为用户向导做一些贡献或者发现有些问题没有在文档里面找到,请给我们发邮件: [email protected] 当然如果你在文档中发现一些错误,你也可以在 Jersey JIRA Issue Tracker 的文档组建下面创建一个问题。

第一章 Getting Start

本章主要是讲解如何快速的使用Jersey搭建一个RESTful服务器。这个例子使用轻量级的服务器Grizzly实现的。在本章的最后你会看见使用任何的servlet容器创建一个JavaEE Web应用。

1.1 通过Maven Archetype创建一个新的工程

创建Jersey工程需要使用Apache的Maven软件工程和管理工具。所有的Jersey产品模块都可以在Maven工程中心找到。因此基于moven的模块都是现成的,不需要在maven中增加其他的jersey模块。

注意:如果你想要使用最新的jersey版本,需要在pom.xml中添加如下内容:

<repository>
<id>snapshot-repository.java.net</id>
<name>Java.net Snapshot Repository for Maven</name>
<url>https://maven.java.net/content/repositories/snapshots/</url>
<layout>default</layout>
</repository>

使用maven的工程创建一个jersey项目是最方便的,让我们用这种方法来看一下它是怎么实现的。让我们在Grizzly容器的顶层创建一个新的Jersey项目,我们使用Jersey-provided 的 maven archetype。创建一个项目,需要执行下面的代码:

mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-grizzly2 -DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false -DgroupId=com.example -DartifactId=simple-service -Dpackage=com.example -DarchetypeVersion=2.2

在你的项目里面随意调整pom.xml内的groupId,包号和版本号就可以成为一个新的项目。

1.2 探索创建一个新的项目

如果已经生成了这个项目,那么在你当前的路径下已经创建了一个新的简单的服务器项目。它包含了一个标准的maven项目结构:

标准的管理配置文件 pom.xml

原文件路径 src/main/java/

测试文件路径 src/test/java/

在com.example包中有两个class文件,这个Main类主要是负责承接Grizzly容器,同时也为这个容器配置和部署JAX-RS应用。在同一个包内的另外一个类MyResource类是JAX-RS的一个实现的源代码,如下:

package com.example;
 
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
 
/**
 * Root resource (exposed at "myresource" path)
 */
@Path("myresource")
public class MyResource {
 
    /**
     * Method handling HTTP GET requests. The returned object will be sent
     * to the client as "text/plain" media type.
     *
     * @return String that will be returned as a text/plain response.
     */
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getIt() {
        return "Got it!";
    }
}

一个JAX-RS是一个可以处理URI的HTTP请求的带有注解的POJO,详细内容可以看第三章。我们这个例子是处理http的GET请求,路径是/myresource,返回的类型是text/plain的例子。在这个版本中,将会给客户端请求返回:"Got it!"

1.3 执行这个例子

现在我们已经有了一个例子,那么首先我们需要执行:

mvn clean test

首先它会测试一下,如果成功会输出如下结果:

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 34.527s
[INFO] Finished at: Sun May 26 19:26:24 CEST 2013
[INFO] Final Memory: 17M/490M
[INFO] ------------------------------------------------------------------------

这说明测试已经通过了,然后执行

mvn exec:java

这样它会开始启动,然后在你的控制台会看见一下内容:

May 26, 2013 8:08:45 PM org.glassfish.grizzly.http.server.NetworkListener start
INFO: Started listener bound to [localhost:8080]
May 26, 2013 8:08:45 PM org.glassfish.grizzly.http.server.HttpServer start
INFO: [HttpServer] Started.
Jersey app started with WADL available at http://localhost:8080/myapp/application.wadl
Hit enter to stop it...

这些信息时说你的应用已经启动了,他的WADL描述符的网址是:http://localhost:8080/myapp/application.wadl。你可以在控制台执行curl http://localhost:8080/myapp/application.wadl或者在浏览器输入http://localhost:8080/myapp/application.wadl查看WADL的内容。想要查看WADL的内容请查看第15章的内容。

查看执行的结果:curl -i http://localhost:8080/myapp/myresource

HTTP/1.1 200 OK
Content-Type: text/plain
Date: Sun, 26 May 2013 18:27:19 GMT
Content-Length: 7 Got it!

在这里我们看见了Jersey的JAX-RS整个返回内容,包括返回的头和类型。

如果想要查看更加详尽的内容,包括客户端和服务器端的交互,可以执行 curl -v http://localhost:8080/myapp/myresource

* About to connect() to localhost port 8080 (#0)
* Trying 127.0.0.1...
* connected
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /myapp/myresource HTTP/1.1
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8x zlib/1.2.5
> Host: localhost:8080
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: text/plain
< Date: Mon, 19 Aug 2013 05:41:42 GMT
< Content-Length: 7
<
* Connection #0 to host localhost left intact
Got it!* Closing connection #0

1.4 创建一个JAVAEE WEB应用

创建一个Web应用的话需要达一个WAR包。下面是一个测试的例子

mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-webapp \
-DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false \
-DgroupId=com.example -DartifactId=simple-service-webapp -Dpackage=com.example \
-DarchetypeVersion=2.2

然后执行 mvn clean package就可以打WAR包,目录在:simple-service-webapp/target/simple-service-webapp.war

04-26 13:22