• 分布式系列六: WebService简介


    WebSerice盛行的时代已经过去, 这里只是简单介绍下其基本概念, 并用JDK自带的API实现一个简单的服务.

    WebSerice的概念

    WebService是一种跨平台和跨语言的远程调用(RPC)技术. 它基于Http和Xml. 而上一篇分布式系列五: RMI通信中提到的RMI是基于Socket的, 底层协议是JRMP协议.

    特点

    跨语言, 自描述, 开放性

    几个术语

    • WSDL(Web Service Definition Language): 服务定义语言, 描述服务特征, 服务可以对外提供什么服务, 并定义了交互的数据格式.
    • SOAP(Simple Object Access Protocol) 简单对象访问协议: 基于http , 发送的格式是xml.
    • SEI(Webservice Endpoint Interface) 服务终端接口: 服务端用来处理请求的接口.

    实现方式

    使用JDK提供的API

    先定义服务端使用的接口和实现, 并启动一个服务

    一. 定义服务接口, 并用@WebService标记接口, 使用@WebMethod标记接口方法

    @WebService
    public interface ICar {
        @WebMethod
        String getName();
    }
    

    二. 定义接口实现, 使用@WebService标记实现类

    @WebService
    public class BMWCar implements ICar {
        @Override
        public String getName() {
            return "宝马汽车...";
        }
    }
    

    三. 启动服务端

    public class WsServer {
        public static void main(String[] args) {
            Endpoint.publish("http://localhost:8090/car",new Car());
        }
    }
    

    服务端已经完成, 接下来是客户端调用的部分

    四. 生成调用

    需要使用jdk的工具wsimport.exe生成调用文件, 首先启动服务, 然后在服务端代码所在路径运行命令: wsimport -keep http://localhost:8090/car?wsdl. 这时会在包内生成客户端所需调用文件.

    五. 定义客户端调用

    public class Client {
        public static void main(String[] args) {
            BMWCarService service = new BMWCarService();
            com.xlx.ws.client.BMWCar car = (com.xlx.ws.client.BMWCar) service.getBMWCarPort();
            System.out.println(car.getCarName());
        }
    }
    

    上面使用JDK的API实现一个简单的WebService.

    在浏览器中输入http://localhost:8090/car?wsdl 可以查看wsdl文档, 可以看到这个xml的内容还是很多的.对于复杂对象的定义这个文档会变得越来越大, 甚至有些对象无法用其表述导致丢失. 另外xml本身传输量要大于json, 因此现在WebService目前已经逐渐退出主流的技术框架.

    Spring 使用的是CFX框架集成了WebService.可以实现rest形式的webservice服务.

  • 相关阅读:
    ABP 开发(一)
    转发: Angular装饰器
    AJAX上传文件到服务器
    转:system.Security.Cryptography C# 加密和解密
    asp.net mvc5 step by step(四)——关于Controller的ActionResult
    asp.net mvc5 step by step(三)—— Entity Framework Database First
    asp.net mvc5 step by step(二)——Data Annotations(data 注释)
    项目中使用protobuf
    架构私用Nuget服务器
    dockerfile语法
  • 原文地址:https://www.cnblogs.com/walkinhalo/p/9685356.html
Copyright © 2020-2023  润新知