WebService技术(一)
一、Webservice概述
W3C组织对其的定义是,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计。
Webservice服务通常被定义为一组模块化的API,它们可以通过网络进行调用,来执行远程系统的请求服务。
基本元素有:XML、SOAP、WSDL、UDDI。
Webservice = SOAP + HTTP + WSDL。其中,SOAP协议Webservice的主体,它通过HTTP或者SMTP等应用层协议进行通讯,自身使用XML文件来描述程序的函数方法和参数信息,从而完成不同主机的异构系统间的计算服务处理。这里的WSDL是web服务描述语言,也是一个XML文档,它通过HTTP向公众发布,公告客户端程序关于某个具体的Webservice服务的URL信息、方法的命名,参数,返回值等。
1.Webservice-soap
SOAP(Simple Object Access Protocol),简单对象访问协议,是一种基于XML的消息通讯格式,用于网络,不同平台,不同语言的应用程序间的通讯。一条SOAP消息就是一个普通的XML文档,包含下列元素:
- Envelope元素,标识XML文档一条SOAP消息(至少有一个)
- Header元素,包含头部信息的XML标签
- Body元素,包含所有的调用和响应的主体信息的标签(必有)
- Fault元素,错误信息标签。
SOAP工作方式:

soap client通过http发送soap请求,服务端管理器接收soap请求,然后去被部署的服务列表去找,有soap client请求的服务时,转发给XML Translator(XML 转换程序),XML Translator会将XML结构数据转换成实际的编程语言(JAVA语言等),处理后,回传到XML Translator,转换成XML文档对象,最后响应给soap client。
2.Webservice-wsdl
WSDL是基于XML的用于描述Webservice以及如何访问Webservice的语言,是一种描述接口定义的语言,用于描述Webservice的接口信息包括函数、参数、返回值等。因为是基于XML的,所以WSDL既是机器程序可阅读的,又是人可阅读的,这是一个很大的好处。一些最新的开发工具既能根据你的webservice生成WSDL文档,又能导入WSDL文档,生成调用相应的客户端代码。

3.Webservice工作原理

开发一个Webservice服务之后,会生成一个WSDL文档。此时,client发送Get请求,获取Server上所提供的服务,Server会把WSDL返回给客户端,客户端通过阅读WSDL可以看出Server提供哪些服务,这些服务应该如何去调用。客户端了解这些服务接口信息之后,会发起SOAP请求,SOAP请求包括功能性的、header里设置客户验证信息之类的,Server收到SOAP请求后,做一些相应的处理,把客户端想要的结果通过SOAP响应给客户端。
4.Webservice的优点
- 面向服务的分布式编程模型
- 完全的语言、平台独立性,即跨语言、跨操作系统的远程调用技术
- 协议的通用性。
5.JAX-WS与JAXB包
- JAX-WS:javax.jws,javax.jws.soap
- JAXB:java api for xml binding,主要提供XML和JAVA之间的转换。
6.Webservice框架比较
- 1、JWS是Java语言对Webservice服务的一种实现,用来开发和发布服务。而从服务本身的角度来看JWS服务时没有语言界限的。但是Java语言为Java开发者提供便捷发布和调用Webservice服务的一种途径。
- 2、Axis2是Apache下的一个重量级Webservice框架,它不但能制作和发布Webservice,而且还可以生成Java语言和其它语言版Webservice客户端和服务端代码。这是它的优势所在。但是,这也导致了AXIS2的复杂性,它所依赖的包数量上和大小上都是很大的,打包部署都比较麻烦,不能很好的与现有应用整合为一体。但是如果你要开发Java之外别的语言客户端,Axis2提供的丰富工具将是不二选择。
- 3、XFire是一个高性能的Webservice框架,在Java6之前,它的知名度甚至超过了Apache的Axis2,XFire的优点是开发方便,与现有的web很好整合,可以融为一体,并且开发也很方便。但是对Java之外的语言,没有提供相关的代码工具。XFire后来被Apache收购后,慢慢的使用的人少了。
- 4、CXF是Apache下一个重磅的SOA简易框架,它实现了ESB(企业服务总线)。CXF来自于XFire项目,经过改造后形成。CXF是一个优秀的Webservice/SOAP/WSDL引擎。
二、WebService的JDK实现
1.定义WebService服务端进行发布(建一个Java工程或者web工程)
package com.wp.webservice;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
@WebService
public class WsService {
public String sayHi(String name){
return "hello" + name;
}
/**使用jdk发布webService服务*/
public static void main(String[] args) {
//address:进行访问的地址,Object:远程访问的具体对象,给address绑定Object
Endpoint endPoint = Endpoint.publish("http://localhost:9090/wp",
new WsService());
System.out.println("webservice发布成功...");
}
}
2.使用对象的发布地址生成wsdl
Wsdl: webservice 的定义语言,描述了服务器的名称和服务器所能提供的功能。
页面访问:http://localhost:9090/wp,里面有http://localhost:9090/wp?wsdl,打开便是wsdl文件。
3.使用wsdl服务器说明书生成客户端的代码(新建web工程WsClient)


