Restful是一种架构style,目前常说的有restful web service, resultful http。现在热搜榜的微服务,大多数会采用Restful方式。

JAX-RS 作为一个Restful 风格WebService规范,目前已发展到了2.0版本,目前比较常用的两个版本是JAX-RS1.1(jsr-311)、 JAX-RS2.0(jsr-339) 。

规范地址:https://jax-rs-spec.java.net/ 。现在已有很多实现:

Jersey:是jax-rs的标准实现,对规范的支持自然是最快的(JAX-RS1.1、 JAX-RS2.0)。它支持多种Servlet容器、并可以与Grizzly、Netty等结合使用,性能也是很不错的。网上有人说它是一个参考实现,但它真的不仅仅是一个参考实现而已,Kafka Connect采用了它。 支持与Spring 集成。

https://jersey.java.net/

CXF:apache下的一个开源的services框架,支持多种协议( SOAP, XML/HTTP, RESTful HTTP, or CORBA),同时也支持多种传输协议:(HTTP, JMS or JBI)。

支持的Java规范(jsr)有:JAX-WS、JAX-RS、SAAJ 。 对于JAX-RS,支持目前JAX-RS1.1、 JAX-RS2.0。 支持与Spring集成。

http://cxf.apache.org/docs/restful-services.html

http://cxf.apache.org/docs/overview.html

RestEasy:它是JBoss社区的一个开源项目,已支持2.0规范。据说是性能最好的,我没有测试过。

http://docs.jboss.org/resteasy/docs/3.1.1.Final/userguide/html/index.html

Restlet:支持JAX-RS,支持与Spring集成。

https://restlet.com/open-source/features

这里有一篇网友的性能测试博客:http://www.tuicool.com/articles/UziAZ3u

这里是一篇网友的8个restful框架对比的博客:http://developer.51cto.com/art/201511/497863.htm

题外话说了这么多,言归正传,既然他们都实现了jax-rs规范,那么我们只需要学习了标准规范,并使用规范中的API来编程,那么我们的程序就可以与这些实现结合使用。

为了快速学习规范:我们可以参考: 1)标准规范 2)入门教程:Java Restful WebService 实战  3) API  Docs

下面提供前两者的下载链接:

链接:http://pan.baidu.com/s/1kVkb7CF 密码:vrln

Jersey2.x用户指南:https://github.com/waylau/Jersey-2.x-User-Guide

下面总结了如何学习JAX-RS,进行Restful WebService编程:

第一步: 了解规范中各个组件、API处理流程

JAX-RS中组件:

1)Resource :代表资源,用于在接收到资源请求后,调用相应的方法处理。

资源分类:Resource、SubResouce。如何编写一个Resource Class、Resource Method?如何定位一个Resource?Resource的生命周期如何?等等问题都将在jsr手册里提到。

2)AOP:包括Filter、Interceptor。用于在Client、Container中读写请求之前做一些处理。

3)Provider:Provider提供某种东西的。有下列Provider:

MessageBodyReader:从InputStream中读取数据转换成Java对象。也就是常说的反序列化。

MessageBodyWriter:把Java对象写到OutputStream中,也就是常说的序列化。

ExceptionMapper:把指定的Exception映射到一个Response对象。

ContextResolver:用于解析Resource中需要用的上下文。参见:@Context

这些接口的实现,注册到JAX-RS容器里,通常有两种方法:1)使用@Provider让容器自动扫描,2)通过编程的方式注册。

4)Client:发起请求,处理响应。

每一种JAX-RS实现都要遵循的处理流程:

第二步:结合DI容器,并采用分层思想(Resource、Service、DAO)进行业务系统编写。

目前流行的DI容器有:Spring、Guice、HK2等等。

第三步:和其他容器结合,部署项目。

譬如说Servlet容器、Grizzly等。

