Spring Cloud微服務架構(gòu)開發(fā)(第2版)第11章 微服務實戰(zhàn)-黑馬頭條_第1頁
Spring Cloud微服務架構(gòu)開發(fā)(第2版)第11章 微服務實戰(zhàn)-黑馬頭條_第2頁
Spring Cloud微服務架構(gòu)開發(fā)(第2版)第11章 微服務實戰(zhàn)-黑馬頭條_第3頁
Spring Cloud微服務架構(gòu)開發(fā)(第2版)第11章 微服務實戰(zhàn)-黑馬頭條_第4頁
Spring Cloud微服務架構(gòu)開發(fā)(第2版)第11章 微服務實戰(zhàn)-黑馬頭條_第5頁
已閱讀5頁,還剩141頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第11章微服務實戰(zhàn)-黑馬頭條《SpringCloud微服務架構(gòu)開發(fā)(第2版)》學習目標/Target了解項目概述,能說出黑馬頭條包含的主要功能熟悉項目架構(gòu)設計,能夠說出項目包含的模塊,以及各模塊的作用掌握項目開發(fā)準備工作,能夠正確導入提供的SQL文件和初始項目,完成項目開發(fā)的準備工作掌握自媒體端功能實現(xiàn),能夠?qū)崿F(xiàn)功能模塊自媒體人登錄、創(chuàng)建對象存儲服務、素材管理、發(fā)布文章、內(nèi)容列表掌握用戶端功能實現(xiàn),能夠?qū)崿F(xiàn)功能模塊用戶登錄、文章列表、文章詳情章節(jié)概述/Summary通過前面章節(jié)的學習,相信大家對SpringCloud常用組件有了一定的認識,為了讀者能夠更好地綜合運用SpringCloud進行微服務開發(fā),本章將前面章節(jié)的內(nèi)容進行整合,基于SpringBoot和SpringCloud框架的分布式微服務技術,構(gòu)建一個新聞資訊系統(tǒng)-黑馬頭條,讓讀者能更深入地理解如何使用SpringCloud構(gòu)建微服務和實現(xiàn)項目需求。目錄/Contents11.111.2項目概述項目架構(gòu)設計11.3項目開發(fā)準備工作11.4自媒體端功能實現(xiàn)11.5用戶端功能實現(xiàn)項目概述11.111.1

項目概述先定一個小目標!

先定一個小目標!了解項目概述,能說出黑馬頭條包含的主要功能11.1.1

項目功能介紹黑馬頭條核心功能11.1.2

項目功能預覽為了讓讀者對本章要講解的黑馬頭條有整體、直觀的認識,下面對黑馬頭條提供的功能進行預覽。1.自媒體人登錄11.1.2

項目功能預覽2.素材管理11.1.2

項目功能預覽3.發(fā)布文章11.1.2

項目功能預覽4.內(nèi)容列表11.1.2

項目功能預覽5.用戶登錄11.1.2

項目功能預覽6.文章列表11.1.2

項目功能預覽7.文章詳情項目架構(gòu)設計11.211.2

項目架構(gòu)設計先定一個小目標!

先定一個小目標!熟悉項目架構(gòu)設計,能夠說出項目包含的模塊,以及各模塊的作用11.2

項目架構(gòu)設計在項目開發(fā)之前,對項目的業(yè)務進行分析,并設計一個合理的架構(gòu)是至關重要的。本黑馬頭條采用了基于SpringCloud微服務的架構(gòu),根據(jù)業(yè)務功能將系統(tǒng)劃分為八個模塊,這些模塊組成了一套完備的微服務系統(tǒng)。在這八個模塊中,包括兩個網(wǎng)關模塊、三個業(yè)務微服務模塊和三個通用功能模塊。兩個網(wǎng)關模塊包含用戶網(wǎng)關和自媒體網(wǎng)關;三個業(yè)務微服務模塊包含用戶微服務、文章微服務、自媒體微服務。11.2

項目架構(gòu)設計11.2

項目架構(gòu)設計通用配置模塊中主要集中管理和共享通用的配置,例如通用常量、異常處理、常用工具類等。其他模塊引用通用配置模塊后,可以直接使用通用配置模塊中的內(nèi)容,避免重復配置,提高開發(fā)效率和系統(tǒng)的一致性。1.通用配置模塊數(shù)據(jù)模型模塊中主要存放通用的數(shù)據(jù)模型類,如實體類、DTO(數(shù)據(jù)傳輸對象)等,其他模塊使用數(shù)據(jù)模型類時可以引用該模塊,實現(xiàn)數(shù)據(jù)模型類的標準化和復用,避免不同微服務重復定義相同的數(shù)據(jù)結(jié)構(gòu),提高數(shù)據(jù)的一致性和可維護性。2.數(shù)據(jù)模型模塊11.2

項目架構(gòu)設計在文章微服務和自媒體微服務中都涉及到文件管理的相關功能,對此提供了一個可插拔的文件管理功能,封裝文件上傳、下載、刪除等基本的文件管理功能,其他模塊引入該模塊后,可以快速集成文件管理功能,避免不同微服務重復實現(xiàn)文件管理功能。3.文件管理模塊用戶端網(wǎng)關主要負責處理用戶端相關的路由和訪問控制。4.用戶端網(wǎng)關11.2

