WebService学习总结(二)--使用JDK开发WebService
一、WebService的开发方法
使用java的WebService时可以使用一下两种开发手段
使用jdk开发(1.6及以上版本)
使用CXF框架开发(工作中)
二、使用JDK开发WebService
2.1、开发WebService服务器端
1、定义一个interface,使用@WebService注解标注接口,使用@WebMethod注解标注接口中定义的所有方法,如下所示:
package com.myl.ws; import javax.jws.WebMethod;
import javax.jws.WebService; /**
*
* @author maoyl
* @version 2018.4.14
* 定义SEI(WebService EndPoint Interface(终端))
*
*/ //使用@WebService注解标注WebServiceI接口
@WebService
public interface WebServiceInf { @WebMethod
public String sayHello(String name); @WebMethod
public String save(String name, String pwd); }
2、编写interface的实现类,使用@WebService注解标注实现类,实现接口中定义的所有方法,如下所示:
package com.myl.ws.impl; import javax.jws.WebService; import com.myl.ws.WebServiceInf; /**
*
* @author myl
* 具体实现
*
*/ @WebService
public class WebServiceInfImpl implements WebServiceInf { @Override
public String sayHello(String name) {
System.out.println("WebService :" + name + ", 欢迎您");
return name + "欢迎您";
} @Override
public String save(String name, String pwd) {
System.out.println("name:" + name + ",password:" + pwd + "登录成功");
return name + "登录成功";
} }
3、使用Endpoint(终端)类发布webservice,代码如下:
package com.myl.ws; import javax.xml.ws.Endpoint;
import com.myl.ws.impl.WebServiceInfImpl;
/**
*
* @author maoyl
* @version 2018.4.14
* 测试
*
*/
public class WebServicePublish {
public static void main(String[] args) {
String address = "http://192.168.1.2:5555/WS_Server/Webservice";
Endpoint.publish(address, new WebServiceInfImpl());
System.out.println("发布成功");
}
}
运行WebServicePublish类,就可以将编写好的WebService发布好了,WebService的访问URL是:http://192.168.1.2:5555/WS_Server/Webservice?wsdl
,如下图所示

这里我们编写了一个WebServicePublish类来发布WebService,如果是Web项目,那么我们可以使用监听器或者Servlet来发布WebService,如下:
1.使用监听器发布
package com.myl.ws.ulistener; import javax.jws.WebService;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.xml.ws.Endpoint;
import com.myl.ws.impl.WebServiceInfImpl; /**
*
* @author maoyl
* @version 2018.4.14
* 使用监听器发布
*
*/ @WebService
public class WebServicePublishListener implements ServletContextListener { @Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub } @Override
public void contextInitialized(ServletContextEvent arg0) {
String address = "http://192.168.1.2:5555/WS_Server/Webservice";
Endpoint.publish(address, new WebServiceInfImpl());
System.out.println("使用ServletContextListener发布成功---------"); } }
监听器在web.xml中配置:
<listener>
<listener-class>com.myl.ws.ulistener.WebServicePublishListener</listener-class>
</listener>
在此环境下报错

解决方法:
在@WebService标注的类上加上 @SOAPBinding(style = Style.RPC)即可解决
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
@WebService
@SOAPBinding(style = Style.RPC)
public interface WebServiceInf {...} //---------------
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
@WebService
@SOAPBinding(style = Style.RPC)
public class WebServiceInfImpl implements WebServiceInf {...}
查看资料:将jdk升级到jdk 1.6u17以上版本不加@SOAPBinding(style = Style.RPC)也不会有错了,(貌似试了一下jdk1.7也要加,ps:如果报上面的错误就加上就好了)
2.使用Servlet发布WebService
package com.myl.ws.usevlet; import javax.servlet.http.HttpServlet;
import javax.xml.ws.Endpoint;
import com.myl.ws.impl.WebServiceInfImpl; /**
*
* @author myl
* 用于发布WebService的Servlet
*/
public class WebServicePublishServlet extends HttpServlet { public void init (){
String address = "http://192.168.1.2:5555/WS_Server/Webservice";
Endpoint.publish(address, new WebServiceInfImpl());
System.out.println(address + "-------------------");
} }
servlet在web.xml配置
<servlet>
<servlet-name>webservicepublish</servlet-name>
<servlet-class>com.myl.ws.usevlet.WebServicePublishServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
如果不在web.xml配置,则需要在servlet实现类中加上 @WebServlet(value="",loadOnStartup=0)
/**
*
* @author myl
* 用于发布WebService的Servlet
*/
//将value属性设置为空字符串,这样WebServicePublishServlet就不提供对外访问的路径
//loadOnStartup属性设置WebServicePublishServlet的初始化时机
@WebServlet(value="",loadOnStartup=0)
public class WebServicePublishServlet extends HttpServlet {...}
将Web应用部署到服务器运行时,在初始化WebServicePublishServlet时,就会发布WebService了。如下图所示:

