freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于ssh的計(jì)算機(jī)基礎(chǔ)知識(shí)在線(xiàn)考試系統(tǒng)畢業(yè)論文-資料下載頁(yè)

2025-07-01 10:33本頁(yè)面

【導(dǎo)讀】20xx屆普通本科畢業(yè)論文(設(shè)計(jì))存檔編號(hào):. 湖北經(jīng)濟(jì)學(xué)院教務(wù)處制

  

【正文】 除了 param標(biāo)簽中方法之外的所有方法進(jìn)行攔截了 。 在訪(fǎng)問(wèn)需要用戶(hù)登錄的 URL時(shí),若用戶(hù)未登錄或 session失效,就會(huì)跳轉(zhuǎn)至 globalresults中定義的頁(yè)面,這里是 頁(yè)面。 Struts2 攔截器 要實(shí)現(xiàn) 登錄 攔截 的功 能, 最關(guān) 鍵的 就 是要 實(shí)現(xiàn) 攔截 類(lèi)了 。創(chuàng)建AuthorityInterceptor 類(lèi),并繼承 MethodFilterInterceptor,為什么繼承它呢?因?yàn)檫@個(gè)類(lèi)是對(duì)方法進(jìn)行攔截,而在本系統(tǒng)中,需要是對(duì)大部分的方法展開(kāi)攔截,而只需要對(duì)少數(shù)幾個(gè)方法進(jìn)行排除。 從 session 中獲取當(dāng)前登錄的用戶(hù)信息,如果該用戶(hù)存在,則繼續(xù)遞歸執(zhí)行后面的攔截器;否則,將會(huì)跳 轉(zhuǎn)到 配置文件中規(guī)定的調(diào)轉(zhuǎn)頁(yè)面,本系統(tǒng)中指定的是登陸頁(yè)面。所以這樣實(shí)現(xiàn)了代碼后,還要在 中進(jìn)行相應(yīng)的設(shè)置,前面在解析 文件的時(shí)候,已講述了這部分。 基于注解的 struts action跳轉(zhuǎn) 1. 跳轉(zhuǎn)至某個(gè)頁(yè)面。 這里以退出系統(tǒng)為例。如下面的代碼段所示, @Action 括號(hào)里面的 value 表示當(dāng)前處理請(qǐng)求的 action,同 form表單中 action 的值相同。 results 屬性表示 action執(zhí)行后要返回的結(jié)果集: @Result 就表示一個(gè)結(jié)果,其中的 name 就是返 回的值,而 location 就是根據(jù) name 的值確定的將要跳轉(zhuǎn)的頁(yè)面。 results 里面可以有多個(gè)public class AuthorityInterceptor extends MethodFilterInterceptor { @Override protected String doIntercept(ActionInvocation ai) throws Exception { Object user = ().getSession().getAttribute(user)。 if (user != null){ return ()。 //遞歸調(diào)用攔截器 } else { return 。 //返會(huì)登陸頁(yè)面 } } } 36 @Result,以逗號(hào)隔開(kāi)。在這里用戶(hù)成功退出系統(tǒng)后將調(diào)轉(zhuǎn)到到登陸頁(yè)面,即,當(dāng)然 name 的值不一定是 success,可以是任意一個(gè)你指定的值,只需和 return 的值保持一致即可。 //退出系統(tǒng) @Action(value=logout, results={ @Result(name=success, location=/)}) public String logout(){ HttpServletRequest request = ()。 HttpSession session = ()。 if ((user) != null){ (user)。 (role)。 } return success。 } 2. 跳轉(zhuǎn)至某個(gè) action。 有時(shí) action 執(zhí)行后需要返回到另一個(gè) action,這時(shí)就需要在 @Result 里面指定跳轉(zhuǎn)類(lèi)型 dispatcher 為默認(rèn)跳轉(zhuǎn)類(lèi)型 type=redirectAction, 因?yàn)?struts2 跳轉(zhuǎn)類(lèi)型為dispatcher,用于返回一個(gè)視圖資源 (如 :jsp)。這里以刪除管理員為例,當(dāng)添加一位管理員后,將會(huì)跳轉(zhuǎn)至 ,經(jīng)此跳轉(zhuǎn)至管理員列表頁(yè)面。 //添加管理員 @Action(value=adminadd, results={ @Result(name=success, type=redirectAction, location=adminlist)}) public String adminAdd(){ try { HttpServletRequest request = ()。 String username = (username)。 String password = (password)。 Admin admin = new Admin(username, password)。 (admin)。 return success。 } catch (Exception e){ ()。 return fail。 } } Action處理 AJAX異步請(qǐng)求 AJAX 通過(guò)在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,可以使網(wǎng)頁(yè)實(shí)現(xiàn)異步更新 。這里以分頁(yè)查詢(xún)考生成績(jī)信息為例介紹 Action 和 Ajax 數(shù)據(jù)交換過(guò)程。 1. 發(fā)送 Ajax 異步請(qǐng)求: $.ajax({ type:39。POST39。, url:39。%=_path%/reportsByFilter39。, data:{...}, success: function(data){ ... } })。 接收請(qǐng)求并處理。 37 1) action 中方法返回值設(shè)為 void: //分頁(yè)查詢(xún)指定條件下的考生成績(jī)信息 @Action(value=reportsByFilter) public void allDetailReportByFilter(){} 2) 在 Action 中將處理結(jié)果返回 Ajax: //分頁(yè)查詢(xún)指定條件下的考生成績(jī)信息 HttpServletResponse response = ()。 (text/html。charset=utf8)。 ().write(...)。 這里 write 中的省略號(hào)表示要返回的數(shù)據(jù)。若是返回字符串則可直接 write寫(xiě)出,如 write(success)。若要返回其他形式的數(shù)據(jù),需先將其轉(zhuǎn)換成 json格式的數(shù)據(jù),如 write(jsonStr),jsonStr 為轉(zhuǎn)換的 json 格式的字符串。如: String jsonStr = new ObjectMapper().writeValueAsString(reports)。 reports 為查詢(xún)到的成績(jī)對(duì)象列表。 3. Ajax 接收 action 返回的數(shù)據(jù)并處理。 在 Ajax 的 success 方法里面的 data 就是返回的數(shù)據(jù)。若返回的是一般字符串,則可直接使用,如 var str = data。若返回的 是 json 對(duì)象,則需要將 data進(jìn)行轉(zhuǎn)換后再使用。 填空題評(píng)分方法 填空題答案既有客觀(guān)性,也有主觀(guān)性。為了快速合理、準(zhǔn)確無(wú)誤的自動(dòng)評(píng)分,研究了相關(guān)文獻(xiàn),發(fā)現(xiàn)填空題具有一題多空、答案多值及相鄰答案可以相互換位等特點(diǎn)。設(shè)計(jì)出每個(gè)空格分值相同、答案無(wú)標(biāo)點(diǎn)無(wú)復(fù)合的出題規(guī)則,并使用核心詞匯和豎線(xiàn)連接考試答案的描述規(guī)則,以及采用混合匹配及兩種結(jié)果的評(píng)分策略。由此設(shè)計(jì)實(shí)現(xiàn)了填空題自動(dòng)評(píng)分算法,經(jīng)系統(tǒng)驗(yàn)證,此算法能滿(mǎn)足通用填空題的需求。 根據(jù)填空題的特點(diǎn)及自動(dòng)評(píng)分的要求,確定試題的編制規(guī)則如下: 1)空格同分 值 在同一份試卷最后那個(gè),每個(gè)空格具有相同的分值,以簡(jiǎn)化評(píng)分流程,從而快速的自動(dòng)評(píng)分。 2)答案無(wú)標(biāo)點(diǎn) 試題答案中不含標(biāo)點(diǎn)符號(hào),以減少考生在輸入中出現(xiàn)錯(cuò)誤,從而合理自動(dòng)的38 評(píng)分。 解答填空題時(shí),考生總是習(xí)慣根據(jù)自己對(duì)知識(shí)點(diǎn)的理解程度和思維習(xí)慣給出答案。要實(shí)現(xiàn)系統(tǒng)對(duì)填空題的準(zhǔn)確且有效自動(dòng)評(píng)分,就一定要按照某種正確的規(guī)則來(lái)設(shè)置考試題目的標(biāo)準(zhǔn)答案,這個(gè)規(guī)則不僅僅要具有簡(jiǎn)單性和一致性,還要能方便的在實(shí)際中應(yīng)用。 1)使用核心詞匯 為了使標(biāo)準(zhǔn)答案能夠簡(jiǎn)化而且能夠快速有效的自動(dòng)評(píng)分,每個(gè)空格的標(biāo)準(zhǔn)答案應(yīng)該是與考核的知識(shí)點(diǎn)具有相同的核心詞匯。所謂核心詞匯,就是“凡是可以得分的答案中所必須包含的詞匯”。 2)使用豎線(xiàn)連接 當(dāng)某個(gè)空格答案有多種時(shí),使用特定的符號(hào)將其進(jìn)行連接,這里以豎線(xiàn)“ |”為例。具體規(guī)則是:如果一個(gè)空格的答案有多種,將多個(gè)答案同通過(guò)豎線(xiàn)連接在一起并以此來(lái)作為標(biāo)準(zhǔn)答案;如果相鄰的空格答案并列,則將并列的答案連接在一起作為每個(gè)空格標(biāo)準(zhǔn)答案。 1)進(jìn)行混合匹配:遍歷每一個(gè)空格,首先判斷考生答案與標(biāo)準(zhǔn)答案是否精確匹配,若不是精確匹配,再判斷是否模糊匹配。 2)只取兩種結(jié)果:對(duì)于每個(gè)空 格,要么得分,要么不得分。 1)自動(dòng)評(píng)分的流程 如果考生的答案與標(biāo)準(zhǔn)答案精確匹配,則直接計(jì)分。在考生答案與標(biāo)磚答案模糊匹配的前提下,先判斷是否有并列的空格,如果不是,計(jì)分,并同時(shí)創(chuàng)建臨時(shí)數(shù)組用來(lái)存放匹配的標(biāo)準(zhǔn)答案;如果是并列空格,再判斷是否是重復(fù)答案,如果不是重復(fù)答案,計(jì)分,并將已經(jīng)匹配的標(biāo)準(zhǔn)答案加到臨時(shí)數(shù)組當(dāng)中。自動(dòng)評(píng)分的流程圖如圖 51所示。 39 2) 編碼實(shí)現(xiàn) // @param canAnswer 考生答案 @param modelAnswer 標(biāo)準(zhǔn)答案 public class BlankScore { public static int autoScore(String []canAnswer, String []modelAnswer, int point){ int score = 0, count = 0。 //總分?jǐn)?shù)和 臨時(shí)數(shù)組下標(biāo) 。 String temp[] = new String[10]。 //臨時(shí)數(shù)組,存放匹配答案 for (int i = 0。 i 。 i++){ if (!(canAnswer[i])){ //考生答案存在 if (canAnswer[i].equals(modelAnswer[i])){ score += point。//考生答案等于標(biāo)準(zhǔn)答案,計(jì)分,到達(dá)下一個(gè)空格 } else { //空格答案多值或多個(gè)空格答案并列的情況下,對(duì)答案關(guān)鍵字進(jìn)行分解 String str[] = modelAnswer[i].split(\\|)。 for (int j = 0。 j 。 j++){ if (canAnswer[i].contains(str[j])){ //考生答案匹配標(biāo)準(zhǔn)答案 if (i0 amp。amp。 modelAnswer[i].equals(modelAnswer[i1])){ //標(biāo)準(zhǔn)答案與前一個(gè)相同 int k。 for (k = 0。 k count。 k++){ if (canAnswer[i].contains(temp[k])){ break。//考 生答案匹配臨時(shí)數(shù)組元素,表明答案重復(fù),到達(dá)下一個(gè)空格 圖 51 自動(dòng)評(píng)分流程圖 40 } } if (k == count){ //考生答案與臨時(shí)數(shù)組元素不匹配,將匹配答案加入臨時(shí)數(shù)組,到達(dá)下一空格 score += point。 temp[count++] = str[j]。 } } else { score += point。 //標(biāo)準(zhǔn)答案與前一個(gè)不同,計(jì)分 count = 0。 } break。 } } } } } return score。 } } 41 第 6章 總結(jié) 經(jīng)過(guò) 20 多天的辛苦努力,總于完成了在線(xiàn)考試系統(tǒng)( Online Test)的設(shè)計(jì)與論文的編寫(xiě)。在系統(tǒng)開(kāi)發(fā)的過(guò)程中,采用了 SSH 全注解框架,使整個(gè)系統(tǒng)的設(shè)計(jì)思路更加清晰,而在頁(yè)面部分應(yīng)用 bootstrap 框架,是頁(yè)面代碼更加簡(jiǎn)潔明了。同時(shí),為了使系統(tǒng)更人性化,系統(tǒng)中還采用了 Ajax 技術(shù)實(shí)現(xiàn)在線(xiàn)考試時(shí)間倒計(jì)時(shí)等功能。 在系統(tǒng)開(kāi)發(fā)初期,我用了兩三天的時(shí)間分析系統(tǒng)的需求,確定數(shù)據(jù)庫(kù)設(shè)計(jì)及系 統(tǒng)流程。顯然,在寫(xiě)代碼之前,這是一個(gè)必不可少的過(guò)程,只有系統(tǒng)需求確定了,才不會(huì)在后面系統(tǒng)的開(kāi)發(fā)中由于需求的不確定而做很多無(wú)用功。 在開(kāi)發(fā)在線(xiàn)考試系統(tǒng)的過(guò)程中,遇到了很大困難。其中最大的困難便是系統(tǒng)的搭建。由于大學(xué)的課程中沒(méi)有完整的 SSH 框架講解課程,尤其是全注解的方式,在一定程度上加大了系統(tǒng)開(kāi)發(fā)難度。通過(guò)在網(wǎng)上查找資料和無(wú)數(shù)次的錯(cuò)誤嘗試后,系統(tǒng)開(kāi)發(fā)框架最終搭建完成。接下來(lái)便是寫(xiě)代碼階段,首先把后臺(tái)基本功能完成,然后通過(guò)頁(yè)面進(jìn)行測(cè)試,功能全部完成后,則開(kāi)始做頁(yè)面的優(yōu)化工作。在這里不得不說(shuō) bootstrap 真是 一個(gè)很好用的框架,不僅使用簡(jiǎn)單,而且功能齊全,大大減少了頁(yè)面開(kāi)發(fā)的困難。 在系統(tǒng)實(shí)施階段,遇到的另一個(gè)困難便是填空題的自動(dòng)評(píng)分功能,最開(kāi)始毫無(wú)頭緒,后來(lái)在網(wǎng)上看到一篇論文專(zhuān)門(mén)研究填空題自動(dòng)評(píng)分算法,通過(guò)一天時(shí)間的研究,用自己的思路實(shí)現(xiàn)了這個(gè)算法,在前面的關(guān)鍵代碼分析一掌中已進(jìn)行了詳細(xì)說(shuō)明,這里就不再贅述。 雖然在系統(tǒng)開(kāi)發(fā)中遇到很多困難,但是收獲也是蠻多的。收獲之一便是對(duì)SSH 框架已經(jīng)達(dá)到很熟悉的程度,再也沒(méi)有之前望而生畏的感覺(jué),并且學(xué)會(huì)了一種新的使用方式,即使用注解。另一個(gè)收獲則是學(xué)會(huì)如何使用 Ajax 和 struts 的action 異步
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1