WebService 簡單入門教程(Java Web專案)

冰帝0107發表於2017-01-12


基本需求:

1、JDK版本為: jdk1.6以上;

2、建立兩個專案(java專案 或 web專案 都可以):服務端(Web_Server)和客戶端(Web_Client);

3、因tomcat沒有jax-ws所需的依賴環境,所以首先下載Jax-ws RI,即jax-ws reference implemantation, 地址:http://jax-ws.java.net

專案目的:

客戶端(Web_Client)中的程式呼叫 服務端(Web_Server)中的方法;

步驟:(以Java Web專案為例)

1、建立一個專案名為 Web_Server 的Java Web專案,建立包名為  com.demo.server  的包,在該包下建立 介面 名為  ServerFunction 的介面 和 類 名為 ServerFunctionImpl 的實現類;

程式碼如下:

-------------------------------------------------------------------------------------------------------------------------------

介面程式碼:

-------------------------------------------------------------------------------------------------------------------------------

package com.demo.server;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

@WebService
@SOAPBinding(style = Style.RPC)
public interface ServerFunction {
 
 /*
  * 介面方法用於將傳入的字串轉為大寫
  */
 @WebMethod
 public String changeWords(@WebParam(name = "words") String words);
  
}
-------------------------------------------------------------------------------------------------------------------------------

實現類程式碼:

--------------------------------------------------------------------------------------------------------------------------------

package com.demo.server;

import javax.jws.WebService;

@WebService(endpointInterface = "com.demo.server.ServerFunction")
public class ServerFunctionImpl implements ServerFunction {

 /*
  * 方法用於將傳入的字串轉為大寫
  */
 @Override
 public String changeWords(String words) {
  String str = words;
  str = str.toUpperCase();
  return str;
 }

}

---------------------------------------------------------------------------------------------------------------------------------

2、在  WEB-INF 目錄下,建立兩個xml檔案:sun-jaxws.xml  和 web.xml

程式碼如下:

---------------------------------------------------------------------------------------------------------------------------------

sun-jaxws.xml  程式碼

---------------------------------------------------------------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?> 
<endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' version='2.0'>    
    <endpoint 
    name='ServerFunction'
    implementation='com.demo.server.ServerFunctionImpl'
    url-pattern='/jdkService'/>    
    <!--
    name='ServerFunction'    web service服務的介面名稱
    implementation='com.demo.server.ServerFunctionImpl'   web service服務的介面的實現類全路徑
    url-pattern='/jdkService'   url的相對路徑
     -->
</endpoints>

-----------------------------------------------------------------------------------------------------------------------------------

web.xml  程式碼

------------------------------------------------------------------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  id="WebApp_ID"
  version="3.1">
 
 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>

 <listener>
  <listener-class>
   com.sun.xml.ws.transport.http.servlet.WSServletContextListener
  </listener-class>
 </listener>

 <servlet>
  <servlet-name>ServerFunction</servlet-name>
  <servlet-class>
   com.sun.xml.ws.transport.http.servlet.WSServlet
  </servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>

 <servlet-mapping>
  <servlet-name>ServerFunction</servlet-name>
  <url-pattern>/jdkService</url-pattern>
 </servlet-mapping>
 
 <session-config>
        <session-timeout>120</session-timeout>
    </session-config>

</web-app>

---------------------------------------------------------------------------------------------------------------------------------------

3、將下載的  jaxws-ri-2.2.10.zip 壓縮包中  lib 資料夾下的 jar包 複製到  Web_Server 專案的 WEB-INF/lib  下,Build Path 到專案裡;

4、啟動tomcat,在瀏覽器位址列輸入 http://localhost:8080/Web_Server/jdkService?wsdl  就可以看到該service的詳細資訊(如果不成功的話,請檢查伺服器埠是否被佔用);

5、建立一個專案名為 Web_Client 的 Java Web 專案;

開啟 cmd 輸入:

命令:  wsimport -s src的路徑 -p 完整包名 -keep webservice的釋出地址 ;然後回車就OK了,  

例如:  wsimport -s D:\workspace\Web_Client\src -p com.demo.client -keep http://localhost:8080/Web_Server/jdkService?wsdl

(如果wsimport命令失效,請檢查是否把jdk配入環境變數;JAVA_HOME:JDK所在位置;CLASSPATH:%JAVA_HOME%\lib\tools.jar)  

回車後,會出現:

正在解析 WSDL...  

正在生成程式碼...  

正在編譯程式碼...  

出現以上內容時,恭喜你,成功了!

你可以重新整理一下你的  Web_Client  專案,會在  com.demo.client  包下會有對應的WebService生成的檔案!

6、在 com.demo.client  該包下建立測試類Test

程式碼如下:

----------------------------------------------------------------------------------------------------------------------------------

package com.demo.service;

public class Test {
 
 public static void main(String[] args) {
  ServerFunction serverFunction = new ServerFunctionImplService().getServerFunctionImplPort();
  String str = serverFunction.changeWords("hello world");
  
  //在控制檯列印的就是在 Web_Server 專案下的  changeWords 方法處理後的字串
  System.out.println(str);
 }
}

-----------------------------------------------------------------------------------------------------------------------------------

7、執行該測試類Test,會在控制檯上列印出大寫的  “HELLO WORLD”,說明測試成功!









相關文章