WebService的简单案例记录(Java)

2023-05-16

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebService的简单案例记录(Java) 的相关文章

  • mysql 错 Could not open JDBC Connection for transaction; nested exception is java.sql.SQLExceptio

    运行时报com mysql jdbc exceptions jdbc4 MySQLSyntaxErrorException Unknown character set 39 utf8mb4 39 导致 浏览器报Could not open
  • axios.create、拦截器、取消请求

    axios create config 根据指定配置创建一个新的 axios 也就就每个新 axios 都有自己的配置新 axios 只是没有取消请求和批量发请求的方法 其它所有语法都是一致的为什么要设计这个语法 1 需求 项目中有部分接口
  • 启明云端分享:产品应用上,怎么选型ESP-12F\ESP-12E\ESP-12S\ESP-07S这四个模块

    提示 xff1a ESP 12F ESP 12E ESP 12S ESP 07S四个模块怎么选型呢 前言 ESP 12F ESP 12E ESP 12S ESP 07S这四个模块采用的都是乐鑫ESP8266芯片封装的模块 其中ESP 12F
  • echarts图表分区域--显示不同颜色(markArea)

    项目需要这样的效果 xff0c 在y轴数值大于50的时候 xff0c 向上的区域显示不同的颜色 xff1a 查阅官方文档有一个属性markArea xff0c 是标记背景区域的 xff0c 官方是这样配置的 xff1a 因为我有多个色块 x
  • ChatGPT自我分析

    作者 xff1a chatgpt ChatGPT 是一个由 GPT 技术驱动的聊天机器人 xff0c 它能够回答各种问题 提供信息和建议 生成文本和完成其他任务 ChatGPT 是一个深度学习模型 xff0c 是人工智能技术中的一种 在本博
  • Visutal Studio2022 如何使用Github copilot

    visual studio 2019 升级最新版本的2019也并没有搜索到 xff0c 直接升级到visual studio 2022 xff0c 看发布介绍也是2022的copilot Copilot 是一款由 OpenAI 开发的基于
  • 音视频领域的经典书籍推荐

    数字视频处理基础 xff08 Digital Video Processing xff09 xff1a 作者A Murat Tekalp xff0c 讲述数字视频处理的基本概念和技术 xff0c 包括视频编码 图像分析 视频通信和多媒体系统
  • 音视频专家

    作为一名顶级的音视频专家 xff0c 需要在音视频领域拥有非常深入的技术理解和丰富的实践经验 xff0c 并且要能够在行业内产生深远的影响和贡献 以下是更详细的顶级音视频专家提升计划 xff1a 1 深入研究音视频核心技术 作为顶级音视频专
  • 2022年新兴技术趋势

    图片源自 xff1a 2022年Gartner新兴技术成熟度曲线公布最新技术趋势 Gartner中国 人工智能和机器学习技术仍处于高峰 xff0c 但已经开始进入成熟期 这表明人工智能和机器学习技术已经不再是新颖的概念 xff0c 而是逐渐
  • 白镜1-1

    2029年 xff0c 人类社会已经进入了全球化 数字化 智能化的新时代 xff0c 各国政府和企业已经开始在深海和太空等地方进行勘探和开采 同时 xff0c 在不断提升的科技水平下 xff0c 人类已经开始了向宇宙的探索和移民 在这样一个
  • Jetson查看GPU显存信息

    pip3 install jetson stats jtop 然后运行jtop命令即可 xff0c jetson xavier nx 的查看命令并不是nvidia smi xff0c 所以运行nvidia smi并没有效果 xff01 效果
  • 并不包含调试信息(未加载任何符号)

    今天调试一C 43 43 程序 xff0c 按下F5 xff0c 老是弹出一对话框显示信息 xff1a debugging information for 39 myproject exe 39 cannot be found or doe
  • hdu 1358 Period KMP

    题目大意 xff1a 对于一个字符串 xff0c 找由循环字符串组成的位置 xff0c 并输出最多循环了几次 xff0c 比如两个样例 xff0c 第一个是 aaa xff0c 所以在第二个位置由子串a循环两次得到 xff0c 第三个位置由
  • mysql max_connections 最大连接数,用户数

    设置max connections xff08 这个办法在debian xff0b mysql Ver 12 22 Distrib 4 0 22 for pc linux i386 里实验了 xff09 设置办法是在my cnf文件中 xf
  • dll文件加载运行加载的14001错误,由于应用程序配置不正确,应用程序未能启动

    最近在处理项目问题的的时候发现了这么一个问题 xff0c 就是我们的程序在调用第三方提供的dll文件的时候在一台机器上面会报14001的错误 xff0c 但是在另一台机器上面不会 两台机器上面的操作系统是相同的 针对这个问题和这个错误码 x
  • Python框架下django 的并发和多线程

    django 的并发能力真的是令人担忧 xff0c django本身框架下只有一个线程在处理请求 xff0c 任何一个请求阻塞 xff0c 就会影响另一个情感求的响应 xff0c 尤其是涉及到IO操作时 xff0c 基于框架下开发的视图的响
  • Linux查看电源状态指令

    dmidecode命令可以让你在Linux系统下获取有关硬件方面的信息 dmidecode的作用是将DMI数据库中的信息解码 xff0c 以可读的文本方式显示 由于DMI信息可以人为修改 xff0c 因此里面的信息不一定是系统准确的信息 d
  • HashCode()和equals()的区别

    文章目录 HashCode简介equals简介1 类中重写HashCode和equals方法比较两个对象是否相等2 HashSet保证元素的唯一性 HashCode简介 hashCode 方法的作用是获取哈希码 xff0c 返回的是一个in
  • 远算CAE平台-基于云平台的Hypermesh与Abaqus联合仿真(轴承底座)

    小编在这里展示一个Hypermesh与Abaqus的联合仿真案例 xff1a 本次联合仿真使用Hypermesh进行前处理 xff0c 然后在Abaqus中设置并计算 xff0c 最后使用Hyperview查看结果 1 在Hypermesh
  • ubuntu OPT权限

    首先opt是系统文件夹 xff0c 权限被保护起来了需要一定的权限才可以操作 1 打开终端 输入如下命令 2 sudo chmod 777 opt 然后回车 xff0c 这时候会提示输入管理员密码密码 xff0c 这样opt就可以创建文件了

