栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

WebService 从“心”定义

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

WebService 从“心”定义

WebService 从“心”定义
  • 什么是WebService
  • 怎么写webservice?
    • Java怎么写:
    • PHP怎么写?

【特别说明:本文档仅属个人心得,大家各取所需】

什么是WebService

DL:听过webservice吗?公司业务需要你来搞一下吧
W:emmm。。。。
W:打开Chrome,找到CSDN,搜索“怎么写webservice”,回车;。。。 。。。
W:哇,真是博大精深,“云雾缭绕”。。。。。。
W:研究了一篇又一篇。。。。。。
DL:做好了吗?
W:快了,快了;
DL:懂了吗?什么是webservice?要如何开发一个webservice服务呢?
W:它是能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据的一种技术。
DL:理解了吗?

嗯?理解了吗?
webservice官网
打开这个官网,看不到任何醒目的解释。所以大可不必去找到底什么是webservice,请记住下面三个关键字:
跨编程语言 + 跨操作系 + 远程调用
记住了吗?

  • 是的,我记住了

没记住就再看一遍,记住了请打钩!!!


记住的人才可以看下面的内容,没记住请继续记

三个关键字简明扼要的表达了该技术的NB,那到底真的有那么厉害吗?

跨编程语言:通俗点说就是PHP可以调用Java写好的webservice,Java可以调用C#写好的webservice…
跨操作系统:这个比较好理解,可以用Linux服务器调用Windows发布的webservice…
远程调用:举个栗子,你认识了很多不同地方的小姐姐,你可以通过A地给B地的张某某打招呼,也可以从A地给C地的李某某送祝福…,谨慎使用哈!(因为远程调用需要注意安全)

怎么写webservice?

写之前一定要知道的几个术语:
客户端:调用这个WebService的应用程序
服务端:提供这个WebService的应用程序
当两端不管用什么编程语言或者在何种操作系统上,只要均保持统一的一套标准(规范),那么“跨出一小步”就易如反掌了。

知道了客户端和服务端,以及大致明白了它们如何达到该技术特性的,怕大家不太理解,下面搞个图分析一下:

看图必懂

这套标准到底有多神奇呢?
1、XML+XSD
XML格式封装数据(XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的 返回结果是什么)优点在于它与平台、厂商无关。
XML Schema(XSD)是一套数据类型标准。确保数据能有效传输和有效读取。
2、SOAP
SOAP协议 = HTTP协议 + XML数据格式
SOAP协议定义了SOAP消息的格式,SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。
举个栗子更好理解:HTTP就是普通公路,XML就是中间的绿色隔离带和两边的防护栏,SOAP就是普通公路经过加隔离带和防护栏改造过的高速公路。
3、WSDL
“物品清单(使用说明书)”:告诉客户端(调用的人)我的地址,我有哪些方法,要怎么调用,参数是什么等。
WSDL(Web Services Description Language)是基于XML的语言,用于描述Web Service及其函数、参数和返回值的文件,通过一个url地址访问。

注意:WebService三大规范:JAXM&SAAJ、JAX-WS(JAX-RPC)、JAX-RS。

到这里,我觉得有必要补一下全网很多帖子不足的地方,那就是WSDL的解析,如下:
WSDL 文档是利用这些主要的元素来描述某个 web service 的:

	web service 执行的操作
	web service 使用的消息
		web service 使用的数据类型
	web service 使用的通信协议

了解了基本元素的含义后,我们上一个还热乎的wsdl文件:
天气预报wsdl

This XML file does not appear to have any style information associated with it. The document tree is shown below.

WebXml.com.cn 2400多个城市天气预报Web服务,包含2300个以上中国城市和100个以上国外城市天气预报数据。数据每2.5小时左右自动更新一次,准确可靠。
使用本站 WEB 服务请注明或链接本站:http://www.webxml.com.cn/ 感谢大家的支持!


PDF
接口帮助文档    
ZIP
部分城市介绍和气候背景    
ZIP
部分城市图片    
HTML
天气现象和图例
 
... ... ...(太多了,省略)

获得中国省份、直辖市、地区;国家名称(国外)和与之对应的ID

输入参数:无,返回数据:DataSet。



获得中国省份、直辖市、地区和与之对应的ID

输入参数:无,返回数据:一维字符串数组。



获得国外国家名称和与之对应的ID

输入参数:无,返回数据:一维字符串数组。



获得支持的城市/地区名称和与之对应的ID

输入参数:theRegionCode = 省市、国家ID或名称,返回数据:DataSet。



获得支持的城市/地区名称和与之对应的ID

输入参数:theRegionCode = 省市、国家ID或名称,返回数据:一维字符串数组。



获得天气预报数据

输入参数:城市/地区ID或名称,返回数据:一维字符串数组。



获得中国省份、直辖市、地区;国家名称(国外)和与之对应的ID

输入参数:无,返回数据:DataSet。



获得中国省份、直辖市、地区和与之对应的ID

输入参数:无,返回数据:一维字符串数组。



获得国外国家名称和与之对应的ID

