Web Service 初步了解
Web Service见名之意就是网络上的一些服务,解决的问题就是如何使用这些服务,因为软件的开发有各种各样的语言,利用Java,C#,VB.NET,PHP等等,如何使这些语言编写的程序能够进行互通,彼此相互利用。Web Service就可以解决异构系统的通信的整合。
首先看一下,和WebService一样能够解决异构系统的通信和整合的方案吧:
1,通过XML,JSON,字符串进行多语言的通讯,因为这些都是规定好的,各个语言中使用都是一样的。例如JavaScript和Java通过Json进行数据交换,JavaScript利用eval()函数,而Java有jackson,json-lib等类库来进行帮忙解析。
2,共享数据库,这种方式也能实现不同系统的通信,但是对数据库的保护方面可能不够好。
3,共享文件,可以将文件(一般是xml文件)上传到都可以访问到地方(例如:FTP server上)进行共享。
4,使用小心中间件,如图:
当然还有CORBA,Web Service比较成熟的技术等等,这些都是解决异构系统的通信的宏观方式。由于不同的系统处于不同的JVM中,这就需要考虑分布式架构的解决方案了,看一下核心图吧,体现了代理模式,这里还利用了JavaEE的JNDI规范进行对象的查找等:
由于Web Service的容易上手和传输的格式是xml文本格式(因为此可以利用dtd,Schema进行规范约束),所以使用比较广泛,下边看一下Web Service的简单应用吧。
Web Service技术得到了Java的支持,在JDK6以后都给出了相关规范的实现,有两种方式:
1,JAX-WS(XML web services的Java API)是SOAP方式即:简单对象访问协议(SimpleObject Access Protocol),它是用于交换XML(标准通用标记语言下的一个子集)编码信息的轻量级协议
。 2,JAX-RS(Java API for RESTful Web Services )即restful方式风格。
再看一个概念: WSDL:WebService描述语言WSDL 就是用机器能阅读的方式提供的一个正式描述文档而基于XML(标准通用标记语言下的一个子集)的语言,用于描述WebService及其函数、参数和返回值。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的。 下边是SOAP和WSDL在异步传输中的所用:
这里只看一下第一种SOAP方式,提供的框架技术有CXF,XFire和AXIS。而常用的是Axis和CXF,先看一下两者的比较吧:
Axis互通信比较好,对其他语言访问的兼容性比较多;
CXF非常容易的整合到Spring架构中;
看一下CXF如何集成到Spring进行开发服务端吧:
1,加入jar包(够用的原则):
-cxf-2.5.10.jar
-wsdl4j-1.6.3.jar
-xmlschema-core-2.0.3.jar
-neethi-3.0.2.jar
-geronimo-servlet_2.5_spec-1.1.2.jar
-woodstox-core-asl-4.2.0.jar
-stax2-api-3.1.1.jar
2, 在web.xml中,配置前端控制器CXFServlet拦截Web Service请求:
<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet> <servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
3,将CXF提供的缺省配置文件cxf.xml引入到Spring配置文件中:
<import resource="classpath:META-INF/cxf/cxf.xml" />
4,基于CXF规范,采用JAX-WS方式开发北向接口,注意@WebService和@WebParam注解的使用,还有就是实现类的编写加的注解要指定名称@Resource(name="userDaoImpl"),其它正常编写即可:
@WebService
public interface WebServiceFacade { public String selectUser(@WebParam(name="userId")String userId);
}
5,在配置文件中使用endpoint发布WebService,这里需要引入对应的命名空间和约束xsd:
-引入命名空间jaxws xmlns:jaxws="http://cxf.apache.org/jaxws
-加入jaxws命名使用的xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd <jaxws:endpoint
id="webServiceFacade"
implementor="#webServiceFacadeImpl" //引用IoC中的id
address="/WebServiceFacade" />
6,然后启用服务器,采用浏览器就可以进行访问了:应用程序根services/WebServiceFacade?wsdl。当然这里推荐一个测试服务接口的工具,非常好用的SoapUI。如果能够成功返回指定String,那么服务端就成功了。我们就可以通过任何语言的系统,通过此URL为接口访问此服务接口了,当然也可以使用生成的WSDL。
这样服务段就建好了,但是我们如何编写客户端Client进行调用呢?我用的Java语言,所以WSDL2Java方法这个就非常重要。使用eclipse自动的AXIS插件进行新建:就自动为我们生成客户端的存根,我们调用这些存根的方法即可完成对目标对象的调用。
或者采用CXF中的wsdl2java.bat进行相关存根的生成,总而言之是利用工具给我们生成存根,我们调用即可。这样,我们就实现了不同语言不同程序之间的访问通信了。
这也是继面向对象编程思想又一种较新的编程思想面向服务编程,这样我们就不用顾虑语言的差别,提供规范的服务接口,我们无论使用什么语言,就都可以访问使用了,大大提高了程序的复用率。
例如,在我们的程序中添加天气预报,火车时刻表,利用银行进行付账,利用腾讯QQ,其他邮箱账号登陆系统等等,只要提供对应的服务接口我们就可以很容易的实现了,当然了,这里有些接口就需要收费了,但是这种方式无疑大大扩展了程序的边界,使复用性大大的提高了。算是一种改革吧!
异步系统通信,Web Service初步总结,还在深入研究中……
Web Service 初步了解的更多相关文章
- 初步认识 Web Service
		Web Service初步认识 Web Service:不是框架,不是一种技术,而是一种跨平台,跨语言的规范. 作用:异构平台之间的交互,解决了不同平台,不同语言所编写的应用之间的相互调用.(远 ... 
- C#开发和调用Web Service
		http://blog.csdn.net/h0322/article/details/4776819 1.1.Web Service基本概念 Web Service也叫XML Web Service ... 
- ASP.NET调用Web Service
		1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求, ... 
- WCF和Web Service的 区(guan)别(xi)
		参考文献:http://social.microsoft.com/Forums/zh-CN/c06420d1-69ba-4aa6-abe5-242e3213b68f/wcf-webservice 之前 ... 
- Java RESTful Web Service相关概念
		原文地址:http://1.liangtao.sinaapp.com/?p=647 接上一篇文章REST|RESTful初步认识:p=639">http://1.liangtao.si ... 
- 几种通讯协议的比较RMI > Httpinvoker >= Hessian >> Burlap >> web service
		一.综述本文比较了RMI,Hessian,Burlap,Httpinvoker,web service等5种通讯协议的在不同的数据结构和不同数据量时的传输性能.RMI是java语言本身提供的远程通讯协 ... 
- Delphi 6 Web Services初步评估
		Delphi 6 Web Services初步评估这是我刚到现在公司的时候(2001年8月份)所作的一份测试报告,现公布出来,希望能对大家有所帮助.因为当时d6刚刚发行,Web Service方面还存 ... 
- Delphi 6 Web Services初步评估之二(转)
		Delphi 6 Web Services初步评估之二(转) ★ 测试环境:CPU:PIII 550内存: 256MBOS: Windows2000 Server + SP2Web Server: ... 
- Delphi 6 Web Services初步评估之三(转)
		Delphi 6 Web Services初步评估之三(转) Delphi 6 Web Services初步评估之三(转)★ 测试总体印象:在整个测试中,对Delphi 6创建的Web Servi ... 
随机推荐
- Python字符串格式符号含义
			====== #字符串格式化符号含义 #%C 格式化字符串及其ASCLL码 >>> '%c' %97 'a' >>> '%c' % 97 'a' >>& ... 
- jquery之checkbox
			//checkbox 数据回显 var publishRange=rowData.publishRange.split(","); for(var i = 0;i < pub ... 
- this——笔记
			this是执行上下文中的一个属性.this与上下文中可执行代码的类型有直接关系,this值在进入上下文时确定,并且在上下文运行期间永久不变. 在这里一切都简单.在全局代码中,this始终是全局对象本身 ... 
- 华硕笔记本怎么设置u盘启动(两种方法)
			华硕笔记本怎么设置u盘启动(两种方法) 华硕笔记本怎么设置u盘启动.我想用U盘安装系统但是 我不知道如何设置U盘启动,那么该如何设置呢?下面和大家分享一下我的经验,希望能够帮到大家.如果你的系统是预装 ... 
- (转)使用 .NET 的 RNGCryptoServiceProvider 生成随机数
			1. [代码]一个简单的方法,但不够可靠 跳至 [1] [2] [全屏预览] ? 1 2 3 4 5 6 7 8 9 10 11 static void Main(string[] args) ... 
- 根据控件Id得到控件
			在做动态获取控件时,时常需要根据Id得到控件,并对该控件进行操作,此时用 /// <summary> /// 根据控件id得到控件 /// </summa ... 
- ArcGIS Server Manager登陆不了
			我很是郁闷,安装都好了(post安装完成之后它要我将 相关的用户(我在这里安装的时候已指定) 添加到 agsadmin和agsusers两个用户组中.都做好了, 我甚至将刚刚的用户和用户组都删掉,重新 ... 
- centos上如何安装git
			安装依赖包 1.yum -y install zlib-devel openssl-devel perl cpio expat-devel gettext-devel 2.yum install au ... 
- ORACLE模拟临时文件、日志成员、口令文件丢失情况与恢复【weber出品】
			一.临时表空间文件.日志文件和口令文件都属于非关键性文件,因为这些文件丢失后并不会影响到整个数据库的完整性. 但是,当这些文件丢失后我们需要快速的找回这些文件.接下来我将模拟临时表空间文件.日志文件和 ... 
- linux下面安装配置LAMP环境
			以centos下面为例.初学者.东西基本都是各个地方找来的.自己手写了一遍.应该印象会很深刻 首先切换到超级管理员模式 1.安装php 一路选择y就行了 安装一些php的扩展 yum -y insta ... 
