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=" ...
随机推荐
- Android 绑定Service并与之通信
1.绑定service 2.实现方法 3.在Androidmanifest.xml文件中配置service <service android:name=".Myservice" ...
- BZOJ - 2844 线性基
题意:求给定的数在原数组中的异或组合中的排名(非去重) 因为线性基中\(b[j]=1\)表示该位肯定存在,所以给定的数如果含有该位,由严格递增和集合枚举可得,排名必然加上\(2^j\)(不是完全对角就 ...
- Hadoop基础入门
一.hadoop是什么? (1)Hadoop是一个开源的框架,可编写和运行分布式应用处理大规模数据,是专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式.Hadoop= ...
- [转] CSS 颜色名
[From] http://www.w3school.com.cn/cssref/css_colornames.asp CSS 颜色名 所有浏览器都支持的颜色名. HTML 和 CSS 颜色规范中定义 ...
- 编辑距离及编辑距离算法(求字符的相似度) js版
编辑距离概念描述: 编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符. 例如 ...
- 【研究】CVE-2015-1635-HTTP.SYS远程执行代码漏洞(ms15-034)
1.1.1 漏洞描述 在2015年4月安全补丁日,微软发布的众多安全更新中,修复了HTTP.sys中一处允许远程执行代码漏洞,编号为:CVE-2015-1635(MS15-034 ).利用HTTP. ...
- 全排列 next_permutation() 函数的使用
看来看去还是这篇博客比较简洁明了 https://www.cnblogs.com/My-Sunshine/p/4985366.html 顺便给出牛客网的一道题,虽然这道题用dfs写出全排列也能做,题意 ...
- PIE SDK地图范围设置
1.功能简介 地图范围设置主要就是对图层的地图浏览控制,例如地图的放大.缩小.漫游.全图显示.1:1视图.比例尺等功能,能更好的与地图有一个互动的地图浏览体验.PIE SDK对地图范围设置主要利用IC ...
- FileSearch.java
!=fileList.size()) { ]) { fileOutputStream.write(bytes; i < files.length; i++) {// 将其中的文件夹遍历出来,并调 ...
- lxc 容器基础配置篇
一, 首先配置lxc需要的网卡断 吧eth0复制一份变为br0 配置br0 配置eth0 重启网卡 /etc/init.d/network restart 安装lxc软件 需要epel源--- y ...