WebService重学(自用)

article/2025/10/6 3:38:58

乱花渐欲迷人眼,浅草才能没马蹄!
接触一个新技术的时候,脑海中总是会跳出这句诗。附庸风雅,非我本意。主要还是因为很多网络学习资料,把简单的东西搞得很复杂;该有内涵的时候,又俗不可耐。
前段时间,写过一篇博客记录webservice的学习,今天回头一看,也成了垃圾。今天就再重新梳理一下。
不严谨的给个官方定义:不会说,不说了。

首先说接口开发,很多人人为的把这个概念搞复杂了。

一、现在简单说下我接触过的接口协议都有哪些:1.socket通信,这个是我第一次接触接口接触的接口通信方式。(老复杂了)
2.webservice协议,在socket之后用的比较普遍的传输方式。
3.http和https,目前流行的传输方式,大部分公司都用这种。
4.ftp传输,其实ftp传输应该放在第一位,ftp是最早做数据交换的方式,就是开通个22或21端口,往对方服务器发文件,对方得到文件后在解析获取数据。
二、协议说完了,我们在来说下传输的数据方式和结构。
1.符号隔开法,最早的数据方式是一串字符串,用各种特殊符号隔开,然后通过截取符号的前面,后面或之间,来获取数据。(贼累,眼睛要看花的)
2.xml(可扩展标记语言)结构,教程地址:http://www.runoob.com/xml/xml-tutorial.html 这种流行很长一段时间,公司双方定义xml的根元素和子元素,双方开发人员都按照根元素和子元素,在里面赋值,取值,现在很多开源框架都还用xml作为存储和配置文件。
3.json(JavaScript Object Notation, JS 对象简谱),教程地址:http://www.runoob.com/json/json-tutorial.html 目前流行的数据传输格式,简洁,方便,易懂基本全占。目前公司都建议用json结构传输。
选自:https://www.cnblogs.com/zhouxuejia/p/9318391.html

webservice作用两个方面
1)异构系统信息交互。(例如:一个公司,a系统要使用b系统数据,两个系统甚至可能不是同一个语言开发的)
2)公共资源使用。(例如:手机应用、pc的浏览器等都使用气象局天气预报信息)
跨平台,跨语言,远程。

涉及几个概念:
1)soap协议,soap协议=http+XML。http实现通讯,XML是数据格式。由此其实可以看出一点,webservice发送的请求是POST,get必然不适用于放这堆XML信息。
2)WSDL:服务端接口的说明书。
webservice有很多优点,但个人认为,这个破玩意,现在完全可以被其他技术替代。之所以还有很多人用,可能时因为早期webservice流行那阵,开发的那帮人好些都是架构师了。他们定的用,那就用了呗。

我以前一直错误理解webservice是个技术,现在有了不同理解。我觉得webservice可以理解成异构系统间通讯的一种行为。传统的webservice是soap+xml的形式,现在的webservice完全可以是http+json,而且更好用。以下所说的还是,传统形式的webservice。
1.入门,JavaAPI实现简单的webservice接口发布和调用。帮助理解,开发没有用的。
1)创建普通Java项目,写个接口及实现。
在这里插入图片描述
2)实现上加个@WebService注解,注解是jdk的,表明其是个webservice服务。以前老听人说基于jws开发webservice,搞得我有点头晕,现在看看神马玩意。
在这里插入图片描述
3)写个main方法,发布服务。在这里插入图片描述地址扔到浏览器可以看到说明书。
在这里插入图片描述
在这里插入图片描述
4)创建普通Java项目,打开dos窗口,进入项目src文件夹下,执行相关命令如图(教程使用的eclipse,目前流行的idea可以直接在ide中设置生成代码,但实际开发中一般不会采用在客户端生成代码的方式,所以不介绍idea的了)。回到开发工具,发现src下生成了一堆代码。
在这里插入图片描述
5)main方法调用服务端方法。
在这里插入图片描述
三个红框分别对应wsdl的:
在这里插入图片描述
在这里插入图片描述
运行main方法,查看结果。
在这里插入图片描述
在这里插入图片描述

