WebService最详细教程

article/2025/10/12 22:32:42

WebService相关概念

基础概念

WebService是一种跨编程语言和跨操作系统平台的远程调用技术,就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行

所谓远程调用,就是一台计算机a上 的一个程序可以调用到另外一台计算机b上的一个对象的方法无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据
譬如
天气预报接口。无数的应用需要获取天气预报信息;这些应用可能是各种平台,各种技术实现;而气象局的项目,估计也就一两种,要对外提供天气预报信息

WebService与Socket
  1. Socket是基于TCP/IP的传输层协议
    Webservice是基于HTTP协议传输数据,http是基于tcp的应用层协议。
    Webservice采用了基于http的soap协议传输数据
  2. Socket接口通过流传输,不支持面向对象
    Webservice 接口支持面向对象,最终webservice将对象进行序列化后通过流传输
  3. Socket适用于高性能大数据的传输,传输的数据需要手动处理,socket通信的接口协议需要自定义

WebService平台技术

  • XML+XSD

WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的返回结果是什么),XML主要的优点在于它既是平台无关的,又是厂商无关的,XML解决了数据表示的问题

  • SOAP

基于Http,基于XML,SOAP即简单对象访问协议(Simple Object Access Protocol),它是用于交换XML(标准通用标记语言下的一个子集)编码信息的轻量级协议

  • WSDL

WebService务器端首先要通过一个WSDL文件来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法,方法接受的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用,
它是WebService客户端和服务器端都能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,

  • UUID
    UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范

webservice实际上就是http+XML

CXF

Apache CXF 是一个开源的web Services 框架,构建和开发 web Services ,它支持多种协议,支持数据格式:XML,JSON(仅在REST方式下支持)

  • 创建Maven工程
    pom文件加入依赖
<!-- 文件拷贝编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 输出编码 --><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- 编译编码 --><maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<!-- CXF版本 --><cxf.version>3.0.0</cxf.version>

jar包依赖

<!-- CXF -->
<dependency>  <groupId>org.apache.cxf</groupId>  <artifactId>cxf-rt-frontend-jaxws</artifactId>  <version>${cxf.version}</version>
</dependency>
<dependency>  <groupId>org.apache.cxf</groupId>  <artifactId>cxf-rt-transports-http</artifactId>  <version>${cxf.version}</version>
</dependency>
<dependency>  <!-- 如果CXF不集成到Web服务器中,必须添加该引用 -->      <groupId>org.apache.cxf</groupId>  <artifactId>cxf-rt-transports-http-jetty</artifactId>  <version>${cxf.version}</version>
</dependency>
<!-- End CXF -->
  • 服务端代码

1.对外发布的接口

@WebServicepublic 
interface WebServiceI {    @WebMethod()    public String hello(@WebParam(name="helloParams")String helloParams);
}

2.实现服务端

@WebService
public class WebServiceImpl implements WebServiceI {    @Override    public String hello(String helloParams) {return "hello"+helloParams;   }
}

3.发布服务

public class WebServicePulish {    
public static void main(String[] args) {        String address = "http://localhost:8080/demo/Webservice";    Endpoint.publish(address , new WebServiceImpl());        System.out.println("发布webservice成功!");    }
}