項目架構(gòu)設計自媒體網(wǎng)關主要負責處理自媒體相關的路由和訪問控制。5.自媒體網(wǎng)關用戶端微服務主要處理用戶端用戶登錄的業(yè)務邏輯,用戶端發(fā)起登錄或者游客方式瀏覽資訊的請求時,用戶網(wǎng)關將該請求轉(zhuǎn)發(fā)給用戶微服務處理。6.用戶端微服務11.2

項目架構(gòu)設計文章微服務主要處理與文章相關的業(yè)務邏輯,包括加載文章列表、保存文章、修改文章等功能。7.文章微服務自媒體微服務主要處理與自媒體相關的業(yè)務邏輯,包括自媒體人登錄、素材管理、發(fā)布文章、查詢文章列表等功能。8.自媒體微服務項目開發(fā)準備工作11.311.3

項目開發(fā)準備工作先定一個小目標!

先定一個小目標!掌握項目開發(fā)準備工作,能夠正確導入提供的SQL文件和初始項目,完成項目開發(fā)的準備工作11.3.1

系統(tǒng)開發(fā)及運行環(huán)境為了避免學習過程中出現(xiàn)不必要的錯誤,下面對黑馬頭條開發(fā)及運行所需的環(huán)境和相關軟件進行介紹,具體如下所示。操作系統(tǒng):Windows10Java開發(fā)包:JDK8項目管理工具:Maven3.6.3項目開發(fā)工具:IntelliJIDEA2022.2.2數(shù)據(jù)庫:MySQL8.0瀏覽器:GoogleChrome11.3.2

數(shù)據(jù)庫準備本項目涉及三個數(shù)據(jù)庫,分別是用戶端數(shù)據(jù)庫、文章數(shù)據(jù)庫和自媒體數(shù)據(jù)庫。為了方便讀者使用,本書的配套資源提供了相應的SQL文件。讀者可以使用這三個SQL文件創(chuàng)建相應的數(shù)據(jù)庫和數(shù)據(jù)表,并插入一些基本的初始化數(shù)據(jù)。數(shù)據(jù)庫數(shù)據(jù)表數(shù)據(jù)表說明leadnews_user,用戶端數(shù)據(jù)庫ap_user用戶端的用戶信息表leadnews_article,文章數(shù)據(jù)庫ap_article文章基本信息表ap_article_config文章配置表ap_article_content文章內(nèi)容表leadnews_wemedia,自媒體數(shù)據(jù)庫wm_channel自媒體的頻道信息表wm_material自媒體的素材信息表wm_news自媒體的文章表wm_news_material自媒體的文章素材關系表wm_user自媒體端的用戶信息表11.3.3

項目工程結(jié)構(gòu)為了便于后續(xù)功能模塊的開發(fā),本章提供了一個初始工程,初始工程中根據(jù)項目功能創(chuàng)建了對應的模塊,并且提供了項目的依賴信息,以及通用模塊中的代碼。在IDEA中導入初始工程,可以看到初始工程的主體結(jié)構(gòu)。11.3.3

項目工程結(jié)構(gòu)通用配置模塊,用于存放項目中的通用常量、異常處理、常用工具類等通用配置。(1)heima-leadnews-commonconstants包下存放的是常量相關的類。exception包下存放的是異常相關的類。utils包下存放的是常用的工具類。11.3.3

項目工程結(jié)構(gòu)文件管理模塊,用于存放文件上傳、下載、刪除等文件管理功能的相關類。(2)heima-leadnews-file-starterheima-leadnews-file-starter只是創(chuàng)建了對應的包,包中存放的接口和類會在后續(xù)的具體實現(xiàn)中進行創(chuàng)建。11.3.3

項目工程結(jié)構(gòu)網(wǎng)關模塊,用于統(tǒng)一管理系統(tǒng)中的用戶端網(wǎng)關和自媒體網(wǎng)關。(3)heima-leadnews-gatewayheima-leadnews-app-gateway為用戶端網(wǎng)關,為用戶端的前端提供網(wǎng)關入口,處理用戶端相關的訪問控制;heima-leadnews-wemedia-gateway為自媒體網(wǎng)關,為自媒體的前端提供網(wǎng)關入口,處理自媒體相關的訪問控制。11.3.3

項目工程結(jié)構(gòu)數(shù)據(jù)模型模塊,存放用戶端、文章,自媒體相關的實體類和DTO,以及通用的DTO等類。(4)heima-leadnews-modelarticle包下用于存放文章相關的實體類和DTO。common包下用于存放通用的DTO,主要包含請求和響應的數(shù)據(jù)傳輸類。user包下用于存放用戶端相關的實體類和DTO。wemedia包下用于存放自媒體相關的實體類和DTO。11.3.3

項目工程結(jié)構(gòu)微服務模塊,用于統(tǒng)一管理系統(tǒng)中的用戶端微服務、文章微服務、自媒體微服務。heima-leadnews-article為文章微服務,heima-leadnews-user為用戶端微服務,heima-leadnews-wemedia為自媒體微服務,導入的初始項目中只提供了這三個微服務的包結(jié)構(gòu)和項目啟動類,具體的功能實現(xiàn)會在后續(xù)進行詳細講解。(5)heima-leadnews-service自媒體端功能實現(xiàn)11.411.4.1

自媒體人登錄先定一個小目標!

先定一個小目標!掌握自媒體人登錄,能夠部署自媒體端前端項目,實現(xiàn)自媒體人登錄功能11.4.1

