webservice(第一天)

1   课程安排
什么是webservice
Webservice入门程序
Webservice的应用场景
Webservice的三要素
WSDL:web服务描述语言
SOAP:简单对象访问协议
UDDI:目录服务
Webservice的四种客户端调用方式
生成客户端调用方式
客户端编程调用方式
HttpURLConnecton调用方式
Ajax调用方式
深入开发:用注解修改WSDL内容




2   什么是webservice
2.1什么是远程调用技术

远程调用数据定义:是系统和系统之间的调用


2.2 Webservice的原理图
Webservice是使用Http发送SOAP协议的数据的一种远程调用技术
Webservice要开发服务端
Webservice要开发客户端
Webservice客户端开发需要阅读服务端的使用说明书(WSDL)


3  Webservice的入门程序

   需求

l  服务端:发布一个天气查询服务,接收客户端城市名,返回天气数据给客户端

l  客户端:发送城市名称给服务端,接收服务端的返回天气数据,打印

实现
服务端:
开发步骤:
第一步:创建SEI(Service Endpoint Interface)接口,本质上就是Java接口

public interface WeatherInterface {

	public String queryWeather(String cityName);
}

l     第二步:创建SEI实现类,在实现类上加入@WebService

 

@WebService
public class WeatherInterfaceImpl implements WeatherInterface{

	@Override
	public String queryWeather(String cityName) {
		// TODO Auto-generated method stub
		System.out.println("from city...."+cityName);
		String weather = "大晴天";
		return weather;
	}

}
  第三步:发布服务,Endpoint发布服务,publish方法,两个参数:1.服务地址;2.服务实现类

public class WeatherService {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Endpoint.publish("http://127.0.0.1:12345/weather", new WeatherInterfaceImpl());
	}

l  第四步:测试服务是否发布成功,通过阅读使用说明书,确定客户端调用的接口、方法、参数和返回值存在,证明服务发布成功。

Ø  WSDL地址:服务地址+”?wsdl”

Ø  WSDL阅读方式:从下往上




3.3.2客户端:
开发步骤
     第一步:wsimport命令生成客户端代码
wsimport -s . http://127.0.0.1:12345/weather?wsdl
第二步:根据使用说明书,使用客户端代码调用服务端
第一步:创建服务视图,视图是从service标签的name属性获取
第二步:获取服务实现类,实现类从portType的name属性获取
第三步:获取查询方法,从portType的operation标签获取

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		WeatherInterfaceImplService weatherInterfaceImplService = new WeatherInterfaceImplService();
		WeatherInterfaceImpl interfaceImpl = weatherInterfaceImplService.getPort(WeatherInterfaceImpl.class);
		String queryWeather = interfaceImpl.queryWeather("北京+天津");
		System.out.println(queryWeather);
	}

3.4 Webservice的优缺点

优点:发送方式采用http的post发送,http的默认端口是80,防火墙默认是不拦截。采用XML格式封装数据,是跨平平台的。webservice是支持面向对象。

缺点:采用xml格式封装数据,所以在传输过程中,要传输而外的标签,随着SOAP协议的不断完善,标签越来越大,导致webservice性能下降。

4   Webservice应用场景

4.2适用场景
发布一个服务(对内/对外),不考虑客户端类型,不考虑性能,建议使用webservice
服务端已经确定使用webservice,客户端不能选择,必须使用webservice

4.3 不适用场景
考虑性能时不建议使用webservice
同构程序下不建议使用webservice,比如java 用RMI,不需要翻译成XML的数据

5   WSDL

定义:

WSDL即web服务描述语言,他是webservice服务端使用说明书,说明服务端接口、方法、参数和返回值,WSDL是随服务发布成功,自动生成,无需编写。

文档结构:


<service>服务视图,webservice的服务节点,它包括了服务端点

<binding>为每个服务端点定义消息格式和协议细节

<portType>服务端点,描述web service可执行的操作方法,以及相关的消息,通过binding指向portType。

<message>定义一个操作(方法)的数据参数(可有多个参数)

<types>定义webservice使用的全部参数类型


6  SOAP

定义

SOAP即简单对象访问协议,他是使用http发送的XML格式的数据,它可以跨平台,跨防火墙,SOAP不是webservice的专有协议。

SOAP=http+xml


6.2 协议格式

必须有Envelope元素,此元素将整个XML文档标识为一条SOAP消息

可选的Header元素,包含头部信息

必须有Body元素,包含所有的调用和响应信息

可选的Fault元素,提供有关在处理此信息所发生错误的信息

6.3 TCP/IP Monitor

请求

POST /weather HTTP/1.1
Accept: text/xml, multipart/related
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://ws.jaxws.ws.itcast.cn/WeatherInterfaceImpl/queryWeatherRequest"
User-Agent: JAX-WS RI 2.2.4-b01
Host: 127.0.0.1:54321
Connection: keep-alive
Content-Length: 214

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body><ns2:queryWeather xmlns:ns2="http://ws.jaxws.ws.itcast.cn/"><arg0>北京</arg0></ns2:queryWeather>
</S:Body>
</S:Envelope>
响应
HTTP/1.1 200 OK
Transfer-encoding: chunked
Content-type: text/xml; charset=utf-8
Date: Thu, 26 Nov 2015 03:14:29 GMT

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:queryWeatherResponse xmlns:ns2="http://ws.jaxws.ws.itcast.cn/"><return>晴</return></ns2:queryWeatherResponse>
</S:Body>
</S:Envelope>

SOAP1.2

Ø  如果想发布SOAP1.2服务端,需要在服务端引入第三方JARjaxws-ri-2.2.8

Ø  在实现类上加入如下注解

@BindingType(SOAPBinding.SOAP12HTTP_BINDING)

请求

POST /weather HTTP/1.1
Accept: application/soap+xml, multipart/related
Content-Type: application/soap+xml; charset=utf-8;
action="http://ws.jaxws.ws.itcast.cn/WeatherInterfaceImpl/queryWeatherRequest"
User-Agent: JAX-WS RI 2.2.4-b01
Host: 127.0.0.1:54321
Connection: keep-alive
Content-Length: 212

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
<S:Body><ns2:queryWeather xmlns:ns2="http://ws.jaxws.ws.itcast.cn/"><arg0>北京</arg0></ns2:queryWeather>
</S:Body>
</S:Envelope>
响应
HTTP/1.1 200 OK
Transfer-encoding: chunked
Content-type: application/soap+xml; charset=utf-8
Date: Thu, 26 Nov 2015 03:25:24 GMT

<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
<S:Body>
<ns2:queryWeatherResponse xmlns:ns2="http://ws.jaxws.ws.itcast.cn/"><return>晴</return></ns2:queryWeatherResponse>
</S:Body>
</S:Envelope>
SOAP1.1和SOAP1.2区别

相同点:

   请求发送方式相同:都是使用POST

   协议内容相同:都有Envelope和Body标签

不同点:

   数据格式不同:content-type不同

SOAP1.1:text/xml;charset=utf-8
SOAP1.2:application/soap+xml;charset=utf-8

   命名空间不同:

SOAP1.1:http://schemas.xmlsoap.org/soap/envelope/
SOAP1.2:http://www.w3.org/2003/05/soap-envelope


























































评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值