趙懿謙 徐其波 程細柱 陳智健
摘要:隨著高校校園網(wǎng)的建設(shè)與發(fā)展,基于校園網(wǎng)的各種論壇也是層出不窮,但是大多數(shù)校園論壇都是以娛樂交流為主、功能有限。因此,該課題組結(jié)合高校的實際情況開發(fā)了一個方便老師和學(xué)生進行學(xué)術(shù)交流和提問與解答的WEB平臺,該平臺采用B/S的體系結(jié)構(gòu),基于Spring+SpringMVC+Mybatis框架,采用Mybatis數(shù)據(jù)庫+Redis緩存數(shù)據(jù)庫進行開發(fā),平臺的主要功能是老師和學(xué)生可以提出自己的問題,也可以解答別人提出的問題,還可以發(fā)表自己對不同知識點的見解,并記錄自己的學(xué)習(xí)過程,同時還可以在該論壇上組建自己的項目團隊,共享各種學(xué)習(xí)資源。作為老師用戶,還可以上傳自己的研究項目和發(fā)表的期刊論文。該文介紹了開發(fā)該平臺的關(guān)鍵技術(shù),同時還介紹了Nginx反向代理服務(wù)器在本系統(tǒng)中的作用。
關(guān)鍵詞:校園論壇;Java;Redis;Nginx
中圖分類號:TP311.52? ?文獻標識碼:A
文章編號:1009-3044(2019)16-0065-05
開放科學(xué)(資源服務(wù))標識碼(OSID):
1 引言
為了方便高校老師之間共享教學(xué)資源和科研成果,分享教學(xué)經(jīng)驗,進行學(xué)術(shù)交流,以及老師與學(xué)生之間提問與解答,本課題組共同開發(fā)了一個“基于web服務(wù)器集群的師生互動平臺”網(wǎng)站。
該網(wǎng)站允許高校老師在自己的個人主頁中上傳自己的教學(xué)經(jīng)驗,分享課題研究困難的解決辦法,分享相關(guān)教學(xué)素材、所帶團隊研究學(xué)習(xí)項目進度等資源,達到資源互享,學(xué)科互補的效果。
而且,本網(wǎng)站還提供高校學(xué)生課后與本學(xué)科或跨學(xué)科老師交流互動、難點問答、學(xué)校硬件資源借用等功能,達到教學(xué)資源利用最大化。學(xué)生可以通過課程類別搜索到相應(yīng)的老師,發(fā)起疑難點的提問,師生間通過交流互動解決課程難題。而且學(xué)生或老師可以組成團隊進行實驗研究。
另外,利用該平臺,學(xué)生可以發(fā)表自己的參賽心得,展示自己的作品,供其他人瀏覽學(xué)習(xí),同時還可以在論壇模塊開啟一些學(xué)術(shù)話題討論,還可以解答別人的問題,讓知識真正活起來,更加貼近現(xiàn)實生活。
該平臺能較好地整合優(yōu)質(zhì)的教學(xué)資源,有利于激發(fā)學(xué)生學(xué)習(xí)興趣、培養(yǎng)學(xué)生獨立思考和動手能力、規(guī)范教學(xué)管理、提高教學(xué)質(zhì)量,使教學(xué)資源利用率達到最大化。如果推廣使用,可以產(chǎn)生較好的經(jīng)濟效益。
2 系統(tǒng)分析
2.1 可行性分析
2.1.1 技術(shù)和經(jīng)濟可行性
本系統(tǒng)使用Java作為開發(fā)語言,使用Spring + SpingMVC + Mybatis作為系統(tǒng)的開發(fā)架構(gòu)[1],數(shù)據(jù)庫使用Mysql,緩存數(shù)據(jù)庫使用Redis,視圖層使用freeMarker模板引擎,整個項目采用Maven進行搭建。系統(tǒng)開發(fā)完成后部署到基于Nginx反向服務(wù)器的Tomcat集群上。因為上述的各功能組件都是成熟穩(wěn)定,并且開源免費,因此在技術(shù)和經(jīng)濟方面是可行的。
2.2 需求分析
2.2.1 功能需求
通過對多個學(xué)校以及網(wǎng)絡(luò)上相關(guān)論壇的考察,結(jié)合老師與學(xué)生的具體需求,本系統(tǒng)主要包含如下幾大功能模塊。
1)問答模塊:登錄用戶可以在該模塊進行提問與回答。
2)博客模塊:對于喜歡記錄學(xué)習(xí)過程的用戶,可以通過該模塊,發(fā)表自己對某些知識點的見解。
3)團隊模塊:用戶可以通過發(fā)表一個需要研究的項目從而招募成員。
4)資源模塊:用戶可以通過此模塊,共享自己的資源或者下載自己喜歡的資源。
5)科研成果展示模塊:該功能只有老師才能使用,老師用戶可以上傳自己的研究項目或者發(fā)表的論文,從而讓更多學(xué)生吸收到老師的研究成果。
3 系統(tǒng)總體設(shè)計
3.1 系統(tǒng)模塊的組成
3.1.1 系統(tǒng)模塊相對應(yīng)功能的概要描述。
登錄模塊:用戶可以使用賬戶和密碼登錄。
學(xué)生注冊模塊:學(xué)生填寫學(xué)號、性別、年級、就讀專業(yè)、郵箱等信息完成注冊。
個人信息管理模塊:用戶可以在該功能模塊中修改自己的個人信息。
關(guān)注和粉絲模塊:用戶可以通過該功能模塊查看自己關(guān)注的用戶,也可對關(guān)注用戶進行取關(guān),同時也可以查看自己的粉絲,刪除自己的粉絲。
博客模塊:用戶可以發(fā)表自己的博客,也可對博客進行收藏,點贊,評論,舉報。
老師科研模塊:老師可以在該模塊管理自己的論文和課題。
團隊管理模塊:用戶可以通過該功能模塊申請加入團隊,也可以管理自己的團隊。
用戶交流模塊:用戶可以在該模塊下提出問題,回答問題,也可以收藏問題和回答,也可以對提問和回答進行點贊,評論,舉報。
項目管理模塊:老師用戶可以通過該模塊管理和展示自己的項目。
后臺管理模塊:管理員進行注銷用戶和管理舉報消息和刪除違規(guī)消息。
權(quán)限管理模塊:為用戶賬戶授予權(quán)限及收回權(quán)限。
3.1.2 系統(tǒng)模塊之間的關(guān)系
該系統(tǒng)分為前臺模塊和后臺管理模塊,分別如圖1、圖2所示。
3.2 系統(tǒng)的整體流程
這里通過系統(tǒng)的流程圖來表示該系統(tǒng)的整體流程,如圖。
4 數(shù)據(jù)庫設(shè)計
4.1 數(shù)據(jù)庫整體設(shè)計
這里通過er圖模型來表示出該系統(tǒng)各個實體之間的關(guān)系。問題模塊如圖4所示;資源模塊、關(guān)注和粉絲模塊、團隊模塊的er圖如圖5所示;,博客和項目模塊er圖如圖6所示;私信模塊、權(quán)限管理模塊,論文模塊的er圖如圖7所示。
5 系統(tǒng)詳細設(shè)計與實現(xiàn)
5.1 登錄注冊模塊的設(shè)計實現(xiàn)
用戶在登錄頁面(如圖6所示),填寫上用戶名、密碼。點擊登錄,后臺驗證正確,就可以進入系統(tǒng)首頁(如圖8所示),否則,就提示賬號密碼不匹配。如果用戶沒有注冊就點擊注冊新用戶,在注冊頁面(如圖7所示)填寫注冊信息,后臺錄入數(shù)據(jù),注冊成功,跳轉(zhuǎn)到登錄頁面,否則,提示注冊失敗。
5.2 問答模塊的設(shè)計實現(xiàn)
1)發(fā)起提問
在提問頁面,描述好問題信息,點擊提問按鍵,后臺入庫,跳轉(zhuǎn)到瀏覽問題頁面。
2)舉報提問
在提問瀏覽頁面,點擊舉報按鍵,填寫舉報原因,提交后臺處理。
3)回復(fù)評論
瀏覽回答頁面上,點擊評論按鍵,填寫評論,點擊提交。
4)舉報回答
在回答瀏覽頁面,點擊的舉報按鍵,填寫好舉報原因,提交后臺。
5.3 資源共享模塊的設(shè)計實現(xiàn)
該功能支持最大500M的大文件的上傳,用戶點擊“上傳資源”,選擇目標資源,即可上傳,如果中途上傳中斷,該功能還支持資源的續(xù)傳[2]。
5.4 團隊模塊的設(shè)計實現(xiàn)
1)組建團隊
在團隊招募的頁面中,點擊“招募團隊”,詳細填寫團隊信息,點擊提交,新建團隊出現(xiàn)在我的團隊頁面中。
2)申請加入團隊
瀏覽團隊列表,點擊某個招募中的團隊,進入該團隊的詳細頁面,點擊“申請加入”,填好申請信息,提交給后臺。
3)上傳資源到團隊
功能說明:進入我的團隊,點擊資源上傳按鍵,選好上傳的資源,將資源給服務(wù)器存儲入庫,成功,告訴前端。否則提示重傳。
4)從團隊下載資源
進入我的團隊,點擊資源下載按鍵。后臺返回下載的資源。
5)團隊成員管理
進入我的團隊,如果用戶是團長,點擊踢除按鍵,踢除團隊成員;點擊“同意”入隊申請,就添加了一名隊員,或者點擊“駁回”,就拒絕了他的入隊申請;點擊“團隊解散”,就是將團隊解散;點擊修改招募時間,就修改了截止招募日期。
如果用戶是隊員,點擊退出團隊,向后臺入庫“退隊申請”,等團長同意,即可退隊。
5.5 論文模塊的設(shè)計實現(xiàn)
1)評論論文
瀏覽論文的頁面上,填寫評論,點擊發(fā)表評論。
2)舉報論文
瀏覽論文的頁面上,點擊“舉報”,填寫舉報原因,提交后臺處理。
3)回復(fù)評論
瀏覽論文的頁面上,點擊“回復(fù)”,填寫內(nèi)容,提交后臺,頁面顯示回復(fù)內(nèi)容。
5.6 項目模塊的設(shè)計實現(xiàn)
1)評論項目
瀏覽項目的頁面上,填寫評論,點擊發(fā)表評論。
2)舉報項目
瀏覽項目的頁面上,點擊“舉報”,填寫舉報原因,提交后臺處理。
3)回復(fù)評論
瀏覽項目的頁面上,點擊“回復(fù)”,填寫內(nèi)容,提交后臺,頁面顯示回復(fù)內(nèi)容。
5.7 博客模塊的設(shè)計實現(xiàn)
1)評論博客
瀏覽博客的頁面上,填寫評論,點擊發(fā)表評論。
2)舉報博客
瀏覽博客的頁面上,點擊“舉報”,填寫舉報原因,提交后臺處理。
3)回復(fù)評論
瀏覽博客的頁面上,點擊“回復(fù)”,填寫內(nèi)容,提交后臺。
5.8 私信的設(shè)計實現(xiàn)
在私信發(fā)送頁面上,選擇聯(lián)系人,填寫信息,點擊發(fā)送。聯(lián)系人收到私信。
5.9 個人信息管理的設(shè)計實現(xiàn)
1)修改用戶的基本信息
在個人信息頁面,點擊“修改”,填寫個人基本信息,點擊“保存”。
2)修改密碼
在個人信息頁面,點擊“修改密碼”,填寫新密碼,點擊“確認”。
5.10 關(guān)注和粉絲模塊的設(shè)計實現(xiàn)
瀏覽其他用戶信息時,點擊“關(guān)注”,即關(guān)注了用戶,成為他的粉絲;
瀏覽我的關(guān)注頁面,點擊“取消關(guān)注”,即退出他的粉絲。
5.11 收藏模塊的設(shè)計實現(xiàn)
瀏覽博客、提問、問題的回答時,點擊收藏;在我的收藏中,點擊取消,取消相應(yīng)資源的收藏;
5.12后臺管理模塊的設(shè)計實現(xiàn)
1) 權(quán)限管理
在管理端,創(chuàng)建、刪除權(quán)限 和 角色;為用戶賬戶授予權(quán)限及收回權(quán)限。
2) 舉報管理
審核舉報消息,同意或駁回。
3) 帖子管理
刪除違規(guī)的論文、提問、回答評論、資源、團隊
4) 用戶管理
管理員進行注銷用戶
5.13 對系統(tǒng)運行時的session進行持久化處理
本系統(tǒng)是通過重寫shiro框架中的類WebSessionManager中的SessionDao屬性來對系統(tǒng)運行時的session進行持久化處理。具體操作如下:
1) 新建一個繼承AbstractSessionDAO的類:RedisSessionDao,然后重寫增刪改方法,讓session的獲取和創(chuàng)建都是經(jīng)過我們配置好的Redis服務(wù)器。
2) 測試上述步驟時發(fā)現(xiàn),每次訪問服務(wù)器的請求,都需要從redis讀取session至少7次,這顯然會導(dǎo)致redis的高負載,很不利于系統(tǒng)的穩(wěn)定,因此,接下來,我們要重寫讀取redis中Session的規(guī)則。
3) Shiro中控制讀取session邏輯的是 DefaultWebSessionManager中的 retrieveSession()方法,因此我們需要新建一個繼承DefaultWebSessionManager的類CustomSessionManager,然后將方法retrieveSession()改寫為:只當首次訪問時才從redis中取session接下來的請求都從request中獲取請求。
5.14 項目的部署
為了讓系統(tǒng)應(yīng)對高并發(fā)量的請求,這里將把系統(tǒng)部署到基于Nginx反向代理服務(wù)器的Tomcat集群中,具體操作如下:
然后在瀏覽器輸入nginx服務(wù)器的地址+項目根路徑,即nginx服務(wù)器的ip地址+項目根路徑對項目進行訪問,多次訪問發(fā)現(xiàn)nginx將多次請求,隨機的分發(fā)到了三個tomcat服務(wù)器中的本系統(tǒng)進行處理。然后打開redis,發(fā)現(xiàn)redis只持久化了一份session。
因此,整個服務(wù)器集群搭建成功,并且session的持久化也成功了。
參考文獻:
[1] 舒禮蓮.基于SpringMVC的Web應(yīng)用開發(fā)[J].計算機與現(xiàn)代化, 2013(11).
[2] CSDN網(wǎng)站.Java實現(xiàn)瀏覽器端大文件分片上傳[Z].2017.
[3] 郝淑惠.基于Nginx的Web服務(wù)器負載均衡策略改進與實現(xiàn)[J].河套學(xué)院網(wǎng)絡(luò)信息中心,2019(2).
【通聯(lián)編輯:梁書】