当前位置: 首页 > news >正文

基础知识__WebService

基础知识__WebService


本文由 Luzhuo 编写,请尊重个人劳动成果,转发请保留该信息.
原文: http://blog.csdn.net/Rozol/article/details/50511873
微博: http://weibo.com/u/2524456400


这是一篇关于WebService的基础知识的整理


介绍

  • 提供一种通过web方式访问的Api.
  • 解决两个系统/应用之间的远程调用.(跨语言,跨平台)

简单应用(原理)

  • New –> java project –> …

  • 服务端:

    • xml : WebService的客户端与服务端进行交互传递的数据格式
    • WebService Description Language : Web服务描述语言(相当于Api), 简称wsdl
    • Soap : 简单对象访问协议 (在Http的基础上传送xml格式的数据)(soap1.1 java只支持; soap1.2 java不支持)
    • 发布服务:

    • 详见:PublishServer.java
    • 修改wsdl描述: 通过注解修改 (详见:HelloService.java)

客户端:

  • 调用服务 : 通过java jdk 自带的命令 wsimport 根据服务说明书 wsdl 生成本地java代码,我们直接操作这些代码调用WebService

  • 方式一:通过wsimport方式,直接调用生成的代码 (详见:WsimportInvoke.java)

  • 方式一:1.先Get方式获取wsdl,然后在Post方式获取soap数据; 2.每次请求都Get去获取wsdl浪费资源; | 3.代码简单
  • 方式二:1.直接Post方式发送数据,效率更高; | 2.代码复杂
  • 方式三:1.同方式一

wsdl详解

wsdl详解

工具:

  • WebService Explorer : 通过图形化界面的方式调用WebService (在MyEclipse工具栏)

    • –> –>
  • TCP/IP Monitor : 拦截WebService客户端和服务端交互的过程/数据格式(客户端拦截) (在Window –> Show View –> Other –> MyEclipse Common –> TCP/IP Monitor)

    • 右击Properties –> Add –> monitorint port:8888(代理) ; Host name:192.168.0.107 ; Port:8080 ; Type:TCP/IP –> Start (通过代理端口访问)
    • 拦截baidu: – monitorint port:8888 ; Host name:www.baidu.com ; Port:80 ; Type:HTTP

cxf框架中的应用(实际使用)

  • Apache CXF = Celtix + Xfire
  • 支持协议:Soap1.1 / Soap1.2 / CORBA
  • 可与Spring快速无缝整合
  • 部署灵活: 可运行于 Tomcat / Jboss / Jetty / IBMWS / BeaWL
  • cxf命令:wsdl2java (与wsimport相似)

    • 生成文档代码: wsdl2java -d . http://192.168.0.107:8888/userService?wsdl
  • 服务端:

    • 方式一: 用 cxf 框架提供的类 ServerFactoryBean 发布WebService (不需要标注WebService注解与有效方法) (详见:CxfServer.java / CxfWebService.java) (与客户端方式一对应)

      • 导入jar包: apache-cxf-2.4.2\lib 下所有.jar –> copy到新建lib文件夹下 –> 选中所有.jar –> Add Build Path
    • 方式二: 用 cxf 提供的类 JaxWsServerFactoryBean 发布一个带接口的WebService (需要注解webser) (详见:PublishUserService.java / UserService.java / UserServiceImpl.java) (与客户端方式二对应)

      • 发布soap1.2协议: @BindingType(value=SOAPBinding.SOAP12HTTP_BINDING) (只有方式二可行,因为JaxWsServerFactoryBean继承ServerFactoryBean) (详见:UserService.java)
      • 拦截请求发送消息:(详见:PublishUserService.java)
  • 客户端:

    • 方式一: 用 cxf 框架提供 ClientProxyFactoryBean 的类调用WebService,依赖一个接口,这个接口通过 wsimport 生成 (详见:CxfClientInvoke.java) (与服务端方式一对应)

      • 通过 wsimport -s . http://192.168.0.107:8080/helloService?wsdl 生成代码 –> 保留接口文件(如:CxfWebServicePortType.java),删除其他 –> copy包到src下 –> 删掉包下报错代码
    • 方式二: 用 cxf 提供的类 JaxWsProxyFactoryBean 来调用WebService(详见:CxfJaxWsInvoke.java) (与服务端方式二对应)

      • 通过 wsimport -s . http://192.168.0.107:8888/userService?wsdl 生成代码 –> 保留接口文件(如:UserService.java),删除其他 –> copy包到src下 –> 删掉包下报错代码
  • 工具:

    • ant: 使用 ant 内置命令,可以编译/运行/打包java源文件,可以创建/删除/拷贝,可以执行sql文件.默认名build.xml(XML语言).

    • 环境变量:

    • JAVA_HOME
    • CXF_HOME
    • ANT_HOME
    • CATALINA_HOME : (tomcat)

    • 使用:进入主目录(含build.xml) –> ant targetName
    • ant server: 运行server类
    • ant client: 调用已发布的WebService
    • ant clean: 清除已经生成的class文件
    • ant war: 将java项目打成war包
    • ant deploy -Dtomcat=true: 拷贝war包copy到tomcat的webapp下
    • ant undeploy -Dtomcat=true: 清除tomcat的webapp下的war包和解压包

