丁振凡
(華東交通大學(xué)信息工程學(xué)院,江西南昌 330013)
基于Cloud Foundry云平臺的網(wǎng)絡(luò)考試系統(tǒng)實(shí)現(xiàn)*
丁振凡
(華東交通大學(xué)信息工程學(xué)院,江西南昌 330013)
介紹了基于Cloud Foundry云平臺的網(wǎng)絡(luò)考試系統(tǒng)設(shè)計(jì).在STS環(huán)境下通過添加“Cloud Foundry Integration”的擴(kuò)展插件,開發(fā)者可通過虛擬機(jī)實(shí)現(xiàn)對Cloud Foundry云平臺應(yīng)用的可視化部署與管理.應(yīng)用借助云服務(wù)可訪問云上MySQL數(shù)據(jù)庫.重點(diǎn)圍繞考試系統(tǒng)的組卷、試卷顯示、交卷評分處理等環(huán)節(jié),介紹了用Spring MVC框架設(shè)計(jì)相應(yīng)的控制器、模型及視圖顯示的編程處理方法.系統(tǒng)采用Json串實(shí)現(xiàn)試卷信息在頁面之間傳遞處理.
Cloud Foundry;云數(shù)據(jù)庫訪問;考試系統(tǒng);MVC開發(fā)模式
云計(jì)算作為一種新型的資源共享和管理模式,成為近年來研究和應(yīng)用的熱點(diǎn)[1].將軟件部署在云的虛擬化環(huán)境中,開發(fā)人員專注于應(yīng)用設(shè)計(jì),而不用維護(hù)基礎(chǔ)設(shè)施,可使軟件部署變得快速方便.Cloud Foundry是VMware發(fā)布的業(yè)內(nèi)第1個開源PaaS項(xiàng)目.Cloud Foundry云平臺提供了軟件開發(fā)、測試和運(yùn)行維護(hù)一整套環(huán)境,確保安全性、可管理性、高可用性.該系統(tǒng)通過給STS(Springsource Tool Suite)添加“Cloud Foundry Integration Extension”,實(shí)現(xiàn)在STS開發(fā)環(huán)境下對云上應(yīng)用的部署與調(diào)試.
網(wǎng)絡(luò)考試是網(wǎng)絡(luò)教學(xué)平臺中較為復(fù)雜的一項(xiàng)功能[2].完整的考試系統(tǒng)應(yīng)支持較豐富的題型.系統(tǒng)采用Spring MVC模型進(jìn)行開發(fā),系統(tǒng)功能由Spring的控制器、模型、服務(wù)業(yè)務(wù)邏輯、視圖協(xié)作完成[3].為簡單起見,筆者僅討論組卷、試卷顯示、解答評分處理的實(shí)現(xiàn),且題型僅考慮單選題和多選題.
1.1 利用STS環(huán)境云虛擬機(jī)部署應(yīng)用
在STS環(huán)境,是依托云虛擬機(jī)實(shí)現(xiàn)應(yīng)用的部署和管理.為了連接云服務(wù)器,第1步,在http://my.cloudfoundry.com/signup站點(diǎn)注冊一個帳戶;第2步,在STS環(huán)境中添加“Cloud Foundry Integration”的插件;第3步,通過STS的Server添加功能,添加對應(yīng)云虛擬機(jī)的服務(wù)器,連接服務(wù)器將需要注冊的帳戶和密碼;第4步,應(yīng)用運(yùn)行時選擇云服務(wù)器,就可以自動將應(yīng)用部署到云環(huán)境.
1.2 云上MySQL數(shù)據(jù)庫的使用配置
在Cloud Foundry云上支持MySQL服務(wù),應(yīng)用中可使用云的MySQL數(shù)據(jù)庫實(shí)現(xiàn)數(shù)據(jù)存儲.首先,要添加Mysql服務(wù),雙擊Server窗體的Cloud Foundry server,在其控制面板中,點(diǎn)擊“add service”圖標(biāo),在彈出的對話框中,選擇數(shù)據(jù)源的類型和輸入服務(wù)的名稱,點(diǎn)擊“Finish”按鈕即可.然后,將Services面板的數(shù)據(jù)源服務(wù)拖到Application Services面板.這樣,在應(yīng)用中才能通過標(biāo)識連接到該數(shù)據(jù)源.
系統(tǒng)采用Spring框架進(jìn)行開發(fā),系統(tǒng)開發(fā)的技術(shù)框架如圖1所示,用Spring Security進(jìn)行用戶認(rèn)證設(shè)計(jì)[4].在應(yīng)用配置文件中引用云上定義的數(shù)據(jù)源,要用到cloud名空間的標(biāo)簽.以下配置代碼引用云上標(biāo)識為“mysql”的數(shù)據(jù)源,并根據(jù)該數(shù)據(jù)源建立JdbcTemplate對象[5],將與數(shù)據(jù)源連接的jdbcTemplate定義為一個Bean:
圖1 系統(tǒng)開發(fā)環(huán)境及技術(shù)
其他Bean要訪問數(shù)據(jù)庫可通過屬性依賴引用jdbcTemplate即可.
連接云數(shù)據(jù)庫后,需要編寫相應(yīng)的程序執(zhí)行SQL語句建立表格,并通過程序?qū)?shù)據(jù)導(dǎo)入到表格中.文中程序所涉及的各表的字段含義解釋如下:
(1)單選題表(danxuan)、多選題表(mxuan)結(jié)構(gòu)相同,含字段有number為題號,content為試題內(nèi)容,diff為難度,knowledge為所屬知識點(diǎn),answer為答案.
(2)考試參數(shù)配置表(config)含字段有knowledges為考核知識點(diǎn)的集合,sxamount為單選題的數(shù)量,sxscore為單選題的小題分?jǐn)?shù)…….其中,knowledges為一個文本串,列出所有考核知識點(diǎn),每個知識點(diǎn)用單引號括住,知識點(diǎn)之間用逗號分隔.
1.3 Cloud Foundry上Web應(yīng)用的工程要求
Cloud Foundry不支持動態(tài)Web工程,需要利用Maven Web工程或者利用Spring MVC模板工程來創(chuàng)建工程.在工程的依賴管理項(xiàng)目中,除了添加Spring框架、Spring安全框架、AOP以及Web應(yīng)用所需典型Jar包依賴項(xiàng)外,為支持Cloud Foundry,還需要在工程的pom.xml文件中添加工件標(biāo)識為“cloudfoundry-runtime”的依賴項(xiàng),并在pom.xml文件中添加Spring框架的Milestone遠(yuǎn)程倉庫,該倉庫含有cloudfoundry運(yùn)行時的jar包.
在試卷處理不同階段,需要試卷的不同信息.例如:組卷階段只要記錄大題類型、各小題編號;顯示試卷時則需要大題名稱、各小題的內(nèi)容;評卷階段只要大題的每小題分值、各小題答案.因此,應(yīng)用設(shè)計(jì)中對試卷信息進(jìn)行各自的封裝設(shè)計(jì),試卷傳遞只傳遞基本信息,其他信息可根據(jù)基本信息查閱數(shù)據(jù)庫得到.
實(shí)現(xiàn)試卷在應(yīng)用各功能之間傳遞有多種方法,例如用session對象、用Cookie變量.該系統(tǒng)選擇采用URL參數(shù)傳遞,其好處是不用消耗客戶方和服務(wù)方的資源.但用URL傳遞試卷對象需要將對象轉(zhuǎn)換為字符串,否則,對象不能直接作為URL參數(shù).該系統(tǒng)是用Google的Gson工具實(shí)現(xiàn)對象與Json串的變換[6].另外,還需要對變換后的內(nèi)容進(jìn)行URL編碼處理.
2.1 組卷相關(guān)數(shù)據(jù)對象的封裝設(shè)計(jì)
定義以下類用來封裝記錄組好的試卷的相關(guān)信息.整個試卷由若干題型構(gòu)成,每個題型由若干試題構(gòu)成.系統(tǒng)假定每道大題的各小題分配相同分值.
(1)用Question類記錄下某類題型的抽題信息.包括題型編碼、每小題分值以及抽到的試題編號構(gòu)成的數(shù)組.
(2)用ExamPaper類中記錄整個抽取的試卷.用ExamPaper封裝整個試卷是為了方便后面的Json包裝處理.將Json串轉(zhuǎn)換為對象時,可通過ExamPaper類指示要轉(zhuǎn)換的目標(biāo).
2.2 組卷業(yè)務(wù)邏輯程序
根據(jù)組卷參數(shù)要求,組卷程序從數(shù)據(jù)庫抽取試題組卷.在類ExamPaper中設(shè)計(jì)了2個方法.genPaper方法將根據(jù)數(shù)據(jù)庫存儲的組卷參數(shù)要求進(jìn)行組卷,它會調(diào)用pickst方法實(shí)現(xiàn)具體某個題型的抽題處理.
pickst方法在知識點(diǎn)范圍隨機(jī)選題,使用SQL的in關(guān)鍵詞選取,這里未考慮難度要求.算法可自動適應(yīng)課程的實(shí)際試題數(shù)量,數(shù)量不足時按實(shí)際數(shù)量選取.方法的參數(shù)包括數(shù)據(jù)庫表格名、選題數(shù)量、知識點(diǎn)范圍等,方法的返回結(jié)果為選中試題編號構(gòu)成的數(shù)組.限于篇幅,該方法代碼略.
2.3 組卷MVC控制器
組卷控制器將調(diào)用組卷算法完成組卷,并設(shè)置試卷顯示視圖需要的模型參數(shù).為方便考卷的解答顯示處理,引入類DisplayPaper封裝試卷顯示所需的信息.考慮到既要傳遞組卷給后續(xù)頁面,又要顯示試卷,在模型中分別用paper和disppaper屬性記錄組卷和顯示試卷內(nèi)容.因?yàn)閭鬟f給視圖的paper要通過在后續(xù)頁面中用表單的URL傳遞,所以除了要進(jìn)行串行化處理外,還需要進(jìn)行URL編碼處理.另一種辦法是采用表單的隱含域傳遞,則可以不必進(jìn)行URL編碼處理.
其中,在控制器的邏輯中還用到2個私有方法:一個是getTxName,根據(jù)題型type得到題型的文字描述,可以根據(jù)題型數(shù)量擴(kuò)展;另一個是getContent,根據(jù)題型和試題編號得到試題內(nèi)容.
2.4 試卷顯示視圖(display.jsp)
視圖文件給出試卷的顯示模板,試卷顯示除了解決試卷內(nèi)容的顯示外,還需要提供用戶解答控件,如圖2所示.這里用戶解答控件的命名按“data”+大題號+“-”+小題號的拼接方式.程序中在顯示處理上使用了一些技巧,包括通過EL變量實(shí)現(xiàn)試題序號的顯示,用JSTL的forTokens標(biāo)簽實(shí)現(xiàn)解答選項(xiàng)的輸出,使用JSTL的函數(shù)庫中substring方法提取文字串的中文數(shù)字等.
3.1 閱卷方法設(shè)計(jì)
閱卷處理可以不必引入額外類記錄試卷信息,而是在前面組卷傳遞的試卷信息的基礎(chǔ)上進(jìn)行處理,只是各小題的答案要根據(jù)試題編號和題型從數(shù)據(jù)庫獲得.評閱某個大題時,可以將小題標(biāo)準(zhǔn)答案放入數(shù)組中,與用戶輸入解答構(gòu)成的數(shù)組元素逐個比較.
在ExamPaper類增加一個givescore方法對閱卷邏輯進(jìn)行封裝.givescore方法的參數(shù)有題型、標(biāo)準(zhǔn)答案、學(xué)生解答、小題分?jǐn)?shù),它將對某類題型的解答進(jìn)行判分.方法的返回結(jié)果為一個含2個元素的數(shù)組,分別為某個題型的學(xué)生得分和總分.
3.2 閱卷控制器的邏輯
閱卷控制器是與用戶的接口,控制器通過REST風(fēng)格的服務(wù)處理用戶提交的請求.用戶通過頁面表單提交解答,并通過URL參數(shù)傳遞用Json串封裝的試卷.閱卷控制器工作包括解開Json試卷,對試卷的各大類試題循環(huán)處理,通過HttpServletRequest對象的getParameter(“控件名”)方法得到學(xué)生的解答.將解答與根據(jù)試題編號獲取的答案進(jìn)行比對評分,并計(jì)算總得分.最后登記學(xué)生的考卷和解答.
3.3 學(xué)生得分顯示視圖
得分顯示視圖中用EL表達(dá)式獲取來自模型的分?jǐn)?shù),經(jīng)Javascript腳本彈出對話框顯示學(xué)生得分,并通過執(zhí)行頁面重定向?qū)㈨撁鎸?dǎo)向到系統(tǒng)首頁,防止學(xué)生回退[7],從而避免反復(fù)交卷試出答案.
介紹了一個采用Spring MVC設(shè)計(jì)的網(wǎng)絡(luò)考試系統(tǒng),用maven工程構(gòu)建應(yīng)用,數(shù)據(jù)存儲采用來自云的mysql數(shù)據(jù)庫.重點(diǎn)討論了組卷、解答試卷、評閱試卷等環(huán)節(jié)所涉及的試卷信息的模型設(shè)計(jì)以及視圖顯示處理方法,實(shí)際系統(tǒng)中還提供了學(xué)生查卷等功能,并提供了更為多樣的題型,限于篇幅未展開.該系統(tǒng)已部署在Cloud Foundry云環(huán)境,在Java等課程的考試中應(yīng)用,希望對基于Cloud Foundry云環(huán)境的Web數(shù)據(jù)庫應(yīng)用開發(fā)有所參考.
[1] 林 利,石文昌.構(gòu)建云計(jì)算平臺的開源軟件綜述[J].計(jì)算機(jī)科學(xué),2012,39(11):1-6.
[2] 丁振凡.基于Spring的網(wǎng)絡(luò)考試系統(tǒng)的服務(wù)設(shè)計(jì)[J].吉首大學(xué)大學(xué)學(xué)報:自然科學(xué)版,2013,34(1):21-25.
[3] 丁振凡.用Spring MVC實(shí)現(xiàn)數(shù)據(jù)分頁顯示處理[J].智能計(jì)算機(jī)與應(yīng)用,2012,2(5):20-22.
[4] 丁振凡.基于Spring Security的Web資源訪問控制[J].宜春學(xué)院學(xué)報,2012,34(8):71-74.
[5] 丁振凡,李馨梅.基于JdbcTemplate的數(shù)據(jù)庫訪問處理[J].智能計(jì)算機(jī)與應(yīng)用,2012,2(3):29-32.
[6] 丁振凡.Spring REST風(fēng)格Web服務(wù)的Json消息封裝及解析研究[J].智能計(jì)算機(jī)與應(yīng)用,2012,2(2):9-11.
[7] 丁振凡.Web編程實(shí)踐教程[M].北京:清華大學(xué)出版社,2011:261-262.
摘 要:討論一個具Hysteresis的電報方程.首先給出Ishlinskiǐhysteresis算子的一些性質(zhì),然后得到這個方程C1+α,α強(qiáng)解存在性.
關(guān)鍵詞:Ishlinskiǐhysteresis算子;電報方程;單調(diào)算子;強(qiáng)解
(責(zé)任編輯 向陽潔)
Implementation of Network Examination System Based on Cloud Foundry Platform
DING Zhen-fan
(School of Information Engineering,East China Jiaotong University,Nanchang 330013,China)
The design of network examination system based on Cloud Foundry platform is introduced.By adding a“Cloud Foundry Integration”extension in the STS environment,developers can visually deploy and manage the applications in Cloud Foundry platform through the virtual machine.By using cloud services,application can access the MySQL database on the cloud.Focusing on test paper generation,test paper display,and scoring process in the examination system,the author introduces programming methods about the controller,model and view based on Spring MVC framework.The system uses the Json string to transfer test paper information between web pages.
Cloud Foundry;access to Cloud database;examination system;MVC development model
(責(zé)任編輯 向陽潔)
一個具Hysteresis的電報方程
徐龍封1,薛 亮1,2
(1.安徽工業(yè)大學(xué)數(shù)理學(xué)院,安徽馬鞍山 243002;2.安徽工業(yè)職業(yè)技術(shù)學(xué)院基礎(chǔ)部,安徽銅陵 244000)
TP393
A
10.3969/j.issn.1007-2985.2013.05.008
1007-2985(2013)05-0031-06
2013-05-17
丁振凡(1965-),男,江西豐城人,華東交通大學(xué)信息工程學(xué)院教授,碩士生導(dǎo)師,主要從事云計(jì)算、語義Web、計(jì)算機(jī)輔助教學(xué)研究.
A