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简单入门的更多相关文章

  1. 大型运输行业实战_day11_2_事务理论与实际生产配置事务管理

    1.什么是事务(Transaction:tx) 数据库的某些需要分步完成,看做是一个整体(独立的工作单元),不能分割,要么整体成功,要么整体生效.“一荣俱荣,一损俱损”,最能体现事务的思想.案例:银行 ...

  2. 大型运输行业实战_day06_1_购票功能简单实现

    1.添加购票按钮 对应的html代码 因为列表是js函数动态填充的,故添加按钮应该在js函数中,完整代码如下: /** * 注意在调用该函数时必须输入参数 * 查询+ 分页 * */ function ...

  3. 大型运输行业实战_day15_1_全文检索之Lucene

    1.引入 全文检索简介: 非结构化数据又一种叫法叫全文数据.从全文数据(文本)中进行检索就叫全文检索. 2.数据库搜索的弊端 案例 :     select  *  from product  whe ...

  4. 大型运输行业实战_day01_2_需求文档

    1.文档格式 (见模板文件) 2.Axure简单使用 2.1安装Axure傻瓜式安装 2.2简单使用axure 3.总结 需求文件完成后应该包括三种文件: 1.axure文件 2.axure生成的ht ...

  5. 大型运输行业实战_day01_1_业务分析

    1.业务分析 发展历史:  上车收费-->车站买票(相当于先收钱后上车)-->站务系统--->联网售票 2.项目结构 3.开发流程分析 1.业务分析            图文并茂  ...

  6. 大型运输行业实战_day09_2_站间互售实现

    1.添加站间互售入口 对应的html代码 <button onclick="otherStation()">站间互售</button> 对应的js发送函数 ...

  7. 大型运输行业实战_day07_1_订单查看实现

    1.业务分析 每个在窗口售票的售票员都应该可以随时查看自己的售票信息 简单的界面入口如图所示: 对应的html代码: <button onclick="orderDetail()&qu ...

  8. 大型运输行业实战_day03_2_使用ajax将请求页面与请求数据分离

    1.引入jquery 1.添加jquery包 2.在要使用jquery的页面中引入jquery 引入jquery后必须检查是否引入正确,这里值得注意的是 springMVC默认情况先会拦截 js文件, ...

  9. 大型运输行业实战_day13_1_定时任务spring-quartz

    1.jar包 拷贝quartz-2.2.3.jar包到项目 2.编写定时任务类TicketQuart.java package com.day02.sation.task; import com.da ...

随机推荐

  1. 零基础学习python_异常处理(32-33课)

    我们写完python执行的时候是不是经常会遇到报错,而且报错都是大片红字,这样给别人的感受就是你写的程序怎么老是出问题啊,这样我们还咋么混下去呢?于是乎,就有了异常处理的东东. python的try语 ...

  2. js_字符转Unicode

    在开发中总会遇到关于Unicode的转码和解码,每次都找工具转/解码很麻烦 ,今天在网上get到一个简单的转/解Unicode的函数. var UnicodeFun = { toUnicode: fu ...

  3. 【转】 .Net MVC4 上传大文件,并保存表单

    1前台:cshtml </pre><pre name="code" class="csharp">@model BLL.BLL.Prod ...

  4. git 常用操作总结

    廖雪峰博客的git 教程写得不错, 很详细,但是却总结的不是很好. 这里哥再详细总结一遍吧! Git鼓励大量使用分支: 查看分支:git branch 创建分支:git branch 切换分支:git ...

  5. electron 项目的打包方式,以及 jquery 插件的修改使用

    < 一 > 应用打包 1,首先确定安装了 node 和 npm 2,全局安装打包依赖  => npm i electron-packager -g 3,打包命令 electron-p ...

  6. Shell 编程(循环)

    for in 循环语句 #!/bin/bash for x in one two three four do echo number $x done 例:取出passwd中每一行name 并输出 he ...

  7. cors跨域问题

    同源策略: 是由NetScape提出的著名的安全策略,所有支持javaScript的浏览器都使用这个策略.同源策略限制了一个源中加载文本或脚本与来自其它源中资源的交互方式. IE特例: 授信范围(Tr ...

  8. js 监听组合键盘事件

    有些时候,我们需要在网页上,增加一些快捷按键,方便用户使用一些常用的操作,比如:保存,撤销,复制.粘贴等等. 我们所熟悉的按键有这么集中类型: 单独的按键操作,如:delete.up.down等 两位 ...

  9. java split函数结尾空字符串被丢弃的问题

    参考: http://yinny.iteye.com/blog/1750210 http://www.xuebuyuan.com/1692988.html java中的split函数用于将字符串分割为 ...

  10. LG Optimus L90 [D415] T-Mobile 刷机

    1 先使用[ROOT大师]ROOT手机. 2 执行以下ADB命令. adb shell su //备份 dd /by-name/laf of=/sdcard/laf.img. //清除 dd /by- ...