1. 程式人生 > >Intellij IDEA開發WebService步驟例項

Intellij IDEA開發WebService步驟例項

Intellij IDEA開發WebService步驟例項

以“基本運算服務的開發與部署。具體內容:實現加、減、乘、除、平方、開平方等常用數學運算 webservice”為例介紹
1)新建專案
    a.進入File > New Project…選單開啟新建專案視窗,依次選擇Java、WebServices,Version項選擇Apache Axis,Libraries項選擇 Download。然後點選Next按鈕進入下一頁
(注意:1.要確保電腦聯網,勾選DownLoad是為了下載必要的jar報,這個是需要聯網下載的,否則後面的實驗很難進行 2.Version一項改為 Apache Axis)
在這裡插入圖片描述


     b.在下一頁中輸入專案名稱,然後點選Finish按鈕開始下載依賴包。依賴包下載完成後進入新建的專案,選擇專案檔案存放位置,自定義專案名。
在這裡插入圖片描述
2)專案初始結構(有一個自動生成的Java類–HelloWorld)
在這裡插入圖片描述
3)生成WSDL檔案
    a.可以修生成的HelloWorld檔案內容,實現常用算數運算,或者自己另外建立一個類編寫原始碼實現常用算數運算(我是直接修改的HelloWorld)

package example;
public class HelloWorld {
    public double add(double a, double b) {
        return a + b;
    }

    public double minus(double a, double b) {
        return a - b;
    }

    public double multiply(double a, double b) {
        return a * b;
    }

    public double divide(double a, double b) {
        return a / b;
    }

    public double power(double a) {
        return a*a;
    }

    public double sqrt(double a) {
        if (a < 0) {
            System.out.println("開方數要大於0");
            return 0;
        } else {
            return Math.sqrt(a);
        }
    }
}

    b.在HelloWorld.java檔案上點選右鍵,選WebServices -> Generate Wsdl From Java Code 。在彈出的窗口裡點OK。
在這裡插入圖片描述
在這裡插入圖片描述
    c.這時會發現在專案結構目錄裡多了一個HelloWorld.wsdl檔案。
在這裡插入圖片描述
4)配置Tomcat伺服器及專案結構
    a.選擇Run > Edit Configurations…選單,開啟Run/Debug Configurations視窗。
在這裡插入圖片描述
    b.在Run/Debug Configurations窗口裡新增+按鈕,在出現的選單裡選擇Tomcat Server > Local。如果看不到Tocmat Server選單項,則點選最下面的29 items more (irelevant)…選單項查詢。
在這裡插入圖片描述


    c.然後在新增的Tomcat Server配置頁面中新增配置的Name、Application server和HTTP Port。如果Application server為空,將本地的 Tomcat 安裝地址新增進來。如果本地沒有,從網上下載 Tomcat 7:https://tomcat.apache.org/download-70.cgi
這時配置頁面底部可能會顯示有Warning:No Artifacts marked for deployment(警告:沒有標記要部署的產物)。
點選警告資訊右側的Fix…按鈕切換到Deployment標籤頁。
在這裡插入圖片描述
    d.在Deployment標籤頁點選Deploy at the server startup區的+按鈕,選擇Artifacts。
在這裡插入圖片描述
    e.新增 Artifact 後的介面如下,已經沒有警告了。點選OK完成執行引數的配置。
在這裡插入圖片描述
    f.到這個時候,然後可以執行起服務了,但是訪問服務頁面時還是會報錯。因為還要給部署的 Artifact 新增 Apache Axis 包的依賴。
    選擇File> Project Structure…選單。
在這裡插入圖片描述
    g.在出現的視窗中選擇Project Settings > Artifacts,會到在新的警告資訊。點選警告資訊右側的Fix…按鈕。
在這裡插入圖片描述
    h.在彈出選單裡選擇Add ‘JAX-WS-Apache Axis’ to the artifact。
在這裡插入圖片描述
    i.修復完成後警告消失。
在這裡插入圖片描述
5)啟動Tomcat檢視wsdl
    a.點選工具欄上的執行或除錯按鈕執行服務。
在這裡插入圖片描述
    b.在瀏覽器裡輸入:
http://localhost:8080/services
    訪問結果如下:
