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文件配置:

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前端来处理。

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

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

    1.直接调用 已知webservice路径,则可以直接 添加服务引用--高级--添加web引用 直接输入webservice URL.这个比较常见也很简单 即有完整的webservice文件目录如下图 ...

  2. Java调用WebService方法总结(8)--soap.jar调用WebService

    Apache的soap.jar是一种历史很久远的WebService技术,大概是2001年左右的技术,所需soap.jar可以在http://archive.apache.org/dist/ws/so ...

  3. 在Android 中使用KSOAP2调用WebService

    WebService 是一种基于SOAP协议的远程调用标准.通过WebService可以将不同操作系统平台,不同语言.不同技术整合到一起.在Android SDK中并没有提供调用WebService的 ...

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

    本文转自:http://www.cnblogs.com/splendidme/archive/2011/10/05/2199501.html 一直以来,我们都为动态调用WebService方法而烦恼. ...

  5. .Net 下采用GET/POST/SOAP方式动态调用WebService的简易灵活方法(C#) [轉]Redfox

    一直以来,我都为动态调用WebService方法而烦恼.在.Net环境下,最常用的方法就是采用代理类来调用WebService,可以通过改变代理类的Url属性来实现动态调用,但当xmlns改变时就会出 ...

  6. axis2调用webService几种方式

    主要有三种方式: 第一RPC方式,不生成客户端代码 第二,document方式,不生成客户端代码 第三,用wsdl2java工具,生成客户端方式调用 java代码: package samples.q ...

  7. Axis2 webservice 之使用java调用webservice

    在上一篇中写了一个简单了webservice,实现了一个sayHello功能.那么webservice写好之后我们如何使用Java程序来调用webservice呢? 一.java调用的webservi ...

  8. axis2调用webservice

    public static long TIMEOUTINMILLISECONDS=100000; /** * 调用webservice * @param url webserviceURL * @pa ...

  9. Axis2(8):异步调用WebService

    在前面几篇文章中都是使用同步方式来调用WebService.也就是说,如果被调用的WebService方法长时间不返回,客户端将一直被阻塞,直到该方法返回为止.使用同步方法来调用WebService虽 ...

随机推荐

  1. 以太坊erc20转账失败的情况和原因

    以太坊erc20转账失败的情况和原因 eth转账失败有多种情况,除了手续费过低以外(Out of gas),众筹额度满了(Bad instruction)也会失败链上转账有可能失败,转账失败转账的币退 ...

  2. 洛谷 P2799 国王的魔镜

    把项链当做字符串输进去,可以用gets #include<iostream>#include<cstdio>#include<cmath>#include<c ...

  3. nmap扫描验证多种漏洞

    nmap在Kali Linux中是默认安装的.它不仅可以用来确定目标网络上计算机的存活状态,而且可以扫描各个计算机的操作系统.开放端口.服务,还有可能获得用户的证书. 命令结构: nmap -sS - ...

  4. 使用Wisdom RESTClient自动化测试REST API,如何取消对返回的body内容的校验?

    使用Wisdom RESTClient V1.1 自动化测试API,默认是对返回HTTP状态码和body内容进行校验的. 如果您的API返回body内容是变化的,可以通过设置来取消对body内容的校验 ...

  5. phpStudy集成环境下 安装composer

    报错提示: The "https://getcomposer.org/versions" file could not be downloaded: failed to open  ...

  6. JVM的垃圾回收机制

    JVM的垃圾回收机制:(GC通过确定对象是否被活动对象引用来确定是否收集该对象.) 1.触发GC(Garbage Collector)的条件. (1.GC在优先级最低的线程中运行,在未运行的线程中进行 ...

  7. PyCharm 设置护眼背景色

    PyCharm 设置护眼背景色 一.方法 File -> Seting -> Editor -> Color Scheme -> General -> Text -> ...

  8. Windows系统中设置Python程序定时运行方法

    Windows系统中设置Python程序定时运行方法 一.环境 win7 + Python3.6 二.步骤 1,在Windows开始菜单中搜索“计划任务”,并且点击打开“计划任务”: 2.点击“创建基 ...

  9. python简说(十二)time模块

    1.时间戳 print(int(time.time())) 2.取当前格式化好的时间 time.strftime('%Y-%m-%d %H:%M:%S') 3.时间戳转为格式化好的时间 time1 = ...

  10. Linux下的查找技巧

    Find知识点: -mtime ——修改时间 -ctime ——创建时间 -atime ——访问时间 mtime 举例说明: -mtime n : n为数字,意思为在n天之前的“一天之内”被更改过内容 ...