微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

基础知识__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)
  • 客户端:

    • 方式一: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)

  • 客户端:

    • 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)

    客户端的调用方式简列

    Code

    GitHub

    免费的WebService

    版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

    相关推荐