基础知识__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)
  • cmd –> d: –> wsimport -d . http://192.168.0.107:8080/helloService?wsdl (×生成.class文件)
  • cmd –> d: –> wsimport -s . http://192.168.0.107:8080/helloService?wsdl (√生成.java文件&.class文件)
  • cmd –> d: –> wsimport -s . -p com.newpackge.demo http://192.168.0.107:8080/helloService?wsdl (将代码生成在com.newpackge.demo包下)
  • 将生成的代码包(删除.class文件)拷贝到客户端src目录下 –> 找到接口与实现类调用方法 (详见:WsimportInvoke.java)
  • 方式二: 通过java jdk 自带的 URLConnect 类 (通过URLConnect发送http请求,往WebService服务端发送xml格式的数据,模拟soap协议) (详见:URLConnectInvoke.java)
  • 方式三: 通过客户端编程的方式调用WebService,通过java jdk 的Service类,依赖一个接口,通过wsimport生成的本地代码中获取 (详见:ServiceInvoke.java)
  • 方式四: 通过 ajax 去调用WebService (模拟soap协议)(不能实现, 因为目前的浏览器都不允许 跨域访问 )(非正规方式实现: jQuery调用本地服务器代码,本地服务器代码去调用WebService)
  • 上面各方式优劣分析:
  • 方式一:1.先Get方式获取wsdl,然后在Post方式获取soap数据; 2.每次请求都Get去获取wsdl浪费资源; | 3.代码简单
  • 方式二:1.直接Post方式发送数据,效率更高; | 2.代码复杂
  • 方式三:1.同方式一

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)

客户端:

  • 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

时间: 2024-10-31 04:22:52

基础知识__WebService的相关文章

RESTful_基础知识

前言 本篇主要是RESTful的基础知识整理,主要是为了将要开始的Openstack架构主题做知识积累.理解好RESTful的设计思想无论是对学习Openstack架构还是Openstack Dashboard实现都是一件事半功倍的事情. RESTful REST(Representational State Transfer):是一种软件架构的设计风格,而不是一种标准.主要用于C/S架构的软件设计,也能很好的支持B/S架构,为软件设计提供了一组原则和约束条件,但这是原则和约束的条件均不具有标准

Java核心技术 卷Ⅰ 基础知识(原书第10版)

Java核心技术系列 Java核心技术 卷Ⅰ 基础知识 (原书第10版) Core Java Volume I-Fundamentals (10th Edition) [美] 凯S.霍斯特曼(Cay S. Horstmann) 著 周立新 陈 波 叶乃文 邝劲筠 杜永萍 译 图书在版编目(CIP)数据 Java核心技术 卷Ⅰ 基础知识(原书第10版) / (美)凯S. 霍斯特曼(Cay S. Horstmann)著:周立新等译. -北京:机械工业出版社,2016.8 (Java核心技术系列) 书

黑马程序员 一、java 概述与基础知识

获取更多资源关注Java帮帮IT资源分享网 一.黑马程序员-java 概述与基础知识 1.何为编程? 编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果 的过程. 为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路.方法.和手段通 过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完 成某种特定的任务.这种人和计算机之间交流的过程就是编程.   2.Java 语言概述,历史.特点 是 SUN(Stanford Universit

MFC 基础知识:主对话框与子对话框(一)

(仅供使用VS MFC初学者学习,高手莫见笑)在MFC中通常会使用点击一个按钮,弹出一个子对话框的基础知识,这些都是学习MFC的基础知识,也是非常重要的知识,这里我就简单的讲讲这些知识. 一. 设置主对话框 1.文件-新建项目(我设置的过程名为:EditSet)-MFC应用程序-该页面使用"基于对话框"-完成即可.2.在"资源视图"中打开Dialog对话框,删除"TODO:在此处放置对话框控件"和"确定"."退出&q

MFC 基础知识:主对话框与子对话框(二)

(仅供使用VS MFC初学者学习,高手莫见笑)接"MFC 基础知识:主对话框与子对话框(一)"的内容在"MFC 基础知识:主对话框与子对话框(一)"中Edit Control(编辑框)控件中输出内容,主要是想讲讲在创建的子对话框中如何实现一些操作:即添加OnInitDialog初始化函数的操作,这里的操作VS2012与VC++6.0略有些改动. 一. 主对话框编辑框中输出内容 1.找到主对话框XXXDlg.cpp中的OnInitDialog()初始化函数,在函数注释

[C++ 面试基础知识总结]字符串,向量和数组

[C++ 面试基础知识总结]字符串,向量和数组 参考书籍:<C++ Primer> 目录 C 面试基础知识总结字符串向量和数组 目录 string string的读写 stringsize_type类型 string对象和字面值相加 vector容器 vector的初始化 使用vector的注意事项 迭代器 迭代器运算符 使用迭代器实现二分查找 数组 初始化和赋值 字符数组 数组与指针 C风格字符串 多维数组中的指针 string string的读写 #include <iostream

记录由Equal基础知识引起的内存泄露

      在最近的公司框架开发中,利用了网上某大牛的反射缓存库作为辅助.在测试的时候发现出现了巨大的内存泄露,在频繁的操作后,内存不断的产生巨大的开销,10多分钟就占有了5,6m的内存.解决问题的时,公司不能上网,没有内存分析工具,没有我钟爱的ANTS Memory Profiler帮助下,我们只能靠简单的内存输出来二分查找缩小范围,利用 System.Diagnostics命名空间下的Process的WorkingSet64属性来统计两次输出的内存增长量(WorkingSet64:描述关联的

编程所需的基础知识

编程所需的基础知识 编程所需的基础知识 想要在编程行业能够走的远,一些基础知识是不能少的,基础奠定了发展的方向.java私塾建议大家在学习java语言本身的同时学习一些其他计算机相关的基础课程. 1. 一定的英文阅读能力因为程序设计接触的很多文档都是以英文的形式提供的,而且新的技术资料都是英文的,要想第一手学会这些新技术就必须能看懂英文,多阅读英文资料,使用金山词霸等工具配合,长时间的处在这样的环境里,自然而然英语的阅读能力就提高了.一个阅读英文很困难的人,可以学会程序设计,但是不会有很深的造诣

php基础知识笔记

include和require的异同:   相同点:都可以引入其他的php文件.   不同点:include当出现引入文件错误时,只会出现警告,但程序仍然会继续往下执行.而当require出现错误时则会报错,程序终止.   一般来说都是使用include_once和require_once,而不使用include和require.引入文件的语句要放在最前面,这点就类似C语言.       php变量是区分大小写的,但是函数名却不区分大小写.且不能以数字开头.例如Abc和abc是一样的,如果这样的