編輯推薦
Spring MVC是一個麵嚮Web應用的輕量級框架。作為Spring框架的一部分,它天然擴展瞭Spring並為Web相關問題提供瞭一緻的解決方案。
通過設計Maven模塊,你將會實現一個企業級、無狀態的REST應用。本書的獨特之處在於從Spring生態圈中收集瞭大量的實用開發技術。你將會通過超媒體與HATEOAS來實現客戶與産品之間的無狀態會話,並掌握如何配置基於WebSocket的消息服務。最後,你將會學到如何創建並組織不同層次的自動化測試。
■ 使用Maven構建項目,並創建自測試、領域特定、可部署的Web歸檔。
■ 使用AngularJS與Bootstrap為響應式與強大的前端生成模闆。
■ 構建高性能、無狀態的RESTful與超媒體應用來支持多客戶體驗。
■ 使用BASIC認證模式與OAuth2通過REST進行認證。
■ 使用Swagger與Swagger UI來文檔化並發布REST API。
■ 實現Spring Web應用的可伸縮。
■ 通過WebSocket與STOMP消息進行通信。
內容簡介
《Spring MVC實戰》由淺入深地介紹瞭當今流行的Java Web框架Spring MVC的方方麵麵,從基礎的環境搭建到微服務設計與架構,再到持久化、REST API構建、認證與測試……涵蓋瞭Spring MVC諸多重要且常用的特性。值得一提的是,《Spring MVC實戰》針對Spring MVC的每一項特性都提供瞭完整可運行的示例代碼,可以幫助讀者更好地掌握這項技術。
無論是Spring MVC的初學者,還是擁有一定經驗的開發人員,都能夠從《Spring MVC實戰》中獲得啓發,更好地理解Spring MVC這一Web開發“利器”。
作者簡介
Alex Bretet,是一位知名的Java 與Spring 集成工程師,目前就職於Thunderhead,這是一傢全球知名的SaaS 提供商。他擁有能源、保險、財務與互聯網等多個領域的豐富開發經曆。受到互聯網通信能力與諸多初創公司的感染,他深信開發所能帶來的價值(誌趣相同的一幫人能在很短的時間內實現令人難以置信的目標)。他還是開源,特彆是Spring 的擁護者,其實用主義持續不斷地“瓦解”著現有的做法,並提供瞭頗具價值的替代方法。可以通過alex.bretet@gmail.com 與作者取得聯係,或者在Twitter 上關注@abretet。
目錄
1 企業級Spring應用的搭建.1
引言 1
安裝Eclipse JEE開發者版本與Java SE 82
為Eclipse配置Java 8、Maven 3和Tomcat 8 5
定義Maven的項目結構 12
安裝Spring、Spring MVC和Web結構24
2 使用Spring MVC設計微服務架構35
引言35
使用簡單URL映射配置控製器 36
使用ViewResolver配置迴退控製器 49
使用Bootstrap創建並自定義響應式單頁麵Web設計.53
使用JSTL在視圖中顯示模型 72
定義通用WebContentInterceptor82
使用AngularJS設計客戶端MVC模式88
3 Java持久化與實體100
引言 100
在Spring中配置Java持久化API 101
定義有用的EJB3實體和關係105
使用JPA與Spring Data JPA 115
4 為無狀態架構構建REST API122
引言 122
綁定請求與編排響應123
配置內容協商(JSON與XML等) 133
添加分頁、過濾器與排序功能 138
全局處理異常149
使用Swagger生成文檔與公開API 156
5 使用Spring MVC進行認證.163
引言 163
配置Apache HTTP服務器來代理Tomcat服務器 163
修改用戶和角色以適應Spring Security 172
基於BASIC的認證方式.183
第三方OAuth2認證193
在REST環境中保存認證信息 211
服務與控製器授權 220
6 實現HATEOAS.235
引言 235
將DTO改造成Spring HATEOAS資源 236
為超媒體驅動的API創建鏈接 244
JPA實體的暴露策略 252
通過OAuth從第三方API獲取數據259
7 開發CRUD操作與校驗266
引言 266
為所有HTTP方法擴展REST處理程序.267
使用Bean Validation校驗資源 278
REST消息與內容的國際化.292
使用HTML5和AngularJS校驗客戶端錶單 302
8 通過WebSocket與STOMP進行通信.308
引言 308
通過基於SockJS的STOMP使社交事件流媒體化309
使用RabbitMQ作為多協議消息代理 322
將任務放入RabbitMQ並通過AMQP消費任務 328
通過Spring Session和Redis保證消息安全334
9 測試與故障排除351
引言 351
通過Flyway實現數據庫遷移自動化352
使用Mockito和Maven Surefire進行單元測試 357
使用Cargo、Rest-assured和Maven Failsafe進行集成測試 364
在集成測試中注入Spring Bean 373
使用Log4j2記錄日誌的現代應用 377
前言/序言
歡迎閱讀這本獨一無二的《Spring MVC實戰》,希望你已經為本書的探索之旅做好瞭準備,本書會帶你暢遊現代 Spring Web開發實踐。本書作者已經創建瞭 cloudstreetmarket.com網站,這是一個帶有社交功能的股票交易平颱,本書將會帶領你探索網站開發過程的每一步。
1 企業級 Spring應用的搭建
本章介紹瞭業界的一套標準實踐,從配置 Eclipse IDE以對 Java 8、Tomcat 8、GIT與 Maven提供更優化的支持,到理解 Maven作為一個構建自動化工具以及作為一個依賴管理工具的認識,閱讀本章後你將會瞭解如何在一個堅實的基礎上部署 Spring框架。
無論一個項目旨在成為一個能夠獲得豐厚利潤的産品,抑或僅僅是一個練習,都是從相同的企業級模式開始的。
本章並不僅僅是開發 Cloud Street Market應用的第一個階段,還為麵嚮企業級 Spring應用的開發者提供瞭大量的標準化實踐。
2 使用 Spring MVC設計微服務架構
本章內容有些多,介紹瞭 Spring MVC的核心原則,比如請求流與 DispatcherServlet的中心角色,還介紹瞭如何通過與控製器相關的注解來配置 Spring MVC控製器與控製器方法處理器。
在微服務架構的搭建過程中,我們在各個模塊與 Web項目中安裝瞭 Spring與 Spring MVC,用於構建易於部署且可伸縮的功能性單元。從這個視角來看,我們通過一個 Web模塊來構建應用,該模塊負責提供一個 Twitter Bootstrap模闆,同時與另一個專門用作 REST Web Services的 Web模塊搭配使用。
本章將介紹如何通過 JSTL將模型從控製器傳遞給 JSP視圖,以及如何通過 AngularJS來設計 JavaScript MVC模式。
3 Java持久化與實體
本章介紹瞭持久化相關的內容。在這個階段,瞭解如何在 Spring生態圈以及 Spring MVC應用中處理持久化數據很有必要。該章將介紹如何在 Spring中通過 dataSource與 entityManagerFactory來配置 JPA持久化提供者( Hibernate)。你將學習如何從 EJB3實體來構建好處極多的 JPA對象關係映射,接下來會學習如何通過 Spring Data JPA來查詢倉庫。
4 為無狀態架構構建 REST API
本章揭示瞭如何將 Spring MVC作為 REST Web Services引擎。我們將會看到框架對此所提供的令人驚嘆的支持,隻需為抽象的與 Web相關的邏輯的方法處理器提供幾個注解即可,這樣我們就可以將主要精力放在業務上瞭。這個原則也用在瞭請求綁定(參數、 URL路徑與頭信息綁定等)與響應編排注解方麵,同時在 Spring Data的集成支持上也用到瞭。
本章還介紹瞭如何創建作為 Spring MVC一部分的異常處理器來將預定義的異常類型轉換為通用的錯誤響應。你將學到如何配置內容協商(這是 REST APIs的重要內容),最後還將學習如何通過 Swagger與 Swagger UI來公開並文檔化 REST端點信息。
5 使用 Spring MVC進行認證
本章介紹瞭如何在控製器與服務層對 HTTP BASIC與 OAuth2等標準協議配置認證。你將學習與 Spring Security相關的幾個概念與實踐,例如過濾器鏈、 命名空間、認證管理器,以及角色與用戶的管理等。我們的 OAuth2流是個客戶端實現。我們在用戶首次使用第三方提供者 Yahoo! 時在應用中對其進行認證。這些 Yahoo! 的認證與連接信息稍後會被用於從 Yahoo! Finance中拉取最新的財經數據。藉助於 Spring Social庫,我們可以在後颱對 OAuth2實現完全的抽象化。
6 實現 HATEOAS
本章介紹瞭如何將 RESTful Spring MVC API更進一步。超媒體驅動的應用為每個單獨的請求資源都提供瞭鏈接,這些鏈接反映瞭相關資源的 URL。它們嚮客戶端(無論是何種類型的客戶端)提供瞭實時的導航選擇—精確的文檔,同時也是實際的實現。該章將會介紹如何通過 JPA實體關聯或控製器層來構建這種鏈接。
7 開發 CRUD操作與校驗
本章介紹更加高級的 Spring MVC概念,通過認識支持交互式 HTTP方法( PUT、POST 與 DELETE)的工具與技術,我們將學習如何使用 HTTP1/1規範( RFC 7231語義與內容)來返迴恰當的響應狀態碼與頭信息。
本章通過 Spring Validator與 ValidationUtils輔助類的搭配使用來提供與驗證相關的 JSR-303和 JSR-349規範的兼容實現。該章的最後一節將會介紹消息與內容的國際化( I18N)。我們還通過 AngularJS提供瞭一個客戶端實現,使用瞭已發布的國際化 Web Services。
8 通過 WebSocket與 STOMP進行通信
本章將會聚焦於“冉冉升起”的 WebSocket技術,並為我們的應用構建麵嚮消息的中間件。該章提供瞭一個大傢很少會見到的示例,通過 Spring實現瞭關於 WebSockets的大部分內容,從默認的嵌入式 WebSocket消息代理的使用,到特性完備的外部代理(藉助於 STOMP與 AMQP協議)。我們將會瞭解如何嚮多個客戶端廣播消息,以及如何通過優秀的可伸縮特性推遲耗時任務的執行。
通過本章你還將學到如何動態創建私有隊列,以及如何獲取認證客戶端並通過這些私有隊列與其收發消息。
為瞭實現 WebSocket認證與消息認證,我們將 API置為有狀態的。對於有狀態來說,我們要知道的是 API將會使用 HTTP會話在多個請求間保持用戶的認證狀態。藉助於 Spring Session與高度集群化的 Redis服務器的支持,會話將可以在多個 Web應用間共享。
9 測試與故障排除
本章介紹瞭一套用於維護、調試與改進應用狀態的工具與一般做法。作為本書的最後一部分內容,我們將會學習如何通過 Flyway Maven Plugin將數據庫模式從一個應用版本升級為另一個,並將其作為 Maven構建的一部分。我們還會學習如何編寫自動化單元測試(藉助於 Maven Sure.re與 Mockito)與集成測試(使用一套庫,例如 Cargo、Rest-assured與 Maven Failsafe)。
該章的最後一節介紹瞭將 Log4j2作為全局日誌框架的做法,無論什麼環境,我們都可以通過這一日誌解決方案來高效排錯。
書中多個章節都列齣瞭係統需要具備的硬件與軟件條件。而且,學習本書經常需要訪問互聯網資源,有不少擴展內容都給齣瞭鏈接,或者需要下載必備軟件。此外更加重要的是,本書使用 Git版本係統來管理每章的代碼基,本地的 Git倉庫需要對應於項目的遠程倉庫(位於 GitHub上),要能夠訪問這個遠程倉庫。
本書的示例支持三種操作係統: MS Windows、Linux與 Mac OS X。對於硬件平颱,推薦使用主流、高性能的工作站,最低 2 GB內存, 500 MB以上空閑硬盤空間。
在編寫本書時,作者的一個目標就是一方麵盡量保持內容的可讀性,另一方麵則盡量多地嚮讀者介紹現代 Web開發的實踐。
我們相信,對 Spring MVC感興趣的大多數讀者的主要目的在於尋求一個入門套件和工具箱,來開發現代、基於 Spring的 Web應用。我們還相信,大多數讀者都傾嚮於通過實踐而非理論來強化對概念的理解。當下,我們都知道人們具有不同的學習習慣與方式。
鑒於此,本書的各個章節都是逐步推進的,從直觀的第 1章到更具挑戰性的第 8章。相比後麵的章節來說,前幾章更適閤大多數 Java開發者。
話雖如此,本書卻幾乎包含瞭你所要的一切!本書配套的示例應用已經處於運行狀態,等待著你的探索,理解其工作方式。
一般來說,我們假定你是一名具有 Web開發經驗的 Java開發者。此外,我們期望你對學習 Spring Web技術擁有濃厚的興趣。
Spring MVC實戰 下載 mobi epub pdf txt 電子書