RoyKings 2012-04-12
JAX-RS 简介:
JAX-RS是一个基于annotation的API,用来实现RESTful web services,使用Java,基于HTTP。本质上,类和函数通过annotation信息作为一个资源暴露给运行时——而这种方式通过servlet编程模式很难实现。一个运行时能够处理HTTP协议和Java类之间的JAX-RS信息,使用URIs,请求和接受内容类型,和HTTP函数。Sun附加提供的参考实现:Jersey,其他实现也可以使用了(不同的平台有不同竞争者):比如 Restlet 框架,JBoss RESTeasy project,和 Apache CXF web services 解决方案。
JAX-RS 注解:
@Path
用来映射 URI,为资源类以及资源类中包含的方法提供访问路径。
@GET
表示处理 HTTP GET 请求的资源类方法。当 Web Service 获得客户端发出的对与某个网络资源 的 HTTP GET 操作时,服务器会调用被 @GET 注解后的方法来处理 GET 请求。当然,被调用的资源类方 法首先得满足 URI。
@POST
表示处理 HTTP POST 请求的资源类方法。和 @GET 相类似,只不过对应的是 HTTP POST 操作 。
@PUT
表示处理 HTTP PUT 请求的资源类方法。该 Annotation 通常用于更新网络对象的方法。和 @GET,@POST 处理流程相类似。
@DELETE
表示处理 HTTP DELETE 请求的资源类方法。使用该 Annotation 后的方法通常是删去每个 网络对象的实例。处理流程和 @GET,@POST,@PUT 相类似。
@HEAD
表示处理 HTTP HEAD 请求的资源类方法。通常情况下,根据 JAX-RS 规范的设定,在没有实 现 @HEAD 的资源类方法时,RESTlet JAX-RS extension 会自动处理 HTTP HEAD 请求,@GET 注解的资源 类方法会自动被调用。和处理普通的 HTTP GET 请求的区别是没有实例被返回。@HEAD 注解的资源类方法 通常用来获取 Web Services 能够接受的数据格式。
@Produces
用来表示资源类方法能够返回的 MIME 的媒体类型。
@Consumes
用来表示资源类方法能够处理的 MIME 的媒体类型。
REST 开源框架:
1:Jersey: 是sun公司对JAX-RS(JSR311)的一个参考实现,不过现在在逐渐的摆脱参考实现的阴影,逐渐渗透到企业应用,和sun的glassfish和netbeans结合使用可以很方便的构建restful web service。
2:Restlet: 出现的较早,在JAX-RS之前就有了,支持的框架较多,但是使用起来不够简单。
3:CXF: 是Celtix 和 XFire合并后的项目,支持SOAP,WSDL,JSR-WS,REST,配置较为复杂,侵入性太强,单纯构建restful web service显得较重。
4:Resteasy: 是jboss下面一个对JAX-RS(JSR311)的一个实现,使用起来简单方便,支持spring,oauth等。
5:SerfJ:SerfJ 是一个最简单的框架用来开发Java的REST的Web应用。可帮助你开发优雅的MVC架构的应用,使用惯例重于配置的思路,无需配置文件和注解。
6:Cetia4:Cetia4是一个对REST提供完善支持的Web开发框架。
Cetia4特点:
基于Servlet API开发,可以运行于所有的Web容器中。
Cetia4优点:
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. 有内建的国际化支持。
Cetia4缺点: 1. 没有内建的HTTP认证机制,需要自行开发安全机制。
2. 对于内容协商的支持比较弱,仅支持HTML和XML格式的表现。需要加以扩展才能支持其
他格式的表现。