利用JavaScriptSOAPClient直接调用webService --完整的前后台配置与调用示例

JavaScriptSoapClient下载地址:https://archive.codeplex.com/?p=javascriptsoapclient

JavaScriptSoapClient的Demo实例:  http://www.guru4.net/articoli/javascript-soap-client/demo/en.aspx

利用JavaScript SOAP Client直接调用webService --完整的前后台配置与调用示例

2013年01月04日 17:15:32

阅读数:19873

在前端javascript代码中直接调用webService服务,可以将后台调用webService的业务代码转移到前台,这样做的好处是:

1) 减少了后台编码量;

2) 在特定的情况下有助于减轻服务器压力,节省服务器资源;

3) 有效提高服务器端的资源利用率;

但是也存在一定的弊端:

1) 前端javascript编码的稳定性一直以来备受诟病;

2) 并且对不同浏览器的编码调试比较麻烦;

对于JavaScript SOAP Client的优缺点暂且不论,现在主要来了解是如何使用这个js库。

1  java后台webService发布

任何前端的数据访问都离不开离不开后台webService的支撑,因此后台webService类库的选择以及配置是很关键的,只有在正确的类库版本和正确的配置webService方可保证后台对外释放的接口能够被有效调用。在java语言中有多重webService类库供大家使用,其中最常用的三种为Axis、Xfire 、Restlet。

现在以axis 1.4 来进行后台webService接口的配置发布。

1) 创建一个web工程,在工程的web.xml文件中添加如下配置信息:

<servlet>
        <servlet-name>AxisServlet</servlet-name>
        <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>AdminServlet</servlet-name>
        <servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
        <load-on-startup>100</load-on-startup>
    </servlet>
    <servlet>
        <servlet-name>SOAPMonitorService</servlet-name>
        <servlet-class>org.apache.axis.monitor.SOAPMonitorService</servlet-class>
        <init-param>
            <param-name>SOAPMonitorPort</param-name>
            <param-value>5001</param-value>
        </init-param>
        <load-on-startup>100</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/servlet/AxisServlet</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>*.jws</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>SOAPMonitorService</servlet-name>
        <url-pattern>/SOAPMonitor</url-pattern>
    </servlet-mapping>
    <mime-mapping>
        <extension>wsdl</extension>
        <mime-type>text/xml</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>xsd</extension>
        <mime-type>text/xml</mime-type>
    </mime-mapping>

2) 用于发布服务的server-config.wsdd文件配置:

<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
    <globalConfiguration>
        <parameter name="adminPassword" value="admin" />
        <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl" />
        <parameter name="sendXsiTypes" value="true" />
        <parameter name="sendMultiRefs" value="true" />
        <parameter name="sendXMLDeclaration" value="true" />
        <parameter name="axis.sendMinimizedElements" value="true" />
        <requestFlow>
            <handler type="java:org.apache.axis.handlers.JWSHandler">
                <parameter name="scope" value="session" />
            </handler>
            <handler type="java:org.apache.axis.handlers.JWSHandler">
                <parameter name="scope" value="request" />
                <parameter name="extension" value=".jwr" />
            </handler>
        </requestFlow>
    </globalConfiguration>
    <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder" />
    <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" />
    <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />
    <service name="AdminService" provider="java:MSG">
        <parameter name="allowedMethods" value="AdminService" />
        <parameter name="enableRemoteAdmin" value="false" />
        <parameter name="className" value="org.apache.axis.utils.Admin" />
        <namespace>http://xml.apache.org/axis/wsdd/</namespace>
    </service>
    <service name="Version" provider="java:RPC">
        <parameter name="allowedMethods" value="getVersion" />
        <parameter name="className" value="org.apache.axis.Version" />
    </service>  

    <!-- xedit 生成表格/表单通用服务 -->
    <service name="XeditService" provider="java:RPC">
        <parameter name="allowedMethods" value="*"/>
        <parameter name="scope" value="Request"/>
        <parameter name="className" value="com.adam.xedit.service.server.XeditService"/>
        <parameter name="wsdlPortType" value="Xedit"/>
        <parameter name="typeMappingVersion" value="1.2"/>
    </service>  

    <transport name="http">
        <requestFlow>
            <handler type="URLMapper" />
            <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
        </requestFlow>
    </transport>
    <transport name="local">
        <responseFlow>
            <handler type="LocalResponder" />
        </responseFlow>
    </transport>
