在前端javascript代码中直接调用webService服务,可以将后台调用webService的业务代码转移到前台,这样做的好处是:
1)减少了后台编码量;
2)在特定的情况下有助于减轻服务器压力,节省服务器资源;
3)有效提高服务器端的资源利用率;
但是也存在一定的弊端:
1)前端javascript编码的稳定性一直以来备受诟病;
2)并且对不同浏览器的编码调试比较麻烦;
对于JavaScriptSOAPClient的优缺点暂且不论,现在主要来了解是如何使用这个js库。
1java后台webService发布
任何前端的数据访问都离不开离不开后台webService的支撑,因此后台webService类库的选择以及配置是很关键的,只有在正确的类库版本和正确的配置webService方可保证后台对外释放的接口能够被有效调用。在java语言中有多重webService类库供大家使用,其中最常用的三种为Axis、Xfire、Restlet。
现在以axis1.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
}
}
这个类继承了importorg.springframework.remoting.jaxrpc.ServletEndpointSupport类,很明显我们是在spring框架下进行开发的,而且这个类中本来还有其他方法,略去。现在只需一个helloWorld()方法来测试即可。Spring相关的配置也略去。
2JavascriptSOAPClient前端调用webService
1)页面helloXeditService.htm
<html>
<head>
<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)页面测试:
输入
点击测试弹出框
输入框回填数据
后台控制台打印
以上测试就完成了JavascriptSOAPClient对webService接口的调用。免去了mvc中的controller部分并且将部分业务代码转移到了js前端来处理。
分享到:
相关推荐
最近写了一个SOA服务,开始觉得别人拿到我的服务地址,然后直接添加引用就可以使用了,结果"大牛"告知不行。...让我写一个SOAP调用服务的样例,我有点愣了,因为没做过这方面的,于是搞到了一个Demo,然后学习了下。
本文将深入探讨如何使用JavaScript调用Web Service,以及如何解决在这个过程中遇到的问题,以配合“js调用webservice示例+源码”的主题。 Web Service是一种基于网络的、平台无关的服务,它通过SOAP(Simple Object...
这个例子可能包含完整的代码、配置文件以及相关的说明文档,用于演示如何在PB9环境下通过SOAP与Web服务进行交互。 描述中提到,“PB9通过soap方法调用webservice”,这暗示了我们需要了解SOAP的基本概念。SOAP是一...
在本文中,我们将深入探讨如何使用JavaScript调用Web服务,特别是SOAP Web服务。JavaScript是一种广泛应用于客户端浏览器的脚本语言,它可以用来与服务器进行交互,包括调用Web服务以获取或发送数据。以下是一个示例...
本文主要介绍如何使用SOAP(Simple Object Access Protocol)方式来调用Webservice接口,以金蝶为例进行详细讲解。 首先,了解SOAP。SOAP是一种基于XML的协议,用于在Web上交换结构化的和类型化的信息。它通过HTTP...
本教程将详细讲解客户端如何通过SOAP(Simple Object Access Protocol)请求调用WebService,以实现根据订单号获取订单的物流信息。 **SOAP请求详解** SOAP是一种XML(eXtensible Markup Language)格式的消息协议...
通过阅读提供的"java-soap-webservice"文档,你可以进一步了解具体的实现步骤,包括如何设置项目、配置JAX-WS、生成客户端代码、编写调用服务的代码,以及如何解析响应。实践中,不断动手操作和调试是掌握这一技术的...
参考代码.txt文件可能包含了一些示例代码,演示如何使用SOAP调用Web服务,特别是积分接口。通常,这会涉及到创建SOAP请求消息,设置必要的Header和Body信息,然后发送请求并解析返回的SOAP响应。在Java中,可能使用...
本压缩包包含的三个文档详细讲解了如何利用Ajax和JavaScript来调用WebService,这对于理解这两种技术的集成至关重要。 首先,让我们了解一下Ajax。Ajax是一种在不刷新整个网页的情况下,能够更新部分网页内容的技术...
JavaScript调用WebService是一种常见的前后端通信方式,尤其在Web应用程序中,它允许客户端与服务器进行异步数据交换,实现动态内容的更新。本示例旨在详细介绍如何使用JavaScript调用WebService,以及涉及的相关...
使用javascript 中Ajax技术调用WebService,包括JSP和ASP.NET中两种,其中JSP的WebService使用了XFire框架。 ASP.NET中的WebService做了一个方法示例GetProgress,包含3个参数。 JSP中的WebService做了hello方法的...
**SOAP与RESTful API的对比** - SOAP是基于XML的,而RESTful API通常是基于JSON,后者更轻量级,解析速度更快。 - SOAP提供了一套完整的规范,包括错误处理、事务支持等,而RESTful API更灵活,但需要自定义这些功能...
当涉及到Web Service客户端与服务器之间的交互时,有时需要在SOAP消息中添加额外的信息,例如身份验证或安全凭证,这就是SOAP Header的作用。SOAP Header是SOAP Envelope的一部分,它允许扩展和自定义消息处理。 在...
在本文中,我们将详细介绍如何使用 JAVA 调用 SAP SOAP webservice,包括配置 SAP 登录信息、创建 java 项目、添加 web 服务客户端、生成 JAVA 类、调用接口等步骤。 配置 SAP 登录信息 在使用 JAVA 调用 SAP SOAP...
本主题聚焦于如何利用C#进行SOAP(Simple Object Access Protocol)调用来与WebService进行通信。SOAP是一种基于XML的协议,它允许分布式系统之间交换结构化和类型化的信息。 SOAP调用通常涉及到以下步骤: 1. **...
在示例中,"SQL项目调用Webservice示例"可能包含了一个完整的.NET存储过程示例,用于演示如何构建和调用Web Service。可能的结构包括: - 存储过程源代码,展示如何使用`System.Web.Services`命名空间的`WebClient`...
在Web服务领域,JavaScript可以通过多种方式与WebService进行交互,从而实现数据交换和远程功能调用。本篇将深入探讨如何使用JavaScript调用WebService,帮助开发者理解和掌握这一技术。 首先,了解WebService的...
在探讨“VB如何调用WebService”的主题时,我们首先需要理解几个关键概念:Visual Basic(简称VB),WebService,以及SOAP协议。Visual Basic是一种由微软开发的面向对象的编程语言,广泛应用于Windows平台上的应用...
在本示例中,我们假设你正在使用SOAP,因为通常需要发送XML格式的数据到WebService。 1. **导入必要的库**: 包含在压缩包中的jar文件可能是HttpClient库和其他依赖,如`httpclient.jar`, `httpcore.jar`, `...
JavaScript调用WebService是一种常见的在客户端与服务器之间进行数据交互的方式,尤其在Web应用程序中,它允许JavaScript代码直接访问Web服务提供的功能。以下是对这个实例的详细解析和相关知识点的总结: 1. ...