webservice 就是一个想外界暴露出的能够通过Internet进行调用的API或者说应用程序,是一种部署在web上的对象,他们具有对象技术所承诺的所有优点,同时webservice建立在xml为主开放的web规范技术基础上,因此具有比任何现有的对象更好的开放性,时间里可互操作的分布式应用程序的新平台。webservice是一套标准,他实现了应用程序如何在web中实现可操作性,我们可以用任何语言,再任何平台上编写所需要的webservice,Webservice可以有以下定义:
自包含的,木块化的应用程序,他可以再网络中被描述,发布,查找以及调用。
基于网络分布式的模块化的组件,它执行特定的任务,遵守具体的技术规范,因而能与其他的兼容的组件进行互操作
对于互联网使用中,企业能完成特别业务需求的在线应用服务,其他企业可应用软件能共通过Internet访问来使用这些应用服务。
具有以下特征
1 良好的封装性
2 松散耦合
3使用标准协议规范
4高度可集成能力
采用以下四种技术
XML 是webservice平台表示数据的基本格式
SOAP是简单对象访问协议,规范中定义了soap消息的格式以及怎么通过http协议来使用SOAP
SOAP是基于XML语言和XSD标准的,其中XML是SOAP的数据编码格式
WSDL 是一种基于XML的用于描述webservice及其操作,参数和返回值的语言,一你为是基于XML的,所以wsdl既是机器可阅读的,又是人可阅读的,这是一个优点。
UDDI 是通用描述,发现和集成的英文缩写,一旦webservice注册到UDDI,客户就可以很方便的查找和定位到所需要的webservice。
webservice再传统系统中的使用大部分偏向于应用程序集成。
适用范围
1: 跨防火墙的通讯
2:应用程序的集成
3:B2B的集成,webservice实现B2B的集成最大的好处就是可以轻易的实现互操作性,只要把商务逻辑暴露出来,成为webservice,可以让指定的合作伙伴调用这些商务逻辑,而不管他们在什么平台上运行,使用什么语言开发,这样大大的减少了花在b2b集成上的时间和成本,让许多无法承受EDI(电子文档交换)实现集成。
4:软件和数据复用
软件重用是软件工程的核心概念之一,软件重用的形式很多,最基本的是代码重用,还有所谓的用户界面重用,但是难度最大的还是数据重用,webservice再重用代码的同时,还可以重用代码背后的数据。
概念性协议栈 | ||||
---|---|---|---|---|
WSFJ | 服务流程 | |||
UDDI | 服务发现 | |||
UDDI | 服务发布 | |||
WSDL | 服务描述 | |||
SOAP | 基于xml的消息传递 |
soap定义 | 是一种简单的轻量级的基于xml的机制,用于在网络应用程序之间进行结构化的数据交换,是一种基于xml的消息规范,他描述了数据类型的消息格式以及一整套串行化规则,包括结构化类型和数组。 |
三部分 | 一个定义描述消息内容的框架的信封 一组表述应用程序定义的数据类型实力的编码规则 表示远程过程调用和相应的约定。 |
webservice开发生命周期
构建
部署
运行
管理
==================================================================================================================================
WSDL是webservice描述语言(webservice description language)的英文缩写,踏实一个描述webservice功能的协议,
WSDL文档将webservice定义为服务访问点或者端口的集合。webservice的wsdl文档把服务访问点和消息的抽象定义与具体的服务部署和数据格式绑定分离开来,因此可以对抽象定义进行重用。一个wsdl文档一般包括下列元素
types(类型)
message(消息)
operation(操作)
portype(端口类型)
binding(绑定)
port(端口)
service(服务) 相关服务访问点的集合,它继承了一组相关的端口。
XFire 发布调用Webservice使用方法
1,引入Xfile的类库
2,服务端的编写其实同普通的业务编写没有区别,编写普通的实现业务
3.web.xml
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
4.
/WEB-INF/classes/META-INF/xfire/services.xml目录下
<?xml version="1.0" encoding="UTF-8"?>
<!-- 服务发布文件 -->
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service> <!-- service标签和它所包含的xml内容为发布成Web服务的POJO提供完整的描述 -->
<name>addService</name> <!-- Web服务被发布时所采用的唯一名称 -->
<namespace>http://test/addService</namespace> <!-- Web服务发布时所使用的命名空间 -->
<serviceClass>com.service.deploy.interfaces.DeployInterface</serviceClass> <!-- Web服务接口类的全名 -->
<implementationClass>com.service.deploy.interfaceImpl.DeployInterfaceImpl</implementationClass> <!-- Web服务实现类的全名 -->
<!-- 不需要接口时,把业务写在serviceClass标签中 -->
</service>
</beans>
5:http://localhost:8080/services/servlet/XFireServlet/addService?wsdl 访问,如果现实内容,表示发布成功。
至此发布成功。
客户端调用
public static void main(String args[])
{
XFire xfire = XFireFactory.newInstance().getXFire();
Service serviceModel = new ObjectServiceFactory().create(DeployInterface.class);
XFireProxyFactory factory = new XFireProxyFactory(xfire);
String serviceUrl = "http://localhost:8080/services/servlet/XFireServlet/addService";
DeployInterface client = null;
try {
client = (DeployInterface) factory.create(serviceModel, serviceUrl);
String temp = client.addBean("张三", "李四");
System.out.println(temp);
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
4.