4.验证
浏览器输入http://localhost:8080/demo/Webservice?wsdl
在这里插入图片描述

  • 客户端代码
    创建一个客户端的项目,切换到项目的src目录下执行
    wsimport -keephttp://localhost:8080/demo/Webservice?wsdl
    [外链图片转存失败(img-bX9GFO9i-1569116200350)(en-resource://database/1113:1)]
public class client {    public static void main(String[] args) {        WebServiceImplService factory = factory.WebServiceImplService();      WebServiceI wsImpl =  factory.getWebServiceImplPort();        String result = wsImpl.hello("web service");        System.out.println("调用返回结果"+result);   }
}
  • wsimport使用
    wsimport是Java自带的一个命令,所以需要先配置JDK环境变量

wsimport [opations]
d:指定要输出的文件的位置
s:表示要解析java的源码 ,默认解析出的是class字节码
p指定输出的包名

适用场景

1、跨防火墙通信

如果应用程序有成千上万的用户,而且分布在世界各地,那么客户端和服务器之间的通信将是一个棘手的问题。因为客户端和服务器之间通常会有防火墙或者代理服务器,但是开发难度大,程序很难维护。如果中间层组件换成WebService的话, 就可以从用户界面直接调用中间层组件

2、应用程序集成

企业里经常都要把用不同语言写成的、在不同平台上运行的各种程序集成起来,通过WebService,可以很容易的集成不同结构的应用程序

3、软件和数据重用

采用 WebService应用程序可以用标准的方法把功能和数据“暴露”出来,供其它应用程序使用,达到业务级重用。

不适用场景

1、单机应用程序

比如桌面应用程序,只需要与本机上的其它程序通信,在这种情况下,最好就不要用WebService,只要用本地的 API就可以了

2、局域网的同构应用程序

在许多应用中,所有的程序都是用VB或VC开发的,都在Windows平台下使用COM,都运行在同一个局域网上,在这些程序里,使用DCOM会比SOAP/HTTP有效得多


http://chatgpt.dhexx.cn/article/GZp0cju1.shtml

相关文章

webSerivce简明使用教程

茫茫人海千千万万&#xff0c;感谢这一秒你看到这里。希望我的文章对你的有所帮助&#xff01; 愿你在未来的日子&#xff0c;保持热爱&#xff0c;奔赴山海&#xff01; &#x1f440; 前言 因为前段时间&#xff0c;需要使用到webService来调用公司的其他系统api接口&#x…

WebService详细讲解

1 学习目标2 webservice 基本概念 2.1 什么是web服务2.2 简介2.3 术语 2.3.1 webservice开发规范2.3.2 SOAP 协议2.3.3 wsdl说明书2.3.4 UDDI2.4 应用场景2.5 优缺点 2.5.1 优点&#xff1a;2.5.2 缺点&#xff1a;2.6 面向服务架构SOA3 ApacheCXF 框架介绍 3.1…

11步教你入门webservice

新建立一个javaWeb项目&#xff0c;一个java类&#xff0c;如图&#xff1a; 1.具体很简单 首先要创建一个web工程 2、接下来我们就要将项目中的TestService的这个类生成WebService服务端&#xff0c;选择new Web Service&#xff0c;如图&#xff1a; 3 4.Next,选择jav…

php 实现分页功能(class封装了功能)

前言 分页是一个很常见的功能&#xff0c;我这里提供了分类类(class)&#xff0c;用于前端页面中的四个按钮&#xff1a; 首页下一页上一页尾页 上面的演示非常不直观&#xff0c;但足可以证明这个类可以完成分页功能。 完整的代码 附有非常详细的注释&#xff0c;但需要有…

PHP分页技术详解

直接上代码&#xff0c;注释很详细了。 <?php /** * php分页技术详解 * author jahng */header("Content-type: text/html; charsetUTF-8");echo<link rel"stylesheet" type"text/css" href"css.css" media"all" /&g…

PHP的分页处理

HTML页面&#xff1a; <div class"page"> {$data->render()|raw} </div> 控制器页面&#xff1a; $data ArticleInfo:: where(cate_id, $this->cid)->whereLike(title,%.$get.%)->paginate([ query>[cid>$this->cid], l…

php分页

这是学生信息管理每三条一页> <?phpfunction news($pageNum 1, $pageSize 3){$array array();$mysqlnew mysql();$rs "select * from user limit " . (($pageNum - 1) * $pageSize) . "," . $pageSize;$r $mysql->query($rs);while ($obj…

PHP-分页

1.6 分页 1.6.1 分析 -- 1、获取当前页码的数据 页码 SQL语句 1 select * from products limit 0,10 2 select * from products limit 10,10 3 select * from products limit 20,10 结论&#xff1a; $pageno&#xff1a;页码 $startno:起始位置 $pagesize10:页面大小…

PHP分页查询

1、创建Page.php类&#xff0c;代码如下&#xff1a; <?php /*** 分页模板类*/ class Page {private $cur_page;//当前页private $total;//总条数private $page_size 10;//每页显示的条数private $total_page;//总页数private $first_page;//首页显示名称private $pre_pa…

全功能PHP分页条

网上可以找到的ASP、PHP分页条很多。我也不能免俗&#xff0c;发表一个献献丑。唯一聊以自慰的是这个分页条能生成的显示样式还是很多的&#xff0c;相信能满足大部分人的需要。另一个特点就是使用特别简单&#xff0c;一般传递两个参数即可使用。文档里有使用样例和效果图。发…

php原生分页

自己写一个原生php分页&#xff1a; <?php $linkMySQL_connect(localhost,用户名,密码); mysql_select_db(数据库名称,$link); mysql_query(set names utf8); $resultmysql_query("select * from 表名"); $count mysql_num_rows($result); $Page_size10; …

如何用php实现分页效果

分页效果在网页中是常见的,可是怎样才能实现分页呢,今天做了两种方法来实现一下分页的效果 首先,我们需要准备在数据库里面准备一个表,并且插入数据,这些都是必需的前提工作了,不多说,如图所示(库名为jereh,表名为n_content): 步骤分析: 我们需要分页的话,需要用…

超级好用的PHP分页类

<?phpclass Page {private $total; //总记录private $pagesize; //每页显示多少条private $limit; //limitprivate $page; //当前页码private $pagenum; //总页码private $url; //地址private $bothnum; //两边保持数字分页的量//构造方法初始化pub…

PHP-分页具体实现及代码

数据分页概述 对大量数据进行分页显示是 Web 开发中最常见的情况&#xff0c;但大多刚开始接触 Web 开发的开发人员&#xff0c;对分页技术往往比较迷惘&#xff0c;本节教程以一个分页显示留言板的数据为例就来演示一下 PHP 中基本的数据分页显示原理。 本节教程需要用到的 …

计算机网络原理复习(一)

最近面试某公司的Linux C开发职位&#xff0c;面试的时候面试官提问了一些网络基础的知识&#xff0c;只是惭愧至极&#xff0c;好多知识点已经记忆模糊。周末花时间把网络原理的知识点整理了一下。 计算机网络体系结构&#xff1a; 网络体系结构&#xff1a; 按照我的理解 1…

计算机网络原理练习题及答案

计算机网络原理练习题及答案 读前必看&#xff0c;此篇为计算机网络原理复习对应的练习题。 第一部分传送门&#xff1a;待更新 文章目录 计算机网络原理练习题及答案练习1练习2练习3练习 4练习 5练习 6 练习1 某单位申请到一个B类IP地址&#xff0c;其网络标识&#xff08;N…

计算机网络原理 谢希仁(第8版)第一章习题答案

1-01 计算机网络可以向用户提供哪些服务&#xff1f; 1-02 试简述分组交换的要点。 答&#xff1a;采用了存储转发技术&#xff0c;即将报文&#xff08;要发送的整块数据&#xff09;划分为几个较小的等长数据段&#xff0c;在每个数据段前加上必要的控制信息组成的首部&#…

计算机网络原理(谢希仁第八版)第五章课后习题答案

第五章 35题&#xff0c;36题已经做了更正&#xff0c;特别感谢粉丝奈七七的答案。 1.试说明运输层在协议栈中的地位和作用&#xff0c;运输层的通信和网络层的通信有什么重要区别&#xff1f;为什么运输层是必不可少的&#xff1f; 答&#xff1a;运输层处于面向通信部分的最…

计算机网络原理学习笔记

目录 一. 计算机网络概述1.1 计算机网络基本概念1.2 计算机网络结构1.3 数据交换技术1.4 计算机网络性能1.4.1 速率与带宽1.4.2 时延1.4.3 时延带宽积1.4.4 丢包率1.4.5 吞吐量 1.5 计算机网络体系结构1.5.1 计算机网络分层体系结构1.5.2 OSI 参考模型1.5.3 OSI 参考模型有关术…

计算机网络原理(谢希仁第八版)第一章课后习题答案

第一章 1.计算机网络可以向用户提供哪些服务&#xff1f; 答&#xff1a;例如音频&#xff0c;视频&#xff0c;游戏等&#xff0c;但本质是提供连通性和共享这两个功能。 连通性&#xff1a;计算机网络使上网用户之间可以交换信息&#xff0c;好像这些用户的计算机都可以彼此…