博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebService的简单案例记录(Java)
阅读量:2134 次
发布时间:2019-04-30

本文共 3566 字,大约阅读时间需要 11 分钟。

关于WebService,工作关系,断断续续有接触到一些,写完就忘,下次要写又不记得。

所以做个简单的案例,啥时候忘了能查一查。

 

酱紫,先大概讲一下我理解的WebService,因为接触时间不长,可能有些方面理解有误,希望各位提出,我发现了也会更正。一同进步吧!

一、功能

首先,用我这小学英语的水平直译一下,web --> 网路,service --> 服务。连起来,网络服务。通过网络来调用的服务。

在功能上,例如在我们的Java程序中,有各种各样的方法,来处理各种业务逻辑或者数据。

比如,你的程序里有一个方法,调用这个方法,可以返回一个你想要的结果。

那么,你可以通过WebService的功能,将这个方法发布出去。

然后,另外一个程序,只要跟你网络互通,那就可以根据你发布的内容,生成客户端代理。然后通过客户端,调用你程序里发布的这个方法,通过你的程序的处理,达到跟你自己在程序里面调用方法一样的效果。

简单来说,也就是,把你的程序的某个方法发布出去,让别人的程序也能调用这个方法。

 

二、应用场景

(一)提供服务(模拟)

例如,你有个算命的技能,你可以根据一个人的生辰八字算他什么时候一夜暴富。

这个就类似一个程序,有一个算命的方法,输入参数为生辰八字,返回值为暴富的时间。

那别人想算命呢,他们有生辰八字,但他们不知道怎么算呀。而且咱也不是你说算就帮你算的是吧。

然后呢,哪一天你缺钱了,你想通过帮人家算命来赚点钱,你就可以通过一个什么方式,发布了个声明,告诉大家,我会算命喔,只要你给我你的生辰八字,顺便再给我点钱,我就帮你算,然后告诉你什么时候发财。

这个时候,大家就知道你这里可以算命了。然后他们就通过你发布的声明,知道哦原来你要生辰八字,哦还要钱,然后他们就开始准备你要的这些东西,传递给你,你就帮他们算命,给他们返回一个结果。

(二)数据接口

这种在做一些数据收集平台类的功能会用得到。

例如,一个省级单位,有个省级的数据收集平台,需要各个地市将数据上报到这个平台。但关于这个业务,各地市根据自身业务开展情况建了自己的系统。

针对这种情况,为了提高各地市上报数据的效率,减少重复的工作,省级平台就可以对外发布一个数据接口,各地市就可以根据发布的接口的相关规范、文档,以对应的方式调用,传递对应的参数,即可通过后台传输对接的方式将数据上报,减少手工上报的操作。

 

三、一个贼简单的WebService案例

例如我有一个可以计算年龄的方法,int getAge(Date birthday),然后我就把它用WebService的方式发布出去。

(一)代码如下:

重点是类名上面的@WebService注解,以及main方法里面发布地址及publish发布:

package cn.lihuayou.ws;import javax.jws.WebService;import javax.xml.ws.Endpoint;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;@WebServicepublic class GetAge {    // 根据出生日期(指定格式:yyyy-MM-dd)计算年龄    // 懒得做各种校验检查了,我就假设传进来的参数都是对的    public int getAge(String birthdayStr) throws ParseException {        int age = 0;        Calendar cal = Calendar.getInstance();        // 取当前年月日        int yearNow = cal.get(Calendar.YEAR);        int monNow = cal.get(Calendar.MONTH);        int dayNow = cal.get(Calendar.DAY_OF_MONTH);        // 取出生日期年月日        Date birthday = new SimpleDateFormat("yyyy-MM-dd").parse(birthdayStr);        cal.setTime(birthday);        int yearBirth = cal.get(Calendar.YEAR);        int monBirth = cal.get(Calendar.MONTH);        int dayBirth = cal.get(Calendar.DAY_OF_MONTH);        // 计算年龄        age = yearNow - yearBirth;        // 今年还没过生日,就减1        if (monNow <= monBirth) {            if (monNow == monBirth) {                if (dayNow < dayBirth) {                    age--;                }            }else {                age--;            }        }        // 返回        return age;    }    // 发布    public static void main(String[] args) throws ParseException {        // 指定发布地址        String address = "http://127.0.0.1:8888/wsdemo/age";        // 发布        Endpoint.publish(address, new GetAge());    }}

(二)接口描述文档WSDL

运行之后,通过浏览器访问描述文档WSDL,地址为发布地址后面带一个WSDL的参数,即:http://127.0.0.1:8888/wsdemo/age?WSDL,大概的关系图如下,我理解得也不是很到位,就不误导了:

(三)生成本地代理(客户端)

通过jdk自带的wsimport功能及WSDL的描述,可生成本地代理。

命令:

1、默认参数调用,解析生成class字节码文件,存放在cmd当前路径: cmd> wsimport WSDL地址

2、别的参数:

(1)-s 同时生成源码

(2)-p cn.lihuayou.xxx 重新指定报名

(3)-d 指定输出的路径

例如我在d盘根目录调用,默认参数,如下图:

(四)打包导入

然后就是把这个东西,导入到你的程序里面去。可以直接复制进去,也可以打包个jar导入使用。

顺便记录一下jar命令打包的操作。

命令:cmd > jar cvf 指定jar文件名 打包的class文件路径/文件名

打包完成后jar包就在d盘根目录,然后,把它导入到Java项目中,记得add as library。

(五)测试调用

package cn.lihuayou.wsclient;import cn.lihuayou.ws.GetAge;import cn.lihuayou.ws.GetAgeService;// 测试调用对方的方法public class WSClient {    public static void main(String[] args) throws Exception {        // 创建服务对象        GetAgeService service = new GetAgeService();        // 获取访问方式,也就是这个业务对应的类对象        GetAge port = service.getGetAgePort();        // 调用方法        int age = port.getAge("1995-07-21");        // 输出结果        System.out.println("调用结果:" + age);    }}

一执行,他就能通过指定的访问路径,调用服务端发布的服务,通过服务端的处理,得到想要的结果。

好了,整个流程差不多就是这个亚子,以后有机会再做一些补充吧。

转载地址:http://imkgf.baihongyu.com/

你可能感兴趣的文章
用 RNN 训练语言模型生成文本
查看>>
RNN与机器翻译
查看>>
用 Recursive Neural Networks 得到分析树
查看>>
RNN的高级应用
查看>>
TensorFlow-7-TensorBoard Embedding可视化
查看>>
一个隐马尔科夫模型的应用实例:中文分词
查看>>
轻松看懂机器学习十大常用算法
查看>>
一个框架解决几乎所有机器学习问题
查看>>
特征工程怎么做
查看>>
机器学习算法应用中常用技巧-1
查看>>
机器学习算法应用中常用技巧-2
查看>>
通过一个kaggle实例学习解决机器学习问题
查看>>
决策树的python实现
查看>>
Sklearn 快速入门
查看>>
了解 Sklearn 的数据集
查看>>
用ARIMA模型做需求预测
查看>>
推荐系统
查看>>
详解 TensorBoard-如何调参
查看>>
TensorFlow-11-策略网络
查看>>
浅谈 GBDT
查看>>