分布式系列六: 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服务.
分布式系列六: WebService简介的更多相关文章
- 爬虫系列(六) 用urllib和re爬取百度贴吧
这篇文章我们将使用 urllib 和 re 模块爬取百度贴吧,并使用三种文件格式存储数据,下面先贴上最终的效果图 1.网页分析 (1)准备工作 首先我们使用 Chrome 浏览器打开 百度贴吧,在输入 ...
- Spring 系列: Spring 框架简介 -7个部分
Spring 系列: Spring 框架简介 Spring AOP 和 IOC 容器入门 在这由三部分组成的介绍 Spring 框架的系列文章的第一期中,将开始学习如何用 Spring 技术构建轻量级 ...
- CSS 魔法系列:纯 CSS 绘制各种图形《系列六》
我们的网页因为 CSS 而呈现千变万化的风格.这一看似简单的样式语言在使用中非常灵活,只要你发挥创意就能实现很多比人想象不到的效果.特别是随着 CSS3 的广泛使用,更多新奇的 CSS 作品涌现出来. ...
- WCF编程系列(六)以编程方式配置终结点
WCF编程系列(六)以编程方式配置终结点 示例一中我们的宿主程序非常简单:只是简单的实例化了一个ServiceHost对象,然后调用open方法来启动服务.而关于终结点的配置我们都是通过配置文件来 ...
- 分布式缓存BeIT Memcached简介
分布式缓存BeIT Memcached简介 或许你还没有用到过分布式缓存,在web集群的情况下,它可以很好的让一部分常用数据常驻服务器内存而不用担心各台web不同步.下面稍微介绍一下beitmemca ...
- SQL Server 2008空间数据应用系列六:基于SQLCRL的空间数据可编程性
原文:SQL Server 2008空间数据应用系列六:基于SQLCRL的空间数据可编程性 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 ...
- Spring 系列: Spring 框架简介(转载)
Spring 系列: Spring 框架简介 http://www.ibm.com/developerworks/cn/java/wa-spring1/ Spring AOP 和 IOC 容器入门 在 ...
- [渣译文] SignalR 2.0 系列: SignalR简介
原文:[渣译文] SignalR 2.0 系列: SignalR简介 英文渣水平,大伙凑合着看吧,并不是逐字翻译的…… 这是微软官方SignalR 2.0教程Getting Started with ...
- R语言数据分析系列六
R语言数据分析系列六 -- by comaple.zhang 上一节讲了R语言作图,本节来讲讲当你拿到一个数据集的时候怎样下手分析,数据分析的第一步.探索性数据分析. 统计量,即统计学里面关注的数据集 ...
随机推荐
- 服务端监控工具:Nmon使用方法
在性能测试过程中,对服务端的各项资源使用情况进行监控是很重要的一环.这篇博客,介绍下服务端监控工具:nmon的使用方法... 一.认识nmon 1.简介 nmon是一种在AIX与各种Linux操作系统 ...
- mac 版 Pycharm 激活
mac 版 Pycharm 激活 获取注册码地址: http://idea.lanyus.com 输入注册码之后可能会报 this license XXXXXXXX has been cancel ...
- ARC089E GraphXY 构造
传送门 在Luogu上评了"NOI"之后评级变成了"普及+/提高"--我觉得我可能要退群了 考虑构造一个这样的图: 其中上半部分是从\(S\)开始的一条长\(1 ...
- 线性回归和Logistic回归
目录 线性回归 用线性回归模型拟合非线性关系 梯度下降法 最小二乘法 线性回归用于分类(logistic regression,LR) 目标函数 如何求解\(\theta\) LR处理多分类问题 线性 ...
- AWT的应用
AWT(Abstract Window TookIT)是java用于创建用户界面和绘制图形的所有类 AWT组件和容器 AWT包含了很多类和接口,用于java Application的GUI(图形用户界 ...
- mpvue-Vant Weapp踩坑记
微信开发者工具:开发.调试和模拟运行微信小程序的最核心的工具了,所以必须安装 # 全局安装 vue-cli $ npm install --global vue-cli # 创建一个基于 mpvue- ...
- php之swoole安装与基本使用
扩展安装: 参考GitHub地址 安装: 1. 使用PHP官方的PECL工具安装 (初学者) pecl install swoole 2. 从源码编译安装 (推荐) git clone https:/ ...
- 使用Spring表达式语言进行装备--SpEL
本文主要想记录最近的两个使用spring框架实现通过配置文件装备Bean,以及使用SpEL装备Bean. 1.使用配置文件装备Bean: 当我们写某些Bean的时候是希望这个Bean当中的属性是可以通 ...
- Python——Pycharm安装、激活、中文、
1.激活pycharm (1) 修改hosts文件:将 0.0.0.0 account.jetbrains.com 添加到文件最后面 Windows系统hosts文件路径为: c:\win ...
- shutil模块和几种文件上传Demo
一.shutil模块 1.介绍 shutil模块是对os中文件操作的补充.--移动 复制 打包 压缩 解压 2.基本使用 1. shutil.copyfileobj(文件1, 文件2, 长度) 将文件 ...