Java Restful Web Service 学习指南的更多相关文章

  1. <<Java RESTful Web Service实战>> 读书笔记

    <<Java RESTful Web Service实战>> 读书笔记 第一章   JAX-RS2.0入门 REST (Representational State ransf ...

  2. Java RESTful Web Service相关概念

    原文地址:http://1.liangtao.sinaapp.com/?p=647 接上一篇文章REST|RESTful初步认识:p=639">http://1.liangtao.si ...

  3. Java restful web service 开发入门

    可用的框架有不少,我用的是jersey. 直接上代码,其实,如果你会web service 这个restful的就很好理解了,自己跑一遍就OK了 用到的类 User.java package demo ...

  4. day01(RESTful Web Service、SVN)

    今日大纲 搭建SSM环境 基于SSM环境实现用户管理系统 学习RESTful Web Service 学习SVN 统一开发环境 JDK1.7 32? 64? -- 64 Eclipse 使用4.4.1 ...

  5. 【转】基于CXF Java 搭建Web Service (Restful Web Service与基于SOAP的Web Service混合方案)

    转载:http://www.cnblogs.com/windwithlife/archive/2013/03/03/2942157.html 一,选择一个合适的,Web开发环境: 我选择的是Eclip ...

  6. 使用Java创建RESTful Web Service

    REST是REpresentational State Transfer的缩写(一般中文翻译为表述性状态转移).2000年Roy Fielding博士在他的博士论文“Architectural Sty ...

  7. (转)接口自动化测试 – Java+TestNG 测试 Restful Web Service

    本文主要介绍如何用Java针对Restful web service 做接口自动化测试(数据驱动),相比UI自动化,接口自动化稳定性可靠性高,实施难易程度低,做自动化性价比高.所用到的工具或类库有 T ...

  8. 使用Java创建RESTful Web Service(转)

    REST是REpresentational State Transfer的缩写(一般中文翻译为表述性状态转移).2000年Roy Fielding博士在他的博士论文“Architectural Sty ...

  9. 译:3.消费一个RESTful Web Service

    这节课我们根据官网教程学习如何去消费(调用)一个 RESTful Web Service . 原文链接 https://spring.io/guides/gs/consuming-rest/ 本指南将 ...

随机推荐

  1. gcc调试 学习1

    gdb进入调试 b 6 在第6行设置断点 d 2 删除num为2的断点 info b 查看断点 run 运行 n 执行到断点1 s 如果下一条是函数就进入函数 n 继续执行 print i  输出i的 ...

  2. python基础阶段 经典练习题 拾英札记(2)

    因为编程的练习题是交互式的,在不断调试和不断渐进完善中,你会有一种成就感和快乐感,不断的修缮,不断的尝试. 其实,认知自己,和探索世界,也是这样的啊. 只要不放弃,要坚持. #7  根据列表lt,实现 ...

  3. [转载] Rss 与 Feed 的概念区别

    转载自http://www.chinaz.com/news/2011/0831/207961.shtml 可能很多刚刚接触博客的童鞋们,也和我一样不太了解:rss和feed概念或者说不了解rss和fe ...

  4. [转]oracle系统表v$session、v$sql字段说明

    在本视图中,每一个连接到数据库实例中的 session都拥有一条记录.包括用户 session及后台进程如 DBWR, LGWR, arcchiver等等. V$SESSION中的常用列 V$SESS ...

  5. C语言系列之强制类型转换(一)

    例子: #include <stdio.h> { char cChar;   //字符型变量 short int iShort; //短整型变量 int ilnt;           / ...

  6. Mysql的学习笔记(一)--检验数据库是否安装成功以及一些入门的简单的dos命令

    一:如何检验数据库是否安装成功: 1:以管理员的身份打开命令提示符,具体如何用管理员的身份打开请参考下面 https://jingyan.baidu.com/article/e73e26c0f87c2 ...

  7. 最全Jenkins+SVN+iOS+cocoapods环境搭建及其错误汇总

    前言 持续集成是敏捷开发中重要的一部分,为保证新功能的开发,又保证旧功能的维护,从一个冲刺到下个冲刺.持续集成工具是我们保证开发和维护并行的护航者,现在流行的集成工具有很多,例如: 1.Jenkins ...

  8. lua lua解读

    1.线程状态宏定义(thread status) #define LUA_OK 0 #define LUA_YIELD 1 #define LUA_ERRRUN 2 #define LUA_ERRSY ...

  9. 《java.util.concurrent 包源码阅读》26 Fork/Join框架之Join

    接下来看看调用ForkJoinTask的join方法都发生了什么: public final V join() { // doJoin方法返回该任务的状态,状态值有三种: // NORMAL, CAN ...

  10. JAVAFX-3 开发应用

    理解布局 布局容器(Layoutcontainer)或面板(Pane)允许对JavaFX应用程序场景图中的UI控件进行灵活.动态的排布.JavaFX Layout API包括下列容器类: ● Bord ...