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