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

Restlet实战(十九)使用Restlet实现Web Service

    博客分类:
  • REST
阅读更多

先说明本篇文章要实现的功能,仍然做一些假设,当前系统是基于Restlet的企业信息管理系统,而关于企业员工的管理,已经有人力资源系统,那么需求是人资系统可以实时查看企业信息管理系统中的人员资料是否与自己系统中的资料,这就涉及到Get操作,而另外,如果人员资料在人资系统中改变或者新增加员工,则需要通知企业信息管理系统去做相应的维护。

 

下文将演示一个人资系统从企业信息管理系统取用户的操作,以及员工信息改变,而通知企业管理信息系统做相应变更的功能。实际变成过程中,基于上述描述,我们用HttpClient来模拟人资系统,通过get和put xml来实现我们想要的功能。

 

1. 从企业信息管理系统取员工信息,对应的resource是UserReource

 

public class UserResource extends Resource {
	UserDAO userDAO;
	String userId;
	
	public UserResource(Context context, Request request, Response response) {
		super(context, request, response);
		userId = (String) request.getAttributes().get("userId");
		
		getVariants().add(new Variant(MediaType.TEXT_PLAIN));
	}
	
	@Override
	public Representation represent(Variant variant) {
		// get user data from database through user id
		User user = userDAO.getUserById(userId);

		Representation representation = new StringRepresentation(getUserXml(user),
				MediaType.TEXT_PLAIN);
		return representation;
	}
	
	private String getUserXml(User user){
		StringBuffer userXml = new StringBuffer();
		
		userXml.append("<user id=\"1\">");
		userXml.append("<name>ajax</name>");
		userXml.append("<phone>13888888888</phone>");
		userXml.append("<email>ajax@iteye.com</email>");
		userXml.append("<address>Shanghai</address>");
		userXml.append("</user>");
		
		return userXml.toString();
	}
	
	public void setUserDAO(UserDAO userDAO){
		this.userDAO = userDAO;
	}	
}

 

代码中的getUserXml是模拟真实环境中从数据库取值,然后转换成xml的过程,这样硬编码只是想让读者有个更清楚的认识。

 

然后用Httpclient模拟人资系统进行测试:

 

        String url = "http://localhost:8080/restlet/resources/users/1";
        HttpClient httpclient = new HttpClient();
        Credentials defaultcreds = new UsernamePasswordCredentials("admin",
                "admin");
        httpclient.getState().setCredentials(AuthScope.ANY, defaultcreds);
        GetMethod httpget = new GetMethod(url);
        try {
            httpclient.getHttpConnectionManager().getParams()
                    .setConnectionTimeout(1000 * 60);
            httpclient.executeMethod(httpget);
            System.out.println(new String(httpget.getResponseBody()));
        } catch (HttpException e) {
            System.out.println("Please check your provided http address!");
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            httpget.releaseConnection();
        }

 

 

注意上述代码中的System.out.println(new String(httpget.getResponseBody())); 如果没有错误的话,这行代码应该打印出整个从Server构建的XML:

 

<user id="1">
	<name>ajax</name>
	<phone>13888888888</phone>
	<email>ajax@iteye.com</email>
	<address>Shanghai</address>
</user>

 

如果在客户端(即模拟的人资系统)拿到上面的xml后,然后通过xml的工具分析,然后做相应的操作,这些都依赖于需求了。

 

2. 人资系统通知企业信息管理系统更新员工信息,对应的资源依然是UserResource,向UserResource加入一些代码:

 

 

@Override
public boolean allowPut() {
	return true;
}

@Override
public void storeRepresentation(Representation entity) throws ResourceException {
	
	try {
		if(entity.getMediaType().equals(MediaType.TEXT_XML)){
			String userXml = entity.getText();
			User user = getInfoFromXml(userXml);
			//update the user into db
		}	
	} catch (IOException e) {
		e.printStackTrace();
	}
}

 

