Webservice异步系统

本文详细介绍了Webservice的基础概念,包括其作为异步系统数据交互的角色,跨平台、跨语言的特点,以及XML数据格式的重要性。讲解了WebService的两端概念——服务提供端和服务调用者,并提及其在SOA架构中的作用。内容涵盖WebSocket的基础、WSDL文档的应用、自定义开发Webservice的JDK实现,以及SOAP请求过程和协议对比。还讨论了相关工具如tcp/ip monitor和WS Explorer的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 的地方 :

contentType : text/xml ; charset=utf-8

格式 : 有严格的规范

Envelope (包层)– 必须的部分。以XML的根元素出现。

Headers – 可选的。

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 文件 ?

不行 , 服务已经依赖这个文件

解决修改 WeatherWs.java 类中 [@WebServiceClient 的属性wsdlLocation = ‘值设为网络url 地址’]

调用服务代码

自定义开发 webservice-jdk提供实现

那么如何才可以发布一个WebService呢?

在JDK1.6中JAX-WS规范定义了如何发布一个webService服务。

    JAX-WS是指Java Api for XML – WebService.

1.用Jdk1.6.0_21以后的版本发布一个WebService服务.

2.与Web服务相关的类,都位于javax.jws.*包中。

主要类有:

1      @WebService - 它是一个注解,用在类上指定将此类发布成一个ws. Endpoint – 此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上。

2步实现发布

l  1、在类上添加@WebService注解。

•  这是jdk1.6提供的一个注解。它位于:javax.jws.*包中。

l  2、通过EndPoint(端点服务)发布一个webService。

•  Endpoint也是jdk提供的一个专门用于发布服务的类,它的publish方法接收两个参数,一个是本地的服务地址,二是提供服务的类。它位于javax.xml.ws.*包中。

•  static Endpoint.publish(String address, Object implementor)
          在给定地址处针对指定的实现者对象创建并发布端点。

•  stop方法用于停止服务。

•  EndPoint发布完成服务以后,将会独立的线程运行。所以,publish之后的代码,可以正常执行。

l  其他注意事项:

•  给类添加上@WebService注解后,类中所有的非静态方法都将会对外公布。

•  @WebService注解,作用在具体类上。而不是接口

•  不支持静态方法,final方法。因为 代理机制处理,final无法继承使用-

•  如果希望某个方法(非static,非final)不对外公开,可以在方法上添加@WebMethod(exclude=true),阻止对外公开。

•  如果一个类上,被添加了@WebService注解,则必须

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值