利用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 --完整的前后台配置与调用示例
在前端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 --完整的前后台配置与调用示例的更多相关文章
- C# 调用WebService的3种方式 :直接调用、根据wsdl生成webservice的.cs文件及生成dll调用、动态调用
1.直接调用 已知webservice路径,则可以直接 添加服务引用--高级--添加web引用 直接输入webservice URL.这个比较常见也很简单 即有完整的webservice文件目录如下图 ...
- Java调用WebService方法总结(8)--soap.jar调用WebService
Apache的soap.jar是一种历史很久远的WebService技术,大概是2001年左右的技术,所需soap.jar可以在http://archive.apache.org/dist/ws/so ...
- 在Android 中使用KSOAP2调用WebService
WebService 是一种基于SOAP协议的远程调用标准.通过WebService可以将不同操作系统平台,不同语言.不同技术整合到一起.在Android SDK中并没有提供调用WebService的 ...
- [转]Net 下采用GET/POST/SOAP方式动态调用WebService C#实现
本文转自:http://www.cnblogs.com/splendidme/archive/2011/10/05/2199501.html 一直以来,我们都为动态调用WebService方法而烦恼. ...
- .Net 下采用GET/POST/SOAP方式动态调用WebService的简易灵活方法(C#) [轉]Redfox
一直以来,我都为动态调用WebService方法而烦恼.在.Net环境下,最常用的方法就是采用代理类来调用WebService,可以通过改变代理类的Url属性来实现动态调用,但当xmlns改变时就会出 ...
- axis2调用webService几种方式
主要有三种方式: 第一RPC方式,不生成客户端代码 第二,document方式,不生成客户端代码 第三,用wsdl2java工具,生成客户端方式调用 java代码: package samples.q ...
- Axis2 webservice 之使用java调用webservice
在上一篇中写了一个简单了webservice,实现了一个sayHello功能.那么webservice写好之后我们如何使用Java程序来调用webservice呢? 一.java调用的webservi ...
- axis2调用webservice
public static long TIMEOUTINMILLISECONDS=100000; /** * 调用webservice * @param url webserviceURL * @pa ...
- Axis2(8):异步调用WebService
在前面几篇文章中都是使用同步方式来调用WebService.也就是说,如果被调用的WebService方法长时间不返回,客户端将一直被阻塞,直到该方法返回为止.使用同步方法来调用WebService虽 ...
随机推荐
- 实现Winform 跨线程安全访问UI控件
在多线程操作WinForm窗体上的控件时,出现“线程间操作无效:从不是创建控件XXXX的线程访问它”,那是因为默认情况下,在Windows应用程序中,.NET Framework不允许在一个线程中直接 ...
- centos下搭建Jenkins持续集成环境(安装jenkins)
1.安装JDK yum install -y java 2.安装jenkins 添加Jenkins库到yum库,Jenkins将从这里下载安装. 1 wget -O /etc/yum.repos.d/ ...
- How to solve the problem that BMW Icom A2 A3 host can’t be connected?
Aftre the BMW ICOM host is connected to the car via a 16PIN connector, and the other side is connect ...
- String类型转json 转JSONObject 转 JSONArray 以及 遍历
public PageVo getByPage(int pageNum, int pageSize) { PageVo pageVo = new PageVo(); System.out.printl ...
- mxnet 查看 Sym shape
import mxnet as mximport numpy as npimport randomimport mxnet as mximport sysdata_shape = {'data':(6 ...
- Oracle之数据库的增删改查和格式的修改
Oracle修改数据 *update语句 格式: update table_name set column1=value1,…[where conditions] 例子: update userinf ...
- django 上传文件及反馈信息
from django.shortcuts import render,HttpResponse from django.views import View from Fiskars.models i ...
- Docker学习笔记之镜像与容器
0x00 概述 镜像和容器作为 Docker 里最基础的概念,我们很有必要了解 Docker 对它们的很多定义以及其他与它们有关的知识.在这一小节里,我们就专门针对镜像与容器两个概念展开,细致的梳理与 ...
- Differences Between Enterprise, Standard and Standard One Editions on Oracle 11.2 (Doc ID 1084132.1)
标准版不允许并行.分区.闪回.各种缓存等大数据量必须特性,如此限制,oracle摆明了只卖企业版,买标准版不如mysql(如果不熟悉postgresql的话). Oracle企业版1 CPU 20w起 ...
- 02:MongoDB操作
1.1 MongoDB 增加 1.插入数据 1. 插入文档: insert 如果插入数据的时候,collection还不存在,自动创建集合 2. insertOne: 插入一条数据 3. insert ...