思路很简单,接收从客户端请求传来的xml,然后解析出需要的数据,根据这些数据,更新数据库。看看客户端代码:

 

String url = "http://localhost:8080/restlet/resources/users/1";
HttpClient httpclient = new HttpClient();
Credentials defaultcreds = new UsernamePasswordCredentials("admin",
		"admin");
httpclient.getState().setCredentials(AuthScope.ANY, defaultcreds);
PutMethod put = new PutMethod(url);

StringBuffer userXml = new StringBuffer();

userXml.append("<user id=\"2\">").append("<name>Wood</name>").append(
		"<phone>13555555555</phone>").append(
		"<email>wood@iteye.com</email>").append(
		"<address>Guangzhou</address>").append("</user>");
try {
	put .setRequestEntity(new StringRequestEntity(userXml.toString(),
			"text/xml", "utf-8"));
	httpclient.getHttpConnectionManager().getParams()
			.setConnectionTimeout(1000 * 60);
	int status = httpclient.executeMethod(put);
	System.out.println(status);
} catch (HttpException e) {
	System.out.println("Please check your provided http address!");
	e.printStackTrace();
} catch (IOException e) {
	e.printStackTrace();
} finally {
	put .releaseConnection();
}

 

本篇文章把企业信息管理系统(Restlet)作为服务端,着重演示了服务端如何相应相应相应的请求。实际上作为客户端的人资系统,例如获取xml后,同样需要解析之,并需要做进一步的处理;另外,发送xml过去更新员工信息,如果没有更新成功,要不要重发?还是不在发,这都是需要考虑的,还是那句话,这个要根据你项目的具体需求来的。所以,本篇文章就没有铺开展示了。

 

分享到:
评论

