王柯,周祎,紀(jì)雯燴
(東南大學(xué)成賢學(xué)院 電子與計(jì)算機(jī)工程學(xué)院,江蘇南京,210000)
現(xiàn)在的學(xué)習(xí)交流平臺(tái)所涉及的內(nèi)容很廣泛,大到12個(gè)學(xué)科門(mén)類(lèi),小到各門(mén)類(lèi)下的各個(gè)專(zhuān)業(yè),看似內(nèi)容很多但是對(duì)于只有某一特定專(zhuān)業(yè)知識(shí)需求的用戶(hù)來(lái)講該平臺(tái)所呈現(xiàn)的交流內(nèi)容大多不符合自身需求。對(duì)于一個(gè)想在IT領(lǐng)域深入學(xué)習(xí)的學(xué)生而言,此類(lèi)人群的需求是一個(gè)精細(xì)化的學(xué)習(xí)交流平臺(tái)。因此,本課題設(shè)計(jì)了具有高擴(kuò)展性和可維護(hù)性的基于SSM框架的IT知識(shí)學(xué)習(xí)交流平臺(tái),實(shí)現(xiàn)了IT文章知識(shí)的分類(lèi)、評(píng)論、發(fā)表、管理和IT知識(shí)學(xué)習(xí)路線(xiàn)的梳理,方便IT學(xué)習(xí)者的使用與交流,具有很好的現(xiàn)實(shí)意義。
Spring+SpringMVC+MyBatis三部分組成了SSM框架,該框架使用Spring MVC負(fù)責(zé)請(qǐng)求的轉(zhuǎn)發(fā)和視圖管理,Spring實(shí)現(xiàn)業(yè)務(wù)對(duì)象管理,Mybatis作為數(shù)據(jù)對(duì)象的持久化引擎?;赟SM框架三部分結(jié)構(gòu)的關(guān)系運(yùn)行流程如圖1所示。
圖1 基于SSM框架三部分結(jié)構(gòu)的關(guān)系運(yùn)行流程
Spring作為一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器(框架),不僅是Java運(yùn)用最廣泛的開(kāi)源框架,而且提供了對(duì)其他優(yōu)秀開(kāi)源框架的集成支持。其中,IoC是Spring框架的核心內(nèi)容,IoC可以將創(chuàng)建控制對(duì)象的主動(dòng)權(quán)從程序內(nèi)部交到第三方系統(tǒng)手中,這使得我們程序員不再去管理對(duì)象的創(chuàng)建,用更多的精力去關(guān)注業(yè)務(wù)的實(shí)現(xiàn),耦合性大大降低,從而簡(jiǎn)化了開(kāi)發(fā)。
Spring MVC是Spring Framework的一部分,是基于Java實(shí)現(xiàn)MVC的輕量級(jí)Web框架,與Spring兼容性好、功能強(qiáng)大。Spring的web框架?chē)@DispatcherServlet即前端控制器設(shè)計(jì)。DispatcherServlet的作用是將請(qǐng)求分發(fā)到不同的處理器,是整個(gè)SpringMVC的控制中心。Spring MVC框架像許多其他MVC框架一樣, 以請(qǐng)求為驅(qū)動(dòng) , 圍繞一個(gè)中心Servlet分派請(qǐng)求及提供其他功能,DispatcherServlet是一個(gè)實(shí)際的Servlet (它繼承自HttpServlet 基類(lèi))。SpringMVC的原理如圖2所示。
由圖2可知當(dāng)發(fā)起請(qǐng)求時(shí)被前置的控制器攔截到請(qǐng)求,根據(jù)請(qǐng)求參數(shù)生成代理請(qǐng)求,找到請(qǐng)求對(duì)應(yīng)的實(shí)際控制器,控制器處理請(qǐng)求,創(chuàng)建數(shù)據(jù)模型,訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),將模型響應(yīng)給中心控制器,控制器使用模型與視圖渲染視圖結(jié)果,將結(jié)果返回給中心控制器,再將結(jié)果返回給請(qǐng)求者。
圖2 SpringMVC原理
MyBatis 是一個(gè)優(yōu)秀的持久層框架,即把數(shù)據(jù)(如內(nèi)存中的對(duì)象)保存到可永久保存的存儲(chǔ)設(shè)備中(如磁盤(pán)),是將程序數(shù)據(jù)在持久狀態(tài)和瞬時(shí)狀態(tài)間轉(zhuǎn)換的機(jī)制。MyBatis 可以使用簡(jiǎn)單的 XML 或注解來(lái)配置和映射原生信息,將接口和 Java 的實(shí)體類(lèi)映射成數(shù)據(jù)庫(kù)中的記錄,避免了幾乎所有的 JDBC 代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集的過(guò)程。因此,MyBatis不會(huì)對(duì)應(yīng)用程序或者數(shù)據(jù)庫(kù)的現(xiàn)有設(shè)計(jì)強(qiáng)加任何影響,通過(guò)sql語(yǔ)句就可以滿(mǎn)足操作數(shù)據(jù)庫(kù)的所有需求。
本系統(tǒng)有普通用戶(hù)和管理員兩種身份類(lèi)型,管理員能瀏覽平臺(tái)內(nèi)容、管理文章及其分類(lèi)和標(biāo)簽、管理用戶(hù)及其評(píng)論,用戶(hù)能瀏覽平臺(tái)內(nèi)容、撰寫(xiě)并發(fā)表文章、發(fā)表評(píng)論。IT知識(shí)學(xué)習(xí)交流平臺(tái)總體業(yè)務(wù)流程如圖3所示。
圖3 總體業(yè)務(wù)流程圖
IT知識(shí)學(xué)習(xí)交流平臺(tái)功能結(jié)構(gòu)如圖4所示。
圖4 功能結(jié)構(gòu)圖
IT知識(shí)學(xué)習(xí)交流平臺(tái)系統(tǒng)框架分為四層,分別是數(shù)據(jù)持久層、服務(wù)層(DAO層)、控制層(Controller層)、表現(xiàn)層(Web層),如圖5所示。Web層通過(guò)DispatcherServlet接收用戶(hù)發(fā)來(lái)的請(qǐng)求,通過(guò)注冊(cè)好的路徑轉(zhuǎn)發(fā)到相應(yīng)的Controller層類(lèi)中的方法上,Controller層的類(lèi)開(kāi)始實(shí)現(xiàn)具體業(yè)務(wù),并根據(jù)業(yè)務(wù)邏輯調(diào)用相應(yīng)的DAO層,DAO層接收請(qǐng)求并對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,DAO層由于是由持久層文件生成,因此,持久層文件中存放實(shí)體類(lèi)文件和構(gòu)造函數(shù)提供給DAO層。
圖5 系統(tǒng)框架設(shè)計(jì)
本系統(tǒng)主要有五個(gè)實(shí)體,分別為用戶(hù)、評(píng)論、文章、分類(lèi)和標(biāo)簽,五個(gè)實(shí)體間的關(guān)系E-R圖如6所示。
圖6 E-R圖
本系統(tǒng)使用的MySql進(jìn)行數(shù)據(jù)庫(kù)管理,根據(jù)本系統(tǒng)所需功能、邏輯業(yè)務(wù)對(duì)象的分析以及對(duì)象間的關(guān)系,對(duì)系統(tǒng)數(shù)據(jù)庫(kù)進(jìn)行了設(shè)計(jì),如表1~表7所示。
(1)文章信息表。文章信息表主要用于保存文章的具體信息,主要字段包括:文章ID、用戶(hù)ID、標(biāo)題、內(nèi)容、訪(fǎng)問(wèn)量、評(píng)論數(shù)、點(diǎn)贊數(shù)、狀態(tài)、排序值、更新時(shí)間、創(chuàng)建時(shí)間、摘要、縮略圖。表結(jié)構(gòu)如表1所示。
表1 文章信息表
(2)用戶(hù)評(píng)論信息表。用戶(hù)評(píng)論信息表主要用于保存用戶(hù)評(píng)論文章的內(nèi)容及發(fā)表評(píng)論和被評(píng)論文章的信息。主要字段包括:評(píng)論ID、上級(jí)評(píng)論ID、上級(jí)評(píng)論名稱(chēng)、文章ID、評(píng)論人名稱(chēng)、評(píng)論人郵箱、評(píng)論人個(gè)人主頁(yè)、評(píng)論人頭像、內(nèi)容、評(píng)論時(shí)間、是否為管理員、用戶(hù)ID。表結(jié)構(gòu)如表2所示。
表2 用戶(hù)評(píng)論信息表
(3)用戶(hù)信息表。用戶(hù)信息表主要保存用戶(hù)的具體信息。主要字段包括:用戶(hù)ID、用戶(hù)名、密碼、昵稱(chēng)、郵箱、個(gè)人主頁(yè)、頭像、注冊(cè)時(shí)間、上傳登錄IP、上傳登錄時(shí)間、狀態(tài)、角色。表結(jié)構(gòu)如表3所示。
表3 用戶(hù)信息表
(4)文章分類(lèi)信息表。文章分類(lèi)信息表主要保存文章分類(lèi)標(biāo)簽的信息。主要字段包括:分類(lèi)ID、分類(lèi)父ID、分類(lèi)名稱(chēng)、排序值、圖標(biāo)。表結(jié)構(gòu)如表4所示。
表4 文章分類(lèi)信息表
(5)文章標(biāo)簽信息表。文章標(biāo)簽信息表主要保存文章小標(biāo)簽的信息。主要字段包括:標(biāo)簽ID、標(biāo)簽名稱(chēng)。表結(jié)構(gòu)如表5所示。
表5 文章標(biāo)簽信息表
(6)文章與分類(lèi)標(biāo)簽鏈接關(guān)系表。文章與分類(lèi)標(biāo)簽鏈接關(guān)系表主要保存文章和對(duì)應(yīng)分類(lèi)標(biāo)簽的關(guān)系。主要字段包括:文章ID、分類(lèi)ID。表結(jié)構(gòu)如表6所示。
表6 文章與分類(lèi)標(biāo)簽鏈接關(guān)系表
(7)文章與標(biāo)簽鏈接關(guān)系表。文章與標(biāo)簽鏈接關(guān)系表主要保存文章和對(duì)應(yīng)小標(biāo)簽的關(guān)系。主要字段包括:文章ID、標(biāo)簽ID。表結(jié)構(gòu)如表7所示。
表7 文章與標(biāo)簽鏈接關(guān)系表
本系統(tǒng)的主要功能包括發(fā)表文章、評(píng)論文章、文章分類(lèi)、瀏覽平臺(tái)內(nèi)容以及管理員對(duì)平臺(tái)用戶(hù)、文章、分類(lèi)標(biāo)簽的管理等,由于篇幅有限,下文僅對(duì)發(fā)表文章和評(píng)論文章兩個(gè)模塊進(jìn)行詳細(xì)設(shè)計(jì)。
2.5.1 發(fā)表文章用例對(duì)象設(shè)計(jì)
用戶(hù)登錄成功后可以在用戶(hù)后臺(tái)發(fā)表文章,在后臺(tái)編輯文章的界面中輸入文章內(nèi)容、選擇文章對(duì)應(yīng)的分類(lèi)和標(biāo)簽,所有的信息通過(guò)post請(qǐng)求發(fā)送給對(duì)應(yīng)Controller層 的ArticleController類(lèi)、CategoryController類(lèi)和TagConrtroller類(lèi), 然 后ArticleController類(lèi)通 過(guò)InsertArticle( )方 法 發(fā) 送 給ArticleService,CategoryController類(lèi)通過(guò)InsertCategory( )方法發(fā)送給CategoryService,TagConrtroller類(lèi) 通 過(guò)InsertTag( )方法發(fā)送給TagService,然后各Service層發(fā)送給持久層寫(xiě)進(jìn)數(shù)據(jù)庫(kù),由此,ArticleService通過(guò)更新后的持久層拿到新文章及其具體信息,Controller層將新數(shù)據(jù)發(fā)送給前端頁(yè)面顯示新文章。發(fā)表文章用例實(shí)現(xiàn)順序圖如圖7所示。
圖7 發(fā)表文章用例順序圖
2.5.2 評(píng)論文章用例對(duì)象設(shè)計(jì)
用戶(hù)登錄成功后可以在文章閱讀界面發(fā)表評(píng)論,首先界面顯示文章信息,用戶(hù)閱讀完后輸入評(píng)論,評(píng)論通過(guò)post請(qǐng)求發(fā)送給Controller層的CommentController類(lèi),CommentController類(lèi)通過(guò)AddComment( )方法發(fā)送給CommentService,然后發(fā)送給持久層寫(xiě)進(jìn)數(shù)據(jù)庫(kù),CommentService通過(guò)更新后的持久層拿到評(píng)論內(nèi)容,Controller層將評(píng)論發(fā)送給前端頁(yè)面顯示。評(píng)論文章用例實(shí)現(xiàn)順序圖如圖8所示。
圖8 評(píng)論文章用例順序圖
本系統(tǒng)第一個(gè)核心功能是文章發(fā)表功能,該功能能使平臺(tái)內(nèi)容豐富,實(shí)現(xiàn)用戶(hù)間學(xué)習(xí)交流的重要功能之一。用戶(hù)登錄賬號(hào)后,進(jìn)入后臺(tái)文章編輯界面,編輯文章內(nèi)容,選擇文章分類(lèi)和標(biāo)簽信息,點(diǎn)擊提交即可發(fā)表文章。Mapper層實(shí)現(xiàn)部分代碼如下:
本文總結(jié)了IT知識(shí)學(xué)習(xí)交流平臺(tái)的系統(tǒng)分析、設(shè)計(jì)與實(shí)現(xiàn)的全過(guò)程,系統(tǒng)最終實(shí)現(xiàn)了用戶(hù)發(fā)表瀏覽文章、評(píng)論交流、文章分類(lèi)等功能,為IT學(xué)習(xí)者提供了很好的學(xué)習(xí)交流平臺(tái)。本項(xiàng)目主要有兩個(gè)特點(diǎn):
(1)業(yè)務(wù)邏輯上簡(jiǎn)明直接,目標(biāo)用戶(hù)設(shè)定準(zhǔn)確,以IT知識(shí)學(xué)習(xí)者為主,為IT知識(shí)學(xué)習(xí)者提供了一個(gè)專(zhuān)門(mén)學(xué)習(xí)交流IT知識(shí)、梳理學(xué)習(xí)路線(xiàn)的平臺(tái),目前網(wǎng)絡(luò)上雖然有類(lèi)似的平臺(tái),比如:CSDN,但是CSDN沒(méi)有梳理好學(xué)習(xí)路線(xiàn),本平臺(tái)在實(shí)現(xiàn)CSDN的大部分功能的情況下,結(jié)合自身學(xué)習(xí)的狀況,整理出了一條適合大部分初學(xué)IT知識(shí)的學(xué)習(xí)路線(xiàn)??傮w而言,本系統(tǒng)可以填補(bǔ)市場(chǎng)空白,有著廣闊的發(fā)展空間。
(2)程序上,由于使用了Spring+SpringMVC+ Mybatis框架(SSM框架),使得項(xiàng)目十分精簡(jiǎn),降低了每個(gè)模塊之間的耦合度,便于后期維護(hù),達(dá)到了系統(tǒng)的設(shè)計(jì)目標(biāo)和整體要求。