</deployment> 

其中xedit 生成表格/表单通用服务是我们将要提供的接口类。

3) 对外释放的接口类:

package com.adam.xedit.service.server;  

import javax.xml.rpc.ServiceException;  

import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;
import org.springframework.context.ApplicationContext;
import org.springframework.remoting.jaxrpc.ServletEndpointSupport;  

import com.adam.xedit.service.server.biz.XeditServiceBiz;  

/**
 * 对外调用的接口
 * @公司名称:
 * @作者:
 * @创建时间:
 */
public class XeditService extends ServletEndpointSupport
{
    private static final long serialVersionUID = 1L;  

    private ApplicationContext applicationContext;
    private XeditServiceBiz xsBiz;  

    protected void onInit() throws ServiceException
    {
        super.onInit();
        applicationContext = super.getApplicationContext();
        xsBiz = (XeditServiceBiz) applicationContext.getBean("xsBiz");
    }
  
  //略去的代码
  
    /**
     * 用于javascript soapClient调用接口服务的测试
     *
     * @param name 名字
     * @return
     */
    public String helloWorld(String name)
    {
        String str = "hello," + name;
        System.out.println(str);
        return str;
    }
  
    public void destroy()
    {
        super.destroy();
    }  

    public void invoke(MessageContext arg0) throws AxisFault
    {
        // TODO Auto-generated method stub
    }
}  

这个类继承了import org.springframework.remoting.jaxrpc.ServletEndpointSupport类,很明显我们是在spring框架下进行开发的,而且这个类中本来还有其他方法,略去。现在只需一个helloWorld() 方法来测试即可。Spring相关的配置也略去。

2 Javascript SOAP Client 前端调用webService

1) 页面helloXeditService.htm

<script type="text/javascript" src="../gis/class/jquery-1.2.6.js"></script>
<script type="text/javascript" src="../gis/js.src/xedit.service.js"></script>
<script type="text/javascript" src="../gis/js.src/soapclient21.js"></script>

<!-- 此处略去此理没用到的js -->
<script language="javascript">
        var serviceUrl = "../../services/XeditService";
        var xeditService = new XeditService(serviceUrl);
    /*
    * 均用于测试helloWorld
    **/
    $(document).ready(function(){
        $(‘#btnTest‘).click(function(){
            var txtTest = $(‘#txtTest‘).val();
            var result = xeditService.helloWorld(txtTest);
            if(result.error){
                alert(result.errorDetail.string);return false;
            }else{
                $(‘#txtTest‘).val(result.value);
                alert(txtTest);
            }
        });
    });
    </script>
</head>
<body>
    <div id="mainDiv" style="width:100%;">
        <!-- propertyGrid  -->
        <div id="propertyGridDiv" style="width:350px;">
            <!-- 测试用 -->
            <table>
                <tr id="trTest">
                    <td style="border-color:red;"><input type="text" id="txtTest" width="300px";></input></td>
                    <td align="left"><input type="button" id="btnTest" value="测试" ></input></td>
                </tr>
            </table>
  
  ...
  </body>
  </html>

该页面也删去了该示例没用到的代码。

1) Xedit.service.js

function XeditService(url){
    this.base = Xedit2ServiceBase;
    this.base(url);
}

XeditService.prototype = new Xedit2ServiceBase;

//helloWorld测试(用于测试JavaScript SOAP Client调用service是否成功)
XeditService.prototype.helloWorld = function(name){
    var param = new SOAPClientParameters();
    param.add(‘name‘,name);
    var result = SOAPClient.invoke(this._url, "helloWorld", param, false);
    return result;
  }
  //略去不相关的代码
function Xedit2ServiceBase(url){
    this._url = url;
}

Xedit2ServiceBase.prototype.toString = function(){
    return this._url;
  }
  //略去不相关的代码

1) 页面测试:

输入

点击测试弹出框

输入框回填数据

后台控制台打印

以上测试就完成了Javascript SOAP Client对webService接口的调用。免去了mvc中的controller部分并且将部分业务代码转移到了js前端来处理。

原文地址:https://www.cnblogs.com/zhaoyanhaoBlog/p/9182364.html

