webservice的基础知识以及入门案例1
一 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相关推荐
- Three 之 three.js (webgl)基础 第二个入门案例之汽车模型加载和简单模型展示
Three 之 three.js (webgl)基础 第二个入门案例之汽车模型加载和简单模型展示 目录 Three 之 three.js (webgl)基础 第二个入门案例之汽车模型加载和简单模型展 ...
- 计算机打字工作内容,计算机基础知识打字入门
<计算机基础知识打字入门>由会员分享,可在线阅读,更多相关<计算机基础知识打字入门(1页珍藏版)>请在人人文库网上搜索. 1.计算机基础打字入门对于初学者而言,其实应该把打字作 ...
- 图像识别的原理和应用:从基础知识到实际案例
图像识别的原理和应用:从基础知识到实际案例 图像识别是一种利用计算机对图像进行处理.分析和理解,以识别各种不同模式的目标和对象的技术.图像识别是人工智能和计算机视觉的一个重要分支,它在各个领域都有广泛 ...
- thinkph 上花院 生多行mysql_PHP_ThinkPHP3.1基础知识快速入门,在当今众多的MVC框架中,ThinkPH - phpStudy...
ThinkPHP3.1基础知识快速入门 在当今众多的MVC框架中,ThinkPHP是一个快速.简单的基于MVC和面向对象的轻量级PHP开发框架,其遵循Apache2开源协议发布,自从诞生以来一直秉承简 ...
- 计算机硬件入门基础,计算机硬件基础知识总汇(入门讲解)
计算机硬件基础知识总汇(入门讲解) PC部分 认识篇 个人计算机基本组成 个人计算机是由硬件系统和软件系统组成. 硬件:是指看的见.摸得着.实实在在的装置.(如:中央处理器(CPU).内存.硬盘.显卡 ...
- Spring基础知识及入门
---恢复内容开始--- 1 spring框架概述 1.1 什么是spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson ...
- 【学习笔记】投资理财,基金基础知识科普入门学习,凭运气赚回来的钱,会凭实力亏掉_20210115
[理财笔记] 理财举例:年收入20万,月入2万现金流,如何理财? 1.指数基金:了解大盘趋势,4分之一的钱 2.股票基金:了解行业基金,4分之一的钱 3.货币基金:了解货币基金,比如余额宝,4分之一的 ...
- 大数据技术之_23_Python核心基础学习_01_计算机基础知识 + Python 入门 (9.5小时)
大数据技术之_23_Python核心基础学习_01 第一章 计算机基础知识 1.1 课程介绍 1.2 计算机是什么 1.3 计算机的组成 1.4 计算机的使用方式 1.5 windows 的命令行 1 ...
- 大数据技术之_23_Python核心基础学习_01_计算机基础知识 + Python 入门 (9.5小时)...
第一章 计算机基础知识1.1 课程介绍1.2 计算机是什么1.3 计算机的组成1.4 计算机的使用方式1.5 windows 的命令行1.6 环境变量(environment variable)1.7 ...
最新文章
- mysql创建新表失败_MySQL创建表失败的问题
- golang(5):编写WebSocket服务,client和html5调用
- linux du -hd1查看文件及目录所占磁盘空间
- 上海工程技术大学计算机通信与网络,上海工程技术大学
- mybatis的Example[Criteria]的使用
- ppt2010基础操作笔记
- Java大对象lob_JavaEE JDBC 读写LOB大对象
- Pycharm下载包慢的问题
- 新形势下电力监控系统网络安全风险分析与防护对策
- 音乐资源免费_3个免费的音乐研究在线资源
- 亮瞎眼的十六进制颜色代码表
- 过去的互联网,modnet的出现
- OPTICS聚类以及python实现
- 【机器学习】简述多种降维算法
- PHP全栈学习笔记29
- unity3d消除你不想要的黄色警告
- 安装homebrew cask报错问题
- js基础1 输入输出方式 数据类型
- LSTM-CNN-Attention算法系列之一:LSTM提取时间特征
- 关于POVIT的简单介绍