至于deleteItem、findItemById和findAllItems服务,REST方法使用的消息交换协议会有些不同,这些操作实际上不需要上传XML到服务器,它们最多只需要传给服务器一个Id号,像findAllItems根本就不要传给服务器任何输入。在这些情况下,URI和HTTP谓词就能提供服务器需要的所有信息。下表列出了REST请求的一些URI实例:
谓词
|
URI示例
|
操作
|
DELETE
|
http://localhost/SoaBookREST/itemService/14
|
删除第14号商品
|
GET
|
http://localhost/SoaBookREST/itemService/14
|
获取第14号商品
|
GET
|
http://localhost/SoaBookREST/itemService
|
获取所有商品
|
您会从上表看到,HTTP请求由谓词加URI构成,它清楚地告诉服务器它要求哪个服务。请您注意,上面的URI包含了一些额外数据(比如Id号),因此您需要web描述文件中配置相应的URL映射模式,而不是针对某个具体的URL进行配置,web.xml的示例配置如下:
代码清单12— web.xml中servlet的映射配置
<servlet-mapping>
<servlet-name>ItemService</servlet-name>
<url-pattern>/itemService/*</url-pattern>
</servlet-mapping>
下面是最后两个操作的服务实现代码:
代码清单13— REST风格读取服务的实现
protected void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException
{
try{
if (request.getPathInfo()==null){
//findAllItems
ItemList itemList = new ItemList();
itemList.setList(new ArrayList());
//retrieve all items
...
itemList.getList().add(...);
...
//Send the XML message to the client
JAXBContext jaxbContext = JAXBContext.newInstance(ItemList.class, Item.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,Boolean.TRUE);
marshaller.marshal(itemList, response.getOutputStream());
} else {
//findItemById
int id = (new Integer(request.getPathInfo().substring(1))).intValue();
//retrieve item by id (e.g. from a database)
Item item = ...
JAXBContext jaxbContext = JAXBContext.newInstance(Item.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,Boolean.TRUE);
marshaller.marshal(item, response.getOutputStream());
}
}catch (Exception e) {
throw new ServletException(e);
}}
如果您想更新一个商品,您需要调用如下的REST风格的URI,其中包含了商品的Id信息。
PUT http://localhost/SoaBookREST/itemService/14
其实,REST的这种调用哲学和HTTP请求的自解释性的特点是一致的,上面的URI可以读作“更新14号商品”。
一般说来,如果您要使用上面的方法创建非CRUD服务,您有以下两种选择:
(1) 使用合适的谓词,新建一个Servelet
(2) 重用已有的Servlet和谓词,但需要添加新的代码,以解析和组装HTTP请求中的业务逻辑。
您也可以考虑在请求中加入参数这种比较实用的办法,请求中添加的参数可以让执行的业务流程发生变化,虽然REST的追随者不喜欢这样做。这种方法的请求格式可能如下所示:
http://localhost/SoaBookREST/itemService?id=14
REST追随者们对上面的办法可能颇有微词,实际上,上面的这种请求格式依赖于具体的参数名(id),这多少为REST这种简单线性的请求风格增添了复杂性。
分享到:
相关推荐
在Java Web服务和SOA环境中,持续集成和部署工具如Maven、Gradle和Jenkins可以帮助自动化构建、测试和部署过程,确保服务的稳定性和质量。 ### 7. 监控与管理 使用工具如JMX(Java Management Extensions)和管理...
SOA与Web服务SOA与Web服务SOA与Web服务SOA与Web服务
通过标准化的通信协议和服务接口,开发者可以构建出灵活、可扩展的系统,满足日益复杂和多样的业务需求。同时,服务的松散耦合确保了系统的稳定性,使得服务的升级和维护不影响消费者的使用体验。随着技术的不断发展...
使用Java Web服务构建SOA 中文版 part3
web服务与SOA架构的一些简单的关系和一些联系!
在SOA中,SOAP消息用于在服务提供者和服务消费者之间传递请求和响应。Java中,可以使用JAX-WS(Java API for XML Web Services)来创建和消费SOAP Web服务。 **3. WSDL(Web Service Description Language)** WSDL...
( 用于实现Web服务的SOA编程模型.pdf )
JAX-WS提供了一套工具和API,使得开发人员能够轻松地实现服务端点和服务客户端。 4. **JAXB(Java Architecture for XML Binding)**:JAXB是一个用于在Java对象和XML之间进行映射的标准API。它可以自动将Java对象...
使用Java Web服务构建SOA 中文版 part1
- **业务所有者**:希望通过 SOA 实现战略开发目标,例如增加新业务模型和服务等功能。 #### 技术要点 - **XML (Extensible Markup Language)**:一种用于标记数据的语言,是 Web 服务通信的基础。 - **SOAP ...
SOA是一种软件设计方法,它将应用程序的不同功能单元通过定义良好的接口和服务边界进行分离,以促进重用和互操作性。Java Web服务在SOA中扮演着关键角色,因为它们提供了标准的、平台无关的方式来暴露和消费这些服务...
Java Enterprise Edition(Java EE)提供了一系列API和服务,如JAX-WS(Java API for XML Web Services),用于创建和部署Web服务。Java的EJB(Enterprise JavaBeans)和JSF(JavaServer Faces)等技术则支持企业级...
SOAP是一种基于XML的消息协议,它规定了消息的结构和交换规则,允许服务消费者和服务提供者之间进行安全、可靠的信息交换。例如,在清单2中展示的例子中,SOAP消息包含了一个信封,信封内封装了服务请求的具体内容,...
3. 服务治理:建立服务注册、版本控制和服务监控机制,确保服务的质量和可用性。 4. 服务重用:通过服务组件化,提高代码复用,减少开发时间和成本。 5. 异构环境的兼容性:支持多种硬件、软件平台,实现跨平台服务...
本书是一本方便的开发指南,可以帮助你在当前Java EE5和Java SE6平台上实现Web服务和面向服务的架构(SOA),介绍了如何创建、部署、以及调用Web服力,再将这些服务组合成松散耦合的SOA应用程序,并介绍了一个精心...
【语义网Web服务SOA】是信息技术领域中关于互联网服务和信息处理的重要主题,它涉及到Web服务的智能化和语义化,旨在提高信息共享和自动化处理的效率。以下是相关知识点的详细说明: 1. **服务的重要性**:互联网上...
- **SOA框架下的Web服务**:在SOA框架中,Web服务不仅仅是一个简单的服务提供者,更是整个体系结构中的一个重要组成部分,通过标准化的接口实现服务间的通信和交互。 #### 五、关键技术融合与面向服务的企业 - **...
5. 服务总线(Service Bus):作为服务之间的通信基础设施,它处理消息路由、事务管理、安全性和服务质量控制等问题。 Web服务是SOA的一种实现形式,使用HTTP协议来交换数据,这使得Web服务能够跨越防火墙,广泛...
"基于SOA和Web服务的智能交通综合信息平台研究" 本研究旨在解决智能交通系统(ITS)中存在的问题,通过面向服务架构(SOA)和Web服务技术,提出了一种智能交通综合信息平台集成架构。该平台可以实现多个ITS系统之间...