使用WebService实现远程调用
来源:互联网 发布:守望先锋先锋大神数据 编辑:程序博客网 时间:2024/05/07 04:55
上篇博客讲解了使用Socket实现远程调用,今天这篇讲解WebService实现远程调用。首先在开发之前,我们应该有自己的思路,心里面想好开发的大体步骤,然后我们可以开始开发了。下面是我在写的时候的一个思路,一起展示给大家。
首先需要有客户端和服务端
服务端:
第一步:创建一个java工程,不需要导入jar包。
第二步:创建一接口。在Webservice中叫做SEI(wsdl中叫做PortType)
第三步:创建一实现类。需要在实现类上加一个、@Webservice注解
第四步:发布服务。EndPoint.publish发布服务。
创建一个接口(天气查询服务SEI)
public interface WeatherInterface {String getWeatherByCityName(String cityName);}
SEI实现类
@WebServicepublic class WeatherInterfaceImpl implements WeatherInterface {@Overridepublic String getWeatherByCityName(String cityName) {
System.out.println("接收到客户端发送的城市名称:" + cityName);//查询天气String resultString = "暖和点儿了";System.out.println("返回天气信息:" + resultString);return resultString;}}
创建天气查询服务发布类
这里我们建议端口号为1024以后的,因为1024以下好多都是系统的端口号,容易起冲突。
public class WeatherServer {public static void main(String[] args) {//第一个参数:服务发布的url//第二个参数:SEI实现类对象Endpoint.publish("http://127.0.0.1:12345/weather", new WeatherInterfaceImpl());}}
查看服务是否启动,出现如下图则说明发布成功。
使用wsdl
查看wsdl:访问服务发布地址+?wsdl
我们只需要 注意service 和targetNamespace可以使用wsimport工具生成客户端调用代码。
在学之前,先简单介绍一下,wsimport是jdk自带的webservice客户端工具,可以根据wsdl文档生成客户端调用代码(java代码)无论服务器端的WebService是用什么语言写的,都可以生成调用webservice的客户端代码,服务端通过客户端代码调用webservice。
使用方法:
常用参数为:
-d<目录> - 将生成.class文件。默认参数。
-s<目录> - 将生成.java文件(一般都使用这个)。
-p<生成的新包名> -将生成的类,放于指定的包下。如果不指定包名就是wsdl命名空间的倒序。
(wsdlurl) - http://server:port/service?wsdl,必须的参数。
示例:
C:/> wsimport -s . http://127.0.0.1:1234/weather?wsdl
注意:-s不能分开,-s后面有个小点
常用参数为:
-d<目录> - 将生成.class文件。默认参数。
-s<目录> - 将生成.java文件(一般都使用这个)。
-p<生成的新包名> -将生成的类,放于指定的包下。如果不指定包名就是wsdl命名空间的倒序。
(wsdlurl) - http://server:port/service?wsdl,必须的参数。
示例:
C:/> wsimport -s . http://127.0.0.1:1234/weather?wsdl
注意:-s不能分开,-s后面有个小点
新建一个工程,找到工程的src目录:
刷新之后我们看到客户端生成了如下代码:
一般我们用WeatherInterfaceImpl,和WeatherInterfaceImplService叫做服务视图,就够了。
客户端的开发步骤。
实现步骤:
第一步:创建一个java工程
第二步:创建一服务视图对象
第三步:从服务视图中获得PortType对象
第四步:调用PortType的方法(可以实现远程通信)
第五步:接收方法的返回值(服务端响应的结果)
第六步:打印结果。
public class WeatherClient {public static void main(String[] args) {//创建服务视图WeatherInterfaceImplService service = new WeatherInterfaceImplService();//从服务视图中获得PortType对象WeatherInterfaceImpl portType = service.getWeatherInterfaceImplPort();//调用服务端方法String weatherInfo = portType.getWeatherByCityName("北京");System.out.println(weatherInfo);}}
最终我们看到的结果:
客户端控制台:
小结:
既然之前写了socket实现远程通信调用,小结里面就写一写两者的区别吧。
Webservice和sockt的对比
Socket:使用流通信,需要自定义协议。编程复杂。
优点:通信效率高,速度快,适合于传输大数据。
缺点:编程复杂。
Webservice:封装所有通信的细节,只需要像调用本地方法一样使用即可。很方便。
优点:编程简单。面向对象开发。
缺点:传输效率低。不适合传输大数据的情况。
0 0
- 使用WebService实现远程调用
- 用WebService实现类XmlRpc远程调用
- 远程调用webservice接口的实现方法
- Android使用Hessian远程调用WebService服务端
- WebService使用代理类调用远程接口
- WebService技术总结(三):项目实战——使用XML,dom4j,Xpath实现远程调用
- 远程调用WebService
- WebService的远程调用
- 远程调用webservice
- c++远程调用webservice
- webservice远程调用详解
- axis2远程调用webservice
- webservice远程调用方法
- WebService远程调用技术
- 使用servlet实现远程调用
- 使用servlet实现远程调用
- 用Swoole框架实现WebService和远程接口调用RPC
- 基于WebService实现远程调用方式的系统间通信
- jqgrid动态设置某个单元格进入编辑状态
- shell、cmd、dos和脚本语言
- 如何实现浏览器内多个标签页之间的通信
- 史上最全的maven pom.xml文件教程详解
- java-synchronized 嵌套使用
- 使用WebService实现远程调用
- 异步请求和超时控制
- SPOJ_MINSUB:Largest_Submatrix(二分+单调栈)
- 系统默认安装路径修改方法
- FanChat学习笔记(一)——MVP模式的应用
- Redis Sentinel机制与用法(一)
- Flask学习总结笔记(6) -- Flask-Moment本地化日期和时间
- SpringMVC上传、解析Excel
- UGUI对话框自适应