输入参数:无,返回数据:一维字符串数组。



获得支持的城市/地区名称和与之对应的ID

输入参数:theRegionCode = 省市、国家ID或名称,返回数据:DataSet。



获得支持的城市/地区名称和与之对应的ID

输入参数:theRegionCode = 省市、国家ID或名称,返回数据:一维字符串数组。



获得天气预报数据

输入参数:城市/地区ID或名称,返回数据:一维字符串数组。



获得中国省份、直辖市、地区;国家名称(国外)和与之对应的ID

输入参数:无,返回数据:DataSet。



获得中国省份、直辖市、地区和与之对应的ID

输入参数:无,返回数据:一维字符串数组。



获得国外国家名称和与之对应的ID

输入参数:无,返回数据:一维字符串数组。



获得支持的城市/地区名称和与之对应的ID

输入参数:theRegionCode = 省市、国家ID或名称,返回数据:DataSet。



获得支持的城市/地区名称和与之对应的ID

输入参数:theRegionCode = 省市、国家ID或名称,返回数据:一维字符串数组。



获得天气预报数据

输入参数:城市/地区ID或名称,返回数据:一维字符串数组。


WebXml.com.cn 2400多个城市天气预报Web服务,包含2300个以上中国城市和100个以上国外城市天气预报数据。数据每2.5小时左右自动更新一次,准确可靠。
使用本站 WEB 服务请注明或链接本站:http://www.webxml.com.cn/ 感谢大家的支持!


PDF
接口帮助文档    
ZIP
部分城市介绍和气候背景    
ZIP
部分城市图片    
HTML
天气现象和图例
 

上面是一个线上可以调用的wsdl文件,其中部分省略,看完你可能要说:我*,这么长,怎么看得懂。别怕,我也看不懂,篇幅太长,无从下手,所以我花了很大时间特地简化了一下,把非核心的内容暂时清楚,如下:


    
    
        ...
    
    
    
        
            
                
            
            
                
            
            
                
                    
                        
                    
                
            
            
                
                    
                
            
            
        
    
    
    
        
    
    
        
    
    
        
    
    
        
        
    
    
        
    
    
    
        
            
                

获得中国省份、直辖市、地区;国家名称(国外)和与之对应的ID

输入参数:无,返回数据:DataSet。


WebXml.com.cn 2400多个城市天气预报Web服务,包含2300个以上中国城市和100个以上国外城市天气预报数据。数据每2.5小时左右自动更新一次,准确可靠。
使用本站 WEB 服务请注明或链接本站: http://www.webxml.com.cn/ 感谢大家的支持!


PDF
接口帮助文档    
ZIP
部分城市介绍和气候背景    
ZIP
部分城市图片    
HTML
天气现象和图例
 

怎么样?这样删减并格式化后看起来是不是就很清楚了?如果你还没有明白,那记住下面的诀窍:
1、从下往上看,先看service,找到服务绑定的具体地址,然后找到service的name;
2、根据name,找到对应的方法,找到方法的参数(入参,出参);
3、根据方法+入参,便知道对应服务的调用方式了,再通过出参去承接对应的返回值即可。

接下来,就是见证奇迹的时刻:

Java怎么写:

服务端



import javax.jws.WebService;


@WebService
public interface JobService {
    public String getJob();
}


import javax.jws.WebService;

@WebService(endpointInterface="cn.it.ws.e.JobService")
public class JobServiceImpl implements JobService {

    @Override
    public String getJob() {
        return "NB工程师";
    }
    public void say(){
        System.out.println("早上好!");
    }
}

客户端

import javax.xml.ws.Endpoint;

public class Test {

    public static void main(String[] args) {
        JobService jobService=new JobServiceImpl();
        String address="http://192.168.114.10:9999/ws/jobservice";
        Endpoint.publish(address, jobService);
        System.out.println("wsdl地址:"+address+"?WSDL");
    }

}

注意:

// 需要注意下面几个点
1、发布以后的头部和尾部,可以增加相关数据校验等;
2、如果要更换soap的版本,可以在@WebService注解后面新增注解:@BindingType(value=SOAPBinding.SOAP12HTTP_BINDING);
3、如果要调用的webservice接口是通过映射到公网上时,需要通过binding修改wsdl中的服务为公网服务,否则无法正常调用;
4、当然也可以正常通过工具直接生成调用代码;
PHP怎么写?

服务端:service.php

 SOAP_1_2));
   $service->setClass("Service"); //! 注册Service类的所有方法
   $service->handle(); //! 处理请求
?>

服务注册:
SoapDiscovery.class.php

class_name.".wsdl", "w");
	fwrite($fso, sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, ''));
    fclose($fso);
?>

create_wsdl.php

getWSDL();
?>

client.php

sayHello("如果觉得有用的话,记得点赞,收藏,推荐给身边的同学哈!有什么问题也可与评论区讨论,大家一起进步呀!");
?>

测试输出结果:
大家好 如果觉得有用的话,记得点赞,收藏,推荐给身边的同学哈!有什么问题也可与评论区讨论,大家一起进步呀!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/302093.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号