自媒體人登錄1.設置應用程序配置在heima-leadnews-wemedia子模塊的bootstrap.yml配置文件中設置應用程序配置,主要包括應用的端口、名稱、注冊中心和配置中心等信息,具體如文件11-1所示。文件11-1bootstrap.yml源代碼11.4.1

自媒體人登錄1.設置應用程序配置啟動Nacos并登錄Nacos控制臺后,在Nacos配置列表的public命名空間下添加DataID為leadnews-wemedia,Group為DEFAULT_GROUP,配置格式為YAML的配置,配置內(nèi)容如下所示。Nacos中添加配置的內(nèi)容源代碼11.4.1

自媒體人登錄2.編寫登錄功能代碼在heima-leadnews-wemedia子模塊的com.heima.wemedia.controller包下創(chuàng)建自媒體人登錄的控制器類LoginController,用于接收媒體人登錄的用戶名和密碼,傳遞給Service層進行登錄,具體如文件11-2所示。文件11-2LoginController.java源代碼11.4.1

自媒體人登錄2.編寫登錄功能代碼在heima-leadnews-wemedia子模塊的com.heima.wemedia.service包下創(chuàng)建自媒體人相關業(yè)務的接口WmUserService,具體如文件11-3所示。文件11-3WmUserService.java源代碼11.4.1

自媒體人登錄2.編寫登錄功能代碼在heima-leadnews-wemedia子模塊的com.heima.wemedia.service.impl包下創(chuàng)建WmUserService接口的實現(xiàn)類,具體如文件11-4所示。文件11-4WmUserServiceImpl.java源代碼11.4.1

自媒體人登錄2.編寫登錄功能代碼在heima-leadnews-wemedia子模塊的com.heima.wemedia.mapper包下創(chuàng)建WmUserMapper接口繼承BaseMapper接口,具體如文件11-5所示。文件11-5WmUserMapper.java源代碼11.4.1

自媒體人登錄3.實現(xiàn)自媒體網(wǎng)關服務在heima-leadnews-wemedia-gateway子模塊的bootstrap.yml文件中設置自媒體網(wǎng)關配置,具體如文件11-6所示。文件11-6bootstrap.yml源代碼11.4.1

自媒體人登錄3.實現(xiàn)自媒體網(wǎng)關服務啟動Nacos并登錄Nacos控制臺后,在Nacos配置列表的public命名空間下添加DataID為leadnews-wemedia-gateway,Group為DEFAULT_GROUP,配置格式為YAML的配置,配置內(nèi)容如下所示。配置內(nèi)容源代碼11.4.1

自媒體人登錄3.實現(xiàn)自媒體網(wǎng)關服務在heima-leadnews-wemedia-gateway子模塊的com.heima.wemedia.gateway.filter包下自定義用于鑒權的全局過濾器,具體如文件11-7所示。文件11-7AuthorizeFilter.java源代碼11.4.1

自媒體人登錄4.部署自媒體端前端項目黑馬頭條的自媒體端采用前后端分離架構(gòu),在配套資源中提供了一個名為wemedia-web.zip的壓縮文件,其中包含了完整的自媒體端前端項目。在實現(xiàn)用戶登錄之前,需要先部署自媒體端前端項目。Nginx是一款開源的高性能Web服務器和反向代理服務器,它能夠提供反向代理和靜態(tài)服務器功能,使其成為部署前端項目的理想選擇。通過Nginx的反向代理功能,可以輕松訪問后臺的網(wǎng)關資源;通過其靜態(tài)服務器功能,可以方便地訪問前端靜態(tài)頁面。下面,基于Nginx實現(xiàn)自媒體端前端項目的部署。11.4.1

自媒體人登錄4.部署自媒體端前端項目本書對應的配套資源中提供了Nginx的壓縮包,讀者也可以自行到Nginx官方自行下載。將Nginx的壓縮包解壓縮。11.4.1

自媒體人登錄4.部署自媒體端前端項目在Nginx的conf文件夾下新建一個名稱為leadnews.conf的文件夾,在leadnews.conf文件夾中新建名稱為heima-leadnews-wemedia.conf的配置文件,在該配置文件中添加與自媒體相關的代理及請求轉(zhuǎn)發(fā)的配置,具體如文件11-8所示。文件11-8heima-leadnews-wemedia.conf源代碼11.4.1

自媒體人登錄4.部署自媒體端前端項目打開conf文件夾下的nginx.conf文件,把里面注釋的內(nèi)容和靜態(tài)資源配置相關刪除,引入heima-leadnews-wemedia.conf文件,具體如文件11-9所示。文件11-9nginx.conf源代碼11.4.1

自媒體人登錄5.測試自媒體端登錄效果將wemedia-web.zip解壓到D:\workspace目錄下后,在命令行窗口中的跳轉(zhuǎn)到Nginx的路徑下后,執(zhí)行nginx命令啟動Nginx。11.4.1

自媒體人登錄5.測試自媒體端登錄效果依次啟動Nacos服務端、WeMediaApplication、WemediaGatewayAplication,啟動成功后在瀏覽器中訪問http://localhost:8801/,進入到黑馬頭條的自媒體人登錄頁面。11.4.1

自媒體人登錄5.測試自媒體端登錄效果輸入數(shù)據(jù)庫中存在的賬號和賬號對應的密碼后,單擊“登錄”按鈕,跳轉(zhuǎn)到自媒體端的后臺首頁。11.4.2