相关推荐

    Restlet实战(二十六)事务 (Transaction)

    在《Restlet实战(二十六)事务 (Transaction)》这篇博文中,作者可能会详细讲解如何在Restlet框架中实现上述事务处理策略。Restlet是一个开源的Java框架,专门用于构建RESTful应用程序。它提供了丰富的API和工具,...

    restlet实现最简单的restful webservice

    本文将深入探讨如何使用Restlet来实现一个最简单的RESTful Web服务。 首先,了解REST的基本概念是必要的。REST强调的是资源的概念,通过URI(Uniform Resource Identifier)来标识,使用HTTP协议中的方法(如GET、...

    org.restlet-2.3.0.jar 最新版本

    在Java开发领域,REST(Representational State Transfer)架构风格已经成为构建Web服务的主流选择,而org.restlet-2.3.0.jar则是实现RESTful API的重要库。此版本作为最新的迭代,具有卓越的兼容性和稳定性,旨在为...

    Web Api调试工具 Chrome插件Restlet-Client-REST-API-Testing

    在实际使用中,开发者可以通过以下步骤利用Restlet Client调试Web API: 1. 安装插件:访问Chrome Web Store,搜索“Restlet Client”,下载并安装插件。 2. 创建请求:在插件界面输入API的URL,选择合适的HTTP方法...

    Restlet开发实例

    本系列的开发实例将带你深入理解并掌握Restlet框架的使用,从基础的JAX-RS实现到高级的Component和Application结构,再到与Spring框架的整合。 首先,我们来看看"RESTLET开发实例(一)基于JAX-RS的REST服务.doc"。...

    camel-restlet-spring-web-app

    标题 "camel-restlet-spring-web-app" 暗示了一个基于Apache Camel、Restlet和Spring Web的应用程序示例,该示例使用Jetty作为嵌入式服务器。这个项目结合了这些技术来创建一个RESTful API服务。让我们深入探讨每个...

    RESTLET开发

    在开发环境中新建一个名为`RestService`的Java Web项目。 2. **添加必要的库文件** 将`%RESTLET_HOME%\lib`目录下的所有JAR包复制到项目的`WebRoot\WEB-INF\lib`目录,并确保它们都被正确地添加到了项目的类路径...

    restlet

    RESTlet是一款开源框架,专为构建基于REST(Representational ...通过学习这些资料,开发者可以深入理解RESTlet的工作原理,掌握如何使用RESTlet构建RESTful服务和客户端应用,从而提升其在Web服务开发领域的专业技能。

    restlet2.1学习笔记项目代码

    Restlet是一个开源框架,专为构建RESTful(Representational State Transfer)Web服务而设计。REST是一种轻量级的架构风格,常用于构建可扩展、高性能的互联网应用程序。本项目是针对Restlet 2.1版本的学习笔记,...

    restlet-1.1.2.zip 基于xml+http协议的轻量级web服务框架开发包

    Restlet是一个开源的Java框架,专门用于构建RESTful(Representational State Transfer)Web服务。REST是一种软件架构风格,它强调简单、无状态和基于标准的HTTP协议进行通信。Restlet框架是实现这一风格的重要工具...

    Restlet开发的Basic认证

    Restlet是一个轻量级的Java Web服务开发框架,它提供了构建RESTful(Representational State Transfer)应用程序的工具和API。REST是一种架构风格,强调简洁、无状态和可缓存的网络交互,常用于构建高性能、高可用性...

    Restlet所需要的所有jar包

    此外,理解RESTful设计原则,如资源的URI定位、状态码的使用、无状态通信等,对于有效利用Restlet构建高质量的Web服务也是十分必要的。 总之,"Restlet所需要的所有jar包"的压缩包提供了开发RESTful服务的基础环境...

    Restlet in action 中文

    【Restlet in Action 中文】这本书是一本针对Java开发者介绍Restlet框架的实战指南,旨在帮助读者更好地理解和使用RESTful Web API。Restlet是一个开源的Web框架,它以面向对象的方式提供了一系列类和示例,使得...

    restlet restful

    总的来说,"restlet restful"项目是一个基于RESTlet框架的RESTful Web服务实现,提供了便捷的客户端和服务端通信方式,便于开发和测试。通过"RestApplication"类,我们可以创建和管理REST资源,实现对HTTP请求的处理...

    RESTLET框架学习书籍

    ### RESTLET框架学习知识点 #### 一、RESTLET框架概览 ...通过上述内容的学习和实践,开发者可以全面掌握RESTLET框架的使用方法,并能够运用其构建高效、稳定、易于维护的RESTful Web应用和服务。

    基于Spring的Restlet实例

    而Restlet是一个专注于REST(Representational State Transfer)架构风格的Java库,它允许开发人员轻松地创建RESTful Web服务和客户端。将Spring与Restlet结合,可以利用Spring的强大功能来构建高效、可扩展的REST...

    RESTLET IN ACTION

    **RESTLET IN ACTION** 这本书是一部关于RESTlet框架的详细介绍,旨在帮助读者更好地理解和掌握REST架构,并使用RESTlet框架来构建高质量的Web应用程序和服务。本书分为三个部分,分别是:“开始启动(Getting ...

    Restlet Client-2.13.2

    用户在安装了Restlet Client之后,直接点击插件图标即可开始使用,只需输入自己的网站并选择好对应的请求模式就能对网站发送Web请求并检查响应,同时使用者可以先将多个API请求组合成一个方案来创建一个针对网站的...

    Restlet in action 英文 完整版

    书中不仅介绍了Restlet框架的基本概念和技术细节,还通过丰富的示例代码展示了如何设计、实现和部署RESTful Web服务。 #### 二、Restlet框架简介 **Restlet** 是一个灵活且强大的Java框架,用于构建RESTful Web...

    Restlet Client 插件安装包

    6. **自动化测试**: 虽然`Restlet Client`主要作为手动测试工具,但通过编写脚本,也可以实现一定程度的自动化测试。 7. **安全性**: 支持OAuth 2.0和其他身份验证机制,保障API测试的安全性。 ### 使用场景 - **...

Global site tag (gtag.js) - Google Analytics