Web Service入门

标签: IT技术 java Web Service | 发表时间:2012-10-16 00:39 | 作者:
出处:http://blog.jobbole.com

本文来自文章作者 @Jeremy黄国华 的投稿。 伯乐在线也欢迎其他朋友投稿,投稿时记得留下您的新浪微博账号哦~

1. Web Service的定义

目前对Web Service没有统一的定义,定义一:Web Service是自包含的、模块化的应用程序,它可以在Web中被描述、发布、查找以及调用。定义二:Web Service是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼任的组件进行操作。定义三:所谓Web Service是指由企业发布的完成其特别商务需求的在线应用服务,其他公司或应用软件通过Internet来访问并使用这项应用服务。笔者比较喜欢维基百科的定义:Web Service是一种面向服务的架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务可以互操作。

目前对WebService还没有绝对全面和准确的定义,但是一般Web Service通常包括:

SOAP

一个基于XML的可扩展消息信封格式,需同时绑定一个传输协议。这个协议通常是HTTP或HTTPS、SMTP、XMPP。

WSDL

一个XML格式文档,用以描述服务端口访问方式和使用协议的细节。通常用来辅助生成服务器和客户端代码及配置信息。比如JAVA语言的wsdl2java 工具。

UDDI

一个用来发布和搜索WEB服务的协议,应用程序可借由此协议在设计或运行时找到目标WEB Service。

 

2. 使用Web Service的方式

远端过程调用

Web Service提供一个分布式函数或方法接口供用户调用,这是一种比较传统的方式。通常,在WSDL中对RPC接口进行定义。尽管最初的Web Service广泛采用RPC这种方式部署,但是针对其过于紧密之耦合性的批评声也络绎不绝。原因是RPC式的Web Service服务是利用一个简单的映射,把用户请求直接转换为一个特定语言编写的函数或方法。

面向服务架构

相比RPC式的Web Service,面向服务架构(SOA)得到了大部分主要软件供应商以及业界专家的支持和肯定。因为SOA方式更加关注如何去连接服务而不是去特地某个实现的细节。

REST式服务

表达性状态转移(Representational state transfer,REST)类似于HTTP协议,REST把接口限定在一组HTTP操作中,比如GTP、PUT、DELETE等以供调用,此种服务可以通过WSDL来描述SOAP消息内容,通过HTTP限定动作接口;或者完全在SOAP中对动作进行抽象。

 

3. HelloWorld

笔者将使用Apache Cxf官网的How To示例来实现helloworld和后续的示例,并且笔者将使用maven工具来构建示例项目。关于cxf及maven请参考官网 http://cxf.apache.orghttp://maven.apache.org。(示例使用maven构建项目 pom.xml)

编写Web Service

HelloWorld.java

@WebService
 public interface HelloWorld {
 String sayHi(@WebParam(name=”text”) String text); //这里的text为输入参数
 }

HelloWorldImpl.java

package demo.hw.server;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import javax.jws.WebService;
 @WebService(endpointInterface = “demo.hw.server.HelloWorld”, serviceName = “HelloWorld”)
 public class HelloWorldImpl implements HelloWorld {
 public String sayHi(String text) {
 System.out.println(“sayHi called”);
 return “Hello ” + text;
 }
 }

发布服务
Server.java

System.out.println(“Starting Server”);
 HelloWorldImpl implementor = new HelloWorldImpl();
 String address = “http://localhost:9000/helloWorld”; //发布地址
 Endpoint.publish(address, implementor);

