A. SpringBoot|| Spring Cloud 整合cxf開發webService介面服務端-流程步驟
Apache CXF 是一個開源的 Service 框架,簡化用戶的 service 開發,基於CXF開發的應用可提供 SOAP 、 XML/HTTP 、 RESTFUL HTTP 或 CORBA 等服務。 CXF 底層頁可以使用不同的傳輸協議,包括 HTTP 、 JMS 或 JBI 等。
自定義註解標注要發布的服務類,發布出去
在介面上添加 @WebService 註解
通過瀏覽器訪問wsdl,wsdl路徑即為發布的路徑加上?wsdl
http://127.0.0.1:[埠號]/cxf/test?wsdl
可以看到介面就成功了。
到此服務端開發結束!
如果是soapui工具,發送的參數包括xml的:將xml寫在 <![CDATA[ 【xml】]]> 裡面
B. spring Boot和CXF構建WebService
說起web service最近幾年restful大行其道,大有取代傳統soap web service的趨勢,但是一些特有或相對老舊的系統依然使用了傳統的soap web service,例如銀行、航空公司的機票查詢介面等。
目前就遇到了這種情況,需要在系統中查詢第三方提供的soap web service介面,也就是說要將它整合進現有的系統當中。
Spring整合CXF本來十分簡單,但是因為使用了 Spring Boot ,不想用以前xml一堆配置的方式,那麼能否按照Spring Boot的風格優雅的進行整合呢?
答案當然是肯定的,但是遍查網上幾乎沒有這方面的資料,折騰過後覺得還是有必要記錄一下,雖然它顯得非常的簡單。
這里主要添加的是cxf的包依賴
這里我創建了一個hello word的測試方法
在業務實現中我們需要如下配置:
參數說明:
targetNamespace 為這是我的介面類所在路徑;
endpointInterface 這是我的業務類所在路徑;
業務層我們已經創建完成了,但是我們應該如何讓webService運行起來呢?
那麼到這里呢,我們的所有的步驟基本完成了,啟動spring boot 然後再瀏覽器中輸入url: http://localhost:8080/webService/user?wsdl
可以看到有相關的wsdl描述信息輸出了,說明服務已經發布了。
那麼這里我又要增加註釋了,請大家注意,我在最初查詢資料,配置demo的時候,啟動以後,發布時候總是報404,網上有很多關於什麼埠沖突等說法,我試過後,根本不是那一回事,然後我無意中嘗試了一下,在url地址處加入工程名,結果,問題解決了。
因此請大家注意:在測試發布服務的時候,你在瀏覽器中輸入的url地址應該是: http://localhost:8080/ 你的工程名/user?wsdl
註:如果大家在搭建過程中遇到了注冊CXFServlet的時候,一直報錯,則可檢查是否添加了 autoconfigure 的配置
啟動服務之後,在瀏覽器上輸入 http://localhost:8080/webService/user?wsdl 如果出現如下界面,則代表發布成功了!
服務端我們已經寫好了,那麼客戶端如何弄呢?其實我們可以藉助Idea自己生成WebServiceClient,步驟如下:
打開新建一個項目,選擇WebServiceClient
輸入webService服務端的地址
點擊Ok即可生成WebService的客戶端
通過如下方法即可調用方法,是不是很簡單!
本文使用的是Apache CXF集成,因為spring boot存在的目的就是一個微服務框架,結果又搞個soap框架進去,顯得特別不倫不類。正是因為有這么多老項目的重構才會有這么不倫不類的集成。綜上,我就選了spring家族的spring web service能夠很好的跟spring boot進行集成。
那麼我會在下面的一篇文章中為大家說明如何使用spring web service!
碼雲: https://gitee.com/hrabbit/spring-boot-node
個人博客: www.hrabbit.xin
C. springboot 單元測試(如何使用基於web的單元測試)
spring的測試環境是我們在開發過程中必須要掌握的,測試 有的時候需要測試 cotroller ,有的時候需要測試 service 的內容,和大家分享一下如何在工作中進行測試的,立志工具人。 一起干飯!
本章主要內容
測試是軟體開發的重要組成部分,一般情況下,測試的時候,我們只需要模擬請求數據,將數據填充至測試方法中,然後啟動spring容器,即可。
類中的內容並不多:這個類只有一個空的測試方法。即便是空的,系統還是會執行必要的檢查,確保spring應用上下文能夠成功載入。
對於控制器的測試,我們平常並不是很經常用到。它與上面的測試有所不同,沒有使用@SpringBootTest標記,而是添加了@WebMvcTest註解。這是Spring boot所提供的特殊測試註解,他會讓這個測試在Spring MVC 應用上下文中執行。更具體來講,它會將HomeControlelr 注冊到SpringMVC中,這樣的話,我們就可以向他發送請求了。
不要以為每天把功能完成了就行了,這種思想是要不得的,互勉~!
若文章對您有用,請點贊支持哦。
D. 第二章:SpringBoot與JSP間不可描述的秘密
springboot 內部對jsp的支持並不是特別理想,而 springboot 推薦的視圖是 Thymeleaf ,對於 java 開發人員來說還是大多數人員喜歡使用jsp,接下來我們來講解下 springboot 是如何支持jsp的。
整合springboot web項目支持jsp作為視圖輸出。
恆宇少年在博客整理出來了SpringBoot、ApiBoot、SpringCloud的文章匯總【 SpringBoot基礎教程專題 】,【 SpringCloud基礎教程專題 】,【 ApiBoot組件使用專題 】
我們使用IntelliJ IDEA 工具來構建項目,首先我們需要創建一個springboot項目,如下圖1所示.
點擊Next後輸入一些項目的基本參數(包名,工程名,打包形式,maven形式構建等),如下圖2所示:
點擊Next後選擇我們預先加入到工程的springboot內置的jar包組件,我們這里選擇一個web組件。如下圖3所示:
點擊 Next 輸入項目名稱後店家 Finish 既可以完成了項目的構建。新構建的項目目錄結構如下圖4所示:
可以看到上圖中比我們 lessonOne 項目中多出來了一個類文件, ServletInitlalizer ,打開該類我們不難發現它繼承了 SpringBootServletInitializer 這個父類,而 SpringBootServletInitializer 這個類是 springboot 提供的 web 程序初始化的入口,當我們使用外部容器(後期文章講解使用外部tomcat如何運行項目)運行項目時會自動載入並且裝配。
實現了 SpringBootServletInitializer 的子類需要重寫一個configure方法,方法內自動根據 LessontwoApplication .class的類型創建一個 SpringApplicationBuilder 交付給 springboot 框架來完成初始化運行配置。
我們打開pom.xml(maven配置文件)可以看到我們之前構建項目時已經添加了web模塊,而springboot給我們自動添加了 spring-boot-starter-tomcat 配置引入。springboot內部集成了tomcat組件,這里我們就不需要重復引入tomcat組件。
我們先來添加jsp的maven支持,如下圖4所示:
我們還需要引入jsp對servlet容器的支持,如下圖5所示:
除了上面的jsp,servlet支持以外,如果你還需要在jsp頁面使用jstl標簽來處理界面邏輯,那麼需要引入jstl maven,如下圖6所示:
上面配置就是我們本章需要的全部配置,那麼我們先來嘗試運行下項目是否已經可以正常運行。這里項目運行也可以使用IntelliJ IDEA工具提供的組件來完成,如下圖7所示,:
(注意:如果你已經開啟了另外一個spring boot項目請先關閉,因為springboot內置的埠號都是8080這樣會引起沖突)
點擊綠色三角號即可開始運行項目,我們先來嘗試下點擊後看看控制台輸入的日誌信息。可以看到項目已經正常運行了,右上角的綠色三角號也變成了重啟的按鈕,如下圖8所示:
項目運行如圖9所示:
可以看到項目已經正常運行,但是我們現在還沒有配置,創建JSP文件,我們接下來開始配置,創建JSP。
如果是使用過eclipse工具的人肯定知道jsp文件之前是在/webapp/WEB-INF/jsp目錄下,那麼我們也沿用eclipse的風格。
1. 在main目錄下創建webapp文件夾
2. 在webapp下創建jsp文件夾如下圖10所示:
3. 修改application.properties文件讓springmvc支持視圖的跳轉目錄指向為/main/webapp/jsp,配置如下圖11所示:
我們在webapps/jsp目錄下創建一個index.jsp用於測試我們的配置是否已經支持了jsp,新建jsp文件如下圖12所示:
上面工作我們已經完成了jsp的所有配置,那麼接下來我們需要配置springmvc的控制器,我們新建indexController如下圖13所示:
可以看到上圖我們在IndexController配置文件內添加了index()方法配置了@RequestMapping註解來描述index()方法是一個可以被springmvc管理的請求視圖。我們的index()方法返回值這里是"index"。
為什麼我們返回"index",還記得上述步驟中配置的application.properties文件的springmvc請求前綴以及後綴,那麼當我們訪問/index時springmvc就會去找/webapp/WEB-INF/jsp/index.jsp文件。
重啟項目我們嘗試訪問 127.0.0.1:8080/index ,可以看到如下圖14的效果,證明已經完成了springboot與jsp的整合:
上述便是我們本章的全部內容,本章主要是講解了springboot集成jsp作為渲染視圖,結合springmvc來轉發請求。
本章內容已經上傳到碼雲:
SpringBoot配套源碼地址: https://gitee.com/hengboy/spring-boot-chapter
SpringCloud配套源碼地址: https://gitee.com/hengboy/spring-cloud-chapter
SpringBoot相關系列文章請訪問: 目錄:SpringBoot學習目錄
QueryDSL相關系列文章請訪問: QueryDSL通用查詢框架學習目錄
SpringDataJPA相關系列文章請訪問: 目錄:SpringDataJPA學習目錄
SpringBoot相關文章請訪問: 目錄:SpringBoot學習目錄 ,感謝閱讀!
知識星球 - 恆宇少年
E. Spring boot 中 WebMvcConfigurationSupport 詳解
新寫了一個簡單項目,裡面需要提供一個介面給第三方訪問,第三方要求的介面響應時間為3s,因此需要對介面進行時間的記錄 以下是具體的使用。
實現HandlerInterceptor這個介面
以上兩步完成,即完成攔截器的注冊。該攔截器會對 /sell_record/** 請求路徑進行攔截。
controller測試類
一個簡單的攔截器就寫完了~
其中用的比較多的是一下三個介面:
靜態資源處理
非常重要的提示: Springboot 中只能有一個 WebMvcConfigurationSupport 配置類是真正起作用的,對於這個問題,其實可以通過 implements WebMvcConfigurer 來解決,多個不同的類實現這個介面後的配置都可以正常運行。
具體可參考 [ Spring Boot中只能有一個WebMvcConfigurationSupport配置類
F. SpringBoot---Web Socket(廣播式、點對點)
WebSocket為瀏覽器和伺服器提供了全雙工非同步通信的功能,即瀏覽器可以向服務段發送消息,服務端也可以向瀏覽器發送消息,WebSocket需要瀏覽器的支持,如IE10+、Chrome13+ 。。。等,同時Spring Boot為WebSocket提供了starter pom 。
廣播式即服務端有消息時,會將消息發送給所有連接了當前endpoint的瀏覽器。
到這里,簡單的WebSocket就演示完成了,如果有不懂的地方可以看源碼
Demo源碼
G. springboot2.1.3整合websocket和websocket-security支持跨域連接
springboot整合websocket和websocket-security支持跨域連接
項目地址: https://gitee.com/xuelingkang/spring-boot-demo
完整配置參考com.example.websocket包
所以繼承了StompSubProtocolHandler,WebMvcStompEndpointRegistry,這三個類,添加websocket自定義攔截器介面,可以在攔截器中自定義websocket授權決策檢查
配置類可以重寫這個方法,默認該方法返回false,看方法的名字是關閉同源策略,但是只重寫這個方法不能解決跨域的問題,還需要在registerStompEndpoints方法中設置允許的域名,"*"代表所有
如果有誤導人的地方,歡迎大神批評指正!
H. 如何在docker中部署springboot的web應用
第一步:搭建springboot的web應用,可在CMD命令行中通過mvn install命令將應用打成jar包:如demo-0.0.1-SNAPSHOT.jar
第二步:將jar包到centos文件系統中,指定目錄示例為:/usr/local/demo-0.0.1-SNAPSHOT.jar
第三步:構建docker鏡像:此處以docker build方式構建
I. intellij idea 2017 gradle構建spring-boot web項目
第一步 ,選擇Spring Initializr 點擊 next
第二步 , Type: 選擇Gradle Project
第三步 , 這里主要選擇Web ,
第四步 , 項目名,目錄
第五步 , 自動創建空的根目錄文件夾,如果不選擇,創建完的項目會沒有java文件夾,所以勾選,讓它自動創建吧,next
第六步 , 創建 webapp 文件夾 ,這是用來放web相關文件。 也可使用默認文件夾
第七步,點擊 + 添加web模塊
第八步 , 把兩個路徑改為我們創建的文件夾, 也可以使用默認文件夾。第一個路徑是這web.xml文件的位置
第二個路徑是資源路徑
第九步,測試程序
RUN
J. SpringBoot+CXF 實現簡單的webservice,並支持Basic驗證
CXF內置了很多攔截器,大部分默認添加到攔截器鏈中,有些攔截器也可以手動添加,如CXF的日誌攔截器。如果需要自定義攔截器,只要繼承AbstractPhaseInterceptor或者AbstractPhaseInterceptor的子類(如AbstractSoapInterceptor)
如果是傳統的spring+cxf 項目,攔截器的寫法是一樣的,只是發布和配置的方法在cxf的配置文件的xml中進行
WSDL 地址: http://localhost:8080/SpringBootDemo_eclipse/soap/ihelloService?wsdl
CXF 自動編譯解析的客戶端
客戶端basic 認證調用