首页 > 其他分享 >webservice 入门介绍

webservice 入门介绍

时间:2023-06-30 22:01:48浏览次数:33  
标签:String 入门 介绍 name 接口 webservice public WebService

WebService是帮助多个应用程序与平台和编程语言之间以独立的方式互相通信的标准化技术。它是利用标准 XML messaging(主要 SOAP) 技术,可以访问网络上的其他计算机的记述多种操作的软件接口。此接口主要由 WSDL (WebService Description Language)记述,可以处理多种多样的系统运作。

构成技术:SOAP & WSDL

SOAP(Simple Object Access Protocol)

SOAP基于 HTTP或 SMTP等多种网络标准规约,它是向网络上的其他计算机传送 XML文档而定义标准Package结构的通信规约。

WSDL (WebServices Description Language)

WSDL是记述WebService的接口的基于 XML的标准WebService技术语言。

为什么要使用webservice

1)WebService基于HTTP,我们不需要自己去实现收发数据,这是相比Socket的优点 。

2)HTTP只能传输字符串类型,需要我们自己解析,而WebService支持复杂的数据类型。

3)传统客户端调用服务器的方法的过程是,发送,接收,解析消息,触发方法,而WebService类似于RPC,不需要我们关心如何发送接收和解析数据,能够像调用本地方法那样调用远程方法。

4)WebService使用标准的Web协议 -- XML,HTTP和TCP/IP,相对易用和通用。

5)soap请求是HTTP POST的一个专用版本,遵循一种特殊的xml消息格式Content-type设置为: text/xml,任何数据都可以xml化。

webservice的缺点

1)不适合相互调用,仅能让客户端调用服务端API,类似于单工通信。

2)相当于HTTP + XML解析,所以会比HTTP还慢,不适合需要高效通信的场景。

3)WebService会降低程序的性能,一台机器或一个局域网里面运行的同构应用程序就不应该用WebService进行通信。

webservice开发的注意事项

1)服务接口的粒度要合适

2)接口的返回值应该是简单的语言无关的

3)webservice的API不能抛出异常。对 Web Service 中的任何异常都应该进行相应的处理。

4)在设计分布式应用时,出于性能和可伸缩性的考虑,应当保证客户端和服务器端之间的调用尽可能地少。减少网络调用不仅有利于减少通信开销(如果只用 1 个 SOAP 消息可以达 到目标,就绝对不要发 3 个消息),降低网络流量,而且提高了应用的性能。

webservice的适用/不适用场景

1)跨防火墙通信

2)应用程序集成:将不同语言写成的在不同平台上运行的各种程序集成起来。

3)软件重用

4)对内的接口不要使用webservice

SpringBoot使用webservice

服务端发布服务

引入相关依赖


<!--webservice start-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
    <version>3.4.3</version>
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http-jetty</artifactId>
    <version>3.4.3</version>
</dependency>
<!--webservice end-->

服务接口和服务实现


public interface HelloService {
    String sayHello(String name);
}

服务接口实现


@Service
public class HelloServiceServiceImpl implements HelloService {

    @Override
    public String sayHello(String name) {
        return "service=》Good morning : " + name;
    }
}

webservice的接口和实现


import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService(
    name = "GreetWebService", // 暴露服务名称
    targetNamespace = "http://ws.demo.harvey.com"// 命名空间,一般是接口的包名倒序
)
public interface GreetWebService {

    //@WebResult(name = "String", targetNamespace = "")
    //@WebMethod
    //String greeting(@WebParam(name = "name") String name);

    //exclude声明该方法不发布
    //@WebMethod(exclude = true)
    //String greeting(String name);

    @WebMethod
    String greeting(String name);
}

webservice接口实现


@Service
@WebService(serviceName = "GreetWebService", // 与接口中指定的name一致, 都可以不写
        targetNamespace = "http://ws.demo.harvey.com", // 与接口中的命名空间一致,一般是接口的包名倒,都可以不用写
        endpointInterface = "com.harvey.demo.ws.GreetWebService" // 接口类全路径
)
public class GreetWebServiceImpl implements GreetWebService {

    @Autowired
    private HelloService helloService;

    @Override
    public String greeting(String name) {
        System.out.println("服务被调用 参数:" + name);
        return helloService.sayHello(name);
    }
}

webservice的配置类

发布服务。


@Configuration
public class CxfConfig {

    @Autowired
    private GreetWebService greetWebService;

    @Autowired
    private Bus bus;

    /**
     * 发布服务
     * @return
     */
    @Bean
    public Endpoint userServiceEndpoint() {
        System.out.println("服务发布");
        //这里指定的端口不能跟应用的端口冲突, 单独指定
        String path = "http://127.0.0.1:9090/greet";

        EndpointImpl userEndpoint = new EndpointImpl(bus, greetWebService);
        userEndpoint.publish(path);

        System.out.println("服务成功,path: " + path);
        System.out.println(String.format("在线的wsdl:%s?wsdl", path));
        return userEndpoint;
    }
}

