一. 什么是WedService?

WebService不是框架, 甚至不是一种技术, 而是一种跨平台,跨语言的规范, WebService的出现是为了解决这种需求场景: 不同平台, 不同语言所编写的应用之间相互调用.

二. WedService有什么用?

WebService能够集中解决下面问题:

1. 远程调用

2. 跨平台调用

3. 跨系统调用

那么WebService在企业中有什么用呢?

1. 同一个公司新旧系统的整合.

2. 不同公司的业务整合: 业务的整合就要带来不同公司的系统整合, 而不同公司的系统可能存在平台不同, 语言不同的问题.

3. 内容聚合: 一个应用须要提供天气预报, 股票行情,黄金行情等, 内容聚合的应用须要调用大量不同平台, 不同语言编写的应用的方法.

三. 面向服务架构(SOA)

1. 什么是面向服务架构: service1, service2, service3 - 全部组件都是"即插即用"的.

   IBM提倡的SOA架构: 希望以"组装电脑"的方式来开发软件

   ① 各种提供服务的组件

   ② 企业服务总线(Enterpise Service Bus - ESB)

2. CXF号称是SOA框架

四. WebService三大技术基础

1. WSDL: web service definition language - web service定义语言

- 通俗地说, WSDL文档描写叙述了Web Service例如以下三个方面:

   - WHAT: 该Web Service 包括什么操作

   - HOW: 该Web Service的操纵应该如何调用

   - WHERE: 该Web Service的服务地址

2. SOAP: Simple Object Access Protocol: 简单对象訪问协议

一次web service的调用, 事实上并非方法调用, 而是发送SOAP消息(即xml文档片段)

3. UDDI: Universal Description, Discovery and Integration

UDDI 是一种文件夹服务。企业能够使用它对 Web services 进行注冊和搜索

※ 调用一次Web Service的本质:

1. client把调用方法參数, 转换成XML文档片段(SOAP消息 - input消息) - 该文档片段必须符合WSDL定义的格式

2. 通过网络, 把xml文档片段传给server

3. server接收到xml文档片段

4. server解析XML文档片段, 提取当中的数据, 并把数据转换调用Web Service所须要的參数值

5. server端运行方法

6. 把运行方法得到的返回值, 再次转换为生成为XML文档片段(SOAP消息 - output消息)- 该文档片段必须符合WSDL定义的格式

7. 通过网络, 把xml文档片段传给client

8. client接受到xml文档片段

9. client解析xml文档片段, 提取当中的数据, 并把数据转换调用Web Service的返回值

从上面调用本质来看, 要一个语言支持web service唯一的要求是: 该语言支持xml文档的解析, 生成, 支持网络传输

五. 使用CXF开发WebService程序

1. 环境准备:

① 下载Apache cxf2.2.10环境: http://download.csdn.net/detail/zdp072/7429645

② 所需Jar包:

cxf-2.2.10.jar

geronimo-servlet_2.5_spec-1.2.jar

jetty-6.1.21.jar

jetty-util-6.1.21.jar

wsdl4j-1.6.2.jar

XmlSchema-1.4.5.jar

③ 配置path环境变量: G:\Java_lib\apache\cxf\apache-cxf-2.2.10\bin (cxf的解压文件夹)

命令行输入: wsdl2java查看是否配置成功

2. 开发服务端:

① 开发一个Web Service业务接口, 该接口要用@WebService修饰

@WebService
public interface HelloService {
public String sayHello(String name);
}

② 开发一个Web Service实现类, 实现类也须要用@WebService修饰

@WebService(endpointInterface="com.zdp.service.HelloService")
public class HelloServiceImpl implements HelloService {
@Override
public String sayHello(String name) {
return name + ", 您好! 如今的时间是: " + new Date();
}
}

③ 使用Endpoint类的静态方法公布WebService

public class MyServer {
public static void main(String[] args) {
HelloService helloService = new HelloServiceImpl();
Endpoint.publish("http://localhost/sayHello", helloService);
System.out.println("Web Service 暴露成功");
}
}

注: 每一个Web Service组件须要2个部分: 接口和实现类

④ 执行MyServer(CXF内置了一个Jetty Webserver), 在浏览器中输入下面地址: http://localhost/sayHello?wsdl , 假设WebService暴露成功将会在浏览器里看到一个xml文件

3. 开发client

① 打开命令行, cd进入client的src文件夹, 执行: wsdl2java http://localhost/sayHello?wsdl , 目的就是通过暴露的wsdl生成Java类

② 写一个client測试类:

public class MyClient {
public static void main(String[] args) {
HelloServiceImplService factory = new HelloServiceImplService();
HelloService helloService = factory.getHelloServiceImplPort(); // 返回一个代理
System.out.println(helloService.sayHello("zhangsan"));
}
}

③ 代码结构图及下载地址: http://download.csdn.net/detail/zdp072/7429637