同时用listener和servlet则显示

关于发布WebService主要就是通过javax.xml.ws.Endpoint类提供的静态方法publish进行发布,如果是普通的java项目,那么可以专门写一个类用于发布WebService,如果是Web项目,那么可以使用ServletContextListener或者Servlet进行发布。
2.2、开发WebService客户端
1、借助jdk的wsimort.exe工具生成客户端代码,wsimort.exe工具位于Jdk的bin目录下,如下图所示:

执行命令:wsimport -keep url(url为wsdl文件的路径)生成客户端代码。
注:-s 选择生成文件的位置
-p 在该位置创建生成的文件夹作为生成位置
如果不用-s -p 则在当前文件夹下生成生成客户端代码
如: wsimport -s F:\MyeclipseWorkspace\WebServlet\src -p com.myl.webservice.service -keep http://192.168.1.2:5555/WS_Server/Webservice?wsdl

显示如上 则表示生成成功

2、 借助生成的代码编写调用WebService对外提供的方法
wsimport工具帮我们生成了好几个java类,但我们只需要关心 WebServiceInfImplService 类和 WebServiceInfImpl 接口的使用即可,如下所示:
package com.myl.webservice.client; import com.myl.webservice.service.WebServiceInfImpl;
import com.myl.webservice.service.WebServiceInfImplService; /**
*
* @author myl
* @version 2018.4.14
* 调用WebService的客户端
*/
public class Test { public static void main(String[] args) {
//创建一个用于产生WebServiceInfImpl实例的工厂,WebServiceInfImplService类是wsimport工具生成的
WebServiceInfImplService factory = new WebServiceInfImplService();
//通过工厂生成一个WebServiceInfImpl实例,WebServiceInfImpl是wsimport工具生成的
WebServiceInfImpl wsImpl = factory.getWebServiceInfImplPort();
//调用WebService的sayHello方法
String resResult = wsImpl.sayHello("maoyl");
System.out.println("调用WebService的sayHello方法返回的结果是:"+resResult);
//调用WebService的save方法
resResult = wsImpl.save("maoyal", "123");
System.out.println("调用WebService的save方法返回的结果是:"+resResult); } }
客户端返回结果

服务器端接收到结果

从调用返回的结果显示,借助wsimport工具生成的客户端代码已经成功调用到了WebService中的方法。以上就是使用JDK开发WebService的相关内容。
2.生成客户端代码也可以通过Myeclipse编辑器生成
创建客户端项目,右击项目 new -Other.. 选择 Web Service Client

Next

Next

Next -- Finish

