WebService入门

webservice 的概念,解决什么问题?

webservice 就是一个应用程序,它提供一种通过web 方式访问的api.
解决两个系统或者(应用程序)之间的远程调用…..
调用是跨语言,跨平台…
webservice 最基本的组成部分就是客户端,服务端…

webservice 中的一些概念
服务端:(作为服务端,怎么将自己的应用程序发布成一个webservice,让别人调用)
xml (webservice的客户端与服务端进行交互的时候传递的数据格式)
webservice description language(web 服务描述语言.. api)xml,简称wsdl
soap(简单对象访问协议) webservice 的客户端与服务端进行交互的时候走的协议
(soap 分两个版本(soap 1.1 与soap1.2)),现在的本是soap1.1,因为java jdk 只支持soap1.1版本的协议发布
* soap 协议=在http 的基础之上传送xml 格式的数据..

发布服务:

package cn.itcast.server;import javax.xml.ws.Endpoint;public class PublishServer {/*** @param args*/public static void main(String[] args) {//java jdk 提供一个自带的类可以将java 应用程序发布成webservice /*** 1,提供服务对外的访问地址* 2,提供服务的类的对象...*/Endpoint.publish("http://10.129.69.114:9999/helloService", new HelloService());}}

被发布的类

package com.zj.server;import javax.jws.WebService;import com.zj.bean.User;@WebService
public class HelloService {public void doubleKill(){System.out.println("zj");}public User getUserById(int id){User user=new User();user.setId(id);user.setMomo("123445");user.setUsername("zj");user.setWeibo("zj@sina.com.cn");user.setWeixin("l89999");return user;}
}

**注意:**1,endpoint是java jdk 提供的类,用来发布webservice,所以你的jdk 版本必须在1.6.0_21之上..
2,被发布的类当中必须包含一个有效(方法必须为publish的非静态的,非final的方法)的方法
3,被发布的类上面必须有注解…

客户端:

(作为客户端,怎么调用别人发布的webservice)

调用服务:我们可以通过java jdk 自带的一个命令 wsimport 根据服务端说明书(wsdl)生成本地的java 代码

我们直接操作这些java 代码,就可以调用webservice

  • wsimport -d . +服务说明书(wsdl)的地址 生成本地的class 文件
  • wsimport -s . +服务说明书(wsdl)的地址 生成本地的class 文件与java文件
  • wsimport -s . -p(包名)+服务说明书(wsdl)的地址 生成本地的class 文件与java文件

第一种方式调用:通过wsimport

工具1:webservice explorer (通过图形化界面的方式调用webservice)

工具2:tcp/ip Monitor 可以拦截webservice客户端与webservice 服务端进行交互的整个过程以及数据传输的格式

代码

package com.zj.clent;import com.zj.server.HelloService;
import com.zj.server.HelloServiceService;public class InvokeHelloService {public static void main(String[] args) {HelloServiceService helloServiceService=new HelloServiceService();HelloService helloService=helloServiceService.getHelloServicePort();helloService.doubleKill();}}

获得返回值

package com.zj.clent;import com.baidu.google.soso.so.HelloService;
import com.baidu.google.soso.so.HelloServiceService;
import com.baidu.google.soso.so.User;public class WsimportInvoke {public static void main(String[] args) {HelloServiceService helloServiceService=new HelloServiceService();HelloService helloService=helloServiceService.getHelloServicePort();User user=helloService.getUserById(1);System.out.println(user.getMomo());}
}

第二种方式调用:通过java jdk 自带的一个类URLConnect(可以发送一个http 请求)

原理:我们可以通过URLConnect 这个对象,发送一个http 请求,往webservice 服务端 传送xml 格式的数据,
模拟soap 协议 ,因为soap协议就是在http 的基础上传送xml格式的数据..

package com.zj.clent;import java.io.IOException;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;public class URLConnectionInvoke {public static void main(String[] args) throws IOException {URL url=new URL("http://10.129.69.114:9999/helloService");HttpURLConnection connection=(HttpURLConnection) url.openConnection();connection.setDoInput(true);       //要往服务器接收connection.setDoOutput(true);     //要往服务器传送数据,必须设置为tureconnection.setRequestProperty("Content-Type", "text/xml;charset=utf-8");connection.setRequestMethod("POST");OutputStream outputStream=connection.getOutputStream();//outputStream.write(b);}
}

第三种方式调用:通过客户端编程的方式调用 webservice

我们需要通过java jdk 自带的类 Service ,
同时,我们需要依赖一个接口,这个接口我们可以通过wsimport 生成的本地代码当中获取

  1. 复制接口到我们本地的包中
  2. 使用,关键类QName – 被称为完全限定名即:Qualified Name的缩写。QName 的值包含名称空间 URI、本地部分和前缀。
package com.zj.clent;import java.net.MalformedURLException;
import java.net.URL;import javax.xml.namespace.QName;
import javax.xml.ws.Service;import com.baidu.google.soso.so.HelloServiceService;public class ServiceInvoke {public static void main(String[] args) throws MalformedURLException {URL url=new URL("http://10.129.69.114:9999/helloService?wsdl");//1.命名空间2.服务名称QName qName=new QName("http://server.zj.com/","HelloServiceService");Service service=Service.create(url,qName);//获取接口类型 HelloService hs=service.getPort(new QName("http://server.zj.com/", "HelloServicePort"),HelloService.class);hs.doubleKill();}}

/**
互联网上有很多免费的服务,http://www.webxml.com.cn 可以在这个网站上面找到。
**/

1,调用互联网上手机号码归属地查询的服务
使用第一种:wsimport 生成本地代码调用
使用第二种:使用urlConnect 调用天气预报..

第四种调用方式:通过ajax 去调用webservice

xmlhttpRequest 对象时浏览器自带的一个对象,可以通过此对象发送一个http 请求,传送xml 格式的数据到服务端

(模拟soap 协议…)
不能访问:跨域(a 站点的js 访问b 站点的请求…)

由于使用ajax – js调用web服务完成不同于使用java代码调用。所以,必须要对SOAP文件非常的了解。
一般使用ajax调用,应该是在已经获知了以下信息以后才去调用:
获知请求(request)的soap文本。
获知响应(response)的soap文本。

这里写图片描述

webservice 加深:

通过webservice 的客户端与服务端的几种调用方式,通过tcp ip/monitor 监控webservice 请求的过程

拦截请求的数据,对数据进行分析…
webservice 的客户端与服务端进行交互的时候,
第一次通过get 请求 wsdl 的服务说明书
第二次通过post 的方式 请求 webservice 服务…

理解wsdl 服务的说明书:

我们可以通过修改注解来修改wsdl 服务说明书的描述。
如果修改了说明书,则会影响wsimport 生成的本地代码….

@WebService
(targetNamespace="www.baidu.com",    serviceName="HelloServicePortType",portName="ServicePortType"
)

修改wsdl的内容,如命名空间,服务名等
@WebMethod(exclude=true) 方法不再对外公开
@WebMethod(operationName=”getUserByName”) 修改方法名称

修改wsdl

public@WebResult(name="date")String getDate(@WebParam(name="date")String date){DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return dateFormat.format(new Date());}

WebService和Web服务器有什么区别呢?

我们可以把WebService看作是Web服务器上应用;反过来说,Web服务器是WebService运行时所必需的容器。这就是它们的区别和联系。

使用JDK1.6发布的简单Web服务,其内部其实是使用Socket实现。可以查看:SUN公司未对外公布的API类com.sun.xml.internal.ws.transport.http.server. ServerMgr获知,请使用反编译工具。

WebService的特点
WebService通过HTTP POST方式接受客户的请求
WebService与客户端之间一般使用SOAP协议传输XML数据.
它本身就是为了跨平台或跨语言而设计的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Google联手Facebook 要在AI研究上搞什么大事?

来源:网易智能 摘要:Google和Facebook宣布,使开源机器学习框架PyTorch与Tensor-Processing Units(TPU)进行合作。这种伙伴关系标志着人工智能研究合作进入新时代。“今天,我们很高兴地宣布,Goog…

WebService之CXF框架

本文主要包括以下内容 ant工具的使用利用cxf实现webservicecxf与spring整合 ajax访问webservice ant 工具 1、为什么要用到ant这个工具呢? Ant做为一种工具已经广泛被使用,并且历史悠久。 使用ant的内置命令,可以编译java源文件(javac)…

Java之IO操作总结

所谓IO,也就是Input与Output的缩写。在java中,IO涉及的范围比较大,这里主要讨论针对文件内容的读写 其他知识点将放置后续章节 对于文件内容的操作主要分为两大类 分别是: 字符流字节流 其中,字符流有两个抽象类&…

谷歌无人车离奇车祸曝光:人类安全员睡着后,误触关闭了自动驾驶

来源:量子位离奇,真离奇。一场已经被掩盖数月的谷歌无人车(Waymo)离奇车祸,刚刚被The Information曝光。车祸的发生地,就在距离谷歌加州山景城总部不远的高速公路上。那是一个六月的早晨。一辆Waymo无人车正…

强烈推荐:240多个jQuery插件

概述 jQuery 是继 prototype 之后又一个优秀的 Javascript 框架。其宗旨是—写更少的代码,做更多的事情。它是轻量级的 js 库(压缩后只有21k) ,这是其它的 js 库所不及的,它兼容 CSS3,还兼容各种浏览器(IE 6.0, FF 1.5, Safari 2.…

揭秘|超乎想象!未来50年将出现的九大黑科技……

来源:世界科技创新论坛Insititute for the Future是一家专门做预测的研究机构。该机构的首席研究总监Mark Frauenfelder详细描述了人类在未来能够用上,而今天却仍被认为不可能发生的事物。赶快一起来看看这些未来将出现的黑科技吧。1、大脑移植&#xff…

Android手绘效果实现

效果图 原理 大概介绍一下实现原理。首先你得有一张图(废话~),接下来就是把这张图的轮廓提取出来,轮廓提取算法有很多,本人不是搞图像处理的,对图像处理感兴趣的童鞋可以查看相关资料。如果你有好的轮廓提取算法&…

干货|120页精华PPT详解工业机器人本体设计运算及仿真

来源:哈尔滨工业大学摘要:120页精华PPT详解工业机器人本体设计运算及仿真未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能,互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括:建立AI智能系统智商评测体…

环信SDK集成

利用环信SDK可以实现即时通讯,但在集成的过程中碰到了不少的坑。 注意 选择项目路径,这里以最新版环信demo为例 注意:环信的ChatDemoUI这个demo里边因为研发的同事为了照顾老版本的AndroidStudio使用者,已经用eclipse生成了bui…

协作机器人先驱宣布倒闭!累计融资10.3亿元,贝佐斯投资八轮

来源:量子位一家机器人领域的头部玩家,还不是说倒下就倒下了。上个月,协作机器人的先驱Rethink Robotics刚刚宣布出售第2500个机器人产品,而昨天,就又宣布关门大吉了。CEO Scott Eckert在接受外媒The Robot Report采访…

YOLOv8改进 | 2023注意力篇 | MSDA多尺度空洞注意力(附多位置添加教程)

一、本文介绍 本文给大家带来的改进机制是MSDA(多尺度空洞注意力)发表于今年的中科院一区(算是国内计算机领域的最高期刊了),其全称是"DilateFormer: Multi-Scale Dilated Transformer for Visual Recognition"。MSDA的主要思想是…

贝索斯专访:亚马逊帝国大规模业务转型的秘诀

来源:机器之能摘要:这篇文章简明、清晰地揭示出这家似乎没有边界、无拘束公司成功「转身」背后的逻辑与秘诀。与美国的其它科技业巨头不同,亚马逊并没有一个总的企业园区。在其全球的 57.5 万名雇员中,有 4.5 万名员工和管理人员位…

2018及过去20年诺贝尔化学奖获奖者及其贡献!

来源:科学网摘要:2018及过去20年诺贝尔化学奖获奖者及其贡献!2018年诺贝尔化学获的获得者为美国科学家Frances H. Arnold, George P. Smith和英国科学家George P.Winter,他们利用进化的力量为人类造福。获奖的内容分别是研究酶的定…

RxJava学习入门

RxJava是什么 一个词:异步。 RxJava 在 GitHub 主页上的自我介绍是 “a library for composing asynchronous and event-based programs using observable sequences for the Java VM”(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序…

解读2018年诺贝尔化学奖成果:用进化的力量解决化学问题

来源:新华网摘要:新华社斯德哥尔摩10月3日电 科普:用进化的力量解决化学问题——解读2018年诺贝尔化学奖成果地球的生命经过长期进化最终获得强大的适应力&am…

在win8下安装使用java及在win8下部署java环境变量-图文

为了反编译APK,不得不安装一些Androidfby、apktool1.4.1、dex2jar-0.0.9.9等,甚至连DW也安装了,但是我的电脑是win8X64的,也就是64位的win8系统,这就有点头疼了,出现了: 不是内部或外部命令&…

国际运营商智慧城市探索与实践

来源:中国信息通信研究院CAICT摘要:AT&T、SKT、沃达丰在智慧城市领域探索的经验。2008年11月,IBM提出“智慧地球” 理念引发产业界热议,2010年,该公司进一步提出“智慧城市”愿景作为“智慧地球”在城市运营中的具…

Retrofit学习入门

Retrofit的使用 设置权限与添加依赖 定义请求接口通过创建一个retrofit生成一个接口的实现类(动态代理)调用接口请求数据 设置权限与添加依赖 权限&#xff1a;首先确保在AndroidManifest.xml中请求了网络权限 &#xff1a; <uses-permission android:name"android…

autotools入门笔记(一)

GNU autotools作用&#xff1a;收集系统配置信息并自动生成Makefile文件。 GNU autotools主要包括三个工具&#xff1a;autoconf、automake、libtool&#xff0c;还有很多辅助的工具&#xff0c;包括&#xff1a;autoheader、aclocal、autoscan。 ● autoscan检测源文件生成con…

本田、大众宣布智能路口研究新进展 以安全为重点

编译&#xff1a;网易智能摘要&#xff1a;每年&#xff0c;在十字路口发生的交通事故约占交通事故死亡人数的20%&#xff0c;这就是为什么汽车制造商和供应商都下定决心要创造出智能的十字路口&#xff0c;利用尖端技术来减少&#xff08;或者最好是能够避免&#xff09;在十字…