在這裡插入圖片描述
    d.點選HelloWorld(wsdl)能正常檢視wsdl的內容則釋出成功。伺服器端完成。
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
6)編寫客戶端程式碼呼叫服務

package test;

import org.apache.axis.utils.StringUtils;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;


public class CalculateClient {

    public static void main(String[] args) {
        // 指定呼叫WebService的URL(這裡是我們釋出後點擊HelloWorld)
        String url = "http://localhost:8080/services/HelloWorld?wsdl";
        //呼叫的方法
        String method = "add";
        //呼叫方法的引數列表
        Object[] parms = new Object[]{2.0,3.0};
        CalculateClient calculateClient = new CalculateClient();
        //呼叫方法
        String svrAddResult = calculateClient.CallMethod(url, method, parms);

        System.out.println(svrAddResult);

        String svrMinusResult = calculateClient.CallMethod(url, "minus", new Object[]{5.0,2.0});
        String svrMultiplyResult = calculateClient.CallMethod(url, "multiply", new Object[]{2.0,3.0});
        String svrDivideResult = calculateClient.CallMethod(url, "divide", new Object[]{8.0,5.0});
        String svrPowerResult = calculateClient.CallMethod(url, "power", new Object[]{5.0});
        String svrSqrtResult = calculateClient.CallMethod(url, "sqrt", new Object[]{9.0});

        System.out.println("5.0 - 2.0 is " + svrMinusResult);
        System.out.println("2.0 * 3.0 is " + svrMultiplyResult);
        System.out.println("8.0 - 5.0 is " + svrDivideResult);
        System.out.println("5.0^2 is " + svrPowerResult);
        System.out.println("9.0^(1/2) is " + svrSqrtResult);
    }

    //實現WebService上釋出的服務呼叫
    public String CallMethod(String url, String method, Object[] args) {
        String result = null;

        if(StringUtils.isEmpty(url)) {
            return "url地址為空";
        }
        if(StringUtils.isEmpty(method)) {
            return "method地址為空";
        }

        Call rpcCall = null;

        try {
            //例項websevice呼叫例項
            Service webService = new Service();
            rpcCall = (Call) webService.createCall();
            rpcCall.setTargetEndpointAddress(new java.net.URL(url));
            rpcCall.setOperationName(method);

            //執行webservice方法

            double rslt = (double) rpcCall.invoke(args);
            result = String.valueOf(rslt);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;

    }

}

7)執行客戶端程式檢視結果
在這裡插入圖片描述
    可能會遇到的問題:
    1.在啟動Tomcat後,執行客戶端程式碼遇到錯誤:“org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.”
    解決辦法:找到web->WEB-INF下的server-config.wsdd檔案定位到下面的內容做修改:
    去掉紅框部分
在這裡插入圖片描述
    2.地洞Tomcat後,在瀏覽器輸入http://http://localhost:8080/services結果為404
    解決辦法:在WEB-INF下新建web.xml檔案並複製以下內容到web.xml(若有這個檔案可直接修改為以下內容)

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

    <display-name>Apache-Axis</display-name>
    <servlet>
        <display-name>Apache-Axis Servlet</display-name>
        <servlet-name>AxisServlet</servlet-name>
        <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
    </servlet>
    <servlet>
        <display-name>Axis Admin Servlet</display-name>
        <servlet-name>AdminServlet</servlet-name>
        <servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
        <load-on-startup>100</load-on-startup>
    </servlet>
    <servlet>
        <display-name>SOAPMonitorService</display-name>
        <servlet-name>SOAPMonitorService</servlet-name>
        <servlet-class>org.apache.axis.monitor.SOAPMonitorService</servlet-class>
        <init-param>
            <param-name>SOAPMonitorPort</param-name>
            <param-value>5101</param-value>
        </init-param>
        <load-on-startup>100</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/servlet/AxisServlet</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>*.jws</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>SOAPMonitorService</servlet-name>
        <url-pattern>/SOAPMonitor</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>AdminServlet</servlet-name>
        <url-pattern>/servlet/AdminServlet</url-pattern>
    </servlet-mapping>
    <mime-mapping>
        <extension>wsdl</extension>
        <mime-type>text/xml</mime-type>
    </mime-mapping>

</web-app>