随机推荐

  • 看这篇就够了——ubuntu系统中的cuda cudnn cudatookit及pytorch使用

    一 基本概念 1 1 nvidia独立显卡 独立显卡是指以独立板卡形式存在 xff0c 可在具备显卡接口的主板上自由插拔的显卡 独立显卡具备单独的显存 xff0c 不占用系统内存 xff0c 而且技术上领先于集成显卡 xff0c 能够提供更
  • 虚拟机中ubuntu系统无法正常连接网络

    网络连接标志不见 xff0c 或者链接状态无 xff0c 或者如下图 解决办法1 xff1a 桥连接模式 桥连接模式就是直接使用物理主机的网络 假设物理主机在局域网中 xff0c IP地址为192 168 20 24 24 xff0c 因此
  • golang interface 使用

    interface 是方法签名的集合 xff0c interface 类型的值可以存储任何类型变量的值的类型 学到的一个问题 xff0c 判断 interface 类型的变量不能只判断 value xff0c 需要判断 type 和 val
  • 前端自动化构建工具搭建基于Ubuntu20.04:第五步ssh免密登录

    jenkins服务器与前端资源运行服务器之间实现免密登录 jenkins服务器 A 前端资源运行服务器 B 生成ssh密钥 span class token comment 邮箱信息根据自己情况选择 一路回车生成下面的图片内容 span s
  • 常用图算法(C语言)

    最短路 Dijkstra 题目 xff1a 743 网络延迟时间 邻接矩阵 xff1a span class token keyword int span span class token function min span span cl
  • POJ初级分类 贪心专题 poj1328 POJ2109 POJ 2586

    题目1328 代码及解释 xff1a POJ1328 Radar Installation 题目大意 xff1a 有一条海岸线 xff0c 一边是海岸 xff0c 一边是大海 xff1b 海中有一些小岛 xff0c 我们要建造一些雷达 xf
  • 离散数学第六章 图

    图 一 图的基本概念 1 无向图与有向图 此处要熟悉一下无序对与无序积的概念 xff1b 集合中有元素重复出现的话就称为多重集合 xff0c 简称多重集 xff0c 元素在多重集合中出现的次数称为该元素的重复度 xff1b 无向图 xff1
  • 最佳加法表达式(动态规划)

    递归 xff08 带备忘的自顶向下法 xff09 题目 xff1a 有一个由1 9组成的数字串 问如果将m个加 号插入到这个数字串中 在各种可能形成的 表达式中 xff0c 值最小的那个表达式的值是多少 子问题 xff1a 将最后面的那个加
  • 常见排序代码(C语言)

    选快希堆不稳 xff08 是不稳定的排序 xff09 xff0c 堆归选基不变 xff08 运行时间不发生变化 xff0c 与初始状态无关 xff09 插入排序 Note The returned array must be malloce
  • PyCharm安装第三方模块Request、BeautifulSoup

    开始用eclipse写python xff0c 然后还是不怎么好用 xff0c 当初本地装了BeautifulSoup模块 xff0c eclipse里面也不能用 xff0c python自带IDLE也不是很好用 xff0c 就又转PyCh
  • MySQL的join用法

    MySQL的join用法主要有三种 xff1a inner jon 内连接left join 左连接right join 右连接 table a table b 1 inner join 内连接又叫等值连接 xff0c 此时的inner可以
  • OpenCV VideoWriter用法

    百度了一些 xff0c 发现不对 xff0c 在stackoverflow上面找到了解决方法 xff0c 好像是版本问题 import cv2 path 61 span class hljs string 34 34 span file 6
  • Vue 项目部署到阿里云服务器(Nginx 代理)

    查看 linux 服务器版本号 lsb release a 1 本地打包 首先 xff0c 要将本地 config index js 中的 assetsPublicPath 39 39 改为 assetsPublicPath 39 39 x
  • 一种跨平台的C/C++动态库的符号隐藏方式

    源地址 xff1a http blog guorongfei com 2018 04 11 symbol visibility lt h1 id 61 34 什么是符号隐藏 34 gt lt a href 61 34 什么是符号隐藏 34
  • 如何在vscode使用 Copilot、Sign in to access the GitHub Copilot technical preview.

    1 Copilot申请方法 使用浏览器打开如下链接 xff1a https copilot github com 2 点击Sign up xff0c 登录你的GitHub账号 3 点击Join Waitlist xff0c 加入候补名单 4
  • 将QImage转化为半透明的效果

    之前项目上的需要 xff0c 中间用到了把QImage变成半透明的效果 xff0c 当时查了一些资料 xff0c 为了防止遗忘 xff0c 就在博客中记录了下来 下面是代码 xff1a 将QImage转化为半透明的效果 QPixmap Ch
  • 快速实现内网穿透已成功(巧妙绕过路由器)

    内网穿透在实际生活中 xff0c 我们经常会在内网里部署服务让外网访问内网应用 xff0c 比如Apache xff0c Tomcat xff0c 数据库 xff0c 微信小程序的开发以及企业的一些管理软件 xff08 OA CRM ERP
  • Kali更新源

    若在apt get install update有报错的情况 xff1a 则需要更换kali的源了 更换方法 vim etc apt sources list d docker list 或 vim ect apt sources list
  • python使用pytesseract识别验证码的方法

    1 系统环境 OS X 10 7 MacBook Pro 13英寸 xff0c 2012年初期 Python 2 7 2 需要软件包 a 需要安装PIL以及pytesseract库 Python tesseract是一个基于google 3
  • WebService的简单案例记录(Java)

    关于WebService xff0c 工作关系 xff0c 断断续续有接触到一些 xff0c 写完就忘 xff0c 下次要写又不记得 所以做个简单的案例 xff0c 啥时候忘了能查一查 酱紫 xff0c 先大概讲一下我理解的WebServi