第一次写WebService是一年前的事情了,虽然代码还留着,但是开发的过程已经忘记了,为什么说,过程忘记了? 因为这里面有一些关键点,当时没有记录下来.
最近又在看项目,正好有WebService,所以,捡起来复习下.写个Demo.
这个Demo不会用到任何的WebService框架,比如像CXF之类的...以后有空可以写一个....
先来个项目结构图吧.
如图所示,一共三个类.
一个接口,一个接口实现类,一个发布WebService的主方法.
看代码吧.
看着,在接口类上,需要加上@WebService 注解.
在类方法上面,需要加上@WebMethod注解.
package com.test.webservice; import javax.jws.WebMethod; import javax.jws.WebService; @WebService public interface WebServiceServerInterface { @WebMethod public String sayHello(String name); }
随便写一个了,能明白就行.
在接口实现的类上,依旧需要加上@WebService注解
不过方法上面,就不用再加注解了.
package com.test.webservice; import javax.jws.WebService; @WebService public class WebServiceServerImpl implements WebServiceServerInterface { @Override public String sayHello(String name) { System.out.println("Server : " + name); return "Hello " + name; } }
注意: Endpoint.publish(),
这个方法,接收两个参数.
第一个参数是WebService发布的路径address,端口号后面的看自己心情,随便加,最后的方法名,也是看心情.
第二个参数是 接口的实现类对象.
package com.test.webservice; import javax.xml.ws.Endpoint; public class Main { public static void main(String[] args) { String address = "http://localhost:8088/WebServiceDemo/sayHello"; Endpoint.publish(address, new WebServiceServerImpl()); System.out.println("WebService Server 发布成功"); } }
启动main方法,即可....这个程序会一直跑下去....你看那个小红方块....
接下来,我们使用Eclipse自带的工具,模拟客户端进行调用.
这里要注意,(最好)Eclipse 在Java EE的工作空间下...
打开那个"地球"的按钮...open web browser,在地址栏上输入我们发布的WebService地址
注意啊,这里输入的URL,需要在发布地址的后面,加上"?wsdl"这个后缀,否则会出现"无法显示此页"
出现了这篇WSDL文档,说明服务端已经成功的发布好了....
然后我们打开"地球"按钮旁边的那个按钮 "Launch the web Service explorer"
按照图片中,标注的顺序一个一个按....
然后在输入框中输入 发布的WebService地址....
按 go...
啦啦啦啦....出现了....
然后咱们点击 Operation 下面的 那个sayHello 方法.....
然后
然后
然后就有结果了....
模拟客户端调用服务端....
好了,上面说的是Eclipse自带的模拟客户端....
但是真的要写客户端应该怎么搞????
准备工作...首先你的电脑需要配置JDK环境变量....
其次提醒下....WebService 发布的Main方法,不要关闭啊....
在JDK的bin目录下面...有一个wsimport.exe这个程序...咱们利用这个程序,为我们生成WebService的客户端....
首先创建一个WebService Client 客户端....
我这里以Windos系统为例,如果你是Linux,我还真不会了...再去Google下看看....
打开Dos命令行....就是cmd...
然后在dos命令下,进入WebService Client 客户端的src文件夹下面....
就像这样子....
接下来就是见证奇迹的时刻啦.....
在命令行中输入 wsimport -keep +你发布的WebService的URL
就像这样子.....
记得地址后面要加上?wsdl
然后你再刷新下你的WebService Client客户端代码....是不是多了些什么???
那么问题来了...这么多的类,我特么应该调用哪个???
现在咱们去看看WSDL文档....
在这个文档的下面....
有一个<service>标签....这个标签,就是咱们需要调用的类...在上面的类中,也是能找到的,是不是....
<service>标签下面的<port>标签,就是服务端给我们提供的方法....
然后咱们来写个客户端代码调用一下.....
这里我先 创建service对象...
然后用service对象,调用port方法...
你们在写代码的要注意下...你看看他返回的是什么东西...
他返回的就是一个接口.....
然后咱们通过接口去调用服务端提供的方法...
结束了.....