創(chuàng)建對象存儲服務先定一個小目標!

先定一個小目標!掌握創(chuàng)建對象存儲服務,能夠基于MinIO創(chuàng)建對象存儲服務11.4.2

創(chuàng)建對象存儲服務在黑馬頭條所發(fā)布的文章中可以插入圖片,這些插入的圖片需要先上傳。然而,如果將整個圖片對象存儲在MySQL數(shù)據(jù)庫或項目指定的磁盤中,可能會面臨存儲效率低下、影響數(shù)據(jù)庫性能等潛在問題。為了解決這些問題,可以考慮使用對象存儲服務,對象存儲服務是專門為存儲和管理大型二進制對象(如圖片、視頻、文檔等)而設計的存儲服務。常見的對象存儲服務的方式有公有云對象存儲、私有云對象存儲和開源的對象存儲軟件,其中開源的對象存儲軟件可以供用戶自行部署和管理,具有靈活性和可定制性,在此選擇使用這種方式完成素材管理。開源的對象存儲軟件中MinIO是當前主流的軟件之一,其服務端可以工作在Windows、Linux、OSX和FreeBSD上,擁有輕量、性能高、配置簡單等諸多特點,可以做為存儲圖片,視頻,文檔的解決方案,在此,黑馬頭條的對象存儲選擇基于MinIO實現(xiàn)。11.4.2

創(chuàng)建對象存儲服務MinIO提供了主流與操作系統(tǒng)對應的服務端可執(zhí)行文件,讀者可以根據(jù)部署MinIO的操作系統(tǒng),從MinIO的官方網(wǎng)站下載MinIO對應的可執(zhí)行文件。為了便于操作,本書使用Windows版本的MinIO件。下載完成后,在命令行窗口中切換到MinIO可執(zhí)行文件所在的位置,使用以下命令格式啟動MinIO服務端。1.下載和啟動MinIO服務端minioserver/path/to/data/path/to/data是指將對象存儲數(shù)據(jù)存放的路徑,可自行定義。11.4.2

創(chuàng)建對象存儲服務1.下載和啟動MinIO服務端11.4.2

創(chuàng)建對象存儲服務MinIO使用Bucket來組織對象,Bucket類似于目錄中的文件夾或目錄文件系統(tǒng),其中每個Bucket可以保存任意數(shù)量的對象。首先,在瀏覽器中訪問:9000,使用RootUser和RootPass登錄MinIO的管理控制臺。2.創(chuàng)建Bucket11.4.2

創(chuàng)建對象存儲服務單擊“CreateBucket”按鈕后在彈出界面中,創(chuàng)建一個名稱為leadnews的Bucket,用于后續(xù)存儲黑馬頭條中的素材等對象。創(chuàng)建好名稱為leadnews的Bucket后,單擊左側(cè)的Bucket菜單,可以看到當前MinIO中所有的Bucket。2.創(chuàng)建Bucket11.4.2

創(chuàng)建對象存儲服務默認創(chuàng)建的Bucket權限為私有,其中的資源不能直接被外界訪問,為了便于后續(xù)黑馬頭條中可以直接獲取leadnews下的資源,對此可以將leadnews的權限設置為公開。單擊“Manage”按鈕,進入到leadnews的管理界面。2.創(chuàng)建Bucket11.4.2

創(chuàng)建對象存儲服務默認創(chuàng)建的Bucket權限為私有,其中的資源不能直接被外界訪問,為了便于后續(xù)黑馬頭條中可以直接獲取leadnews下的資源,對此可以將leadnews的權限設置為公開。單擊“Manage”按鈕,進入到leadnews的管理界面。2.創(chuàng)建Bucket將訪問策略修改為Public11.4.2

創(chuàng)建對象存儲服務MinIO提供了各種主流開發(fā)語言的SDK,這些SDK包含了一系列的API和功能,使開發(fā)者能夠很方便地與MinIO服務進行交互,實現(xiàn)對象的存儲、檢索和管理。為了其他微服務都可以方便的使用對象存儲服務,黑馬頭條heima-leadnews-file-starter模塊中,將基于MinIO創(chuàng)建對象存儲服務封裝為starter,其他服務想要使用時,只需設置對應的配置后,注入對應的服務即可使用對象存儲服務。3.創(chuàng)建對象存儲服務11.4.2

創(chuàng)建對象存儲服務在heima-leadnews-file-starter的com.heima.file.config包下創(chuàng)建連接MinIO信息和構(gòu)建MinIO客戶端實例的配置類,具體如文件11-10和11-11所示。3.創(chuàng)建對象存儲服務文件11-10MinIOConfigProperties.java文件11-11MinIOConfig.java源代碼11.4.2

創(chuàng)建對象存儲服務在heima-leadnews-file-starter的com.heima.file.service和com.heima.file.service.impl包下分別創(chuàng)建操作MinIO的接口和對應的實現(xiàn)類,具體如文件11-12和11-13所示。4.創(chuàng)建操作MinIO的接口和類文件11-12FileStorageService.java文件11-13MinIOFileStorageService.java源代碼11.4.2

創(chuàng)建對象存儲服務在heima-leadnews-file-starter的resources/META-INF目錄下,創(chuàng)建名稱為spring.factories的文件,在文件中啟用com.heima.file.service.impl.MinIOFileStorageService自動配置,具體如文件11-14所示。5.自動配置對象存儲服務類文件11-14spring.factories源代碼11.4.3

