当前位置: 移动技术网 > IT编程>开发语言>Java > WebService教程详解(一)

WebService教程详解(一)

2019年07月22日  | 移动技术网IT编程  | 我要评论

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:

package com.itcast; 
import javax.jws.webmethod; 
import javax.jws.webservice; 
import javax.jws.soap.soapbinding; 
import javax.jws.soap.soapbinding.style; 
import javax.xml.ws.endpoint; 
@webservice(targetnamespace="http://loalhost:9999/helloworld") 
@soapbinding(style=style.rpc)//只支持rpc的消息风格 
public class helloworld { 
//以下通过@webmethod注解,对外公开方法 
@webmethod 
public string sayhello(){ 
return "helloworld"; 
} 
public static void main(string[] args) { 
endpoint.publish("http://localhost:9999/helloworld",new helloworld()); 
} 
} 

2:以下是在jdk1.6.0_24上发布的webservice代码:

package com.itcast; 
import javax.jws.webservice; 
import javax.xml.ws.endpoint; 
@webservice//注意只有此一个注解,此注解也是必须的,默认的soap消息风格为:document 
public class helloworld { 
public string sayhello(){ 
return "helloworld"; 
} 
public static void main(string[] args) { 
endpoint.publish("http://localhost:9999/helloworld",new helloworld()); 
} 
}

第一个webservice服务

package com.itcast; 
import javax.jws.webservice; 
import javax.xml.ws.endpoint; 
/** 
* 第一个webservice服务应用 
*/ 
//通过注解,标明此类发布为一个webservice 
@webservice 
public class helloworld { 
public string sayhello(){ 
return "hello world"; 
} 
//在main方法中,使用javax.xml.ws.endpoint端点发布一个应用 
public static void main(string[] args) { 
endpoint.publish("http://127.0.0.1:9999/helloworld", 
new helloworld()); 
} 
}

代码说明:helloworld类的所有非静态公开方法将对外部暴露.

wsimport工具说明:

 wsimport是jdk自带的,可以根据wsdl文档生成客户端调用代码的工具.当然,无论服务器端的webservice是用什么语言写的,都将在客户端生成java代码.服务器端用什么写的并不重要.

 wsimport.exe位于java_home\bin目录下.

常用参数为:

• -d<目录> - 将生成.class文件。默认参数。

• -s<目录> - 将生成.java文件。

• -p<生成的新包名> -将生成的类,放于指定的包下。

(wsdlurl) - http://server:port/service?wsdl,必须的参数

使用:

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:输入以下命令:

wsimport –s . http://127.0.0.1:9999/helloworld?wsdl

参数说明:-s是指编译出源代码文件,后面的.(点)指將代碼放到當前目錄下.

最后面的http….是指获取wsdl说明书的地址.

5:此时,将生成.java文件和.class文件.(都包含原始包名).将代码copy到你的项目中.(只拷贝java文件)

6:在新的项目中,新一个类,(可位于任意包下),对上面生成的代码进行调用,见下一页ppt.

7:wsimport其他参数说明,我们经常使用的参数为-d,-s,-p

-d<目录>将会生成.class文件.

示例:wsimport –d . http://127.0.0.1:9999/helloworld?wsdl

-s<目录>将会生成.java文件.

示例:wsimport –s . http://127.0.0.1:9999/helloworld?wsdl

-p<包名>将生成的文件(.java或是.class修改成指定的包名)

示例:wsimport -s . -p com.beijing.itcast http://127.0.0.1:9999/helloworld?wsdl

对于-p参数,注意包名的修改,它将所生成类,全部置于通过-p指定的包下.(演示)

需要说明的是,当仅使用-p参数时,它也将同时使用-d即编译成.class文件. –d参数写或不写,它都在那里,不离不弃.

runmain.java的源代码如下:

package com.leaf; 
import com.itcast.helloworld; 
import com.itcast.helloworldservice; 
/** 
* 通过调用生成的类,来调用远程代码 
*/ 
public class runmain { 
public static void main(string[] args) { 
//从helloworldserice的gethelloworldport方法中返回调用接口 
helloworld helloworld = 
new helloworldservice().gethelloworldport(); 
string str = helloworld.sayhello(); //执行调用 
system.err.println(str);//返回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、它本身就是为了跨平台或跨语言而设计的。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网