WebService小例子———
WebService学习(刚开始)
————————————————————————————————————————————————————————————————————
WebService:跨平台跨语言的远程调用技术。WebService即web服务。
Java中共有三种WebService规范,分别是JAX-WS(JAX-RPC)、JAXM&SAAJ、JAX-RS。
WebService三要素:soap、wsdl、uddi
SOAP协议:是一种网络协议
soap即Simple Object Access Protocol简易对象访问协议。用于跨平台应用程序之间的通信,被设计用来通过因特网(http)进行通信。SOAP = HTTP+XML,其实就是通过HTTP发xml数据。很简单并可扩展支持面向对象,允许您跨越防火墙。
Socket是所有通信的基础也是语言个无关平台无关。使用的是tcp协议,传输效率高。适合传递大数据高并发场景,高并发的情况需要实现多线程并且使用到线程池,编码复杂。Socket只是流的传输,传输的格式需要程序员自己定义。Sockt的高并发框架mina。
Webservice使用的是soap协议,soap协议基于http协议的应用层协议,本质就是http+xml。Soap协议是w3c标准,传输效率低。使用传输数据不是太大的场合,也是支持高并发的,受限于web容器。支持soap协议和wsdl两者都是国际通用标准,不需要自定义数据格式,只需要面向对象开发。
WSDL
WebService的使用说明书。描述了WebService的服务器地址以及WebService服务接口、参数、返回值。(从下往上阅读)
1、先找service节点:每个wsdl中,有且只有一个service节点。也叫服务视图节点。service中有port节点服务端端口。
2、根据port节点的binding属性找binding节点。根据binding节点的type属性找portType节点。
3、portType节点就是我们定义的SEI服务的接口类型。Prottype中的operation 节点就是方法名称。
4、operation 节点的input就是参数的定义,output就是返回值的定义。
5、Input有个属性叫做message,message属性对应message节点。其中有一个element,对应element节点。
6、Element节点定义中xsd中。定义了数据的类型。参数和返回值都在其中定义。
小例子:( 天气查询系统(Base) )
服务器端:
1、编写SEI,即接口
package service; public interface WeatherInterface { String queryWeather(String cityName); }
2、编写SEI实现类,需实现SEI接口,还需在实现类上添加@WebService注解
package service; import javax.jws.WebService; @WebService
public class WeatherInterfaceImpl implements WeatherInterface { @Override
public String queryWeather(String cityName) {
System.out.println("发送的城市名称为:" + cityName); String result = "高温预警!!!"; return result;
} }
3、发布服务。(使用Endpoint的静态方法publish)
package service; import javax.xml.ws.Endpoint; public class WeatherServer { public static void main(String[] args) { Endpoint.publish("http://127.0.0.1:11111/weather", new WeatherInterfaceImpl()); } }
(注意:如果你使用的IP地址是本机的,只能自己访问,但是如果你使用的是外网IP,类似196.128.*.*,请将项目放入网络容器中,即tomcat发布)
4、查看效果:访问 http://127.0.0.1:11111/weather?wsdl 就可以看到wsdl说明书,启动成功!
客户端:
可以使用简单的wsimport来自动生成客户端(在jdk安装目录bin中,有一个wsimport命令,可根据wsdl文档生成客户端调用代码)
新建Java工程,使用cmd定位到src目录下,运行命令:wsimport -s . http://127.0.0.1:11111/weather?wsdl
成功之后,项目结构如下:
此时就可以调用服务器端方法了:
1、创建一个服务视图对象
2、从服务试图获得porttype(SEI)对象
3、调用服务端方法
4、打印结果
package client; import service.WeatherInterfaceImpl;
import service.WeatherInterfaceImplService; public class WeatherClient { public static void main(String[] args) { WeatherInterfaceImplService service = new WeatherInterfaceImplService(); WeatherInterfaceImpl portType = service.getWeatherInterfaceImplPort(); String result = portType.queryWeather("武汉"); System.out.println(result); } }
扩展(公网天气查询)
服务器使用第三方:下载地址
其中client.java类如下:
public static void main(String[] args) {
//创建服务视图
//WeatherWebService service=new WeatherWebService(); URL url = null;
try {
url = new URL("http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?WSDL");
} catch (MalformedURLException e) {
e.printStackTrace();
}
QName qName=new QName("http://WebXml.com.cn/", "WeatherWebService"); Service service=Service.create(url,qName);
WeatherWebServiceSoap portType=service.getPort(WeatherWebServiceSoap.class);
//service.getWeatherWebServiceSoap(); ArrayOfString arrayOfString=portType.getWeatherbyCityName("武汉");
for (String string : arrayOfString.getString()) {
System.out.println(string);
}
}
上面即为使用外部WebService来更新信息
WebService小例子———的更多相关文章
- maven+springmvc+cxf 实现简单webservice小例子
1.首先你需要创建一个maven项目[当然是web项目] 2.pom.xml添加以下 <properties> <cxf.version>2.2.3</cxf.versi ...
- springmvc入门的第一个小例子
今天我们探讨一下springmvc,由于是初学,所以简单的了解一下 springmvc的流程,后续会持续更新... 由一个小例子来简单的了解一下 springmvc springmvc是spring框 ...
- java即时通信小例子
学习java一段时间了,今天写来一个即时通信的小例子练手在其过程中也学到了一些知识拿出来和大家分享,请路过的各位大神多多赐教... 好了下面讲一下基本的思路: 首先,编写服务器端的程序,简单点说吧就是 ...
- Runtime的几个小例子(含Demo)
一.什么是runtime(也就是所谓的“运行时”,因为是在运行时实现的.) 1.runtime是一套底层的c语言API(包括很多强大实用的c语言类型,c语言函数); [runti ...
- bootstrap 模态 modal 小例子
bootstrap 模态 modal 小例子 <html> <head> <meta charset="utf-8" /> <title ...
- INI配置文件分析小例子
随手写个解析INI配置字符串的小例子 带测试 #include <iostream> #include <map> #include <string> #inclu ...
- JavaScript小例子:复选框全选
JavaScript小例子:复选框全选 这只是一个小例子,很简单,但是这个功能还是很常用的: 实现后效果如图: JavaScript代码: <script type="text/jav ...
- 【zTree】 zTree使用的 小例子
使用zTree树不是第一次了 但是 还是翻阅着之前做的 对照着 使用起来比较方便 这里就把小例子列出来 总结一下使用步骤 这样方便下次使用起来方便一点 使用zTree树的步骤: 1.首先 在 ...
- js小例子(标签页)
运用js写的一个小例子,实现点击不同的标签出现不同的内容: <!DOCTYPE html> <html> <head> <meta chaset=" ...
随机推荐
- day--43 HTML标签和CSS基本小结
HTML标签和CSS基本小结一:常用标签 01:块标签 p,h1--h6 ,hr ,div 02:内联标签 b,i,u,s 小提示:块标签可以嵌套内置元素或者某些块级元素,但内联元素不能包含块级元素 ...
- C++_代码重用4-多重继承
继承使用时要注意,默认是私有派生.所以要公有派生时必须记得加关键字Public. MI(Multi Inheritance)会带来哪些问题?以及如何解决它们? 两个主要问题: 从两个不同的基类继承同名 ...
- Luogu P1131 [ZJOI2007]时态同步 树形DP
要自下向上调整,尽可能用一个道具修改多个: 搜的时候记录叶节点的最大深度,减一下就好了. #include<cstdio> #include<iostream> #includ ...
- [转] 利用js实现 禁用浏览器后退
[From] http://blog.csdn.net/zc474235918/article/details/53138553 现在很多的内部系统,一些界面,都是用户手动点击退出按钮的.但是为了避免 ...
- 【研究】CVE-2017-11882-Office远程代码执行漏洞复现
实验环境:win10+kali 工具:koadic,Command43b_CVE-2017-11882.py KALI: root@kali:/opt/koadic-master# ./koadic ...
- mutillidae2.6.48部署到phpstudy
废话不多说,先上链接 mutillidae2.6.48链接: https://pan.baidu.com/s/1hssyiVy 密码: pw67 phpstudy2016.exe链接: https:/ ...
- js 中的! 和 !! 的区别
Js中!的用法是比较灵活的,它除了做逻辑运算常常会用!做类型判断,可以用!与上对象来求得一个布尔值,1.!可将变量转换成boolean类型,null.undefined和空字符串取反都为false,其 ...
- C#中if和#if区别
if的作用是程序流控制,会直接编译.执行.#if是对编译器的指令,其作用是告诉编译器,有些语句行希望在条件满足时才编译. --------------------------------------- ...
- sublime的reopen with encoding和reload with encoding区别
首先必需要明白一点,sublime无论以什么编码格式打开文本(以什么编码格式来理解文本文件中的二进制数据),都会把它转为utf-8再显示到屏幕中,这个过程称作解码.其实不当当是sublime,其实任何 ...
- 基于 CentOS 搭建 WordPress 个人博客
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 腾讯云提供了开发者实验室帮助用户搭建 WordPress 个人博客,教程内容如下,用户可以点击开发者实验室快速上机完成实验. 准备 LNMP ...