cxf与Web的整合

  • 服务端:

    • New –> Web Project –> 拷贝cxf的.jar文件到/WebRoot/WEB-INF/lib/下 –> 配置web.xml(copy) –> 创建cxf-servlet.xml(/WebRoot/WEB-INF/)(copy) –> …
    • 发布不带接口的WebService (详见:cxf-servlet.xml / HelloService.java)
    • 发布一个带接口的webservice (详见:cxf-servlet.xml / CallService.java / CallServiceImpl.java)

    • 拦截消息: (详见:cxf-servlet.xml)
    • 访问 http://localhost/CxfSpringWeb/ws

客户端:

  • New –> java project –> src创建CxfSpring.xml(copy) –> 拷贝cxf的.jar文件到新建lib下 –> Add Build Path –> …
  • 通过 wsimport -s . http://localhost/CxfSpringWeb/ws/makeCallService?wsdl 生成代码 –> 保留接口文件(如:CallService.java),删除其他 –> copy包到src下 –> 删掉包下报错代码
  • 通过配置文件的方式调用WebService, 需要依赖一个接口 (详见:SpringClientInvoke.java / CxfSpring.xml)

服务端的发布方式简列

  • java jdk 的类发布 Endpoint.publish(…); (详见:PublishServer.java)
  • cxf 的类 ServerFactoryBean 发布 (详见:CxfServer.java / CxfWebService.java)
  • cxf 的类 JaxWsServerFactoryBean 发布 (详见:PublishUserService.java / UserService.java / UserServiceImpl.java)
  • cxf + spring 的配置发布 (详见:cxf-servlet.xml / CallService.java / CallServiceImpl.java)

客户端的调用方式简列

  • wsimport方式生成的代码直接调用 (详见:WsimportInvoke.java)
  • java jdk 的类 URLConnect 模拟soap协议 (详见:URLConnectInvoke.java)
  • 客户端编程的方式调用,通过java jdk 的Service类,依赖一个接口 (详见:ServiceInvoke.java)
  • jQuery调用本地服务器代码,本地服务器代码去调用WebService (详见:不会…)
  • cxf的 ClientProxyFactoryBean 调用,依赖一个接口 (详见:CxfClientInvoke.java)
  • cxf的 JaxWsProxyFactoryBean 调用,依赖一个接口 (详见:CxfJaxWsInvoke.java)
  • cxf + spring 的配置文件调用,依赖一个接口 (详见:SpringClientInvoke.java / CxfSpring.xml)

Code

GitHub

免费的WebService

  • http://www.webxml.com.cn/
  • http://www.36wu.com/

相关文章:

  • Lepus经历收获杂谈(二)——QT
  • Python Function Note
  • 腾讯下一个重点:硬件;硬件自身的未来也正进入多元化发展
  • REST架构的思考
  • python的统一编码规范
  • c# 反射
  • 使用AutoCompleteTextView和AsyncTask 检索城市
  • python之路(二)函数
  • Linux下设置定期执行脚本
  • Linux下安装配置MongoDB数据库
  • Zabbix服务器端安装过程(含centos 7.1安装 zabbix3.0.8的故障排除)
  • 数学之路-python计算实战(2)-初遇pypy
  • linux --vsftpd虚拟用户登录时 530 Login incorrect排错
  • 昨天要成为反弹一日游?关键看下午了
  • Microsoft Azure Linux 多网卡配置
  • 【Linux系统编程】快速查找errno错误码信息
  • 10个最佳ES6特性 ES7与ES8的特性
  • canvas 绘制双线技巧
  • CentOS 7 修改主机名
  • echarts的各种常用效果展示
  • HTTP那些事
  • Java-详解HashMap
  • MD5加密原理解析及OC版原理实现
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • python 装饰器(一)
  • Vue学习第二天
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 前端性能优化——回流与重绘
  • 如何进阶一名有竞争力的程序员?
  • 什么软件可以剪辑音乐?
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • # Panda3d 碰撞检测系统介绍
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (7)STL算法之交换赋值
  • (rabbitmq的高级特性)消息可靠性
  • (二)springcloud实战之config配置中心
  • (翻译)terry crowley: 写给程序员
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)ssm高校实验室 毕业设计 800008
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET MVC之AOP
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • /var/lib/dpkg/lock 锁定问题
  • @RequestMapping-占位符映射