Spring框架——WebService
Spring集成WebService
WebService介绍
WebService概念
WebService是一个软件系统,为了支持跨网络的机器间相互操作交互而设计。
Web Service服务通常被定义为一组模块化的API,它们可以通过网络进行调用,来执行远程系统的请求服务。
WebService是一种跨编程语言和跨操作系统平台的远程调用技术
WebService技术
- 服务提供者通过
WSDL
在服务目录UDDI里进行注册发布, - 服务请求者通过
WSDL
在服务目录UDDI里进行查找想要的服务, - 再找到相应的服务后,服务请求者通过
HTTP/SOAP
与服务提供者进行服务调用。
技术概念
XML+XSD
- XML(扩展的可标记语言)是WebService平台中表示数据的格式
- 优点在于它既是平台无关的,又是厂商无关的
- XML Schema(XSD)定义了一套标准的数据类型
SOAP(简单对象访问协议)
- WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特 定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议
- SOAP协议 = HTTP协议 + XML数据格式
WSDL(Web Services Description Language)
- 基于XML的
- 用于描述WebService以及如何访问WebService的
UDDI(Universal Description Discovery and Integration )
- 通用描述、发现与集成的缩写
- 基于XML语言的跨平台的的描述规范,可以使世界范围内的企业在互联网上发布自己所提供的服务
SOA 面向服务架构
使用WebService提供的功能,基于服务的架构。
微服务
由SOA发展的微小型服务,例如SpringCloud
OOP 面向对象编程
OOD 面向对象设计
SaaS 软件即服务
PaaS 平台即服务
WebService实现
Java原生
不是所有的Java类都可以成为标准的WebService
标准:
- 必须是public类
- 不能是final的或者abstract
- 必须有一个公共的默认构造函数
- 类中绝对不能有重写的finalize()方法
- Java技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作
@WebService
- name:服务的名字
- targetNamespace :目标的命名空间,网址、域名
- serviceName:对外公布的名字
@WebMethod
- operationName :对外方法名
- action :服务器真正的方法名
- exclude :
@WebResult
- name :
@WebParam
- name:
@WebService(name = "Example", targetNamespace = "http://www.jsoso.com/wstest", serviceName = "WebServiceExample")
public class WebServiceExample {
@WebMethod(operationName = "toSayHello", action = "sayHello", exclude = false)
@WebResult(name = "returnWord")
public String sayHello(@WebParam(name = "userName") String userName) {
return "Hello" + userName;
}
}
发布
- 声明初始化WebService
- 发布WebService
public class StartService {
public static void main(String[] args) {
WebServiceExample service = new WebServiceExample();
/*
* 发布Web Service到http://localhost:8080/hello地址
*/
Endpoint.publish("http://localhost:8080/hello",service);
System.out.println("启动 http://localhost:8080/hello");
}
}
WSDL的全文
输入网址
http://localhost:8080/hello?wsdl
访问方式
服务端的WebService和客户端的WebService不一样。
客户端的WebService是通过WSDL自动生成的。
客户端调用自己的WebService等价于调用远端服务器WebService
public class RunClient {
public static void main(String[] args) {
//初始化服务框架类
WebServiceExample service = new WebServiceExample();
//或者本地服务接口的实例
Example server = (Example) service.getExamplePort();
String sayHello = server.toSayHello("阿土");
System.out.println("输入toSayHello的返回值—"+sayHello);
}
}
Spring集成CXF
Apache CXF
一个正式的Apache顶级项目,是一个开源的,容易使用的Web服务框架
- CXF框架是一种基于Servlet技术的SOA应用开发框架
- 高性能,扩展简单且容易使用,支持多种标准
- 与Spring天然无缝集成
CXF与Spring整合实现WebService服务器端
- 创建Dynamic Web project,引入CXF的jar包
- 编写即将发布为WebService的接口以及实现类
- web.xml中配置CXF,使其生效
- web.xml中配置Spring
- 创建Spring的bean配置文件applicationContext.xml
- 运行项目,检验结果检验成果
配置web.xml
配置CXF
配置SpringMVC