《Java网络编程精解讲义课件》由会员分享,可在线阅读,更多相关《Java网络编程精解讲义课件(32页珍藏版)》请在金锄头文库上搜索。
1、Java网络编程精解,作者:孙卫琴 参考书籍: 技术支持网址:www.javathinker.org,第17章 Web服务简介,参考Java网络编程精解的第17章,17.1 SOAP 简介 17.2 建立Apache AXIS环境 17.3 在Tomcat上发布Apache-AXIS Web应用 17.4 创建SOAP服务 17.5 管理SOAP服务 17.6 创建和运行SOAP客户程序 17.7 发布JWS服务,第17章 Web服务简介,Web服务确立了一种基于Internet网的分布式软件体系结构。 一个系统向另一个系统公开的服务被统称为Web服务。 Web服务主要涉及以下两个要素: SO
2、AP(Simple Object Access Protocol)协议:基于XML 语言的数据交换协议。 WSDL(Web Service Description Language)语言:基于XML语言的Web服务描述语言,与CORBA的IDL语言的作用类似。 本课把Web服务也称为SOAP服务。本课首先介绍了SOAP的基本概念,接着介绍了一个实现了SOAP的Web服务框架:Apache AXIS。,17.1 SOAP简介,SOAP(Simple Object Access Protocol),即简单对象访问协议,是在分布式的环境中交换数据的简单协议,它以XML作为数据传送语言。 SOAP采用
3、的通信协议可以是HTTP/HTTPS(现在用得最广泛)协议,也可以是SMTP/POP3协议。,17.1 SOAP简介,17.1 SOAP简介,SOAP系统有两种工作模式,一种称为RPC(Remote Procedure Call),另一种叫法不统一,在Microsoft的文档中称做Document-Oriented,而在Apache的文档中,称为Message-Oriented。下文将集中讨论RPC。 可以把SOAP RPC简单的理解为这样一个开放协议:SOAP=RPC+HTTP+XML。它有以下特征: 采用HTTP作为通信协议,采用客户/服务模式。 RPC作为统一的远程方法调用途径。 传送的
4、数据使用XML语言,允许服务提供者和客户经过防火墙在Internet上进行通信。,17.1 SOAP简介,17.1 SOAP简介,SOAP客户和SOAP服务器之间采用符合SOAP规范的XML数据进行通信。例如以下是一个SOAP服务器向SOAP客户发回的响应数据: Hello:weiqin ,17.2 建立Apache AXIS环境,建立Apache AXIS环境需要的文件的清单和下载地址参见表17-1。,17.2 建立Apache AXIS环境,把axis-1_1.zip解压到本地硬盘,假定它的根目录为。 在/webapps子目录下有一个axis子目录,它是一个用于发布SOAP服务的Web应用
5、,下文称其为Apache-AXIS Web应用。,17.3 在Tomcat上发布Apache-AXIS Web应用,用Tomcat服务器来发布Apache-AXIS Web应用的步骤如下。 (1)把activation.jar,mail.jar和xerces.jar拷贝到/lib目录下。 (2)把/webapps目录下的整个axis子目录拷贝到/webapps目录下。,17.3 在Tomcat上发布Apache-AXIS Web应用,启动Tomcat服务器,再通过浏览器访问 http:/localhost:8080/axis,将会看到如图17-3所示的axis的主页。,17.4 创建SOAP服
6、务,Tomcat充当Apache-AXIS Web应用的容器。 Apache-AXIS Web应用又充当SOAP服务的容器。 SOAP客户程序可以通过Apache AXIS API来发出RPC请求,访问SOAP服务。,17.4 创建SOAP服务,17.4 创建SOAP服务,创建基于RPC的SOAP服务包括两个步骤: (1)创建提供SOAP服务的Java类。 (2)创建SOAP服务的发布描述符文件。,17.4.1 创建提供SOAP服务的Java类,以下是一个简单的SOAP服务类,它包含了一个方法sayHello(): package mypack; public class HelloServi
7、ce public String sayHello(String username) return Hello:+username; 编译这个Java类不需要在classpath中引入任何与AXIS相关的JAR文件。编译完毕,应该把HelloService.class文件拷贝到以下目录: /webapps/axis/WEB-INF/classes/mypack,17.4.2 创建SOAP服务的发布描述符文件,Apache AXIS使用Web服务发布描述符文件WSDD(Web Service Deployment Descriptor)来发布SOAP服务。 以下是HelloService的发布描
8、述文件,名为deploy.wsdd: ,17.5 管理SOAP服务,Apache AXIS工程提供了两种管理SOAP服务的工具,一种是基于Web的,还有一种是基于命令行的。 这两种工具都能提供发布和删除SOAP服务的功能。,17.5.1 发布SOAP服务,发布SOAP服务时,只要指定wsdd文件即可,使用方法如下: java org.apache.axis.client.AdminClient deploy.wsdd 以上命令将把deploy.wsdd文件中声明的SOAP服务发布到SOAP服务器中。,17.5.1 发布SOAP服务,17.5.2 删除SOAP服务,删除SOAP服务时,只要指定包
9、含元素的wsdd文件即可,使用方法如下: java org.apache.axis.client.AdminClient undeploy.wsdd 运行以上命令,将删除helloservice服务。,17.6 创建和运行SOAP客户程序,SOAP RPC客户程序可以通过Apache AXIS API发出RPC请求,调用SOAP服务的方法,例程17-1(HelloClient.java)是访问helloservice服务的sayHello方法的客户程序。 例程17-1 HelloClient.java public class HelloClient public static void ma
10、in(String args) try String username=Guest; if(args.length!=0) username=args0; String endpoint = http:/localhost:8080/axis/services/helloservice; Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress( new .URL(endpoint) ); call.setOperationName(new QN
11、ame(urn:helloservice, sayHello) ); String ret = (String) call.invoke( new Object username ); System.out.println(ret); catch (Exception e) e.printStackTrace(); ,17.6 创建和运行SOAP客户程序,图17-9 客户程序访问名为helloservice的Web服务的时序图,17.7 发布JWS服务,所谓JWS(Java Web Service)服务,就是Java Web服务。 AXIS允许把Java源文件的扩展名改为jws,然后把它拷贝到
12、/webapps/axis目录下,这样AXIS会自动编译JWS文件,并把它加入到JWS服务中。,17.7 发布JWS服务,如果要把HelloService作为JWS服务来发布,只要将HelloService.java改名为HelloService.jws,再把HelloService.jws拷贝到以下位置: /webapps/axis/HelloService.jws 然后访问以下URL: http:/localhost:8080/axis/HelloService.jws?method=sayHello¶meter=weiqin,17.7 发布JWS服务,练习题1,问题:关于SOAP
13、,以下哪些说法正确? 选项: a) SOAP是基于XML语言的数据交换协议。 b) SOAP可以建立在HTTP协议基础之上。 c) SOAP要求服务器端与客户端都是Java程序。 d) SOAP属于应用层的协议。 答案: a,b,d,练习题2,问题:关于WSDL,以下哪些说法正确? 选项: a) WSDL的全称为:Web Service Description Language b) WSDL是Web服务的描述语言。 c) WSDL的作用与CORBA中的IDL相似。 d) WSDL是基于HTML的语言。 答案: a,b,c,练习题3,问题:用Tomcat服务器来发布Apache-AXIS We
14、b应用时,Tomcat有什么作用? 选项: a) 接收HTTP请求 b) 解析HTTP请求 c) 充当Apache-AXIS Web应用的容器 d) 把RPC响应包装为HTTP响应,并发送HTTP响应。 e) 解析RPC请求,对其中的参数进行反序列化。 f) 把RPC响应包装为HTTP响应,并发送HTTP响应。 答案: a,b,c,d,练习题4,问题:Apache-AXIS Web应用有什么作用? 选项: a) 接收HTTP请求 b) 解析HTTP请求 c) 解析RPC请求,对其中的参数进行反序列化。 d) 调用相应的SOAP服务 e) 把SOAP服务的返回结果包装为RPC响应。 答案: c,d,e,练习题5,问题:对于建立在HTTP协议上的SOAP,RPC请求与HTTP请求之间是什么关系? 选项: a) RPC请求是HTTP请求的正文部分。 b) HTTP请求是RPC请求的正文部分。 c) RPC请求是HTTP请求的头部分。 d) 两者没有关系。 答案: a,练习题6,问题:对于本课介绍的例子,哪些组件必须直接利用Socket来接收和发送数据? 选项: a) 服务器端的HelloService类 b) Tomcat服务器 c) Apache-AXIS Web应用 d)客户端的Apache-AXIS API e) 客户端的HelloClient类 答案: b,d,