素材管理先定一個小目標!

先定一個小目標!掌握素材管理,能夠?qū)崿F(xiàn)素材上傳和素材列表查詢11.4.3

素材管理1.素材上傳在黑馬頭條中進行素材上傳時,將所有素材保存到MinIO對象存儲系統(tǒng),并在數(shù)據(jù)庫中存儲該素材在MinIO中的地址。為了快速定位上傳素材的所有者,需要同時保存當前上傳素材的用戶信息,下面,對素材上傳的實現(xiàn)進行講解。在heima-leadnews-wemedia模塊的erceptor包下創(chuàng)建攔截器WmTokenInterceptor,具體如文件11-15所示。文件11-15WmTokenInterceptor.java源代碼11.4.3

素材管理1.素材上傳在heima-leadnews-wemedia模塊的com.heima.wemedia.config包下創(chuàng)建配置類,具體如文件11-16所示。文件11-16WebMvcConfig.java源代碼11.4.3

素材管理1.素材上傳在heima-leadnews-wemedia模塊的com.heima.wemedia.controller包下創(chuàng)建素材管理的控制器類,在該類中定義方法處理素材上傳的請求,具體如文件11-17所示。文件11-17WmMaterialController.java源代碼11.4.3

素材管理1.素材上傳在heima-leadnews-wemedia模塊的com.heima.wemedia.service和com.heima.wemedia.service.impl包下分別創(chuàng)建素材管理的接口和實現(xiàn)類,在接口和實現(xiàn)類中定義處理素材上傳的方法,具體如文件11-18和文件11-19所示。文件11-18WmMaterialService.java文件11-19WmMaterialServiceImpl.java源代碼11.4.3

素材管理1.素材上傳在heima-leadnews-wemedia模塊的com.heima.wemedia.mapper包下創(chuàng)建素材管理的Mapper,具體如文件11-20。文件11-20WmMaterialMapper.java源代碼11.4.3

素材管理1.素材上傳在Nacos的配置列表的leadnews-wemedia配置中添加MinIO配置信息,讓程序進行素材上傳時,根據(jù)設置的MinIO信息進行連接和操作,具體配置如下所示。添加的MinIO配置信息源代碼11.4.3

素材管理1.素材上傳依次啟動MinIO、Nacos、Nginx、WeMediaApplication、WemediaGatewayAplication后,在瀏覽器中訪問登錄自媒體端,在自媒體端的后臺首頁單擊“素材管理”菜單,進入素材管理界面。11.4.3

素材管理1.素材上傳素材管理界面右上方有一個“上傳圖片”按鈕,單擊該按鈕,會彈出圖片上傳的對話框。11.4.3

素材管理1.素材上傳單擊“選擇圖片”可以選擇需要上傳的圖片,選擇好圖片后單擊“開始上傳”會將選擇的圖片上傳到MinoIO中。11.4.3

素材管理2.素材列表查詢在文件11-17的WmMaterialController控制器類中定義素材列表查詢的方法,處理素材查詢的請求,具體如下所示。@PostMapping("/list")publicResponseResultfindList(@RequestBodyWmMaterialDtodto){returnwmMaterialService.findList(dto);}11.4.3

素材管理2.素材列表查詢在文件11-18的WmMaterialService接口中,定義素材列表查詢的方法,具體如下所示。publicResponseResultfindList(WmMaterialDtodto);11.4.3

素材管理2.素材列表查詢在文件11-19的WmMaterialServiceImpl類中,重寫接口中素材列表查詢的方法,具體如下所示。重寫接口中素材列表查詢的方法源代碼11.4.3

素材管理2.素材列表查詢重新啟動WeMediaApplication,登錄自媒體端后臺后,單擊“素材管理”菜單。11.4.4

發(fā)布文章先定一個小目標!

先定一個小目標!掌握發(fā)布文章,能夠?qū)崿F(xiàn)查詢所有頻道和文章發(fā)布11.4.4

發(fā)布文章單擊左側(cè)的“發(fā)布文章”菜單,會彈出發(fā)布文章的界面。11.4.4

發(fā)布文章發(fā)布的文章包括標題、正文、標簽、頻道和封面等內(nèi)容,其中正文輸入的文本域中可以輸入文字和插入圖片,頻道是從數(shù)據(jù)庫中獲取的數(shù)據(jù),文章發(fā)布可以選擇存入草稿或提交審核進行發(fā)布。為了實現(xiàn)發(fā)布文章功能,我們可以將發(fā)布文章的實現(xiàn)分為查詢所有頻道和文章發(fā)布兩個部分。11.4.4

發(fā)布文章在heima-leadnews-wemedia模塊的com.heima.wemedia.controller包下創(chuàng)建頻道的控制器類,在該類中定義方法處理查詢所有頻道的請求,具體如文件11-21所示。1.查詢所有頻道文件11-21WmChannelController.java源代碼11.4.4

發(fā)布文章在heima-leadnews-wemedia模塊的com.heima.wemedia.service和com.heima.wemedia.service.impl包下分別創(chuàng)建頻道相關業(yè)務的接口和實現(xiàn)類,在接口和實現(xiàn)類中定義處理素材上傳的方法,具體如文件11-22和文件11-23所示。1.查詢所有頻道文件11-22WmChannelService.java文件11-23WmChannelServiceImpl.java源代碼11.4.4

