`
Java_Fan
  • 浏览: 81661 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

在前端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)页面测试:

输入


点击测试弹出框


输入框回填数据


后台控制台打印


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


分享到:
评论

相关推荐

    C#实现SOAP调用WebService

    最近写了一个SOA服务,开始觉得别人拿到我的服务地址,然后直接添加引用就可以使用了,结果"大牛"告知不行。...让我写一个SOAP调用服务的样例,我有点愣了,因为没做过这方面的,于是搞到了一个Demo,然后学习了下。

    js调用webservice示例+源码

    本文将深入探讨如何使用JavaScript调用Web Service,以及如何解决在这个过程中遇到的问题,以配合“js调用webservice示例+源码”的主题。 Web Service是一种基于网络的、平台无关的服务,它通过SOAP(Simple Object...

    PB9-soap-WEBSERVICE例子.rar

    这个例子可能包含完整的代码、配置文件以及相关的说明文档,用于演示如何在PB9环境下通过SOAP与Web服务进行交互。 描述中提到,“PB9通过soap方法调用webservice”,这暗示了我们需要了解SOAP的基本概念。SOAP是一...

    使用javascript调用webservice示例.pdf

    在本文中,我们将深入探讨如何使用JavaScript调用Web服务,特别是SOAP Web服务。JavaScript是一种广泛应用于客户端浏览器的脚本语言,它可以用来与服务器进行交互,包括调用Web服务以获取或发送数据。以下是一个示例...

    金蝶调用Webservice接口-SOAP

    本文主要介绍如何使用SOAP(Simple Object Access Protocol)方式来调用Webservice接口,以金蝶为例进行详细讲解。 首先,了解SOAP。SOAP是一种基于XML的协议,用于在Web上交换结构化的和类型化的信息。它通过HTTP...

    客户端调用webservice方式一(soap请求)

    本教程将详细讲解客户端如何通过SOAP(Simple Object Access Protocol)请求调用WebService,以实现根据订单号获取订单的物流信息。 **SOAP请求详解** SOAP是一种XML(eXtensible Markup Language)格式的消息协议...

    java+soap+webservice 调用模拟

    通过阅读提供的"java-soap-webservice"文档,你可以进一步了解具体的实现步骤,包括如何设置项目、配置JAX-WS、生成客户端代码、编写调用服务的代码,以及如何解析响应。实践中,不断动手操作和调试是掌握这一技术的...

    webservice、soap等接口调用参考

    参考代码.txt文件可能包含了一些示例代码,演示如何使用SOAP调用Web服务,特别是积分接口。通常,这会涉及到创建SOAP请求消息,设置必要的Header和Body信息,然后发送请求并解析返回的SOAP响应。在Java中,可能使用...

    ajax和JavaScript分别调用Webservice实例

    本压缩包包含的三个文档详细讲解了如何利用Ajax和JavaScript来调用WebService,这对于理解这两种技术的集成至关重要。 首先,让我们了解一下Ajax。Ajax是一种在不刷新整个网页的情况下,能够更新部分网页内容的技术...

    Js调用webService示例

    JavaScript调用WebService是一种常见的前后端通信方式,尤其在Web应用程序中,它允许客户端与服务器进行异步数据交换,实现动态内容的更新。本示例旨在详细介绍如何使用JavaScript调用WebService,以及涉及的相关...

    Javascript调用WebService

    使用javascript 中Ajax技术调用WebService,包括JSP和ASP.NET中两种,其中JSP的WebService使用了XFire框架。 ASP.NET中的WebService做了一个方法示例GetProgress,包含3个参数。 JSP中的WebService做了hello方法的...

    SOAP调用webservice例子

    **SOAP与RESTful API的对比** - SOAP是基于XML的,而RESTful API通常是基于JSON,后者更轻量级,解析速度更快。 - SOAP提供了一套完整的规范,包括错误处理、事务支持等,而RESTful API更灵活,但需要自定义这些功能...

    Web Service SOAP Client set SOAP Header

    当涉及到Web Service客户端与服务器之间的交互时,有时需要在SOAP消息中添加额外的信息,例如身份验证或安全凭证,这就是SOAP Header的作用。SOAP Header是SOAP Envelope的一部分,它允许扩展和自定义消息处理。 在...

    JAVA 调用SAP SOAP webservice.docx

    在本文中,我们将详细介绍如何使用 JAVA 调用 SAP SOAP webservice,包括配置 SAP 登录信息、创建 java 项目、添加 web 服务客户端、生成 JAVA 类、调用接口等步骤。 配置 SAP 登录信息 在使用 JAVA 调用 SAP SOAP...

    C#实现SOAP调用WebService.rar

    本主题聚焦于如何利用C#进行SOAP(Simple Object Access Protocol)调用来与WebService进行通信。SOAP是一种基于XML的协议,它允许分布式系统之间交换结构化和类型化的信息。 SOAP调用通常涉及到以下步骤: 1. **...

    SQL Server调用Webservice示例

    在示例中,"SQL项目调用Webservice示例"可能包含了一个完整的.NET存储过程示例,用于演示如何构建和调用Web Service。可能的结构包括: - 存储过程源代码,展示如何使用`System.Web.Services`命名空间的`WebClient`...

    使用JavaScript调用WebService的示例

    在Web服务领域,JavaScript可以通过多种方式与WebService进行交互,从而实现数据交换和远程功能调用。本篇将深入探讨如何使用JavaScript调用WebService,帮助开发者理解和掌握这一技术。 首先,了解WebService的...

    VB如何调用WebService

    在探讨“VB如何调用WebService”的主题时,我们首先需要理解几个关键概念:Visual Basic(简称VB),WebService,以及SOAP协议。Visual Basic是一种由微软开发的面向对象的编程语言,广泛应用于Windows平台上的应用...

    HttpClient 调用WebService示例

    在本示例中,我们假设你正在使用SOAP,因为通常需要发送XML格式的数据到WebService。 1. **导入必要的库**: 包含在压缩包中的jar文件可能是HttpClient库和其他依赖,如`httpclient.jar`, `httpcore.jar`, `...

    JavaScript调用WebService实例总结

    JavaScript调用WebService是一种常见的在客户端与服务器之间进行数据交互的方式,尤其在Web应用程序中,它允许JavaScript代码直接访问Web服务提供的功能。以下是对这个实例的详细解析和相关知识点的总结: 1. ...

Global site tag (gtag.js) - Google Analytics