Java:Web Service初入門

EricTao2發表於2019-07-05

Java:Web Service初入門

前言

Web Service技術在我第一次接觸,又沒有實際使用時完全不理解這是什麼。以為是一種類似Spring,Shiro的程式設計框架。後來漸漸理解,WS(即Web Service縮寫)是一種通用的介面規範,並按照該規範編寫介面對外提供服務。

一 啥是WS

這個問題在我沒有編寫WS程式碼時可是困擾了我很久,甚至第一次需要寫WS介面都不知道老大到底要我寫什麼。因為我習慣於去網上尋找資料自學並實踐某些知識點,而我在百度時查到的WS介紹基本都是這樣的。

百度百科:

Web service是一個平臺獨立的,低耦合的,自包含的、基於可程式設計的web的應用程式,可使用開放的XML(標準通用標記語言下的一個子集)標準來描述、釋出、發現、協調和配置這些應用程式,用於開發分散式的互操作的應用程式。

百度搜尋WS排名前列的部落格:

Web Service技術, 能使得執行在不同機器上的不同應用無須藉助附加的、專門的第三方軟體或硬體, 就可相互交換資料或整合。依據Web Service規範實施的應用之間, 無論它們所使用的語言、 平臺或內部協議是什麼, 都可以相互交換資料。

這種解釋對於不瞭解WS的人來看完全是一頭霧水,後來在實踐中漸漸明白了什麼是WS。自我總結如下:

Web Service就是一種跨程式語言跨作業系統平臺遠端呼叫技術。所謂跨程式語言和跨操作平臺,就是說服務端程式採用Java編寫,客戶端程式則可以採用其他程式語言編寫,反之亦然。跨作業系統平臺則是指服務端程式和客戶端程式可以在不同的作業系統上執行。 遠端呼叫,就是一臺計算機的應用可以呼叫其他計算機上的應用,也可以直接理解為介面。例如:支付寶,支付寶並沒有銀行卡等資料,它只是去呼叫銀行提供的介面來獲得資料。還有天氣預報等,也是氣象局把自己的系統服務以webservice服務的形式暴露出來,讓第三方網站和程式可以呼叫這些服務功能。

所以Web Servic就是一種跨語言跨平臺的介面技術。

二 Spring整合CXF

Web Service只是一套介面規範,實際運用中實現Web Service的方法有很多種,Java本身在jdk1.7之後也對webservice有了預設的實現(Oracle JAX-WS RI),但是在我們實際開發中一般還是會使用框架來,比如這裡所提到的CXF就有著廣泛的應用。
CXF單獨釋出就不說了,直接講Spring整合CXF,畢竟現在的JavaEE開發是離不開Spring了。

2.1 maven配置

加入maven依賴

<!--cxf-->
<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-frontend-jaxws -->
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-jaxws</artifactId>
    <version>3.1.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-transports-http -->
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http</artifactId>
    <version>3.1.6</version>
</dependency>

2.2 配置 web.xml

<!--定義一個cxf的servlet-->
<servlet>
    <servlet-name>CXFServlet</servlet-name>
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>CXFServlet</servlet-name>
    <url-pattern>/webservice/*</url-pattern>
</servlet-mapping>

2.3 寫一個WS介面及其實現

非常簡潔的介面和實現
介面:HelloWorld.java

package com.erictao.cxf;
import javax.jws.WebService;
@WebService
public interface HelloWorld {
    public String say(String str);
}

實現:HelloWorldImpl.java

package com.erictao.cxf.impl;
import com.erictao.cxf.HelloWorld;
import org.springframework.stereotype.Component;
import javax.jws.WebService;
@Component("helloWorld")
@WebService
public class HelloWorldImpl implements HelloWorld {
    public String say(String str) {
        return "Hello"+str;
    }
}

2.4 修改Spring配置檔案

在spring主配置檔案spring.xml中新增引入spring-cxf.xml

<!-- lang: xml -->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
 
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
 
 
http://www.springframework.org/schema/context
 
 
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
 
    <context:component-scan base-package="com.erictao"/>
    <!-- 省略其他配置內容 -->
    <import resource="spring-cxf.xml"/>
</beans>

並且建立配置檔案spring-cxf.xml

<!-- lang: xml -->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jaxws="http://cxf.apache.org/jaxws"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
 
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
 
 
http://cxf.apache.org/jaxws
 
 
http://cxf.apache.org/schemas/jaxws.xsd">
 
    <!-- 定義webservice的釋出介面  -->
    <jaxws:endpoint implementor="#helloWorld" address="/HelloWorld">
 
</beans>

更加具體的配置可以檢視官方給出的文件:http://cxf.apache.org/docs/how-do-i-develop-a-service.html。
#helloWorld指的是我們在HelloWorldImpl類中所自定義的名字,即@Component("helloWorld")定義的bean id,/HelloWorld則是我們定義的介面地址。

三 執行釋出WS

之後我們執行專案輸入該地址:http://127.0.0.1:8080/ssm/webservice/HelloWorld?wsdl如果出現如下介面:
Java:Web Service初入門
則說明我們的webservice釋出成功了。接下來只需要通過客戶端呼叫這個介面即可獲得返回結果了。客戶端的程式碼可以直接使用工具生成,可參考:https://blog.csdn.net/andyliulin/article/details/53680915。

總結
以上就是一個簡單的Web Service入門例項,更多的關於CXF攔截器,客戶端呼叫就沒有做過多介紹,後續有時間的話再接著更新,明白了Web Service服務端和客戶端怎麼構建,後續只需要當做普通介面編寫業務程式碼即可。

相關文章