了解了webservice的基础知识之后,我们来编写一个服务端和客户端,进行测试。

服务端

先写一个接口:

@WebService
public interface WebServiceI { //使用@WebMethod注解标注WebServiceI接口中的方法
@WebMethod
String sayHello(String name); @WebMethod
String save(String name,String pwd);
}

再写它的实现类:

@WebService
public class WebServiceImpl implements WebServiceI { @Override
public String sayHello(String name) {
System.out.println("WebService sayHello "+name);
return "sayHello "+name;
} @Override
public String save(String name, String pwd) {
System.out.println("WebService save "+name+", "+pwd);
return "save Success";
}
}

我建立的是spring boot 项目,在启动项里面发布:

@SpringBootApplication
public class WebServiceApplication { public static void main(String[] args) throws ServletException{
new WebServiceApplication().init();
SpringApplication.run(WebServiceApplication.class, args);
} public static void init() throws ServletException {
//WebService的发布地址
//访问的时候需要在add后面加上?wsdl
String address = "http://192.xxx.15.117:8088/WS_Server/WebService";
//发布WebService,WebServiceImpl类是WebServie接口的具体实现类
Endpoint.publish(address , new WebServiceImpl()); //使用JDK发布。
System.out.println("使用WebServicePublishServlet发布webservice成功!");
}
}

启动项目,webservice服务端就发布成功了。

客户端

重新建立一个spring boot项目,cmd进入java目录,执行命令: wsimport -keep http://192.xxx.15.117:8088/WS_Server/WebService?wsdl ,会自动生成代码。

除了里面圆圈圈出来的是启动项,其他都是自动生成的。

建立一个controller:

@RestController
public class Controller { @RequestMapping(value = "/sayHello")
public String sayHello(){
WebServiceImplService factory = new WebServiceImplService();
//通过工厂生成一个WebServiceImpl实例,WebServiceImpl是wsimport工具生成的
WebServiceImpl wsImpl = factory.getWebServiceImplPort();
//调用WebService的sayHello方法
String resResult = wsImpl.sayHello("heqiyoujing");
return resResult;
} @RequestMapping(value = "/save")
public String save(){
WebServiceImplService factory = new WebServiceImplService();
//通过工厂生成一个WebServiceImpl实例,WebServiceImpl是wsimport工具生成的
WebServiceImpl wsImpl = factory.getWebServiceImplPort();
//调用WebService的sayHello方法
String resResult = wsImpl.save("heqiyoujing","123");
return resResult;
}
}

启动项目,访问接口:

http://localhost:9000/sayHello      返回:sayHello heqiyoujing

http://localhost:9000/save   返回:save Success

客户端也成功了。

WebService学习二的更多相关文章

  1. WebService学习--(二)webservice相关介绍

    一.WebService是什么? 1. 基于Web的服务:服务器端整出一些资源让客户端应用访问(获取数据) 2. 一个跨语言.跨平台的规范(抽象) 3. 多个跨平台.跨语言的应用间通信整合的方案(实际 ...

  2. WebService学习笔记系列(二)

    soap(简单对象访问协议),它是在http基础之上传递xml格式数据的协议.soap协议分为两个版本,soap1.1和soap1.2. 在学习webservice时我们有一个必备工具叫做tcpmon ...

  3. Java WebService学习笔记 - Axis进阶(二)

    上一篇  Java WebService学习笔记 - Axis(一) 前一篇博文中简单介绍了Axis的使用方法,这篇将介绍一些Axis的一些高级特性 Axis中Handler的使用 Handler ...

  4. webService学习之路(三):springMVC集成CXF后调用已知的wsdl接口

    webService学习之路一:讲解了通过传统方式怎么发布及调用webservice webService学习之路二:讲解了SpringMVC和CXF的集成及快速发布webservice 本篇文章将讲 ...

  5. WebService学习总结(转)

    原文地址: WebService学习总结(一)——WebService的相关概念 WebService学习总结(二)——WebService相关概念介绍 WebService学习总结(三)——使用JD ...

  6. 关于wcf,webservice,webapi或者其他服务或者接口有什么区别 WCF、WebAPI、WebService之间的区别 【转载】HTTP和SOAP完全就是两个不同的协议 WebService学习总结(一)——WebService的相关概念

    wcf,webservice采用的是rpc协议,这个协议很复杂,所以每次要传递.要校验的内容也很复杂,别看我们用的很简单,但实际是frame帮我们做掉了rpc生成.解析的事情webapi遵循是rest ...

  7. emberjs学习二(ember-data和localstorage_adapter)

    emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...

  8. ReactJS入门学习二

    ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...

  9. [未完成]WebService学习第一天学习笔记

    [未完成]WebService学习第一天学习笔记[未完成]WebService学习第一天学习笔记

随机推荐

  1. WIZnet-io6Library下载及使用

    概观 io6Library是一个IPv6集成库,可以轻松集成和管理使用WIZnet硬连线双TCP / IP堆栈控制器(WIZCHIP)产品系列的用户应用程序. io6Library用于管理依赖于用户特 ...

  2. TI MSP430工程配置及2019年电赛A题编程示例(使用430 F5529)

    配置 第一步:右击工程,选择Options 第二步:在General Options的Target选项卡里选择对应的器件Device,这里是MSP430G2231 第三步:在Debugger里选择FE ...

  3. springmvc原理详解(手写springmvc)

    最近在复习框架 在快看小说网搜了写资料 和原理 今天总结一下 希望能加深点映像  不足之处请大家指出 我就不画流程图了 直接通过代码来了解springmvc的运行机制和原理 回想用springmvc用 ...

  4. 有一个时间插件引发的关于 newDate().setMonth() 的问题

    项目中遇到一个时间插件的BUG,查看源码之后发现是因为setMonth()的问题,使用了之后会某些月份会出现月份加一的问题, 查阅资料后发现  setMonth()其实是设置与当前时间天数相同的月份, ...

  5. 素数筛法(Eratosthenes筛法)

    介绍 Eratosthenes筛法,又名埃氏筛法,对于求1~n区间内的素数,时间复杂度为n log n,对于10^6^ 以内的数比较合适,再超出此范围的就不建议用该方法了. 筛法的思想特别简单: 对于 ...

  6. xtuils

    xutils的使用必须导入一个依赖 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceS ...

  7. Spring.Net 依赖注入

    一.Spring.Net概念 编程模型(Ioc,DI方式) IoC:控制反转 原来创建对象的权利由程序来控制就是new实例,IoC就是改由容器来创建,相当于一个工厂, DI:依赖注入 没有IoC就没有 ...

  8. java优雅注释原则和代码格式列举

    一.java的三种注释类型 单行注释:// ...... 块注释:/* ...... */ 文档注释:/** ...... */ 二.指导原则 注释不能美化糟糕的代码,碰到糟糕的代码就重新写吧. 用代 ...

  9. (七)c#Winform自定义控件-进度条

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...

  10. (十三)c#Winform自定义控件-导航菜单

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...