WebService概述和CXF入门小程序的更多相关文章

  1. Spring IoC、DI入门小程序

    Alt+/智能提示xml配置文件节点及属性:在接口上使用Ctrl+T可以提示其实现类 一.IoC控制反转(将创建对象的权利交给spring)入门小程序 1.引入jar包 2.工程基本结构 3.新建Us ...

  2. 40个Python入门小程序

    有不少同学学完Python后仍然很难将其灵活运用.我整理 37 个Python入门的小程序.在实践中应用Python会有事半功倍的效果. 分享 Github 项目,里面收集了 Python 学习资料 ...

  3. springMVC学习笔记(二)-----注解和非注解入门小程序

    最近一直在做一个电商的项目,周末加班,忙的都没有时间更新博客了.终于在上周五上线了,可以轻松几天了.闲话不扯淡了,继续谈谈springMvc的学习. 现在,用到SpringMvc的大部分使用全注解配置 ...

  4. Spring MVC 的环境搭建和入门小程序

    1.1.下载spring框架包. 1.1.1百度搜索Spring Framework. 进入spring官网,在网页右边选择想要下载的版本.如图 1.1.2进入页面按Ctrl+F搜索Distribut ...

  5. 28-hadoop-hbase入门小程序

    hbase的完全分布式建立起来了, 可以试下好使不 1, 导包, {HBASE_HOME}/lib 下所有的jar包, 导入 2, 使用junit测试, 会报错, 因为缺少一个jar 3, 获取链接, ...

  6. 微信小程序访问webservice(wsdl)+ axis2发布服务端(Java)

    0.主要思路:使用axis2发布webservice服务端,微信小程序作为客户端访问.步骤如下: 1.服务端: 首先微信小程序仅支持访问https的url,且必须是已备案域名.因此前期的服务器端工作需 ...

  7. 小程序云函数调用webservice接口

    https://www.jianshu.com/p/2692e56251ac 小程序最近新出来了云开发能力,主要依赖了node.js(运行在服务器上的js),可以让我们在没有服务器的情况下,使用云开发 ...

  8. 微信小程序框架探究和解析

    何为框架 你对微信小程序的技术框架了解多少? 对wepy 框架进行一系列的深入了解 微信小程序框架解析和探究 小程序组件化框架WePY 在性能调优上做出的探究 开发者培训班上海专场PPT分享:小程序框 ...

  9. 基于go语言结合微信小程序开发的微商城系统

    最近在慕课网上录制了一门<Golang微信小程序微商城系统原型>,这门免费课程特别适合在校大学生或者刚毕业的大学生,go语言初学者以及想要从事微商城开发项目入门的小伙伴们来学习.在课程当中 ...

随机推荐

  1. 46.Qt 使用OpenGL绘制立方体

    main.cpp #include <QApplication> #include <iostream> #include "vowelcube.h" in ...

  2. django 实现websocket

    一.简述:django实现websocket,之前django-websocket退出到3.0之后,被废弃.官方推荐大家使用channels. channels通过升级http协议 升级到websoc ...

  3. Service不完全解析

    本篇的内容并不是介绍service使用方法和生命周期的,而是对其中的一些要点进行记录和分析. 我们都知道,Service是一个在后台执行的应用组件,用于在后台进行长期操作,例如进行网络事务,播放背景音 ...

  4. PostgreSQL的HA解决方案-2负载均衡(load balance)

    一.部署说明 1.1 实施环境 本文档实验环境如下: PGSQL主机: 192.168.1.45 PGSQL备机: 192.168.1.50 软件和系统版本 Pgsql 版本: pgsql 9.2.4 ...

  5. HttpServletRequest二三事

    缘由 在项目中,闲来无聊写了个bug LOGGER.info("前端请求,request:{}",JSON.toJSONString(request)); 好像还好是吧,来我告诉你 ...

  6. 02--C编程细节整理(一)

    用C语言比较多,这篇是平时攒下的.有些内容在工作后可能会很常见,但是不用容易忘,所以就写篇博客吧. 1.        printf的用法 %*可以用来跳过字符,可以用于未知缩进.像下面一样. for ...

  7. ios 编译版本 最低版本 运行版本 动态链接库

    if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) 运行环境判断: #if __IPHONE_OS_VERSION_ ...

  8. Linux 中文件名颜色所代表的属性

    1. 白色:表示一般文件 2. 蓝色:表示目录 3. 绿色:表示可执行的文件或程序 4. 浅蓝色:表示链接文件 5. 黄色:表示设备文件 6. 灰色:表示其他类型文件 7. 红色:表示压缩文件或者包文 ...

  9. timeval的时间转换成毫秒之后多大的数据类型可以装下

    struct timeval { long tv_sec; /*秒*/ long tv_usec; /*微秒*/ }; 秒的定义为long,为了防止溢出,转换成毫秒之后保存在long long中

  10. 数据分析例子-------CTR1

    1.CTR: (1)几个概念: impression(展示):用户看到该广告的次数.也就是一个广告被显示了多少次,它就计数多少.比如:打开网站的一个页面,网站上的所有广告就被显示了一次,每个广告增加1 ...