一.WebService概述
1.WebService,顾名思义就是基于Web的服务。它使用Web(HTTP)方式,接收和响应外部系统的某种请求。从而实现远程调用.
2.我们可以调用互联网上查询天气信息Web服务,然后将它嵌入到我们的程序(C/S或B/S程序)当中来,当用户从我们的网点看到天气信息时,他会认为我们为他提供了很多的信息服务,但其实我们什么也没有做,
只是简单调用了一下服务器上的一段代码而已。
3.学习WebService可以将你的服务(一段代码)发布到互联网上让别人去调用,也可以调用别人机器上发布的WebService,就像使用自己的代码一样.
简单理解:
(1)WebService就是两个系统的远程调用
(2)WebService之间的调用时跨语言的调用
二.名词解释
名词1:XML.Extensible Markup Language -扩展性标记语言
•XML,用于传输格式化的数据,是Web服务的基础。
•namespace-命名空间。
•xmlns=“http://itcast.cn” 使用默认命名空间。
•xmlns:
itcast=“http://itcast.cn”使用指定名称的命名空间。
名词2:WSDL – WebService Description Language – Web服务描述语言。
•通过XML形式说明服务在什么地方-地址。
•通过XML形式说明服务提供什么样的方法 – 如何调用。
名词3:SOAP-Simple Object Access Protocol(简单对象访问协议)
•SOAP作为一个基于XML语言的协议用于有网上传输数据。
•
SOAP =
在
HTTP
的基础上
+XML
数据。
•SOAP是基于HTTP的。
•SOAP的组成如下:
•
Envelope – 必须的部分。以XML的根元素出现。
•Headers – 可选的。
•
Body – 必须的。在body部分,包含要执行的服务器的方法。和发送到服务器的数据。
简单理解:
WSDL:为客户端提供的一个说明书,便于调用者调用.说明书是从下往上看的.
SOAP协议:因为是在http上发数据,所以必须先遵循http协议,xml部门即SOAP协议,必须包含Envelope元素和Body元素
三.如何发布一个WebService?
1.
用
Jdk1.6.0_21以后的版本发布一个WebService服务.(这里是服务端)
2.与Web服务相关的类,都位于javax.jws.*包中。
主要类有:
@
WebService
- 它是一个注解,用在类上指定将此类发布成一个
ws
.
Endpoint –
此类为端点服务类,它的方法
publish
用于将一个已经添加了
@
WebService
注解对象绑定到一个地址的端口上。
3.代码:
package cn.itcast.service;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
/**
* 将Java类标记为实现Web Servie,或者将Java接口标记定义Web Servie接口
* @author asuspc
*
*/
@WebService //注释:标记此类是一个Web服务类
public class HelloService {
//一个标准的服务端必须定义一个非静态不能是final的方法
public String sayHello(String name,int age){
System.out.println("sayHello is called...");
return "hello"+name;
}
public String sayHi(String name){
System.out.println("sayHello is called...");
return "hello"+name;
}
public static void main(String[] args) {//publish内部开启了一个新的线程
Endpoint.publish("http://localhost:5678/hello", new HelloService());
System.out.println("Server ready..");
}
}
(1)启动服务后可以看到控制台打印的数据...Server ready..
(2)访问http://localhost:5678/hello?wsdl
四.客户端与服务端的交互
1.使用Java jdk自带的wsimport命令..可以再jre的bin目录查看到此命令..
2.点击回撤,可以再E盘的根目录下看到命令生成的代码..同时将命令生成的文件夹拷贝到myeclipse中
3.编写App测试类
package cn.itcast.service;
/**
* 调用服务端的客户端:地址栏输入http://125.217.57.91:5678/hello?wsdl
* @author asuspc
*
*/
public class App {
public static void main(String[] args) {
HelloServiceService hss=new HelloServiceService();//<service name="HelloServiceService">
HelloService soap = hss.getHelloServicePort();//<port name="HelloServicePort" binding="tns:HelloServicePortBinding">
String sayHello = soap.sayHello("李卫康");
System.out.println(sayHello);
System.out.println(soap.getClass().getName());//这说明了soap的实现类是一个代理类
}
}
4.App类是根据wsdl说明书得到的
5.运行结果
hello李卫康
com.sun.proxy.$Proxy22
com.sun.proxy.$Proxy22