大型运输行业实战_day14_1_webserivce简单入门

1.简单使用

     1.1.服务端

        1.编写接口

 1 package com.day02.sation.ws;
 2 
 3 /**
 4  * Created by Administrator on 1/12.
 5  */
 6 public interface ITicket {
 7     /**
 8      *
 9      * @param userName
10      * @return
11      */
12     public String buyTicket(String userName);
13 
14     /**
15      *
16      * @param id
17      * @return
18      */
19     public String getTicket(String id);
20 }

        2.编写实现类

           注意实现类上贴标签@WebService

 1 package com.day02.sation.ws;
 2 
 3 import javax.jws.WebService;
 4 
 5 /**
 6  * Created by Administrator on 1/12.
 7  */
 8 @WebService
 9 public class TicketImpl implements ITicket {
10     @Override
11     public String buyTicket(String userName) {
12         System.out.println("userName = "+userName);
13         return "购票成功";
14     }
15 
16     @Override
17     public String getTicket(String id) {
18         System.out.println("id = "+id);
19         return "成都-南充";
20     }
21 }

     3.发布服务

 1 package com.day02.sation.ws;
 2 
 3 import javax.xml.ws.Endpoint;
 4 
 5 /**
 6  * Created by Administrator on 1/12.
 7  */
 8 public class TestWs {
 9     /**
10      * 发布服务
11      * @param args
12      */
13     public static void main(String[] args) {
14         Endpoint.publish("http://127.0.0.1:11111/ticket",new TicketImpl());
15         System.out.println("------发布成功----");
16     }
17 }

    4.检查服务示范发布成功

       浏览器上访问:http://127.0.0.1:11111/ticket,结果如下图:

     

      点击后文档如下,则发布成功

     

      服务端发布完成!

    1.2.客户端

        对于客户端,我们可利用只用java中的wsimport来自动生成客户端代码。使用Wsimport生成客户端调用代码,在jdk的安装目录的bin目录中,有一个wsimport命令。
        可以根据wsdl文档生成客户端调用代码。
       新建一个java工程WebServiceClient,然后到这个工程的src目录下面,在src目录下通过cmd运行以下命令:(注意空格)
       wsimport -s . http://127.0.0.1:11111/ticket?wsdl
      如下图所示:

     

     生成后的代码结构如图所示:

    

     编写客户端测试类:

 1 package com.day02.sation.ws;
 2 
 3 /**
 4  * Created by Administrator on 1/12.
 5  */
 6 public class TestClient {
 7     public static void main(String[] args) {
 8         //获取服务类
 9         TicketImplService ticketImplService = new TicketImplService();
10         //获取到接口
11         TicketImpl ticketImplPort = ticketImplService.getTicketImplPort();
12         //调用接口购票方法
13         String str1 = ticketImplPort.buyTicket("wuji");
14         System.out.println("str1 = "+str1);
15         //调用接口查询车票方法
16         String str2 = ticketImplPort.getTicket("18");
17         System.out.println("str2 = "+str2);
18     }
19 }

       执行客户端测试代码

       客户端如下效果:

      

     服务端执行如下:

    

 2.webservice介绍

         Webservice:跨语言跨平台的远程调用技术。Web service 即web服务,它是一种跨编程语言和跨操作系统平台的远程调用技术即跨平台远程调用技术。
Java 中共有三种WebService 规范,分别是JAX-WS(JAX-RPC)、JAXM&SAAJ、JAX-RS。
webService三要素:soap、wsdl、uddi
JAX-WS 的全称为 Java API for XML-Based Webservices ,早期的基于SOAP 的JAVA 的Web 服务规范JAX-RPC(Java API For XML-Remote Procedure Call).
JAXM(JAVA API For XML Message)主要定义了包含了发送和接收消息所需的API,SAAJ(SOAP With Attachment API For Java,JSR 67)是与JAXM 搭配使用的API,为构建SOAP 包和解析SOAP 包提供了重要的支持,支持附件传输等.
JAX-RS 是JAVA 针对REST(Representation State Transfer)风格制定的一套Web 服务规范.


  2.1. 应用场景

     在做企业整体信息化时,企业中一般都或多或少的存在一些既存系统,这些各种各样的系统不可能全部推翻,重新规划和开发,因为很多供应商在某一领域也做的很专业,博众家之长并进行集成应该是一个比较现实和可取的做法。

各个系统之间通过WebService进行集成,不仅缩短了开发周期,降低了风险,还减少了代码复杂度,并能够增强应用程序的可维护性,因为webservice支持跨平台且遵循标准协议(soap)。
将一个软件的功能以webservice方式暴露出来,达到软件重用。例如上边分析的天气预报,将天气查询功能以webservice接口方式暴露出来非常容易集成在其它系统中;再比如一个第三方物流系统将快递查询、快递登记暴露出来,从而集成在电子商务系统中。

 2.2. soap协议 

       SOAP 是一种网络通信协议
SOAP即Simple Object Access Protocol简易对象访问协议
SOAP 用于跨平台应用程序之间的通信
SOAP 被设计用来通过因特网(http)进行通信
SOAP = HTTP+XML,其实就是通过HTTP发xml数据
SOAP 很简单并可扩展支持面向对象
SOAP 允许您跨越防火墙
Socket是所有通信的基础也是语言个无关平台无关。
Socket使用的是tcp协议,传输效率高。适合传递大数据高并发场景,高并发的情况需要实现多线程并且使用到线程池,编码复杂。Sockt的高并发框架mina。
Socket只是流的传输,传输的格式需要程序员自己定义。
Webservice使用的是soap协议,soap协议基于http协议的应用层协议,本质就是http+xml。Soap协议是w3c标准,传输效率低。使用传输数据不是太大的场合,也是支持高并发的,受限于web容器。支持soap协议和wsdl两者都是国际通用标准,不需要自定义数据格式,只需要面向对象开发。

 2.3.wsdl介绍

         Webservice的使用说明书。描述了webservice的服务地址以及webservice服务接口、参数、返回值,该文档阅读从下面往上面阅读
    1.先找service节点:每个wsdl中,有且只有一个service节点。也叫服务视图节点。service中有port节点服务端端口。
    2.根据port节点的binding属性找binding节点。根据binding节点的type属性找portType节点。
    3.portType节点就是我们定义的SEI服务的接口类型。Prottype中的operation 节点就是方法名称。
    4.operation 节点的input就是参数的定义,output就是返回值的定义。
    5.Input有个属性叫做message,message属性对应message节点。其中有一个element,对应element节点。
    6.Element节点定义中xsd中。定义了数据的类型。参数和返回值都在其中定义。

   

     节点作用:

     definitions: 根节点,name属性是在服务类基础上+Service后缀
     service: 服务节点,描述服务的名称和地址
     binding:服务绑定节点,定义访问方式和WSDL文件的编写规范
     portType:接口名,定义服务方法名称等信息
     message:消息,定义请求和响应的方法名、参数名及参数类型

原文地址:https://www.cnblogs.com/newAndHui/p/8275375.html