分布式系列六: 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语言作图,本节来讲讲当你拿到一个数据集的时候怎样下手分析,数据分析的第一步.探索性数据分析. 统计量,即统计学里面关注的数据集 ...
随机推荐
- day 16 包的导入
包的认识 '''包通过文件夹来管理一系列功能相近的模块包:一系列模块的集合体重点:包中一定有一个专门用来管理包中所有模块的文件包名:存放一系列模块的文件夹名字包名(包对象)存放的是管理模块的那个文件 ...
- SkylineGlobe 7.0.1 & 7.0.2版本Web开发 如何实现土方量计算
土方量计算,或者叫填挖方计算,体积计算,Skyline在很早的版本中就提供了这个的功能. 目前的软件版本,不仅仅可以对地形修改对象进行土方量计算,还可以在FLY工程中导入DEM数字高程模型数据,计算不 ...
- vue的一些基本知识
配置webpack及vue脚手架工具: vue-cli 2 npm install webpack webpack-cli -g npm install vue-cli -g 搭建脚手架 vue ...
- go语言之行--golang操作redis、mysql大全
一.redis 简介 redis(REmote DIctionary Server)是一个由Salvatore Sanfilippo写key-value存储系统,它由C语言编写.遵守BSD协议.支持网 ...
- 2018 C++ Teaching Assistant Summary
期末考结束后就留校开始了科研,最近刚回家休息了两三天,整理了思绪,准备补上这一篇拖延了一个多月的助教小结. 早在一年多前我上栋哥这门课时,我就十分乐意给予同学帮助,无论是技术上的,还是说思想上的(也可 ...
- 排序算法(sorting)
学习到的排序算法的总结,包括对COMP20003中排序部分进行总结,部分图片来自COMP20003 有部分内容来自http://www.cnblogs.com/eniac12/p/5329396.ht ...
- python基础概念(转)
基础回顾: 1.集合 集合有2个重要作用:关系测试(并集,差集,交集)和去重. 2.文件编码 2.7上默认文件编码是ASCII码,因为不支持中文,就出了GB2312,在2.7上要支持中文就必须申明文件 ...
- Oracle普通视图和物化视图的区别
介绍 物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询, Oracle 都实际上转换为视图SQL语句的查询. ...
- 一、Mysql安装
一.官网下载:https://dev.mysql.com/downloads/mysql/ 二.解压下载好的压缩包,本人存放的位置如下: 如下图解压后的文件目录,因版本的差异.一开始解压后的文件夹下可 ...
- 使用bat脚本永久激活Windows系统(摘抄)
使用bat脚本永久激活Windows系统 每次重装完系统后,右下角会提示系统未激活,无法进行一些个性化设置. 在这里我自己写了一个bat脚本用于激活Windows系统.(仅供学习) 文件下载: 链 ...