基于python的網(wǎng)絡(luò)爬蟲設(shè)計(完整資料)_第1頁
基于python的網(wǎng)絡(luò)爬蟲設(shè)計(完整資料)_第2頁
基于python的網(wǎng)絡(luò)爬蟲設(shè)計(完整資料)_第3頁
基于python的網(wǎng)絡(luò)爬蟲設(shè)計(完整資料)_第4頁
基于python的網(wǎng)絡(luò)爬蟲設(shè)計(完整資料)_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

基于python的網(wǎng)絡(luò)爬蟲設(shè)計(完整資料)(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)

基于python的網(wǎng)絡(luò)爬蟲設(shè)計基于python的網(wǎng)絡(luò)爬蟲設(shè)計(完整資料)(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)【摘要】近年來,隨著網(wǎng)絡(luò)應(yīng)用的逐漸擴展和深入,如何高效的獲取網(wǎng)上數(shù)據(jù)成為了無數(shù)公司和個人的追求,在大數(shù)據(jù)時代,誰掌握了更多的數(shù)據(jù),誰就可以獲得更高的利益,而網(wǎng)絡(luò)爬蟲是其中最為常用的一種從網(wǎng)上爬取數(shù)據(jù)的手段。網(wǎng)絡(luò)爬蟲,即WebSpider,是一個很形象的名字。如果把互聯(lián)網(wǎng)比喻成一個蜘蛛網(wǎng),那么Spider就是在網(wǎng)上爬來爬去的蜘蛛。網(wǎng)絡(luò)蜘蛛是通過網(wǎng)頁的鏈接地址來尋找網(wǎng)頁的。從網(wǎng)站某一個頁面(通常是首頁)開始,讀取網(wǎng)頁的內(nèi)容,找到在網(wǎng)頁中的其它鏈接地址,然后通過這些鏈接地址尋找下一個網(wǎng)頁,這樣一直循環(huán)下去,直到把這個網(wǎng)站所有的網(wǎng)頁都抓取完為止.如果把整個互聯(lián)網(wǎng)當成一個網(wǎng)站,那么網(wǎng)絡(luò)蜘蛛就可以用這個原理把互聯(lián)網(wǎng)上所有的網(wǎng)頁都抓取下來.那么,既然網(wǎng)絡(luò)爬蟲有著如此先進快捷的特點,我們該如何實現(xiàn)它呢?在眾多面向?qū)ο蟮恼Z言中,首選python,因為python是一種“解釋型的、面向?qū)ο蟮摹в袆討B(tài)語義的”高級程序,可以使人在編程時保持自己的風格,并且編寫的程序清晰易懂,有著很廣闊的應(yīng)用前景.關(guān)鍵詞python爬蟲數(shù)據(jù)1前言1.1本編程設(shè)計的目的和意義隨著網(wǎng)絡(luò)的迅速發(fā)展,萬維網(wǎng)成為大量信息的載體,如何有效地提取并利用這些信息成為一個巨大的挑戰(zhàn)。搜索引擎(例如傳統(tǒng)的通用搜索引擎AltaVista,Yahoo!和Google等)作為一個輔助人們檢索信息的工具成為用戶訪問萬維網(wǎng)的入口和指南。但是,這些通用性搜索引擎也存在著一定的局限性,如:(1)不同領(lǐng)域、不同背景的用戶往往具有不同的檢索目的和需求,通用搜索引擎所返回的結(jié)果包含大量用戶不關(guān)心的網(wǎng)頁。(2)通用搜索引擎的目標是盡可能大的網(wǎng)絡(luò)覆蓋率,有限的搜索引擎服務(wù)器資源與無限的網(wǎng)絡(luò)數(shù)據(jù)資源之間的矛盾將進一步加深。(3)萬維網(wǎng)數(shù)據(jù)形式的豐富和網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,圖片、數(shù)據(jù)庫、音頻/視頻多媒體等不同數(shù)據(jù)大量出現(xiàn),通用搜索引擎往往對這些信息含量密集且具有一定結(jié)構(gòu)的數(shù)據(jù)無能為力,不能很好地發(fā)現(xiàn)和獲取。(4)通用搜索引擎大多提供基于關(guān)鍵字的檢索,難以支持根據(jù)語義信息提出的查詢。為了解決上述問題,定向抓取相關(guān)網(wǎng)頁資源的聚焦爬蟲應(yīng)運而生。聚焦爬蟲是一個自動下載網(wǎng)頁的程序,它根據(jù)既定的抓取目標,有選擇的訪問萬維網(wǎng)上的網(wǎng)頁與相關(guān)的鏈接,獲取所需要的信息。與通用爬蟲(generalpurposewebcrawler)不同,聚焦爬蟲并不追求大的覆蓋,而將目標定為抓取與某一特定主題內(nèi)容相關(guān)的網(wǎng)頁,為面向主題的用戶查詢準備數(shù)據(jù)資源。1。2編程設(shè)計目及思路1。2。1編程設(shè)計目的學(xué)習(xí)了解并熟練掌握python的語法規(guī)則和基本使用,對網(wǎng)絡(luò)爬蟲的基礎(chǔ)知識進行了一定程度的理解,提高對網(wǎng)頁源代碼的認知水平,學(xué)習(xí)用正則表達式來完成匹配查找的工作,了解數(shù)據(jù)庫的用途,學(xué)習(xí)mongodb數(shù)據(jù)庫的安裝和使用,及配合python的工作。1。2。2設(shè)計思路以世紀佳緣網(wǎng)為例,思考自己所需要的數(shù)據(jù)資源,并以此為基礎(chǔ)設(shè)計自己的爬蟲程序。應(yīng)用python偽裝成瀏覽器自動登陸世紀佳緣網(wǎng),加入變量打開多個網(wǎng)頁.通過python的urllib2函數(shù)進行世紀佳緣網(wǎng)源代碼的獲取。用正則表達式分析源代碼,找到所需信息導(dǎo)入excel。連接數(shù)據(jù)庫,將爬下的數(shù)據(jù)存儲在數(shù)據(jù)庫中。1.3本編程設(shè)計應(yīng)達到的要求1、對特定的網(wǎng)站爬取特定的數(shù)據(jù);2、實現(xiàn)代碼和得到結(jié)果;3、能夠和數(shù)據(jù)庫進行連接,將爬下的數(shù)據(jù)存儲在數(shù)據(jù)庫中。4、將爬下的數(shù)據(jù)儲存在excel中方便編輯.2編程設(shè)計方案2.1爬取方案2.1.1所需爬取的數(shù)據(jù)以世紀佳緣網(wǎng)為例,所需要爬取的數(shù)據(jù)為注冊世紀佳緣網(wǎng)的人的用戶名、真實姓名、性別、年齡、學(xué)歷、月收入這些直觀信息。2.1。2用python獲取世紀佳緣網(wǎng)的源代碼爬蟲最主要的處理對象就是URL,它根據(jù)URL地址取得所需要的文件內(nèi)容,然后對它進行進一步的處理.因此,準確地理解URL對理解網(wǎng)絡(luò)爬蟲至關(guān)重要。URL是URI的一個子集。它是UniformResourceLocator的縮寫,譯為“統(tǒng)一資源定位符".通俗地說,URL是Internet上描述信息資源的字符串,主要用在各種WWW客戶程序和服務(wù)器程序上。采用URL可以用一種統(tǒng)一的格式來描述各種信息資源,包括文件、服務(wù)器的地址和目錄等。URL的格式由三部分組成:

①第一部分是協(xié)議(或稱為服務(wù)方式).②第二部分是存有該資源的主機IP地址(有時也包括端口號)。③第三部分是主機資源的具體地址,如目錄和文件名等。第一部分和第二部分用“://”符號隔開,第二部分和第三部分用“/”符號隔開。第一部分和第二部分是不可缺少的,第三部分有時可以省略。例如:http://www.rol。cn.net/talk/talk1。htm

其計算機域名為www。rol.c;超級文本文件(文件類型為.html)是在目錄/talk下的talk1.htm.這是瑞得聊天室的地址,可由此進入瑞得聊天室的第1室。Python獲取網(wǎng)頁源代碼可用urllib或urllib2函數(shù)進行,極其方便快捷,代碼如下:import

urllib2

response

=

urllib2。urlopen('http://www.baidu.com/')

html

response.read()

print

html