启动springboot工程后,浏览器访问这个链接 http://127.0.0.1:9090/greet?wsdl 就可以得到WSDL :

WSDL(Web Services Description Language),web服务描述语言,它是webservice服务端使用说明书,说明服务端接口、方法、参数和返回值,WSDL是随服务发布成功,自动生成,无需编写。

webservice 入门介绍_System

生成客户端代码

file ->new -> modules -> java/webservice client

注:记得选择自己的JDK。

webservice 入门介绍_System_02

webservice 入门介绍_客户端_03

webservice 入门介绍_HTTP_04

webservice 入门介绍_客户端_05

点击"OK"后生成如下的客户端代码:

webservice 入门介绍_HTTP_06

删除所有class文件。

客户端调用ws服务


public class HelloWorldClient {
    
    public static void main(String[] argv) {
        GreetWebService_Service greetWebServiceService = new GreetWebService_Service();
        GreetWebService webService = greetWebServiceService.getGreetWebServiceImplPort();
        String result = webService.greeting("张三");
        System.out.println("result = " + result);
    }
}

输入日志:

webservice 入门介绍_HTTP_07

标签:String,入门,介绍,name,接口,webservice,public,WebService
From: https://blog.51cto.com/html/6594503

相关文章

  • MySQL入门使用,以及创建账号和权限
    当客户端连接MySQL服务器时,必须提供有效的身份认证,例如用户名和密码。当用户执行任何数据库操作时,服务器将会验证用户是否具有相应的权限,例如查询表需要SELECT权限,删除对象需要DROP权限。为了方便用户权限的管理,MySQL8.0提供了角色的功能。角色(Role)是一组权限的集合。管理......
  • 关于Linux系统-内核-live-patching-的介绍
    关于Linux,我们可以使用RedHatEnterpriseLinux内核实时修补解决方案在不重启或者重启任何进程的情况下对运行的内核进行补丁先看一下官网的一段关于Applyingpatcheswithkernellivepatching的介绍:YoucanusetheRedHatEnterpriseLinuxkernellivepatchingsol......
  • MySQLINNODB表空间分类简单介绍
     MySQLINNODB表空间分类简单介绍 从功能上看INNODB表空间共以下几种:系统表空间File-Per-Table表空间通用表空间Undo表空间临时表空间 从共享与否角度看上边提到的五种表空间可以这么归类。共享表空间独立表空间官档中有明确提到“共享表空间”这个说法:http......
  • Kong入门学习实践(7)灰度发布与蓝绿部署
    两年前,我在学习K8s的时候有写过一篇基于NginxIngress实现灰度发布的博文。这次,我们基于Kong来实践一下。灰度发布的具体实现其实是流量切分,那就让我们先回顾一下流量切分的实现方式。流量切分实现方式Kong可以支持实现不同场景下的灰度发布和测试,可以满足金丝雀发布、蓝绿部署......
  • 手把手教你入门 Docker
    博主介绍:✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌Java知识图谱点击链接:体系化学习Java(Java面试专题)......
  • Linux入门
    Linux常用命令date 查看时间cal 查看日历clear 清屏pwd 当前目录ls 显示当前目录内容ls-l 显示当前目录详细内容cd 更改当前目录;cd..返回上一级mkdir 创建文件夹rmdir 删除文件夹cp 复制 如:cpfile1.txtfile2.txtcat 打开......
  • C# 集合类 入门
    什么是集合类?集合类的位置在System.Collections.Generic命名空间中。在我看来,集合类和大学里《数据结构》中所学的各种结构很像。集合类中包含Queue<T>类、Stack<T>类,LinkedList<T>类,而《数据结构》中有队列、栈、双向链表。这些概念性的东西是想通的。C#中的集合类更像是一个......
  • web自动化测试入门篇05——元素定位的配置管理
      ......
  • HTML以及CSS介绍
    HTML介绍HTML(超文本标记语言)是用于创建网页和应用程序的标准标记语言。它提供了网页内容的结构和格式,定义了元素的显示和组织方式。HTML文档由一系列用尖括号(<>)括起来的标签组成。标签用于定义文档中的不同元素及其属性。以下是一个基本的HTML结构示例:<!DOCTYPEhtml><html><h......
  • Kibana Discover查询语言KQL介绍
    使用ELK查询日志已有一段时间,直到今天我才发现KibanaDiscover实际上是默认通过KibanaQueryLanguage(KQL)查询语法来进行数据查询的。常用查询语法全文搜索查找包含101021,或者包含1970325445000048,或者两者都包含。长句子通常会被自动分词。KQL使用一种称为“Tokenizati......