时间: 2024-08-25 14:46:56

利用JavaScriptSOAPClient直接调用webService --完整的前后台配置与调用示例的相关文章

C# 调用WebService的3种方式 :直接调用、根据wsdl生成webservice的.cs文件及生成dll C#调用、动态调用

1.直接调用 已知webservice路径,则可以直接 添加服务引用--高级--添加web引用 直接输入webservice URL.这个比较常见也很简单 即有完整的webservice文件目录如下图所示, 也可以在本地IIS根据webservice文件目录新发布一个webservice,然后程序动态调用,修改Url public new string Url { set; get; } 2.根据wsdl文件生成webservice 的.cs文件 及 生成dll C#调用   有时没有这么多文件

Android:调用webservice详解;

很多时候要用到android端调用webservice服务, 下面例子就是调用webservice 以及对流的多种方式处理: package com.example.android_webservice; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputSt

[转]Net 下采用GET/POST/SOAP方式动态调用WebService C#实现

本文转自:http://www.cnblogs.com/splendidme/archive/2011/10/05/2199501.html 一直以来,我们都为动态调用WebService方法而烦恼.在.Net环境下,最常用的方法就是采用代理类来调用WebService,可以通过改变代理类的Url属性来实现动态调用,但当xmlns改变时就会出错,似乎要重新绑定Webservice并重新编译后才能再次运行.我无意中通过百度搜索找了一个采用GET/POST/SOAP方式动态调用WebService的

axis2调用webService几种方式

主要有三种方式: 第一RPC方式,不生成客户端代码 第二,document方式,不生成客户端代码 第三,用wsdl2java工具,生成客户端方式调用 java代码: package samples.quickstart.client; import javax.xml.namespace.QName; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apa

(转载)Net 下采用GET/POST/SOAP方式动态调用WebService C#实现

转自http://www.cnblogs.com/splendidme/archive/2011/10/05/2199501.html 一直以来,我们都为动态调用WebService方法而烦恼.在.Net环境下,最常用的方法就是采用代理类来调用WebService,可以通过改变代理类的Url属性来实现动态调用,但当xmlns改变时就会出错,似乎要重新绑定Webservice并重新编译后才能再次运行.我无意中通过百度搜索找了一个采用GET/POST/SOAP方式动态调用WebService的简易灵

WebService应用之客户端 Ksoap 库调用

KSOAP2 是第三方开发的专门用于在移动设备调用WebService的类库.使用 KSOAP2 调用 WebService 可分为6步来完成,其中主要使用了 SoapObject 对象来指定了要调用的方法,然后通过 HttpTransportSE 对象的call方法来调用WebService的方法,最后通过 getResponse 方法返回结果.读者可以通过本文提 供的完整示例来体会使用KSOAP2调用WebService的完整过程.在最后还介绍了如何通过异步调用 WebService 的方式

动态调用WebService接口的几种方式

一.什么是WebService? 这里就不再赘述了,想要了解的====>传送门 二.为什么要动态调用WebService接口? 一般在C#开发中调用webService服务中的接口都是通过引用过来就行调用的,步骤如下: 1.找到引用,右击添加服务引用,找到高级,添加web引用,添加之后就可以直接调用里面的方法. 以上这种方法是最简单粗暴的一种方式.当然在开发中总是不那么如意,以上方式是在本机直接可以访问服务的地址,假如在本机不能直接访问WebService,那么就会有些蛋疼. 这种方式就不可取了

C/C++利用gsoap库调用WebService

C/C++调用WebService需要用到soap库,一般使用的有gsoap和axis cpp两种实现,这里使用gsoap来调用.gsoap可以在 linxu.windows.mac多种平台上使用. gsoap的主页地址是http://gsoap2.sourceforge.net/ 新建一个WebService: 1 //写一个简单的方法 2 [WebMethod(Description="返回字符串")] 3 public string HelloWorld(string str)

利用ksoap调用webservice

博文参考: http://www.cnblogs.com/shenliang123/archive/2012/07/05/2578586.html http://blog.csdn.net/jimbo_lee/article/details/23612333 http://www.cnblogs.com/zhangchaoyang/articles/1955834.html 注意: 1.需要加网络权限 2.跟一般的联网操作一样需要在子线程中. 3.两个主要参数: webservice的命名空间和