2.1.3應(yīng)用python偽裝成瀏覽器自動登陸世紀佳緣網(wǎng),加入變量打開多個網(wǎng)頁.有了源代碼就可以進行數(shù)據(jù)的爬取了,但是因為世紀佳緣網(wǎng)近日進行了改版,簡單的爬蟲程序已經(jīng)無法在對其進行全網(wǎng)頁的爬取工作了,所以,在獲取數(shù)據(jù)之前,需要對爬蟲進行一下偽裝,使其成為一個瀏覽器,以實現(xiàn)全網(wǎng)頁的爬取工作。應(yīng)用opener和header的基礎(chǔ)知識即可實現(xiàn)偽裝成瀏覽器這一步驟.在偽裝的同時,需要加入變量來打開多個網(wǎng)頁,是的爬取工作可以順利進行.代碼如下:r=0w=3013while3012〈w<9999:w=w+1k=str(w)login_page="http://login.jiayuan.com/dologin.php?pre_url=http://usercp.jiayuan.com/”cj=cookielib。CookieJar()opener=urllib2。build_opener(urllib2.HTTPCookieProcessor(cj))opener.addheaders=[('User-agent’,'Mozilla/4。0(compatible;MSIE6.0;WindowsNT5.1)')]dat(yī)a=urllib.urlencode({”name”:"834054996@qq。com",”password":"benben12"})opener。open(login_page,data)op=opener。open("http://www.jiayuan.com/10796”+k)html=op.read()2.14用正則表達式分析網(wǎng)頁源代碼正則表達式是用于處理字符串的強大工具,它并不是Python的一部分。其他編程語言中也有正則表達式的概念,區(qū)別只在于不同的編程語言實現(xiàn)支持的語法數(shù)量不同。它擁有自己獨特的語法以及一個獨立的處理引擎,在提供了正則表達式的語言里,正則表達式的語法都是一樣的。下圖為使用正則表達式進行匹配的流程:正則表達式的大致匹配過程是:1。依次拿出表達式和文本中的字符比較,2。如果每一個字符都能匹配,則匹配成功;一旦有匹配不成功的字符則匹配失敗。3。如果表達式中有量詞或邊界,這個過程會稍微有一些不同。Python是通過re模塊實現(xiàn)對正則表達式的調(diào)用的。程序代碼如下:find_re=re。compile(r"absolute.+?span>(.*?)</。+?&gt;&gt;〈/a>(。*?)</h2>.+?〈/b>(.*?)〈/s。+?</b>(。*?)〈/s。+?〈/b>(.*?)</sp.+?</b>(.*?)〈/sp.+?</b〉”,re.DOTALL)2.2存儲方案2.2。1儲存在excel表格中Excel表格具有方便篩選、查找和編輯的特點,所以將網(wǎng)絡(luò)爬蟲爬取的數(shù)據(jù)儲存在excel表格中是首選。使用python建立excel表格是十分容易,代碼如下:filename=xlwt。Workbook()sheet=filename。add_sheet(’name')建立完成后可將數(shù)據(jù)寫入excel表格:forainx:sheet.write(r,0,a[0].decode("utf-8"))sheet.write(r,1,a[1].decode("utf-8”))sheet。write(r,2,a[2]。decode("utf-8"))sheet.write(r,3,a[3].decode(”utf—8"))sheet.write(r,4,a[4].decode("utf-8"))sheet。write(r,5,a[5].decode("utf-8"))r=r+1printr+3012filename.save(’test3.xls’)2.2.2儲存在數(shù)據(jù)庫中數(shù)據(jù)庫指的是以一定方式儲存在一起、能為多個用戶共享、具有盡可能小的冗余度、與應(yīng)用程序彼此獨立的數(shù)據(jù)集合.將數(shù)據(jù)儲存在數(shù)據(jù)庫中也具有直觀簡潔的特點。Python調(diào)用數(shù)據(jù)庫是用pymongo模塊,創(chuàng)建與導(dǎo)入代碼如下:db=pymongo。Connection()。testforainx:values=dict(img=a[0].decode("utf-8"),infor=a[1]。decode("utf—8"),age=a[2].decode(”utf—8"),adress=a[3].decode("utf-8"),marry=a[4]。decode(”utf—8”))db。user.insert({'values’:values})content=db.user.find()forainx:print’img:'+a[0]。decode(”utf—8")print'infor:'+a[1].decode("utf—8”)print'age:'+a[2].decode(”utf—8”)print'adress:’+a[3]。decode("utf-8")print'marry:’+a[4].decode("utf—8")總結(jié)本程序利用了python語言編寫網(wǎng)絡(luò)爬蟲程序,實現(xiàn)了從世紀佳緣網(wǎng)上爬取用戶數(shù)據(jù)資料,使用urllib函數(shù)以及re模塊、pymongo模塊進行源代碼的獲取、編輯和數(shù)據(jù)的導(dǎo)出,并針對網(wǎng)頁代碼中無性別顯示的問題,采取爬取注冊用戶信息同時爬取注冊用戶照片地址的方式解決,瀏覽所爬取信息時,只需將照片地址輸入瀏覽器地址欄,即可得到所查看用戶上傳的自拍照,得到形象信息??偟膩碚f程序設(shè)計簡便、實用性強、便于讀取和再利用.4、附錄4.1將爬取數(shù)據(jù)儲存在excel表格4.1.1源代碼#coding=gbkimportreimportxlwtimportcookielibimporturllib,urllib2#filename=xlwt。Workbook()sheet=filename.a(chǎn)dd_sheet('name')find_re=re。compile(r”absolute。+?span>(.*?)</.+?&gt;>;</a〉(.*?)〈/h2>.+?〈/b>(.*?)</s.+?〈/b>(.*?)〈/s。+?</b>(。*?)〈/sp。+?〈/b>(。*?)</sp。+?</b>”,re.DOTALL)r=0w=3013while3012<w〈9999:w=w+1k=str(w)login_page=”http://login.jiayua/dologin。php?pre_url=http://usercp。jiayuan。com/”cj=cookielib。CookieJar()opener=urllib2。build_opener(urllib2。HTTPCookieProcessor(cj))opener.addheaders=[(’User-agent','Mozilla/4.0(compat(yī)ible;MSIE6.0;WindowsNT5。1)')]data=urllib。urlencode({"name":"834054996@",”password”:”benben12"})opener.open(login_page,data)op=opener.open(”http://www。jiayuan。com/10796”+k)html=op.read()x=find_re.findall(html)forainx:sheet.write(r,0,a[0].decode("utf-8"))sheet。write(r,1,a[1].decode("utf-8"))sheet。write(r,2,a[2]。decode("utf-8”))sheet。write(r,3,a[3]。decode("utf—8”))sheet.write(r,4,a[4].decode("utf-8”))sheet.write(r,5,a[5].decode(”utf-8”))r=r+1printr+3012filename.save('test3.xls')4。1。2爬取數(shù)據(jù)匯總截圖4.2將爬取數(shù)據(jù)寫入數(shù)據(jù)庫4。2.1源代碼#coding=gbkimporturllibimportreimportpymongodb=pymongo。Connection().testfind_re=pile(r"absolute.+?span〉(.*?)</。+?&gt;&gt;〈/a>(.*?)〈/h2>.+?〈/b〉(。*?)〈/s.+?</b〉(。*?)</s.+?</b〉(.*?)</sp.+?〈/b>”,re。DOTALL)w=11while10<w<20:w=w+1k=str(w)page=urllib.urlopen(”http://www。jiayua/1079608”+k+"?fxly=search_v2_index")html=page。read()x=find_re。findall(html)forainx:values=dict(img=a[0].decode(”utf-8"),infor=a[1].decode("utf-8”),age=a[2].decode(”utf-8"),adress=a[3].decode(”utf-8”),marry=a[4].decode(”utf—8"))db.user.insert({’values’:values})content=db.user。find()forainx:print'img:'+a[0].decode("utf—8")print’infor:'+a[1]。decode("utf—8")print’age:’+a[2].decode(”utf-8”)print'adress:'+a[3].decode("utf-8")print'marry:’+a[4].decode(”utf-8")4.2。2爬取數(shù)據(jù)匯總截圖參考文獻Guidovanrossum《Python手冊》MagnusLieHetlar《python基礎(chǔ)教程》羅剛,王振東《自己動手寫網(wǎng)絡(luò)爬蟲》畢業(yè)設(shè)計(論文)基于jsp(java)網(wǎng)絡(luò)教學(xué)平臺系統(tǒng)的設(shè)計和開發(fā)摘要遠程教育作為現(xiàn)代教育技術(shù)的形式,給教育思想與技術(shù)帶來了革命性的變革,己經(jīng)成為現(xiàn)代教育的必然要求.遠程教育要得以順利、高效的實施,必然離不開高效的管理與支撐平臺環(huán)境。構(gòu)建基于Java技術(shù)的網(wǎng)絡(luò)教學(xué)管理系統(tǒng)是進行遠程教學(xué)的迫切需要.本文首先介紹了遠程教育的發(fā)展狀況,面向?qū)ο蟮南到y(tǒng)開發(fā)平臺以及對Web應(yīng)用系統(tǒng)的支持,對象建模語言UML的基本知識。然后主要介紹了以UML為建模語言,開發(fā)基于JSP/Servlet的網(wǎng)絡(luò)教學(xué)管理系統(tǒng)的過程使用用例圖,順序圖和活動圖來尋找用戶需求,明確用例中對象之間的關(guān)系,從而建立系統(tǒng)的用例模型;分析類,確定了系統(tǒng)中的對象抽象成類:這樣完成了系統(tǒng)分析。在系統(tǒng)設(shè)計過程中,首先設(shè)計系統(tǒng)構(gòu)架,劃分功能模塊,并給出功能設(shè)計。在功能設(shè)計中,構(gòu)建設(shè)計類,運用設(shè)計類順序圖,類圖來實現(xiàn)了系統(tǒng)的設(shè)計模型.數(shù)據(jù)庫設(shè)計給出數(shù)據(jù)庫模型和數(shù)據(jù)庫中各個表的字段結(jié)構(gòu)。最后一章對系統(tǒng)關(guān)鍵實現(xiàn)做了探討,分別實現(xiàn)了用戶身份鑒別,會話跟蹤,數(shù)據(jù)庫連接池和數(shù)據(jù)優(yōu)化并對系統(tǒng)安全作出說明。本文對如何運用面向?qū)ο蟮姆椒▉砜焖俑咝У拈_發(fā)一個復(fù)用性良好的安全的網(wǎng)絡(luò)應(yīng)用程序提供了一個良好的思路。關(guān)鍵詞:遠程教育,教學(xué)管理,UML,網(wǎng)絡(luò)教學(xué)AbstractAsarepresentationofcontemporaryeducation,remoteeducation,whichhasbroughtthetraditionaleducationrevolutionaryideasandtechnologiesandoptimizedtheeducationalresources,hasbeenthetrendofthecontemporaryeducation。Remoteeducationcan'trunwellwithoutanefficientmanagementplatform.ToarchitectateachingmanagementsystemthroughinternetbasedonJSP/Servletbecomesveryimportant。Thepaperfirstintroducesthedevelopmentofremoteeducation,theobject—orienteddevelopmentplatformJSPandthebriefknowledgeofUML。ThenadetailedintroductionisgivenonthedevelopmentprocessofateachingmanagementsystemthroughinternetbasedonJSPwithUMLasmodelinglanguage.Constructingusecasemodelthroughusingusecasediagram,sequencediagramandactivitydiagramtomakeclearuser'srequirementandtherelationbetweenobjectsinusecase.Throughanalysingclassestoconfirmtheobjectsinsystemandabstractthemtoclasses.Sotheanalysisofsystemiscompleted.Amongthedesignprocessofsystem,designingthesystemarchitecture,partitioningthesystemtoseveralsubsystemandfunctionmodelsaccordingtousecasesandgivingthefunctiondesignofonesubsystem。Thefunctiondesignincludestheclassesdesignandthefollowingsequencediagramandclassdiagram。Databasedesigninvolvesadatabaselogicmodelandthestructureofalllabels.Intheend,Iimplementsomekeytechnologiesofsystemsuchasuser’sidentity,sessiontrack,databasepool,dataprocessoptimizingandsystemsecurity。Toensuresecurity,areliableandpracticalsecuritypolicy,inwhichcontainerbaseddeclarativesecurityisdominantandprogrammaticsecurityiscomplementary,isgivenrespectivelytothewebtier,EJItieranddatatierofthesystemaccordingtothesystemframework.Thisarticlealsosuppliesagoodideaonhowtodevelopereusableandsafewebapplicationquicklywithobject—orientedmethodology.Keywords:remoteeducation,leachingmanagement,JSP,UML目錄TOC\o"1—3"\h\zHYPERLINK\l”_Toc139269570”1引言11.1網(wǎng)絡(luò)教學(xué)系統(tǒng)的技術(shù)1_Toc139269574"2。1web系統(tǒng)應(yīng)用研究2HYPERLINK\l”_Toc139269575”2.1。1N層體系結(jié)構(gòu)2_Toc139269577”2.2JSP/Servlet對web應(yīng)用系統(tǒng)的支持3HYPERLINK\l”_Toc139269578"3系統(tǒng)分析4_Toc139269580”3.2用例建模53.2。2用例圖6HYPERLINK\l”_Toc139269583"3。2。3順序圖7_Toc139269585”3.3分析類103。3.1邊界類10HYPERLINK\l”_Toc139269587”3.3。2實體類10_Toc139269591"4。2系統(tǒng)功能設(shè)計13HYPERLINK\l”_Toc139269592"4.2.1功能模塊劃分13HYPERLINK\l”_Toc139269593”4。2。2功能實現(xiàn)設(shè)計15HYPERLINK\l”_Toc139269594"4。2.3用例設(shè)計18HYPERLINK\l”_Toc139269595"4.3數(shù)據(jù)庫設(shè)計194.3.2系統(tǒng)數(shù)據(jù)庫設(shè)計20_Toc139269599”5.1用戶身份鑒別22HYPERLINK\l”_Toc139269600”5.2對會話的跟蹤和處理235。5系統(tǒng)安全實現(xiàn)27HYPERLINK\l”_Toc139269604"5.5。1網(wǎng)絡(luò)層安全27HYPERLINK\l”_Toc139269605”5.5。2數(shù)據(jù)層安全28HYPERLINK\l”_Toc139269606"6結(jié)束語28參考文獻291引言1。1網(wǎng)絡(luò)教學(xué)系統(tǒng)的技術(shù)基于Internet的網(wǎng)絡(luò)教學(xué)系統(tǒng)是現(xiàn)代遠程教育的方向,支持網(wǎng)上教學(xué)的教學(xué)管理系統(tǒng)在其中扮演著重要角色。網(wǎng)絡(luò)教學(xué)的目標是培養(yǎng)合格的人才,完成既定的教學(xué)任務(wù)和實現(xiàn)國家規(guī)定的教學(xué)目標。教學(xué)管理居于一個至關(guān)里要的地位,它起著調(diào)配教學(xué)資源、組織教學(xué)活動、總結(jié)教學(xué)數(shù)據(jù)等重要作用。教學(xué)管理系統(tǒng)使得教學(xué)能夠順利實施,也可實現(xiàn)整個教學(xué)管理過程的現(xiàn)代化和管理的規(guī)范化,另外還能及時、準確地反映教學(xué)現(xiàn)狀,分析教學(xué)效果。建立一個通過Internet實現(xiàn)教學(xué)信息發(fā)布和師生交流、網(wǎng)上選課。并能實現(xiàn)教師授課和課酬管理的基于網(wǎng)絡(luò)的教學(xué)管理系統(tǒng),是十分必要的,也是切實可行的。我們的思路正是構(gòu)建一種如圖1-1所示的基于Web的開放式網(wǎng)絡(luò)教學(xué)管理系統(tǒng).圖1-1系統(tǒng)實例圖基于上述的分析,為了實現(xiàn)這樣一個開放式的網(wǎng)絡(luò)教學(xué)管理系統(tǒng),我們采用了這樣的一個技術(shù)體系:本系統(tǒng)是依照J2EE(Java2’EnterpriseEdition)標準,綜合采用JSPIServlet,,JDBC等Java相關(guān)技術(shù)開發(fā)的大型網(wǎng)絡(luò)應(yīng)用軟件。系統(tǒng)的開發(fā)建立在Web服務(wù)器(WebServer)、應(yīng)用服務(wù)器(ApplicationServer)和數(shù)據(jù)庫服務(wù)器的多層架構(gòu)之上.這種多層結(jié)構(gòu)可將數(shù)據(jù)處理的業(yè)務(wù)邏輯、用戶界面、內(nèi)容顯示等部分分開,從而使系統(tǒng)的業(yè)務(wù)邏輯集中于Application層次:利用JavaBean服務(wù)器組件的可重用性和跨平臺性,可以快速開發(fā)和二次開發(fā)出復(fù)雜的大型平臺應(yīng)用程序,以適應(yīng)多種用戶的不同需求。因此,該平臺具有極佳的可靠性、可管理性和可擴展性。1.2本系統(tǒng)的特點和意義本系統(tǒng)具有通用性,可適用于各類學(xué)校、成人教育,職業(yè)培訓(xùn)和技術(shù)培訓(xùn)等機構(gòu)在遠程教育平臺上進行教學(xué)管理,是對傳統(tǒng)教育管理模式的改革和創(chuàng)新,其推廣使用對于教學(xué)管理的改革,實現(xiàn)開放式教育管理,擴大受教育面。有限的師資發(fā)揮更大的作用等方面具有重要的意義。本系統(tǒng)具有以下主要特點:(1)通用性強。能適用于各種機構(gòu)的網(wǎng)絡(luò)教學(xué)管理。(2)實現(xiàn)時間和空間的分布性。在教學(xué)管理方面,節(jié)約大量的人力物力,提高了效率。(3)資源庫的標準化,使得在Intemet上可以比較容易的和使用其他平臺的機構(gòu)之間共享資源,從而做到互通有無,真正實現(xiàn)系統(tǒng)的開放性??偟膩碚f,筆者經(jīng)歷了本課題的系統(tǒng)分析、設(shè)計、實現(xiàn)的開發(fā)周期,構(gòu)建起一個開放性的網(wǎng)絡(luò)教學(xué)管理系統(tǒng),基本上完成了課題研究的目標。在課題研發(fā)期間,獨立完成了本系統(tǒng)的業(yè)務(wù)需求分析,建立了用例模型,并對對象模型進行了詳細設(shè)計以及對數(shù)據(jù)庫的設(shè)計.在下面幾章中,將會詳細介紹本課題的設(shè)計與分析過程,以及系統(tǒng)關(guān)鍵技術(shù)的實現(xiàn)。2系統(tǒng)核心技術(shù)特點2.1web系統(tǒng)應(yīng)用研究2.1。1N層體系結(jié)構(gòu)90年代初,傳統(tǒng)的企業(yè)信息系統(tǒng)(EIS)供應(yīng)商為滿足用戶要求從二層的C/S應(yīng)用模型轉(zhuǎn)向更為靈活的三層或N層(n—tier)應(yīng)用模型.N層(n-tier)結(jié)構(gòu)可以取得更好的整體平衡,它將表示邏輯與業(yè)務(wù)邏輯從底層數(shù)據(jù)中分離開來。不斷增長的Intranet企業(yè)應(yīng)用也積極倡導(dǎo)輕量級,便于部署的客戶端。需要注意的是,N層中的每一層并不意味著就是軟件中單獨的一個部分,雖然也可能是這樣的層,首先與軟件中分離方法有關(guān)。軟件內(nèi)的不同的層在邏輯上也有區(qū)別,但可以共存于一臺機器上,或者跨越多臺機器進行分布。下面是使用N層結(jié)構(gòu)的特點:(1)加快開發(fā)過程,降低開發(fā)成本:通過重用現(xiàn)有、預(yù)先測試過的業(yè)務(wù)組件和數(shù)據(jù)訪問組件,可以更快的開發(fā)新的應(yīng)用程序。(2)隔離了由于改變帶來的影響:只要接口保持不變,一個層上的改變不會影響其它層上的組件。(3)更容易管理改變:例如,一個業(yè)務(wù)組件駐留在業(yè)務(wù)層(該業(yè)務(wù)組件位于一個或多個專用服務(wù)器上),那么我們可以很容易地用它的新版本替換舊版本,而不用替換不同城市甚至全球范圍內(nèi)的上百或上千的客戶端應(yīng)用程序了。2.1。2基于組件開發(fā)組件提供了比單純的類更祖粒度的問題封裝方法。接口封裝了組件提供的服務(wù),隱藏了實現(xiàn)細節(jié)的可見性。因此組件間耦合更為松散。由于組件表示一個或多個較細粒度類的邏輯集合,且被定義在較高級別,具有較粗粒度級,所以一個組件可以直接封裝一個己經(jīng)劃分的問題,該問題更直接地產(chǎn)生于分析和設(shè)計模型.組件通過組件模型定義實現(xiàn)互換性和兼容性。組件模型的接口定義了其它代碼和組件之間的關(guān)系。其它代碼實體可以是容器、應(yīng)用程序代碼、其它組件、其它組件模型以及一些專門服務(wù)提供商。近年來,人們開發(fā)了各種不同的組件模型,例如,Microsoft的ActiveX、后來的COM,SunMicrosystems的applet和JavaBean。組件為企業(yè)開發(fā)提供了許多方便.建立在面向?qū)ο筌浖烷_發(fā)概念之上的組件提供了一個更高級的開發(fā)模型,并且能加速企業(yè)應(yīng)用程序的建立.而且,系統(tǒng)質(zhì)量也會被加強,因為這會促使商業(yè)組件的生產(chǎn)商集中于提高組件的質(zhì)量并提供有很好文檔的接口,這樣就不要求內(nèi)部人員具有很好的特定底層實現(xiàn)技術(shù)的知識和與實現(xiàn)服務(wù)相關(guān)的知識。2。2JSP/Servlet對web應(yīng)用系統(tǒng)的支持JSP對web應(yīng)用系統(tǒng)提供了以下功能的支持:用戶交互:基于Web的Java小應(yīng)用程序(Applet)和桌面應(yīng)用客戶程序能夠使用基于Java的GUI技術(shù)創(chuàng)建,并能駐留在獨立的J2SE環(huán)境或J2EE環(huán)境中。傳統(tǒng)的非面向Java的Web瀏覽應(yīng)用程序能夠與基于J2EE的Web服務(wù)器一起使用。除此以外,非基于Java的客戶程序也可以使用分布式通信技術(shù),如CORBA,DCOM及TCP/IP與服務(wù)器組件進行通信.數(shù)據(jù)使能:Java數(shù)據(jù)庫連接(JDBC)方法用于與數(shù)據(jù)庫通信。J2EE,Web,EJB應(yīng)用程序,以及應(yīng)用程序客戶程序都使用JDBCAPI.運行于J2EE環(huán)境之外獨立的Java企業(yè)應(yīng)用程序都可以使用JDBCAPI。系統(tǒng)保證:各種系統(tǒng)保證屬性,如可靠性、可用性、可維護性、保護性和安全性是系統(tǒng)重要的特性,基于Java的企業(yè)環(huán)境封裝了許多具有不同API的安全服務(wù),CORBA也在CORBA安全服務(wù)規(guī)范中定義了安全服務(wù),對于在應(yīng)用環(huán)境中的安全互操作特別有用。Web使能:雖然HTML己經(jīng)是最典型的創(chuàng)建Web頁面的格式,但XML卻是用于描述Web頁面內(nèi)所需要的數(shù)據(jù)和控制更靈活的、更可擴展的機制。JavaServIet和JavaServerPages是接收基于Web的請求和產(chǎn)生基于HTML或基于XML響應(yīng)的標準J2EE機制。Web使能應(yīng)用程序也可利用各種全局服務(wù)用于分布通信、通信服務(wù)以及保證服務(wù).應(yīng)用程序使能:XML也能用于使系統(tǒng)應(yīng)用能與外部系統(tǒng)的其它應(yīng)用程序通信.各種各樣的應(yīng)用集成技術(shù)也是應(yīng)用程序使能的一部分。通過上述機制,我們會得到如下應(yīng)用需求原則:(1)將應(yīng)用程序劃分為多層(tier),以構(gòu)建可伸縮的大型企業(yè)級應(yīng)用。(2)將系統(tǒng)分解為相對的粗粒度組件,以便于快速開發(fā).因此,可以用“層(tier)+組件十服務(wù)"來描述JSP/Servlet對web應(yīng)用系統(tǒng)的支持。3系統(tǒng)分析系統(tǒng)分析是軟件工程的重要階段,是所有開發(fā)的依據(jù)。在系統(tǒng)分析階段,通過對系統(tǒng)的綜合研究,對問題域進行抽象,準確的理解系統(tǒng)需求和系統(tǒng)內(nèi)部運行機制,有助于準確的掌握系統(tǒng)的需求,從而正確的定義問題域,確定軟件開發(fā)的具體內(nèi)容。對系統(tǒng)的分析過程采用面向?qū)ο蠓治觯∣OA),應(yīng)用可視化面向?qū)ο蠼<夹g(shù)UML(統(tǒng)一建模語言,UnifiedModelingLanguage)建立系統(tǒng)模型。3.1用例分析用例是從用戶和業(yè)務(wù)的角度來描述系統(tǒng)提供需要執(zhí)行的功能。下面列出了本系統(tǒng)主要的用例:(1)教師信息查詢學(xué)生和管理員為了解教師情況而查看教師信息。(2)教師信息錄入與維護由教師本人錄入自己的基本信息,包括教育背景、研究方向、科研成果以及發(fā)表論文,專著和獲獎等方面的情況。并由教師本人對信息進行修改和維護。(3)學(xué)生信息查看教師和管理員查看學(xué)生信息,了解基本情況。(4)發(fā)布教學(xué)公告管理員在網(wǎng)站的主頁上發(fā)布教學(xué)公告信息。包括課程名稱、開課時間、起止日期、主講教師等.通過設(shè)置鏈接還能查看課程的詳細介紹。(5)教學(xué)公告維護管理員不定期的更新教學(xué)公告并對此進行維護。(6)課程資源瀏覽學(xué)生可以查詢課程內(nèi)容,了解課程的章節(jié)目錄等信息。(7)課程資源管理任課教師錄入新的課程資源信息或者修改、刪除舊的課程資源。(8)學(xué)生選課,加入到某個選課班學(xué)生在查看了系統(tǒng)發(fā)布的教學(xué)公告之后,根據(jù)自己的實際情況和興趣選取要求學(xué)習(xí)的課程。學(xué)生在選定課程之后,未繳納相應(yīng)的費用之前,可以對選課內(nèi)容進行修改。(9)成績查詢學(xué)生通過查詢條件可隨時查看自己的考試成績。(10)成績管理教師錄入學(xué)生的考試成績,評定成績等級,更改或刪除學(xué)生成績。學(xué)生查詢成績。(11)作業(yè)管理教師對選課班進入作業(yè)任務(wù)的發(fā)布,批改,統(tǒng)計,查詢.學(xué)生可在線做作業(yè),提交作業(yè),查看批改結(jié)果.(12)在線答疑學(xué)生在線提問,教師在線答疑。(13)在線測試教師利用系統(tǒng)生成考卷并發(fā)布出去。學(xué)生在線答卷并由系統(tǒng)自動評分。(12)消息提醒對教師布置作業(yè),在線答疑,在線測試進行短消息提醒。(11)用戶登錄使用本系統(tǒng)的用戶必須登錄才能進入本系統(tǒng)查看信息,匿名用戶不具有訪問權(quán)限。(12)用戶注銷用戶退出本系統(tǒng).3。2用例建模用例模型描述的是外部執(zhí)行者(Actor)所理解的系統(tǒng)功能.它的建立是系統(tǒng)開發(fā)者和用戶反復(fù)討論的結(jié)果,表明了開發(fā)者和用戶對需求規(guī)格達成的共識.在需求分析階段,可以用用例來捕獲用戶需求,以描述對系統(tǒng)感興趣的外部角色及其對系統(tǒng)(用例)的功能要求。3.2。1標識參與者參與者是指系統(tǒng)的分類用戶,分別代表一個唯一的角色。對本系統(tǒng)來說,存在相互聯(lián)系如下3類用戶:管理員:通過系統(tǒng)管理學(xué)生檔案,維護學(xué)生選課內(nèi)容,發(fā)布教學(xué)公告,成績管理,以及數(shù)據(jù)備份恢復(fù)工作等等。管理員是系統(tǒng)中權(quán)限最大的用戶,業(yè)務(wù)范圍幾乎涉及所有方面。教師:通過系統(tǒng)管理自己的基本信息,查看課程資源,查看選課情況.業(yè)務(wù)范圍為與自己和教學(xué)相關(guān)的信息。學(xué)生:通過系統(tǒng)查看教學(xué)公告、教師信息和課程資源信息,查看成績。業(yè)務(wù)范圍為與教學(xué)相關(guān)的信息3.2。2用例圖用例圖(UseCase)是參與者(系統(tǒng)外部用戶)所能觀察到的系統(tǒng)功能的模型圖,它描述參與者與系統(tǒng)提供的用例之間的某種聯(lián)系。用例圖就是從參與者的角度描述出系統(tǒng)中的用例和參與者,以及用例與參與者之間的關(guān)系(哪個參與者參與了哪個用便的執(zhí)行)。根據(jù)上面的用例分析,得到系統(tǒng)的用例圖如下面3張圖所示:圖3-1超級管理員用例圖圖3—2教師用例圖圖3-3學(xué)生用例圖所有用戶都包括用戶登錄和注銷這兩個用例,圖中未畫出。3.2.3順序圖為進一步說明系統(tǒng)需求,可以通過順序圖、協(xié)作圖和活動圖來描述用例之間或用例內(nèi)部的動態(tài)關(guān)系。這里我使用了順序圖和活動圖,將陸續(xù)介紹.用例是一種真正的文本描述,主要用于解釋。順序圖用于更準確地、以技術(shù)語表達用例。按照參與者與系統(tǒng)的交互關(guān)系來描述用例就可以做到這一點。順序圖(SequenceDiagram)是UML中一種重要的動態(tài)視圖,它是以時間順序顯示對象交互的圖,它顯示了參與交互的對象和所交換消息的順序,是一種交互關(guān)系,并強調(diào)了交互發(fā)生的時間順序.這里我給出的例子是學(xué)生選課順序圖。圖3-4學(xué)生加入選課班順序圖3。2。4活動圖活動圖的主要作用是表示系統(tǒng)的業(yè)務(wù)工作流和并發(fā)處理過程.它能夠更容易顯示參與者的決定和系統(tǒng)異常所要執(zhí)行的多條路徑,而這用順序圖是難以表達的.活動圖在概念上與流程圖相似,用它來為工作流程建模,以及用來圖解用例的動態(tài)行為和操作的詳細設(shè)計是很有用的。一旦一個活動完成,執(zhí)行就轉(zhuǎn)到由活動的有效轉(zhuǎn)移所確定的下一種狀態(tài).在活動圖中,泳道可用于在一個活動圖中顯示多個對象,以及它們?nèi)绾卧谝黄鹜瓿烧麄€用例.根據(jù)需求分析為系統(tǒng)的核心業(yè)務(wù)繪制活動圖,明確在業(yè)務(wù)工作流中參與者與系統(tǒng)各用例之間以及系統(tǒng)用例之間可能的交互。用例可以認為是獲得對參與者有用的東西,而需執(zhí)行的步驟,順序圖和活動圖對精確標識和理解用例行為都是有用的。圖3-5學(xué)生流程活動圖圖3-6教師流程活動圖3.3分析類根據(jù)用例模型,我們抽象出系統(tǒng)中的對象和類。系統(tǒng)中存在三種類:邊界類、控制類和實體類,每一種類在系統(tǒng)模型中執(zhí)行一定的作用口。3。3.1邊界類在系統(tǒng)模型中,邊界類表示系統(tǒng)內(nèi)部工作方式與其周圍環(huán)境之間的各種交互作用.包括:通過圖形化用戶界面與用戶交互,與其他參與者交互(如代表其他系統(tǒng)的參與者),與設(shè)備通信等。使用邊界類的優(yōu)點之一是:它們可以把系統(tǒng)的其余部分與外界環(huán)境隔離和屏蔽起來(見表3。1)。表3.1系統(tǒng)邊界類邊界類名稱邊界類職責主頁面顯示最新教學(xué)公告和其他相關(guān)信息鏈接登錄頁面允許用戶輸入有效的帳號和密碼,檢驗用戶身份注銷頁面允許用戶退出系統(tǒng)教師信息列表頁面允許學(xué)生查看教師信息,管理員可刪除信息教師信息輸入頁面允許教師輸入個人信息教師信息編輯頁面允許教師對個人信息進行編輯、修改教師信息查詢頁面允許所有用戶查詢教師信息教師信息查詢結(jié)果頁面顯示查詢結(jié)果課程資源列表頁面允許教師和學(xué)生查看課程信息,管理員可刪除信息課程資源輸入頁面允許管理員輸入課程信息課程資源編輯頁面允許管理員對課程信息進行編輯、修改課程資源查詢頁面允許所有用戶查詢課程資源課程資源查詢結(jié)果頁面顯示查詢結(jié)果學(xué)生信息查看頁面允許管理員和教師查看學(xué)生信息教學(xué)公告發(fā)布頁面允許管理員設(shè)置開課信息并發(fā)布開課信息列表頁面允許學(xué)生和教師查看開課的詳細信息,管理員可刪除信息開課信息編輯頁面允許管理員更改開課信息選課頁面允許學(xué)生選課選課信息查看頁面允許學(xué)生查看自己的選課內(nèi)容并對此修改成績查詢頁面允許學(xué)生查詢自己的考試成績成績查詢結(jié)果頁面顯示查詢結(jié)果成績錄入頁面允許管理員輸入學(xué)生的考試成績成績修改頁面允許管理員修改學(xué)生的成績信息發(fā)布頁面允許管理員發(fā)布教學(xué)信息3.3。2實體類實體對象表示對系統(tǒng)的重要信息.它們通常是持久的,并能在一個延續(xù)的時期內(nèi)存在。它們的主要的目的是表示和管理系統(tǒng)內(nèi)的信息。實體類通常表示為一種邏輯的數(shù)據(jù)結(jié)構(gòu)(見表3。2).表3。2系統(tǒng)實體類實體類名稱實體類屬性用戶基本信息用戶名、編號、用戶類別、登錄密碼教師基本信息姓名、編號、性別、出生年月、身份證號、學(xué)歷、職稱、原屬學(xué)校、電子郵件、從教時間、研究方向、主講課程教師業(yè)績成果名稱、獲獎等級、獲獎時間、著作名稱、出版社、出版時間、論文名稱課程資源信息課程名稱、課程編號、教材名稱、所屬學(xué)科、學(xué)時數(shù)、培訓(xùn)類型、課件介紹信息、視頻文件名、章節(jié)目錄選課信息選課名稱、課程編號、選課學(xué)生姓名、選課時間開課信息開課名稱、課程編號、授課時間、主講教師、信息發(fā)布時間成績單課程名稱、課程編號、學(xué)生姓名、學(xué)生編號、考試成績、成績等級3.3.3控制類控制類用于系統(tǒng)內(nèi)的模型行為,用于對某一個具體的用例相關(guān)的控制或者其他業(yè)務(wù)邏輯建模。通常將協(xié)調(diào)、排序等事物處理或者涉及多個對象的復(fù)雜事務(wù)邏輯隔離在一個或多個控制類中(見表3.3)。表3。3系統(tǒng)控制類控制類名稱控制類職責用戶登錄響應(yīng)用戶登錄請求,檢驗用戶身份的合法性用戶注銷用戶退出系統(tǒng)教師信息查看對學(xué)生提出的教師信息查詢請求進行處理增加教師信息對教師提出的增加個人信息請求進行處理編輯教師信息對教師提出的編輯個人信息請求進行處理教師信息列表對顯示教師信息列表請求進行處理刪除教師信息對刪除教師信息請求進行處理課程資源查看對學(xué)生提出的課程信息查詢請求進行處理增加課程資源對管理員提出的增加課程信息請求進行處理編輯課程資源對管理員提出的編輯課程信息請求進行處理課程資源列表對顯示課程資源列表請求進行處理刪除課程資源對刪除課程資源請求進行處理學(xué)生信息查看對教師和管理員提出的學(xué)生信息查詢請求進行處理教學(xué)公告發(fā)布對管理員提出的新增開課信息請求進行處理開課信息查看對學(xué)生和教師提出的開課信息查看請求進行處理編輯開課信息對管理員提出的編輯開課信息請求進行處理選課對學(xué)生提出的選課請求進行處理選課內(nèi)容查看對學(xué)生提出的查看自己的選課內(nèi)容請求進行處理成績查詢對學(xué)生提出的成績查詢請求進行處理成績錄入對管理員提出的新增成績請求進行處理成績修改對管理員提出的修改成績請求進行處理4系統(tǒng)設(shè)計4.1體系結(jié)構(gòu)設(shè)計一個體系就是各部分一起定義整個系統(tǒng)的藍圖:結(jié)構(gòu),接口和通信技術(shù)。使用體系結(jié)構(gòu)有這樣一些意義:(1)軟件分解成更小的塊,有助于理解、管理、開發(fā)和維護軟件;(2)軟件體系結(jié)構(gòu)可以幫助基于組件開發(fā);(3)使用被驗證的體系結(jié)構(gòu),便于管理軟件的性能和保證質(zhì)量;(4)通過正確的體系結(jié)構(gòu)可以更好地實現(xiàn)重用性;(5)正式的體系結(jié)構(gòu)會使系統(tǒng)很脆弱,難以升級和實現(xiàn)收縮,等等。本系統(tǒng)采用MVC(Modet—View—Control)[2]的模式來設(shè)計系統(tǒng)結(jié)構(gòu)并利用JSP/Servlet的技術(shù)來實現(xiàn)。本著業(yè)務(wù)邏輯和表現(xiàn)邏輯分離,對系統(tǒng)資源進行合理有效管理,優(yōu)化系統(tǒng)性能的指導(dǎo)思想,設(shè)計總體框架如圖4-1所示。圖4—1采用MVC設(shè)計模式的J2EE框架系統(tǒng)的各組成部分如下:(1)客戶層:在本系統(tǒng)中主要是Web瀏覽器。(2)web層:所有的用戶界面的開發(fā)和簡單的業(yè)務(wù)邏輯都在這層得到實現(xiàn)??紤]到JSP能夠嵌人HTML中,開發(fā)容易和產(chǎn)生的用戶界面靈活等優(yōu)點,故本系統(tǒng)采用JSP實現(xiàn)用戶界面,而簡單的業(yè)務(wù)邏輯一般都由Servlet來開發(fā),響應(yīng)用戶的查詢等請求并調(diào)用業(yè)務(wù)邏輯層的JavaBean組件來實現(xiàn)復(fù)雜的業(yè)務(wù)邏輯。(3)業(yè)務(wù)邏輯層:這一層主要由EJB組件的開發(fā)來實現(xiàn).會話Bean的主要任務(wù)是處理商務(wù)邏輯,客戶端交互,返回給它計算結(jié)果等:而實體Bean的主要任務(wù)是表達數(shù)據(jù)庫中的數(shù)據(jù),用來完成據(jù)庫的訪問。實體Bean是通過JDBC訪問數(shù)據(jù)庫,完成記錄插入、查找和刪除等操作。(4)數(shù)據(jù)層:負責數(shù)據(jù)的存儲管理、安全性管理和完整性管理等各種數(shù)據(jù)庫服務(wù),存放系統(tǒng)中的持久性的數(shù)據(jù)信息。系統(tǒng)采用瀏覽器服務(wù)器模型(Browser/Server).一般的,客戶通過瀏覽器發(fā)送HTTP請求給服務(wù)器端Web服務(wù)器,Web服務(wù)器接收該請求并且進行相應(yīng)處理,然后將處理后的結(jié)果返回到客戶的瀏覽器中。在客戶端,瀏覽器中呈現(xiàn)的正是該系統(tǒng)的視圖部分。系統(tǒng)將很好地結(jié)合使用JSP與Servlet,由JSP把用戶提出的httpRequest送達Servlet,Servlet根據(jù)請求的類型不同分別進行不同的處理,選擇不同的操作模塊,具體地說比如說對數(shù)據(jù)庫的讀寫更新查詢操作等,Servlet處理完這些比較復(fù)雜的請求之后,選定JSP頁面把最后的結(jié)果回應(yīng)給使用者,此時的JSP就只是起到了視圖的作用,并不做邏輯上運算只是將控制器方面?zhèn)鬟^來的資料展示給用戶而己.系統(tǒng)中的業(yè)務(wù)層中主要是JavaBean組件,它們負責接收由servlet傳來的請求并對此進行處理,比如連接數(shù)據(jù)庫執(zhí)行查詢等操作,JavaBean組件稱為系統(tǒng)的模型(Model)。4.2系統(tǒng)功能設(shè)計4。2.1功能模塊劃分網(wǎng)絡(luò)教學(xué)系統(tǒng)是一個綜合性的教學(xué)管理應(yīng)用系統(tǒng),它包含一個教育系統(tǒng)的很多方面,這些方面不是孤立的而是相互聯(lián)系的。本網(wǎng)絡(luò)教學(xué)系統(tǒng)作為網(wǎng)絡(luò)教學(xué)的一個重要支撐平臺,從功能上來看,分為網(wǎng)絡(luò)課程管理系統(tǒng)、系統(tǒng)管理和信息交流管理三個子系統(tǒng)。課程管理子系統(tǒng)包括學(xué)生選課管理、課程資源管理、教學(xué)公告管理等功能。整個系統(tǒng)的功能結(jié)構(gòu)如圖4-2所示。教學(xué)平臺網(wǎng)絡(luò)教學(xué)教學(xué)平臺網(wǎng)絡(luò)教學(xué)平臺系統(tǒng)設(shè)置管理子系統(tǒng)網(wǎng)絡(luò)教學(xué)管理子系統(tǒng)信息交流子系統(tǒng)系統(tǒng)機構(gòu)設(shè)置系統(tǒng)用戶管理息角色,權(quán)限管理系統(tǒng)日志管理數(shù)據(jù)庫操作學(xué)期管理課程管理在線短消息成績查詢班級管理教學(xué)信息發(fā)布網(wǎng)絡(luò)教學(xué)教學(xué)論壇圖4-2系統(tǒng)功能結(jié)構(gòu)圖對各子系統(tǒng)功能模塊的詳細描述如下:(1)網(wǎng)絡(luò)教學(xué)管理學(xué)生選課管理:學(xué)生根據(jù)自己的實際情況選取要求學(xué)習(xí)的課程的選課班級.管理員對學(xué)生選課的內(nèi)容進行維護,教師可以查看,審核自己所教課程的選課情況。課程資源管理:課程資源信息包括課程名稱、課程類別、在線備課,在線瀏覽課件。所有注冊登錄的用戶都可以瀏覽和查詢該信息,管理員和教師執(zhí)行對課程信息的維護功能.教學(xué)公告發(fā)布:管理員發(fā)布某門課程的教學(xué)公告。教學(xué)公告的詳細信息包括課程名稱、開課時間、起止日期、主講教師等。通過設(shè)置鏈接還能查看課程的詳細介紹。管理員對教學(xué)公告進行維護。學(xué)生成績管理:包括成績錄入、修改、成績統(tǒng)計與查詢。成績統(tǒng)計是對各門課程平均成績的計算以及各分數(shù)段人數(shù)的統(tǒng)計;成績查詢則可以檢索和查看任何一位學(xué)生的成績。學(xué)生只能查詢自己的考試成績,其他功能由管理員執(zhí)行。(2)個人信息管理教師檔案管理:包括教師信息的錄入、更新、查詢、刪除等功能.這里的教師信息主要包括教師的教育背景、研究方向、科研成果以及發(fā)表論文,專著和獲獎等方面的情況。只有教師本人才能對自己的信息進行修改。管理員可執(zhí)行刪除功能.學(xué)生檔案查看:提供教師和管理員對學(xué)生信息的查看功能。(3)系統(tǒng)管理用戶登錄和用戶注銷。下面給出系統(tǒng)的詳細功能設(shè)計.4.2.2功能實現(xiàn)設(shè)計(1)類設(shè)計=1\*GB3①邊界類邊界類設(shè)計為ISP頁面,主要有以下邊界類,如表4。1所示:表4.1邊界類設(shè)計功能模塊頁面課程管理學(xué)生選課管理Choosecourse。jsp(選課頁面)Viewchoosecourse。jsp(查看選課內(nèi)容頁面)ChoosecourseEdit。jsp(選課修改頁面)課程資源管理Course.jsp(課程資源列表頁面)Addcoursejsp(新增課程資源頁面)Editcourse.jsp(編輯課程資源頁面)CourseSeek。jsp(課程查詢頁面)Courseseekresult.jsp(課程查詢結(jié)果頁面)教學(xué)公告管理Addteachcourse。jsp(發(fā)布教學(xué)公告頁面)TeachcourseList。jsp(開課信息列表頁面)TeachcourseSeek。jsp(查詢頁面)TeachcourseSeekresult.jsp(查詢結(jié)果頁面)Editteachcourse。jsp(編輯開課信息頁面)成績管理Marklnput.jsp(成績錄入頁面)MarkSeekjsp(成績查詢頁面)MarkEditjsp(成績修改頁面)MarkSeekResult.jsp(查詢結(jié)果頁面)教師檔案管理個人信息管理Teacherlnfolnput.jsp(教師信息輸入頁面)TeacherlnfoEdit.jsp(教師信息修改頁面)TeacherlnfoList.jsp(教師信息列表頁面)TeacherlnfoSeek。jsp(教師信息查詢頁面)TeacherlnfoSeekResult。jsp(查詢結(jié)果頁面)學(xué)生檔案查看StulnfoListjsp(學(xué)生信息列表頁面)StulnfoSeekjSP(學(xué)生信息查詢頁面)StulnfoSeekResult.jsp(查詢結(jié)果頁面)用戶登錄注銷用戶登錄Login.jsp(登錄頁面)Main.jsp(主頁面)用戶注銷Logoutjsp(注銷頁面)=2\*GB3②實體類實體類設(shè)計為實體Bean,實體組件是存儲在關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)模型,代表了數(shù)據(jù)庫中業(yè)務(wù)數(shù)據(jù)的對象視圖,并提供了訪問和操作數(shù)據(jù)的對象封裝.實體組件具有持久性[1],支持多用戶的共享訪問。使用實體組件作為業(yè)務(wù)數(shù)據(jù)的對象視圖,客戶端可以通過實體組件提供的接口間接地實現(xiàn)對數(shù)據(jù)庫業(yè)務(wù)數(shù)據(jù)的訪問與操作。=3\*GB3③控制類我們使用實體組件封裝了業(yè)務(wù)數(shù)據(jù),用處理特定業(yè)務(wù)功能的會話組件來封裝與該業(yè)務(wù)操作相關(guān)的實體組件。由特定的會話組件控制和協(xié)調(diào)各實體組件之間的交互,把數(shù)據(jù)查詢、更新和新增的業(yè)務(wù)操作遷移到業(yè)務(wù)功能層來處理。從而向客戶端提供了一個簡單的功能接口,減少了通過網(wǎng)絡(luò)和跨越服務(wù)層之間的遠程通訊,同時也避免了把實體組件對象直接暴露給遠程的客戶端,降低了兩層之間的耦合程度。因此在本子系統(tǒng)中設(shè)計了下面這些控制類如表4。3:表4.3控制類設(shè)計功能模塊控制類名稱操作課程資源管理CourseUstSevlet顯示課程資源列表CourseSeekSevlet查詢課程資源CourseAddSevlet增加課程資源CourseEditSevlet編輯課程資源CourseDeleteSevlet刪除課程資源CourseControlSevlet前端請求總控制器CourseBean封裝所有對課程資源的操作教學(xué)公告管理TeachCourseListSevlet顯示開課信息列表TeachCourseSeekSevlet查詢開課信息TeachCourseAddSevlet增加開課信息并提交發(fā)布TeachCourseEditSevlet編輯開課信息TeachCourseDeleteSeviet刪除開課信息TeachCourseControlSevlet前端請求總控制器TeachCourseBean封裝所有對開課信息的操作學(xué)生選課管理ChooseCourseServlet學(xué)生選課提交ChooseCourseViewServlet查看選課內(nèi)容ChooseCourseEditServlet修改選課內(nèi)容ChooseCourseControlServlet前端請求總控制器ChooseCourseBean封裝所有對選課信息的操作成績管理MarkAddServlet添加成績MarkSeekServlet查詢成績MarkEditServlet修改成績MarkDeleteServiel刪除成績MarkControlServlet前端請求總控制器MarkBean封裝所有對成績的操作教師信息管理TeacherEditServlet修改教師信息TeacherSeekServlet查詢教師信息TeacherDeleteSeNlet刪除教師信息TeacherListServlet顯示教師信息列表TeacherControlServlet前端請求總控制器TeacherBean封裝所有對教師信息的操作學(xué)生信息查看StuListServlet學(xué)生信息列表顯示StuSeekServlet學(xué)生信息查詢系統(tǒng)管理LoginServlet用戶登錄控制UserBean身份驗證LogoutServlet用戶注銷①顯示開課信息列表入口參數(shù):無返回結(jié)果:結(jié)果集②查詢開課信息入口參數(shù):無查詢條件類型:字符串返回結(jié)果:結(jié)果集③增加開課信息入口參數(shù): 開課名稱類型:字符串 開課日期類型:日期型 主講教師類型:字符串收費數(shù)目類型:整型返回結(jié)果:布爾型如果添加成功,返回TRUE,否則返回FALSE。④編輯開課信息入口參數(shù): 開課名稱類型:字符串 開課日期類型:日期型 主講教師類型:字符串 收費數(shù)目類型:整型返回結(jié)果:布爾型如果修改成功,返回TRUE,否則返回FALSE。⑤刪除開課信息入口參數(shù): 課程編號類型:字符串返回結(jié)果:布爾型如果刪除成功,返回TRUE,否則返回FALSE.4.2。3用例設(shè)計設(shè)計用例是為了識別類或者子系統(tǒng),其實例去執(zhí)行用例的事件流.定義對設(shè)計對象或子系統(tǒng)及其接口的操作需求,為用例捕獲實現(xiàn)性需求。UML提供了版類(stereotype)這個擴展機制來區(qū)分不同類型的類.UML的創(chuàng)始人Jacobson定義了三種類型的版類對象類(stereotypeobjecttypes):邊界對象(boundaryobject)、實體對象(entityobject)和控制對象(controlobject).在ROSE中,可以設(shè)置類的stereotyp。域為〈〈boundary;+entity>〉和<〈control〉〉;這個階段我們得到系統(tǒng)的類圖和詳細的順序圖。對JSP以及JavaBean組件我們現(xiàn)在都可以用類為它們建模,方便類圖和序列圖中的表示,對于系統(tǒng)中的用例,可以根據(jù)設(shè)計類來進一步細化其順序圖,下面顯示了發(fā)布教學(xué)公告和學(xué)生選課用例的細化順序圖。圖4—3學(xué)生選課細化順序圖在類圖中我們可以看到在用例實現(xiàn)的過程中所涉及到的類以及它們之間的關(guān)系,這些類之間的關(guān)系是這些類產(chǎn)生代碼的基礎(chǔ).同一JSP網(wǎng)頁被分解成兩個部分:客戶頁和服務(wù)器頁其中后者和前者的關(guān)系是構(gòu)建和被構(gòu)建的關(guān)系(即圖4-7中的Build的關(guān)系)。當網(wǎng)頁中的表單中的內(nèi)容需要提交到Servlet時,表單和它們的關(guān)系是提交的關(guān)系,調(diào)用Servlet的doPost()或doGet()方法。在UML的語法中類之間的關(guān)系主要分為以下兒種:協(xié)作、依賴、泛化、實現(xiàn)、積聚。協(xié)作關(guān)系在Java語法中表現(xiàn)為一個類對另一個類的引用,如圖4-4所示。圖4—4發(fā)布教學(xué)公告類圖4。3數(shù)據(jù)庫設(shè)計4.3。1數(shù)據(jù)庫設(shè)計原則(1)一致性原則對信息進行統(tǒng)一、系統(tǒng)的分析與設(shè)計,協(xié)調(diào)好各數(shù)據(jù)源,做到“數(shù)出一門”、“算法統(tǒng)一”、“度量一致"。保證系統(tǒng)數(shù)據(jù)的一致性和有效性。(2)完整性原則數(shù)據(jù)庫的完整性是指數(shù)據(jù)的正確性和相容性。要防止合法用戶使用數(shù)據(jù)庫時向數(shù)據(jù)庫加入不合語義的數(shù)據(jù).對輸入到數(shù)據(jù)庫中的數(shù)據(jù)要有審核和約束機制.(3)安全性原則數(shù)據(jù)庫的安全性是指保護數(shù)據(jù),防止非法用戶使用數(shù)據(jù)庫或合法用戶非法使用數(shù)據(jù)庫造成數(shù)據(jù)泄露、更改或破壞。要有認證和授權(quán)機制。(4)可伸縮性原則數(shù)據(jù)庫結(jié)構(gòu)的設(shè)計應(yīng)充分考慮發(fā)展的需要、移植的孺要,具有良好的擴展性、伸縮性和適度冗余.(5)規(guī)范化數(shù)據(jù)庫的設(shè)計應(yīng)遵循規(guī)范化理論,規(guī)范化程度過低的關(guān)系,可能會存在插入、刪除異常、修改復(fù)雜、數(shù)據(jù)冗余等問題,解決的方法就是對關(guān)系模式進行分解或合并(A范化),轉(zhuǎn)換成高級范式。規(guī)范化一共有六個級別:1NF,2NF,3NF.BCNF,4NF,5NF。但也應(yīng)當注意到,并不是規(guī)范化程度越高的關(guān)系就越好,在具體應(yīng)用時,到底規(guī)范化進行到什么程度需要權(quán)衡利弊。一般而言,做到第三范式(3NF)就足夠了.4。3。2系統(tǒng)數(shù)據(jù)庫設(shè)計網(wǎng)絡(luò)教學(xué)管理系統(tǒng)數(shù)據(jù)庫的設(shè)計遵循以上原則,數(shù)據(jù)庫中的表包括用戶信息、教師基本信息、課程資源信息、選課信息、開課信息、學(xué)期信息、課件信息、作業(yè)信息等,設(shè)計各表的數(shù)據(jù)結(jié)構(gòu)如下:表5—1:教師學(xué)生信息表字段名類型說明idint(11)自動增加,主鍵userIDvarchar(50)用戶登錄IDpasswordvarchar(50)登錄密碼userNamevarchar(50)真實姓名deptBHvarchar(50)用戶所在部門編號(外鍵)userLeveltinyint(3)用戶類型roleBHvarchar(50)用戶所屬角色編號(外鍵)isLockedtinyint(1)用戶審核標識表5-2:系統(tǒng)機構(gòu)表字段名類型說明DeptBHvarchar(50)部門編號Depnamevarchar(50)部門名稱表5—3:學(xué)期信息表字段名類型說明idint(11)自動增加,主鍵termNamevarchar(50)學(xué)期名稱startTimedate開始時間endTimedate結(jié)束時間表5—4:課程信息表字段名類型說明idint(11)自動增加,主鍵courseNamevarchar(30)課程名稱isUsedtinyint(1)是否可用,0:不可用,1可用introtext課程介紹表5-5:選課班級信息表字段名類型說明idint(11)自動增加,主鍵classNamevarchar(30)班級名稱teachervarchar(30)任課教師courseidsmallint(6)講授課程termtinyint(3)上課學(xué)期personCounttinyint(3)班級人數(shù)periodvarchar(50)每周上課時間表5-6:選課班級—學(xué)生信息表字段名類型說明idint(11)自動增加,主鍵ClassidInt(11)選課班級StudidInt(11)學(xué)生ID表5—7:布置作業(yè)信息表字段名類型說明idint(11)自動增加,主鍵titlevarchar(200)作業(yè)標題teachervarchar(50)布置作業(yè)教師classidsmallint(6)交作業(yè)班級subtimedate發(fā)布作業(yè)時間deadLineTimedate最后交作業(yè)時間introtext,作業(yè)內(nèi)容attachvarchar(100)作業(yè)附件表5-8:學(xué)生提交作業(yè)及教師批發(fā)信息表字段名類型說明idint(11)自動增加,主鍵hwidmediumint(9)需交作業(yè)IDstu_idvarchar(50)交作業(yè)學(xué)生titlevarchar(100)作業(yè)標題introtext作業(yè)內(nèi)容subtimedate提交時間attachvarchar(100)作業(yè)附件commenttext教師評語scoretinyint(3)教師成績5關(guān)鍵技術(shù)及實現(xiàn)5.1用戶身份鑒別身份鑒別通常包括用戶提交的一個用戶名和口令,你可以只使用用戶名或口令對用戶進行鑒別,也可以選擇通過IP地址來鑒別.通過IP地址來鑒別只有當用戶擁有靜態(tài)IP時才起作用,所以并不常用.在此我采用基于表單的身份鑒別.在基于表單的鑒別中,提示用戶名和口令的Web頁面由服務(wù)器來提供,而不是依靠瀏覽器顯示對話框,這樣,在需要用戶登錄時就可以給用戶提交額外的信息和選項了。需要注意的是,雖然輸入口令時顯示為星號,但是瀏覽器還是以純文本傳送口令本身:非加密、不進行Base64編碼,只是純文本。如果采用GET方法將表單數(shù)據(jù)提交給服務(wù)器,用戶瀏覽器將在URL中明顯地顯示出口令,而且瀏覽器還會將它保存在最近瀏覽地頁面列表中.因此,在筆者實現(xiàn)基于表單的身份驗證時,使用的是POST方法提交表單數(shù)據(jù)給服務(wù)器。 當用戶登錄認證的表單請求后,表單采用POST方法提交到LoginServlet。LoginServlet將獲得的參數(shù)傳給Userbean(是一個JavaBean),如果通過驗證就進入系統(tǒng)的功能區(qū),否則就返回登錄界面。下面介紹用戶bean(Usecjava),它定義了一組屬性,包括(1)userlD,這是一個只讀屬性,標示登錄會員的會員編號,這個編號對于使用系統(tǒng)的所有用戶(包括教師、學(xué)生和管理員)來說是唯一的:(2)userName,這是一個可讀寫屬性,標示登錄會員的用戶名;(3)passWord,是一個可讀寫屬性,標示登錄會員的口令;(4)userType,也是一個可讀寫屬性,標示登錄會員的身份類型;該屬性與userName,password都是用戶通過login。jsp頁面提交到checked。jsp,然后由checked.jsp將參數(shù)賦值給這三個屬性.(5)login,這是一個boolean屬性,用來判斷當前的訪問是否是登錄會員的訪問。(6)Userbean實現(xiàn)了如下兩個公共方法用來檢查用戶是否是會員登錄。(7)checkUser:用來檢查用戶登錄信息。它主要是通過JDBC訪問數(shù)據(jù)庫,通過檢查用戶名、口令、身份類型是否正確或者匹配,如果正確則置login為true,并從數(shù)據(jù)庫中讀取相應(yīng)字段給屬性UserlD賦值。(8)isLogin:獲取login值,檢查是否是登錄會員的訪問。(9)isStudent,isTeacher,isAdm:獲取登錄會員的身份類型。Userbean在本系統(tǒng)的許多程序中都要用到,它是作為session范圍的bean定義的。5.2對會話的跟蹤和處理 HTTP(HypertextTransferProtocol)是一個基于請求/響應(yīng)模式的應(yīng)用層協(xié)議。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論