zoukankan      html  css  js  c++  java
  • WebService学习小结

    定义:一些站点开放一些服务出来,也可以是你自己开发的service,也就是一些方法,通过URL,指定某一个方法名,发出请求,站点的这个服务(方法),接收请求后,根据传入的参数做一些处理,然后将处理后的结果以XML形式返回给你,你的程序就解析这些XML参数,然后显示出来或做其他操作。
    标准的调用过程:
    a 服务器首先用一套标准的方法向外界描述它所提供的服务的内容,就属于WSDL
    b 客户端需要以一种标准的协议来调用此服务,这属于SOAP.
    c 服务提供者将服务内容放在一个公共的网址让大家查询,就属于UDDI.
    服务提供者:提供服务及维护注册表以使服务可用;
    代理:服务提供者与服务请求者的中介;传统的代理是UDDI注册中心;
    服务请求者:发现 Web 服务,然后调用这些服务以创建应用程序;
    服务:应用程序,通过服务描述语言进行描述,其描述信息通过代理发布。
    SOAP 简单对象存取协议:(simple object access protocol)
    定义:当用户通过UDDI找到你的WSDL描述文档后,他通过可以Simple Object Access Protocol (SOAP) 调用你建立的Web服务中的一个或多个操作。 SOAP是XML文档形式的调用商业方法的规范,它可以支持不同的底层接口,象HTTP(S)或者SMTP。 之所以使用XML是因为它的独立于编程语言,良好的可扩展性以及强大的工业支持。之所以使用HTTP是因为几乎所有的网络系统都可以用这种协议来通信,由 于它是一种简单协议,所以可以与任何系统结合,还有一个原因就是它可以利用80端口来穿越过防火墙。 SOAP的强大是因为它简单。SOAP是一种轻量级的,非常容易理解的技术,并且很容易实现。它有工业支持,可以从各主要的电子商务平台供应商那里获得。 从技术角度来看,SOAP详细指明了如何响应不同的请求以及如何对参数编码。一个SOAP封装了可选的头信息和正文,并且通常使用HTTP POST方法来传送到一个HTTP 服务器,当然其他方法也是可以的,例如SMTP。SOAP同时支持消息传送和远程过程调用。以下是一个SOAP请求。

    WSDL服务内容的标准化描述:(web service Description Language)
    定义:WSDL的全称是web service Description Language,是一种基于XML格式的关于web服务的描述语言。其主要目的在于web service的提供者将自己的web服务的所有相关内容,如所提供的服务的传输方式,服务方法接口,接口参数,服务路径等,生成相应的完全文档,发布给使用者。使用者可以通过这个WSDL文档,创建相应的SOAP请求消息,通过HTTP传递给webservice提供者;web服务在完成服务请求后,将SOAP返回消息传回请求者,服务请求者再根据WSDL文档将SOAP返回消息解析成自己能够理解的内容

    UDDI 通用描述、发现与集成服务:(Universal Description, Discovery and Integration )
    定义:将web service进行UDDI注册发布,UDDI是一种创建注册表服务的规范,以便大家将自己的web service进行注册发布供使用者查找.然而当服务提供者想将自己的web service向全世界公布,以便外部找到其服务时,那么服务提供者可以将自己的web service注册到相应的UDDI商用注册网站,目前全球有IBM等4家UDDI商用注册网站。因为WSDL文件中已经给定了web service的地址URI,外部可以直接通过WSDL提供的URI进行相应的web service调用。所以UDDI并不是一个必需的web service组件,服务方完全可以不进行UDDI的注册


     

    Axis开发WebService应用小结

    1. 开发环境准备

    使用软件版本:JDK1.4.2Weblogic8.1axis1.4Eclipse3.2

    JDKWeblogicEclipse3.2准备过程略。

    下载axis1.4bin.zip,解压后将lib文件夹中的jar包拷贝至/web-inf/lib目录中,还需要包括activation.jar和mail.jar,分别下载jaf-1.0.2和javamail-1.4.3,axis需要用到这2jar中的类。

    如图:

     

    2. Axis配置

    新建Web Project,在web.xml文件中添加如下配置加入axis

    <!-- 添加Axis1.4Servlet  -->

    <servlet>  

    <servlet-name>AxisServlet</servlet-name>       <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>  

        <load-on-startup>2</load-on-startup>  

    </servlet>

     

    <!-- Axis1.4的发布路径  -->

    <servlet-mapping>  

         <servlet-name>AxisServlet</servlet-name>        <url-pattern>/services/*</url-pattern>

    </servlet-mapping> 

     

    /web-inf/目录下添加webServices.xml(可以指定其他目录,该文件为AxisSpring集成所需要的文件,为springbean配置文件,如无spring,可不用配置此项内容),在web.xml文件中加入以下配置将该文件加入到工程中去:

    <context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>/WEB-INF/webServices.xml </param-value>

    </context-param>

    以上两个配置可以在已经存在的web project中添加,加入以上配置后就可以使用Axis开发WebServices程序了。

    3. Axis服务端开发

    WebServices服务编写接口类及其实现类,样例接口类如下:

    public interface ISayHello {

    public String sayHello(String name);

    }

    public class SayHelloWebService implements ISayHello {

    public String sayHello(String name){

    String rs = " Hello my friend "+name+" ! "; 

    return rs;

    }

    }

     

    /web-inf/目录下新建server-config.wsdd文件部署WebServices服务:

    <deployment xmlns="http://xml.apache.org/axis/wsdd/" 

    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

    <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>

    <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>

    <service name="SayHello" provider="java:RPC">

    <parameter name="wsdlTargetNamespace" value="urn:soap.axisspring"/>

    <parameter name="className" value="com.tfhz.szds.webservice.test.SayHelloWebService" />

    <parameter name="allowedMethods" value="*" />

    </service>

    <transport name="http">

            <requestFlow>

                <handler type="URLMapper"/>

                <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>

            </requestFlow>

    <parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler"/>

            <parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>

            <parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler"/>

    </transport>

        <transport name="local">

            <responseFlow>

                <handler type="LocalResponder"/>

            </responseFlow>

        </transport>

    </deployment>

    其中红字的部分是WebServices服务的配置部分,该文档解释如下:

    1. deployment为文档根节点,必须包括该节点,其中后面的属性不能更改。
    2. 配置handler节点,使用handler可以实现类似filter的功能,此处用到URLMapperLocalResponder两个handler
    3. 每个WebServices服务都需要配置一个Service节点,name属性配置服务名称,provider属性配置服务访问方式,本例中是采用RPC方式;子节点parameter配置service的参数,参数wsdlTargetNamespace配置名称空间,参数className配置实现服务类,参数allowedMethods表示那些方法是WebServices服务可以调用的方法,“*”表示所有方法,可以配置多个方法,用“,”分隔。Service可以通过增加requestFlow节点引用某个handler,在service执行之前会先执行handlerinvoke方法,可以通过handler实现一些数据验证或者访问合法性的校验。
    4. Transport节点定义了服务端的传输方式,本例中定义了两个transporthttplocal

    4. Axis客户端开发

    public class WebServiceClientTest {

    public static void main(String[] args) {

    try {

    //WebService服务地址

    String nameSpaceUrl = "http://localhost:7001/WebContent/services/SayHello";

    //开始创建调用对象

    Service service = new Service();

    Call call = null;

    call = (Call)service.createCall();

    /**

     * 开始调用SayHello服务

     */

    //WebServicee服务调用地址

    call.setTargetEndpointAddress(new java.net.URL(nameSpaceUrl));

    //WebServicee服务调用方法名称

    call.setOperationName("sayHello");

    //WebServicee服务调用方法参数

    call.addParameter("name", XMLType.XSD_STRING, ParameterMode.IN);

    //WebServicee服务调用方法返回值类型

    call.setReturnType(XMLType.XSD_STRING);

     

    String reString = (String)call.invoke(new Object[]{"liwei"});

    System.out.println("  WebService 服务调用成功 result== "+reString);

     

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    }

    构造如上代码,运行main方法console中打印出:

      WebService 服务调用成功 result==  Hello my friend liwei !Here is WebService ......

     

     

    注意:根据以上步骤开发webservice,运行客户端时可能会报以下错误:

     

    以下是从网上找到的解决办法:

    WEB-INF/weblogic.xml下增加以下内容:

    <weblogic-web-app>
    <container-descriptor>
    <prefer-web-inf-classes>true</prefer-web-inf-classes>
    </container-descriptor>
    </weblogic-web-app>

     

    domain下的startWebLogic.cmd中

    set CLASSPATH=%WEBLOGIC_CLASSPATH%;%POINTBASE_CLASSPATH%;%JAVA_HOME%jrelib t.jar;%WL_HOME%serverlibwebservices.jar; %CLASSPATH%

    修改为:

    set CLASSPATH=%WEBLOGIC_CLASSPATH%;%POINTBASE_CLASSPATH%;%JAVA_HOME%jrelib t.jar; %CLASSPATH%;%WL_HOME%serverlibwebservices.jar

     

  • 相关阅读:
    2013-3 阿里性能稳定性沙龙
    8种Nosql数据库系统对比
    百度技术笔记之2013-1
    百度技术沙龙之2013-2&3
    【消息队列MQ】各类MQ比较
    Unity3D 游戏引擎之C#使用Socket与HTTP连接server数据传输包
    android的ndk学习(1)
    杭电 3555 Bomb
    FaceBook开源库Fresco
    SDUTOJ 2476Period
  • 原文地址:https://www.cnblogs.com/hdsbk/p/3543998.html
Copyright © 2011-2022 走看看