在个人上一片文章中,我在本地新建了一个普通的类来编写WebService,使用终端类 Endpoint 发布这个WebService,以此来实现让其余类调用这个接口,实现接口中定义的功能。java
那么若是是Web项目的话,应该怎么编写并发布WebService呢? Web项目可使用监听器或者Servlet来发布WebService,本片实例我用Servlet来发布WebService。浏览器
首先新建一个 Dynamic Web Project 项目,以后建立三个类文件:服务器
- 接口
- 接口实现类
- 入口类
这三个类文件能够放在一个包下,或者像上图那样分别放在对应的包下,推荐后一种并发
IWebService.javaapp
package cn.xuzihui.itf; import javax.jws.WebService; @WebService public interface IWebService { String sayHello(String name); }
WebServiceImpl.javawebapp
package cn.xuzihui.impl; import java.text.SimpleDateFormat; import java.util.Date; import javax.jws.WebService; import cn.xuzihui.itf.IWebService; @WebService public class WebServiceImpl implements IWebService { @Override public String sayHello(String name) { Date date = new Date(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String hello = df.format(date) + "," + name + "call the inferface!"; return hello; } }
注意要在IWebService.java、WebServiceImpl.java文件中加上@WebService的注解,位置如上所示ide
WebServiceCalledByServlet.javaui
package cn.xuzihui.controller; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.xml.ws.Endpoint; import cn.xuzihui.impl.WebServiceImpl; @WebServlet(value="", loadOnStartup=0) public class WebServiceCalledByServlet extends HttpServlet{ private static final long serialVersionUID = -2864381365175258589L; public void init() { String address = "http://127.0.0.1:8888/WebServiceWithServlet"; Endpoint.publish(address, new WebServiceImpl()); System.out.println("使用WebServiceCalledByServlet发布webservice成功!"); } }
这样就完成了WebService的建立,接下来咱们要把这个Web项目导出为 war file ,并部署在远程Tomcat服务器上。.net
选择项目并右击,选择导出
选择导出的类型为 WAR file
点击下一步
选择导出的位置,点击完成就生成了 war 文件
那么接下来就是把这个WebServiceWithServlet.war 文件上传到咱们的远程Tomcat服务器,当上传到Tomcat服务器的webapp文件夹中,Tomcat服务器会自动初始化并发布WebService,以下图所示:
访问咱们服务器的Tomcat的管理页面,点击 Manager APP
你会看到已经存在了咱们刚才上传的项目
咱们在浏览器的地址栏中输入WebService入口类文件中定义的address地址,注意,要把ip地址改为你的远程服务器的ip,而且在地址的后面加上 "?wsdl"。
那么若是出现了上图相似的界面,那么就说明WebService发布成功。
接下来呢,咱们就要实如今本地调用这个远程接口。
在本地再新建一个普通的 Java Project 项目
鼠标右击这个项目,选择新建->其余->Web Service Client
在弹出的选项框中的 Service definition 填写上一步在浏览器地址栏中填写的URL
点击完成,系统会自动为咱们建立一些必要的类
红框圈起来的是系统建立的类,上面那个包是下一步咱们须要建立的
咱们须要本身在建立一个类来实现这些调用这些新建立的类,以到达调用接口的目的
WSClient.java
package cn.xuzihui.client; import java.rmi.RemoteException; import javax.xml.rpc.ServiceException; import cn.xuzihui.impl.WebServiceImpl; import cn.xuzihui.impl.WebServiceImplServiceLocator; public class WSClinet { public static void main(String[] args) throws ServiceException, RemoteException { WebServiceImpl serviceImpl = new WebServiceImplServiceLocator().getWebServiceImplPort(); String sayWhat = serviceImpl.sayHello("迪迦"); System.out.println(sayWhat); } }
右键点击运行程序
在结果上会有报错信息,多是缺乏两个jar包
须要下载这两个jar包导入到 Client 项目下
下载地址 https://download.csdn.net/download/bronzehammer/10608421
在项目中新建一个 lib文件夹,把这两个jar包放在lib中,并在项目中添加外部jar
以后咱们从新启动服务,应该就不会有报错了