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=" ...
随机推荐
- os模块与 sys模块
os模块是与操作系统交互的一个接口 ''' os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作 ...
- 【算法笔记】B1047 编程团体赛
1047 编程团体赛 (20 分) 编程团体赛的规则为:每个参赛队由若干队员组成:所有队员独立比赛:参赛队的成绩为所有队员的成绩和:成绩最高的队获胜. 现给定所有队员的比赛成绩,请你编写程序找出冠军队 ...
- [转] open-falcon编写的整个脑洞历程
[From] https://mp.weixin.qq.com/s?__biz=MjM5OTcxMzE0MQ==&mid=400225178&idx=1&sn=c98609a9 ...
- 分享个高精度IP定位
https://www.opengps.cn/Data/IP/LocHighAcc.aspx
- API 接口设计工具 --Swagger
swagger-editor,无法启动GUI软件,在线版的FQ也打不开 null
- enum学习
https://www.cnblogs.com/hyl8218/p/5088287.html
- curl -w函数
url_effective 最终获取的url地址,尤其是当你指定给curl的地址存在301跳转,且通过-L继续追踪的情形. http_code http状态码,如200成功,301转向,404未找到, ...
- 安恒杯11月月赛web题目-ezsql详细记录
通过此题目可以学习到 1.通过load_file+like来盲注获取文件内容 2.php魔术方法__get函数的用法 3.bypass linux命令过滤 题目中给了注册和登录的功能,没有源码泄露 ...
- 适用于所有页面的基础样式base.css
@charset "UTF-8"; /*css 初始化 */ html, body, ul, li, ol, dl, dd, dt, p, h1, h2, h3, h4, h5, ...
- 初学Hadoop之WordCount词频统计
1.WordCount源码 将源码文件WordCount.java放到Hadoop2.6.0文件夹中. import java.io.IOException; import java.util.Str ...