大型运输行业实战_day14_1_webserivce简单入门
1.简单使用
1.1.服务端
1.编写接口
package com.day02.sation.ws; /**
* Created by Administrator on 1/12.
*/
public interface ITicket {
/**
*
* @param userName
* @return
*/
public String buyTicket(String userName); /**
*
* @param id
* @return
*/
public String getTicket(String id);
}
2.编写实现类
注意实现类上贴标签@WebService
package com.day02.sation.ws; import javax.jws.WebService; /**
* Created by Administrator on 1/12.
*/
@WebService
public class TicketImpl implements ITicket {
@Override
public String buyTicket(String userName) {
System.out.println("userName = "+userName);
return "购票成功";
} @Override
public String getTicket(String id) {
System.out.println("id = "+id);
return "成都-南充";
}
}
3.发布服务
package com.day02.sation.ws; import javax.xml.ws.Endpoint; /**
* Created by Administrator on 1/12.
*/
public class TestWs {
/**
* 发布服务
* @param args
*/
public static void main(String[] args) {
Endpoint.publish("http://127.0.0.1:11111/ticket",new TicketImpl());
System.out.println("------发布成功----");
}
}
4.检查服务示范发布成功
浏览器上访问:http://127.0.0.1:11111/ticket,结果如下图:
点击后文档如下,则发布成功
服务端发布完成!
1.2.客户端
对于客户端,我们可利用只用java中的wsimport来自动生成客户端代码。使用Wsimport生成客户端调用代码,在jdk的安装目录的bin目录中,有一个wsimport命令。
可以根据wsdl文档生成客户端调用代码。
新建一个java工程WebServiceClient,然后到这个工程的src目录下面,在src目录下通过cmd运行以下命令:(注意空格)
wsimport -s . http://127.0.0.1:11111/ticket?wsdl
如下图所示:
生成后的代码结构如图所示:
编写客户端测试类:
package com.day02.sation.ws; /**
* Created by Administrator on 1/12.
*/
public class TestClient {
public static void main(String[] args) {
//获取服务类
TicketImplService ticketImplService = new TicketImplService();
//获取到接口
TicketImpl ticketImplPort = ticketImplService.getTicketImplPort();
//调用接口购票方法
String str1 = ticketImplPort.buyTicket("wuji");
System.out.println("str1 = "+str1);
//调用接口查询车票方法
String str2 = ticketImplPort.getTicket("18");
System.out.println("str2 = "+str2);
}
}
执行客户端测试代码
客户端如下效果:
服务端执行如下:
2.webservice介绍
Webservice:跨语言跨平台的远程调用技术。Web service 即web服务,它是一种跨编程语言和跨操作系统平台的远程调用技术即跨平台远程调用技术。
Java 中共有三种WebService 规范,分别是JAX-WS(JAX-RPC)、JAXM&SAAJ、JAX-RS。
webService三要素:soap、wsdl、uddi
JAX-WS 的全称为 Java API for XML-Based Webservices ,早期的基于SOAP 的JAVA 的Web 服务规范JAX-RPC(Java API For XML-Remote Procedure Call).
JAXM(JAVA API For XML Message)主要定义了包含了发送和接收消息所需的API,SAAJ(SOAP With Attachment API For Java,JSR 67)是与JAXM 搭配使用的API,为构建SOAP 包和解析SOAP 包提供了重要的支持,支持附件传输等.
JAX-RS 是JAVA 针对REST(Representation State Transfer)风格制定的一套Web 服务规范.
2.1. 应用场景
在做企业整体信息化时,企业中一般都或多或少的存在一些既存系统,这些各种各样的系统不可能全部推翻,重新规划和开发,因为很多供应商在某一领域也做的很专业,博众家之长并进行集成应该是一个比较现实和可取的做法。
各个系统之间通过WebService进行集成,不仅缩短了开发周期,降低了风险,还减少了代码复杂度,并能够增强应用程序的可维护性,因为webservice支持跨平台且遵循标准协议(soap)。
将一个软件的功能以webservice方式暴露出来,达到软件重用。例如上边分析的天气预报,将天气查询功能以webservice接口方式暴露出来非常容易集成在其它系统中;再比如一个第三方物流系统将快递查询、快递登记暴露出来,从而集成在电子商务系统中。
2.2. soap协议
SOAP 是一种网络通信协议
SOAP即Simple Object Access Protocol简易对象访问协议
SOAP 用于跨平台应用程序之间的通信
SOAP 被设计用来通过因特网(http)进行通信
SOAP = HTTP+XML,其实就是通过HTTP发xml数据
SOAP 很简单并可扩展支持面向对象
SOAP 允许您跨越防火墙
Socket是所有通信的基础也是语言个无关平台无关。
Socket使用的是tcp协议,传输效率高。适合传递大数据高并发场景,高并发的情况需要实现多线程并且使用到线程池,编码复杂。Sockt的高并发框架mina。
Socket只是流的传输,传输的格式需要程序员自己定义。
Webservice使用的是soap协议,soap协议基于http协议的应用层协议,本质就是http+xml。Soap协议是w3c标准,传输效率低。使用传输数据不是太大的场合,也是支持高并发的,受限于web容器。支持soap协议和wsdl两者都是国际通用标准,不需要自定义数据格式,只需要面向对象开发。
2.3.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中。定义了数据的类型。参数和返回值都在其中定义。
节点作用:
definitions: 根节点,name属性是在服务类基础上+Service后缀
service: 服务节点,描述服务的名称和地址
binding:服务绑定节点,定义访问方式和WSDL文件的编写规范
portType:接口名,定义服务方法名称等信息
message:消息,定义请求和响应的方法名、参数名及参数类型
大型运输行业实战_day14_1_webserivce简单入门的更多相关文章
- 大型运输行业实战_day11_2_事务理论与实际生产配置事务管理
1.什么是事务(Transaction:tx) 数据库的某些需要分步完成,看做是一个整体(独立的工作单元),不能分割,要么整体成功,要么整体生效.“一荣俱荣,一损俱损”,最能体现事务的思想.案例:银行 ...
- 大型运输行业实战_day06_1_购票功能简单实现
1.添加购票按钮 对应的html代码 因为列表是js函数动态填充的,故添加按钮应该在js函数中,完整代码如下: /** * 注意在调用该函数时必须输入参数 * 查询+ 分页 * */ function ...
- 大型运输行业实战_day15_1_全文检索之Lucene
1.引入 全文检索简介: 非结构化数据又一种叫法叫全文数据.从全文数据(文本)中进行检索就叫全文检索. 2.数据库搜索的弊端 案例 : select * from product whe ...
- 大型运输行业实战_day01_2_需求文档
1.文档格式 (见模板文件) 2.Axure简单使用 2.1安装Axure傻瓜式安装 2.2简单使用axure 3.总结 需求文件完成后应该包括三种文件: 1.axure文件 2.axure生成的ht ...
- 大型运输行业实战_day01_1_业务分析
1.业务分析 发展历史: 上车收费-->车站买票(相当于先收钱后上车)-->站务系统--->联网售票 2.项目结构 3.开发流程分析 1.业务分析 图文并茂 ...
- 大型运输行业实战_day09_2_站间互售实现
1.添加站间互售入口 对应的html代码 <button onclick="otherStation()">站间互售</button> 对应的js发送函数 ...
- 大型运输行业实战_day07_1_订单查看实现
1.业务分析 每个在窗口售票的售票员都应该可以随时查看自己的售票信息 简单的界面入口如图所示: 对应的html代码: <button onclick="orderDetail()&qu ...
- 大型运输行业实战_day03_2_使用ajax将请求页面与请求数据分离
1.引入jquery 1.添加jquery包 2.在要使用jquery的页面中引入jquery 引入jquery后必须检查是否引入正确,这里值得注意的是 springMVC默认情况先会拦截 js文件, ...
- 大型运输行业实战_day13_1_定时任务spring-quartz
1.jar包 拷贝quartz-2.2.3.jar包到项目 2.编写定时任务类TicketQuart.java package com.day02.sation.task; import com.da ...
随机推荐
- 性能测试day02_预习知识
在进入第二天的学习之前,我想我们需要提前先了解一下基础的知识,所以这一篇主要讲解的就是预习课程,关于协议和抓包的讲解(原理和工具). 可以说基于服务器的性能一般都是基于协议的,所以我们就需要懂协议,以 ...
- 安全测试1_Web知识简介
接下去所有的安全测试都是本人学习安全测试的过程,随笔中会截取云课堂视频中的图片(比较生动和形象,便于理解),主要目的是方便自己以后复习和巩固! 1.Web发展阶段概述: 2.web安全我能提发展形势: ...
- 剑指Offer(四):重建二叉树
说明: 1.本系列是根据<剑指Offer>这个系列做的一个小笔记. 2.直接动力是因为师兄师姐找工作很难,而且机械出生的我面试算法更难. 3.刚开始准备刷LeetCode.LintCode ...
- mysql 5.6 解压缩版安装教程
MySQL 5.6 for Windows 解压缩版配置安装 听语音 | 浏览:68011 | 更新:2014-03-05 12:28 | 标签:mysql 1 2 3 4 5 6 7 分步阅读 My ...
- day4----函数-闭包-装饰器
本文档内容: 1 python中三种名称空间和作用域 2 函数的使用 3 闭包 4 装饰器 一 python中三种名称空间和作用域 1.1名称空间: 当程序运行时,代码从上至下依次执行,它会将变量与值 ...
- iOS获取当前路由信息
导入头文件: #import <SystemConfiguration/CaptiveNetwork.h> - (void)currentWifiSSID { // Does not ...
- 以虎嗅网4W+文章的文本挖掘为例,展现数据分析的一整套流程
本文转自知乎 作者:苏格兰折耳喵 ----------------------------------------------------- 本文作者将结合自身经验,并以实际案例的形式进行呈现,涉及从 ...
- Maven环境变量
Windows: M2_HOME=D:\ProgramFiles\apache-maven-3.5.0M2_REPO=D:\ProgramFiles\maven\repositoryPATH=%PAT ...
- ajax 406 Not Acceptable
搞了半天, 后面参照 http://www.th7.cn/web/ajax/201611/194702.shtml, 终于把问题解决了.. 使用ajax向后台请求时,前台报错406 Not Accep ...
- JavaScript数组的五个迭代方法的简单实例
<script> //every() var nums = [1,2,3,4,5]; var result = nums.every(function eve(item,index,arr ...