發(fā)布文章在heima-leadnews-wemedia模塊的com.heima.wemedia.mapper包下創(chuàng)建頻道的Mapper,具體如文件11-24。1.查詢所有頻道文件11-24WmChannelMapper.java源代碼11.4.4

發(fā)布文章重新啟動WeMediaApplication,登錄自媒體端后臺后,在發(fā)布文章界面中單擊頻道下拉框。1.查詢所有頻道11.4.4

發(fā)布文章文章發(fā)布的實現(xiàn)思路2.文章發(fā)布11.4.4

發(fā)布文章2.文章發(fā)布存入草稿時,只保存文章中的文字內(nèi)容,而不會保存其中的圖片。新增文章時會在自媒體數(shù)據(jù)庫中新增文章的同時,需要將對應的文章信息同步保存到文章數(shù)據(jù)庫中,以供用戶端查看已發(fā)布的文章。封面可以選擇單圖、三圖、無圖和自動四種模式,當選擇自動時,則會根據(jù)如下規(guī)則設置封面圖片。(1)如果內(nèi)容圖片大于等于1并且小于3,則以單圖模式展示封面。(2)如果內(nèi)容圖片大于等于3,則以多圖模式展示封面。(3)如果內(nèi)容沒有圖片,則以無圖模式展示封面。11.4.4

發(fā)布文章2.文章發(fā)布在heima-leadnews-wemedia模塊的com.heima.wemedia.controller包下創(chuàng)建文章業(yè)務的控制器類,在該類中定義方法處理的自媒體端存入草稿和提交審核的請求,具體如文件11-25所示。文件11-25WmNewsController.java源代碼11.4.4

發(fā)布文章2.文章發(fā)布在heima-leadnews-wemedia模塊的com.heima.wemedia.service包下創(chuàng)建文章相關業(yè)務的接口,在接口中定義處理存入草稿和提交審核的方法,具體如文件11-26所示。文件11-26WmNewsService.java源代碼11.4.4

發(fā)布文章2.文章發(fā)布在heima-leadnews-wemedia模塊的com.heima.wemedia.service.impl包下創(chuàng)建文章相關業(yè)務接口的實現(xiàn)類,在實現(xiàn)類中重寫處理存入草稿和提交審核的方法,具體如文件11-27所示。文件11-27WmNewsServiceImpl.java源代碼11.4.4

發(fā)布文章2.文章發(fā)布在heima-leadnews-wemedia模塊的com.heima.wemedia.mapper包下創(chuàng)建文章的Mapper,具體如文件11-28。文件11-28WmNewsMapper.java源代碼11.4.4

發(fā)布文章2.文章發(fā)布在heima-leadnews-wemedia模塊的com.heima.wemedia.mapper包下創(chuàng)建關聯(lián)文章和素材的Mapper,具體如文件11-29。文件11-29WmNewsMaterialMapper.java源代碼11.4.4

發(fā)布文章2.文章發(fā)布在heima-leadnews-wemedia模塊的resources/mapper文件夾下創(chuàng)建WmNewsMaterialMapper對應的映射文件,并在映射文件中定義插入文章和素材關聯(lián)信息的代碼,具體如文件11-30。文件11-30WmNewsMaterialMapper.xml源代碼11.4.4

發(fā)布文章2.文章發(fā)布在heima-leadnews-wemedia模塊的com.heima.wemedia.feign包下創(chuàng)建文章微服務的Feign客戶端接口,在該接口中定義執(zhí)行的文章保存方法,具體如文件11-31所示。文件11-31IArticleClient.java源代碼11.4.4

發(fā)布文章2.文章發(fā)布在heima-leadnews-wemedia模塊的com.heima.wemedia.feign.fallback包下實現(xiàn)IArticleClient接口,并重寫saveArticle()用于服務容錯,具體如文件11-32所示。文件11-32IArticleClientFallback.java源代碼11.4.4

發(fā)布文章2.文章發(fā)布在heima-leadnews-article模塊的com.heima.article.controller包下創(chuàng)建用戶端文章的控制器類,在該類中定義方法處理保存文章的請求,具體如文件11-33所示。文件11-33ArticleController.java源代碼11.4.4

發(fā)布文章2.文章發(fā)布在heima-leadnews-article模塊的com.heima.article.service包下創(chuàng)建用戶端文章相關業(yè)務的接口,在接口中定義保存文章的方法,具體如文件11-34所示。文件11-34ApArticleService.java源代碼11.4.4

發(fā)布文章2.文章發(fā)布在heima-leadnews-article模塊的com.heima.article.service.impl包下創(chuàng)建用戶端文章相關業(yè)務接口的實現(xiàn)類,在實現(xiàn)類中重寫保存文章的方法,保存文章時根據(jù)當前文章Id判斷是保存文章還是更新文章,具體如文件11-35所示。文件11-35ApArticleServiceImpl.java源代碼11.4.4

發(fā)布文章2.文章發(fā)布保存或更新文章時,需要同步操作文章信息、文章內(nèi)容、文章配置三個表中的數(shù)據(jù),對此需要創(chuàng)建操作這三個表的Mapper,具體如文件11-36~文件11-38所示。文件11-36ApArticleMapper.java文件11-37ApArticleContentMapper.java文件11-38ApArticleConfigMapper.java源代碼11.4.4

