WebService详细教程
本⽂转载:
WebService,顾名思义就是基于Web的服务。它使⽤Web(HTTP)⽅式,接收和响应外部系统的某种请求,接下来通过本⽂给⼤家介绍WebService教程详解,对webservice教程感兴趣的朋友⼀起学习吧。
Web Services 可以将应⽤程序转换为⽹络应⽤程序。
通过使⽤ Web Services,您的应⽤程序可以向全世界发布信息,或提供某项功能。
Web Services 可以被其他应⽤程序使⽤。
通过 Web Services,您的会计部门的 Win 2k 服务器可以与 IT 供应商的 UNIX 服务器相连接。
基本的 Web Services 平台是 XML+HTTP。
Web services 使⽤ XML 来编解码数据,并使⽤ SOAP 来传输数据。
什么是webService
WebService,顾名思义就是基于Web的服务。它使⽤Web(HTTP)⽅式,接收和响应外部系统的某种请求。从⽽实现远程调⽤.
1:从WebService的⼯作模式上理解的话,它跟普通的Web程序(⽐如ASP、JSP等)并没有本质的区别,都是基于HTTP传输协议的程序。
2:WebService所使⽤的数据均是基于XML格式的。⽬前标准的WebService在数据格式上主要采⽤SOAP协议。SOAP协议实际上就是⼀种基于XML编码规范的⽂本协议。
webService的技术⽀持
Web Service平台需要⼀套协议来实现分布式应⽤程序的创建。任何平台都有它的数据表⽰⽅法和类型系统。要实现互操作性,Web Service平台必须提供⼀套标准的类型系统,⽤于沟通不同平台、编程语⾔和组件模型中的不同类型系统。⽬前这些协议有:
XML和XSD
可扩展的标记语⾔XML 是Web Service平台中表⽰数据的基本格式。除了易于建⽴和易于分析外,XML主要的优点在于它既与平台⽆关,⼜与⼚商⽆关。XML是由万维⽹协会(W3C)创建,W3C制定的XML SchemaXSD 定义了⼀套标准的数据类型,并给出了⼀种语⾔来扩展这套数据类型。
Web Service平台是⽤XSD来作为数据类型系统的。当你⽤某种语⾔如VB. NET或C# 来构造⼀个Web Service时,为了符合Web Service标准,所有你使⽤的数据类型都必须被转换为XSD类型。如想让它使⽤在不同平台和不同软件的不同组织间传递,还需要⽤某种东西将它包装起来。这种东西就是⼀种协议,如 SOAP。
SOAP
SOAP即简单对象访问协议(Simple Object Access Protocal),它是⽤于交换XML编码信息的轻量级协议。它有三个主要⽅⾯:XML-envelope为描述信息内容和如何处理内容定义了框架,将程序对象编码成为XML对象的规则,执⾏远程过程调⽤(RPC)的约定。SOAP可以运⾏在任何其他传输协议上。例如,你可以使⽤ SMTP,即因特⽹电⼦邮件协议来传递SOAP消息,这可是很有诱惑⼒的。在传输层之间的头是不同的,但XML有效负载保持相同。
Web Service 希望实现不同的系统之间能够⽤“软件-软件对话”的⽅式相互调⽤,打破了软件应⽤、⽹站和各种设备之间的格格不⼊的状态,实现“基于Web⽆缝集成”的⽬标。
WSDL
Web Service描述语⾔WSDL 就是⽤机器能阅读的⽅式提供的⼀个正式描述⽂档⽽基于XML的语⾔,
⽤于描述Web Service及其函数、参数和返回值。因为是基于XML的,所以WSDL既是机器可阅读的,⼜是⼈可阅读的。
UDDI
UDDI 的⽬的是为电⼦商务建⽴标准;UDDI是⼀套基于Web的、分布式的、为Web Service提供的、信息注册中⼼的实现标准规范,同时也包含⼀组使企业能将⾃⾝提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。调⽤RPC与消息传递
Web Service本⾝其实是在实现应⽤程序间的通信。我们现在有两种应⽤程序通信的⽅法:RPC远程过程调⽤ 和消息传递。使⽤RPC 的时候,客户端的概念是调⽤服务器上的远程过程,通常⽅式为实例化⼀个远程对象并调⽤其⽅法和属性。RPC系统试图达到⼀种位置上的透明性:服务器暴露出远程对象的接⼝,⽽客户端就好像在本地使⽤的这些对象的接⼝⼀样,这样就隐藏了底层的信息,客户端也就根本不需要知道对象是在哪台机器上。
如何发布⼀个WebService?
1、⽤Jdk1.6.0_21以后的版本发布⼀个WebService服务.并通过地址栏查看它的wsdl⽂档.
2、通过wsimport⽣成客户端代码,调⽤并查看运⾏的结果.(学会如何调⽤是我们的重点).
需要注意的是,jdk1.6._07以后jdk版本发布WebService时必须要完整的对代码进⾏注解,如果使⽤的是jdk1.6.0_21以后版本,因为它已经内含了ws2.1所以,可以只对类添加@WebService的注解.
以下是两段不同的代码:
在jdk1.6.0_13的版本上发布的ws:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18package
com.itcast;
import
javax.jws.WebMethod;
import
javax.jws.WebService;
import
javax.jws.soap.SOAPBinding;
import
javax.jws.soap.SOAPBinding.Style; import
@WebService
(targetNamespace=
""
)
@SOAPBinding
(style=Style.RPC)
//只⽀持RPC的消息风格
public
class
HelloWorld {
//以下通过@WebMethod注解,对外公开⽅法@WebMethod
public
String sayHello(){
return
"HelloWorld"
;
}
public
static
void
main(String[] args) {
Endpoint.publish(
""
,
new
HelloWorld());
}
}
2:以下是在jdk1.6.0_24上发布的WebService代码:
1 2 3 4 5package com.itcast;
import javax.jws.WebService;
l.ws.Endpoint;
@WebService
//注意只有此⼀个注解,此注解也是必须的,默认的SOAP消息风格为:DOCUMENT public class HelloWorld {
public String sayHello(){
return
6 7 8 9 10 11 12"HelloWorld"
;
}
public static void main(String[] args) { Endpoint.publish(
""
,
new
HelloWorld());
}
}
第⼀个WebService服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18package com.itcast;
import javax.jws.WebService;
l.ws.Endpoint;
/**
* 第⼀个WebService服务应⽤
*/
//通过注解,标明此类发布为⼀个WebService
@WebService
public class HelloWorld {
public String sayHello(){
return
"Hello World"
;
}
//在main⽅法中,使⽤l.ws.Endpoint端点发布⼀个应⽤public static void main(String[] args) {
Endpoint.publish(
""
,
new
HelloWorld());
}
}
代码说明:HelloWorld类的所有⾮静态公开⽅法将对外部暴露.
Wsimport⼯具说明:
wsimport是jdk⾃带的,可以根据wsdl⽂档⽣成客户端调⽤代码的⼯具.当然,⽆论服务器端的WebService是⽤什么语⾔写的,都将在客户端⽣成Java代码.服务器端⽤什么写的并不重要.
<位于JAVA_HOME\bin⽬录下.
常⽤参数为:
• -d<⽬录> - 将⽣成.class⽂件。默认参数。
• -s<⽬录> - 将⽣成.java⽂件。
• -p<⽣成的新包名> -将⽣成的类,放于指定的包下。
使⽤:
1:可以通过java –version检查你当前的版本号.如果版本太低可以安装⾼版本的jdk.
或直接将别⼈已安装好的jdk⽬录拷贝到你的机器如D:\jdk1.6.0_24⽬录下.
因为以前的环境变量已经设置成以前⽼版本的jdk⽬录,即JAVA_HOME和PATH两个环境变量.
可以再重新设置⼀下环境变量为:JAVA_HOME=D:\jdk1.6.0_24,path=%JAVA_HOME%\bin,
重新设置了环境变量后,要重新打开⼀个doc(命令⾏)窗⼝.才⽣效.
如果不想修改原来已经配置好的环境变量,可以命令⾏窗⼝输⼊以下命令,使jdk1.6.0_24⽣效:
set path = D:\jdk1.6.0_24\bin;%PATH%(回车即可)
再通过java –version查看jdk的版本号是否已经发⽣变化.
2:转到⼀个相对⼲净的⽬录下,我在d盘上新建⽴⼀个⽬录名为:ws,并转到此⽬录下.
3:开启你的webService.
4:输⼊以下命令:
参数说明:-s是指编译出源代码⽂件,后⾯的.(点)指將代碼放到當前⽬錄下.
最后⾯的http….是指获取wsdl说明书的地址.
5:此时,将⽣成.java⽂件和.class⽂件.(都包含原始包名).将代码Copy到你的项⽬中.(只拷贝java⽂件)
6:在新的项⽬中,新⼀个类,(可位于任意包下),对上⾯⽣成的代码进⾏调⽤,见下⼀页ppt.
7:wsimport其他参数说明,我们经常使⽤的参数为-d,-s,-p
-d<⽬录>将会⽣成.class⽂件.
-
s<⽬录>将会⽣成.java⽂件.
-p<;包名>将⽣成的⽂件(.java或是.class修改成指定的包名)
对于-p参数,注意包名的修改,它将所⽣成类,全部置于通过-p指定的包下.(演⽰)
需要说明的是,当仅使⽤-p参数时,它也将同时使⽤-d即编译成.class⽂件. –d参数写或不写,它都在那⾥,不离不弃. RunMain.java的源代码如下:
1 2 3 4 5 6 7 8 9 10package
com.leaf;
import
com.itcast.HelloWorld;
import
com.itcast.HelloWorldService;
/**
* 通过调⽤⽣成的类,来调⽤远程代码
*/
public
class
RunMain {
public
static
void
main(String[] args) {
//从HelloWorldSerice的getHelloWorldPort⽅法中返回调⽤接⼝HelloWorld helloWorld =
11 12 13 14 15new
网络上xml是什么意思
HelloWorldService().getHelloWorldPort();
String str = helloWorld.sayHello();
//执⾏调⽤
//返回HelloWorld字符串
}
}
WebService与普通Web程序的区别
1、 WebService只采⽤HTTP POST⽅式传输数据,不使⽤GET⽅式;
1) Tttp post的contentType为
(1)application/x-www-form-urlencoded
2) WebService的contentType为
(2) Text/xml soap1.1
(3) application/soap+xml –soap1.2
2、WebService从数据传输格式上作了限定。
WebService所使⽤的数据均是基于XML格式的。⽬前标准的WebService在数据格式上主要采⽤SOAP协议。SOAP协议实际上就是⼀种基于XML编码规范的⽂本协议。
WebService和web服务器的区别:
我们可以把WebService看作是Web服务器上应⽤;反过来说,Web服务器是WebService运⾏时所必需的容器。这就是它们的区别和联系。
WebService的特点:
1、 WebService通过HTTP POST⽅式接受客户的请求
2、 WebService与客户端之间⼀般使⽤SOAP协议传输XML数据.
3、它本⾝就是为了跨平台或跨语⾔⽽设计的。
使⽤⼯具的原因:
1、使⽤⼯具可以更好的了解WebService请求的过程
2、使⽤⼯具WsExplore可以获取SOAP数据发送和接收的格式
3、使⽤⼯具Tcp/Ip Monitor可以监控请求头和响应头的具体数据
什么是SOAP?
SOAP是⼀种基于XML编码规范的⽂本协议,简单的说SOAP就是在HTTP的基础上传输XML数据,以实现远程调⽤【⽆论你的服务端是什么语⾔书写的,只要接收SOAP协议的XML数据,并返回SOAP协议的XML数据,就可以被任何语⾔调⽤】
使⽤WsExplorer实例:验证qq是否在线
采⽤qqOnlineWebServiceSoap中的qqCheckOnLine验证时,返回的是
qqCheckOnlineResponse
qqCheckOnlineResult (string): N
点击source可以看到详细信息,信息如下:
1:这是发出的消息格式:
代码如下:
/soap/envelope/" xmlns:q0="WebXml/"
xmlns:xsd="/2001/XMLSchema"
xmlns:xsi="/2001/XMLSchema-instance">
-
-
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论