前言:本站為你精心整理了BBS系統(tǒng)畢業(yè)范文,希望能為你的創(chuàng)作提供參考價(jià)值,我們的客服老師可以幫助你提供個(gè)性化的參考范文,歡迎咨詢。
目錄
一、前言2
二、系統(tǒng)定義3
2.1系統(tǒng)分析3
2.1.1Internet以及Web技術(shù)的發(fā)展3
2.1.2基于Web的通用bbs系統(tǒng)技術(shù)可行性分析4
2.2需求分析8
2.2.1系統(tǒng)的綜合要求8
2.2.2系統(tǒng)的數(shù)據(jù)要求9
2.2.3系統(tǒng)的邏輯模型13
三、系統(tǒng)設(shè)計(jì)15
3.1系統(tǒng)概要設(shè)計(jì)15
3.1.1數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)15
3.1.2系統(tǒng)結(jié)構(gòu)的設(shè)計(jì)17
3.2系統(tǒng)詳細(xì)設(shè)計(jì)19
3.2.1基本算法19
3.2.2關(guān)鍵技術(shù)22
3.2.2.1ASP技術(shù)22
3.2.2.2ADO技術(shù)24
3.2.2.3數(shù)據(jù)庫技術(shù)26
3.2.2.4VBScript及JavaScript腳本語言28
3.2.2.5正則表達(dá)式技術(shù)32
3.2.3實(shí)現(xiàn)方法36
3.2.3.1ASP網(wǎng)頁數(shù)據(jù)庫的連接36
3.2.3.2ASP網(wǎng)頁數(shù)據(jù)庫的操作40
3.2.3.3ASP網(wǎng)頁安全性的實(shí)現(xiàn)方法45
3.2.3.4在貼子中實(shí)現(xiàn)超文本信息輸入和顯示51
四、系統(tǒng)的運(yùn)行效果60
五、結(jié)束語61
參考文獻(xiàn)63
基于Web的通用BBS系統(tǒng)的建立與維護(hù)
作者:
關(guān)鍵詞
BBS、ASP、ADO、MSAccess、JavaScript、VBScript、RegExp
摘要
本文是一篇討論基于Web的數(shù)據(jù)庫管理的本科畢業(yè)論文,它詳細(xì)地講述了開發(fā)一個(gè)基于Web的通用BBS(BullitinBoardSystem)網(wǎng)站系統(tǒng)所用到的技術(shù)和方法。其中運(yùn)用了ASP技術(shù)(AvtiveServerPage)、ADO技術(shù)(ActiveXDataObject)、MSAccess數(shù)據(jù)庫技術(shù)、RegExp技術(shù)(RegularExpression正則表達(dá)式)、VBScript及JavaScript腳本語言技術(shù)等等,并從幾個(gè)不同的方面來對上述技術(shù)的實(shí)現(xiàn)方法進(jìn)行了討論。
一、前言
進(jìn)入二十一世紀(jì),計(jì)算機(jī)技術(shù)迅速向著網(wǎng)絡(luò)化、集成化方向發(fā)展。傳統(tǒng)的單機(jī)版應(yīng)用軟件正在逐漸退出舞臺(tái),取而代之的是支持網(wǎng)絡(luò)、支持多種數(shù)據(jù)信息(多媒體)的新一代網(wǎng)絡(luò)版應(yīng)用軟件,而目前網(wǎng)絡(luò)版軟件中似乎存在著兩種不同的趨勢,一種是稱為客戶端——服務(wù)器的C/S結(jié)構(gòu)應(yīng)用系統(tǒng),這類軟件具有結(jié)構(gòu)嚴(yán)謹(jǐn),運(yùn)行效率高,服務(wù)器端壓力小,安全性好等優(yōu)點(diǎn),被廣泛運(yùn)用于局域網(wǎng)中。而另一種,也是本畢業(yè)設(shè)計(jì)所采用的,是稱為瀏覽器——服務(wù)器的B/S結(jié)構(gòu)應(yīng)用系統(tǒng),它的特點(diǎn)是在客戶端直接采用了功能強(qiáng)大的瀏覽器軟件作為界面,其優(yōu)點(diǎn)在于軟件開發(fā)效率高,客戶端不受操作平臺(tái)的限制、也不受地域的限制,網(wǎng)絡(luò)傳輸量少,即適用于局域網(wǎng),更適用于Internet,而且投資小、見效快,用戶可以不必進(jìn)行服務(wù)器方面的投資,而是去租用,甚至是免費(fèi)使用ISP的服務(wù)器資源,因而受到越來越多中小型單位的青睞。
本文討論的是一個(gè)基于Web的通用BBS網(wǎng)站,它具有BBS網(wǎng)站應(yīng)該具有的所有功能。
二、系統(tǒng)定義
2.1系統(tǒng)分析
2.1.1Internet以及Web技術(shù)的發(fā)展
Internet起源于20世紀(jì)60年代末、70年代初,當(dāng)時(shí),美國國防部為了將充斥于軍事基地內(nèi)各種廠商的電腦主機(jī)互連,讓它們可以進(jìn)行數(shù)據(jù)交換以便研究工作順利進(jìn)行,于是成立了ARPA網(wǎng)絡(luò)計(jì)劃。ARPA計(jì)劃嘗試建設(shè)一個(gè)網(wǎng)絡(luò)系統(tǒng),它可將各種不同廠商的電腦連接起來。隨著這個(gè)計(jì)劃的成功,各學(xué)術(shù)單位,研究機(jī)構(gòu)也紛紛與ARPA計(jì)劃所建立的ARPANet連接。到了20世紀(jì)80年代,Internet這個(gè)名詞因勢產(chǎn)生,它代表著這十年來所構(gòu)建涵蓋全球各地的網(wǎng)絡(luò)系統(tǒng)。從1990年起,商業(yè)使用的Internet在美國急速地?cái)U(kuò)大,而Internet也從原來屬于少數(shù)人使用的網(wǎng)絡(luò)系統(tǒng)轉(zhuǎn)變?yōu)槠胀ò傩找材軌蚴褂玫木W(wǎng)絡(luò)系統(tǒng)。
最初的Internet資源服務(wù)都還停留在文本模式,1989年,量子物理實(shí)驗(yàn)室(CERN)下的一個(gè)研究小組著手開發(fā)一種全新的Internet服務(wù),它可以在網(wǎng)絡(luò)上傳送圖片、文本、影像、聲音等多媒體數(shù)據(jù)。于是由TimBernersLee領(lǐng)導(dǎo)的小組開發(fā)出了一種主從、分布式的網(wǎng)絡(luò)服務(wù)系統(tǒng),這就是WWW,俗稱“萬維網(wǎng)”。
所謂WWW其實(shí)就是連上Web服務(wù)器訪問資源,取得的內(nèi)容就是所謂的“主頁”(HomePage)。進(jìn)入的網(wǎng)頁通常不會(huì)只有一頁,而是整個(gè)網(wǎng)站的內(nèi)容。
“網(wǎng)站”是一種呈現(xiàn)在網(wǎng)絡(luò)上的新興媒體,通過Internet已經(jīng)成為一個(gè)實(shí)時(shí)的,多媒體的信息傳播渠道。它的載體主要是電腦,范圍覆蓋全球各地,沒有國界,不分人種,時(shí)時(shí)刻刻地提供服務(wù)。目前,人們漸漸開始把網(wǎng)站稱之為廣播、電視、報(bào)刊以外的第四新聞媒體,以“共享、公平、公正、創(chuàng)新、國際化、團(tuán)隊(duì)精神”為特征的網(wǎng)絡(luò)文明也已逐漸成為這個(gè)時(shí)代的標(biāo)志,人們越來越習(xí)慣于通過Internet網(wǎng)絡(luò)獲取信息,通過Internet在網(wǎng)站上發(fā)表自已對社會(huì)對生活的理解和建議。
2.1.2基于Web的通用BBS系統(tǒng)技術(shù)可行性分析
BBS系統(tǒng)就是提供給注冊用戶一個(gè)平臺(tái),會(huì)員用戶可以通過Internet接入,登錄本系統(tǒng),在這個(gè)平臺(tái)上發(fā)表文章、閱讀文章、回復(fù)文章等等。
此類系統(tǒng)通常有以下四種類型的操作用戶:匿名用戶、普通用戶、版面管理員、超級管理員。每類用戶有其不同的操作集,系統(tǒng)通常提供一個(gè)統(tǒng)一的登錄頁面,此頁面應(yīng)能自動(dòng)識(shí)別不同級別的用戶,并提供不同的操作界面。與之相應(yīng),此類系統(tǒng)通常應(yīng)具有以下功能:用戶注冊、用戶登錄、發(fā)表文章、閱讀文章、回復(fù)文章、分頁查找、主題查找、作者查找、個(gè)人資料維護(hù)、找回密碼、版面管理、版主管理、用戶管理、友情鏈接管理等等,所有操作都可以由用戶在客戶端瀏覽器中完成,而服務(wù)器端程序會(huì)按用戶的要求來完成對系統(tǒng)數(shù)據(jù)的操作,并將結(jié)果傳給Web服務(wù)器,再由Web服務(wù)器處理成HTML文件后發(fā)送到客戶端瀏覽器。這就是所謂的B/S結(jié)構(gòu)應(yīng)用系統(tǒng),B/S結(jié)構(gòu)即Browser/Server(瀏覽器/服務(wù)器)結(jié)構(gòu),是隨著Internet技術(shù)的興起,對C/S結(jié)構(gòu)的一種變化或者改進(jìn)的結(jié)構(gòu)。
C/S結(jié)構(gòu),即Client/Server(客戶機(jī)/服務(wù)器)結(jié)構(gòu),是大家熟知的軟件系統(tǒng)體系結(jié)構(gòu),通過將任務(wù)合理分配到Client端和Server端,降低了系統(tǒng)的通訊開銷,可以充分利用兩端硬件環(huán)境的優(yōu)勢。早期的軟件系統(tǒng)多以此作為首選設(shè)計(jì)標(biāo)準(zhǔn)。
B/S結(jié)構(gòu)下,用戶界面完全通過WWW瀏覽器實(shí)現(xiàn),一部分事務(wù)邏輯在前端實(shí)現(xiàn),但是主要事務(wù)邏輯在服務(wù)器端實(shí)現(xiàn),形成所謂N-Tier結(jié)構(gòu)。B/S結(jié)構(gòu),主要是利用了不斷成熟的WWW瀏覽器技術(shù),結(jié)合瀏覽器的多種Script語言(VBScript、JavaScript…)和ActiveX技術(shù),用通用瀏覽器就實(shí)現(xiàn)了原來需要復(fù)雜專用軟件才能實(shí)現(xiàn)的強(qiáng)大功能,并節(jié)約了開發(fā)成本,是一種全新的軟件系統(tǒng)構(gòu)造技術(shù)。隨著Windows98/Windows2000將瀏覽器技術(shù)植入操作系統(tǒng)內(nèi)部,這種結(jié)構(gòu)更成為當(dāng)今應(yīng)用軟件的首選體系結(jié)構(gòu)。
將應(yīng)用程序分成好幾個(gè)離散邏輯組件,就是多層式結(jié)構(gòu)(N-Tier)應(yīng)用程序。最常見的選擇是分成三個(gè)部分:表示層、事務(wù)邏輯層和數(shù)據(jù)層(3-Tier),不過也有其它的組合。多層式結(jié)構(gòu)應(yīng)用程序,在一開始是解決某些與傳統(tǒng)客戶端/服務(wù)器(主從式)應(yīng)用程序相關(guān)的問題,但是隨著Web的出現(xiàn),此結(jié)構(gòu)已經(jīng)成為主導(dǎo)新程序之開發(fā)的結(jié)構(gòu)。下面就是3-Tier結(jié)構(gòu)各層功能以及經(jīng)常采用的技術(shù)作個(gè)簡介:
表示層主要運(yùn)行于客戶端瀏覽器,采用Script(腳本)語言編寫。HTML、JavaScript、VBScript是此類應(yīng)用系統(tǒng)中展示層最常用的腳本編制語言,結(jié)合CCS以及ActiveX技術(shù),能設(shè)計(jì)出交互相當(dāng)靈活功能又相當(dāng)強(qiáng)大的客戶端網(wǎng)頁。
事務(wù)邏輯層設(shè)計(jì)通常有三個(gè)選擇:ASP網(wǎng)頁、COM或COM+組件、DBMS中所執(zhí)行的預(yù)存程序。將程序代碼的一部分,建立成執(zhí)行于數(shù)據(jù)庫管理系統(tǒng)(DBMS)中的預(yù)存程序,使數(shù)據(jù)與程序代碼儲(chǔ)存在相同的位置,有助于最佳化執(zhí)行效率,但是,預(yù)存程序都依賴于特定的數(shù)據(jù)庫系統(tǒng),在編寫和偵錯(cuò)方面都相當(dāng)復(fù)雜,只適宜于大型的商業(yè)應(yīng)用系統(tǒng)。以COM對象的方式,編寫中間層(MiddleTier)事務(wù)邏輯,可以使用全功能的語言,來產(chǎn)生經(jīng)過編譯的執(zhí)行程序,執(zhí)行效率也相當(dāng)高,此外,在COM對象中包裝事務(wù)邏輯,還可以清楚地將此程序代碼與網(wǎng)頁內(nèi)含的展示程序代碼分隔,這樣可以使應(yīng)用程序更易于維護(hù),但是,COM對象的部署也有一定的麻煩,新編寫的組件對象,只有在服務(wù)器重新啟動(dòng)后才能被應(yīng)用程序調(diào)用。用ASP網(wǎng)頁設(shè)計(jì)事務(wù)邏輯相對來說比較簡單,但是,ASP網(wǎng)頁采用腳本語言來編寫事務(wù)邏輯,比如VBScript,程序代碼只有在執(zhí)行時(shí)才被翻譯,這樣會(huì)降低執(zhí)行效能,此外,ASP網(wǎng)頁中的程序代碼也是難以維護(hù)的,因?yàn)槭聞?wù)邏輯程序代碼與建立使用者接口的展示程序代碼彼此混雜在一起。
數(shù)據(jù)層較為靈活,視系統(tǒng)規(guī)??蛇x擇Sybase、Oracle、MySQL、SQLserver或者M(jìn)SAccess。
綜上所述,結(jié)合本系統(tǒng)實(shí)際需要,本BBS系統(tǒng)采用B/S結(jié)構(gòu),使用微軟公司的技術(shù)解決方案。開發(fā)環(huán)境采用微軟的FrontPage2000+PWS。引入WindowsDNA概念,將WindowsDNA應(yīng)用到系統(tǒng)開發(fā)中。采用3-Tier軟件結(jié)構(gòu):表示層采用HTML、JavaScript或VBScript結(jié)合CSS、ActiveX技術(shù)來編寫;事務(wù)邏輯層,考慮到本系統(tǒng)為通用BBS系統(tǒng),系統(tǒng)應(yīng)該具備較大的可伸縮性,應(yīng)該能適應(yīng)最基本應(yīng)用最廣泛的WEB平臺(tái),特別是個(gè)人用戶想在一些免費(fèi)主頁空間搭建自已的論壇,而這類免費(fèi)主頁空間通常只支持ASP來處理服務(wù)器端數(shù)據(jù)或數(shù)據(jù)庫,另外,通用系統(tǒng)應(yīng)該具備較大的可擴(kuò)展性,目前,技術(shù)發(fā)展較快,未來應(yīng)該能以較小的成本用重寫本系統(tǒng),因此,本系統(tǒng)事務(wù)邏輯層設(shè)計(jì)采用ASP網(wǎng)頁;至于數(shù)據(jù)層,本系統(tǒng)采用最基本的MSAccess數(shù)據(jù)庫系統(tǒng),視需要,系統(tǒng)作較小的改動(dòng)就可以移植到其它大型數(shù)據(jù)庫系統(tǒng)。
本系統(tǒng)要求客戶端支持IE4.0以上或與之兼容的瀏覽器軟件,客戶端硬件最低要求對應(yīng)于IE4.0的硬件平臺(tái)要求。服務(wù)器端要求支持ASP以及MSAccess數(shù)據(jù)庫。
本系統(tǒng)的開發(fā)環(huán)境和開發(fā)工具為:Windows98,PWS,F(xiàn)rontPage2000,MSAccess。
2.2需求分析
2.2.1系統(tǒng)的綜合要求
1、系統(tǒng)界面要求
系統(tǒng)的初始界面假定用戶是匿名登錄,用戶可以通過初始界面提供的統(tǒng)一的用戶登錄接口,登錄進(jìn)入各自的操作界面
2、系統(tǒng)功能要求
本系統(tǒng)應(yīng)具有通常BBS網(wǎng)站應(yīng)該具有的所有功能,包括用戶注冊、用戶登錄、匿名登錄、發(fā)表文章、閱讀文章、回復(fù)別人的文章、分頁查找、主題查找、作者查找、多種方式排序、個(gè)人資料修改、在線人數(shù)統(tǒng)計(jì)等,此外,用戶在發(fā)表貼子時(shí),能輸入帶格式文本,用戶在發(fā)表或回復(fù)一篇貼子時(shí),能獲得相應(yīng)的積分,其積分能反應(yīng)此用戶在本論壇的活躍程度。
本系統(tǒng)操作用戶按不同級別依次可分為:匿名用戶、普通會(huì)員用戶、版主會(huì)員用戶、超級用戶。高級別的用戶可以繼承低級別用戶的公用功能。同時(shí),各級別用戶具有一定的只有以本級別身分登錄才具有的私有功能。
匿名用戶功能要求---通用功能:查看各版面文章、查看系統(tǒng)版主列表、查看系統(tǒng)會(huì)員列表;私有功能:注冊為系統(tǒng)正式會(huì)員、會(huì)員找回遺失密碼、登錄為正式會(huì)員。
普通會(huì)員功能要求---通用功能:發(fā)表或回復(fù)貼子、個(gè)人資料維護(hù)、退出或重新以匿名身分登錄;私有功能:申請為版面版主、注銷會(huì)員資格。
版主會(huì)員功能要求---通用功能:貼子管理、張貼公告、友情鏈接管理
超級用戶功能要求---通用功能:論壇基本設(shè)定、版面管理、版主會(huì)員管理、普通會(huì)員管理
3、系統(tǒng)性能要求
對于貼子查看、發(fā)表貼子以及回復(fù)貼子這類頻繁發(fā)生的系統(tǒng)操作,要采取適當(dāng)?shù)募夹g(shù)優(yōu)化這類數(shù)據(jù)操作,以提高數(shù)據(jù)存取效率。
4、安全性保密性可靠性等其它方面的要求
高級別用戶的所有管理操作要有針對低級別用戶的身分識(shí)別功能,以防止低級別的用戶越權(quán)執(zhí)行高級別用戶才具有的操作功能。
2.2.2系統(tǒng)的數(shù)據(jù)要求
根據(jù)系統(tǒng)的功能需求,本系統(tǒng)管理和維護(hù)以下幾種數(shù)據(jù)元素(實(shí)體Entity):會(huì)員、管理員、論壇、論壇版面、貼子、友情鏈接、日志。
1、會(huì)員實(shí)體
會(huì)員用戶包含這樣一些基本屬性:用戶名、用戶密碼、用戶密碼提示問題、用戶密碼提示問題答案、用戶EMAIL、用戶真名、性別、出生年月日、主頁URL、聯(lián)系方式、證件名稱、證件號(hào)碼、積分。其中,用戶名為用戶唯一標(biāo)志,不允許重名。積分為此用戶在本論壇發(fā)表文章以及文章被其它用戶關(guān)注程度所累積的分?jǐn)?shù),作為衡量此用戶在本論壇活躍程度的一個(gè)標(biāo)志。
2、管理員
管理員實(shí)際上派生于會(huì)員用戶,意味著只有會(huì)員用戶才有資格申請本論壇各版面的管理權(quán)限,因此,他除了包含會(huì)員用戶所有的基本屬性以外,還應(yīng)包含以下幾個(gè)屬性:申請管理版面、申請理由、申請被批準(zhǔn)狀態(tài)。一個(gè)管理員可以管理幾個(gè)版面,一個(gè)版面可以由幾個(gè)管理員管理,所以,應(yīng)該有一個(gè)管理員序號(hào)來唯一標(biāo)志這個(gè)實(shí)體。另外,管理員也分為兩類,一類是超級管理員,具有管理和維護(hù)本論壇所有數(shù)據(jù)信息的權(quán)限,另一類是普通版主,只能管理與某版面相關(guān)的數(shù)據(jù)信息,可以用申請管理版面以及申請被批準(zhǔn)狀態(tài)來區(qū)分這兩類管理員,如果申請管理版面為零用申請被批準(zhǔn)通過,則此會(huì)員就為超級管理員,如果申請管理版面在本論壇存在且申請被批準(zhǔn)通過,則此會(huì)員就為版主管理員,否則,此會(huì)員仍為普通會(huì)員。
3、論壇
論壇基本信息比較穩(wěn)定,只能為超級管理員所維護(hù),此實(shí)體包括以下一些基本屬性:論壇名稱、論壇版權(quán)信息、論壇公告、公告內(nèi)容。
4、版面
論壇版面包含這樣一些基本屬性:中文名稱、英文名稱、版面簡介、版面公告。此外,論壇版面實(shí)體與管理員實(shí)體有聯(lián)系,與貼子實(shí)體也有聯(lián)系。
5、貼子
貼子包含以下一些基本屬性:所屬版面,作者,標(biāo)題,貼子類型,所屬主貼,回復(fù)數(shù)量,點(diǎn)擊次數(shù),標(biāo)題圖像,貼子內(nèi)容,貼子書寫時(shí)間,最后一次更新貼子時(shí)間。貼子包括兩種類型:主貼和回復(fù)。貼子序號(hào)為此貼子唯一標(biāo)志。
6、友情鏈接
友情鏈接實(shí)體包含以下一些基本屬性:添加本鏈接管理員,鏈接名,鏈接URL,鏈接說明。一個(gè)管理員可以添加多條友情鏈接。除超級管理員外,已添加的友情鏈接只能由添加作者修改或刪除。鏈接名,鏈接URL不可重復(fù),可作主鍵。
7、日志
日志包括以下一些基本屬性:登錄會(huì)員,登錄IP,登錄時(shí)間,退出時(shí)間。
本系統(tǒng)實(shí)體之間主要有以下幾類聯(lián)系(Relation):用戶與論壇版面之間存在管理聯(lián)系(M:N)、用戶與貼子之間(1:M)、用戶與友情鏈接(1:M)、用戶與日志(1:M)、論壇版面與貼子(1:M)
幾個(gè)基本實(shí)體-聯(lián)系圖(ER圖)如下:
(圖轉(zhuǎn)下頁)
2.2.3系統(tǒng)的邏輯模型
系統(tǒng)邏輯模型數(shù)據(jù)流簡要說明:
1、匿名用戶與信息處理系統(tǒng)之間
系統(tǒng)的輸入數(shù)據(jù)流:注冊資料、登錄數(shù)據(jù)、找回密碼數(shù)據(jù)
系統(tǒng)的輸出數(shù)據(jù)流:用戶遺失密碼、某篇貼子內(nèi)容、會(huì)員列表、版主列表、版面列表、人氣貼子列表、熱門話題列表
加工邏輯:注冊加工、登錄加工、用戶找回密碼加工
2、會(huì)員用戶與信息處理系統(tǒng)之間
系統(tǒng)的輸入數(shù)據(jù)流:版主資格申請、注冊資料修改、發(fā)表貼子、回復(fù)貼子
系統(tǒng)的輸出數(shù)據(jù)流:某篇貼子內(nèi)容、會(huì)員列表、版主列表、版面列表、人氣貼子列表、熱門話題列表
加工邏輯:版主資格申請、注冊資料修改、發(fā)表貼子,回復(fù)貼
3、版主與信息處理系統(tǒng)之間
系統(tǒng)的輸入數(shù)據(jù)流:注冊資料修改、發(fā)表貼子、回復(fù)貼子、友情鏈接維護(hù)、公告、管理版面貼子維護(hù)
系統(tǒng)的輸出數(shù)據(jù)流:某篇貼子內(nèi)容、會(huì)員列表、版主列表、版面列表、人氣貼子列表、熱門話題列表
加工邏輯:注冊資料修改、發(fā)表貼子、回復(fù)貼子、友情鏈接維護(hù)、公告、管理版面貼子維護(hù)
4、超級會(huì)員與信息處理系統(tǒng)之間
系統(tǒng)的輸入數(shù)據(jù)流:注冊資料修改、發(fā)表貼子、回復(fù)貼子、友情鏈接維護(hù)、添加版面、論壇基本信息維護(hù)、論壇所有貼子維護(hù)、版主申請批復(fù)
系統(tǒng)的輸出數(shù)據(jù)流:某篇貼子內(nèi)容、會(huì)員列表、版主列表、版面列表、人氣貼子列表、熱門話題列表
加工邏輯:注冊資料修改、發(fā)表貼子、回復(fù)貼子、友情鏈接維護(hù)、添加版面、論壇基本信息維護(hù)、論壇所有貼子維護(hù)、版主申請批復(fù)
三、系統(tǒng)設(shè)計(jì)
3.1系統(tǒng)概要設(shè)計(jì)
3.1.1數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)
參照用戶與版面之間管理關(guān)系ER圖,可以將用戶、版面轉(zhuǎn)換成三個(gè)關(guān)系模式,設(shè)計(jì)如下:
論壇版面關(guān)系模式(版面ID#,版面中文名,版面英文名,版面簡介)
用戶關(guān)系模式(用戶名#,用戶密碼,用戶密碼提示問題,問題答案,用戶EMAIL,用戶真名,用戶性別,用戶出生年月,用戶主頁,用戶證件名稱,用戶證件號(hào)碼,用戶聯(lián)系方式,用戶積分)
管理員關(guān)系模式(管理員ID#,用戶名#,申請管理版面ID#,申請管理理由,申請被批示狀態(tài))
參照用戶與貼子之間ER圖,可以將其轉(zhuǎn)換成二個(gè)關(guān)系模式,設(shè)計(jì)如下:
用戶關(guān)系模式(用戶名#,用戶密碼,用戶密碼提示問題,問題答案,用戶EMAIL,用戶真名,用戶性別,用戶出生年月,用戶主頁,用戶證件名稱,用戶證件號(hào)碼,用戶聯(lián)系方式,用戶積分)
貼子關(guān)系模式(貼子ID#,標(biāo)題,貼子類型,主貼子ID,回復(fù)數(shù)量,點(diǎn)擊次數(shù),標(biāo)題圖像,貼子內(nèi)容,貼子書寫時(shí)間)
按照上述轉(zhuǎn)換方法,再結(jié)合系統(tǒng)一些功能以及性能方面的需要,系統(tǒng)所有關(guān)系模式設(shè)計(jì)如下:
論壇基本信息(論壇信息ID#,論壇名,版權(quán)說明,論壇公告標(biāo)題,公告內(nèi)容,最后一次修改時(shí)間)
論壇版面信息(版面ID#,版面中文名,版面英文名,版面簡介)
用戶基本信息(用戶名#,用戶密碼,用戶密碼提示問題,問題答案,用戶EMAIL,用戶真名,用戶性別,用戶出生年月,用戶主頁,用戶證件名稱,用戶證件號(hào)碼,用戶聯(lián)系方式,用戶積分)
管理員基本信息(管理員ID#,用戶名#,申請管理版面ID#,申請管理理由,申請被批示狀態(tài))
貼子基本信息(貼子ID#,版面ID#,用戶名#,標(biāo)題,貼子類型,主貼子ID,回復(fù)數(shù)量,點(diǎn)擊次數(shù),標(biāo)題圖像,貼子內(nèi)容,貼子書寫時(shí)間,最后一次更新貼子時(shí)間)
友情鏈接基本信息(鏈接ID#,用戶名#,鏈接名,鏈接URL,鏈接說明)
用戶訪問日志信息(日志ID#,用戶名#,用戶登錄IP,登錄時(shí)間,退出時(shí)間)
注:第一個(gè)帶“#”標(biāo)志的屬性為本關(guān)系模式的主鍵,其它為外鍵
3.1.2系統(tǒng)結(jié)構(gòu)的設(shè)計(jì)
系統(tǒng)主頁面自動(dòng)進(jìn)行身份判別,按照訪問者的身份自動(dòng)進(jìn)入其相應(yīng)的操作界面,其流程如下所示:
各類用戶的操作界面所具有的功能如下表所示:
(表見下頁)
用戶
類型功能
類型功能過程
編號(hào)過程名
匿名
用戶私有登錄為正式會(huì)員P1.1Userlog.asp
注冊為正式會(huì)員P1.2Userreg.asp
會(huì)員找回遺失密碼P1.3Getpass.asp
公有查看系統(tǒng)會(huì)員列表P1.4Useradmin.asp
查看系統(tǒng)版主列表P1.5Adminorlist.asp
查看各版面文章列表P1.6Topic.asp?bid=XXX
查看熱門話題P1.7Topic.asp?method=hot
查看人氣貼子P1.8Topic.asp?method=hits
查看某篇文章P1.9Show.asp?id=XXX
普通
會(huì)員私有申請為版面版主P2.1Adminapply.asp?bid=XXX
注銷會(huì)員資格P2.2Userlogoff.asp
公有個(gè)人資料維護(hù)P2.3Usermodify.asp
發(fā)表貼子P2.4Post.asp?bid=XXX
回復(fù)貼子P2.5Post.asp?id=XXX&bid=XXX
重新以匿名身分登錄P2.6Quitbbs.asp
版主
會(huì)員公有貼子管理P3.1Articleadmin.asp
張貼公告P3.2Newspost.asp
友情鏈接管理P3.3Linkadmin.asp?bid=XXX
超級
會(huì)員公有論壇基本設(shè)定P4.1BBSset.asp
版面管理P4.2Boardadmin.asp
(注:私有功能為該級別用戶所獨(dú)有的功能,不能為其高級別用戶所繼承,而其公有功能則可以為比其級別高的用戶所繼承)
3.2系統(tǒng)詳細(xì)設(shè)計(jì)
3.2.1基本算法
基于WEB的通用BBS系統(tǒng)其系統(tǒng)定義部分采用面對對象的系統(tǒng)分析方法,并結(jié)合傳統(tǒng)的結(jié)構(gòu)化分析方化,設(shè)計(jì)出其系統(tǒng)模型,如果采用面向?qū)ο蟮某绦蛟O(shè)計(jì)語言開發(fā)系統(tǒng),則可以很方便地從系統(tǒng)分析階段平滑地過渡到設(shè)計(jì)階段。但是,本系統(tǒng)采用ASP技術(shù),我們知道ASP不支持繼承和強(qiáng)類型轉(zhuǎn)換等面向?qū)ο蟪绦蛟O(shè)計(jì)所必需的功能,只能采用一定的技術(shù)措施,用傳統(tǒng)的結(jié)構(gòu)型程序設(shè)計(jì)方式實(shí)現(xiàn)諸如繼承等這類功能。下面就部分系統(tǒng)實(shí)現(xiàn)做一下簡要說明:
1.系統(tǒng)主頁面Main.asp
這是BBS網(wǎng)站的HomePage,程序首先進(jìn)行用戶身份判斷。
本系統(tǒng)用戶身份信息經(jīng)登錄后保存在SESSION對象的USERNAME和ADMINBOARD兩個(gè)變量里。匿名用戶(既Guest)這兩個(gè)變量為空或沒有定義;普通用戶USERNAME變量有用戶在本系統(tǒng)注冊的會(huì)員昵稱,但其ADMINBOARD變量沒有定義或?yàn)榭?;版主用戶其ADMINBOARD變量保存有他管理版面的ID;如果ADMINBOARD變量為“0”則為超級會(huì)員。
依據(jù)程序?qū)τ脩羲龅呐袛?,插入相?yīng)用戶的功能操作菜單。這就實(shí)現(xiàn)了不同層次對象的同一方法的不同功能。譬如Guest::main.asp載入的功能菜單為genhead.asp,Super::main.asp載入的功能菜單則為superhead.asp。注意:功能菜單文件其實(shí)就是普通的HTML文件,按照各自所屬的操作對象列示其相應(yīng)的功能鏈接。
2.各級別用戶私有功能的實(shí)現(xiàn)方法
私有功能是不能為比其級別高的用戶所繼承的功能。因此,私有功能ASP網(wǎng)頁應(yīng)進(jìn)行具體某個(gè)級別身份的識(shí)別,非這個(gè)級別層次的用戶則被拒絕訪問。
3.各級別用戶公有功能的實(shí)現(xiàn)方法
公有功能是可以為比其級別高的用戶所繼承的功能。因此,公有功能ASP網(wǎng)頁只進(jìn)行比其級別低的用戶身份的識(shí)別,如果此用戶級別低則拒絕繼續(xù)訪問。此外,高級別的用戶可以進(jìn)行功能重載,譬如,匿名用戶只能查看本系統(tǒng)會(huì)員列表,但是,超級會(huì)員在查看的同時(shí),還可以進(jìn)行管理操作,如修改,刪除等。下面是所有公用功能的重載列表:
Guest::useradmin.asp查看本論壇注冊會(huì)員列表
Super::useradmin.asp查看并管理本論壇注冊會(huì)員列表
Guest::adminorlist.asp查看本論壇版主列表
Super::adminorlist.asp查看并管理本論壇版主列表
Adminor::articleadmin.asp自已管理轄版面范圍內(nèi)的貼子維護(hù)
Super::articleadmin.asp本論壇所有版面貼子維護(hù)
Adminor::linkadmin.asp添加或維護(hù)自已曾添加的友情鏈接
Super::linkadmin.asp維護(hù)所有友情鏈接列表
Adminor::newpost.asp在自已管理版面公告
Super::newpost.asp在任一版面公告
4.會(huì)員用戶積分的計(jì)算模型
會(huì)員用戶每提交一篇文章,可以積十分。回復(fù)某篇文章,則可以積五分,同時(shí)原文作者積三分。
5.版主申請條件以及計(jì)算模型
版主申請條件:為正式注冊會(huì)員;一個(gè)會(huì)員最多管理二個(gè)版面;一個(gè)版面最多五個(gè)管理員。
計(jì)算機(jī)模型:用戶提出申請,超級用戶審批。審批完成前此會(huì)員不能再次就同一版面申請版主權(quán)限。
6.超文本信息輸入
具有普通會(huì)員身份以上級別的用戶,發(fā)表貼子或回復(fù)貼子時(shí),可以在其貼子內(nèi)插入諸如滾動(dòng)文字,字體大小顏色不同的文字,以及超鏈接等等。系統(tǒng)接受用戶輸入時(shí)對帶格式文本應(yīng)進(jìn)行相應(yīng)的編碼(Encode),系統(tǒng)顯示帶超文本信息的貼子時(shí)則應(yīng)進(jìn)行相應(yīng)的解碼(Decode)。
3.2.2關(guān)鍵技術(shù)
3.2.2.1ASP技術(shù)
ASP技術(shù)是一種類似HTML(HypertextMarkupLanguage超文本標(biāo)識(shí)語言)、Script與CGI(CommonGatewayInterface通用網(wǎng)關(guān)接口)的結(jié)合體,簡單的講它是一種運(yùn)行于服務(wù)器的腳本語言,但是其運(yùn)行效率比CGI更高、程序編制也比HTML更方便且更有靈活性,程序安全性及保密性也遠(yuǎn)比Script好。
其特點(diǎn)歸納如下:
1.ASP可以和HTML或其他腳本語言(VBScript與JavaScript)互相嵌套。
2.ASP是一種在Web服務(wù)器端運(yùn)行的腳本語言,因此,程序代碼完全保密。
3.ASP以對象為基礎(chǔ),因此可以使用ActiveX控件繼續(xù)擴(kuò)充其功能。
4.ASP內(nèi)置ADO組件,因此可以輕松地存取各種數(shù)據(jù)庫,大大縮短了程序開發(fā)時(shí)間。
5.ASP可以將運(yùn)行結(jié)果以HTML的格式傳送至客戶端瀏覽器,因此ASP可以適用于各種瀏覽器。
下面來介紹一下ASP的幾個(gè)內(nèi)置對象。
Request對象,我們知道HTTP通訊協(xié)議是一種請求與響應(yīng)(Request/Response)的通訊協(xié)議,因此通常由客戶端向Web服務(wù)器提出請求,Web服務(wù)器才會(huì)響應(yīng)信息。因此在ASP中,特別將“客戶端提出的要求”與“Web服務(wù)器響應(yīng)的信息”等動(dòng)作封裝成Request對象與Response對象。換而言之,Request對象通常包含了用戶端的相關(guān)信息,如瀏覽器的種類、表頭信息、表單參數(shù)及cookies等等。
Response對象,每一種程序語言或開發(fā)工具一定都有與用戶溝通的界面或函數(shù),ASP也不例外。在ASP中負(fù)責(zé)將信息傳達(dá)到用戶的對象就是Response對象。
Server對象,Server對象允許用戶取得服務(wù)器提供的各項(xiàng)功能,例如,Server對象的CreateObject方法允許客戶端用戶建立一個(gè)ActiveXServer組件實(shí)例,其所建立組件實(shí)例會(huì)隨著服務(wù)器端完成ASP網(wǎng)頁的處理而自動(dòng)被釋放。如果希望此對象實(shí)例可以跨多個(gè)ASP網(wǎng)頁,就要用到Session對象保留該組件實(shí)例,直到Session對象的運(yùn)行時(shí)間到了,或是在其他ASP網(wǎng)頁調(diào)用Session對象的Abandon方法,此組件實(shí)例才會(huì)被釋放。
Session對象,Session對象在ASP程序編寫中占了相當(dāng)重的份量,由于網(wǎng)頁是一種無狀態(tài)的程序,因此幾乎無法知道用戶的瀏覽狀態(tài)。必須通過Session對象記錄用戶的相關(guān)信息,以供用戶再次對此Web服務(wù)器提出要求時(shí)作確認(rèn),例如,在某些特定的網(wǎng)頁中,常需要用戶輸入確認(rèn)的賬號(hào)和密碼,假如這些身份確認(rèn)的結(jié)果無法保留,那豈不是每一個(gè)網(wǎng)頁都需要重新輸入一次密碼。換而言之,每一個(gè)Session的用戶,Web服務(wù)器均會(huì)自動(dòng)的為它們建立一個(gè)Session。必須說明,Session對象只能適用于具備Cookie功能的瀏覽器。
3.2.2.2ADO技術(shù)
ADO(ActiveXDataObjects)是微軟公司提供給網(wǎng)頁開發(fā)者在網(wǎng)頁中存取數(shù)據(jù)庫的最新技術(shù),它也是ASP內(nèi)置的重要組件,ADO主要的目的是為了存取或修改數(shù)據(jù)源的數(shù)據(jù)、或增加數(shù)據(jù)到指定的數(shù)據(jù)源,數(shù)據(jù)源不僅包括數(shù)據(jù)庫,而且包括dBase、Excel、Foxpro、Access或文本文件等一些小型的數(shù)據(jù)表,所以,只要是ODBC驅(qū)動(dòng)程序所能存取的數(shù)據(jù)源皆是ADO存取的對象。ADO主要是由Connection對象、Command對象、Parameter對象、Recordset對象、Field對象、Property對象及Error對象等七個(gè)對象與Fields數(shù)據(jù)集合、Properties數(shù)據(jù)集合、Parameters數(shù)據(jù)集合及Errors數(shù)據(jù)集合等四個(gè)數(shù)據(jù)集合所組合而成,其功能概述如下。
ADO提供的七個(gè)對象:
1.Connection對象負(fù)責(zé)與指定的數(shù)據(jù)源進(jìn)行連接,除此之外,它還可以通過事物(Transaction)來確保在事物中所有的數(shù)據(jù)源變更的全部成功。
mand對象負(fù)責(zé)對數(shù)據(jù)庫提供請求,也就是傳遞指定的SQL命令。換而言之,Command對象必須經(jīng)過一個(gè)已經(jīng)建立的連接(Connection對象)發(fā)出數(shù)據(jù)操作語言(DML,DataManipulationLanguage)來操作數(shù)據(jù)源的數(shù)據(jù),這些命令通常包括INSERT(增加記錄)、DELETE(刪除記錄)、UPDATE(更新記錄)、或是SELECT(以Recordset的形式選取數(shù)據(jù))等。除此之外,也可以通過Command對象對數(shù)據(jù)庫發(fā)出數(shù)據(jù)定義語言(DDL,DataDefinitionLanguage),例如CREATETABLE(建立數(shù)據(jù)表)、DROPTABLE(刪除數(shù)據(jù)表)或ALTERTABLE(修改數(shù)據(jù)表結(jié)構(gòu))等。
3.Parameter對象負(fù)責(zé)傳遞Command對象所需要的SQL命令參數(shù)。
4.RecordSet對象負(fù)責(zé)瀏覽和操作從數(shù)據(jù)庫取出的數(shù)據(jù),換而言之,RecordSet對象就象是一個(gè)二維的數(shù)組,數(shù)組的每一行表示一個(gè)數(shù)據(jù)記錄,而每個(gè)數(shù)劇列包含一個(gè)或多個(gè)數(shù)據(jù)字段,即Field對象。
5.Field對象表示指定RecordSet對象的數(shù)據(jù)字段。
6.Property對象表示ADO的各項(xiàng)對象屬性值,換而言之,每個(gè)ADO對象都會(huì)有一組描述和控制對象行的屬性。
7.Error對象負(fù)責(zé)記錄連接過程所發(fā)生的錯(cuò)誤信息。
ADO提供的四個(gè)數(shù)據(jù)集合:
1.Connection對象包含Errors數(shù)據(jù)集合,在Errors數(shù)據(jù)集合中包含數(shù)劇源響應(yīng)失敗時(shí)所建立的Error對象。
mand對象包含Parameters數(shù)據(jù)集合,在Parameters數(shù)據(jù)集合中包括Command對象所有的Parameter對象。
3.RecordSet對象包含F(xiàn)ields數(shù)據(jù)集合,在Fields數(shù)據(jù)集合中包含RecordSet對象的所有Field數(shù)據(jù)字段對象。
4.Connection對象、Command對象、RecordSet對象與Field對象皆包含一個(gè)Properties數(shù)據(jù)集合,在Properties數(shù)據(jù)集合中包含所對應(yīng)Connection對象、Command對象、RecordSet對象與Field對象的Property對象。
ADO的七個(gè)對象及四個(gè)數(shù)據(jù)集合相互的關(guān)系圖如下:
ActiveXDataObject關(guān)系圖如下:
3.2.2.3數(shù)據(jù)庫技術(shù)
1、MSAccess數(shù)據(jù)庫
數(shù)據(jù)庫(Database)是一系列信息資源的集合。在一個(gè)數(shù)據(jù)庫中,與一個(gè)項(xiàng)目有關(guān)的所有信息都可以叫做一條記錄(Record)。每一條記錄都是由一系列的字段(Field)組成的。一系列記錄的集合就構(gòu)成了數(shù)據(jù)表格(Table)。對于一個(gè)簡單的“平面文件”的數(shù)據(jù)庫來說,它僅包含了一個(gè)數(shù)據(jù)表格,而對一個(gè)“關(guān)系型”數(shù)據(jù)庫來說,它卻包含兩個(gè)或兩個(gè)以上的數(shù)據(jù)表格,表格的各字段之間存在這一種或多種關(guān)系(有時(shí)可以把這種關(guān)系叫做“鏈接”)。
簡單的平面文件數(shù)據(jù)庫的用途非常有限,而關(guān)系型數(shù)據(jù)庫卻能夠包含數(shù)據(jù)以百萬計(jì)甚至以億計(jì)的記錄,并可以利用復(fù)雜的標(biāo)準(zhǔn)對這些記錄進(jìn)行操作,例如排序和統(tǒng)計(jì)。把它們叫做“關(guān)系型”數(shù)據(jù)庫,是因?yàn)樾枰谶@些數(shù)據(jù)表格的字段之間建立特定的鏈接關(guān)系。關(guān)系型數(shù)據(jù)庫的優(yōu)點(diǎn)在于:通過將一個(gè)表格中的字段與另一個(gè)表格中的字段聯(lián)系起來,兩個(gè)表格之間的信息可以相互調(diào)用,可以避免信息的重復(fù)記錄,也可以避免管理上的混亂。因此關(guān)系型數(shù)據(jù)庫可以減小數(shù)據(jù)庫的體積,這對于大型的數(shù)據(jù)庫來說具有非常重要的意義。
建立WEB站點(diǎn)時(shí),可以使用兩種主要的數(shù)據(jù)庫:MicrosoftSQLServer和MicrosoftAccess。MicroSQLServer是一種功能齊全的客戶機(jī)/服務(wù)器數(shù)據(jù)庫產(chǎn)品,適用于系統(tǒng)經(jīng)常被大量的用戶查詢的情況。對于查詢次數(shù)有限的情況,則可以采用中小型數(shù)據(jù)庫的代表產(chǎn)品MicrosoftAccess。MicrosoftAccess是理想的入門級產(chǎn)品,其中提供了大量的向?qū)?,可以輔助完成數(shù)據(jù)庫的創(chuàng)建和管理。
2、數(shù)據(jù)源(DSN)
ASP網(wǎng)頁通過DSN數(shù)據(jù)源或者DSN-less方式連接網(wǎng)頁數(shù)據(jù)庫。
DSN數(shù)據(jù)源方式:ASP網(wǎng)頁通過標(biāo)準(zhǔn)的ODBC(OpenDataBaseConnectivity)數(shù)據(jù)源DSN(DataSourceName)接口訪問數(shù)據(jù)庫數(shù)據(jù)。ODBC屬于一種標(biāo)準(zhǔn)的數(shù)據(jù)接口,提供各類應(yīng)用程序一個(gè)數(shù)據(jù)訪問的標(biāo)準(zhǔn)方法。ODBC規(guī)范為應(yīng)用程序提供了一套高層調(diào)用接口規(guī)范和基本于動(dòng)態(tài)鏈接庫的運(yùn)行支持環(huán)境。使用ODBC開發(fā)數(shù)據(jù)庫應(yīng)用程序時(shí),應(yīng)用程序調(diào)用的是標(biāo)準(zhǔn)的ODBC函數(shù)和SQL語句,數(shù)據(jù)庫的底層操作由各個(gè)數(shù)據(jù)庫的驅(qū)動(dòng)程序完成。使用DSN數(shù)據(jù)源方式,用戶必須以手工的方式進(jìn)行ODBC配置,添加一個(gè)指向用戶數(shù)據(jù)庫的系統(tǒng)數(shù)據(jù)源DSN,ASP網(wǎng)頁使用DSN數(shù)據(jù)源字符串連接至用戶數(shù)據(jù)庫,例如:
strDB-DSN=”DSN=DSN名稱;uid=XXX;pwd=xxx”
DSN-less數(shù)據(jù)源方式:使用本方式連接數(shù)據(jù)庫,就必須自行提供DSN數(shù)據(jù)的相關(guān)信息,最重要的是驅(qū)動(dòng)程序。例如:
strDBConn=”DRIVER={MicrosoftAccessDriver(.mdb)};DBQ=c:\userdb.mdb”
3、結(jié)構(gòu)查詢語言(SQL)
SQL是結(jié)構(gòu)查詢語言(StructureQueryLanguage)的英文縮寫,它是使用關(guān)系模型數(shù)據(jù)庫的應(yīng)用語言,由IBM在七十年代開發(fā)出來的,實(shí)現(xiàn)了關(guān)系型數(shù)據(jù)庫中的信息檢索。1992年制定了SQL標(biāo)準(zhǔn)SQL-92,它的全名是“InternationalStandardISO/IEC9075:1992,DatabaseLanguageSQL”。SQL標(biāo)準(zhǔn)的確定使大多數(shù)數(shù)據(jù)庫廠家紛紛采用SQL語言作為其數(shù)據(jù)庫檢索語言。
利用SQL語言,可以查詢和管理自已的數(shù)據(jù)庫。它由大約30條命令構(gòu)成,但實(shí)際只需要少數(shù)的幾個(gè)命令就可以完成相當(dāng)多的工作,常用的SQL查詢命令有:Select、Insert、Delete、Update等。
3.2.2.4VBScript及JavaScript腳本語言
Script(腳本)是由一組可以在客戶端瀏覽器上運(yùn)行的命令組合而成的語言,你可以把它想像成一個(gè)運(yùn)行于客戶端上的可執(zhí)行程序。目前在網(wǎng)頁編制上比較流行的腳本語言包括VBScript及JavaScript。它們都是一種與HTML語言相似的描述性語言,也是以文本形式存在,不像C語言或Java語言那樣,需要編譯連接成字節(jié)碼形式的可執(zhí)行程序。Script語句可以單獨(dú)存成文檔,也可以被嵌入到HTML的文件之中,與HTML語句結(jié)合在一起。當(dāng)需要將Script語句直接加入到HTML文件中時(shí),只要使用一個(gè)HTML標(biāo)記符號(hào)<Script>即可。例如:
<HTML>
<HEAD>
<TITLE>temp</TITLE>
</HEAD>
<ScriptLanguage="JavaScript">
vari=10;
document.write(i);
</Script>
<BODY>
<H1>ThisisaJavaScriptexample.</H>
</BODY>
</HTML>
另外,Script程序在HTML中的位置也比較自由,它可以在HTML文件中的任何位置。
腳本語言是一種解釋性語言,可以直接由瀏覽器來解釋執(zhí)行。并且可以直接訪問瀏覽器中的各種對象,如窗口對象、文檔對象、框架對象、超鏈接對象等。腳本語言可以實(shí)現(xiàn)的功能很多,可以用于定義網(wǎng)頁、在網(wǎng)頁中加入動(dòng)畫、對網(wǎng)頁中的各種元素進(jìn)行處理,特別是在處理表單方面有很強(qiáng)功能。不僅如此,它還可以很方便地控制瀏覽器中的各對象的屬性。例如,可以實(shí)現(xiàn)打開或關(guān)閉瀏覽器窗口、設(shè)置窗口狀態(tài)、改變窗口中的超鏈接位置等。總之,一些常用的功能都可以用腳本語言實(shí)現(xiàn)。
本BBS系統(tǒng)中就運(yùn)用了大量的腳本語言,一方面用來完成表單提交前的數(shù)據(jù)驗(yàn)證任務(wù),另一方面用來完成打開新的窗口、關(guān)閉當(dāng)前窗口、返回前一頁及下拉菜單等功能。通過使用腳本語言既防止了大量錯(cuò)誤數(shù)據(jù)被提交到服務(wù)器,進(jìn)而節(jié)約了寶貴的系統(tǒng)資源;也使網(wǎng)頁更加美觀、操作更加方便。大大提高了系統(tǒng)的性能。
1、JavaScript
Java語言的功能很強(qiáng)大,在網(wǎng)頁設(shè)計(jì)中非常的有效,但是它要求創(chuàng)建APPLET的人員必須是程序設(shè)計(jì)員。SunMicrosystems(太陽微系統(tǒng))公司為了消除對于WEB站點(diǎn)的開發(fā)人員的特殊要求,專門了JavaScript。
JavaScript腳本語言是一種解釋性,基本對象的腳本語言。雖然,它沒有那些真正意義上的面向?qū)ο笳Z言那么多的特性,但是對于它的預(yù)期功能而言,它能夠?qū)崿F(xiàn)的功能已經(jīng)夠大了。
Javascript并不是任何一種語言的刪節(jié)版(它只是與Java語言的關(guān)系很接近),它也不是任何一種語言的簡化版。然而,它的使用是有限的。不能使用它創(chuàng)建一個(gè)獨(dú)立的應(yīng)用,比如,它幾乎不能進(jìn)行文件的讀寫。此外,Javascript腳本只能運(yùn)行在解釋性語言的環(huán)境下,或是WEB服務(wù)器和WEB瀏覽器上。
Javascript是一種比較隨意的語言,這就并不意味著不一定必須明確地聲明變量的類型。此外,在很多情況下,Javascript腳本語言在需要的時(shí)候可以進(jìn)行自動(dòng)轉(zhuǎn)換。
JavaScript是Java與HTML結(jié)合的產(chǎn)物,HTML文檔中可以嵌套JavaScript命令,但是JavaScript語句不需要編譯,瀏覽器可以直接執(zhí)行JavaScript語句。利用JavaScript結(jié)合CCS可以創(chuàng)建交互能力很強(qiáng)的WEB界面。
2、VBScript語言
當(dāng)在設(shè)計(jì)WEB站點(diǎn)中使用JavaScript時(shí),Microsoft公司也在其非常流行的VisualBasic的基礎(chǔ)上,推出了另一種腳本設(shè)計(jì)語言VBScript。MicrosoftVisualBasicScriptingEdition是程序開發(fā)語言VisualBasic家族的最新成員,它將靈活的Script應(yīng)用于更廣泛的領(lǐng)域,包括MicrosoftInternetExplorer中的WEB客戶機(jī)Script和MicrosoftInternetInformationServer中的WEB服務(wù)器Script。
JavaScript可以支持大多數(shù)的平臺(tái),而VBScript目前只能在Windows環(huán)境下的瀏覽器中運(yùn)行。但是由于大多數(shù)用戶的操作系統(tǒng)都選用Windowst系列,因此,許多WEB站點(diǎn)的開發(fā)人員研始大量的使用VBScript。VBScript流行的主要原因是它將ActiveX對象的使用變得非常的簡單。ActiveX是Microsoft推出的一種新技術(shù),它支持WEB頁面調(diào)用類似OLE的對象。
VBScript使用ActiveXScript與宿主應(yīng)用程序?qū)υ?。使用ActiveXScript,瀏覽器和其他宿主應(yīng)用程序不再需要每個(gè)Script部件的特殊集成代碼。ActiveXScript使宿主可以編譯Script、獲取和調(diào)用入口點(diǎn)及管理開發(fā)者可用的命名空間。通過ActiveXScript,語言廠商可以建立標(biāo)準(zhǔn)Script運(yùn)行時(shí)語言。Microsoft將提供VBScript的運(yùn)行時(shí)支持。Microsoft正在與多個(gè)Internet組一起定義ActiveXScript標(biāo)準(zhǔn)以使Script引擎可以互換。ActiveXScript可用在MicrosoftInternetExplorer和MicrosoftInternetInformationServer中。因此對VBScript腳本語言的使用也變得重要起來。
3.2.2.5正則表達(dá)式技術(shù)
正則表達(dá)式(RegularExpression)最早是由數(shù)學(xué)家StephenKleene于1956年提出,他是在對自然語言的遞增研究成果的基礎(chǔ)上提出來的。具有完整語法的正則表達(dá)式使用在字符的格式匹配方面上,后來被應(yīng)用到熔融信息技術(shù)領(lǐng)域。自從那時(shí)起,正則表達(dá)式經(jīng)過幾個(gè)時(shí)期的發(fā)展,現(xiàn)在的標(biāo)準(zhǔn)已經(jīng)被ISO(國際標(biāo)準(zhǔn)組織)批準(zhǔn)和被OpenGroup組織認(rèn)定。
正則表達(dá)式并非一門專用語言,但它可用于在一個(gè)文件或字符里查找和替代文本的一種標(biāo)準(zhǔn)。它具有兩種標(biāo)準(zhǔn):基本的正則表達(dá)式(BRE),擴(kuò)展的正則表達(dá)式(ERE)。ERE包括BRE功能和另外其它的概念。
許多程序中都使用了正則表達(dá)式,包括xsh,egrep,sed,vi以及在UNIX平臺(tái)下的程序。它們可以被很多語言采納,如HTML、XML、JavaScript以及VBScript等等,這些采納通常只是整個(gè)標(biāo)準(zhǔn)的一個(gè)子集。
很多正則表達(dá)式的語法看起來很相似,這是因?yàn)槟阋郧澳銢]有研究過它們。通配符是RE的一個(gè)結(jié)構(gòu)類型,即重復(fù)操作。讓我們先看一看ERE標(biāo)準(zhǔn)的最通用的基本語法類型。我們以VBScript為例,說明正則表達(dá)式的應(yīng)用范疇及其構(gòu)造方法。
構(gòu)造正則表達(dá)式的方法和創(chuàng)建數(shù)學(xué)表達(dá)式的方法一樣。也就是用多種元字符與操作符將小的表達(dá)式結(jié)合在一起來創(chuàng)建更大的表達(dá)式。
可以通過在一對分隔符之間放入表達(dá)式模式的各種組件來構(gòu)造一個(gè)正則表達(dá)式。對VBScript而言,則采用一對引號(hào)("")來確定正則表達(dá)式的邊界。例如:"expression"。正則表達(dá)式模式(expression)存儲(chǔ)在RegExp對象的Pattern屬性中。
字符匹配
正則表達(dá)式的關(guān)鍵之處在于確定你要搜索匹配的東西,如果沒有這一概念,Res將毫無用處。
每一個(gè)表達(dá)式都包含需要查找的指令,如下所示:
".ord"-匹配象"ford","lord","2ord"等等之類的文本;
"[cng]ord"-只匹配"cord","nord",以及"gord"的文本;
"[^cn]ord"-匹配開頭字母不包括c以及n,后面字符串為ord的文本;
"[a-zA-Z]ord"-匹配開頭字母為英文字母,后面字符串為ord的文本;
"[^0-9]"-匹配開頭字母不包括數(shù)字,后面字符串為ord的文本。
重復(fù)操作符
重復(fù)操作符,或數(shù)量詞,都描述了查找一個(gè)特定字符的次數(shù)。它們常被用于字符匹配語法以查找多行的字符,參見下面例子:
"?erd"Willmatch"berd","herd",etc.and"erd"
"n.rd"Willmatch"nerd","nrd","neard",etc.
"[n]+erd"Willmatch"nerd","nnerd",etc.,butnot"erd"
"[a-z]{2}erd"Willmatch"cherd","blerd",etc.butnot"nerd","erd","buzzerd",etc.
".{2,}erd"Willmatch"cherd"and"buzzerd",butnot"nerd"
"n[e]{1,2}rd"Willmatch"nerd"and"neerd"
錨
錨是指它所要匹配的格式,使用它能方便你查找通用字符的合并。
"^blah"-匹配以blah為行首單詞的一行文本;
$blah"–匹配以blah為行尾單詞的一行文本;
"\<blah"–匹配以blah為首的單詞,如:blahcake;
"\>blah"–匹配以blah為尾的單詞,如:cakeblah;
"\bblah"–匹配blah在這個(gè)單詞的開頭或結(jié)尾的字符串,如blahcake;
"\Bblah"–匹配blah在這個(gè)單詞的中間的字符串,如asblahaaa。
間隔
Res中的另一可便之處是間隔(或插入)符號(hào)。實(shí)際上,這一符號(hào)相當(dāng)于一個(gè)OR語句并代表|符號(hào)。下面的語句返回一段文本中象"nerd"和"merd"的句柄:"(n|m)erd"。間隔功能非常強(qiáng)大,特別是當(dāng)你尋找文件不同拼寫的時(shí)候。下面的例子能得到相同的結(jié)果:"[nm]erd"。當(dāng)你使用間隔功能與Res的高級特性連接在一起時(shí),它的真正用處更能體現(xiàn)出來。
一些保留字符
Res的最后一個(gè)最重要特性是保留字符(也稱特定字符)。例如,如果你想要查找"nerd"和"nird"的字符,格式匹配語句"n[ei]rd"與"neeeeerd"和"nieieierd"相符合,但并不是你要查找的字符。因?yàn)?'''''''(星號(hào))是個(gè)保留字符,你必須用一個(gè)反斜線符號(hào)來替代它,即:"n[ei]\rd"。其它的保留字符包括:
^、.、[、]、$、(、)、|、、+、?、{、}、\等。
3.2.3實(shí)現(xiàn)方法
3.2.3.1ASP網(wǎng)頁數(shù)據(jù)庫的連接
網(wǎng)頁數(shù)據(jù)庫的連接方法有兩種,一種是DSN數(shù)據(jù)源,另一種是DSN-less方式,即不建立DSN連接數(shù)據(jù)。我們考慮最簡單的BBS系統(tǒng)應(yīng)用環(huán)境,使用互聯(lián)網(wǎng)上免費(fèi)資源,通常互聯(lián)網(wǎng)上免費(fèi)主頁空間只支持簡單的ASP應(yīng)用以及Access數(shù)據(jù)庫應(yīng)用,Access數(shù)據(jù)庫通常要求放置在固定的虛擬目錄位置,譬如:[\db]目錄位置,數(shù)據(jù)庫的連接也只支持DSN-less方式,這也是自然的,既然是免費(fèi)資源,總不能要求人家還特別幫你設(shè)置一個(gè)DSN數(shù)據(jù)源。另外,BBS通常只作為Web應(yīng)用的一部分,或者說作為你個(gè)人主頁或商業(yè)網(wǎng)站提供的一個(gè)附加功能,這個(gè)時(shí)候,你的BBS論壇系統(tǒng)通常都安裝在主頁空間一個(gè)單獨(dú)的目錄下,我們假定為[\BSS]。
所有要進(jìn)行數(shù)據(jù)庫存取的ASP網(wǎng)頁都要以DSN-less方式進(jìn)行數(shù)據(jù)庫連接,由此我們可以將執(zhí)行數(shù)據(jù)庫連接的ASP代碼單獨(dú)形成一個(gè)插入文件,通常插入文件都是以[.inc]作為擴(kuò)展名,考慮到安全性的需要,防止用戶直接輸入文件名下載此插入文件,所以我們?nèi)匀灰訹.asp]作為插入文件的擴(kuò)展名,比如,我們將一個(gè)用作數(shù)據(jù)讀操作的數(shù)據(jù)庫連接插入文件名命名為[dbconr.asp],下面就是其典型代碼:
<%
''''adModeUnknown0default
''''adModeRead1
''''adModeWrite2
''''adModeReadWrite3
''''adModeShareDenyRead4
''''adModeShareDenyWrite8
''''adModeShareExclusive12
''''adModeShareDenyNone16
strDBPath=Server.MapPath("dbconr.asp")
strDBPath=replace(strDBPath,"\bbs\dbconr.asp","\db\bbsdata.mdb")
strDBConn="DRIVER={MicrosoftAccessDriver(.mdb)};DBQ="&strDBPath
SetobjDBConn=server.createobject("adodb.connection")
objDBConn.ConnectionTimeOut=20
objDBConn.Mode=1‘讀模式
objDBConn.openstrDBConn
%>
注意,其中的objDBConn.Mode既為我們所做的數(shù)據(jù)庫連接將用于操作的模式是讀、寫、或是讀寫。至于為什么需要設(shè)置Mode屬性?設(shè)置Mode屬性可以節(jié)省ADO組件的處理時(shí)間。另外,數(shù)據(jù)用戶的權(quán)限管理十分重要,設(shè)置Mode屬性能夠有效率地規(guī)劃整個(gè)Web應(yīng)用程序的用戶權(quán)限。所以,從安全性和代碼執(zhí)行效率方面考慮,我們將讀與寫數(shù)據(jù)庫連接插入文件分別開來,分別命名為[dbconr.asp]和[dbconrw.asp]。
數(shù)據(jù)庫連接操作是一個(gè)相當(dāng)頻繁的操作,我們可以采用適當(dāng)?shù)募夹g(shù)來進(jìn)行數(shù)據(jù)庫連接優(yōu)化,以提高數(shù)據(jù)庫連接性能。在ASP的數(shù)據(jù)庫編程中,connection對象是我們不可能離開的一個(gè)對象,在對數(shù)據(jù)庫進(jìn)行任何的操作,比如更新記錄,插入,刪除,檢索等,都必須借助于connection對象來完成。形象地來說,connection對象就是程序與數(shù)據(jù)庫溝通的管道,所有對數(shù)據(jù)庫的操作,都必須經(jīng)過它,因此,無論我們以何種方式連接數(shù)據(jù)庫前,總是少不了執(zhí)行下列的代碼。
SetobjDBConn=Server.CreateObject("ADODB.Connection")
建立一個(gè)connection對象的實(shí)例變量,然后才能在它的基礎(chǔ)上建立recordset對象或是command對象來操作數(shù)據(jù)庫。既然connection對象是如此的重要,那么如何優(yōu)化和管理好connection對象對數(shù)據(jù)庫程序來說是極其重要的,它關(guān)系到程序的性能。
每當(dāng)一個(gè)客戶執(zhí)行數(shù)據(jù)庫操作時(shí),就需要借助一個(gè)connection對象,而每個(gè)connection對象就會(huì)占用服務(wù)器的一部分資源,而數(shù)據(jù)庫的同時(shí)連接數(shù)不可能是無限的,因此。在考濾要提供高性能的數(shù)據(jù)庫Web程序時(shí),我們需要考慮如何去減少服務(wù)器的開銷。一般來說。每個(gè)ASP頁面中建立一個(gè)connection對象,都會(huì)在服務(wù)器中產(chǎn)生一個(gè)對數(shù)據(jù)庫的連接。而不同的頁面的connection對象是不能共享的。那么。我們可不可以使同一個(gè)用戶所訪問的不同頁面共享一個(gè)connection連接通道呢。
我們來回顧一下ASP六大內(nèi)置對象的session對象,它可以為某個(gè)特定的用戶來保存私有的數(shù)據(jù),如果我們把connection對象保存在session對象中,是否可以使不同的ASP頁面都使用同一個(gè)連接通道呢?看看下面的這段程序。
<%
SetobjDBConn=Server.CreateObject("ADODB.Connection")
objDBConn.Mode=?
objDBConn.Open"[DSN-less串]"
session("dbconn")=objDBConn
Setrs=Server.CreateObject("ADODB.Recordset")
Commandtext="selectfromuserlist"
connstr=session("dbconn")
rs.openCommandtext,connstr,3,2
%>
在這個(gè)數(shù)據(jù)庫連接中。我們使用了session對象,首先,建立一個(gè)objDBConn的連接對象,然后連接到數(shù)據(jù)表userlist中,取得連接句柄后,把它保存在session("dbconn")這個(gè)session變量中,在打開記錄集前,從session("dbconn")中取出句柄,借助于session對象。我們可以使不同的ASP頁面共用一個(gè)連接對象,減少了對服務(wù)器內(nèi)存的開銷,而我們也不需要擔(dān)心,當(dāng)一個(gè)客戶因?yàn)殄e(cuò)誤操作導(dǎo)致服務(wù)器不能釋放該被占用的session連接對象,因?yàn)槲覀冎烂總€(gè)客戶的session對象是有一定的生存期限的,過了這個(gè)期限,服務(wù)器就會(huì)自動(dòng)把它釋放掉。
然而,數(shù)據(jù)庫連接性能的提高是以一定的服務(wù)器資源消耗為代價(jià)的,所以,我們就要在其中權(quán)衡利弊。通常,利用別人的主機(jī)空間來作為自已BBS系統(tǒng)的平臺(tái),就應(yīng)該盡諒避免使用過多的服務(wù)器資源,諸如APPLICATION以及SESSION變量,反之,主機(jī)資源豐富,而應(yīng)用系統(tǒng)相對較少,則可以考慮采用上述優(yōu)化方式。
3.2.3.2ASP網(wǎng)頁數(shù)據(jù)庫的操作
關(guān)于網(wǎng)頁數(shù)據(jù)庫的操作,ASP擁有三種方法:ADO組件的Connection對象配合SQL語法;ADO組件的Command對象執(zhí)行SQL語法;使用ADO組件的RecordSet。每種方法各有特點(diǎn)。
1、ADO組件Connection對象配合SQL語法
在網(wǎng)頁上使用SQL指令處理數(shù)據(jù)的訪問,需要使用ADO組件的Connection對象建立數(shù)據(jù)連接,以便讓我們下達(dá)SQL指令到服務(wù)器端的數(shù)據(jù)庫,處理表中的記錄。參照3.2.3.1ASP網(wǎng)頁數(shù)據(jù)庫的連接所介紹的方法,首先建立一個(gè)Connection對象;然后再打開DSN-less,同時(shí),根據(jù)將要進(jìn)行數(shù)據(jù)操作的類型,設(shè)置其Mode屬性;最后,使用Connection對象的Execute方法下達(dá)SQL指令,通常在使用Execute方法執(zhí)行SQL指令前,應(yīng)該指定其CommandTimeOut屬性。以會(huì)員注冊為例,用戶填寫完注冊資料以后,提交系統(tǒng),系統(tǒng)進(jìn)行用戶資料插入操作:
<%
’讀取用戶提交的資料至各變量
strSQL="INSERTINTOuserlist(username,password,question,answer,"
strSQL=strSQL&"email,realname,sex,zjname,zjnumber,"
strSQL=strSQL&"lxway,birthday,homepage,quantity)"
strSQL=strSQL&"VALUES(''''"
strSQL=strSQL&strUsername&"'''',''''"
strSQL=strSQL&strPassword&"'''',''''"
strSQL=strSQL&strQuestion&"'''',''''"
strSQL=strSQL&strAnswer&"'''',''''"
strSQL=strSQL&strEmail&"'''',''''"
strSQL=strSQL&strRealname&"'''',''''"
strSQL=strSQL&strSex&"'''',''''"
strSQL=strSQL&strZjname&"'''',''''"
strSQL=strSQL&strZjnumber&"'''',''''"
strSQL=strSQL&strLxway&"'''',''''"
strSQL=strSQL&strBirthday&"'''',''''"
strSQL=strSQL&strHomepage&"'''',''''"
strSQL=strSQL&strQuantity&"'''')"
%>
<!---#includefile="dbconrw.asp"--->
<%
objDBConn.ExecutestrSQL
%>
<!---#includefile="dberror.asp"--->
這是最基本的數(shù)據(jù)庫操作方式,特別是對于表的插入、刪除和更新記錄以及單條數(shù)據(jù)的查詢操作,是三種方式中最為簡單有效的一種。本系統(tǒng)中,用戶身份驗(yàn)證、發(fā)表貼子以及回復(fù)貼子等相關(guān)數(shù)據(jù)庫操作相當(dāng)頻繁,對數(shù)據(jù)存取效率有相當(dāng)?shù)囊?,至于在?shù)據(jù)存取的靈活性方面要求不高,因此,大部分都是采取ADO組件Connection對象配合SQL語法這種數(shù)據(jù)庫操作方式。
2、ADO組件的Command對象執(zhí)行SQL語法
Command對象和Connection對象的Execute方法一樣能夠執(zhí)行SQL指令。在建立Command對象前一樣需要建立和打開數(shù)據(jù)連接,假設(shè)活動(dòng)連接objDBConn已經(jīng)建立好,其后步驟如下所示:
Step1:建立Command對象,其程序代碼如下:
SetobjDBCommand=Sever.CreateObject(“mand”)
Step2:接著指定ActiveConnection屬性為目前打開的數(shù)據(jù)連接,代碼如下:
ObjDBCommand.AvtiveConnection=objDBConn
Step3:指定CommandText屬性為要執(zhí)行的SQL指令,程序代碼如下:
mandText=“Selectfromuserlist”
Step4:使用Execute方法執(zhí)行SQL指令,objRS就是取得的記錄集合,代碼如下:
SetobjRS=objDBCommand.Execute
上述步驟可以取得所有注冊會(huì)員的詳細(xì)注冊資料,至于添加、刪除和更新記錄只需下達(dá)不同的SQL指令。需要注意的是,Command對象并不支持Close方法,所以關(guān)閉Command對象,只需設(shè)為Nothing即可。
建立復(fù)雜的SQL語句,通常得事先進(jìn)行許多復(fù)雜的數(shù)據(jù)類型轉(zhuǎn)換,使用Command對象配合Parameters數(shù)據(jù)集合建立SQL指令則相對來說比較簡單,因?yàn)閷ο蟊旧砭湍軌蜃砸烟幚韽?fù)雜的數(shù)據(jù)類型轉(zhuǎn)換,另外,比較Connection對象直接執(zhí)行SQL語句來說,操作要靈活。
Command對象主要的目的是用在存儲(chǔ)程序(StoreProcedure),簡單地說,存儲(chǔ)程序是一些默認(rèn)的處理程序。這個(gè)部分需用要數(shù)據(jù)源本身擁有指令處理的能力,象MSSQLServer就支持存儲(chǔ)程序,但MSAccess這類中小型數(shù)據(jù)庫系統(tǒng)就不支持存儲(chǔ)程序。
應(yīng)該說,使用存儲(chǔ)程序來操作數(shù)據(jù)庫,具有較其它方式較明顯的優(yōu)點(diǎn),首先,數(shù)據(jù)存取效率最高,因?yàn)榇鎯?chǔ)過程經(jīng)過了優(yōu)化和編譯,并且在第一次執(zhí)行以后,就駐留在緩存中,另外,用戶不必在網(wǎng)絡(luò)上發(fā)送有時(shí)數(shù)以百計(jì)的SQL語句,只需通過執(zhí)行一個(gè)簡單的存儲(chǔ)過程,就能夠完成復(fù)雜的操作,減少了客戶和DB服務(wù)器間傳遞的請求數(shù)目,減少了網(wǎng)絡(luò)通信量。
本系統(tǒng)采用MSAccess數(shù)據(jù)庫,所以本方法作為未來系統(tǒng)擴(kuò)展升級時(shí)數(shù)據(jù)庫操作的首選方法。
3、使用ADO組件的RecordSet
RecordSet對象為ADO組件最重要的對象,從英文名字看來就是“記錄集合”。它將表全部或部分的記錄內(nèi)容,象使用容器一樣暫放所需的記錄,RecordSet對象能夠顯示表的內(nèi)容或進(jìn)行記錄數(shù)據(jù)的分析處理。
數(shù)據(jù)的目的是在訪問、建立和處理記錄,表的內(nèi)容是由記錄所組成。當(dāng)我們在表中查詢所需的數(shù)據(jù)時(shí),其實(shí)就是在表的記錄間尋找,RecordSet對象的記錄集合可以把所需的記錄取出,使用表格的方式,每一行就是一條記錄,提供ASP程序一致的數(shù)據(jù)處理方式。
數(shù)據(jù)本身其實(shí)就是一個(gè)虛擬的表格,為什么一定要將它取出放入RecordSet對象容器,然后再進(jìn)行處理呢?這是因?yàn)锳DO組件數(shù)據(jù)源不見得就是數(shù)據(jù)庫表,它可能是一個(gè)文本文件,而且所需的數(shù)據(jù)可能只有幾筆,并不需要打開整個(gè)表提供全部的記錄。直接在表中處理并沒有效率,不如在RecordSet記錄集合處理后,再更新表的記錄,反而較有效率。
總之,不論數(shù)據(jù)源到底是什么,通過RecordSet對象的記錄集合,就可以在ASP程序使用一致的方法處理數(shù)據(jù),不論是文本文件、Excel還是數(shù)據(jù)庫,它都是一個(gè)表格的記錄集合。
在使用ADO組件的RecordSet對象時(shí),因?yàn)樘幚淼膶ο笫怯涗浖?,不是表的記錄本身,所以,如果記錄改變了,一定在用Update方法更新表,才能真正修改表的記錄內(nèi)容。
在數(shù)據(jù)的查詢方面,RecordSet對象的使用相當(dāng)靈活,雖然RecordSet對象一樣可以插入、更新和刪除記錄,此時(shí)直接使用SQL指令反而較有效率。例如:只是插入一條記錄,為什么需要建立RecordSet對象的記錄集合,然后再更新記錄?這在實(shí)際操作時(shí),反而多此一舉。但是,如果是從表中提取記錄集合,然后要對記錄進(jìn)行相對較為復(fù)雜的分組分頁顯示,則使用RecordSet對象來操作數(shù)據(jù)比起SQL方式來要簡單得多。本系統(tǒng)中象會(huì)員列表查詢或是版主列表查詢都采用ADO組件的RecordSet數(shù)據(jù)操作方式。
3.2.3.3ASP網(wǎng)頁安全性的實(shí)現(xiàn)方法
我們知道在用瀏覽器瀏覽HTML網(wǎng)頁時(shí),瀏覽器會(huì)將HTML文件原封不動(dòng)地全部下載下來,然后再由瀏覽器解釋執(zhí)行,因而很容易就能看到HTML文件的全部源代碼,這對于那些含有保密內(nèi)容的網(wǎng)頁來說是十分不安全的。為了提高網(wǎng)頁的安全性,我們采用了ASP網(wǎng)頁,前面說過,ASP網(wǎng)頁是一種動(dòng)態(tài)網(wǎng)頁,它是由服務(wù)器中的ASP程序運(yùn)行產(chǎn)生的動(dòng)態(tài)頁面,而ASP的源代碼又是全部保存在服務(wù)器上的,所以從客戶端的角度,ASP源代碼是保密的。所以,我們可以利用ASP網(wǎng)頁ASP源代碼的保密性來實(shí)現(xiàn)ASP網(wǎng)頁只能被具有相應(yīng)權(quán)限的合法用戶訪問。
本BBS論壇系統(tǒng)有會(huì)員身份權(quán)限限制的功能網(wǎng)頁相當(dāng)多,頻繁地要求用戶輸入用戶名以及密碼,然后比較數(shù)據(jù)庫中會(huì)員注冊表數(shù)據(jù)以確認(rèn)用戶身份,再根據(jù)用戶的身份來確定是否具有本網(wǎng)頁的訪問權(quán),將會(huì)消耗大量的服務(wù)器資源,極大地增加Web服務(wù)器的負(fù)擔(dān)。此時(shí),我們可以利用ASP的內(nèi)置對象Session。
當(dāng)一位尚未建立Session對象的用戶瀏覽到WEB站點(diǎn)的ASP程序時(shí),ASP就會(huì)自動(dòng)產(chǎn)生一個(gè)新的Session對象,并且指定唯一的SessionID編號(hào)。此后,在瀏覽此ASP程序和即將在站點(diǎn)內(nèi)瀏覽其它ASP程序的過程,我們稱為一個(gè)Session期間。WEB服務(wù)器可以憑借讀取ASP程序時(shí)傳送的SessionID判斷用戶是否仍在Session期間,直到Session對象TimeOut屬性所設(shè)置的時(shí)間,默認(rèn)為20分鐘或執(zhí)行Abandon方法。每當(dāng)讀取新的ASP程序后,TimeOut屬性都會(huì)歸零,重新計(jì)算,所以除非沒有瀏覽站點(diǎn),否則Session期間絕對超過20分鐘。
每一位用戶都可以擁有一組專用的Session變量。雖然每位用戶的Session變量名稱相同,但是其內(nèi)容可就不同,而且只有該用戶擁有權(quán)利讀寫自已的Session變量,我們可以利用Session的這個(gè)特性來實(shí)現(xiàn)ASP網(wǎng)頁的安全保護(hù)。
在本系統(tǒng)設(shè)計(jì)了一個(gè)ASP網(wǎng)頁userlog.asp,如果用戶想以普通會(huì)員的身份發(fā)表貼子,或以版主身份管理版面,或以超級管理員身份進(jìn)行論壇管理,則用戶在進(jìn)入系統(tǒng)之前必須通過userlogin.asp進(jìn)行登錄,login.asp會(huì)將用戶輸入的用戶名及密碼拿來與數(shù)據(jù)庫中的資料相對比,以確定用戶的合適身份,否則,用戶只能以匿名用戶身份瀏覽本論壇貼子,卻不能發(fā)表貼子或回復(fù)貼子,當(dāng)然更不能進(jìn)行論壇的相關(guān)管理操作了。用戶的身份將被寫入Session對象的username以及adminboard變量,username保存其會(huì)員名稱,adminboard保存其操作權(quán)限,為“0”則其為超級會(huì)員,為空則為普能會(huì)員,為版面ID則為版主。
userlog.asp源代碼如下:
<!--#includefile="dbconrw.asp"-->
<%
response.expires=0
OnErrorResumeNext
DimstrUserName
DimstrSQL,objRS
strUserName=Request.Form("username")
strUserPassword=Request.Form("password")
strSQL="SELECTFROMuserlistWHEREusername=''''"&strUserName&"''''"
setobjRS=objDBConn.Execute(strSQL)
session("username")=""
session("adminboard")=""
DimbLogSucc,repmsg,reptxt,repurl
IfobjRS.EOFThen
''''UserDoesn''''tExists
bLogSucc=0
repmsg="此用戶不存在"
repurl="userlog.asp"
reptxt="請重新登錄"
Else
''''UserExists
IfobjRS("password")=strUserPasswordThen
bLogSucc=1
session("username")=strUserName
repmsg="歡迎"&strUserName&",您已登錄成功"
repurl="main.asp"
reptxt="返回論壇首頁"
Else
bLogSucc=0
repmsg="密碼輸入錯(cuò)誤"
repurl="userlog.asp"
reptxt="請重新登錄"
Endif
EndIf
%>
<!--#includefile="dberror.asp"-->
<%
objRS.Close
''''Judgeifsuperadministratororboardmanager
ifbLogSucc=1then
strSQL="SELECTFROMadminorlistWHEREusername=''''"&strUsername&"''''"
setobjRS=objDBConn.Execute(strSQL)
iferr.number<>0then
response.write"數(shù)據(jù)庫操作失敗:"&err.description
endif
IfNotobjRS.EOFThen
ifobjRS("status")="Y"then
session("adminboard")=Cint(objRS("manbid"))
endif
endif
''''WriteLog
objRS.close
strSQL="INSERTINTOloginfo(userid,userip,intime)"
strSQL=strSQL&"VALUES(''''"&strUserName&"'''',''''"
strSQL=strSQL&request.servervariables("remote_host")&"'''',''''"
strSQL=strSQL&now()&"'''')"
setobjRS=objDBConn.execute(strSQL)
iferr.number<>0then
response.write"數(shù)據(jù)庫操作失?。?&err.description
endif
endif
objRS.close
objDBConn.Close
SetobjRS=Nothing
SetobjDBConn=Nothing
%>
<html><body>
<tablealign=''''center''''>
<tr><tdalign=''''center''''><%=repmsg%></td></tr>
<tr><tdalign=''''center''''>
<fontcolor="#336699">
<aid="reinput"href="http://<%=repurl%>"><%=reptxt%></a></font>
<SCRIPTlanguage="javascript"type="text/javascript">
setTimeout("location.href=reinput.href",1000);
</SCRIPT>
</td></tr>
</table>
</body></html>
確定了用戶的會(huì)員身份以后,在每個(gè)需要進(jìn)行身份識(shí)別的ASP網(wǎng)頁插入身份識(shí)別代碼,如果此用戶具有訪問這個(gè)ASP網(wǎng)頁的權(quán)限,則輸出其相應(yīng)的HTML文件,否則,系統(tǒng)轉(zhuǎn)到用戶登錄網(wǎng)頁要求用戶重新登錄以取得訪問此ASP功能網(wǎng)頁的合法身份。例如,論壇基本信息設(shè)置ASP網(wǎng)頁需要訪問者具有超級會(huì)員身份,在本網(wǎng)頁前必須插入以下一段代碼:
<%
''''ChecktheSuperAdministratorRight
Response.Expires=0
ifSession("adminboard")<>"0"Then
Response.redirect"userlog.asp?errmsg=您沒有超級用戶管理權(quán)限,請重新登錄或退出!"
EndIf
%>
3.2.3.4在貼子中實(shí)現(xiàn)超文本信息輸入和顯示
論壇可以由管理員設(shè)置是否支持UBB標(biāo)簽,UBB標(biāo)簽就是不允許使用HTML語法的情況下,通過論壇的特殊轉(zhuǎn)換程序,以至可以支持少量常用的、無危害性的HTML效果顯示。而對于那類帶有惡意代碼的文本予以屏蔽。下面為本系統(tǒng)支持的UBB具體使用說明:
[B]文字[/B]:在文字的位置可以任意加入您需要的字符,顯示為粗體效果明。
[I]文字[/I]:在文字的位置可以任意加入您需要的字符,顯示為斜體效果。
[U]文字[/U]:在文字的位置可以任意加入您需要的字符,顯示為下劃線效果。
[URL][/URL]
[EMAIL]my0661@[/EMAIL]
[img][/img]:在標(biāo)簽的中間插入圖片地址可以實(shí)現(xiàn)插圖效果。
[flash]Flash連接地址[/Flash]:在標(biāo)簽的中間插入Flash圖片地址可以實(shí)現(xiàn)插入Flash。
[code]文字[/code]:在標(biāo)簽中寫入文字可實(shí)現(xiàn)html中編號(hào)效果。
[quote]引用[/quote]:在標(biāo)簽的中間插入文字可以實(shí)現(xiàn)HTMl中引用文字效果。
[list]文字[/list][list=a]文字[/list][list=1]文字[/list]:更改list屬性標(biāo)簽,實(shí)現(xiàn)HTML目錄效果。
[fly]文字[/fly]:在標(biāo)簽的中間插入文字可以實(shí)現(xiàn)文字飛翔效果,類似跑馬燈。
[move]文字[/move]:在標(biāo)簽的中間插入文字可以實(shí)現(xiàn)文字移動(dòng)效果,為來回飄動(dòng)。
[color=顏色代碼]文字[/color]:輸入您的顏色代碼,在標(biāo)簽的中間插入文字可以實(shí)現(xiàn)文字顏色改變。
[size=數(shù)字]文字[/size]:輸入您的字體大小,在標(biāo)簽的中間插入文字可以實(shí)現(xiàn)文字大小改變。
[face=字體]文字[/face]:輸入您需要的字體,在標(biāo)簽的中間插入文字可以實(shí)現(xiàn)文字字體轉(zhuǎn)換。
[DIR=500,350][/DIR]:為插入shockwave格式文件,中間的數(shù)字為寬度和長度
[RM=500,350][/RM]:為插入realplayer格式的rm文件,中間的數(shù)字為寬度和長度
[MP=500,350][/MP]:為插入為midiaplayer格式的文件,中間的數(shù)字為寬度和長度
[QT=500,350][/QT]:為插入為Quicktime格式的文件,中間的數(shù)字為寬度和長度
[URL=]潮陽網(wǎng)絡(luò)[/URL]:有兩種方法可以加入超級連接,可以連接具體地址或者文字連接。
[align=center]文字[/align]:在文字的位置可以任意加入您需要的字符,center位置center表示居中,left表示居左,right表示居右。
[EMAIL=MAILTO:my0661@]feng[/EMAIL]:有兩種方法可以加入郵件連接,可以連接具體地址或者文字連接。
[glow=255,red,2]文字[/glow]:在標(biāo)簽的中間插入文字可以實(shí)現(xiàn)文字發(fā)光特效,glow內(nèi)屬性依次為寬度、顏色和邊界大小。
[shadow=255,red,2]文字[/shadow]:在標(biāo)簽的中間插入文字可以實(shí)現(xiàn)文字陰影特效,shadow內(nèi)屬性依次為寬度、顏色和邊界大小。
1、超文本信息的輸入
用戶在書寫貼子內(nèi)容時(shí),可以輸入這類帶格式文本,例如,用戶希望輸入一段紅色文字“警告:SARS有可能卷土重來!”,則應(yīng)照這種格式輸入文本“[color=’red’]警告:SARS有可能卷土重來[/color]”。系統(tǒng)在用戶輸入貼子界面應(yīng)提供UBB使用幫助鏈接,對于一些常用的UBB標(biāo)簽,系統(tǒng)應(yīng)提供其快捷輸入方式。例如,界面提供一個(gè)輸入飛行文字UBB標(biāo)簽快捷按鈕,用戶單擊此按鈕,系統(tǒng)則彈出一個(gè)文本輸入框,用戶在其中輸入文字,完成提交后,系統(tǒng)將自動(dòng)在貼子內(nèi)容輸入滾動(dòng)文本框內(nèi)文字的末尾添加帶有飛行文本標(biāo)簽的這段文字。其實(shí)現(xiàn)代碼如下(采用JavaScript編寫):
……
<title>……</title>
<SCRIPTlanguage="JavaScript">
……
functionfontchuli(){
if((document.selection)&&(document.selection.type=="Text")){
varrange=document.selection.createRange();
varch_text=range.text;
range.text=fontbegin+ch_text+fontend;
}
else{
document.kbbs.body.value=fontbegin+document.kbbs.body.value+fontend;
document.kbbs.body.focus();
}
}
functionfly(){
fontbegin="[fly]";
fontend="[/fly]";
fontchuli();
}
……
</SCRIPT>
……
<formmethod="?"action="?"name="kbbs">
……
功能按鈕:<IMGonclick=fly()alt=飛行字src="pic/fly.gif"border=0>
……
</form>
文本在提交后,系統(tǒng)在保存此貼子之前,應(yīng)該將提交的貼子的標(biāo)題、貼子內(nèi)容作適當(dāng)?shù)霓D(zhuǎn)換,比如,用戶輸入的‘<’以及‘>’等字符,應(yīng)該轉(zhuǎn)換成HTML非保留字符。我們采用Server對象的HTMLEncode方法。
HTML用一些特殊的字符(比如‘<’和‘>’)來定義HTML元素。這些字符叫做“保留字符”。如果想要在一個(gè)Web頁中將它們作為普通的文本字符串來使用,HTML會(huì)將它們解釋成HTML編碼,這就違背了使用者的原意。HTMLEncode方法的作用就是將文本字符串中的保留字符轉(zhuǎn)換成特殊字符,使其能夠正確地顯示出來,而且不被當(dāng)作HTML編碼的一部分來解釋。經(jīng)過編碼,文本中的‘<’和‘>’分別被‘<’以及‘>’所取代。
假設(shè)貼子的標(biāo)題以及內(nèi)容分別被存放在title以及body這兩個(gè)變量里,轉(zhuǎn)換代碼如下:
……
title=Server.HTMLEncode(title)
body=Server.HTMLEncode(body)
2、超文本信息的顯示
保存在數(shù)據(jù)庫貼子數(shù)據(jù)表中的相關(guān)貼子標(biāo)題以及內(nèi)容的數(shù)據(jù),是經(jīng)過了HTMLEncode方法處理過的數(shù)據(jù),而且數(shù)據(jù)中包含了大量的UBB標(biāo)簽,在顯示貼子之前,應(yīng)該將那些UBB標(biāo)簽作適當(dāng)轉(zhuǎn)換,以使用戶瀏覽器能對其進(jìn)行正確解釋。
比如,對于“[I]備注:中國載人航空火箭于2003年10月15日成功升空[/I]”,系統(tǒng)應(yīng)該將其轉(zhuǎn)換成“<I>備注:中國載人航空火箭于2003年10月15日成功升空</I>”。對貼子內(nèi)容中超文本信息的正確轉(zhuǎn)換我們用到了VBScript里的正則表達(dá)式對象RegExp。
RegExp提供簡單的正則表達(dá)式支持功能,它包括一系列的屬性和方法,用于從一段文本中進(jìn)行正則表達(dá)式模式匹配,找出或用一段文字替代與之相匹配的文本。
在VBScript對象包含三個(gè)屬性以及支持三個(gè)方法,下面分別說明如下:
I、Global屬性
設(shè)置或返回一個(gè)Boolean值,該值指明在整個(gè)搜索字符串時(shí)模式是全部匹配還是只匹配第一個(gè)。使用語法:object.Global[=True|False],object參數(shù)總是RegExp對象。如果搜索應(yīng)用于整個(gè)字符串,Global屬性的值為True,否則其值為False。默認(rèn)的設(shè)置為True。
II、IgnoreCase屬性
設(shè)置或返回一個(gè)Boolean值,指明模式搜索是否區(qū)分大小寫。使用語法:object.IgnoreCase[=True|False]。object參數(shù)總是一個(gè)RegExp對象。如果搜索是區(qū)分大小寫的,則IgnoreCase屬性為False;否則為True。缺省值為True。
III、Pattern屬性
這是正則表達(dá)式對象最重要的一個(gè)屬性,設(shè)置或返回被搜索的正則表達(dá)式模式。使用語法:object.Pattern[="searchstring"]。正則表達(dá)式對象將根據(jù)其正則表達(dá)式進(jìn)行相應(yīng)的模式匹配。
VI、Replace方法
替換在正則表達(dá)式查找中找到的文本。使用語法為:object.Replace(string1,string2)。Replace方法的語法包含以下幾個(gè)部分:object是必需,總是一個(gè)RegExp對象的名稱;string1是必需的,string1是將要進(jìn)行文本替換的字符串;string2是必需的,string2是替換文本字符串。被替換的文本的實(shí)際模式是通過RegExp對象的Pattern屬性設(shè)置的。Replace方法返回string1的副本,其中的RegExp.Pattern文本已經(jīng)被替換為string2。如果沒有找到匹配的文本,將返回原來的string1的副本。
V、Execute方法
對指定的字符串執(zhí)行正則表達(dá)式搜索。使用語法為:object.Execute(string)。Execute方法的語法包括以下幾個(gè)部分:object是必需的,總是一個(gè)RegExp對象的名稱;string也是必需的,要在其上執(zhí)行正則表達(dá)式的文本字符串。正則表達(dá)式搜索的設(shè)計(jì)模式是通過RegExp對象的Pattern來設(shè)置的。Execute方法返回一個(gè)Matches集合,其中包含了在string中找到的每一個(gè)匹配的Match對象。如果未找到匹配,Execute將返回空的Matches集合。
VI、Test方法
對指定的字符串執(zhí)行一個(gè)正則表達(dá)式搜索,并返回一個(gè)Boolean值指示是否找到匹配的模式。使用語法為:object.Test(string)。Execute方法的語法包括以下幾個(gè)部分:object必需的,總是一個(gè)RegExp對象的名稱;string必需的,要執(zhí)行正則表達(dá)式搜索的文本字符串。正則表達(dá)式搜索的實(shí)際模式是通過RegExp對象的Pattern屬性來設(shè)置的。RegExp.Global屬性對Test方法沒有影響。如果找到了匹配的模式,Test方法返回True;否則返回False。
比如,我們要在將一段文本中所有fox或Fox字符串替換成cat,其示例代碼如下:
DimregEx,str1''''建立變量。
str1="Thequickbrownfoxjumpedoverthelazydog."
SetregEx=NewRegExp''''建立正則表達(dá)式。
regEx.Pattern="fox"''''設(shè)置模式。
regEx.IgnoreCase=True''''設(shè)置是否區(qū)分大小寫。
ReplaceTest=regEx.Replace(str1,replStr)''''作替換。
在本系統(tǒng)中,假設(shè)Body變量為用戶保存的貼子內(nèi)容,其中包含有UBB標(biāo)簽文本,我們要將其轉(zhuǎn)換成用戶瀏覽器可以識(shí)別的格式,比如,飛行文字的UBB代碼文本為“[fly]輕舞飛揚(yáng)[/fly]”,其轉(zhuǎn)換示例代碼如下:
dimre
Setre=newRegExp
re.IgnoreCase=True
re.Global=True
re.Pattern="\[fly\](.[^\[]]\[\/fly\]"
body=re.Replace(body,"<marqueewidth=90%behavior=alternatescrollamount=3>$1</marquee>")
我們可以照此方法,實(shí)現(xiàn)對另外的UBB標(biāo)簽的正確轉(zhuǎn)換,轉(zhuǎn)換的關(guān)鍵是構(gòu)造出正確的正則表達(dá)式。在本系統(tǒng)中,系統(tǒng)支持的所有UBB標(biāo)簽轉(zhuǎn)換正則表達(dá)式全部包括在ubb.asp文件中的code_jk函數(shù)中。
四、系統(tǒng)的運(yùn)行效果
采用最基本的應(yīng)用環(huán)境:
1、硬件環(huán)境
100M以太網(wǎng);PentiumIIIIA服務(wù)器;支持WIN98以上的PC客戶機(jī)
2、軟件環(huán)境
服務(wù)器端安裝了WindowsNT4.0系統(tǒng)、IIS4.0Web服務(wù)器、MSAccess2000數(shù)據(jù)庫等;客戶端安裝了Windows98系統(tǒng)、IE5.0瀏覽器等。
把本系統(tǒng)布置在如上所述最基本的應(yīng)用環(huán)境下,本系統(tǒng)的運(yùn)行是非常理想的。在經(jīng)過超級會(huì)員一系列的論壇基本設(shè)置以后,就可以開始在論壇上發(fā)表貼子查看貼子回復(fù)貼子及進(jìn)行其它論壇操作。系統(tǒng)的反應(yīng)很快,讀出頁面基本上不需要多少時(shí)間,一晃就能出來。經(jīng)過本系統(tǒng)各項(xiàng)功能操作測試,系統(tǒng)具有較好的穩(wěn)定性。
把本系統(tǒng)布置在互聯(lián)網(wǎng)上(),本網(wǎng)站提供的基本功能有:支持ASP或,支持Access數(shù)據(jù)庫,但此數(shù)據(jù)庫文件必須放置在[db]。但是,此網(wǎng)站不支持FTP網(wǎng)站維護(hù),只提供WEB方式的網(wǎng)站內(nèi)容更新,而且每次不能超5個(gè)文件。
因本網(wǎng)站主機(jī)在北美,連接數(shù)據(jù)較慢,此外因數(shù)據(jù)更新較繁雜,只布置了一些論壇的基本功能,但是經(jīng)過試運(yùn)行,盡管速度有些慢,其系統(tǒng)運(yùn)行相當(dāng)穩(wěn)定。
五、結(jié)束語
完成這次設(shè)計(jì)任務(wù)總共用了六個(gè)星期時(shí)間,前三個(gè)星期用來收集資料、學(xué)習(xí)要用到的各項(xiàng)開發(fā)技術(shù)、進(jìn)行論壇的系統(tǒng)分析,中間兩個(gè)星期用來設(shè)計(jì)系統(tǒng),后一個(gè)星期用來測試及修改。論文的撰寫一直貫穿其中。
為本系統(tǒng)總共設(shè)計(jì)近六十個(gè)ASP網(wǎng)頁,近萬行代碼,七個(gè)數(shù)據(jù)表。通過這次畢業(yè)設(shè)計(jì),我從中學(xué)到了許多新的知識(shí),而且通過這次畢業(yè)設(shè)計(jì),培養(yǎng)了我綜合多門學(xué)科中的知識(shí)、迅速規(guī)劃并開發(fā)出目標(biāo)系統(tǒng)的能力,以及編程能力也有了很大的提高。另外也有許多心得體會(huì),所謂系統(tǒng)開發(fā)如人生百味,酸甜苦辣皆有之。
嚴(yán)格按工程的方法來設(shè)計(jì)系統(tǒng)相當(dāng)重要,不能認(rèn)為基于Web的數(shù)據(jù)庫管理的BBS系統(tǒng)很小,可以無需花太多的時(shí)間來做系統(tǒng)分析,甚至可以無需經(jīng)過系統(tǒng)定義而直接進(jìn)入系統(tǒng)編碼階段。這種想法很天真,最小的系統(tǒng),你若想保證質(zhì)量,把系統(tǒng)做得更可靠更有效率功能越強(qiáng),應(yīng)該考慮的方方面面就越多越復(fù)雜。系統(tǒng)分析過于簡單,系統(tǒng)定義過于抽象,則在系統(tǒng)設(shè)計(jì)與編碼階段遇到的困難就越多,特別是其中若不得不做一些功能性甚至系統(tǒng)結(jié)構(gòu)性方面的變動(dòng),將面對許多重復(fù)性的工作。在系統(tǒng)開發(fā)過程中重復(fù)工作過多,將會(huì)極大地影響系統(tǒng)開發(fā)的積極性,進(jìn)而影響整個(gè)系統(tǒng)的質(zhì)量。在這一點(diǎn)上,我體會(huì)尤深,我化了三個(gè)星期,即接近系統(tǒng)開發(fā)一半的時(shí)間用在系統(tǒng)分析與系統(tǒng)定義上,也就是在開始浪費(fèi)了一周多的時(shí)間,即邊編碼邊分析,邊分析邊編碼,后來越來越亂越來越復(fù)雜,不得不重新考慮系統(tǒng)開發(fā)計(jì)劃的合理性??傊谶@一點(diǎn)上,我的體會(huì)是,系統(tǒng)分析越充分,系統(tǒng)定義越具體,那么后續(xù)的系統(tǒng)設(shè)計(jì)與開發(fā)工作就越有效率,且系統(tǒng)的質(zhì)量也越有保障。
本系統(tǒng)是一個(gè)最基本的基于WEB的BBS系統(tǒng),可擴(kuò)展性很大,科學(xué)的開發(fā)過程也極有利于系統(tǒng)的擴(kuò)充與擴(kuò)展。系統(tǒng)現(xiàn)在采用的是MSAccess數(shù)據(jù)庫,視需要可以移植到MSSQLServer或者其它大中型數(shù)據(jù)庫系統(tǒng)環(huán)境下,只需改動(dòng)少數(shù)幾個(gè)ASP功能模塊文件。系統(tǒng)的分析與定義都結(jié)合了現(xiàn)在流行的面向?qū)ο蠓椒ㄒ约皞鹘y(tǒng)的結(jié)構(gòu)分析與設(shè)計(jì)方法,如果想采用似有流行趨勢的技術(shù)重寫系統(tǒng),最多也只需二個(gè)星期甚至更少的時(shí)間來作系統(tǒng)編碼以及測試,效率相當(dāng)高。
回顧這一個(gè)半月的系統(tǒng)開發(fā)工作,總結(jié)起來那就是,軟件的開發(fā)是相當(dāng)辛苦的,但成功以后的喜悅也是非常美妙的,而且我發(fā)現(xiàn),其中你投入的心血越多,成功以后你所獲得的快樂與充實(shí)感也更多更強(qiáng)。難道人越辛苦就會(huì)越幸福快樂嗎?對,軟件系統(tǒng)開發(fā)就是這樣!
參考文獻(xiàn)
陳會(huì)安《ASP網(wǎng)頁制作徹底研究》2000/10
林金霖《ASP實(shí)務(wù)經(jīng)典》,中國鐵道出版社,1999/12
胡偉《FrontPage2000中文版技巧與實(shí)例》1999/9
黃敏如,《FrontPage2000中文版入門與提高》1999/7
JeffryDwight《CGI開發(fā)使用手冊》1999/5
黃斯偉《CSS網(wǎng)頁樣式設(shè)計(jì)》1999/5
王春森《程序設(shè)計(jì)》1999/10
王映雪、肖平、佟秋利《HTML網(wǎng)頁制作》1998/10
薩師煊、王珊《數(shù)據(jù)庫系統(tǒng)概論(第二版)》1991/4
趙彤、楊玉《VBScript制作實(shí)例》1999/3
六木工作室《VisualBasic6.0中文版使用編程技巧》1999/9
沈建強(qiáng)、夏耘《Photoshop圖像處理速成培訓(xùn)》1999/7