感冒几天,病情终于有所好转;继续使用NetBean6.8+GlassFish体验JEE6。Java EE 6 中所引入的 JSR-311是Rest full webService 。REST 是英文 Representational State Transfer 的缩写,有中文翻译为“具象状态传输”。REST 这个术语是由 Roy Fielding 在他的博士论文 《 Architectural Styles and the Design of Network-based Software Architectures 》中提出的。REST 并非标准,而是一种开发 Web 应用的架构风格,可以将其理解为一种设计模式。REST 基于 HTTP,URI,以及 XML 这些现有的广泛流行的协议和标准,伴随着 REST,HTTP 协议得到了更加正确的使用。
相较于基于 SOAP 和 WSDL 的 Web 服务,REST 模式提供了更为简洁的实现方案。目前,越来越多的 Web 服务开始采用 REST 风格设计和实现,真实世界中比较著名的 REST 服务包括:Google AJAX 搜索 API、Amazon Simple Storage Service (Amazon S3) 等。
基于 REST 的 Web 服务遵循一些基本的设计原则:
系统中的每一个对象或是资源都可以通过一个唯一的 URI 来进行寻址,URI 的结构应该简单、可预测且易于理解,比如定义目录结构式的 URI。
以遵循 RFC-2616 所定义的协议的方式显式地使用 HTTP 方法,建立创建、检索、更新和删除(CRUD:Create, Retrieve, Update and Delete)操作与 HTTP 方法之间的一对一映射:
若要在服务器上创建资源,应该使用 POST 方法;
若要检索某个资源,应该使用 GET 方法;
若要更改资源状态或对其进行更新,应该使用 PUT 方法;
若要删除某个资源,应该使用 DELETE 方法。
URI 所访问的每个资源都可以使用不同的形式加以表示(比如 XML 或者 JSON),具体的表现形式取决于访问资源的客户端,客户端与服务提供者使用一种内容协商的机制(请求头与 MIME 类型)来选择合适的数据格式,最小化彼此之间的数据耦合。
JSR311定义的标注主要有: @GET、@POST、@PUT、@DELETE、@HttpMethod、@Path、@Consumes、@Produces等。
一、新建项目工程
启动netbeans6.8,按快捷键Ctrl+Shift+N 打开新建项目窗口如下图:
选择“Java Web” —>“WEB 应用程序”点击“下一步”打开输入项目名称对话框,在项目名称中输入“testrest”点击“下一步”则弹出如下图对话框:
在服务器选择框中选择“GlassFish V3域”,JavaEE版本中选择“Java EE6 Web”;上下文路径中输入“/testrest”点击完成。
二、新建包
选择testrest项目的“源包”单击右键分别新建二个package:com.rest与com.test。
三、新建基于模式的REST风格WEB服务
选中com.rest包单击右键选择“新建”—>“其他”如下图:
则弹出如下图对话框:
类型选择“WEB 服务”—>“基于模式的REST风格的WEB服务”点击“下一步”则弹出如下对话框:
选择“简单根资源“点击下一步,弹出如下对话框:
路径输入“rest“类名输入 “TestRest”、MIME类型输入“Application/xml“表示类输入 “java.lang.String”点击完成。
在“REST 资源配置“对话框中的REST资源路径中输入 “/resources”点击“确定“。
除去注释写入如下代码:
package com.rest;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.Path;
import javax.ws.rs.GET;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
@Path("/rest")
public class TestRest {
@Context
private UriInfo context;
@GET
@Produces("application/xml")
public String getHelloText() {
String text ="<?xml version=\"1.0\" encoding=\"UTF-8\"?><com>HelloWorld! </com>";
return text;
}
@Path("/{id:\\d+}/")
@GET
@Produces("application/xml")
public String getHelloById(@PathParam("id") int id) {
String text ="<?xml version=\"1.0\" encoding=\"UTF-8\"?><com>The id is:"+id+"</com>";
return text;
}
@Path("/{code}/")
@GET
@Produces("application/xml")
public String getHelloByCode(@PathParam("code") String code) {
String text ="<?xml version=\"1.0\" encoding=\"UTF-8\"?><com>The id code:"+code+"</com>";
return text;
}
}
四、部署并测试
@Path("rest")是指定了资源的对应路径是/rest,之前在资源路径中输入了/resources所以完成路径就是Http://localhost:8080/testrest/resources/rest。
getHelloText方法是默认的资源路径:Http://localhost:8080/testrest/resources/rest.如果在浏览器输入这个地址则返回包含HelloWorld!的XML代码。
getHelloById方法则是包含参数ID的资源路径如:Http://localhost:8080/testrest/resources/rest/1。
getHelloByCode方法则是包含参数CODE的资源路径如:Http://localhost:8080/testrest/resources/rest/whiteangell。
部属testrest应用,启动GlassFish服务器输入资源地址看看效果吧!JEE 6真是轻量级,比之前我们用struts进写ajax请求简单多了!快来试试吧!
下一节我们继续体验Jee 6 深入研究REST WEBSERVICE。