webServices学习三(概念详解)
WebService通过HTTP协议完成远程调用: (深入分析)
WebService只采用HTTP POST方式传输数据,不使用GET方式; -- 握手,WSDL-get,
普通http post的contentType为
application/x-www-form-urlencoded
WebService的contentType为-即在Http的基础上发SOAP协议
text/xml 这是基于soap1.1协议。
application/soap+xml 这是基于soap1.2协议。 WebService从数据传输格式上作了限定。WebService所使用的数据均是基于XML格式的。目前标准的WebService在数据格式上主要采用SOAP协议。SOAP协议实际上就是一种基于XML编码规范的文本协议。 SOAP – Simple Object Access protocol 简单对像访问协议。是运行在HTTP协议基础之上的协议。其实就是在HTTP协议是传输XML文件,就变成了SOAP协议。 SOAP1.1和SOAP1.2的 namespace不一样。可以通过查看类
javax.xml.ws.soap.SOAPBinding来查看里面的常量
默认情况下,Jdk1.6只支持soap1.1
即:@BindingType(value=javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_BINDING)
WebService和Web服务器的区别: WebService和Web服务器有什么区别呢?我们可以把WebService看作是Web服务器上应用;反过来说,Web服务器是WebService运行时所必需的容器。这就是它们的区别和联系。 使用JDK1.6发布的简单Web服务,其内部其实是使用Socket实现。可以查看:SUN公司未对外公布的API类com.sun.xml.internal.ws.transport.http.server. ServerMgr获知,请使用反编译工具。 WebService的特点
WebService通过HTTP POST方式接受客户的请求
WebService与客户端之间一般使用SOAP协议传输XML数据.
它本身就是为了跨平台或跨语言而设计的。
WebService的方式:
通过URLConnection调用
一、Ajax调用获取所有用户:
<html>
<body>
<button id="btn" onclick="getUsers();">获取所有用户</button>
</body>
<script language="javascript">
var xhr = null;
function getUsers(){
var url = "http://localhost:9999/user";//声明完整的url
//以下声明soap文本
var soap = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" '+
'xmlns:q0="http://ws2.itcast.cn/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" '+
'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'+
'<soapenv:Body><q0:users/></soapenv:Body></soapenv:Envelope>';
xhr.open("POST",url,true);
xhr.onreadystatechange=back;//以下设置请求头
xhr.setRequestHeader("Content-Type","text/xml;charset=UTF-8");
xhr.send(soap);//发送xml请求
}
function back(){
if(xhr.readyState==4){
if(xhr.status==200){
var xml = xhr.responseXML;//获取返回的xml文本并解析
var returns = xml.getElementsByTagName("return");
for(var i=0;i<returns.length;i++){
//var nm = returns[i].firstChild.text;//两种方式都可以
var nm = returns[i].getElementsByTagName("name")[0].text;
alert(nm);
}
}
}
}
//创建xhr对象,在IE上
function init(){
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
init();
</script>
</html>
二、客户端通过编程的方式访问服务:
使用javax.xml.ws.Service类用于访问web服务。
关键类Service
方法create – 用户创建Service对像,提供wsdlurl和服务名。
getPort-用于通过指定namespace,portName和接口的范型。
在客户端需要一个与服务器接口完全相同的类。(仍然使用工具生成。但只需要一个接口。并需要简单修改。如果返回的是复杂数据类型如POJO,还需要将POJO一并放到项目中)-不要试图通过-p来修改包名,会出错的。
关键类QName – 被称为完全限定名即:Qualified Name的缩写。
QName 的值包含名称空间 URI、本地部分和前缀。
1、以下是调用代码(以下代码仅供参考)
package com.itcast;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import com.leaf.mynamespace.MyName;
public class ClientTest {
public static void main(String[] args) throws Exception {
//create的第一个参数为一个URL对像,接收wsdl的地址信息
//QName的参数:1:
Service service =
Service.create(new URL("http://localhost:6666/helloworld?wsdl"),
new QName("http://leaf.com/mynamespace","myService"));
System.err.println(service);
//以下获取接口名
MyName o = service.getPort(
new javax.xml.namespace.QName("http://leaf.com/mynamespace","myPort"),
MyName.class);
System.err.println(o.mySayHiOperationName("中国北京"));
}
}
三、客户端编程-用的不是很多:
package cn;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import cn.wj.One;
public class Test {
public static void main(String[] args) throws Exception {
//声明wsdl地址
URL u = new URL("http://localhost:9999/one?wsdl");
//获取命名空间
String ns = "http://wj.cn";
//第二个参数是一个完全限定名,WjService是服务名
Service service = Service.create(u,new QName(ns,"WjService"));
//通过service的getPort方法返回指定的接口
One one = service.getPort(new QName(ns,"one"),One.class);
//调用sayHello方法
String ss = one.sayHello("DDDD");
System.err.println(ss);
}
}
webServices学习三(概念详解)的更多相关文章
- Struts2框架学习(三)——配置详解
一.struts.xml配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts ...
- MYSQL学习(三) --索引详解
创建高性能索引 (一)索引简介 索引的定义 索引,在数据结构的查找那部分知识中有专门的定义.就是把关键字和它对应的记录关联起来的过程.索引由若干个索引项组成.每个索引项至少包含两部分内容.关键字和关键 ...
- Hibernate学习三----------session详解
© 版权声明:本文为博主原创文章,转载请注明出处 如何获取session对象 1. openSession 2. getCurrentSession - 如果使用getCurrentSession需要 ...
- [转]iOS学习之UINavigationController详解与使用(三)ToolBar
转载地址:http://blog.csdn.net/totogo2010/article/details/7682641 iOS学习之UINavigationController详解与使用(二)页面切 ...
- iOS学习之UINavigationController详解与使用(三)ToolBar
1.显示Toolbar 在RootViewController.m的- (void)viewDidLoad方法中添加代码,这样Toobar就显示出来了. [cpp] view plaincopy [ ...
- iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem
http://blog.csdn.net/totogo2010/article/details/7681879 1.UINavigationController导航控制器如何使用 UINavigati ...
- 各大公司广泛使用的在线学习算法FTRL详解
各大公司广泛使用的在线学习算法FTRL详解 现在做在线学习和CTR常常会用到逻辑回归( Logistic Regression),而传统的批量(batch)算法无法有效地处理超大规模的数据集和在线数据 ...
- 跟我学机器视觉-HALCON学习例程中文详解-QQ摄像头读取条码
跟我学机器视觉-HALCON学习例程中文详解-QQ摄像头读取条码 第一步:插入QQ摄像头,安装好驱动(有的可能免驱动) 第二步:打开HDevelop,点击助手-打开新的Image Acquisitio ...
- Asp.Net MVC3 简单入门第一季(三)详解Controller之Filter
前言 前面两篇写的比较简单,刚开始写这个系列的时候我面向的对象是刚开始接触Asp.Net MVC的朋友,所以写的尽量简单.所以写的没多少技术含量.把这些技术总结出来,然后一简单的方式让更多的人很好的接 ...
- 从51跳cortex-m0学习2——程序详解
跳cortex-m0——思想转变>之后又一入门级文章,在此不敢请老鸟们过目.不过要是老鸟们低头瞅了一眼,发现错误,还请教育之,那更是感激不尽.与Cortex在某些操作方式上的异同,让自己对Cor ...
随机推荐
- Spring+SpringMVC+Mybatis搭建的网站的处理流程总结
最近学习了如何使用SSM框架搭建网站,以前没用过框架,第一次使用,总结一下自己对框架处理流程的理解
- error LNK1104: 无法打开文件“C:\Users\Administrator\Desktop\....\\xxxx.exe”
1.错误原因:项目在在打开前已经打开了win32里面的程序,并且运行. 解决方法:关闭直接在win32中运行的程序,再点击调试 2.暂时不知道原因,打开程序还会报无权限创建可执行文件.如下图所示 解 ...
- 继承关系中子类使用@Data注解问题
HashSet中使用@Data注解问题 平时习惯使用lombok工具,免去了我们写get.set方法之类的,当然了,我们使用@Data注解后,equals().hashCode().toString( ...
- 面试系列26 如何基于dubbo进行服务治理、服务降级、失败重试以及超时重试
(1)服务治理 1)调用链路自动生成 一个大型的分布式系统,或者说是用现在流行的微服务架构来说吧,分布式系统由大量的服务组成.那么这些服务之间互相是如何调用的?调用链路是啥?说实话,几乎到后面没人搞的 ...
- C++开发系列-纯虚函数和抽象类
概念 纯虚函数和抽象类 纯虚函数是一个在基类中说明的虚函数,在基类中没有定义,要求任何派生类都实现该函数. 纯虚函数为各派生类提供了一个公共界面(接口的封装和设计.软件的模块功能的划分) 纯虚函数说明 ...
- 连接RDS数据库
- vue-cli3使用yarn run build打包找不到路径
vue-cli3使用yarn run build打包项目部署到服务器上面,运行空白 解决办法非常方便,直接创建vue.config.js 在vue.config.js中添加即可 再打包项目即成功
- React在componentWillMount中请求接口数据结束后再执行render
1.在getInitialState中初始化isloading,初始值false getInitialState() { return { editionid: '', isloading:false ...
- echo 改变字体颜色
字颜色:30—–37 echo -e “\033[30m 黑色字 \033[0m” echo -e “\033[31m 红色字 \033[0m” echo -e “\033[32m 绿色字 \033[ ...
- AutoIt自动化编程(4)【转】
五.自动化操作轻松入门系列5 控件操作 然而,在真正实现自动化时仅靠上面的技术往往难以达到预期目的.下面开始进入最为重要的控件操作. 1.设置文本 在安装软件的过程中用户往往需要提供一些必需信息,比如 ...