Webservice 基础概念
1.类似天气预报数据 , 就是气象局对外提供的公共服务 .
2.Webservice 就是 异步系统的数据交互 , 数据调用 是跨语言的 , 跨平台的, 如 : java / c# / c++ / php / 手机终端/ 等 , 原因就是它们之间实际使用 xml 的数据格式进行交互 . json 也可以
3.Webservice : 2端的一个概念 : 服务提供端(生产者) 和 调用服务者(消费者) . 如 : 银行, 也不是想象的那么庞大 , 就一个核心系统(钱的存取), 然后又很多的外围系统 (网银系统 / atm系统等) , 外围系统最终都要与核心进行交互 , 这时就用到了 webservice .
4.WebService是 SOA (面向服务架构 ) 实现方案
(将软件业务做成服务, 在进行服务 定制整合 )
5.企业内部经常用 web service 进行分布式系统 整合 (crm客户管理 与 业务 bos 与 财务系统的调用)
6.Webservice 基于 http协议 , http底层基于 socket 协议
7.webservice的基础就是socket式的服务端 和 客户端的数据交换 , 输入流 和 输出流,最底层的处理 , 后面的具体使用 , 都做了封装处理
8.如果涉及到 2 端的交互 , 就会有相关的协议规范 .
9. 概念
l soa : 面向服务框架
l xml : extensible markup language 扩展标记语言
u namespace-命名空间。(域名/项目名称/服务名)
u xmlns=“http://itcast.cn” 使用默认命名空间。
u xmlns:itcast=“http://itcast.cn”使用指定名称的命名空间
l wsdl : webservice descriptionlanguage
非常重要 , 就是调用者 , 要看的 , 买东西 , 去使用看说明书
l soap : simple object access protocol 文本协议
基于 xml 语言的协议,其实是做了严格的规范 , 不能自定义 ; http基础上 + xml 数据 ,特有的http协议 , 同样有请求 – 响应;
特殊于 http 的地方 : l contentType : text/xml ; charset=utf-8 l 格式 : 有严格的规范 u Envelope (包层)– 必须的部分。以XML的根元素出现。 u Headers – 可选的。 u Body – 必须的。在body部分,包含要执行的服务器的方法。和发送到服务器的数据。
|
基础 socket实例
Socket 代码 , webservice 就是基于此实现 , 不过已经做了封装 , 对webservice的应用写不到这类底层的代码了 |
服务端 socket |
public class MyServer {
public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(7788); //死循环 while(true){ //阻塞 Socket s = ss.accept(); InputStream inputStream = s.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); String readLine = br.readLine(); System.out.println("客户端说:"+ readLine); br.close(); s.close(); } } } |
客户端 socket |
public class MyClient { public static void main(String[] args) throws UnknownHostException, IOException { Socket s = new Socket("192.168.1.100",7788);
OutputStream outputStream = s.getOutputStream(); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream)); bw.write("你好,吃了吗?"); bw.close(); s.close(); } } |
用完流一定要关闭 , 输出流关闭会默认执行flush()
刷出
网络服务 – wsdl文档应用案例
网站 : www.webxml.com.cn webservice 相关很多的免费服务 诸如 : 航班 / 天气预报 / 手机号归属地 / 电子邮件地址验证 / ip地址来源等
网站 : www.ele.me 饿了么外餐派送网站 , 就有通过 ip 查询你的地址
Jdk内置命令 : java / javac / doc
还有 : wsimport 对wsdl 介绍文档 , 解析生成 java 代码(java文件 和 .class 字节码文件) ; 生成命令 : wsimport –s [指定生成jave文件存放目录] –p [包名] url(wsdl文档完整url 地址名, 如 : http://www.itcast.server.cn/sayHello?wsdl)
网络服务 – www.webxml.com.cn 免费服务
直接url地址解析生成 , 就ok
Wsimport –s . –pcn.itcast.server.teleSearch http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl
解析后 报错(网络服务经常会用的事) , 是有 未定义的元素 , ‘s :schema’ 15行 / 61行
/ 101行 , 解决办法 , 把此网页 保存下载 , 自定义名称 为 : teleSearch.xml
(可选,可保存默认提供名称) , 删除上面保存几行的代码 , 执行 :
l Wsimport –s . –p cn.itcast.server.teleSearchteleSearch.xml (注意在当下目录下进行)
l 解析生成 java 文件 , 删除 .class 文件(用作 tomcat 运行用) , 我们这里做测试 , 只需把 java 文件拷到工程包下 ,进行实现 . 如下 java 文件
l 实现完成 , 是否可以删除 teleSearch.xml 文件 ?
l 不行 , 服务已经依赖这个文件
l 解决修改 WeatherWs.java 类中 [@WebServiceClient 的属性wsdlLocation = ‘值设为网络url 地址’]
调用服务