`

【转】Java EE 6引入的三大新技术之JAX-RS

阅读更多

文章分类:Java编程

【51CTO精选译文】上周我们介绍了Java EE 6平台的主要目标,本篇介绍这个版本中引入的新技术。这些新技术使这个平台变得更加强大,其中三个重要的新技术包括:51CTO编辑推荐您阅读《Java EE 6平台指南》专题了解更多。

◆RESTful Web Services Java API (JAX-RS)

◆面向Java EE平台的上下文和依赖性注入(CDI)

◆Bean验证

本文将介绍RESTful Web Services Java API (JAX-RS)。

RESTful Web Services Java API (JAX-RS)

RESTful Web Services Java API (JAX-RS),JSR 311让你可以迅速构建遵循REST(Representational State Transfer,表象化状态转变。参考阅读:《什么是REST》)风格软件架构的轻量级Web服务。REST中的一个重要概念是资源的存在性,每个资源都一个全局引用标识符,即URI。特别是数据和函数都被认为是可通过 URI识别和访问的资源。为了操纵这些资源,网络组件,客户端和服务器通过一个标准的接口通信,如HTTP和一个组固定的动词 — GET,PUT,POST和DELETE — 交换这些资源。

RESTful Web服务是按照REST架构风格构建的Web服务,利用RESTful方法使用基于SOAP的技术构建Web服务已经成为一个受欢迎的选择,这都得感谢REST的轻量级特性和直接通过HTTP传输数据的能力。

JAX-RS为在Java中构建RESTful Web服务提供了标准化API,API提供了一组注解,以及相关的类和接口。对POJO应用注解允许你暴露Web资源,这个方法使得在Java中创建RESTful Web服务变得简单。

JAX-RS 1.0技术规范定稿于2008年10月,包括了一个参考实现Jersey,Java EE 6包括了这个技术规范的最新版本JAX-RS 1.1,这个版本与Java EE 6中的新特性保持一致。

下面我们一起来看一个使用JAX-RS构建的RESTful Web服务:

   1. import javax.ws.rs.Path; 
   2.    import javax.ws.rs.Produces; 
   3.    import javax.ws.rs.Get; 
   4.    import javax.ws.rs.Post; 
   5.    import javax.ws.rs.Consumes; 
   6.    import javax.ws.rs.core.Response; 
   7.    import javax.ws.rs.core.MediaType; 
   8.    import javax.ws.rs.core UriInfo; 
   9.    import javax.ws.rs.core.UriBuilder; 
  10.    import java.net.URI; 
  11. 
  12.    @Path ("items") 
  13.    @Produces (MediaType.APPLICATION_XML) 
  14.    Public class ItemsResource { 
  15. 
  16.        @Context UriInfo uriInfo; 
  17. 
  18.        @GET
  19.        Items listItems() { 
  20.            Return Allitems(); 
  21.        } 
  22. 
  23.        @POST
  24.        @Consumes (MediaType.APPLICATION_XML) 
  25.        Public Response create(Item item) throws ItemCreationException { 
  26.            Item newItem = createItem(item); 
  27.            URI newItemURI = uriInfo.getRequestUriBuilder().path(newItem.getId()).build(); 
  28.            return Response.created(newItemURI).build(); 
  29.        } 
  30. 
  31.        ... 
  32.    } 
  33. 

在这个例子中,ItemsResource类是管理一组项目的Web服务,类中导入了JAX-RS 1.1注解,类和接口。

@Path注解指定了资源的相对路径,在这里是“items”,类资源URI是基于应用程序上下文的,因此,如果应用程序上下文在这个例子中是 http://example.com,那么类资源的URI就是http://example.com/items,这意味着如果一个客户端直接请求 URI http://example.com/items,ItemsResource类将会执行。

@GET注解指定了注解的方法,这里是listItems()方法,它处理HTTP GET请求,当某个客户端直接发起对ItemsResource资源的HTTP GET请求时,JAX-RS运行时调用listItems()方法处理这个GET请求。

注意@Produces注解,它指定了返回给客户端的MIME媒体类型,在ItemsResource这个例子中,@Produces注解指定了 MediaType.APPLICATION_XML,MediaType类是一个抽象的MIME媒体类型,MediaType.APPLICATION_XML是XML内容MIME媒体类型的抽象 — application/xml。

注解如@Produces建议JAX-RS自动转换某些内容类型,例如,listItems()方法返回一个Items类型的Java对象,JAX-RS自动将这个Java类型转换成application/xml MIME类型,使用这个MIME类型响应客户端的HTTP请求。注意仅当返回的类型默认是支持的才会自动转换,例如,如果Items是一个JAXB注解 Bean,那么将会自动转换,但如果Items是一个POJO,你需要执行MessageBodyReader处理序列化。

你也可以在一个方法上指定@Produces注解,在上面的例子中,你在方法上指定的MIME类型覆盖了在类的@Produces注解中指定的MIME类型,例如,你可以象下面这样为listItems()方法指定@Produces注解:

   1. @GET
   2.        @Produces (MediaType.TEXT_PLAIN) 
   3.        Items listItems() { 
   4.            Return Allitems(); 
   5.        }

JAX-RS然后会将Items Java类型转换为text/plain MIME类型,返回这种类型的内容给HTTP请求客户端。

@POST注解指定了注解的方法,这里是create()方法,它负责响应HTTP POST请求。在这个例子中,这个方法创建了一个新项目,然后返回一个表示它已创建了一个新项目的响应,当客户端直接向ItemsResource资源发起HTTP POST请求时,JAX-RS运行时调用create()方法处理POST请求。

注意@Consumes注解是在create()方法上指定的,注解指定了方法能够接受的来自客户端的MIME媒体类型。如果你在类上指定 @Consumes,它适用于类中的所有方法,如果你在方法上指定@Consumes,它会覆盖你在类上指定的@Consumes注解包含的MIME类型。在这个例子中,@Consumes注解指定create()方法可接受XML内容,即MIME类型application/xml,这是从MIME类型转换到Java类型。当某个客户端在POST请求中提交XML内容时,JAX-RS调用create()方法自动将传入的XML内容转换成方法需要的 Item Java类型。

JAX-RS也包括大量的进一步简化有关构建行为的实用类和接口,前面看到的MediaType就是这样的类,它抽象了MIME媒体类型。其它的一些类和接口是:

UriInfo:访问URI信息的接口,在这个例子中,@Context注解注入UriInfo接口到ItemsResource类中的uriInfo字段。

UriBuilder:从它们的组件构建URI的类。

Response:代表HTTP响应的类。

Response.ResponseBuilder:根据著名的Builder模式构建Response对象的类。

这些类和接口在下面这些语句中非常有用:

   1. URI newItemURI = uriInfo.getRequestUriBuilder().path(newItem.getId()).build(); 
   2.    return Response.created(newItemURI).build();

第一个语句为新项目构建一个URI,getRequestUriBuilder()方法是创建UriBuilder对象的UriInfo方法,path() 和 build()方法是为新项目一起构造URI的UriBuilder方法。

    * Java EE 6新特性尝鲜:EJB 3.1重要变化..
    * 什么是REST?以及RESTful的实现
    * 使用 JAX-RS 简化 REST 应用开发
    * RESTFul已发布 连接Java和.NET的桥梁
    * Java EE 6总览:平台的主要目标

第二个语句为新项目创建一个返回给客户端的Response对象,created方法是一个创建Response.ResponseBuilder 对象的Response方法,build()方法是一个为新项目创建Response 对象的Response.ResponseBuilder方法,这个对象提交元数据给JAX-RS运行时构造HTTP响应。

这些实用类和接口隐藏了HTTP编程的许多复杂性,使用JAX-RS的另一个原因是它简化了构建RESTful Web服务,JAX-RS可以简化许多类型的Web应用程序,例如,如果你需要构建一个检查HTTP头的应用程序,JAX-RS比采用其它技术就更简单。

JAX-RS还有其它便捷功能,例如,JAX-RS包括大量基于参数的注解,从请求中提取信息,@QueryParam就是这样的注解,通过它你可以从请求URL中的Query组件提取查询参数,其它基于参数的注解还有@MatrixParam,它从URL路径提取信息,@HeaderParam注解从HTTP头提取信息,@CookieParam从Cookies提取信息。
分享到:
评论

相关推荐

    Developing RESTful Services with JAX-RS 2.0, WebSockets, and JSON

    《使用JAX-RS 2.0、WebSockets和JSON开发RESTful服务》是一本针对Java EE 7 API的实用指南,由Bhakti Mehta和Masoud Kalali共同撰写。本书详细介绍了在Java平台上构建RESTful Web服务的完整流程,特别是在HTML5和...

    jaxrs-images:展示如何通过 JAX-RS RESTful 网络服务上传和下载图像的示例应用程序

    "jaxrs-images" 这个标题表明我们关注的是一个使用 JAX-RS 实现的项目,该项目特别关注图像的处理。JAX-RS 是 Java API for RESTful Web Services 的缩写,它是一种标准,用于在 Java 应用程序中创建和消费 RESTful ...

    java-ee-api原版

    Java EE 6中的JAX-RS 1.1引入了资源类和注解,便于创建RESTful API。 9. **WebSocket**:Java EE 6引入了WebSocket API,允许双向通信,为实时应用提供了新的可能性。 10. **Annotations**:Java EE 6广泛使用了...

    RestDev:Little JAX-RS 和 Java EE7 Rest App

    "RestDev: Little JAX-RS 和 Java EE7 Rest App" 是一个专注于使用JAX-RS和Java EE 7技术构建RESTful应用程序的项目。REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,常用于构建...

    JAVA EE 6 jar包集合

    Java EE 6的核心目标是简化开发、提高生产力,并引入了若干新特性以增强可维护性和灵活性。 1. **JavaServer Faces (JSF) 2.0**:作为Java EE 6中的主要用户界面组件模型,JSF 2.0 提供了改进的渲染树,支持 ...

    Java EE 6 中文 API 文档

    在Java EE 6中,JAX-RS 1.1引入了资源类和注解,如`@Path`,`@GET`,`@POST`等,使得构建RESTful服务变得简单直观。 7. **WebSocket API**:虽然不是Java EE 6的核心部分,但Java EE 7引入了WebSocket API,Java EE...

    Java EE 6 DOC API (html版,英文完整)

    6. **JAX-RS 1.1 (Java API for RESTful Web Services)**:JAX-RS是用于创建RESTful服务的标准API,Java EE 6中的1.1版本提供了资源类、超媒体链接、XML和JSON处理等特性。 7. **WS-JSR 311 (Java API for RESTful ...

    Java EE 7 with GlassFish 4 Application Server 2014年英文原版

    除了重温Java服务器面(JSF),它解释了为什么Facelets的,在JSF的现代版本引入的新功能,是首选的视图技术对Java服务器页面(JSP) 在后面的章节中探讨的竞争在Java WebSocket的标准实现,描述了JMS的更新;其目的...

    java ee软件工程师技术要点列表

    - WebSocket是Java EE 7引入的新特性,提供双向通信通道,实现客户端与服务器的实时交互。 13. **JASPIC(Java Authentication and Authorization Service for Containers)**: - JASPIC定义了容器级别的安全...

    J2EE 6 SDK API文档/java-ee-5 api

    6. **JAX-RS(Java API for RESTful Web Services)**:JAX-RS 1.1是Java EE 6中的标准RESTful服务API,它使开发人员能够轻松创建基于HTTP协议的RESTful服务,提供了诸如资源定位符、媒体类型和HTTP方法等概念的直接...

    javaEE6jar包

    Java EE 6,全称Java Platform, Enterprise Edition 6,是Java平台上用于构建企业级Web应用程序的一个框架。这个版本发布于2009年,它引入了许多新特性以提升开发效率、可维护性和灵活性。Java EE 6的核心目标是简化...

    Java EE7权威指南

    卷二可能深入讨论了Java EE7的高级特性,例如CDI(Contexts and Dependency Injection)1.1、JPA(Java Persistence API)2.1、JMS(Java Message Service)2.0、Batch Applications for the Java Platform以及Java ...

    java ee 7 api

    6. **JAX-RS 2.0**:Java API for RESTful Web Services(JAX-RS)用于创建RESTful服务。JAX-RS 2.0引入了链接处理、超媒体驱动的API(HATEOAS)以及异步服务器端调用。 7. **WebSocket API**:Java EE 7引入了...

    Java EE 6权威指南 第4版 基础篇.((美)Eric Jendrock)

    2. **Web应用开发**:通过JSF、Servlets和JAX-RS等技术,Java EE 6非常适合开发复杂的Web应用。 3. **服务端组件开发**:EJB 3.1使得开发服务端组件变得更加简单高效。 4. **微服务架构**:虽然Java EE 6不是专门为...

    Java-EE-6.0

    Java EE 6是该平台的一个重要版本,于2009年发布,引入了多项新特性和改进,旨在简化开发过程,提高可扩展性,并支持云计算环境。以下是对Java EE 6核心知识点的详细解析: 1. **模块化和规范**:Java EE 6将应用...

    j2ee java ee 6 documentation api docs

    Java EE 6的主要目标是简化开发过程,提高可维护性和灵活性,同时也引入了一些新的特性和改进。以下是一些关键的知识点: 1. **EJB 3.1 (Enterprise JavaBeans)**:在这一版本中,EJB变得更加轻量级,引入了无状态...

    Java EE 5 规范

    Java EE 5 规范通过一系列新技术和改进措施极大地提升了企业级应用的开发效率和维护成本。它不仅为开发者提供了更强大的工具集,同时也为企业应用提供了一个更加健壮和灵活的基础架构。随着技术的发展,Java EE 5 ...

    java_ee_sdk_6_docs

    7. **Java API for RESTful Web Services (JAX-RS) 1.1**:JAX-RS是用于构建RESTful服务的API,Java EE 6引入了它,使开发人员能够轻松地创建资源导向的Web服务。 8. **Contexts and Dependency Injection (CDI) ...

    Java EE 6 tutorial 配套example代码

    6. **CDI(Contexts and Dependency Injection)**:CDI 1.0是Java EE 6引入的新特性,提供依赖注入和上下文管理,简化了组件的组装。示例代码可能涵盖了声明和注入bean,以及使用拦截器和事件处理。 7. **JAX-RS...

    Beginning_Java_EE_6_Platform_with_GlassFish

    《初识Java EE 6平台与GlassFish》是一本针对Java企业级应用开发的入门教程,旨在帮助读者理解和掌握Java EE 6平台的核心概念和技术,同时结合GlassFish服务器的使用,提供实际操作的经验。这本书是Java J2EE(Java ...

Global site tag (gtag.js) - Google Analytics