WebService的简单案例记录(Java)

关于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;

@WebService
public 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);
    }
}

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

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值