WebService学习记录
1.1 什么是WebService
Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。[1]
Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。Web Service也很容易部署, 因为它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP。Web Service减少了应用接口的花费。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。每个webservice都对应的一个wsdl。
WebService的特点
- WebService通过HTTP POST方式接受客户的请求
- WebService与客户端之间一般使用SOAP协议传输XML数据
它本身就是为了跨平台或跨语言而设计的
1.2 调用网络上的WebService服务
http://webxml.com.cn/
1.3 SOAP和WSDL概念
1.3.1SOAP(Simple Object Access Protocol):简单对象访问协议
HTTP协议
POST /getinfo.action HTTP/1.1 HOST www.javaweb.com contentType text/html;charset=utf8 id=001&name=fyk&age=22...
SOAP协议
POST /getinfo.action HTTP/1.1 HOST www.javaweb.com contentType text/xml;charset=utf8 <!-- 标签结构是固定死的,不能改变 --> <envelop> <body> <!-- body后的标签不固定 --> <getInfo> <id>001</id> <name>fyk</name> </getInfo> </body> </envelop>
- SOAP作为一个基于XML语言的协议用于在网上传输数据。
- SOAP = 在HTTP的基础上+XML数据。
- SOAP是基于HTTP的。
- SOAP的组成如下:
- Envelope – 必须的部分。以XML的根元素出现。
- Headers – 可选的。
- Body – 必须的。在body部分,包含要执行的服务器的方法。和发送到服务器的数据。
1.3.2 WSDL Web服务描述语言
WSDL(WebService Description Language):web服务描述语言,就是xml文档,用于描述当前服务的一些信息(服务的名称,服务的发布地址,服务提供的方法,方法的参数类型,方法的返回类型)
2 基于jdk1.7发布一个WebService服务
2.1 服务端发布
第一步:创建一个Java项目
第二步:创建一个类,加入Webservice注解
第三步:提供一个方法sayHello
第四步:在main方法中调用jdk提供的发布服务的方法
第五步:访问服务的wsdl文档(服务的发布地址+?wsdl)
@WebService public class HelloService { public String sayHello(String name,int i) { System.out.println("服务端的sayHello方法被调用"); return "name:"+name; } public static void main(String[] args) { String address = "http://192.168.2.182:7012/hello"; Object implementor = new HelloService(); Endpoint.publish(address, implementor); } }
2.2 客户端调用
2.2.1 jdk中wsimport命令使用
作用:解析wsdl文件,生成客户端本地代码
2.2.3 客户端调用
1、使用wsimport命令解析wsdl文件生成本地代码
2、通过本地代码创建一个代理对象
3、通过代理对象实现远程调用
public class App { public static void main(String[] args) { HelloServiceService helloServiceService = new HelloServiceService(); //创建客户端代理对象,用于远程调用 HelloService helloServicePort = helloServiceService.getHelloServicePort(); String sayHello = helloServicePort.sayHello("小明", 10); System.out.println(sayHello); } }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 后端思维之高并发处理方案
· 千万级大表的优化技巧
· 在 VS Code 中,一键安装 MCP Server!
· 想让你多爱自己一些的开源计时器
· 10年+ .NET Coder 心语 ── 继承的思维:从思维模式到架构设计的深度解析