發(fā)布文章2.文章發(fā)布在自媒體微服務heima-leadnews-article的bootstrap.yml配置文件中設置應用程序配置,主要包括應用的端口、名稱、注冊中心和配置中心等信息,具體如文件11-39所示。文件11-39bootstrap.yml源代碼11.4.4

發(fā)布文章2.文章發(fā)布在Nacos配置列表的public命名空間下添加DataID為leadnews-article,Group為DEFAULT_GROUP,配置格式為YAML的配置,配置內(nèi)容如下所示。添加的配置內(nèi)容源代碼11.4.4

發(fā)布文章2.文章發(fā)布依次啟動ArticleApplication、WeMediaApplication、WemediaGatewayAplication,啟動成功后登錄自媒體端后臺,在發(fā)布文章界面中編寫文章內(nèi)容。11.4.4

發(fā)布文章2.文章發(fā)布此時單擊“提交審核”按鈕發(fā)布文章。11.4.5

內(nèi)容列表先定一個小目標!

先定一個小目標!掌握內(nèi)容列表,能夠在內(nèi)容列表界面實現(xiàn)文章列表的查詢11.4.5

內(nèi)容列表1.控制器類中定義文章列表查詢的方法在文件11-25的WmNewsController控制器類中定義文章列表查詢的方法,處理文章列表查詢的請求,具體如下所示。@PostMapping("/list")publicResponseResultfindList(@RequestBodyWmNewsPageReqDtodto){returnwmNewsService.findList(dto);}11.4.5

內(nèi)容列表2.接口中定義文章列表查詢的方法在文件11-26的WmNewsService接口中,定義文章列表查詢的方法,具體如下所示。publicResponseResultfindList(WmNewsPageReqDtodto);11.4.5

內(nèi)容列表3.重寫接口中查詢文章列表的方法在文件11-27的WmNewsServiceImpl類中,重寫接口中查詢文章列表的方法,具體如下所示。重寫后的方法源代碼11.4.5

內(nèi)容列表4.測試文章列表查詢重新啟動WeMediaApplication,登錄自媒體端后臺后,單擊“內(nèi)容列表”菜單,效果如下圖。用戶端功能實現(xiàn)11.511.5.1

用戶登錄先定一個小目標!

先定一個小目標!掌握用戶登錄,能夠部署用戶端前端項目,并實現(xiàn)用戶端的用戶登錄11.5.1

用戶登錄1.設置應用程序配置文件11-40bootstrap.yml源代碼在用戶端模塊heima-leadnews-user的bootstrap.yml配置文件中設置應用程序配置,主要包括應用的端口、名稱、注冊中心和配置中心等信息,具體如文件11-40所示。11.5.1

用戶登錄1.設置應用程序配置配置內(nèi)容源代碼啟動Nacos并登錄Nacos控制臺后,在Nacos配置列表的public命名空間下添加DataID為leadnews-user,Group為DEFAULT_GROUP,配置格式為YAML的配置,配置內(nèi)容如下所示。11.5.1

用戶登錄2.編寫用戶端登錄功能代碼在自媒體微服務heima-leadnews-user的com.heima.user.controller包下創(chuàng)建用戶端登錄的控制器類ApUserLoginController,用于接收用戶端登錄的用戶名和密碼,傳遞給Service層進行登錄,具體如文件11-41所示。文件11-41ApUserLoginController.java源代碼11.5.1

用戶登錄2.編寫用戶端登錄功能代碼在heima-leadnews-user模塊的com.heima.user.service包下創(chuàng)建用戶端相關業(yè)務的接口ApUserService,具體如文件11-42所示。文件11-42ApUserService.java源代碼11.5.1

用戶登錄2.編寫用戶端登錄功能代碼在heima-leadnews-user子模塊的com.heima.user.service.impl包下創(chuàng)建ApUserService接口的實現(xiàn)類,具體如文件11-43所示。文件11-43WmUserServiceImpl.java源代碼11.5.1

用戶登錄2.編寫用戶端登錄功能代碼在heima-leadnews-user子模塊的com.heima.user.mapper包下創(chuàng)建ApUserMapper接口繼承BaseMapper接口,具體如文件11-44所示。文件11-44ApUserMapper.java源代碼11.5.1

用戶登錄3.實現(xiàn)用戶端網(wǎng)關服務在heima-leadnews-app-gateway子模塊的bootstrap.yml文件中設置用戶端網(wǎng)關配置,具體如文件11-45所示。文件11-45bootstrap.yml源代碼11.5.1

用戶登錄3.實現(xiàn)用戶端網(wǎng)關服務啟動Nacos并登錄Nacos控制臺后,在Nacos配置列表的public命名空間下添加DataID為leadnews-app-gateway,Group為DEFAULT_GROUP,配置格式為YAML的配置,配置內(nèi)容如下所示。配置內(nèi)容源代碼11.5.1

用戶登錄3.實現(xiàn)用戶端網(wǎng)關服務在heima-leadnews-app-gateway子模塊的com.heima.app.gateway.filter包下自定義用于鑒權的全局過濾器,具體如文件11-7所示。文件11-46AuthorizeFilter.java源代碼11.5.1

用戶登錄4.部署自媒體端前端項目在nginx的conf\leadnews.conf的文件夾中新建名稱為heima-leadnews-app.conf的配置文件,在該配置文件中添加與自媒體相關的代理及請求轉(zhuǎn)發(fā)的配置,具體如文件11-47所示。文件11-47heima-leadnews-app.conf源代碼11.5.1

