WebService是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。

  Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。Web Service也很容易部署, 因为它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP。Web Service减少了应用接口的花费。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。
  说白了,WebService就是两个系统之间的远程调用技术,WebService之间的调用可以实现跨语言调用,因为调用使用的是HTTP协议,传输的数据格式是XML。

  WebService只采用HTTP POST方式传输数据,不使用GET方式。

 

  WebService的特点::

  (1)互操作性

  任何的WebService之间都可以进行交互。由于WebService与客户端之间一般使用SOAP协议传输XML数据,而因为SOAP这个所有主要供应商都支持的新标准协议,所以避免了在CORBA、DCOM和其他协议之间需要转换的麻烦,并且可以使用任何程序语言来编写WebService,节约了编程者的开发成本。

  (2)普遍性

  WebService通过HTTP POST方式接受客户的请求,利用HTTP和XML进行通信,因此,任何支持这些技术的设备都可以拥有和访问Web Service。

    (3)易于使用

    Web Service蕴涵的基本概念易于理解,开发不受程序语言和平台的限制,它本身就是为了跨平台或跨语言而设计的。

  (4)行业支持

   所有主要的供应商都支持SOAP和WebService技术。

  

  说WebService之前先介绍一下两个很重要的概念SOAP和WSDL。

  首先是SOAP(Simple Object Access Protocol)简单对象访问协议

    简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。

    其实就是在HTTP协议是传输XML文件,就变成了SOAP协议。

     (1)SOAP作为一个基于XML语言的协议用于在网上传输数据。

     (2)SOAP是基于HTTP的,SOAP = 在HTTP的基础上+XML数据。

     (3)SOAP的组成如下:

    Envelope – 必须的部分。以XML的根元素出现。

    Headers – 可选的。

    Body – 必须的。在body部分,包含要执行的服务器的方法。和发送到服务器的数据。

  soap示例

<!-- 请求 -->
POST /WebServices/MobileCodeWS.asmx HTTP/1.1
Host: ws.webxml.com.cn
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://WebXml.com.cn/getMobileCodeInfo" <?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getMobileCodeInfo xmlns="http://WebXml.com.cn/">
<mobileCode>string</mobileCode>
<userID>string</userID>
</getMobileCodeInfo>
</soap:Body>
</soap:Envelope>
<!-- 响应 -->
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length <?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getMobileCodeInfoResponse xmlns="http://WebXml.com.cn/">
<getMobileCodeInfoResult>string</getMobileCodeInfoResult>
</getMobileCodeInfoResponse>
</soap:Body>
</soap:Envelope>

  

  然后是WSDL (WebService Description Language)Web服务描述语言

  它包含一系列描述某个web service的定,其实就是一个xml文档,用于描述当前服务的一些信息(服务名称、服务的发布地址、服务提供的方法、方法的参数类型、方法的返回值类型等)

  WSDL示例

