完成《Integrating RESTFul Web Services》。
实验导读:
在WebService的世界中,REpresentational State Transfer (REST) 正越来越受重视。
REST把所有URLs都看做资源(Resouces),资源无外乎增删改查这四种操作。
而HTTP方法:PUT、GET、POST、Delete恰好对应Create、Read、Update、Delete (CRUD)操作。
因此就用HTTP的这些方法就可以对资源进行所有的操作。
网络上的所有资源都可以用统一的方法来访问和操作,这个想法如果能够实现该是多么美好!
REST并不是一个标准,而是一种被推荐的Web应用架构。
REST只是利用Web应用中现有的标准,构成自己的架构体系。
这些标准其实大家都耳熟能详:HTTP、URL、URI、XML、HTML、image、video、Resource Types和MIME Types。
REST风格的架构包括Client和Server两部分,特别是无状态的Client和Server。
并不是一个标准,而是一种被推荐的Web应用架构。
Client发送请求到Server,Server处理请求并返回响应到Client。
从本质上讲,请求和响应不过是同一资源的不同表现形式。
资源可以是任何有意义的东东。
所谓表现形式是资源在某种状态下的呈现内容,比如一个XML文档。
无论在何时,Client要么处在请求资源的状态之中,要么就在“休息”之中。
这和我们访问页面的行为是一致的,要么我们发起一个请求等待响应,要么我们什么也不做。
在REST看来,Client发送请求时,资源是从一个状态转换成到另一个状态。
REST最初是基于HTTP,但实际上并不局限于该协议。
正如前面介绍的,REST是一种架构,可以用于其它应用层协议。
只要这些应用层协议提供了丰富的状态转换字典,比如HTTP协议就提供了内置的4个方法。
REST风格的应用最大限度地利用了协议自身已有的接口定义和内置操作,无需其它的规范和标准。
【JAX-RS】:Java API for RESTful Web Services。用来创建Restful WebService的Java API。
实验内容:
本实验分为两部分:(1)从POJO创建Restful WebService (2)用ADF调用Restful WebService
从前面的WebService实验,我们已经知道了POJO+元注释=WebService,把POJO变成Restful WebService也不例外。
只不过Restful中增加了一些特别的元注释而已。
重要步骤说明:
1. 创建Custom应用和项目。
教程本身提供了一个Project,为了彻底弄清创建Restful WebService的流程,我从头新建了应用。
2. 创建Emp.java和Service.java类,把内容复制过来。
Service.java会提示有错,选择“Create Project for JAX-RS Web Service”。
package restful; import java.util.*; import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; @Path("/restlab") public class Service { // Singleton Collection static ArrayListloe = new ArrayList (); public Service() { super(); } //Create public void addEmp(@QueryParam("id") int id, @QueryParam("exp") int exp, @QueryParam("name") String name, @QueryParam("sal") int sal) { Emp e = newEmp(exp, name, sal, id); loe.add(e); } //Read @GET @Produces("application/xml") public ArrayList getEmps() { return loe; } //Update public void upadteEmp(int delId, int id, int exp, String name, int sal) { deleteEmp(delId); addEmp(id, exp, name, sal); } //Delete @DELETE public void deleteEmp(@QueryParam("id") int id) { loe.remove(getObj(id)); } //Helper Methods @PUT @Path("defaultEmp") public Response addEmp() { loe.add(new Emp("Adderley", 1, 5, 1000)); loe.add(new Emp("Coltrane", 2, 6, 2000)); loe.add(new Emp("Davis", 3, 7, 3000)); return Response.ok().build(); } Emp newEmp(int exp, String name, int sal, int id) { return new Emp(name, id, exp, sal); } public Emp getObj(int id) { Iterator i = loe.iterator(); while (i.hasNext()) { Emp emp = (Emp)i.next(); if ((emp.getId()) == id) { System.out.println(emp.getName()); return emp; } } return null; } }
完成后,会发现Service.java的图标变了,并且增加一些目录和文件。
JAX-RS的jar包也自动加进来了。
3. 测试WebService。
测试GET方法
测试PUT方法
测试DELETE方法
注意,以上的方法分别对应Service.java中的对应方法。
4. 创建ADF Web 应用,调用Restful WebService。
Restful WebService开发部署完毕,该如何调用呢?
这里使用ADF中URL Service Data Control。
GET URL Service Data Control:
GET URL Service Data Control返回值:
DELETE URL Service Data Control:
页面最终运行效果。
5. 在页面上,点击Delete按钮,记录没有被删除问题。
经检查发现是DataControls.dcx中行 Source="Restful/jersey/restlab?id=##id##. "
有错,改成Source="Restful/jersey/restlab?id=##id##"就好了。
6. 进一步思考,创建PUT URL Service Data Control,这样在页面上,所有功能就都有了。
这个任务留给聪明的你吧。
Project 下载:Restful.7z。
没有评论:
发表评论