4.测试
package com.wp.test;
import com.wp.client.WsService;
import com.wp.client.WsServiceService;
public class TestWsService {
public static void main(String[] args) {
//获得接口服务对象
WsServiceService wss = new WsServiceService();
//获得具体服务对象
WsService ws = wss.getWsServicePort();
//远程调用方法
String result = ws.sayHi("乌龟");
System.out.println(result);
}
}
结果:hello乌龟
三、使用Ajax调用webservice服务
Webservice的调试工具:
1.MyEclipse:

2.Eclipse

下一步:

从上面可以获得soap数据格式,从而组成ajax请求数据,如下程序所示,红色字体部分是组成的soap数据格式。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<div id="content"></div>
<div>
<input type="text" id="sendContent"/>
<input type="button" onclick="sendRequest()" value="测试"/>
</div>
<script type="text/javascript">
var xhr;
function sendRequest(){
var sendContent = document.getElementById("sendContent").value;
//1 创建xhr对象
xhr = new XMLHttpRequest();
// xhr进行初始化
xhr.open("POST","http://localhost:9090/wp"); var soap="<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' "+
"xmlns:q0='http://webservice.wp.com/' "+
"xmlns:xsd='http://www.w3.org/2001/XMLSchema' "+
"xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'> "+
"<soapenv:Body> "+
"<q0:sayHi> "+
"<arg0>"+sendContent+"</arg0> "+
"</q0:sayHi> "+
"</soapenv:Body> "+
"</soapenv:Envelope> "; xhr.onreadystatechange=callback;
//设置请求头信息
xhr.setRequestHeader("Content-Type", "text/xml;charset=utf-8");
//向服务器发送请求,请求的数据为xml
xhr.send(soap); }
function callback(){
if(xhr.readyState==4){
if(xhr.status==200){
var result = xhr.responseXML;
var returnValue = result.getElementsByTagName("return");
document.getElementById("content").innerHTML = returnValue[0].firstChild.nodeValue;
}
}
}
</script>
</body>
</html>
ajax调用示例
部分引用:http://blog.csdn.net/apicescn/article/details/42965785
WebService技术(一)的更多相关文章
- webservice 技术改进
Webservice 技术改进 1.不同系统不同语言之间的交互 基于http协议进行传输,使用REST服务实现WS 2.不同系统相同语言之间的交互 使用RPC(romate process call) ...
- WebService技术,服务端发布到Tomcat(使用Servlet发布),客户端使用axis2实现(二)
还是在WebService技术,服务端and客户端JDK-wsimport工具(一)的基础上实现.新建一个包:com.aixs2client.目录结构如下: 一.服务端: 1.还是使用com.webs ...
- Java--详解WebService技术
Java--详解WebService技术 一.什么是 webservice WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 所谓跨编程语言和跨操作平台,就是说服务端程序采用jav ...
- Python的Web编程[2] -> WebService技术[0] -> 利用 Python 调用 WebService 接口
WebService技术 / WebService Technology 1 关于webservice / Constants WebService是一种跨编程语言和跨操作系统平台的远程调用技术. W ...
- webservice技术--服务器端
1.webservice实现单点登录具体逻辑为 ①软通web端作为客户端,请求wi社区后台,进行登录请求 ②wi社区后台验证t,核实无误后,走登录逻辑,直接进入欢迎页 ③如果有错误,封装错误xml,返 ...
- WebService技术简介
今天继续阅读<.Net 大局观>时看到一段关于WebService支持技术的论述,真是简明扼要: Web services的另一个重要应用是B2B整合,一般来说它也依赖Internet,将 ...
- WebService技术规则
1.基于web的系统级接口规范 - 一个普通适用标准 :http+xml - 任何网络通信的操作系统 - 自包含.自描述.模块化 - 发布.定位.通过web调用 2. ...
- WebService技术(二)— CXF
前言:学习笔记,以供参考 Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services .可以与Spring进行快速无 ...
- WebService技术,服务端and客户端JDK-wsimport工具(一)
使用webservice服务,需要了解几个名词:soap 简单对象协议.http+xml . WSDL 先看下代码结构: 服务端代码与客户端代码分别处于两不同的包中 一.服务端内容 服务端: @Web ...
随机推荐
- APEX初步
APEX是SFDC中用于开发的语言.语法上类似JAVA等面向对象的语言,运行起来类似数据库中的存储过程.可以在SFDC事件中添加业务逻辑,操作相关数据和用在Visual Force页面中. 保存,编译 ...
- 华硕win10文档类文件点击右键时会闪一下,没法用右键打开文件
华硕的win10系统,把系统自带的福昕软件Foxit PhantomPDF卸载了就好了
- (转载)详解网络传输中的三张表,MAC地址表、ARP缓存表以及路由表
郑重声明:原文转载于http://dengqi.blog.51cto.com/5685776/1223132 向好文章致敬!!! 一:MAC地址表详解 说到MAC地址表,就不得不说一下交换机的工作原理 ...
- Android中使用ShareSDK集成分享功能
引言 现在APP开发集成分享功能已经是非常普遍的需求了.其他集成分享技术我没有使用过,今天我就来介绍下使用ShareSDK来进行分享功能开发的一些基本步骤和注意点,帮助朋友们避免一些坑.好了 ...
- 浏览器内部工作原理--作者:Tali Garsiel
本篇内容为转载,主要用于个人学习使用,作者:Tali Garsiel 一.介绍 浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工作原理,我们将看到,从你在地址栏输入google.com到你看到 ...
- HttpCache缓存扩展方法
using System;using System.Collections;using System.Configuration;using System.Web;using System.Web.C ...
- 在布局中使用android.support.v4.app.Fragment的注意事项
1.Activity必须继承android.support.v4.app.FragmentActivity 2.fragment标签的name属性必须是完全限定包名,如下: <LinearLay ...
- jquery_DOM笔记3
css 操作: css()设置或者返回匹配元素的样式 height() 设置或者返回匹配元素的高度 width() 设置或者返回匹配元素的宽度 offset()设置或者返回匹配元素相对于文档的相对位置 ...
- git 常用命令总结
git是什么就不用说了,全世界都在用git.这里仅仅纪录git在mac上的一些使用命令(终端输入)操作,作为自己的备忘录,这里不做教程,下面会附上峰哥的教程. 1.安装git 最简单的安装方法,就是直 ...
- angular 自定义指令 directive transclude 理解
项目中断断续续的用了下angular,也没狠下心 认真的学习.angular 特别是自定义指令这块 空白. transclude 定义是否将当前元素的内容转移到模板中.看解释有点抽象. 看解释有点抽象 ...