前言

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

如果你想要为用户向导做一些贡献或者发现有些问题没有在文档里面找到,请给我们发邮件: users@jersey.java.net 当然如果你在文档中发现一些错误,你也可以在 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

JERSEY中文翻译(第一章、Getting Started、2.2)的更多相关文章

  1. JERSEY中文翻译(第一章、Getting Started、1.1.7)

    最近发现jersey特别流行,但是中文资料非常少,深感没有资料的痛苦,所以分享一下看到的内容供他人快速入门. 今天翻译第一章.Getting Started.https://jersey.java.n ...

  2. Learning Scrapy 中文版翻译 第一章

    第一章:scrapy介绍 欢迎来到scrapy之旅.通过这本书,我们将帮助你从只会一点或者零基础的Scrapy初学者达到熟练使用这个强大的框架在互联网或者其他资源抓取海量的数据.在这一章节,我们将给你 ...

  3. Gradle2.0用户指南翻译——第一章. 介绍

    翻译项目请关注Github上的地址:https://github.com/msdx/gradledoc本文翻译所在分支:https://github.com/msdx/gradledoc/tree/2 ...

  4. ActiveMQ 翻译第一章 1.2小节(松耦合与ActiveMQ和何时使用ActiveMQ)

    第一章 1.2.1小节  松耦合与ActiveMQ ActiveMQ为应用程序架构提供送耦合实现组件.松耦合经常被引入到系统架构中,来减轻紧耦合的远程工程调用的使用.松耦合的设计是异步的,来自其他系统 ...

  5. JERSEY中文翻译(第三章、JAX-RS Application, Resources and Sub-Resources)

    JAX-RS Application Resource and Sub-Resource 本章要介绍的是JAX-RS的核心概念——Resouce.Sub-Resource JAX-RS的2.0的jav ...

  6. JERSEY中文翻译(第三章、模块和依赖)

    Chapter 2 Modules and Dependencencies 2.1 Java SE 兼容 所有的Jersey组建都是基于Java6开发的,所以你的Java必须是Java6以上的版本才能 ...

  7. Java 7 Concurrency Cookbook 翻译 第一章 线程管理之一

    一.简介 在计算机的世界里,当我们谈论并发时,我们指的是一系列的任务同时运行于一个计算机中.这里说的同时运行,在计算机拥有多于一个处理器或者是一个多核处理器的时候才是真正的同时,在计算机只拥有单核处理 ...

  8. Java 7 Concurrency Cookbook 翻译 第一章 线程管理之六

    十一.处理线程组中的未控制异常 每种编程语言一个很重要的特性就是其所提供的用来处理程序中错误情况的机制.Java语言和其他的现代语言一样,是提供了异常机制来处理对象程序中的错误.Java提供了很多的类 ...

  9. Java 7 Concurrency Cookbook 翻译 第一章 线程管理之五

    九.使用线程本地变量 一个并发程序的最关键特征就是共享数据.这个特性在那些继承了 Thread 类或者 实现了 Runnable 接口的对象上显得更加重要. 如果你创建一个实现了 Runnable 接 ...

随机推荐

  1. C#学习笔记:预处理指令

    C#和C/C++一样,也支持预处理指令,下面我们来看看C#中的预处理指令. #region 代码折叠功能,配合#endregion使用,如下: 点击后如下: 条件预处理 条件预处理可以根据给出的条件决 ...

  2. 老美的zxing和日本的qrcode哪个好?

    ZXing用Java实现的多种格式的1D/2D条码图像处理库,Zxing库的主要部分支持以下几个功能:核心代码的使用.适用于J2SE客户端的版本.适用于Android客户端的版本(即BarcodeSc ...

  3. SqlServer 还原数据库 代码实现

    RESTORE DATABASE TargetDB FROM DISK = 'D:\DataBase\DB.bak' with replace, MOVE 'DB' TO 'D:\DataBase\T ...

  4. 让Java和JavaScript进行交互

    本篇博文参考自:http://droidyue.com/blog/2014/09/20/interaction-between-java-and-javascript-in-android/ 我们在使 ...

  5. ImageView和onTouchListener实现,点击查看图片细节

    这是来自疯狂android讲义上的例子,其实没啥意思.就是用监听器获取到手指的坐标,然后根据这个坐标开始绘制一个图片.(这里的绘制方式有些问题,所以凑合看看吧.) 首先,还是布局文件(两个ImageV ...

  6. Linux 动态链接库(.so)的使用

    1. 背景 库:就是已经编写好的,后续可以直接使用的代码. c++静态库:会合入到最终生成的程序,使得结果文件比较大.优点是不再有任何依赖. c++动态库:动态库,一个文件可以多个代码同时使用内存中只 ...

  7. 面试题-Redis、MongoDB、Memcached[转]

    https://blog.csdn.net/gangsijay888/article/details/81213811 一.缓存 搞懂缓存那些事:https://blog.csdn.net/a7248 ...

  8. C# xml 常规 保护 方法总结

    一 使用xsd模式文件验证xml文件: xml文件: <?xml version="1.0" encoding="utf-8" ?> <Boo ...

  9. ASP.NET网页中RAR、DOC、PDF等文件下载功能实例源代码

    以前做asp.net下载功能的时候都是采用:<a href="http://www.wang0214.com/wgcms">下载</a>的方式来实现下载. ...

  10. maskrcnn_benchmark代码分析(1)

    可以先参考:Faster-RCNN代码+理论——1/2 Object Detection and Classification using R-CNNs 使用ipdb调试 try: import ip ...