`
liushilang
  • 浏览: 89353 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

(分享)几种支持REST的Java框架

阅读更多

因为最近项目要考虑使用rest,所以去查了很多资料,下面是查到的一些有关资料,方便一些要考虑使用rest的人进行参考,很多资料可能比较老旧了,或者本身是论坛里面的老内容了,还望见谅下。对于一些rest的框架,欢迎讨论相关的优缺点。谢谢

 

目前宣称支持REST的Java框架包括以下这些: 
Restlet(http://www.restlet.org/) 
Cetia4(https://cetia4.dev.java.net/) 
Apache Axis2(http://http://ws.apache.org/axis2/) 
sqlREST(http://sqlrest.sourceforge.net/) 
REST-art(http://rest-art.sourceforge.net/

Jersey(https://jersey.dev.java.net/

Apache CXF(http://cxf.apache.org/

Sping3(http://www.springsource.org/)

 

以下对这些框架进行了较为全面的分析。

 

Restlet,最新版本2.1 
特点:完全抛弃了Servlet API,作为替代,自己实现了一套API。能够支持复杂的REST架构设计。 
缺点: 
1. 虽然也可以运行于Web容器中,但是难以利用Servlet和JSP等资源。因为需要另外学习一套API和概念,学习成本比较高。 
2. 完全不支持服务器端的HTTP Session,强制完全基于无状态服务器模型来做开发。对于基于浏览器的应用来说,开发难度较高。 
3. 自身没有包括与Spring的集成,可以使用第三方代码与Spring集成,集成难度较大。 
4. 文档不是很丰富,大多比较简短,很多时候需要自己去读代码,或者到其wiki上去查找。 
5. 没有内建的国际化支持。 
优点: 
1. 有内建的HTTP认证机制,不需要另外开发安全机制。 
2. 灵活性较高,支持更多的REST概念,支持透明的内容协商,适合于开发更加强大的REST组件(不限于服务器端应用)。 
3. 零配置文件,全部配置通过代码来完成。

相关资源: 
功能列表:http://www.restlet.org/about/features 
简介:http://www.restlet.org/about/introduction 
教程:http://www.restlet.org/documentation/
FAQ:http://www.restlet.org/about/faq

 

Cetia4,最新版本1.0 
特点:基于Servlet API开发,可以运行于所有的Web容器中。 
优点: 
1. 可以充分利用Servlet API和JSP等资源,需要额外学习的概念较少,学习成本较低。 
2. 对于传统的Web应用,可以使用服务器端HTTP Session;对于Web服务类应用,不使用HTTP Session,基于无状态服务器模型做开发。 
3. 自身包括了对于Web MVC的支持,熟悉Web MVC框架的开发者很容易理解。还内建了参数映射、参数验证等等传统Web MVC框架所支持的功能。 
4. 内建了自己特有的导航对象栈的概念,对于支持传统的Web应用的开发(基于浏览器的导航)非常有帮助。 
5. 提供了JSP标签库,对于传统的基于HTML表单的Web开发非常有帮助。 
6. 支持与SiteMesh相配合,由SiteMesh来支持页面布局的重用。 
7. 内建有与Spring的集成,集成起来非常容易。 
8. 配置文件完全基于标准的web.xml,不需要额外的配置文件。大量使用默认配置,一般情况下足以满足常见的需求。 
9. 拥有很好的文档。 
10. 有内建的国际化支持。 
缺点: 
1. 没有内建的HTTP认证机制,需要自行开发安全机制。 
2. 对于内容协商的支持比较弱,仅支持HTML和XML格式的表现。需要加以扩展才能支持其他格式的表现。

相关资源: 
教程:https://cetia4.dev.java.net/files/documents/5545/38989/cetia4_tutorial.pdf

 

Axis2,最新版本1.5.4
特点:同时支持SOAP和REST风格的Web Service。 
缺点: 
1. 仅仅支持GET与POST方法。 
2. 仅仅是以REST风格暴露出Web服务,数据格式仍然是包含SOAP封装的XML,不能使用更加有效的格式。 
3. 只支持同步的调用方式。 
4. 仅仅提供了以SOAP方式暴露Web服务的最小化的支持,不支持全面的REST架构设计。

相关资源: 
简介:http://ws.apache.org/axis2/1_2/rest-ws.html

 

sqlREST,最新版本0.3.1 
特点: 
1. 为任何可以通过JDBC访问的数据库提供Web服务访问接口,自动将REST风格的HTTP请求转换为相应的数据库SQL语句,并将数据库中的记录编码为XML格式传给客户端。是REST风格的HTTP请求到数据库中的数据的直接映射。 
2. 基于Servlet API开发。 
缺点: 
1. 因为是REST风格的HTTP请求到SQL语句的直接映射,因此强制使用以SQL和关系数据库为中心的数据建模设计方法,不支持面向对象的设计。灵活性很低,难以实现较为复杂的业务逻辑。 
2. 因为资源的定义仅限于数据库的表,难以实现更高层次的抽象,必然会导致非常细粒度的API。应用的性能和可伸缩性都难以保证。

相关资源: 
教程:http://sqlrest.sourceforge.net/5-minutes-guide.htm

 

REST-art,最新版本0.2 
特点:一个旨在替换复杂的SOAP框架的REST框架,用来作为替代SOAP方便地发布Web服务的工具。不是基于Servlet API开发。 
缺点: 
1. 目前尚处于刚刚起步的阶段,功能非常少。 
2. 不是基于Servlet API,带来了额外的学习成本。

 

 

Sun正在致力于的建立RESt风格Web服务的规范, 规范如下   
JSRs: Java Specification Requests
JSR 311: JAX-RS: The JavaTM API for RESTful Web Services

 

Jersey 是JAX-RS的参考实现,现在已经是1.8版,然而并不是最终版本,因为JAX-RS还没有到最终版本。但是现在的Jersey已经足以让Java爱好者一饱coding福了。

首先,Jersey采用了Annotation机制,所有的HTTP相关的参数设置都采用标注实现,因此,在编程的时候,我们好像针对的仍然是POJO,体会不到分布式或J2EE编程的痛苦,只要了解一些关键Annotation的用户即可。

其次,Jersey是一个开发的平台,我们可以扩展自己的需求,比如在消息格式上,虽然Jersey已经提供了Java基本数据类型、JSON、XML等类型,我们还是可以很容易的扩展自己的格式。

第三,Jersey建立的服务可以很简单的部署到JDK6自带的轻量级Server上,过程极其简单。

第四,Jersey建立的服务可以非常容易的部署为Servlet,支持各种J2EE容器。

第五,Jersey可以为我们编写的服务自动生成WADL

第六,支持Spring.

(参见http://jersey.java.net/nonav/documentation/latest/chapter_deps.html

 

 

Apache CXF 则是由 Celtix 和 XFire 项目整合而生,目前最新版本2.4.1,不过仍是 Apache 的一个孵化项目。

CXF 包含了大量的功能特性,但是主要集中在以下几个方面:

  1. 支持 Web Services 标准:CXF 支持多种 Web Services 标准,包含 SOAP、Basic Profile、WS-Addressing、WS-Policy、WS-ReliableMessaging 和 WS-Security。
  2. Frontends:CXF 支持多种“Frontend”编程模型,CXF 实现了 JAX-WS API (遵循 JAX-WS 2.0 TCK 版本),它也包含一个“simple frontend”允许客户端和 EndPoint 的创建,而不需要 Annotation 注解。CXF 既支持 WSDL 优先开发,也支持从 Java 的代码优先开发模式。
  3. 容易使用: CXF 设计得更加直观与容易使用。有大量简单的 API 用来快速地构建代码优先的 Services,各种 Maven 的插件也使集成更加容易,支持 JAX-WS API ,支持 Spring 2.0 更加简化的 XML 配置方式,等等。
  4. 支持二进制和遗留协议:CXF 的设计是一种可插拨的架构,既可以支持 XML ,也可以支持非 XML 的类型绑定,比如:JSON 和 CORBA。


一、与Axis2的不同之处
1、Apache CXF 支持 WS-Addressing、WS-Policy、WS-RM、WS-Security和WS-I BasicProfile 
2、Axis2 支持 WS-Addressing、WS-RM、WS-Security和WS-I BasicProfile,WS-Policy将在新版本里得到支持 
3、Apache CXF 是根据Spring哲学来进行编写的,即可以无缝地与Spring进行整合 
4、Axis2 不是 
5、Axis2 支持更多的 data bindings,包括 XMLBeans、JiBX、JaxMe 和 JaxBRI,以及它原生的 data binding(ADB)。 
6、Apache CXF 目前仅支持 JAXB 和 Aegis,并且默认是 JAXB 2.0,与 XFire 默认是支持 Aegis 不同,XMLBeans、JiBX 和 Castor 将在 CXF 2.1 版本中得到支持,目前版本是 2.0.2 
7、Axis2 支持多种语言,它有 C/C++ 版本。 
8、Apache CXF 提供方便的Spring整合方法,可以通过注解、Spring标签式配置来暴露Web Services和消费Web Services

 

Spring3新增的特性

 

1、迁移到Java5

由于完全基于Java5构建了,应该很多接口增加了泛型的支持,如getBean()后可以不用再转型了,任务执行器继承了Java5的Executor。

 2、新增Spring表达式语言,简称SpEL

 Spring终于支持了在配置文件中使用表达式语言,而不再是简单的属性文件变量,这应该是一个不错的特性。不只是配置文件,注解里也支持EL。

3、支持以Java代码+注解方式来配置元数据

     曾记得在07年的时候,发现Spring推出一个有意思的子项目JavaConfig,它不使用XML,而是采用Java的类和方法,来定义容器和Bean,感觉很新颖。不过当时想来,用代码来配置,虽然能获得强类型检查的好处,防止配置输入错误,但是也失去了最大的好处:直接修改的灵活性。

    隔两年,Spring才在核心包里加入了这个特性,或许就是因为这个缺点。而之所以在3.0里加进来,最大的原因或许是由于SpEL,既然能够在注解里使用EL,那么灵活性就大大提高了,只要合理规划元数据结构,应该可以获得 强类型配置 + 灵活性变更的双重好处。Spring3发布后,JavaConfig + SpEL或许会成为一种较好的元数据定义方式。

4、对象到XML的映射

又是一个从子项目移入核心包的特性,对象XML隐射(OXM),来自WebServices子项目,提供JAXB、XmlBeans以及XStream等方式的实现。

5、全面的REST支持

包括服务端和客户端,提供了RestTemplate支持全功能的REST客户端,基于HttpClient。

6、注解声明式验证框架

支持自动发现HibernateValidator的jar,设置为对JSR303注解验证框架的实现。


 

项目由于本身是Strus2+Sprng2.4+Ibatis2的,用spirng3基本排除了,目前优先考虑使用Jersey 、CXF。

声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
分享到:
评论

相关推荐

    REST开发框架及示例

    在"REST开发框架及示例"这个主题中,我们可以讨论以下几个重要的知识点: 1. RESTful API设计原则: - 资源(Resources):每个URL代表一个资源,如/users/1表示用户ID为1的用户资源。 - 动词(Methods):使用...

    JAVA PLAY框架入门学习手册

    * 请求生命周期:Java PLAY框架的请求生命周期包括请求接收、路由分配、控制器处理、视图渲染等几个阶段。在这个过程中,框架会将请求路由到对应的控制器,并由控制器处理请求并将结果返回给视图。 请求生命周期 ...

    java Rest 接口

    【Java REST 接口详解】 REST(Representational State Transfer,表现层状态转移)是一种软件架构风格,用于构建基于HTTP协议的Web服务。它的核心理念是通过简洁的方式处理网络通信,使得服务更易于理解和使用。...

    rest的所有jar

    REST(Representational State Transfer,表述性状态转移)是一种软件架构风格,主要用于Web服务的设计和开发,以实现简单、高效和可扩展的交互。RESTful接口是基于HTTP协议,利用HTTP方法(GET、POST、PUT、DELETE...

    jersery client调用REST框架web services服务的一个示例

    标题 "jersery client调用REST框架web services服务的一个示例" 描述了一种使用Jersey客户端库来访问RESTful Web服务的技术。REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于...

    WebService调用的几种方式

    5. XFire:XFire(现已被CXF合并)是早期的Java Web服务框架,它提供了一种轻量级、快速的方式来创建和调用Web服务。XFire使用简单的API,可以方便地创建服务端和客户端。尽管XFire已经被CXF取代,但理解它的机制有...

    动态发布rest接口及服务调用

    Jersey是Java JAX-RS(Java API for RESTful Web Services)规范的官方参考实现,它提供了创建、部署和消费REST服务的全面框架。使用Jersey,开发者可以方便地定义REST资源,通过注解来声明HTTP方法、URL映射、请求...

    Java面试框架高频问题2019

    ### Java框架高频问题详解 #### Spring框架基础问题 **问题一:谈谈你对Spring IOC和DI的理解,它们有什么区别?** - **IOC(Inversion of Control,控制反转)**: 是一种设计思想,用来降低代码之间的耦合度。在...

    用于创建 REST风格系统的框架

    ### 用于创建 REST 风格系统的框架 #### 表述性状态转移 (REST) 概念 表述性状态转移(Representational State Transfer,简称 REST)是一种架构风格,旨在简化客户端和服务端之间的交互,尤其适用于分布式环境中...

    java WebService调用的几种方式详细源代码

    本篇文章将详细介绍Java中调用WebService的几种常见方法,并提供相应的源代码示例。 1. **SOAP(Simple Object Access Protocol)调用**: SOAP是WebService的主要通信协议,基于XML格式的数据交换。在Java中,...

    REST相关jar包

    在Java中实现RESTful接口,通常会使用到以下几种关键的jar包: 1. **JAX-RS**:Java API for RESTful Web Services,是Java官方提供的一套用于创建RESTful Web服务的标准API。常见的JAX-RS实现有Apache CXF、Jersey...

    采用(rest ,hession,cxf)几种技术实现webservice

    接下来,CXF是另一个强大的Java Web服务框架,它支持SOAP和REST两种模式。CXF提供了丰富的功能,包括WS-*规范的支持、动态客户端生成、数据绑定以及多种传输协议(如HTTP、HTTPS、JMS等)。使用CXF,开发者可以方便...

    JAVA 框

    描述中提到的博客链接指向iteye上的一个博客,尽管具体内容未给出,但可以推测博主可能分享了关于Java框架使用、源码解析或特定框架优化的技巧。阅读此类博客可以帮助开发者深入了解框架的内部工作原理,从而更好地...

    java开源包6

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包9

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    ssm框架整合及Rest风格接口实现

    SSM框架整合及Rest风格接口实现涉及到的技术领域主要包括Spring、SpringMVC、Mybatis三大流行Java框架的整合以及基于RESTful风格的接口设计与实现。 首先,Spring、SpringMVC、Mybatis是Java后端开发中经常组合使用...

    java开源包4

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包101

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    REST WebService简单应用

    在"REST WebService简单应用"这个主题中,可能涉及的知识点包括如何创建一个简单的RESTful服务,使用JAX-RS(Java API for RESTful Web Services)框架,这是一个Java平台上的REST实现。JAX-RS提供了一种声明式的...

    java开源包5

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

Global site tag (gtag.js) - Google Analytics