zoukankan      html  css  js  c++  java
  • WebService--概述、JDk实现、AJAX调用

    一、Webservice概述

      W3C组织对其的定义是,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计。

      Webservice服务通常被定义为一组模块化的API,它们可以通过网络进行调用,来执行远程系统的请求服务。

      基本元素有:XML、SOAP、WSDL、UDDI。

      Webservice = SOAP + HTTP + WSDL。其中,SOAP协议Webservice的主体,它通过HTTP或者SMTP等应用层协议进行通讯,自身使用XML文件来描述程序的函数方法和参数信息,从而完成不同主机的异构系统间的计算服务处理。这里的WSDL是web服务描述语言,也是一个XML文档,它通过HTTP向公众发布,公告客户端程序关于某个具体的Webservice服务的URL信息、方法的命名,参数,返回值等。

    1.Webservice-soap

      SOAP(Simple Object Access Protocol),简单对象访问协议,是一种基于XML的消息通讯格式,用于网络,不同平台,不同语言的应用程序间的通讯。一条SOAP消息就是一个普通的XML文档,包含下列元素:

    • Envelope元素,标识XML文档一条SOAP消息(至少有一个)
    • Header元素,包含头部信息的XML标签
    • Body元素,包含所有的调用和响应的主体信息的标签(必有)
    • Fault元素,错误信息标签。

      

      SOAP工作方式:

      soap client通过http发送soap请求,服务端管理器接收soap请求,然后去被部署的服务列表去找,有soap client请求的服务时,转发给XML Translator(XML 转换程序),XML Translator会将XML结构数据转换成实际的编程语言(JAVA语言等),处理后,回传到XML Translator,转换成XML文档对象,最后响应给soap client。

    2.Webservice-wsdl

      WSDL是基于XML的用于描述Webservice以及如何访问Webservice的语言,是一种描述接口定义的语言,用于描述Webservice的接口信息包括函数、参数、返回值等。因为是基于XML的,所以WSDL既是机器程序可阅读的,又是人可阅读的,这是一个很大的好处。一些最新的开发工具既能根据你的webservice生成WSDL文档,又能导入WSDL文档,生成调用相应的客户端代码。

    3.Webservice工作原理

      开发一个Webservice服务之后,会生成一个WSDL文档。此时,client发送Get请求,获取Server上所提供的服务,Server会把WSDL返回给客户端,客户端通过阅读WSDL可以看出Server提供哪些服务,这些服务应该如何去调用。客户端了解这些服务接口信息之后,会发起SOAP请求,SOAP请求包括功能性的、header里设置客户验证信息之类的,Server收到SOAP请求后,做一些相应的处理,把客户端想要的结果通过SOAP响应给客户端。

    4.Webservice的优点

    • 面向服务的分布式编程模型
    • 完全的语言、平台独立性,即跨语言、跨操作系统的远程调用技术
    • 协议的通用性。

    5.JAX-WS与JAXB包

    • JAX-WS:javax.jws,javax.jws.soap
    • JAXB:java api for xml binding,主要提供XML和JAVA之间的转换。

    6.Webservice框架比较

    • 1、JWS是Java语言对Webservice服务的一种实现,用来开发和发布服务。而从服务本身的角度来看JWS服务时没有语言界限的。但是Java语言为Java开发者提供便捷发布和调用Webservice服务的一种途径。
    • 2、Axis2是Apache下的一个重量级Webservice框架,它不但能制作和发布Webservice,而且还可以生成Java语言和其它语言版Webservice客户端和服务端代码。这是它的优势所在。但是,这也导致了AXIS2的复杂性,它所依赖的包数量上和大小上都是很大的,打包部署都比较麻烦,不能很好的与现有应用整合为一体。但是如果你要开发Java之外别的语言客户端,Axis2提供的丰富工具将是不二选择。
    • 3、XFire是一个高性能的Webservice框架,在Java6之前,它的知名度甚至超过了Apache的Axis2,XFire的优点是开发方便,与现有的web很好整合,可以融为一体,并且开发也很方便。但是对Java之外的语言,没有提供相关的代码工具。XFire后来被Apache收购后,慢慢的使用的人少了。
    • 4、CXF是Apache下一个重磅的SOA简易框架,它实现了ESB(企业服务总线)。CXF来自于XFire项目,经过改造后形成。CXF是一个优秀的Webservice/SOAP/WSDL引擎。

    二、WebService的JDK实现

      1.定义WebService服务端进行发布(建一个Java工程或者web工程)

    package com.wp.webservice;
    import javax.jws.WebService;
    import javax.xml.ws.Endpoint;
    @WebService
    public class WsService {
        public String sayHi(String name){
            return "hello" + name;
        }
        /**使用jdk发布webService服务*/
        public static void main(String[] args) {
            //address:进行访问的地址,Object:远程访问的具体对象,给address绑定Object
            Endpoint endPoint = Endpoint.publish("http://localhost:9090/wp", 
                    new WsService());
            System.out.println("webservice发布成功...");
        }
    }
    View Code

      2.使用对象的发布地址生成wsdl

      Wsdl:  webservice 的定义语言,描述了服务器的名称和服务器所能提供的功能。

      页面访问:http://localhost:9090/wp,里面有http://localhost:9090/wp?wsdl,打开便是wsdl文件。

      3.使用wsdl服务器说明书生成客户端的代码(新建web工程WsClient)

      

      

      4.测试

    package com.wp.test;
    import com.wp.client.WsService;
    import com.wp.client.WsServiceService;
    public class TestWsService {
        public static void main(String[] args) {
            //获得接口服务对象
            WsServiceService wss = new WsServiceService();
            //获得具体服务对象
            WsService ws = wss.getWsServicePort();
            //远程调用方法
            String result = ws.sayHi("乌龟");
            System.out.println(result);
        }
    }
    View Code

      结果:hello乌龟

    三、使用Ajax调用webservice服务

      Webservice的调试工具:

      1.MyEclipse:

      

      2.Eclipse

      

      下一步:

      

      从上面可以获得soap数据格式,从而组成ajax请求数据,如下程序所示,红色字体部分是组成的soap数据格式。

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <div id="content"></div>
        <div>
            <input type="text" id="sendContent"/>
            <input type="button" onclick="sendRequest()" value="测试"/>
        </div>
        <script type="text/javascript">
            var xhr;
            function sendRequest(){
                var sendContent = document.getElementById("sendContent").value;
                //1 创建xhr对象
                xhr = new XMLHttpRequest();
                // xhr进行初始化
                xhr.open("POST","http://localhost:9090/wp");
                
                var soap="<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' "+
                         "xmlns:q0='http://webservice.wp.com/' "+
                         "xmlns:xsd='http://www.w3.org/2001/XMLSchema' "+
                         "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'> "+
                         "<soapenv:Body> "+
                          "<q0:sayHi> "+
                          "<arg0>"+sendContent+"</arg0>  "+
                         "</q0:sayHi> "+
                         "</soapenv:Body> "+
                         "</soapenv:Envelope> ";
                
                xhr.onreadystatechange=callback;
                //设置请求头信息
                xhr.setRequestHeader("Content-Type", "text/xml;charset=utf-8");
                //向服务器发送请求,请求的数据为xml
                xhr.send(soap);
                
            }
            function callback(){
                if(xhr.readyState==4){
                    if(xhr.status==200){
                        var result = xhr.responseXML;
                        var returnValue = result.getElementsByTagName("return");
                        document.getElementById("content").innerHTML = returnValue[0].firstChild.nodeValue;
                    }
                }
            }
        </script>
    </body>
    </html>
    ajax调用示例

    部分引用:http://blog.csdn.net/apicescn/article/details/42965785

  • 相关阅读:
    linux centos 7.5 开启 postgresql 远程访问
    linux centos 7 开启 ftp
    CentOS 7.5 改IP后不生效无法上网解决办法
    Windows Server 2008R2 及上系统安装 Windows 可选功能
    C#只允许运行一个实例
    C# 命令行参数分割
    C# 获取所有已登录系统的用户名
    C#获取进程用户名
    psexec 用法
    检测 Visual C++ Redistributable Package 相应版本是否已安装
  • 原文地址:https://www.cnblogs.com/zhanxiaoyun/p/6137409.html
Copyright © 2011-2022 走看看