SSM(四)WebService入門詳解

前言

webservice這個不知道大家首次接觸的時候是怎么理解的,反正我記得我當(dāng)時第一次接觸這個東西的時候以為又是一個XX框架,覺得還挺高大上。然而這一切在之后我使用過后才發(fā)現(xiàn)這些全都是YY。
那么webservice到底是什么呢,根據(jù)我自己的理解:簡單來說就像是一個公開的接口,其他系統(tǒng)不管你是用什么語言來編寫的都可以調(diào)用這個接口,并可以返回相應(yīng)的數(shù)據(jù)給你。就像是現(xiàn)在很多的天氣應(yīng)用,他們肯定不會自己去搞一個氣象局之類的部門去監(jiān)測天氣,大多都是直接調(diào)用一個天氣接口,然后返回天氣數(shù)據(jù),相關(guān)應(yīng)用就可以將這些信息展示給用戶了。
通常來說發(fā)布這類接口的應(yīng)用都是用一兩種語言來編寫即可,但是調(diào)用這個接口應(yīng)用可能會是各種語言來編寫的,為了滿足這樣的需求webservice出現(xiàn)了。

簡單來說webservice就是為了滿足以上需求而定義出來的規(guī)范。


Spring整合CXF

在Java中實現(xiàn)webservice有多種方法,java本身在jdk1.7之后也對webservice有了默認的實現(xiàn),但是在我們實際開發(fā)中一般還是會使用框架來,比如這里所提到的CXF就有著廣泛的應(yīng)用。
廢話我就不多說了,直接講Spring整合CXF,畢竟現(xiàn)在的JavaEE開發(fā)是離不開Spring了。
該項目還是基于之前的SSM進行開發(fā)的。

加入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-core -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-core</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>

web.xml配置

接著我們需要配置一個CXF的servlet:

    <!--定義一個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>

之后只要我們訪問webservice/*這個地址就會進入CXF的servlet中。

整合Spring配置

接下來是最重要的一部,用Spring整合CXF:
在這之前我有新建一個CXF的包,如下圖:


目錄結(jié)構(gòu)

這里有兩個主要類

  • HelloWorld接口。
  • 實現(xiàn)HelloWorld接口的HelloWorldImpl類。
    代碼如下:
    HelloWorld.java
package com.crossoverJie.cxf;

import javax.jws.WebService;

@WebService
public interface HelloWorld {
    public String say(String str);
}

其中就只定義了一個簡單的say()方法。
HelloWorldImpl.java

package com.crossoverJie.cxf.impl;
import com.crossoverJie.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;
    }
}

這里就是對say()方法的簡單實現(xiàn)。
接下來就是整合Spring了,由于需要使用到CXF的標簽,所以我們需要添加額外的命名路徑如下:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:jee="http://www.springframework.org/schema/jee"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:jaxws="http://cxf.apache.org/jaxws"
       xsi:schemaLocation="
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
        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
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">


    <import resource="classpath:META-INF/cxf/cxf.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
    <!-- 自動掃描webService -->
    <context:component-scan base-package="com.crossoverJie.cxf" />
    <!-- 定義webservice的發(fā)布接口  -->
    <jaxws:endpoint
            implementor="#helloWorld"
            address="/HelloWorld"
</beans>

更加具體的配置可以查看官方給出的文檔:http://cxf.apache.org/docs/how-do-i-develop-a-service.html
#helloWorld指的是我們在HelloWorldImpl類中所自定義的名字,/HelloWorld則是我們需要訪問的地址。
之后我們運行項目輸入該地址:http://127.0.0.1:8080/ssm/webservice/HelloWorld?wsdl如果出現(xiàn)如下界面:

xml
則說明我們的webservice發(fā)布成功了。
接下來只需要通過客戶端調(diào)用這個接口即可獲得返回結(jié)果了。


總結(jié)

以上就是一個簡單的webservice入門實例,更多的關(guān)于CXF攔截器,客戶端調(diào)用就沒有做過多介紹,后續(xù)有時間的話再接著更新。

項目地址:https://github.com/crossoverJie/SSM.git
個人博客地址:http://crossoverjie.top。
GitHub地址:https://github.com/crossoverJie。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,268評論 6 342
  • WebService學(xué)習(xí)筆記 友情提示,本文檔的圖床使用極簡圖床進行圖片存儲,默認存儲到七牛云空間 本學(xué)習(xí)貼是根據(jù)...
    Mr_魏閱讀 1,174評論 0 5
  • 你安靜的睡在我身旁,睡顏甜美又踏實,我替你掖好被子,在想我們的寶寶會長成什么樣子。 時間回到我初遇你的日子,就像藍...
    突圍者日記閱讀 403評論 0 4
  • 郎平為什么出國?郎平曾在《激情歲月——郎平自傳》中,道出了當(dāng)初她出走美國的原因以及在國外那段鮮為人知的艱難生活。 ...
    無塵書香閱讀 9,343評論 0 1

友情鏈接更多精彩內(nèi)容