客户端代码也可以这样实现(一样只不过讲创建服务视图对象拆成了三部分而已):
在这里插入图片描述

2.还可以单独调用第三方接口。
调用第三方接口(例如网络上提供的查询电话号码归属地),不需要写服务端,根据发布的wsdl文件写一个客户端即可。方法同上客户端开发相同。
注意:如果第三方接口使用其他语言开发的可能在wsimport命令时会报错,需要修改wsdl文件。
以天气预报接口为例,在wsimport命令生成客户端代码时报错如下:
在这里插入图片描述
这是因为这个接口是.NET开发的,不能拿过来直接用,需要讲wsdl文件做一下修改。这个文件是发布到网络的无法直接修改。将其下载后者复制到本地。在本地完成修改,wsimport -s .后边的地址填写该文件在本地的地址即可。
在这里插入图片描述
客户端代码示例:
在这里插入图片描述

3.以上是比较原始直观的方式实现发送请求,接收数据。webservice是通过soap协议来收发数据的。仔细观察客户端代码会发现根本就没有发送XML格式的数据。这是因为wsimport的方式在客户端生成代码,具体发送的xml格式数据我们没有看到。实际企业开发中一般是需要拼接成xml格式然后发送的。
首先,我们先看一下,以上方式底层究竟发送了什么格式的数据。{}内的内容只是为了看下底层数据格式,没有特别大的实际意义,可以跳过。
{
我本将心向明月,奈何明月照沟。

我本来想用POSTMAN做下监控,没成想不会用。问了美团40k大神,不会用。。。无奈把项目扔回eclipse用的内置工具TCP/IP Monitor。
windows 中找到如下
在这里插入图片描述
设置完成后,将哭护短代码改成本地地址+上图第一个框的端口。(也是因为这一步要配置地址。所以要使用第二种比较复杂的访问方式)
在这里插入图片描述
在这里插入图片描述
如下为:发送的信息和接受的信息(直截取了实际内容相关的):

<?xml version="1.0" ?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:queryWeather xmlns:ns2="http://ws.scbg.com/">
<arg0>比尔吉沃特</arg0>
</ns2:queryWeather>
</S:Body></S:Envelope>
5e
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
a6
<ns2:queryWeatherResponse xmlns:ns2="http://ws.scbg.com/">
<return>今天天气好晴朗,处处放光芒!</return>
</ns2:queryWeatherResponse>
</S:Body>
</S:Envelope>
0

}

4.接下来,就可以手动模拟这样的数据格式数据发送:
服务端不用动!在客户端程序做如下操作:
首先创建方法拼接xml格式字符串:

/*** 拼接xml信息方法* @param cityName* @return*/public static String getXML(String cityName){StringBuilder sb= new StringBuilder();sb.append("<?xml version=\"1.0\" ?>");sb.append("<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\">");sb.append("<S:Body>");sb.append("<ns2:queryWeather xmlns:ns2=\"http://ws.scbg.com/\">");sb.append("<arg0>"+cityName+"</arg0>");sb.append("</ns2:queryWeather>");sb.append("</S:Body>");sb.append("</S:Envelope>");return sb.toString();}

编写客户端代码:

