webservice

来源:互联网 发布:mac系统 流程图 编辑:程序博客网 时间:2024/05/19 12:36

WebService (一)简单调用发布

1、WebService相关介绍 

WebService概念介绍:

Web Service, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据

通俗的讲,Web Service就是一个部署在Web服务器上的一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web来调用这个应用程序。我们把调用这个Web Service 的应用程序叫做客户端,发布这个web服务的机器称为Web Service服务器

WebService技术规则:

 1.  基于web的系统级接口规范
    一个普通适用标准
    - 任何网络通信的操作系统
    自包含、自描述、模块化
    发布、定位、通过web调用
 2.  web service 技术和规则
    - xml(可拓展标记语言)
    - soap(简易对象访问协议) http+xml
    wsdl(web services 描述语言)
    - uddi(通用描述、发现及整合)
3. 跨平台的可互操作性
   基于xml
   基于xsd(xml schema )
   - 基于http
4. webservice 适用场景
   - 跨防火墙的通信
   - 异构系统间应用程序集成jee:(EJB RMI)phpc++.net (com+)

WebService的优势介绍:

a) 异构平台的互通性

理论上, Web Service 最大的优势是提供了异构平台的无缝街接技术手段。由于不同的用户使用不同的硬件平台,不同的操作平台,不同的操作系统,不同的软件,不同的协议通信,这就产生了互相通信的需求。 Web Service 使任何两个应用程序,只要能读写XML,那么就能互相通信。

 

b) 更广泛的软件复用

软件的复用技术通过组合已有模块来搭建应用程序,能大幅度提高软件的生产效率和质量。用户只要获得了描述 Web Service 的 WSDL 文件,就可以方便地生成客户端代理,并通过代理访问 Web Service 。

 

c) 成本低、可读性强、应用范围广

Web Service 可用基于 XML 的 SOAP 来表示数据和调用请求。并且通过 HTTP 协议传输 XML 格式的数据

 

d) 迅捷的软件发行方式

Web Service 将彻底地改变软件的发行方式。软件供应商可以把软件分解成若Web Service 模块构成的系统,直接在 Web 上发布

WebService专业名称介绍:

a) XML: Extensible Markup Language -扩展性标记语言

XML,用于传输格式化的数据,是Web服务的基础。

• namespace-命名空间。

• xmlns=“http://itcast.cn” 使用默认命名空间。

• xmlns:itcast=“http://itcast.cn”使用指定名称的命名空间。

b) WSDL:  WebService Description Language – Web服务描述语言。调用该webservice api 的接口描述

• 通过XML形式说明服务在什么地方-地址。

• 通过XML形式说明服务提供什么样的方法 – 如何调用。

c) SOAP: Simple Object Access Protocol(简单对象访问协议)  

• SOAP作为一个基于XML语言的协议用于有网上传输数据。

• SOAP = 在HTTP的基础上+XML数据。

• SOAP是基于HTTP的。

• SOAP的组成如下

 

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

2. Headers – 可选的。

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

WebService工作原理:

2调用已发布的WebService

WebService服务演示

a) 登录http://www.webxml.com.cn

b) 单击手机查询服务

c) 选择要调用的方法 例如: getMobileCodeInfo

d) 输入要查询的手机号单击”调用” 截图如下, 免费用户 UserID为null

 

e) 可以看到返回如下结果:

<?xml version="1.0" encoding="utf-8" ?> 

  <string xmlns="http://WebXml.com.cn/">18323455678:重庆 重庆 重庆移动全球通卡</string>

HttpClient工具使用

HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。

为什么要使用HttpClient工具:

原生态的Socket基于传输层,现在我们要访问的WebService是基于HTTP的属于应用层,所以我们的Socket通信要借助HttpClientHTTP请求,这样格式才能匹配

HttpClient使用步骤如下:

1. 创建 HttpClient 的实例 

2. 创建某种连接方法的实例,在这里是 GetMethod。在 GetMethod 的构造函数中传入待连接的地址

3. 配置要传输的参数,和消息头信息

4. 调用第一步中创建好的实例的 execute 方法来执行第二步中创建好的 method 实例

5. 通过response读取字符串

6. 释放连接。无论执行方法是否成功,都必须释放连接 

Socket + HttpClient 访问WS

Get方式:

public static void getMethod() throws Exception {

// 创建get对象,类似get请求

GetMethod getMethod = new GetMethod( "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode=18373551982&userID=");

// 发送get请求

int code = http.executeMethod(getMethod);

System.out.println("返回的消息码为:" + code);

System.out.println("返回的消息为:" + getMethod.getResponseBodyAsString());

getMethod.releaseConnection();

}

POST方式:

public static void postMethod() throws Exception {

// 创建post请求,类似Post请求

PostMethod postMethod = new PostMethod("http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo");

// 设置请求的正文内容

postMethod.setRequestBody("mobileCode=18373551982&userID=");

// 设置传送信息的格式

postMethod.setRequestHeader("Content-Type",

"application/x-www-form-urlencoded");

// 发送post请求

int code = http.executeMethod(postMethod);

System.out.println("返回消息码为:" + code);

System.out.println("返回的消息为:" + postMethod.getResponseBodyAsString());

postMethod.releaseConnection();

}

SOAP1.1方式:

public static void postSoap1() throws Exception {

// 创建一个post请求,类似Post请求

PostMethod postMethod = new PostMethod("http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx");

// 设置传送信息的格式

postMethod.setRequestHeader("Content-Type","text/xml; charset=utf-8");

postMethod.setRequestBody(new FileInputStream("C:/a.txt"));

int code = http.executeMethod(postMethod);

System.out.println("消息码为:" + code);

System.out.println("返回的消息为:" + postMethod.getResponseBodyAsString());

postMethod.releaseConnection();

}

Java方式访问WebService

1. 选中要调用的服务单击”服务说明”

a) 例如选中:

b)  http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL

2. 获取wsdl文件.使用JDK1.6以上的版本的wsimport命令

3. 切换到c:\ws文件夹 在dos输入:wsimport wsdl目标地址

a) C:\ws>wsimport http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL

4. 可以把class文件打成jar包 jar cvf  test.jar 打包目录

5. 拷贝的项目中调参考WSDL用即可调用源码如下:

public static void main(String[] args) {

MobileCodeWS mobileCodeWs=new MobileCodeWS();

MobileCodeWSSoap mobileCodeWSSoap=mobileCodeWs.getMobileCodeWSSoap();

String tel=mobileCodeWSSoap.getMobileCodeInfo("18373551982",null);

System.out.println(tel);

}

WSDL协议简单介绍

WSDL – WebService Description Language – Web服务描述语言

通过XML形式说明服务在什么地方-地址。

通过XML形式说明服务提供什么样的方法 – 如何调用。

<wsdl:service name="MobileCodeWS">

  <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"><a href="http://www.webxml.com.cn/" target="_blank">WebXml.com.cn</a> <strong>国内手机号码归属地查询WEB服务</strong>,提供最新的国内手机号码段归属地数据,每月更新。<br />使用本站 WEB 服务请注明或链接本站:<a href="http://www.webxml.com.cn/" target="_blank">http://www.webxml.com.cn/</a> 感谢大家的支持!<br /> </wsdl:documentation> 

- <wsdl:port name="MobileCodeWSSoap" binding="tns:MobileCodeWSSoap">

  <soap:address location="http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx" /> 

  </wsdl:port>

 

<wsdl:binding name="MobileCodeWSSoap" type="tns:MobileCodeWSSoap">

 

3、JDK6的WebService发布

注意MyEclipse8.5自带的JDK版本太低如果要发布自己的WebService则要升级到jdk1.6.0.013及以后版本

创建第一个Web服务:

WebService服务类代码如下:

@WebService // 添加了此注解,代表是一个WebService

public class HelloWorld {

// 非 static final private 方法默认会发布

public String sayHi(String name) {

return "hello" + name;

}

}

发布web服务:

public static void main(String[] args) {

String address="http://127.0.0.1:9999/helloworld";

// 注册并且发布一个服务,arg0: 服务地址 , arg1:要发布的服务对象

Endpoint endPoint=Endpoint.publish(address,new HelloWorld());

// 可以停止服务,或者手动停止

//endPoint.stop();

}

获取发布web服务的信息

访问wsdl网址为: http://127.0.0.1:9999/helloworld?wsdl

通过wsimport生成Java代码: 

Wsimport http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL   // 只能生成 class格式

wsimport –s . http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL   // 能生成 class格式和Java源文件

Wsimport –s . –p a.b.c

http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL // 能生成 class格式和Java源文件  并且可以自定义包名

jar -cvf mobile.jar .  // 把当前路径打包成jar文件, 包名为mobile.jar

 

调用第一个WebService服务

public static void main(String[] args) {

HelloWorldService helloWorldService=new HelloWorldService();

HelloWorld helloWorld=helloWorldService.getHelloWorldPort();

System.out.println(helloWorld.sayHi("china"));

}

代码注意事项:

1. 在类上添加@WebService注解,代表发布一个WebService服务

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

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

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

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

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

7. protected、private、final、static方法不能对外公开 代码如下:

@WebService// 添加了此注解,代表是一个WebService

public class HelloWorld {

// 非 static final private 方法默认会发布

public String sayHi(String name) {

return "hello" + name;

}

@WebMethod(exclude=true)

public void exclude(){

// 被注解排除的方法

}

protected void protected1(){

//受保护的方法默认不发布

}

private void private1(){

// 私有方法默认不发布

}

public static void static1(){

// static 方法默认不发布

}

public final void final1(){

// final 方法默认不发布

}

}