访问Web Service
Client.java

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
 factory.getInInterceptors().add(new LoggingInInterceptor());
 factory.getOutInterceptors().add(new LoggingOutInterceptor());
 factory.setServiceClass(HelloWorld.class);
 factory.setAddress(“http://localhost:9000/helloWorld”); //地址为以上发布的地址
 HelloWorld client = (HelloWorld) factory.create();
 String reply = client.sayHi(“HI”);
 System.out.println(“Server said: ” + reply);
 System.exit(0);

3. XML与JSON

两者都是Web Service资源表示方式,直白点说,就是Web Service将以两者之一来请求或者返回结果。它们定义如下:

1. JSON 一种轻量级的数据交换格式,具有良好的可读性和便于快速编写的特性。另外,JSON采用的兼容性很高的文本格式。

2. XML 扩展标记语言,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML、非常适合Web传输,其提供了一种统一方法来描述和交换独立于应用程序或供应商的结构化数据。

 

XML与JSON优缺点比较:

1. 可读性 两者不相上下,JSON格式{property1:value1,property2:value2,…},XML格式value1value2。在描述上,XML要优于JSON。

2. 可扩展性 这点XML可以做的,JSON也可以。

3. 数据大小 这点JSON要优于XML,但是差别不是太大。

4. 使用范围 XML目前被业界广泛采用,而javascript语言对JSON支持要比XML优越。

5. 性能 经测试,JSON的解析速度几乎是XML解析的10倍。

 

4. CXF与Spring框架集成

假定使用Maven来构建项目,pom.xml

编写Web Service
HelloWorld.java

package demo.spring.service;
 import javax.jws.WebService;
 @WebService public interface HelloWorld {
 String sayHi(String text);
 }

接口实现类HelloWorldImpl.java

package demo.spring.service;
 import javax.jws.WebService;
 @WebService(endpointInterface = “demo.spring.service.HelloWorld”)
 public class HelloWorldImpl implements HelloWorld {
 public String sayHi(String text) {
 System.out.println(“sayHi called”);
 return “Hello ” + text;
 }
 }

在项目的WEB-INF目录下新建一个”cxf-servlet.xml”文件,内容:

另外还需要设置Servlet。一般,Web项目中都会有一个Web.xml文件,我们需要添加Spring ContextLoaderLister元素。当Web容器启动时,将由Spring ContextLoaderLister来启动Srping,并且加载配置文件。这些配置文件是通过context-param元素来定义的。

contextConfigLocation WEB-INF/beans.xml //配置文件
org.springframework.web.context.ContextLoaderListener

最后在上述的beans.xml在创建客户端。

这里可以选择将”helloClient” 注入到Srping bean中,或者采用手动的方式从Spring application context中查找:

ApplicationContext context = …; // your Spring ApplicationContext
 HellWorld client = (HelloWorld) context.getBean(“helloClient”);

 

 

相关文章

相关 [web service] 推荐:

Web Service入门

- - 博客 - 伯乐在线
本文来自文章作者 @Jeremy黄国华 的投稿. 伯乐在线也欢迎其他朋友投稿,投稿时记得留下您的新浪微博账号哦~. 目前对Web Service没有统一的定义,定义一:Web Service是自包含的、模块化的应用程序,它可以在Web中被描述、发布、查找以及调用. 定义二:Web Service是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼任的组件进行操作.

Web Service的研究

- - CSDN博客系统运维推荐文章
SOA和Web Service. 首先明白SOA和Web Service的关系:. * SOA面向服务架构,用于大型分布式系统的一个概念;. * Web Service是实现SOA的方式之一,不是所有的SOA都是基于Web service的;. * 但Webservice确实为最主流的SOA实现方式,有的人甚至把SOA等同于Webservice.

Restful 和 Jersey介绍(Web Service )

- - CSDN博客架构设计推荐文章
REST 2000 年由 Roy Fielding 在博士论文中提出,他是 HTTP 规范 1.0 和 1.1 版的首席作者之一. REST 中最重要的概念是资源(resources) ,使用全球 ID(通常使用 URI)标识. 客户端应用程序使用 HTTP 方法(GET/ POST/ PUT/ DELETE )操作资源或资源集.

论Web Service 相关技术(转)

- - 互联网 - ITeye博客
摘要:随着Internet和weh技术的迅速发展,传统的分布式计算技术已经不能 很好的适用于Web环境. 正是基于这种情况,Web Service技术应运而生. Web Service是一个新概念,它的系统架构、实现技术是现有应用的面向Internet的一个延伸. Web是为了程序到用户的交互,而Web Service是为程序到程序的交互作准备,web Service已成为IT产业近几年来探索的热点课题之一.

浅谈Soap/Web Service架构及其应用(转)

- - 互联网 - ITeye博客
       概述:随着计算机网络时代的到来,Internet/Intranet无可避免的成为现代商业信息化发展的必要趋势,而基于原有的局域网及企业内部网络的 二层式甚至是单机式的信息服务结构已经不能满足现代商业社会的需要,分布式应用技术自然而然成了主流的开发技术. 本课程设计主要讨论Soap/Web Service架构方式、原理及其在分布式开发中的应用技术.

cxf+web service(二)代理工厂,安全验证,数据绑定

- - ITeye博客
(二)代理工厂,安全验证,数据绑定. 1.服务端:ServerFactoryBean,JaxWsServerFactoryBean 用于服务端调用.前者针对POJO,后者针对JAX-WS,他们用于生成服务端的EndPoint,暴露出服务接口. 2.客户端:ClientProxyFactoryBean,JaxWsProxyFactoryBean 用于客户端调用.前者针对POJO,后者针对JAX-WS,他用于在客户端生成Web Service的代理proxy.

分布式通信的几种方式(EJB、RMI、RPC、JMS、web service杂谈)

- - CSDN博客互联网推荐文章
RPC是远程过程调用协议,它是基于C/S模型调用的机制,客户机向服务器端发送调用请求等待服务器应答,是一种典型的请求应答机制,大致过程可以理解为本地分布式对象向本机发请求,不用自己编写底层通信本机会通过网络向服务器发送请求,服务器对象接受参数后,经过处理再把处理后的结果发送回客户端. 它是早期的支持分布式一些,缺点rpc是面向过程的远程调用,不支持面向对象,所以现在用的人就少了.

Android Service 详解

- - CSDN博客移动开发推荐文章
一个Service也是一种应用程序组件,它运行在后台以提供某种服务,通常不具有可见的用户界面. 其它的应用程序组件可以启动一个Service,即使在用户切换到另外一个应用程序后,这个Service还是一直会在后台运行. 此外,一个应用程序也可以绑定到一个Service然后使用进程间通信(IPC)方式与Service之间发生交互.

【转】 Service Manager

- - 移动开发 - ITeye博客
android2.3 ---  Service Manager分析. Android系统Binder机制的总管是Service Manager,所有的Server(System Server)都需要向他注册,应用程序需要向其查询相应的服务. 可见其作用是多么的重要,那么我们这里就要重点介绍一下这个.

Android学习之路——7.Service

- - ITeye博客
这两天又学习了Android四大组件之一的Service. (1)Service不是一个单独的Process,除非特别指派了,也不是一个Thread,但也不是运行在Main Thread中. (3)Service的生命周期:. 调用的Context.startService()   oncreate() --> onStartCommand ()--> Service is running --> The service is stopped by its or a client--> onDestroy() --> Service is shut down .