此方法生成的客户端代码和 wsimport -keep url 生成的一样,调用方法也一样
WebService学习总结(二)--使用JDK开发WebService的更多相关文章
- WebService学习总结(三)——使用JDK开发WebService
一.WebService的开发手段 使用Java开发WebService时可以使用以下两种开发手段 1. 使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中) 二.使用JDK开发Web ...
- WebService学习总结(三)——使用JDK开发WebService(转)
一.WebService的开发手段 使用Java开发WebService时可以使用以下两种开发手段 1. 使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中) 二.使用JDK开发Web ...
- WEBSERVICE之JDK开发webservice
转自:https://www.cnblogs.com/w-essay/p/7357262.html 一.开发工具与环境 1. jdk1.6版本以上(jdk1.6.0_21及以上版本) 2 .eclip ...
- WebService学习--(三)使用JDK开发WebService
一.WebService的开发手段 使用Java开发WebService时可以使用以下两种开发手段 1. 使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中) 二.使用JDK开发Web ...
- [置顶]
WebService学习总结(3)——使用java JDK开发WebService
一.WebService的开发手段 使用Java开发WebService时可以使用以下两种开发手段 1. 使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中) 二.使用JDK开发Web ...
- 【WebService】使用JDK开发WebService(二)
WebService的开发手段 1.使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中) WebService的组成 1.服务器端 2.客户端 使用JDK开发WebService a. ...
- 使用JDK开发WebService
一.WebService的开发手段 使用Java开发WebService时可以使用以下两种开发手段 1. 使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中) 二.使用JDK开发Web ...
- 2.使用JDK开发webService
使用jdk开发webService需要注意:jdk版本必须1.6以及1.6以上! 以下webService的组成部分: server端和client端,通过服务器端(server)webService ...
- WebService-使用JDK开发WebService
一.使用JDK开发WebService 2.1.开发WebService服务器端 1.定义一个interface,使用@WebService注解标注接口,使用@WebMethod注解标注接口中定义的所 ...
随机推荐
- cJSON解析数据如何避免过多if-else,实现解耦
代码展示: 数据接收函数内,解析cJSON数据时,一不小心就会冒出来一大堆if语句在一个函数内,后续想要新增网络功能时,必然又会导致需要在mqtt订阅函数内去新增部分代码,实现解析新的报文. 这显然耦 ...
- 微信小程序 -- 英语词典 (小程序插件)
英语词典小程序 基于英语词典小程序插件 - 提供开源地址 项目地址 英语词典小程序插件: 微信小程序 词典 真题基础服务插件(gitee.com) 功能特色 [x] 全面详实的经典词库,详细释义覆盖约 ...
- Vue学习笔记(一)简单使用和插值操作
目录 一.Vue是什么 二.Vue简单体验 1. 声明式渲染 2. vue列表展示 3. 处理用户输入(事件监听) 三.插值操作 1. Mustache语法 2. 常用v-指令 v-once v-ht ...
- Mybatis学习笔记-第一个Mybatis程序
思路 搭建环境 搭建数据库(略) CREATE DDATABASE CREATE TABLE INSERT VALUES 新建项目 普通Maven项目 删除src文件夹 --> 建立父工程 导入 ...
- ECDSA高性能硬件实现——算法详解与模块划分
ECDSA全称椭圆曲线数字签名算法,它是基于素数域的椭圆曲线对信息进行加签与验签.其核心在于对信息的加签,及对加签的信息进行验签,那么下面介绍该算法流程. 假设Alice希望对消息m进行签名,并将消息 ...
- 原生ajax练习-post&xml
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ms17-010
永恒之蓝和ms17-010简介: 永恒之蓝(EternalBLUE)"是Shadow Brokers(影子经纪人)黑客组织公布的一款黑客工具,该工具利用的漏洞也被称为MS17-010漏洞,M ...
- C++ 多态 案例(//多态案例----制作饮品 //描述:煮水 冲泡 倒入杯中 加入辅料)
1 //多态案例----制作饮品 2 //描述:煮水 冲泡 倒入杯中 加入辅料 3 4 #include <iostream> 5 #include <string> 6 us ...
- Docker 实践及命令梳理
文档 Docker Reference Documentation Docker 从入门到实践 [中文] 安装 安装 Docker,设置开机启动,然后配置阿里云镜像加速 1. 安装 Docker Do ...
- 神奇的 SQL 之别样的写法 → 行行比较
开心一刻 昨晚我和我爸聊天 我:"爸,你怎么把烟戒了,也不出去喝酒了,是因为我妈不让,还是自己醒悟,开始爱惜自己啦?" 爸:"儿子啊,你说的都不对,是彩礼又涨价了.&qu ...