public static void main(String[] args) throws IOException, InterruptedException {//获取url对象,以创建连接URL url=new URL("http://192.168.0.113:8080/weatherService666");//获取连接对象,注意转型,上层父类没有获取连接方法,所以做了转型。HttpURLConnection connection = (HttpURLConnection) url.openConnection();//设置请求方法等信息connection.setRequestMethod("POST");//设置发送文件格式及编码connection.setRequestProperty("Content-Type","text/xml; charset=utf-8");//打开通信connection.setDoOutput(true);connection.setDoInput(true);String cityName="比尔吉沃特";//获取拼接好的xml字符串String xmlString = getXML(cityName);//获取流对象发送字节数组信息OutputStream outputStream = connection.getOutputStream();outputStream.write(xmlString.getBytes());//获取响应码int responseCode = connection.getResponseCode();//如果相应成功将数据取出来,输出到控制台,否则输出响应码if(responseCode==200){InputStream inputStream = connection.getInputStream();Scanner scanner= new Scanner(inputStream);while(scanner.hasNext()){System.out.println(scanner.nextLine());}}else{System.out.println("响应码为:"+responseCode);}}

运行程序获得返回结果:
在这里插入图片描述
5.通过4,我们可以看出两点。第一:手动拼接xml麻烦。第二:获取的信息对我们有用的部分其实是<return></return>里边的内容,我们要想法获取到。
待补充
6.CXF框架开发webservice,其实就是另一个框架。基础实现和ssm整合cxf待补
7.使用AXIS2进行webservie接口开发,就是另一个框架,感觉没有CXF好用。但是项目中使用了也学一下。


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

相关文章

WebService

webService报错总结&#xff01;&#xff01;&#xff01; Unmarshalling Error: null 原因&#xff1a;接收的参数实体类中的字段类型是BigDecimal&#xff0c;参数中传的字段类型是VARCHAR2(300) Unmarshalling Error: Date类型的字段不能传空。 1、标题学习目标 2、webs…

javaWebService技术框架

0.WebService交互方式和浏览器交互方式对比 1.WebService对内的意义&#xff1a;架构 2.WebService对外的意义&#xff1a;提供第三方接口支持 3.Java中的WebService标准 ①JAX-WS标准 数据传输格式&#xff1a;SOAP 服务器端自描述语言&#xff1a;WSD…

Java WebService

1、WebService简介 Web Service技术&#xff0c; 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件&#xff0c; 就可相互交换数据或集成。依据Web Service规范实施的应用之间&#xff0c; 无论它们所使用的语言、 平台或内部协议是什么&#xff0…

Java开发中经常使用到的几种WebService技术实现方案

Java开发中经常使用到的几种WebService技术实现方案 随着异构系统互联需求的不断增加&#xff0c;WebService的重要性也日益彰显出来。凭借webservice&#xff0c;我们可以实现基于不同程序语言的项目的互联互通。更可以将开发好的程序接口以服务的形式发布出去供使用者调用。w…

Java详解WebService技术

一、什么是 webservice WebService是一种跨编程语言和跨操作系统平台的远程调用技术。 二、webservice采用什么技术 WebService平台由XMLXSD,SOAP和WSDL三大技术构成。 1、XMLXSD&#xff08;封装数据&#xff09;&#xff1a; WebService采用HTTP协议传输数据&#xff0c;采用…

WebService总结

目录 WebService简介 WebService架构图 理解&#xff1a; WebService的开发规范 SOAP协议 soap的组成 WSDL UDDI WebService的优缺点 WebService优点 WebService缺点 SOA ApacheCXF框架 CXF分为JAX-WS和JAX-RS两种开发方式 ApacheCXF实现WebService&#xff08…

WebService技术详解CXF

WebService WebService简介 Web Service技术&#xff0c; 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件&#xff0c; 就可相互交换数据或集成。依据Web Service规范实施的应用之间&#xff0c; 无论它们所使用的语言、 平台或内部协议是什么&…

WebService技术入门

一、Webservice简介 1、 WebService是一种跨编程语言和跨操作系统平台的远程调用技术。具有异构平台的互通性,软件的复用性等优点。 2、WebService的三要素&#xff1a; &#xff08;1&#xff09;SOAP(简单对象访问协议)&#xff0c;基于HTTP协议&#xff0c;采用XML格式&…

WebService技术详解 (一)

WebService WebService简介 Web Service技术&#xff0c; 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件&#xff0c; 就可相互交换数据或集成。依据Web Service规范实施的应用之间&#xff0c; 无论它们所使用的语言、 平台或内部协议是什么&…

WebService技术详解

WebService简介 Web Service技术&#xff0c; 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件&#xff0c; 就可相互交换数据或集成。依据Web Service规范实施的应用之间&#xff0c; 无论它们所使用的语言、 平台或内部协议是什么&#xff0c; 都可…

信息系统项目管理师:Web Service技术篇

一、Web Service技术 Web Service是解决应用程序之间相互通信的一种技术。WebService是描述一系列操作的接口。它使用标准的、规范的XML描述接口。 Web Application是面向用户的&#xff0c;而Web Service面向的则是计算机。 Web Service模型&#xff1a;服务提供者、服务请求者…

WebService全面详解

目录 1. 什么是WebService 2. WebService的三要素 2.1 SOAP 2.1.1SOAP协议格式 2.1.2 SOAP1.1协议&#xff1a; 2.13 SOAP1.2 2.1.4 SOAP1.1和SOAP1.2区别 2.2 WSDL 2.3 UDDI 3. WebService开发规范 3.1 JAX-WS 3.2 JAXM&SAAJ 3.3 JAX-RS 4. WebService应用场…

jQuery来实现一个ajax实例

下面介绍使用jQuery来实现一个简单的ajax实例 主要的效果是使用ajax来实现书籍的价格随着书籍的数量变化&#xff0c;有一个增加按钮和一个减少按钮 jsp页面代码 <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <…

jsp+ajax实例

下面介绍JSP前台表单内容通过Ajax异步提交到后台Servlet进行校验&#xff08;校验方式多种&#xff0c;包括提取数据库信息&#xff0c;校验用户名是否重复等&#xff09;&#xff0c;异步在JSP表单页面显示校验结果信息的基本过程。 一、说明&#xff1a; 1.由于本…

Ajax的简单实例

AJAX 是一种在无需重新加载整个网页的情况下&#xff0c;能够更新部分网页的技术。 AJAX 是一种用于创建快速动态网页的技术。 通过在后台与服务器进行少量数据交换&#xff0c;AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下&#xff0c;对网页的某部…

Ajax例子

Ajax实现无刷新三联动下拉框 1.html代码 < HTML > < HEAD > < title > Ajax实现无刷新三联动下拉框 </ title > < meta content "Microsoft Visual Studio .NET 7.1" name "GENERATOR" > < meta content "C#"…

javaweb+jQuery ajax实例

什么是ajax AJAX即“Asynchronous Javascript And XML”&#xff08;异步JavaScript和XML&#xff09;&#xff0c;是指一种创建交互式网页应用的网页开发技术。 AJAX 异步 JavaScript和XML&#xff08;标准通用标记语言的子集&#xff09;。 AJAX 是一种用于创建快速动态网…

原生js的Ajax实例

与jQuery不同&#xff0c;原生js的ajax的实现相比来说复杂一些&#xff0c;因为jquery中的$.ajax()方法已经把js的实现封装起来&#xff0c;使用起来更加方便。但是&#xff0c;原生js的实现过程&#xff0c;对于理解ajax&#xff0c;好像更清晰一些。 之前写过的jQuery的ajax…

Ajax最简单实例(java)

总体介绍&#xff0c;不感兴趣的请跳过&#xff1a;以下内容是关于DWR来实现Ajax的方法。 一、 Ajax的介绍。 AJAX Asynchronous JavaScript and XML&#xff08;异步的 JavaScript 和 XML&#xff09;。 AJAX 不是新的编程语言&#xff0c;而是一种使用现有标准的新方法。 …

Ajax学习(二)—— 一个简单的Ajax实例

通过上篇博客认识Ajax之后,我们通过一个简单的实例来消化消化理论知识,一睹Ajax的庐山真面目。 1.实例功能: 当用户输入用户名,文本框失去焦点后,通过异步调用来判断该用户名是否已经存在。若存在,则在上图中红框处显示提示。当用户名可用时,提交按钮变为可用状态。 2.…