一、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的更多相关文章

  1. WebService学习总结(三)——使用JDK开发WebService

    一.WebService的开发手段 使用Java开发WebService时可以使用以下两种开发手段 1. 使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中) 二.使用JDK开发Web ...

  2. WebService学习总结(三)——使用JDK开发WebService(转)

    一.WebService的开发手段 使用Java开发WebService时可以使用以下两种开发手段 1. 使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中) 二.使用JDK开发Web ...

  3. WEBSERVICE之JDK开发webservice

    转自:https://www.cnblogs.com/w-essay/p/7357262.html 一.开发工具与环境 1. jdk1.6版本以上(jdk1.6.0_21及以上版本) 2 .eclip ...

  4. WebService学习--(三)使用JDK开发WebService

    一.WebService的开发手段 使用Java开发WebService时可以使用以下两种开发手段 1. 使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中) 二.使用JDK开发Web ...

  5. [置顶] WebService学习总结(3)——使用java JDK开发WebService

    一.WebService的开发手段 使用Java开发WebService时可以使用以下两种开发手段 1. 使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中) 二.使用JDK开发Web ...

  6. 【WebService】使用JDK开发WebService(二)

    WebService的开发手段 1.使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中) WebService的组成 1.服务器端 2.客户端 使用JDK开发WebService a. ...

  7. 使用JDK开发WebService

    一.WebService的开发手段 使用Java开发WebService时可以使用以下两种开发手段 1. 使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中) 二.使用JDK开发Web ...

  8. 2.使用JDK开发webService

    使用jdk开发webService需要注意:jdk版本必须1.6以及1.6以上! 以下webService的组成部分: server端和client端,通过服务器端(server)webService ...

  9. WebService-使用JDK开发WebService

    一.使用JDK开发WebService 2.1.开发WebService服务器端 1.定义一个interface,使用@WebService注解标注接口,使用@WebMethod注解标注接口中定义的所 ...

随机推荐

  1. 【阅读笔记】Java核心技术卷一 #6.Chapter8

    8 泛型程序设计 8.1 为什么要使用泛型程序设计 类型参数(type parameters)(E.T.S...) 通配符类型(wildcard type)(?) 注意这两者用法用处并不同. 8.2 ...

  2. 群晖NAS网络存储服务器防盗防小偷

    群晖NAS网络存储服务器防盗防小偷 根据群晖NAS的实际测量外形尺寸到淘宝网邮购金属  配电箱(弱电箱). 把配电箱(弱电箱)用粗螺丝固定到机柜或墙壁上. 把群晖NAS用密码纯铜挂锁锁在配电箱(弱电箱 ...

  3. ; 按快捷键`(即波浪号~所在的键盘按键)立即打开随身U盘中的办公专用文件夹

    ; 按快捷键`(即波浪号~所在的键盘按键)立即打开随身U盘中的办公专用文件夹; WorkFolderHotkey.ahk;; http://www.autoahk.com/; https://www. ...

  4. 【GCC编译器】计算支配树信息 Part1 - 求CFG的深度为主搜索树

    深度为主生成树:将图中所有的结点和那些构成深度为主次序的边表示为树的形式,并将其他的边(这些边不是深度为主次序的一部分)用一种有别于树的方式来表示(我们用虚线而不是实线表示它们) 属于深度为主生成树的 ...

  5. C# WinForm 数据库连接及对数据库的相关操作

    1.首先在App.config配置文件中配置数据库连接字符串: <appSettings> <add key="connectionstring" value=& ...

  6. Java方法02——定义与调用

    方法的定义与调用 定义与调用 例子  package method; ​ public class Demon03 {     public static void main(String[] arg ...

  7. 线程的分离状态(detached state)

    说到线程的分离状态,我认为,之所以会有这个状态,是因为系统对某些线程的终止状态根本不感兴趣导致的. 我们知道,进程中的线程可以调用: [cpp] view plaincopyprint? int pt ...

  8. HCNA Routing&Switching之地址转换技术NAT

    前文我们了解了包过滤工具ACL相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15156308.html:今天我们来聊一聊地址转换技术NAT相关话题: ...

  9. Echarts 展示两条动态数据曲线

    利用Echarts 展示两条动态数据曲线,每1秒刷新一下数据,在echart官网例子基础上修改,修改了仿真数据的生成方式.生成数量,曲线数量,最总效果图如下: 详细代码如下: 遇到的主要问题点, 1, ...

  10. kali2020更换JDK&&安装burpsuite pro

    写在前面 之前因为安装maven把JDK换成了1.8.0_261,尝试诸多方法依然打不开自带的burp,正好在做CTF做不出来 QAQ,一气之下打算安个破解版burp. 安装 0x00 更换JDK 使 ...