JavaEE-远程调用技术-WebService之客户端的调用

JavaEE-远程调用技术-WebService之客户端的调用

概述

But

  • 现在的应用程序变得越来越复杂,甚至只靠单一的应用程序无法完成全部的工作。更别说只使用一种语言了
  • 大家在写应用程序查询数据库时,并没有考虑过为什么可以将查询结果返回给上层 的应用程序,甚至认为,这就是数据库应该做的,其实不然,这是数据库通过TCP/IP 协议与另一个应用程序进行交流的结果,而上层是什么样的应用程序,是用什么语言,数据库本身并不知道,它只知道接收到了一份协议,这就是SQL92查询标准协议

  • 既然数据库可以依据某些标准对外部其他应用程序提供服务、而且不关心对方使用 什么语言,那我们为什么就不能实现跨平台、跨语言的服务呢?只要我们用Java写的代码,可以被任意的语言所调用,我们就实现了跨平台,跨语言的服务

所谓服务:部署在服务器中为我们提供请求响应的程序
所谓协议:双方规定一种通信的方式

复杂的网络应用:

WebService定义: 顾名思义就是基于Web的服务。它使用Web(HTTP)方式接收和响应外部系统的某种请求。从而实现远程调用

Webservice理解:我们可以调用互联网上查询天气信息Web服务,然后将它嵌入到我们的程序(C/S或B/S程序)当中来,当用户从我们的网点看到天气信息时,他会认为我们为他提供了很多的信息服务,但其实我们什么也没有做,只是简单了调用了一下服务器上的一段代码而已。WebSerice可以将你的服务(一段代码)发布到互联网上让别人去调用,也可以调用别人机器上发布的WebService,就像使用自己的代码一样

WebService调用

传统_远程方法调用

socket:可以做远程方法调用,但是协议太底层化,太麻烦
http:可以做远程方法调用,但是协议需要通过双方确定,太麻烦

http有Post请求和Get请求

使用http的Post请求:

POST  xxx.action HTTP1.1
host: www.xxx
content-type:"text/html;charset=UTF-8"

name=zhangsan&age=20

使用http的Get请求

GET  xxx.action?name=zhangsan&age=20
 HTTP1.1
host: www.xxx
content-type:"text/html;charset=UTF-8"

webservice基于的soup协议

POST  xxx.action HTTP1.1
host: www.xxx
content-type:"text/xml;charset=UTF-8"

<envolpe>
	<body>
		<name>zhangsan</name>
	</body>
</envolpe>

webservice使用的协议是soap的协议,这种协议是在HTTP的协议上做的
它和HTTP的区别:
传输的内容是xml

webservice特点:
1.远程方法的调用
2.异构系统之间的调用

WSDL解析

WSDL – WebService Description Language – Web服务描述语言

它的作用相当于服务端的方法调用的说明书,你需要以说明书的约束发送消息体给服务端,然后服务端给你响应

通过XML形式说明服务在什么地方-地址
通过XML形式说明服务提供什么样的方法 – 如何调用

相当于服务端给客户端提供的一个说明书
约束了客户端和服务端之间通信的消息格式

以下是一个服务完整的WSDL文档

service:

服务访问点的集合元素,元素的name属性很重要,调用时需要使用

port:

服务访问点元素的name属性调用时需要使用, binding属性指定了服务访问点和服务类绑定元素

binding:

把服务访问点和服务类绑定在一起,不需要关心元素的内部,要关心的就是他的type属性,这个属性指定了绑定的服务类xml元素(portType)

portType:

具体的服务类的元素,在portType内部有n个operation

operation:

就是服务类中的方法

message:

输入输出的消息体,分别对应着服务端接收的参数和响应的返回值,我们前面说了消息是以soap为协议,这个协议是http方式的请求,请求体式xml,这个xml不能随便写,需要约束使用schema

types:

对输入输出的消息体的约束schema

消息体:

webservice实际是通过网络根据soap的协议传输数据,我们不可以去自己组装消息体,因为太复杂太繁琐

调用手机号码归属地查询服务

  • 打开

http://www.webxml.com.cn/zh_cn/web_services.aspx

  • 复制wsdl

  • 生成客户端代码

打开cmd,在任意新建目录下输入指令

wsimport -s . -p com.mobile http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl

自动生成的客户端代码如下

  • 将代码拖入IDEA

  • 在主函数中编写如下代码(根据注释查wsdl文档即可)
package com;

import com.mobile.MobileCodeWS;
import com.mobile.MobileCodeWSSoap;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.util.*;

class Main{
    public static void main(String[] args) {
        //1.创建服务访问点集合对象
        MobileCodeWS  mc = new MobileCodeWS() ;
        //2.获得服务点绑定的类,使用get加上port的名字
         MobileCodeWSSoap ms =  mc.getMobileCodeWSSoap() ;
        //3.调用服务端的方法
        String resulet = (String) ms.getMobileCodeInfo("18687451369",null);
        System.out.println(resulet);
    }}

电话号码是我随便乱写的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值