webService

webService是什么
webService是一个跨语言、跨平台的远程调用技术
Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。

webService的缺点:使用XML来进行传输,比较重,会传输一些与内容无关的信息,如标签的开始和结束,传输效率相对低下
webService三要素:
SOAP、WSDL、UDDI
1、SOAP(Simple Object Access Protocol)
SOAP:简单对象访问协议,是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(SOAP中有一个Envelope元素,可以将XML文件当作SOAP消息来传输,但此文件本质上还是XML文件 )的协议,它使应用程序通过 HTTP 来交换信息
即SOAP = HTTP + XML(其实是XML片段,把XML标志为SOAP消息来传输)
一般HTTP协议之间的请求和响应头之间传输的消息都是字符串类型的,SOAP协议之间响应的消息头为XML类型的
SOAP协议的HTTP的请求头里必须有Content-Type和Content-Length这两个信息,Content-Type用来表示此请求是基于SOAP的请求
例:
POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 20

2、WSDL(Web Services Description Language)
WSDL为网络服务描述语言,定义了客户和服务端应用交互传递请求和相应数据的格式和方式,文件后缀为.wsdl。
我们可以获取这个文档,然后可以看到对外发布的接口,并可以获得接口中的方法、方法中的参数、返回类型等详细信息,从而去调用此接口

3、UDDI(UniversalDescriptionDiscovery AndIntegration)
UDDI为通用描述、发现与集成服务,我们可以根据自己的需要动态查找并使用Web服务,也可以将自己的Web服务动态地发布到UDDI注册中心,供其他用户使用。

入门网址:http://www.runoob.com/soap/soap-intro.html

Java中有三种webService规范,分别是JAX-WS(JAX-RPC)、JAXM&SAAJ和JAX-RS
JAX-WS:基于SOAP协议,使用XML和HTTP来传输数据
JAXM&SAAJ:使用SOAP协议,但是暴露出更多协议信息,我们可以通过它给我们提供的接口来对其进行修改
JAX-RS:基于restful风格,可以使用XML或JSON来传输数据,较轻

何时使用webService?
同公司新旧项目的之间
不同公司的项目之间
不同语言的项目之间

让我们来体验以下免费的天气、手机信息查询网站
http://www.webxml.com.cn/zh_cn/index.aspx
在这里,接口的信息都是以webService的形式发布的,并且此网站的服务器端都有相应的实现类,我们只需要调用接口,然后服务器就会自动去调用相应的实现类并给我们返回结果;我们也可以去对接口做一定的封装,并自己实现它
我们进入天气查询栏,到这里
在这里插入图片描述点击getWeather
theCityCode为想要查询的城市,theUserID不用输入,然后点击查询
可以看到返回了一堆我们想要的数据

接下来我们自己用代码实现调用

public class webservice {
	public void getWeather(String weather ,String userID ) throws Exception{
        URL url=new URL("http://ws.webxml.com.cn/WebServices/WeatherWS.asmx/getWeather?theCityCode="+weather+
                "&theUserID="+userID);
        HttpURLConnection conn=(HttpURLConnection) url.openConnection();
        conn.setConnectTimeout(5000);
        conn.setRequestMethod("GET");
        if(conn.getResponseCode()==HttpURLConnection.HTTP_OK){ 
            InputStream is=conn.getInputStream(); 
            ByteArrayOutputStream out=new ByteArrayOutputStream();
            byte[] buffer=new byte[1024];
            int len=-1;
            while((len=is.read(buffer))!=-1){
                out.write(buffer, 0, len);
            }
            System.out.println("天气信息:"+out.toString());
            boas.close();
            is.close();
        }
    }
	
	public static void main(String[] args) throws Exception {
		new webservice().get("南通", "");
	}
	
}

这样,我们就完成了自己用代码调用接口查询天气的过程

在开发时我们一般使用框架去开发webService,如CXF等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值