1. 程式人生 > >Web專案通過Servlet編寫一個介面,部署在遠端伺服器上,供他人呼叫

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

這裡寫圖片描述

這裡寫圖片描述

之後我們重新啟動服務,應該就不會有報錯了

在這裡插入圖片描述