我的第一个WebService项目
来源:互联网 发布:淘宝删除中差评 编辑:程序博客网 时间:2024/06/05 18:00
Web Service
Web Service是一个平台独立的、低耦合的,自包含的、基于可编程的web应用程序,可使用开放的xml标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。
说白了,Web Service可用于异构平台之间的交互,也就是说不受开发语言的限制。
小实例
Eclipse创建Java Project,设置JDK的版本为1.7以上,我这里 用的是1.8版本的。
Web Service项目分为两部分,服务端和客户端。首先编写服务端,由一个简单的接口类和实现类组成。
接口:
package com.tgb.webservice;import javax.jws.WebService;@WebServicepublic interface HelloService {String sayHello(String name);}实现类:
package com.tgb.webservice.impl;import javax.jws.WebParam;import javax.jws.WebResult;import javax.jws.WebService;import com.tgb.webservice.HelloService;@WebService(endpointInterface = "com.tgb.webservice.HelloService")public class HelloServiceImpl implements HelloService {public String sayHello(String name) {return "Hello, " + name + "!";}}
endpointInterface:该实现类所对应的接口类,要接口类的全名,也就是包名加类名。
serviceName:是给服务类起的别名,可以随意起。在wsdl的xml文件中,对应serviceName属性。如果不写的话,会默认生成类名+Service,我这里就是HelloServiceImplService。
portName:是服务类绑定的端口名,可以随意写。在wsdl的xml文件中,对应portName属性。如果不写的话,默认生成l类名+Port,我这里就是HelloServiceImplPort。
接下来就是要发布服务了。发布服务采用的是Endpoint类的publish方法:
package com.tgb.webservice;import javax.xml.ws.Endpoint;import com.tgb.webservice.impl.HelloServiceImpl;public class PublishServer {public static void main(String[] args) {String address = "http://localhost:9000/helloService";Endpoint.publish(address, new HelloServiceImpl());System.out.println("Server published..");}}
接下来再建一个客户端类,来测试一下发布好的服务。
package com.tgb.webservice;import java.net.MalformedURLException;import java.net.URL;import javax.xml.namespace.QName;import javax.xml.ws.Service;public class HelloClient {public static void main(String[] args) {try {URL url = new URL("http://localhost:9000/helloService?wsdl");QName sName = new QName("http://impl.webservice.tgb.com/", "helloService");Service service = Service.create(url, sName);HelloService helloService = service.getPort(HelloService.class);System.out.println(helloService.sayHello("Fiala"));} catch (MalformedURLException e) {e.printStackTrace();}}}
直接右键Run As Java Application就可以得到结果,我的结果是输出:Hello,Fiala!
实例升级:客户端和服务端分离
在上面的例子中,客户端的类和服务端的类是建在同一个项目下的,这其实是没有做到分布式的,下面就要另外建一个Java项目,实现客户端和服务端的分离。
利用wsimport命令,将服务端的代码导出为class文件。
wsimport:导出代码
-d:要导出的位置,这个位置要提前创建好
-keep:导出的时候同时导出源代码
-verbose:输出导出时的详细信息
http://localhost:9000/helloService?wsdl:发布的服务地址
导出完成后在相应路径下会生成代码,生成时会直接把包生成进去。把生成的包拷贝到新创建好的Java Project的src下,如下图:
创建一个HelloClient类,里面的代码就变成了下面的:
package com.tgb.webservice;import com.tgb.webservice.impl.HelloService;import com.tgb.webservice.impl.HelloService_Service;public class HelloClient {public static void main(String[] args) {HelloService_Service helloServiceImplService = new HelloService_Service();HelloService helloService = helloServiceImplService .getHelloServicePort();System.out.println(helloService.sayHello("Tom"));}}右键直接Run As Java Application,就可以得到输出结果:Hello,Tom!
实例再升级:面向服务
从上面的例子也可以看到,客户端对服务端的调用其实是依赖wsdl文件的,调用的内容也都是wsdl文件规定好的,所以我们可以发布好服务,然后将wsdl文件给客户端,这样客户端就不用依赖服务端的接口或者类了,也就实现了面向服务了。
总结
对于面向服务的调用方式,暂时还不太了解wsdl是怎么配置的,接下来还需要深入学习。过路大牛,如果看到了有什么问题,请指正,谢谢!
- 我的第一个WebService项目
- 我的第一个WebService例子
- 我的第一个项目
- 我的第一个项目
- 我的第一个项目
- 我的第一个项目
- 我的第一个项目的收获
- 我的第一个WebService例子及遇到的问题
- 我的第一个webservice接口遇到的问题
- 我的第一个WFF项目
- 我做第一个项目的经历
- 第一个项目(我的智囊团)
- 我的第一个小项目
- 我的第一个c项目
- 我的第一个Django项目:TodoList
- 我的第一个C++项目二
- 我的第一个Android项目。
- 我的第一个项目---文件压缩
- CCF201512-2消除类游戏
- js 获取屏幕宽高
- Tomcat在RedHat Linux上的安装与配置
- JSP在Eclipse下生成web.xml文件
- 机器学习之shark环境的编译(vs2010+boost1.5.5)
- 我的第一个WebService项目
- C++多态的实现
- 计算机
- JPA的几个常用操作
- 【深度学习论文笔记:Recognition】:Deep Neural Networks for Object Detection
- Leetcode 382. Linked List Random Node 以及 水塘抽样算法
- android沉浸式状态栏、fitsSystemWindows、标题栏折叠
- 十二,ES6 新增Proxy代理
- Android之activity的数据持久化(persistableMode详解)