<!--
Published by JAX-WS RI (http://jax-ws.java.net). RI's version is JAX-WS RI 2.2.9-b130926.1035 svn-revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e.
-->
<!--
Generated by JAX-WS RI (http://jax-ws.java.net). RI's version is JAX-WS RI 2.2.9-b130926.1035 svn-revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e.
-->
<definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://webxml.com.cn/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://webxml.com.cn/" name="TestWebServiceService">
<types>
<xsd:schema>
<xsd:import namespace="http://webxml.com.cn/" schemaLocation="http://localhost:8080/first?xsd=1"/>
</xsd:schema>
</types>
<message name="firstWebService">
<part name="parameters" element="tns:firstWebService"/>
</message>
<message name="firstWebServiceResponse">
<part name="parameters" element="tns:firstWebServiceResponse"/>
</message>
<portType name="TestWebService">
<operation name="firstWebService">
<input wsam:Action="http://webxml.com.cn/TestWebService/firstWebServiceRequest" message="tns:firstWebService"/>
<output wsam:Action="http://webxml.com.cn/TestWebService/firstWebServiceResponse" message="tns:firstWebServiceResponse"/>
</operation>
</portType>
<binding name="TestWebServicePortBinding" type="tns:TestWebService">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="firstWebService">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="TestWebServiceService">
<port name="TestWebServicePort" binding="tns:TestWebServicePortBinding">
<soap:address location="http://localhost:8080/first"/>
</port>
</service>
</definitions>

  WebService的简单使用

  服务端的发布:基于JDK1.8发布一个WebService服务

  第一步:创建一个Java项目

  第二步:创建一个类,加入Webservice注解

  @WebService是jdk提供的一个注解,它位于javax.jws.*这个包中。

  第三步:创建一个方法

  第四步:在main方法中调用jdk提供的发布服务的方法

    通过EndPoint(端点服务)发布一个webService。

    Endpoint也是jdk提供的一个专门用于发布服务的类,它的publish方法接收两个参数,一个是本地的服务地址,二是提供服务的类。它位于javax.xml.ws.*包中。

    static Endpoint.publish(String address, Object implementor)   在给定地址处针对指定的实现者对象创建并发布端点。

    stop方法用于停止服务。

    EndPoint发布完成服务以后,将会独立的线程运行。所以,publish之后的代码,可以正常执行。

    注意事项:

      (1)给类添加上@WebService注解后,类中所有的非静态方法都将会对外公布。

      (2)不支持静态方法,final方法。-

      (3)如果希望某个方法(非static,非final)不对外公开,可以在方法上添加@WebMethod(exclude=true),阻止对外公开。

      (4)如果一个类上,被添加了@WebService注解,则必须此类至少有一个可以公开的方法,否则将会启动失败。

import javax.jws.WebService;
import javax.xml.ws.Endpoint; @WebService
public class TestWebService {
public static void main(String[] args) {
String address = "http://localhost:8080/first";
Object implementor = new TestWebService();
Endpoint.publish(address, implementor);
} public String firstWebService(String name){
System.out.println("一个简单的WebService服务");
return "Hello "+name;
}
}

  第五步:访问服务的wsdl文档(服务的发布地址+?wsdl)http://localhost:8080/first?wsdl

  出来的页面就是刚刚上面的wsdl示例

  目前不是访问webService,只是获取一个用于描述WebService的说明文件,即:wsdl文件.

  wsdl是以XML文件形式来描述WebService的”说明书”,有了说明书,我们才可以知道如何使用或是调用

  而基于JDK发布的WebService服务与普通的不太一样,方法的参数与返回值需要访问http://localhost:8080/first?xsd=1来查看

<!--
Published by JAX-WS RI (http://jax-ws.java.net). RI's version is JAX-WS RI 2.2.9-b130926.1035 svn-revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e.
-->
<xs:schema xmlns:tns="http://webxml.com.cn/" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" targetNamespace="http://webxml.com.cn/">
<xs:element name="firstWebService" type="tns:firstWebService"/>
<xs:element name="firstWebServiceResponse" type="tns:firstWebServiceResponse"/>
<xs:complexType name="firstWebService">
<xs:sequence>
<xs:element name="arg0" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="firstWebServiceResponse">
<xs:sequence>
<xs:element name="return" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:schema>

  客户端调用

  首先,使用JDK中的wsimport命令,他的作用是解析wsdl文件,生成客户端本地代码。

  wsimport是jdk自带的,可以根据wsdl文档生成客户端调用代码的工具.当然,无论服务器端的WebService是用什么语言写的,都将在客户端生成Java代码.服务器端用什么写的并不重要.

  wsimport.exe位于JAVA_HOME\bin目录下.

  常用参数为:

    -d<目录>  - 将生成.class文件。默认参数。

    -s<目录> - 将生成.java文件。

    -p<生成的新包名> -将生成的类,放于指定的包下。

    (wsdlurl) - http://server:port/service?wsdl,必须的参数。

    示例:

    在cmd中执行这条命令

   wsimport -s . http://localhost:8080/first?wsdl

    注意:(1)-s不能分开,-s后面有个小点,用于指定源代码生成的目录。点即当前目录。

         (2)如果使用了-s参数则会在目录下生成两份代码,一份为.class代码。一份为.java代码。

              (3).class代码,可以经过打包以后使用。.java代码可以直接Copy到我们的项目中运行。

    执行完这句指令后,在相应的文件夹中会生成以下文件

  接下来,把这些文件中的Java文件拷贝到工程的src目录下

  写一个测试类

package cn.com.webxml;

/**
* 1、使用wsimport命令解析wsdl文件生成本地代码
* 2、通过本地代码创建一个代理对象
* 3、通过代理对象实现远程调用
*/
public class TestApp {
public static void main(String[] args) {
TestWebServiceService ts = new TestWebServiceService();
//创建客户端代理对象,用于远程调用
TestWebService proxy = ts.getTestWebServicePort();
String result = proxy.firstWebService("小明");
System.out.println(result); }
}

  执行后,发现产生如下结果,客户端控制台与服务端控制台打印

              

  到现在,一个简单的WebService程序就完成了。

  如果对WebService有了一定了解,可以了解一下CXF,因为我们很少直接用WebService进行开发。

  链接:http://www.cnblogs.com/xiaobai1226/p/7583758.html

  

WebService的简单介绍与入门使用的更多相关文章

  1. Mysql数据库的简单介绍与入门

    Mysql数据库的简单介绍与入门 前言 一.下载与安装 1.下载 官网下载MYSQL5.7.21版本,链接地址https://www.mysql.com/downloads/.下载流程图如下: 找到M ...

  2. RESTful简单介绍(入门)

    1.1      什么是RESTful http://www.ruanyifeng.com/blog/2011/09/restful.html RESTful架构,就是目前最流行的一种互联网软件架构. ...

  3. XML和DTD的简单介绍和入门

    XML(Extensible Markup Lanaguage),可扩展标记语言,是标准通用标记语言(Standard Generalized Markup Language, SGML)的一个子集, ...

  4. 【浅墨著作】《OpenCV3编程入门》内容简单介绍&amp;勘误&amp;配套源码下载

    经过近一年的沉淀和总结,<OpenCV3编程入门>一书最终和大家见面了. 近期有为数不少的小伙伴们发邮件给浅墨建议最好在博客里面贴出这本书的文件夹,方便大家更好的了解这本书的内容.事实上近 ...

  5. WPF自学入门(六)WPF带标题的内容控件简单介绍

    在WPF自学入门(二)WPF-XAML布局控件的文章中分别介绍StackPanel,WarpPanel,DockPanel,Grid,Canvas五种布局容器的使用,可以让我们大致了解容器可以使用在什 ...

  6. Mahout学习之Mahout简单介绍、安装、配置、入门程序測试

    一.Mahout简单介绍 查了Mahout的中文意思--驭象的人,再看看Mahout的logo,好吧,想和小黄象happy地玩耍,得顺便陪陪这位驭象人耍耍了... 附logo: (就是他,骑在象头上的 ...

  7. WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍

    WPF自学入门(十一)WPF MVVM模式Command命令   在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式 ...

  8. 【转载】salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)

    salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)   salesforce中对于数据库操作和JAVA等语言对于数据库操作是有一定区别的.salesfo ...

  9. webpack入门篇--1.简单介绍

    简单介绍: webpack是一个模块打包工具,给js准备的打包工具,可以把很多的模块打包成很少的文件 目标: 1.切分依赖数,分到不同代码块里,按需加载,懒加 载 2.任何静态资源都可以被视为一个模块 ...

随机推荐

  1. 横排列表(li)的左右对齐

    效果如下: HTML代码如下: <div class="overdiv"> <ul> <li>1</li> <li>2& ...

  2. 深入理解HTTP协议—HTTP协议详解(真的很经典)

    引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...

  3. Thinkjs使用ajax实现表单提交

    //前端代码 1 $('form').submit(evt=>{ evt.preventDefault();//阻止表单默认提交 $.ajax({ url: '/user/personal/up ...

  4. 读取Execl表 导入数据库

    不知不觉博客园园林都两年多了,我是今年毕业的应届生,最近公司项目需要改动,很多的数据需要导入,很多的实体类需要些.考虑到这些问题自己写了两个winform版的小工具,一个是读取Execl数据导入数据库 ...

  5. Oracle实现分页查询的SQL语法汇总

    1.无ORDER BY排序的写法.(效率最高) 经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然! sql语句如下: ) TABLE_ALIAS ; 2. ...

  6. Ajax异步请求模板

    $.ajax({ url: '', type: 'post', data: {'id':id}, dataType: 'json', success: function(data,statusText ...

  7. Tinyhttpd 代码学习

    前阵子,参加了实习生面试,被面试官各种虐,问我说有没有读过一些开源的代码.对于只会用框架的我来说真的是硬伤啊,在知乎大神的推荐下在EZLippi-浮生志找了一些源代码来阅读,于是从小型入手,找了Tin ...

  8. Qt--自定义Model

    众所周知,Qt提供了一套Model/View框架供开发者使用,Model用来提供数据, View则用来提供视觉层的显示.实际上这是一套遵循MVC设计模式的GUI框架,因为Qt还提供了默认的Delega ...

  9. MySQL索引实战经验总结

    MySQL索引对数据检索的性能至关重要,盲目的增加索引不仅不能带来性能的提升,反而会消耗更多的额外资源,本篇总结了一些MySQL索引实战经验. 索引是用于快速查找记录的一种数据结构.索引就像是数据库中 ...

  10. Linux shell中的竖线(|)——…

    原文地址:Linux shell中的竖线(|)--管道符号作者:潇潇 管道符号,是unix一个很强大的功能,符号为一条竖线:"|". 用法: command 1 | command ...