一 webService

1.1 webservcie

webservice是一种跨操作系统和跨语言的数据调用、数据交换的一种服务技术。用于网络通信,多台机器之间的数据交互。

最大优点:webservice最大的好处是客户端与服务端语言的兼容性交互时候可以传递对象。

1.2 webservice与socket的区别

1. socket是在网络中的数据传输层,采用的是TCP/UDP协议webservice是属于应用层,采用的是http协议

2. socket建立是长连接,webservice建立的是短连接(调用服务时建立连接,调用完毕后断开连接

1.3 wsdl文档

1.3.1 定义

定义:web services description language,用来描述web服务的xml格式的信息。

1.3.2 作用

作用:通过wsdl说明书,就可以描述webservice服务端对外发布的服务

1.3.3 文档格式

文档格式:

Service:指定服务所发布的名称,包括相关端口的集合,包括其关联的接口、操作、消息等。

Binding:指定消息传递的格式,特定端口类型的具体协议和数据格式规范,通过binding指向portType

portType: 指明服务器的接口,描述 web service可被执行的操作方法,以及相关的消息,并且通过operation绑定相应的in和out的消息:其中in表示参数,out表示返回值,,

message: 定义了多个SOAP消息,每个方法通常都有2个message标签,name属性分别是xxx和xxxResponse

types: 定义了服务的namespace和关键信息的类型(方法的参数类型和返回值的类型)

1.3.4 阅读方式

WSDL文档应该从下往上阅读。

1.先看service标签,看相应port的binding属性,然后通过值查找上面的binding标签。

2.通过binding标签可以获得具体协议等信息,然后查看binding的type属性

3.通过binding的type属性,查找对应的portType,可以获得可操作的方法和参数、返回值等。

4.通过portType下的operation标签的message属性,可以向上查找message获取具体的数据参数信息

1.4 客户端接口targetnamespace的注意事项

客户端接口调用中的namespance,targetnamespance要写成:包.类名的反缀形式

targetNamespace:指定你想要的名称空间,默认是使用接口实现类的包名的反缀

二 webService的案例-服务端代码

2.1 编写服务端

2.2 编写webservice的发布类

2.2.1 定义发布接口speaker

package com.bonc.xj.webservice;import javax.jws.WebService;/*** 定义服务的接口* @author Beauxie**/
@WebService//此注解用在类上指定将此类发布成一个WebService
public interface Speaker {String sayHello(String name);}

2.2.2 定义发布接口实现类Person

注意:接口和实现类中必须用@WebService注解,并且在实现类的注解中必须指定endpointInterface属性的值为接口的全限定名

package com.bonc.xj.webservice.impl;/*** @ClassName: Person* @Description: TODO* @Author: liujianfu* @Date: 2021/03/18 10:26:08 * @Version: V1.0**/import com.bonc.xj.webservice.Speaker;import javax.jws.WebService;/*** 定义服务的实现类* @author Beauxie*/
@WebService(endpointInterface="com.bonc.xj.webservice.Speaker")
public class Person implements Speaker {public String sayHello(String name) {return "Hello,"+name+"我在美丽的新疆吉木萨尔!";}}

2.3 编写发布服务类

//1.定义发布的地址:端口号,发布的上下文路径,自己定义
        String url = "http://localhost:8002/ws-demo";

package com.bonc.xj;import com.bonc.xj.webservice.impl.Person;import javax.xml.ws.Endpoint;/*** Hello world!**/
public class ServerApp
{public static void main( String[] args ){//1.定义发布的地址:端口号,发布的上下文路径,自己定义String url = "http://localhost:8002/ws-demo";//2.发布服务//第一个参数是指定你要发布的地址,第二个参数是你要发布的服务对象Endpoint.publish(url, new Person());System.out.println("服务器已启动");System.out.println( "Hello World!" );}
}

启动服务:

然后打开浏览器访问http://localhost:8002/ws-demo?wsdl,只要在客户端浏览器能看以下WSDL文档,说明服务发布成功:

2.4 编写客户端

1.在这个服务端工程下,创建一个调用的客户端,这个客户端是和服务端在一个工程下,代码如下:

package com.bonc.xj;import com.bonc.xj.webservice.Speaker;import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import java.net.MalformedURLException;
import java.net.URL;/*** Hello world!**/
public class ClientApp
{public static void main( String[] args ) throws MalformedURLException {//1.声明所发布的服务对应的wsdl地址URL url=new URL("http://localhost:8002/ws-demo?wsdl");//2.声明所要调用的QnameQName qname=new QName("http://impl.webservice.xj.bonc.com/", "PersonService");//3.创建客户端的服务代理对象Service service=Service.create(url,qname);Speaker speaker = service.getPort(Speaker.class);//4.调用服务的方法String str=speaker.sayHello("Beauxie");System.out.println(str);}
}

2.  QName qname=new QName("http://impl.webservice.xj.bonc.com/", "PersonService"); 这里面的两个参数,要参考发布文档中的targetnamespace 和name这个两个参数,两个参数都不能瞎写,

其实表达的意思就是要访问服务端下的:com.bonc.xj.webservice.impl  的Person这个类(service后缀要加上,变为PersonSevice)

3. 执行结果:

三 webService的案例-客户端代码

虽然在上面服务端编写客户端代码也能调通,但是为了层次分明,和具有说服力,这里将单独再建一个客户端的工程,去调用服务端的服务接口。

3.1 webservice客户端工程

3.2 客户端speaker 接口

1.这里的接口

@WebService(targetNamespace = "http://webservice.xj.bonc.com/") 参考服务端发布的wsdl文档中,<wsdl:import 中的namespace的值,这里配置为http://webservice.xj.bonc.com/  ,其实就是映射成服务端
这个接口speaker所在的包.类的绝对路径。
<wsdl:import location="http://localhost:8002/ws-demo?wsdl=Speaker.wsdl" namespace="http://webservice.xj.bonc.com/"> </wsdl:import>

2.图片

3.详情代码

客户端需要新建一个speaker的接口:和服务端的speaker接口一致

package com.bonc.ws.client.service;import javax.jws.WebService;/*** 定义服务的接口* @author Beauxie**/
/*
这个接口中targetnamespace的配置原则为:
参考服务端发布的wsdl文档中,wsdl=speaker.wsdl 中的namespace的值,这里配置为http://webservice.xj.bonc.com/  ,其实就是映射成服务端
这个接口speaker所在的包.类的绝对路径。
<wsdl:import location="http://localhost:8002/ws-demo?wsdl=Speaker.wsdl" namespace="http://webservice.xj.bonc.com/"> </wsdl:import>*/@WebService(targetNamespace = "http://webservice.xj.bonc.com/")
public interface Speaker {String sayHello(String name);}

3.3 客户端调用接口

1.这里new QNam(x,x)参数的配置:

QName qname=new QName("http://impl.webservice.xj.bonc.com/", "PersonService"); 里面的参数配置原则:QName中两个参数所对应wsdl文档中参数:

这里的:

package com.bonc.ws.client;import com.bonc.ws.client.service.Speaker;import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import java.net.MalformedURLException;
import java.net.URL;/*** Hello world!**/
public class App2
{public static void main( String[] args ) throws MalformedURLException {//1.声明所发布的服务对应的wsdl地址URL url=new URL("http://localhost:8002/ws-demo?wsdl");//2.声明所要调用的QnameQName qname=new QName("http://impl.webservice.xj.bonc.com/", "PersonService");//3.创建客户端的服务代理对象Service service=Service.create(url,qname);Speaker speaker = service.getPort(Speaker.class);//4.调用服务的方法String str=speaker.sayHello("Beauxie");System.out.println(str);}
}

调用结果:

参考地址:https://blog.csdn.net/BeauXie/article/details/52851862

未完待续,下一篇:使用wsimport命令生成webservice的客户端接口

webservice的基础知识以及入门案例1相关推荐

  1. Three 之 three.js (webgl)基础 第二个入门案例之汽车模型加载和简单模型展示

    Three 之 three.js (webgl)基础 第二个入门案例之汽车模型加载和简单模型展示 目录 ​Three 之 three.js (webgl)基础 第二个入门案例之汽车模型加载和简单模型展 ...

  2. 计算机打字工作内容,计算机基础知识打字入门

    <计算机基础知识打字入门>由会员分享,可在线阅读,更多相关<计算机基础知识打字入门(1页珍藏版)>请在人人文库网上搜索. 1.计算机基础打字入门对于初学者而言,其实应该把打字作 ...

  3. 图像识别的原理和应用:从基础知识到实际案例

    图像识别的原理和应用:从基础知识到实际案例 图像识别是一种利用计算机对图像进行处理.分析和理解,以识别各种不同模式的目标和对象的技术.图像识别是人工智能和计算机视觉的一个重要分支,它在各个领域都有广泛 ...

  4. thinkph 上花院 生多行mysql_PHP_ThinkPHP3.1基础知识快速入门,在当今众多的MVC框架中,ThinkPH - phpStudy...

    ThinkPHP3.1基础知识快速入门 在当今众多的MVC框架中,ThinkPHP是一个快速.简单的基于MVC和面向对象的轻量级PHP开发框架,其遵循Apache2开源协议发布,自从诞生以来一直秉承简 ...

  5. 计算机硬件入门基础,计算机硬件基础知识总汇(入门讲解)

    计算机硬件基础知识总汇(入门讲解) PC部分 认识篇 个人计算机基本组成 个人计算机是由硬件系统和软件系统组成. 硬件:是指看的见.摸得着.实实在在的装置.(如:中央处理器(CPU).内存.硬盘.显卡 ...

  6. Spring基础知识及入门

    ---恢复内容开始--- 1 spring框架概述 1.1 什么是spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson  ...

  7. 【学习笔记】投资理财,基金基础知识科普入门学习,凭运气赚回来的钱,会凭实力亏掉_20210115

    [理财笔记] 理财举例:年收入20万,月入2万现金流,如何理财? 1.指数基金:了解大盘趋势,4分之一的钱 2.股票基金:了解行业基金,4分之一的钱 3.货币基金:了解货币基金,比如余额宝,4分之一的 ...

  8. 大数据技术之_23_Python核心基础学习_01_计算机基础知识 + Python 入门 (9.5小时)

    大数据技术之_23_Python核心基础学习_01 第一章 计算机基础知识 1.1 课程介绍 1.2 计算机是什么 1.3 计算机的组成 1.4 计算机的使用方式 1.5 windows 的命令行 1 ...

  9. 大数据技术之_23_Python核心基础学习_01_计算机基础知识 + Python 入门 (9.5小时)...

    第一章 计算机基础知识1.1 课程介绍1.2 计算机是什么1.3 计算机的组成1.4 计算机的使用方式1.5 windows 的命令行1.6 环境变量(environment variable)1.7 ...

最新文章

  1. mysql创建新表失败_MySQL创建表失败的问题
  2. golang(5):编写WebSocket服务,client和html5调用
  3. linux du -hd1查看文件及目录所占磁盘空间
  4. 上海工程技术大学计算机通信与网络,上海工程技术大学
  5. mybatis的Example[Criteria]的使用
  6. ppt2010基础操作笔记
  7. Java大对象lob_JavaEE JDBC 读写LOB大对象
  8. Pycharm下载包慢的问题
  9. 新形势下电力监控系统网络安全风险分析与防护对策
  10. 音乐资源免费_3个免费的音乐研究在线资源
  11. 亮瞎眼的十六进制颜色代码表
  12. 过去的互联网,modnet的出现
  13. OPTICS聚类以及python实现
  14. 【机器学习】简述多种降维算法
  15. PHP全栈学习笔记29
  16. unity3d消除你不想要的黄色警告
  17. 安装homebrew cask报错问题
  18. js基础1 输入输出方式 数据类型
  19. LSTM-CNN-Attention算法系列之一:LSTM提取时间特征
  20. 关于POVIT的简单介绍

热门文章

  1. Fotoo-圣诞节活动策划方案,圣诞活动视频、照片、征集工具推荐
  2. 简单分享人力资源服务行业的网站都有哪些部分组成
  3. 网页的本质是html,究其本质,到底什么是网页布局
  4. 关于SM2算法工具的一点儿说明
  5. 为什么云服务器淘汰了传统服务器?
  6. 《微服务设计》--读书笔记
  7. 梯度(Gradient vectors)
  8. Android popu菜单
  9. 带负荷测试要求二次最小电流_继电保护二次核相、带负荷试验方法
  10. 微型计算机的三种线路,微机线路保护