rest实例java的简单介绍
今天给各位分享rest实例java的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、如何实现支持REST的Java Business Services
- 2、java 调用 rest 接口 怎么写请求行的信息
- 3、怎样用JAVA代码实现一个REST服务端
- 4、如何构建并在云上部署基于JAVA的REST Service?
- 5、如何在eclipse上配置rest服务啊
- 6、java中rest接口实现数据接收与转发
如何实现支持REST的Java Business Services
下图显示了示例实现中的类。蓝色所示的类是框架外部的类,将它们放在这里是为了展示与框架的结构关系。
配置文件
配置文件 "rest-services-config.xml" 包含 REST 服务表示形式和相应的Java Action之间的映射,如下:
清单 1. REST 服务配置
以下是引用片段:
?xml version="1.0" ?
rest-config
rest-api id="CreateUserProfile" uri="/Registration/CreateUser" method="POST"
handler id="RegAction" class="ws.registration.restactions.CreateProfile"/
/rest-api
rest-api id="GetUserProfile" uri="/Registration/GetUser" method="GET"
handler id="RegAction" class=" ws.registration.restactions.GetProfile"/
/rest-api
...
/rest-config
在该示例实现中,XML Binding服务实现在"rl-config.xml"文件中配置的框架配置文件如下所示。通过修改此文件实现的任何自定义实现都可以接入,只要实现了XMLBindingService接口。
清单 2:框架配置
以下是引用片段:
# XML Binding Implementation Service
# Default implementation
ws.rest.xmlbinding.service.impl=ws.rest.xmlbinding.service.impl.XMLEncDecServiceImpl
日志配置文件 "ws_log.properties" 指定log4j属性和日志文件的位置。这可以按需要作出适当修改。
Controller Servlet
RESTServiceServlet在web.xml中配置,处理所有具有上下文路径的请求,其中上下文路径的web-app/restservices/*如下所示:
清单 3:Servlet配置
以下是引用片段:
servlet
description/description
display-nameRESTServletService/display-name
servlet-nameRESTServletService/servlet-name
servlet-classws.rest.servlet.RESTServiceServlet/servlet-class
/servlet
servlet-mapping
servlet-nameRESTServletService/servlet-name
url-pattern/restservices/*/url-pattern
/servlet-mapping
REST Action
对于每个REST资源,例如 GetUserProfile,都将创建一个实现ActionInterface的相应动作类。该接口定义了动作类需要实现的 "doExecute(ActionContext ctx)" 方法。ActionContext提供服务,获取 REST 路径输入或查询参数,获取XMLBindingService实例并将XML输出发送到客户端,不公开Action的协议细节。PathInputs是一个包含路径值的List对象,路径值的顺序与它们在URL中指定的顺序相同。
清单 4:Action代码片段
以下是引用片段:
public class GetProfile implements ActionInterface {
public void doExecute(ActionContext context) throws Exception {
// Get the value from URL path
String userName = context.getPathInputs().get(0);
// Invoke backend service to retrieve user profile
UserProfileBean bean = getUser(userName);
// Serialize the bean using framework service and send response
String xml = context.getXMLBindingService().serialize(bean);
// Use the ActionContext to generate XML and
context.sendResponse(response, xml);
}
动作类负责使用超类中的XMLBindingService以XML形式生成输出。请查看示例实现的ws.registration.restactions.GetProfile类。ActionContext还可以提供协议特定的HttpServletRequest和HttpServletResponse对象,以防需要自定义处理。它还提供了Path值和URL参数。
XML Binding
该代码示例提供了一个Java XML Binding的实现,该实现使用java.beans.XMLEncoder和java.beans.XMLDecoder类。XML Binding服务实现接受一个JavaBean对象,并将其转换为上述Encoder和Decoder相应的XML表示形式。如果需要JAXB实现,那么可以开发一个实现 ws.rest.xmlbinding.service.XMLBindingService接口的实现类。
执行示例服务
示例代码分发包含示例WAR文件"RESTWS.war",它可以部署在Tomcat容器中(已在Apache Tomcat版本6.0.20上进行了测试)。JDK要求是JDK 1.5以上。
成功部署该应用程序之后,在浏览器中输入URL:
图 5. 创建Profile Service输入
该页面调用REST服务
POST url-prefix/Registration/CreateProfile
您可以修改在 string/string 标记中指定的XML值。
注意:请注意XML结构依赖于JavaBean对象和Java使用的XML序列化技术。
提交时,动作类显示成功消息,表示后端服务的调用。可以查看 ws_log.log 文件调试消息。
图 6. 创建Profile Service输出
类似地,实现示例GET url-prefix/Registration/GetProfile/{username}服务以检索配置文件,如下图所示:
转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦
java 调用 rest 接口 怎么写请求行的信息
package com.demo;
import jaimg id="selectsearch-icon" src="" alt="搜索"va.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.xml.bind.DatatypeConverter;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
public class restTest {
public static voidmain(String[] args) {
try {
DefaultHttpClient Client = newDefaultHttpClient();
HttpGet httpGet = newHttpGet("你的地址");
String encoding =DatatypeConverter.printBase64Binary("admin:admin".getBytes("UTF-8"));
httpGet.setHeader("Authorization", "Basic " +encoding);
HttpResponse response = Client.execute(httpGet);
System.out.println("response =" + response);
BufferedReader breader = newBufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuilder responseString = newStringBuilder();
String line = "";
while ((line = breader.readLine()) !=null) {
responseString.append(line);
}
breader.close();
String repsonseStr =responseString.toString();
System.out.println("repsonseStr =" + repsonseStr);
} catch (IOException e) {
e.printStackTrace();
}
}
}
怎样用JAVA代码实现一个REST服务端
jsr-311实现了restfull标准的api,基于jsr-311,sun自己实现了jersey
不过不要高兴太早,jersey只是一个restful的api,不是rest的,要实现rest非常复杂,因为涉及到了超文本驱动这个。
我建议你看看jersey + spring3来玩rest
如何构建并在云上部署基于JAVA的REST Service?
应用的架构
Dustin.Whittle给出了云应用的示例架构,它具有高度的可扩展性,如下图所示:
在这个图中,应用按照分层的理念进行了拆分,分别介绍如下:
客户端层:客户端层包含了针对目标平台的用户界面,可能会包括基于Web的、移动端的甚至是胖客户端的用户界面。一般来讲,这可能会是Web应用,包含诸如用户管理、会话管理、页面构建等功能,但是其他客户端所发起的交互都需要以RESTful服务的形式调用服务器。
服务:服务器包含了缓存服务以及聚合(aggregate)服务,其中缓存服务中持有记录系统(system of record)中最新的已知状态,而聚集服务会直接与记录系统交互,并且会执行一些破坏性的操作(会改变记录系统中的状态)。
记录系统:记录系统是领域特定的服务端,它会驱动业务功能,可能会包括客户管理系统、采购系统、预定系统等等,这些很可能是遗留系统,你的应用需要与其进行交互。聚集服务要负责将你的应用从这些特有的记录系统中抽象出来,并为你的应用提供一致的前端接口。
ESB:当记录系统发生数据变化的时候,它需要触发到指定主题(topic)的事件,这就是事件驱动架构(event-driven architecture,EDA)能够影响应用的地方了:当记录系统进行了一项其他系统可能感兴趣的变更时,它会触发一个事件,任何关注记录系统的其他系统会监听到这个事件,并作出对应的响应。这也是使用使用主题(topic)而不是队列(queue)的原因:队列支持点对点(point-to-point)的消息,而主题支持发布-订阅(publish-subscribe)的消息或事件。当与遗留系统进行集成时,我们很期望这些遗留的系统能够免遭负载的影响。因此,我们实现了一个缓存系统,这个缓存系统维持了记录系统中所有最新的已知状态。缓存系统会使用EDA的规则监听记录系统的变化,它会更新自己所保存数据的版本,从而保证与记录系统中的数据相匹配。这是一个很强大的策略,不过会将一致性模型变为最终一致性,也就是说如果你在社交媒体上发布一条状态的话,你的朋友可能在几秒钟甚至几分钟之后才能看到,数据最终是一致的,但有时你所看到的与你的朋友所看到的并不一致。如果能接受这种一致性的话,就能在很大程度上实现可扩展性的收益。
NoSQL:在数据存储方面,有很多的可选方案,但如果要存储大量数据的话,使用NoSQL存储能够更容易地扩展。有多种NoSQL存储可供选择,不过这要匹配所存储数据的特点,如MongoDB适合存储可搜索的数据,Neo4j适合存储高度互相关联的数据,而Cassandra适合存储键/值对,像Solr这样的搜索索引有利于加速对经常访问数据的查询。
将应用拆分为多个层的时候,最好的模式就是使用面向服务架构(service-oriented architecture,SOA)。要实现这一点,可以使用SOAP,也可以使用REST,但是REST更为合适,因为它可扩展性更强。作者接下来对REST的理念进行了深入的阐述,InfoQ上关于REST已有很多相关的文章,如这里和这里,甚至包括Roy Fielding经典博士论文的中译本,所以这里不再赘述。不过,作者在这里特别强调了RESTful Web服务能够保持无状态性(stateless)。无状态是实现可扩展性的关键需求,因为无状态,所以请求可以由任何一个服务器响应。如果你在服务层上需要更多的容量时,只需要为该层添加虚拟机即可,而不需关注客户端状态保持的问题,负载可以很容易地重新分配。
部署到云端
前面介绍了基于云的应用架构,接下来作者阐述了这样的应用该如何部署到云端。
RESTful Web服务要部署到Web容器中,并且要位于数据存储之前。这些Web服务是没有状态的,只会反映其暴露的底层数据的状态,因此可以根据需要部署任意数量的服务器。在基于云的部署中,开始时可以开启足够的实例以应对日常的需求,然后配置弹性策略,从而根据负载增加或减少服务器的数量。衡量饱和度的最好指标就是服务的响应时间。另外还需要考虑这些服务所使用的底层数据存储的性能。示例的部署图如下所示:
如果在云部署时有EDA的需求,那么就需要部署ESB,作者给出的建议是根据功能对ESB进行分区(partitioning),这样一个segment的过大负载不会影响到其他的segment。如下图所示:
这种分离使System 1的负载与System 2的负载实现了隔离。如果System 1产生的负载拖慢了ESB,它只会影响到自己的segment,并不会影响到System 2的segment,因为它部署在其他硬件上。如果ESB产品支持的话,我们还可以给指定的segment添加服务器来实现扩展。
基于云的应用与传统应用有着很大的差别,因为它有着不同的扩展性需求。基于云的应用必须有足够的弹性以应对服务器的添加与移除,必须松耦合,必须尽可能的无状态,必须预先规划失败的情况,并且必须能够从几台服务器扩展到成千上万台服务器。
针对云应用并没有唯一正确的架构,但是本文所阐述的RESTful服务以及事件驱动架构却是经过实践检验有效的架构。作者认为REST和EDA是实现云端可扩展应用的基本工具。
目前,国内许多传统的软件厂商正在逐渐往云端迁移,希望本文所阐述的架构理念能够为读者提供一些借鉴。
如何在eclipse上配置rest服务啊
在Eclipse里,新建一个web工程
第一步,添加需要用的jar包,如下图
第二步,新建一个class,代码如下
第三步,修改web.xml配置文件,如下图
启动tomcat, 访问本机测试地址:
这时我们就可以访问到我们发布的rest服务了,如下图
java中rest接口实现数据接收与转发
java中的接口是一种特殊的类,使用关键字interface创建。接口功能完全实现后,可以打成jar包,提供给其他公司使用。
要返回json格式数据,可以把接口中抽象方法的返回值类型规定为JSONObject或JSONString类型。这样当其他公司调用时,得到的数据就是json数据了。
另外,以jar形式提供的接口,可以通过反编译得到你的源码,如果你不希望开源,就要加密了。
rest实例java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、rest实例java的信息别忘了在本站进行查找喔。