初次涉及
通过上述的Web Service的简介,其实还是有点难理解Web Service的具体功用。其实说白了,WebService就是通过调用
其他网站的资源来获取一些必要的信息。举个例子:网络上的网站,我们电脑中的QQ等等都会涉及到天气预报,而这些天气预
报其实就是通过Web Service来调用国家气象台网站的一些信息,而为什么要通过WebService也就很好理解了,总不能为了这
么个功能而自己建立个气象预报台?
图2.1.1是我粗略画的关于Web Service的基本传输机制。
图2.1.1 Web Service 的传输原理
第一个Demo
创建服务端——Web Service Project
对于Web Service Project的创建,供选择的框架有:JAX-WS和WS。其实MyEclipse的早期版本还有个是Xfire,只不过我用的是10.6的版本,这也就造成了过时的Xfire被新版本摒弃的情况。我对这三个框架做个简要的介绍:
框架名 | 描述 |
JAX-WS | 是新的WebService模式,基于注解,对WebService进行配置,相对于Xfire减少了很多的麻烦 |
REST(JAX-RS) | 用的很少,这里不做介绍 |
Xfire | 配置繁琐,已经被摒弃 |
图2.2.1.1 建立Web Service Project第一步
建立业务
因为是测试的缘故,所以这里只是简单的返回一个字符串:
图2.2.2.1 创建业务类
package net.xuqiang.service;
publicclass HelloService {
public String sayHello(){
return"HELLO";
}
}
代码段2.2.2.1 业务类实现代码
发布WS
图2.2.3.1 点击发布WS按钮
图2.2.3.2 发布WS配置
注释:因为我们是新建立的,并没有建立过WSDL,所以选择Create web servicefrom Java class(Bottom-up scenario)选项,至于框架的选择则不用多说还是JAX-WS。
图2.2.3.3 发布WS配置2
注释:Java class选择的是刚刚我们建立的HelloService业务类。因为之前没有生成过WSDL的缘故,所以需要把Generate WSDL inProject勾选上。另外一个要注意的是:Service Port的填写,这个是你用来访问的一个路径,也就是客户端是通过这个路径来访问的。
配置
MyEclipse->Properties->JavaBuild Path->Libraries选项
图2.2.3.1 添加需要的JAR包
注释:选择Add Library
图2.2.3.2 添加Library
注释:选择MyEclipse Libraries
图2.2.3.3 选择Libraries
注释:选择JAX-WS 2.1 Runtime Libraries(Project Metro 1.1)和JAX-WS 2.1 APILibraries这两个包集。
测试WS
将Web Service项目添加至Tomcat,并且启动Tomcat。
开启浏览器,在地址栏输入:
http://localhost:8080/WebServiceTest/HelloServicePort?wsdl
图2.2.4.1 浏览器返回的信息
注释:如果出现图2.2.4.1所示的图片,那么表示Web Service发布成功。
创建客户端
创建一个Java Project
图2.2.5.1 创建客户端
注释:直接Finish结束创建
配置客户端
图2.2.6.1 点击New Web Service Client
图2.2.6.2 配置1
图2.2.6.3 配置2
注释:WSDL URL填写的为之前我们测试WS时候在浏览器中输入的地址,其实这个地址就是用来寻找WSDL配置文件的。其他不需要变动,点击Next。
图2.2.6.4 测试连接
注释:这是用来测试所输入的WSDL的URL路径是否正确,当然这个前提是你得开启Web Service的服务端。点击Finish结束配置。
图2.6.5 配置完成后的文件结构图
注释:配置完成后,MyEclipse会自动生成一系列的java文件。
测试客户端
图2.2.7.1 建立测试类
package net.xuqiang.service;
publicclass HelloTest {
publicstaticvoid main(String[] args) {
HelloServiceService service = new HelloServiceService();
HelloServiceDelegate delegate = service.getHelloServicePort();
System.out.println(delegate.sayHello());
}
}
代码段2.2.5.1 测试调用类代码片段
图2.2.7.2 运行结果图
注释:运行结果为我们在业务类中返回的字符串“HELLO”