使用JDK开发WebService

Web service是什么

1. 基于Web的服务:服务器端整出一些资源让客户端应用访问(获取数据)
2. 一个跨语言、跨平台的规范(抽象)
3. 多个跨平台、跨语言的应用间通信整合的方案(实际)


以各个网站显示天气预报功能为例:
气象中心的管理系统将收集的天气信息并将数据暴露出来(通过WebService Server), 而各大站点的应用就去调用它们得到天气信息并以不同的样式去展示(WebService Client).
网站提供了天气预报的服务,但其实它们什么也没有做,只是简单了调用了一下气象中心服务器上的一段代码而已



为什么要用Web service?

web service能解决:
跨平台调用 
跨语言调用
远程调用


什么时候使用web Service?

1. 同一家公司的新旧应用之间
2. 不同公司的应用之间
分析业务需求:天猫网与中通物流系统如何交互?
3. 一些提供数据的内容聚合应用:天气预报、股票行情



Web Service中的几个重要术语

 WSDL:web service definition language

xml

uml

直译 : WebService定义语言

 

1. 对应一种类型的文件.wsdl

2. 定义了web service的服务器端与客户端应用交互传递请求和响应数据的格式和方式

3. 一个web service对应一个唯一的wsdl文档

SOAP:simple object  access protocal

直译: 简单对象访问协议

 

1. 是一种简单的、基于HTTPXML的协议, 用于WEB上交换结构化的数据

2. soap消息:请求消息响应消息

3. http+xml片断

 

 SEI:WebService EndPoint Interface(终端)

直译: web service的终端接口,

 

1. 就是WebService服务器端用来处理请求的接口

@Webservice

@WebMethod

 

 CXF:Celtix + XFire

一个apache的用于开发webservice服务器端和客户端的框架


面试问题

1. webservice相当于HTTP+?+?

? : xml

? : schema

2. wsdl是什么?

webservice定义语言, 对应.wsdl文档, 一个webservice会对应一个唯一的wsdl文档, 定义了客户端与服务端发送请求和响应的数据格式和过程

3. 如何发布一个webservice?

定义SEI   @webservice @webMethod

定义SEI的实现

发布:  Endpoint.publish(url, SEIImplObject)

4. 如何请求一个webservice?

1. 根据wsdl文档生成客户端代码  jdk/cxf

2. 根据生成的代码调用webService






开发webservice

开发手段:

使用JDK开发(1.6及以上版本)
使用CXF框架开发(工作中)


组成:

服务器端

客户端


使用JDK开发WebService

1).开发服务器端

• Web Service编码:

– @WebService( SEISEI的实现类)

– @WebMethod(SEI中的所有方法)

• 发布Web Service:

– Endpoint(终端,发布webservice)

新建一个项目 

HelloWS接口

package com.me.ws;

import javax.jws.WebMethod;
import javax.jws.WebService;

/*
 * SEI
 */
@WebService
public interface HelloWS {
	@WebMethod
	public String sayHello(String name);
}
HelloWSImpl实现类

package com.me.ws;

import javax.jws.WebService;

/*
 * SEI的实现
 */
@WebService
public class HelloWSImpl implements HelloWS {

	@Override
	public String sayHello(String name) {
		System.out.println("server sayHello()" + name);
		return "Hello " + name;
	}

}

发布Web Service

package com.me.ws.server;

import javax.xml.ws.Endpoint;

import com.me.ws.HelloWSImpl;

/*
 * 发布Web Service
 */
public class ServerTest {
	public static void main(String[] args) {
		String address = "http://192.168.1.101:8989/hellows";
		Endpoint.publish(address, new HelloWSImpl());
		System.out.println("发布webservice成功!");
	}
}

通过浏览器访问

http://192.168.1.101:8989/hellows?wsdl


使用eclipse工具调用




2). 开发客户端

 创建客户端应用编码方式访问

– 借助jdk的wsimort.exe工具生成客户端代码:

wsimport -keep url   //url为wsdl文件的路径


新建客户端项目

借助jdk的wsimort.exe工具生成客户端代码


刷新客户端项目会看到客户端代码


借助生成的代码编写请求代码

package com.me.ws.client;

import com.me.ws.HelloWSImpl;
import com.me.ws.HelloWSImplService;

public class Client {
   public static void main(String[] args) {
	   HelloWSImplService factory = new HelloWSImplService();
	   HelloWSImpl helloWS = factory.getHelloWSImplPort();
	   
	   System.out.println(helloWS.getClass());
	   
	   String result = helloWS.sayHello("marry");
	   System.out.println("client "+result);
   }
}

请求结果


监听请求: 使用Eclipse的TCP/IP工具(端口转发)
1.将服务器端的WSDL文档保存到客户端本地
2.修改文档: 将端口号从8989改为8080


3.根据本地的wsdl文档生成客户端代码, 并编写客户端的调用代码


4.配置eclipse的TCP/IP,启动监听


client

package com.me.ws.client;

import com.me.ws.HelloWSImpl;
import com.me.ws.HelloWSImplService;

public class Client {
   public static void main(String[] args) {
	   HelloWSImplService factory = new HelloWSImplService();
	   HelloWSImpl helloWS = factory.getHelloWSImplPort();
	   
	   System.out.println(helloWS.getClass());
	   
	   String result = helloWS.sayHello("json");
	   System.out.println("client "+result);
   }
}

5. 执行客户端代码发送WebService请求


结果




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值