Web專案通過Servlet編寫一個介面,部署在遠端伺服器上,供他人呼叫
在我的上一片文章中,我在本地新建了一個普通的類來編寫WebService,使用終端類 Endpoint 釋出這個WebService,以此來實現讓其他類呼叫這個介面,實現介面中定義的功能。
那麼如果是Web專案的話,應該怎麼編寫併發布WebService呢? Web專案可以使用監聽器或者Servlet來發布WebService,本片例項我用Servlet來發布WebService。
首先新建一個 Dynamic Web Project 專案,之後建立三個類檔案:
- 介面
- 介面實現類
- 入口類
這三個類檔案可以放在一個包下,或者像上圖那樣分別放在對應的包下,推薦後一種
IWebService.java
package cn.xuzihui.itf;
import javax.jws.WebService;
@WebService
public interface IWebService {
String sayHello(String name);
}
WebServiceImpl.java
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的註解,位置如上所示
WebServiceCalledByServlet.java
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伺服器上。
選擇專案並右擊,選擇匯出
選擇匯出的型別為 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 專案下
在專案中新建一個 lib資料夾,把這兩個jar包放在lib中,並在專案中新增外部jar
之後我們重新啟動服務,應該就不會有報錯了