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

  • 相关阅读:
    防删没什么意思啊,直接写废你~
    绝大多数情况下,没有解决不了的问题,只有因为平时缺少练习而惧怕问题的复杂度,畏惧的心理让我们选择避让,采取并不那么好的方案去解决问题
    Java 模拟面试题
    Crossthread operation not valid: Control 'progressBar1' accessed from a thread other than the thread it was created on
    一步步从数据库备份恢复SharePoint Portal Server 2003
    【转】理解 JavaScript 闭包
    Just For Fun
    The database schema is too old to perform this operation in this SharePoint cluster. Please upgrade the database and...
    Hello World!
    使用filter筛选刚体碰撞
  • 原文地址:https://www.cnblogs.com/zhanxiaoyun/p/6137409.html
Copyright © 2011-2022 走看看