用戶登錄5.測試用戶端登錄效果依次啟動nginx、Nacos服務端、ArticleApplication、UserApplication、AppGatewayApplication,啟動成功后在瀏覽器中訪問http://localhost:8802/,進入到黑馬頭條的用戶端登錄頁面。11.5.1

用戶登錄5.測試用戶端登錄效果輸入數(shù)據(jù)庫中存在的手機號和對應的密碼后,單擊“開始使用”按鈕,跳轉(zhuǎn)到用戶端的首頁。11.5.2

文章列表先定一個小目標!

先定一個小目標!掌握文章列表,能夠?qū)崿F(xiàn)用戶端文章列表的展示11.5.2

文章列表1.控制器類中定義加載文章列表的方法在文件11-33的ArticleController類中定義加載文章列表的方法,具體如下所示。@PostMapping("/load")publicResponseResultload(@RequestBodyArticleHomeDtodto){ returnapArticleService.load(dto,ArticleConstants.LOADTYPE_LOAD_MORE);}11.5.2

文章列表2.接口中定義加載文章列表的方法在文件11-34的ApArticleService接口中定義加載文章列表的方法,具體如下所示。publicResponseResultload(ArticleHomeDtodto,Shorttype);11.5.2

文章列表3.重寫接口中加載文章列表的方法在文件11-35的ApArticleServiceImpl類中,重寫ApArticleService接口中加載文章列表的方法,具體如下所示。重寫加載文章列表的方法源代碼11.5.2

文章列表4.Mapper中定義加載文章列表的方法在文件11-36的ApArticleMapper接口中定義加載文章列表的方法,具體如下所示。publicList<ApArticle>loadArticleList(@Param("dto")ArticleHomeDtodto,@Param("type")Shorttype);11.5.2

文章列表5.創(chuàng)建映射文件在heima-leadnews-article模塊的resources/mapper文件夾下創(chuàng)建ApArticleMapper對應的映射文件,并在映射文件中定義查詢文章列表的代碼,具體如文件11-48所示。文件11-48ApArticleMapper.xml源代碼11.5.2

文章列表6.測試用戶端登錄重新啟動UserApplication、ArticleApplication、AppGatewayApplication,登錄用戶端后,跳轉(zhuǎn)到用戶端首頁。11.5.2

文章列表6.測試用戶端登錄單擊菜單欄中的其它頻道。11.5.3

文章詳情先定一個小目標!

先定一個小目標!掌握文章詳情,能夠通過模板技術生成文章詳細頁面,并在客戶端展示11.5.3

文章詳情通過文章列表,用戶可以快速瀏覽多篇文章的標題和摘要,以便找到感興趣的文章。當用戶想要深入了解某篇文章的具體內(nèi)容時,可以單擊文章列表中的文章標題進入文章詳情頁面,在文章詳情頁面,讀者將能夠閱讀文章的完整內(nèi)容。實現(xiàn)文章詳情通常有如下兩種方式。方式一:根據(jù)文章的ID從文章內(nèi)容表中查詢文章內(nèi)容,并將內(nèi)容返回給瀏覽器進行渲染展示。方式二:根據(jù)文章的ID從文章內(nèi)容表中查詢內(nèi)容,并使用模板技術生成靜態(tài)的HTML文件,然后將該HTML文件保存在指定的位置,并將該文件路徑存儲在數(shù)據(jù)庫中。在展示文章詳情時,通過獲取HTML文件的路徑,直接展示對應的文章詳情。11.5.3

文章詳情為了提高用戶體驗,大部分企業(yè)進行開發(fā)時會選擇使用方式二,好處在于靜態(tài)HTML文件不需要動態(tài)生成,直接返回給客戶端,減少了服務器的負擔和資源消耗,提高了網(wǎng)站的性能和響應速度,黑馬頭條的客戶端也是基于方式二實現(xiàn)文章詳情的展示。常用的模板技術包括Freemarker、Thymeleaf和Velocity等。默認情況下,SpringMVC支持Freemarker作為視圖格式。為了使用便捷,黑馬頭條采用Freemarker作為模板引擎。下面對Freemarker進行簡單介紹,并基于Freemarker實現(xiàn)文章詳情頁面的生成11.5.3

文章詳情FreeMarker是一款用Java語言編寫的模板引擎,基于模板和要改變的數(shù)據(jù)生成輸出文本,例如,生成HTML頁面、配置文件、源代碼等。FreeMarker的設計目標是使模板與應用程序邏輯相分離,從而實現(xiàn)更清晰、可維護和可擴展的代碼。FreeMarker廣泛應用于Java開發(fā)領域,它允許開發(fā)人員將模板和數(shù)據(jù)結(jié)合,生成最終的輸出。1.Freemarker簡介11.5.3

文章詳情1.Freemarker簡介11.5.3

文章詳情FreeMarker使用FTL(FreeMarkerTemplateLanguage,F(xiàn)reeMarker模板語言)定義模板,F(xiàn)TL提供了一系列語法和指令,類似于HTML和XML的標記語法。為了與HTML和XML標記進行區(qū)分,F(xiàn)reeMarker標簽以#開頭。下面對FreeMarker中三種常用的指令進行講解。1.Freemarker簡介11.5.3

文章詳情(1)assign指令assign指令用于在頁面上定義一個變量,可以定義簡單類型和對象類型,具體代碼如下。簡單類型變量的定義和變

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論