Java Web Services面試問題集錦
為了學習更多web service知識,讓我們首先理解面向服務架構的概念。
什麼是面向服務的架構?
面向服務的架構(Service Oriented Architecture,SOA)是表示所謂服務的自包含功能單元的一種軟體設計原則和架構設計模式。SOA推崇鬆耦合、複用性和粗粒度的服務設計原則。在企業架構方面,SOA帶來的好處包括對業務需求的敏捷交付和迅速反應,通過降低整合成本提高投資回報率,通過複用元件降低開放成本。企業架構一般使用企業服務匯流排(ESB)作為大型企業線上應用的整合層。
什麼是WebService
Web Service是面向服務架構的一種實現形式,它能夠以一種平臺無關的方式在不同系統之間進行互動。服務提供方定義由WSDL描述的介面,並使用SOAP訊息與服務使用方進行訊息互動。這些訊息能夠通過HTTP、FTP或者SMTP協議進行傳輸。WebService可以是基於SOAP或者REST的。
在今天的逐步向導中我們將探索如何建立基於SOAP的web 服務和使用web服務的使用者。我們將使用JAX-WS(Java API for XML Web Services)建立web服務。
使用軟體:
Weblogic Application Server 12c
Oepe
12c
Weblogic Webservice Tool – 這個工具將自動建立所有需要的程式碼和WSDL檔案,讓開發者專注於業務邏輯。
第一步:
在你的Eclipse中建立一個新的Dynamic Web Project。
點選modify,增加Weblogic Webservice元件的Facets。
第二步:
點選複選框,以確保所有依賴的模組被包含進來,如截圖中所示
第三步:
Default Context根節點是CalculatorService, web模組的內容目錄是WebContent,點選Finish。
第四步:
此刻點選新建的專案,在你的專案上增加Weblogic Web Service模組。
第五步:
建立一個新的web service。給webservice新增名稱和包詳情
第六步:
Eclipse的webservice工具將建立一個帶有預設hello()方法的服務端點介面(約定)。我們可以用方法add()來代替這個預設方法。最好的實踐是建立一個介面,介面中宣告的方法都被對映為網路服務操作。這個介面被稱為服務端點介面(SEI,Service Endpoint Interface)。只要我們看到@WebService註解,它標示該介面即為一個SEI。
第七步:
建立CalculatorImpl.java作為JWS類(Java Web服務)
替代CalculatorImpl.java的現有預設程式碼,增加add()方法的具體實現。
第八步:
下圖解釋了@webService註解的webservice實現和wsdl之間的對映。Javax.jws.WebService告訴應用伺服器這個類需要被看作webservice。Javax.jws.WebService的屬性包括:
- name —— webservice的名稱,對應WSDL檔案的元素
- targetNameSpace —— 從該Web服務生成的WSDL和XML元素使用的XML名稱空間
- serviceName —— web服務的服務名稱。預設值為jws檔名加上字尾‘service’
- wsdlLocation —— wsdl檔案的URL
-
endpointInterface —— 這個屬性基於存在的webservice服務端點
上圖中Calculator介面的webservice名稱被對映為WSDL中portType元素提及的webservice名稱。
Calculator.java中的portName,serviceName,targetNameSpace和服務端點介面(SEI)被對映為CalculatorService.wsdl檔案
第九步:
現在是時候在Weblogic 12c Server上來執行webservice了。右鍵點選專案,選擇Run on Server,新增CalculatorService專案到Weblogic伺服器並配置它們。
第十步:
現在webservice已經部署到伺服器上,並暴露給使用的使用者。可以通過weblogic伺服器控制檯使用和控制它。
可以從截圖所示的位置檢視和測試wsdl檔案。
第十一步:
遠端地址的wsdl檔案。http://10.0.2.15:7001/CalculatorServiceServer/CalculatorServer?WSDL
第十二步:
下圖展示了CalculatorService.wsdl檔案,並解釋了WSDL檔案的主要元素。WSDL是客戶端和服務提供者的服務約定。
Definition —— WSDL檔案最外層的元素是,它是wsdl文件中定義的所有其他元素的容器,總之,它就是根元素。
- types —— 描述客戶端和服務端互動的訊息所用到和關聯的所有資料型別。它是一個可選欄位,types部分引用了定義資料型別的XSD(XML schema definition)。如果這部分為空,則該web服務僅適用簡單資料型別。
- message —— 定義了webservice服務方和使用方交換的資料。建立的訊息都屬於上面的資料型別。
- portType —— 表示稱為operations的web服務,每個operation可以有一個或多個訊息。
- binding —— 定義了訊息如何傳輸。它可以使用HTTP GET,HTTP POST,SOAP(HTTP協議的上層)。從binding部分WSDL定義從抽象走向具體,提供了關於web服務的具體詳情。binding元素必須說明在portType中抽象定義的webservice的實現詳情。
-
service —— 指定端點,客戶端可以從這個路徑訪問web服務。
第十三步:
我們可以在Weblogic Test客戶端的幫助下測試webservice。
第十四步:
Weblogic測試客戶端能夠顯示出add操作的成功結果,並給出請求和回覆的SOAP訊息。
第十五步:
現在我想要建立一個servlet作為webservice客戶端,來使用我們上一步建立的Calculator服務。建立一個新的動態Web工程 ——CalculatorServiceClient,增加Oracle WebLogic Web Service Clients切面。
第十六步:
右鍵點選CalculatorServiceClient工程,依循project->Select New -> Select other -> Search Weblogic Web Service Client嚮導來建立一個新的web服務客戶端。現在輸入WSDL檔案的引用,在這個例子裡我們將使用WSDL檔案的遠端定義。點選前請確保驗證過WSDL檔案。
點選下一步將CalculatorServiceServer程式碼輸出到CalculatorService.jar。再點選下一步指定執行時WSDL檔案的位置。這裡我已經使用了Copy WSDL into client jar(將WSDL複製到客戶端的jar包)的選項
第十七步:
現在建立一個用來關聯WebService的Servlet類
第十八步:
讓我們看一下客戶端Servlet的程式碼:
1 2 3 4 5 6 7 8 9 |
protected
void
doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
CalculatorService
service = new
CalculatorService();
Calculator
addservice = service.getCalculatorPort();
int
sum = addservice.add( 1 ,
6 );
response.setContentType( "text/html" );
PrintWriter
out = response.getWriter();
out.println( "<h1>
SUM="
+ sum + "</h1>" );
System.out.println( "result
sum-"
+ sum);
}
|
servlet的輸出顯示了add操作的結果。