版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
PAGE32PAGE31畢業(yè)設(shè)計(jì)說明書簡易留言板管理系統(tǒng)學(xué)生姓名:學(xué)號(hào): 學(xué)院: 函授站點(diǎn): 專業(yè): 輔導(dǎo)老師: 2012年4月摘要隨著計(jì)算機(jī)的廣泛應(yīng)用,人們已經(jīng)對(duì)網(wǎng)絡(luò)不再感到陌生。在科技飛速發(fā)展的今天,電腦信息技術(shù)與各行各業(yè)進(jìn)行了有效的結(jié)合。為了能夠有效的利用網(wǎng)絡(luò)的優(yōu)勢(shì),我們必須在基于網(wǎng)絡(luò)的基礎(chǔ)上進(jìn)行一些應(yīng)用的研究,從而達(dá)到網(wǎng)絡(luò)服務(wù)于社會(huì)的作用,現(xiàn)在學(xué)生使用網(wǎng)絡(luò)的比重正在逐步增加,我們需要建立專門的應(yīng)用來幫助學(xué)生們學(xué)習(xí)和交流有關(guān)問題,留言板則是解決該問題的最佳方案,留言也提供了一個(gè)全新的人類溝通新方式。
互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展和普及,使構(gòu)造互聯(lián)網(wǎng)站、開發(fā)網(wǎng)絡(luò)應(yīng)用程序已經(jīng)成為當(dāng)前的熱門技術(shù)之一。針對(duì)網(wǎng)上留言板的特點(diǎn),文章敘述了在Windows環(huán)境下,利用MySql數(shù)據(jù)庫,運(yùn)用J2EE設(shè)計(jì)模式開發(fā)留言板管理系統(tǒng),以及留言板管理系統(tǒng)的設(shè)計(jì)及開發(fā)過程。關(guān)鍵詞:留言板J2EE數(shù)據(jù)庫Withtheextensiveapplicationofcomputernetworknolongerfeelstrange.Therapiddevelopmentoftechnology,computerITandbusinessesaneffectivecombination.Ordertobeabletomakeeffectiveuseoftheadvantagesofthenetwork,wehavesomeapplicationsbasedonweb-based,soastoachievetheroleofnetworkservicesinthecommunity,theproportionofstudentsusingthenetworkisgraduallyincreasing,weneedtocreatespecializedapplicationstohelpstudentstolearnandexchangeinformationonissues,messageboardsisthebestsolutiontosolvetheproblem,themessagealsoprovidesawholenewnewwaysofhumancommunication.ContinuousdevelopmentandpopularizationofInternettechnology,sothatconstructInternetsites,thedevelopmentofwebapplicationshasbecomeoneofthehottechnologyofthecurrent.Thecharacteristicsofonlinemessageboards,articlesdescribedintheWindowsenvironment,usetheMySqldatabase,theuseofJ2EEdesignpatternstodevelopthemanagementsystemofthemessageboard,andamessageboardmanagementsystemdesignanddevelopmentprocess.Keywords:messageboardsJ2EEdatabase目錄摘要 II關(guān)鍵詞: II1緒論 42開發(fā)環(huán)境的介紹 52.1JAVA語言介紹 52.2J2EE企業(yè)級(jí)開發(fā)介紹 72.3MySql數(shù)據(jù)庫的介紹 82.4Struts2簡介 92.5MVC設(shè)計(jì)模式概述 103系統(tǒng)分析與設(shè)計(jì) 123.1系統(tǒng)功能分析 123.2數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì) 134系統(tǒng)開發(fā) 174.1用戶注冊(cè) 174.2發(fā)表表留言 194.3回復(fù)留言 204.4刪除留言 214.5系統(tǒng)異常處理 225總結(jié) 24參考文獻(xiàn) 251緒論隨著現(xiàn)代化技術(shù)的不斷進(jìn)步,人們發(fā)現(xiàn)交流的范圍還是很小,不能滿足更大范圍人的需要,這樣就出現(xiàn)了利用因特網(wǎng)在全球發(fā)布信息的留言——BBS。BBS是電子公告板(BulletinBoardSystem)的簡稱,它是最常見的Web應(yīng)用系統(tǒng)。BBS起源于20世紀(jì)80年代,最初,留言只是用于發(fā)布公告系統(tǒng),討論問題的在線交流平臺(tái);后來,隨著網(wǎng)絡(luò)的普及,留言的功能越來越豐富,受到廣大網(wǎng)民的歡迎。企業(yè)、學(xué)校等單位可以利用網(wǎng)上的留言發(fā)布公告、通知等。本系統(tǒng)采用MVC(Model-View-Controller)三層構(gòu)架開發(fā)模式,在這種設(shè)計(jì)模式下,一個(gè)應(yīng)用被分為三個(gè)部分:模型、視圖和控制,每個(gè)部分負(fù)責(zé)不同的功能。模型是指應(yīng)用程序的數(shù)據(jù),以及對(duì)這些數(shù)據(jù)的操作;視圖是指用戶界面;控制負(fù)責(zé)視圖和模型之間的同步,也就是說,根據(jù)用戶界面的操作完成對(duì)程序數(shù)據(jù)的更新;將程序數(shù)據(jù)的改變及時(shí)反應(yīng)到用戶界面上。通過這種設(shè)計(jì)模型把應(yīng)用邏輯,處理過程和顯示邏輯分成不同的組件實(shí)現(xiàn),這些組件可以進(jìn)行交互和重用。對(duì)于大量的信息,采用數(shù)據(jù)庫技術(shù),在系統(tǒng)中數(shù)據(jù)組織應(yīng)用關(guān)系模型。對(duì)數(shù)據(jù)庫的訪問,本系統(tǒng)使用數(shù)據(jù)庫連接池,在系統(tǒng)初始化時(shí)啟動(dòng)文件中配置的數(shù)據(jù)的連接,如果程序需要鏈接,則從此池中取出一個(gè)連接使用,使用完后又返回給該池,這些連接可以復(fù)用,提高了效率。該系統(tǒng)采用JSP實(shí)現(xiàn)留言管理系統(tǒng)。在開發(fā)過程中實(shí)現(xiàn)了留言系統(tǒng)的部分管理,并且對(duì)留言的頁面布局進(jìn)行詳細(xì)設(shè)計(jì),使頁面美觀,體現(xiàn)所有功能。2開發(fā)環(huán)境的介紹2.1JAVA語言介紹任何事物的產(chǎn)生既有必然的原因也有偶然的因素,java語言的出現(xiàn)也驗(yàn)證了這一點(diǎn)。1991年,美國SunMicrosystems公司的某個(gè)研究小組為了能夠在消費(fèi)電子產(chǎn)品上開發(fā)應(yīng)用程序,積極尋找合適的編程語言。消費(fèi)電子產(chǎn)品種類繁多,包括PDA、機(jī)頂盒、手機(jī)等等,即使是同一類消費(fèi)電子產(chǎn)品所采用的處理芯片和操作系統(tǒng)也不相同,也存在著跨平臺(tái)的問題。當(dāng)時(shí)最流行的編程語言是C和C++語言,Sun公司的研究人員就考慮是否可以采用C++語言來編寫消費(fèi)電子產(chǎn)品的應(yīng)用程序,但是研究表明,對(duì)于消費(fèi)電子產(chǎn)品而言C++語言過于復(fù)雜和龐大,并不適用,安全性也并不令人滿意。于是,BillJoy先生領(lǐng)導(dǎo)的研究小組就著手設(shè)計(jì)和開發(fā)出一種語言,稱之為Oak。該語言采用了許多C語言的語法,提高了安全性,并且是面向?qū)ο蟮恼Z言,但是Oak語言在商業(yè)上并未獲得成功。時(shí)間轉(zhuǎn)到了1995年,互聯(lián)網(wǎng)在世界上蓬勃發(fā)展,Sun公司發(fā)現(xiàn)Oak語言所具有的跨平臺(tái)、面向?qū)ο?、安全性高等特點(diǎn)非常符合互聯(lián)網(wǎng)的需要,于是改進(jìn)了該語言的設(shè)計(jì),要達(dá)到如下幾個(gè)目標(biāo):
創(chuàng)建一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,而不是面向過程的語言;
提供一個(gè)解釋執(zhí)行的程序運(yùn)行環(huán)境,是程序代碼獨(dú)立于平臺(tái);
吸收C和C++的優(yōu)點(diǎn),使程序員容易掌握;
去掉C和C++中影響程序健壯性的部分,使程序更安全,例如指針、內(nèi)存申請(qǐng)和釋放;
實(shí)現(xiàn)多線程,使得程序能夠同時(shí)執(zhí)行多個(gè)任務(wù);
提供動(dòng)態(tài)下載程序代碼的機(jī)制;
提供代碼校驗(yàn)機(jī)制以保證安全性;
最終,Sun公司給該語言取名為java語言。JAVA語言的特點(diǎn)如下:1.簡單、面向?qū)ο蠛蜑槿怂煜?/p>
java的簡單首先體現(xiàn)在精簡的系統(tǒng)上,力圖用最小的系統(tǒng)實(shí)現(xiàn)足夠多的功能;對(duì)硬件的要求不高,在小型的計(jì)算機(jī)上便可以良好的運(yùn)行。和所有的新一代的程序設(shè)計(jì)語言一樣,java也采用了面向?qū)ο蠹夹g(shù)并更加徹底,所有的java程序和applet程序均是對(duì)象,封裝性實(shí)現(xiàn)了模塊化和信息隱藏,繼承性實(shí)現(xiàn)了代碼的復(fù)用,用戶可以建立自己的類庫。而且java采用的是相對(duì)簡單的面向?qū)ο蠹夹g(shù),去掉了運(yùn)算符重載、多繼承的復(fù)雜概念,而采用了單一繼承、類強(qiáng)制轉(zhuǎn)換、多線程、引用(非指針)等方式。無用內(nèi)存自動(dòng)回收機(jī)制也使得程序員不必費(fèi)心管理內(nèi)存,是程序設(shè)計(jì)更加簡單,同時(shí)大大減少了出錯(cuò)的可能。java語言采用了C語言中的大部分語法,熟悉C語言的程序員會(huì)發(fā)現(xiàn)java語言在語法上與C語言極其相似。
2.魯棒并且安全
java語言在編譯及運(yùn)行程序時(shí),都要進(jìn)行嚴(yán)格的檢查。作為一種強(qiáng)制類型語言,java在編譯和連接時(shí)都進(jìn)行大量的類型檢查,防止不匹配問題的發(fā)生。如果引用一個(gè)非法類型、或執(zhí)行一個(gè)非法類型操作,java將在解釋時(shí)指出該錯(cuò)誤。在java程序中不能采用地址計(jì)算的方法通過指針訪問內(nèi)存單元,大大減少了錯(cuò)誤發(fā)生的可能性;而且java的數(shù)組并非用指針實(shí)現(xiàn),這樣就可以在檢查中避免數(shù)組越界的發(fā)生。無用內(nèi)存自動(dòng)回收機(jī)制也增加了java的魯棒性。
作為網(wǎng)絡(luò)語言,java必須提供足夠的安全保障,并且要防止病毒的侵襲。java在運(yùn)行應(yīng)用程序時(shí),嚴(yán)格檢查其訪問數(shù)據(jù)的權(quán)限,比如不允許網(wǎng)絡(luò)上的應(yīng)用程序修改本地的數(shù)據(jù)。下載到用戶計(jì)算機(jī)中的字節(jié)代碼在其被執(zhí)行前要經(jīng)過一個(gè)核實(shí)工具,一旦字節(jié)代碼被核實(shí),便由java解釋器來執(zhí)行,該解釋器通過阻止對(duì)內(nèi)存的直接訪問來進(jìn)一步提高java的安全性。同時(shí)java極高的魯棒性也增強(qiáng)了java的安全性。
3.結(jié)構(gòu)中立并且可以移植
網(wǎng)絡(luò)上充滿了各種不同類型的機(jī)器和操作系統(tǒng),為使java程序能在網(wǎng)絡(luò)的任何地方運(yùn)行,java編譯器編譯生成了與體系結(jié)構(gòu)無關(guān)的字節(jié)碼結(jié)構(gòu)文件格式。任何種類的計(jì)算機(jī),只有在其處理器和操作系統(tǒng)上有java運(yùn)行時(shí)環(huán)境,字節(jié)碼文件就可以在該計(jì)算機(jī)上運(yùn)行。即使是在單一系統(tǒng)的計(jì)算機(jī)上,結(jié)構(gòu)中立也有非常大的作用。隨著處理器結(jié)構(gòu)的不斷發(fā)展變化,程序員不得不編寫各種版本的程序以在不同的處理器上運(yùn)行,這使得開發(fā)出能夠在所有平臺(tái)上工作的軟件集合是不可能的。而使用java將使同一版本的應(yīng)用程序可以運(yùn)行在所有的平臺(tái)上。
體系結(jié)構(gòu)的中立也使得java系統(tǒng)具有可移植性。java運(yùn)行時(shí)系統(tǒng)可以移植到不同的處理器和操作系統(tǒng)上,java的編譯器是由java語言實(shí)現(xiàn)的,解釋器是由java語言和標(biāo)準(zhǔn)C語言實(shí)現(xiàn)的,因此可以較為方便的進(jìn)行移植工作。4.高性能
雖然java是解釋執(zhí)行的,但它仍然具有非常高的性能,在一些特定的CPU上,java字節(jié)碼可以快速的轉(zhuǎn)換成為機(jī)器碼進(jìn)行執(zhí)行。而且java字節(jié)碼格式的設(shè)計(jì)就是針對(duì)機(jī)器碼的轉(zhuǎn)換,實(shí)際轉(zhuǎn)換時(shí)相當(dāng)簡便,自動(dòng)的寄存器分配與編譯器對(duì)字節(jié)碼的一些優(yōu)化可使之生成高質(zhì)量的代碼。隨著java虛擬機(jī)的改進(jìn)和"即時(shí)編譯"(justintime)技術(shù)的出現(xiàn)使得java的執(zhí)行速度有了更大的提高。
5.解釋執(zhí)行、多線程并且是動(dòng)態(tài)的
為易于實(shí)現(xiàn)跨平臺(tái)性,java設(shè)計(jì)成為解釋執(zhí)行,字節(jié)碼本身包含了許多編譯時(shí)生成的信息,使連接過程更加簡單。而多線程使應(yīng)用程序可以同時(shí)進(jìn)行不同的操作,處理不同的事件。在多線程機(jī)制中,不同的線程處理不同的任務(wù),互不干涉,不會(huì)由于某一任務(wù)處于等待狀態(tài)而影響了其它任務(wù)的執(zhí)行,這樣就可以容易的實(shí)現(xiàn)網(wǎng)絡(luò)上的實(shí)時(shí)交互操作。java在執(zhí)行過程中,可以動(dòng)態(tài)的加載各種類庫,這一特點(diǎn)使之非常適合于網(wǎng)絡(luò)運(yùn)行,同時(shí)也非常有利于軟件的開發(fā),即使是更新類庫也不必重新編譯使用這一類庫的應(yīng)用程序。2.2J2EE企業(yè)級(jí)開發(fā)介紹Web應(yīng)用開發(fā)者需要編寫企業(yè)級(jí)的分布式的事務(wù)處理應(yīng)用程序,而這些應(yīng)用程序必須可以發(fā)揮速度、安全性和服務(wù)器端技術(shù)的可靠性。企業(yè)級(jí)的應(yīng)用程序必須具有以下特點(diǎn):花費(fèi)更少的金錢、具有更快的速度、占用更少的資源。為了減少費(fèi)用,快速設(shè)計(jì)和開發(fā)企業(yè)級(jí)的應(yīng)用程序,Java2Platform,EnterpriseEdition(J2EE)技術(shù)提供了一個(gè)基于組件的方法來設(shè)計(jì)、開發(fā)、裝配和部署企業(yè)級(jí)應(yīng)用程序。J2EE平臺(tái)提供了一個(gè)多層結(jié)構(gòu)的分布式的應(yīng)用程序模型,該模型具有重用組件的能力、基于擴(kuò)展標(biāo)記語言(XML)的數(shù)據(jù)交換、統(tǒng)一的安全模式和靈活的事務(wù)控制。你不僅可以比以前更快地發(fā)表對(duì)市場的新的解決方案,而且你的獨(dú)立于平臺(tái)的基于組件的J2EE解決方案不再受任何提供商的產(chǎn)品和應(yīng)用程序編程界面(APIs)的限制。提供商和買主都可以自己選擇最合適于它們的商業(yè)應(yīng)用和所需技術(shù)的產(chǎn)品和組件。
2.3MySql數(shù)據(jù)庫的介紹MySQL(發(fā)音為"myesscueel",不是"mysequel")是一種開放源代碼的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),MySQL數(shù)據(jù)庫系統(tǒng)使用最常用的數(shù)據(jù)庫管理語言--結(jié)構(gòu)化查詢語言(SQL)進(jìn)行數(shù)據(jù)庫管理。由于MySQL是開放源代碼的,因此任何人都可以在GeneralPublicLicense的許可下下載并根據(jù)個(gè)性化的需要對(duì)其進(jìn)行修改。MySQL因?yàn)槠渌俣?、可靠性和適應(yīng)性而備受關(guān)注。大多數(shù)人都認(rèn)為在不需要事務(wù)化處理的情況下,MySQL是管理內(nèi)容最好的選擇。MySQL這個(gè)名字,起源不是很明確。一個(gè)比較有影響的說法是,基本指南和大量的庫和工具帶有前綴“my”已經(jīng)有10年以上,而且不管怎樣,MySQLAB創(chuàng)始人之一的MontyWidenius的女兒也叫My。這兩個(gè)到底是哪一個(gè)給出了MySQL這個(gè)名字至今依然是個(gè)迷,包括開發(fā)者在內(nèi)也不知道。MySQL的海豚標(biāo)志的名字叫“sakila”,它是由MySQLAB的創(chuàng)始人從用戶在“海豚命名”的競賽中建議的大量的名字表中選出的。獲勝的名字是由來自非洲斯威士蘭的開源軟件開發(fā)者AmbroseTwebaze提供。根據(jù)Ambrose所說,Sakila來自一種叫SiSwati的斯威士蘭方言,也是在Ambrose的家鄉(xiāng)烏干達(dá)附近的坦桑尼亞的Arusha的一個(gè)小鎮(zhèn)的名字。MySQL,雖然功能未必很強(qiáng)大,但因?yàn)樗拈_源、廣泛傳播,導(dǎo)致很多人都了解到這個(gè)數(shù)據(jù)庫。它的歷史也富有傳奇性。MySQL的歷史最早可以追溯到1979年,那時(shí)Oracle也才小打小鬧,微軟的SQLServer影子都沒有。有一個(gè)人叫MontyWidenius,為一個(gè)叫TcX的小公司打工,并用BASIC設(shè)計(jì)了一個(gè)報(bào)表工具,可以在4M主頻和16KB內(nèi)存的計(jì)算機(jī)上運(yùn)行。過了不久,又將此工具,使用C語言重寫,移植到Unix平臺(tái),當(dāng)時(shí),它只是一個(gè)很底層的面向報(bào)表的存儲(chǔ)引擎。這個(gè)工具叫做Unireg??墒?,這個(gè)小公司資源有限,Monty天賦極高,面對(duì)資源有限的不利條件,他反而更能發(fā)揮潛能,總是力圖寫出最高效的代碼。并因此養(yǎng)成了習(xí)慣。與Monty同在一起的還有一些別的同事,很少有人能堅(jiān)持把那些代碼持續(xù)寫到20年后,而Monty卻做到了。1990年,TcX的customer中開始有人要求要為它的API提供SQL支持,當(dāng)時(shí),有人想到了直接使用商用數(shù)據(jù)庫算了,但是Monty覺得商用數(shù)據(jù)庫的速度難令人滿意。于是,他直接借助于mSQL的代碼,將它集成到自己的存儲(chǔ)引擎中。但不巧的是,效果并不太好。于是,Monty雄心大起,決心自己重寫一個(gè)SQL支持。1996年,MySQL1.0發(fā)布,只面向一小撥人,相當(dāng)于內(nèi)部發(fā)布。到了96年10月,MySQL3.11.1發(fā)布了,呵呵,沒有2.x版本。最開始,只提供了Solaris下的二進(jìn)制版本。一個(gè)月后,Linux版本出現(xiàn)了。緊接下來的兩年里,MySQL依次移植到各個(gè)平臺(tái)下。它發(fā)布時(shí),采用的許可策略,有些與眾不同:允許免費(fèi)商用,但是不能將MySQL與自己的產(chǎn)品綁定在一起發(fā)布。如果想一起發(fā)布,就必須使用特殊許可,意味著要花銀子。當(dāng)然,商業(yè)支持也是需要花銀子的。其它的,隨用戶怎么用都可以。這種特殊許可為MySQL帶來了一些收入,從而為它的持續(xù)發(fā)展打下了良好的基礎(chǔ)。(細(xì)想想,PostgreSQL曾經(jīng)有幾年限入低谷,可能與它的完全免費(fèi),不受任何限制有關(guān)系)。2.4Struts2簡介 Struts2既然是從Struts1發(fā)展而來,但實(shí)際上Struts2與Struts1在框架的設(shè)計(jì)思想上面還是有很大的區(qū)別,Struts2是以WebWork的設(shè)計(jì)思想為核心,為什么Struts2不沿用Struts1的設(shè)計(jì)思想,畢竟Struts1在目前的企業(yè)應(yīng)用中還是有非常大的市場在的,那么,來看下Struts1的一些缺點(diǎn)吧:
1)支持的表現(xiàn)層技術(shù)單一
2)與ServletAPI嚴(yán)重耦合,這點(diǎn)可以從Action的Execute的方法聲明里面就可以看的出來
3)代碼依賴Struts1API,有侵入性,這點(diǎn)可以從寫Action類和FormBean的時(shí)候看的出來,Action必須實(shí)現(xiàn)Struts的Action類而Struts2之所以以WebWork的設(shè)計(jì)思想為其核心,一點(diǎn)就是最近WebWork的上升勢(shì)頭,再就是WebWork沒有Struts1上面的那些缺點(diǎn),更符合MVC的設(shè)計(jì)思想,也更利于代碼的復(fù)用?;谝陨辖榻B可以看的出,Struts2體系結(jié)構(gòu)與Struts1的體系結(jié)構(gòu)有很大的差別,Struts1是使用ActionServlet做為其中心處理器,Struts2則使用一個(gè)攔截器(FilterDispatcher)做為其中心處理器,這樣做的一個(gè)好處就是將Action類和ServletAPI進(jìn)行了分離。Struts2的簡單處理流程如下:
1)瀏覽器發(fā)送請(qǐng)求
2)中心處理器根據(jù)struts.xml文件查找對(duì)應(yīng)的處理請(qǐng)求的Action類
3)WebWork的攔截器鏈自動(dòng)對(duì)請(qǐng)求應(yīng)用通用功能,例如:WorkFlow、Validation等功能
4)如果Struts.xml文件中配置Method參數(shù),則調(diào)用Method參數(shù)對(duì)應(yīng)的Action類中的Method方法,否則調(diào)用通用的Execute方法來處理用戶請(qǐng)求
5)將Action類中的對(duì)應(yīng)方法返回的結(jié)果響應(yīng)給瀏覽器2.5Hibernate簡介Hibernate是一個(gè)開放源代碼的對(duì)象關(guān)系映射框架,它對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝,使得Java程序員可以隨心所欲的使用對(duì)象編程思維來操縱數(shù)據(jù)庫。Hibernate可以應(yīng)用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應(yīng)用中使用,最具革命意義的是,Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。Hibernate的核心接口一共有5個(gè),分別為:Session、SessionFactory、Transaction、Query和Configuration.這5個(gè)核心接口在任何開發(fā)中都會(huì)用到。通過這些接口,不僅可以對(duì)持久化對(duì)象進(jìn)行存取,還能夠進(jìn)行事務(wù)控制。下面對(duì)這五的核心接口分別加以介紹。Session接口:Session接口負(fù)責(zé)執(zhí)行被持久化對(duì)象的CRUD操作(CRUD的任務(wù)是完成與數(shù)據(jù)庫的交流,包含了很多常見的SQL語句。)。但需要注意的是Session對(duì)象是非線程安全的。同時(shí),Hibernate的session不同于JSP應(yīng)用中的HttpSession.這里當(dāng)使用session這個(gè)術(shù)語時(shí),其實(shí)指的是Hibernate中的session,而以后會(huì)將HttpSesion對(duì)象稱為用戶session.SessionFactory接口:SessionFactroy接口負(fù)責(zé)初始化Hibernate.它充當(dāng)數(shù)據(jù)存儲(chǔ)源的代理,并負(fù)責(zé)創(chuàng)建Session對(duì)象。這里用到了工廠模式。需要注意的是SessionFactory并不是輕量級(jí)的,因?yàn)橐话闱闆r下,一個(gè)項(xiàng)目通常只需要一個(gè)SessionFactory就夠,當(dāng)需要操作多個(gè)數(shù)據(jù)庫時(shí),可以為每個(gè)數(shù)據(jù)庫指定一個(gè)SessionFactory.Configuration接口:Configuration接口負(fù)責(zé)配置并啟動(dòng)Hibernate,創(chuàng)建SessionFactory對(duì)象。在Hibernate的啟動(dòng)的過程中,Configuration類的實(shí)例首先定位映射文檔位置、讀取配置,然后創(chuàng)建SessionFacTransaction接口:Transaction接口負(fù)責(zé)事務(wù)相關(guān)的操作。它是可選的,開發(fā)人員也可以設(shè)計(jì)編寫自己的底層事務(wù)處理代碼。Query和Criteria接口:Query和Criteria接口負(fù)責(zé)執(zhí)行各種數(shù)據(jù)庫查詢。它可以使用HQL語言或SQL語句兩種表達(dá)方式。2.6Spring簡介傳統(tǒng)J2EE應(yīng)用的開發(fā)效率低,應(yīng)用服務(wù)器廠商對(duì)各種技術(shù)的支持并沒有真正統(tǒng)一,導(dǎo)致J2EE的應(yīng)用沒有真正實(shí)現(xiàn)WriteOnce及RunAnywhere的承諾。Spring作為開源的中間件,獨(dú)立于各種應(yīng)用服務(wù)器,甚至無須應(yīng)用服務(wù)器的支持,也能提供應(yīng)用服務(wù)器的功能,如聲明式事務(wù)、事務(wù)處理等。Spring致力于J2EE應(yīng)用的各層的解決方案,而不是僅僅專注于某一層的方案??梢哉fSpring是企業(yè)應(yīng)用開發(fā)的“一站式”選擇,并貫穿表現(xiàn)層、業(yè)務(wù)層及持久層。然而,Spring并不想取代那些已有的框架,而是與它們無縫地整合。Spring是一個(gè)開源框架,它由RodJohnson創(chuàng)建。它是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限于服務(wù)器端的開發(fā)。從簡單性、可測試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。◆目的:解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性◆功能:使用基本的JavaBean代替EJB,并提供了更多的企業(yè)應(yīng)用功能◆范圍:任何Java應(yīng)用簡單來說,Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。◆輕量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個(gè)大小只有1MB多的JAR文件里發(fā)布。并且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應(yīng)用中的對(duì)象不依賴于Spring的特定類。◆控制反轉(zhuǎn)——Spring通過一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了松耦合。當(dāng)應(yīng)用了IoC,一個(gè)對(duì)象依賴的其它對(duì)象會(huì)通過被動(dòng)的方式傳遞進(jìn)來,而不是這個(gè)對(duì)象自己創(chuàng)建或者查找依賴對(duì)象。你可以認(rèn)為IoC與JNDI相反——不是對(duì)象從容器中查找依賴,而是容器在對(duì)象初始化時(shí)不等對(duì)象請(qǐng)求就主動(dòng)將依賴傳遞給它。◆面向切面——Spring提供了面向切面編程的豐富支持,允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)(例如審計(jì)(auditing)和事務(wù)(transaction)管理)進(jìn)行內(nèi)聚性的開發(fā)。應(yīng)用對(duì)象只實(shí)現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯——僅此而已。它們并不負(fù)責(zé)(甚至是意識(shí))其它的系統(tǒng)級(jí)關(guān)注點(diǎn),例如日志或事務(wù)支持?!羧萜鳌猄pring包含并管理應(yīng)用對(duì)象的配置和生命周期,在這個(gè)意義上它是一種容器,你可以配置你的每個(gè)bean如何被創(chuàng)建——基于一個(gè)可配置原型(prototype),你的bean可以創(chuàng)建一個(gè)單獨(dú)的實(shí)例或者每次需要時(shí)都生成一個(gè)新的實(shí)例——以及它們是如何相互關(guān)聯(lián)的。然而,Spring不應(yīng)該被混同于傳統(tǒng)的重量級(jí)的EJB容器,它們經(jīng)常是龐大與笨重的,難以使用。◆框架——Spring可以將簡單的組件配置、組合成為復(fù)雜的應(yīng)用。在Spring中,應(yīng)用對(duì)象被聲明式地組合,典型地是在一個(gè)XML文件里。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理、持久化框架集成等等),將應(yīng)用邏輯的開發(fā)留給了你。所有Spring的這些特征使你能夠編寫更干凈、更可管理、并且更易于測試的代碼。它們也為Spring中的各種模塊提供了基礎(chǔ)支持。起源你可能正在想“Spring不過是另外一個(gè)的framework”。當(dāng)已經(jīng)有許多開放源代碼(和專有)J2EEframework時(shí),我們?yōu)槭裁催€需要SpringFramework?Spring是獨(dú)特的,因?yàn)槿舾蓚€(gè)原因:◆它定位的領(lǐng)域是許多其他流行的framework沒有的。Spring致力于提供一種方法管理你的業(yè)務(wù)對(duì)象?!鬝pring是全面的和模塊化的。Spring有分層的體系結(jié)構(gòu),這意味著你能選擇使用它孤立的任何部分,它的架構(gòu)仍然是內(nèi)在穩(wěn)定的。因此從你的學(xué)習(xí)中,你可得到最大的價(jià)值。例如,你可能選擇僅僅使用Spring來簡單化JDBC的使用,或用來管理所有的業(yè)務(wù)對(duì)象?!羲脑O(shè)計(jì)從底部幫助你編寫易于測試的代碼。Spring是用于測試驅(qū)動(dòng)工程的理想的framework。Spring對(duì)你的工程來說,它不需要一個(gè)以上的framework。Spring是潛在地一站式解決方案,定位于與典型應(yīng)用相關(guān)的大部分基礎(chǔ)結(jié)構(gòu)。它也涉及到其他framework沒有考慮到的內(nèi)容。特點(diǎn)◆方便解耦,簡化開發(fā)通過Spring提供的IoC容器,我們可以將對(duì)象之間的依賴關(guān)系交由Spring進(jìn)行控制,避免硬編碼所造成的過度程序耦合。有了Spring,用戶不必再為單實(shí)例模式類、屬性文件解析等這些很底層的需求編寫代碼,可以更專注于上層的應(yīng)用?!鬉OP編程的支持通過Spring提供的AOP功能,方便進(jìn)行面向切面的編程,許多不容易用傳統(tǒng)OOP實(shí)現(xiàn)的功能可以通過AOP輕松應(yīng)付?!袈暶魇绞聞?wù)的支持在Spring中,我們可以從單調(diào)煩悶的事務(wù)管理代碼中解脫出來,通過聲明式方式靈活地進(jìn)行事務(wù)的管理,提高開發(fā)效率和質(zhì)量。◆方便程序的測試可以用非容器依賴的編程方式進(jìn)行幾乎所有的測試工作,在Spring里,測試不再是昂貴的操作,而是隨手可做的事情?!舴奖慵筛鞣N優(yōu)秀框架Spring不排斥各種優(yōu)秀的開源框架,相反,Spring可以降低各種框架的使用難度,Spring提供了對(duì)各種優(yōu)秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持?!艚档蚃avaEEAPI的使用難度Spring對(duì)很多難用的JavaEEAPI(如JDBC,JavaMail,遠(yuǎn)程調(diào)用等)提供了一個(gè)薄薄的封裝層,通過Spring的簡易封裝,這些JavaEEAPI的使用難度大為降低。◆Java源碼是經(jīng)典學(xué)習(xí)范例Spring的源碼設(shè)計(jì)精妙、結(jié)構(gòu)清晰、匠心獨(dú)用,處處體現(xiàn)著大師對(duì)Java設(shè)計(jì)模式靈活運(yùn)用以及對(duì)Java技術(shù)的高深造詣。Spring框架源碼無疑是Java技術(shù)的最佳實(shí)踐范例。如果想在短時(shí)間內(nèi)迅速提高自己的Java技術(shù)水平和應(yīng)用開發(fā)水平,學(xué)習(xí)和研究Spring源碼將會(huì)使你收到意想不到的效果。好處在我們進(jìn)入細(xì)節(jié)以前,讓我們看一下Spring可以給一個(gè)工程帶來的一些好處:◆Spring能有效地組織你的中間層對(duì)象,無論你是否選擇使用了EJB。如果你僅僅使用了Struts或其他的包含了J2EE特有APIs的framework,你會(huì)發(fā)現(xiàn)Spring關(guān)注了遺留下的問題?!鬝pring能消除在許多工程上對(duì)Singleton的過多使用。根據(jù)我的經(jīng)驗(yàn),這是一個(gè)主要的問題,它減少了系統(tǒng)的可測試性和面向?qū)ο筇匦?。◆Spring能消除使用各種各樣格式的屬性定制文件的需要,在整個(gè)應(yīng)用和工程中,可通過一種一致的方法來進(jìn)行配置。曾經(jīng)感到迷惑,一個(gè)特定類要查找迷幻般的屬性關(guān)鍵字或系統(tǒng)屬性,為此不得不讀Javadoc乃至源編碼嗎?有了Spring,你可很簡單地看到類的JavaBean屬性。倒置控制的使用(在下面討論)幫助完成這種簡化?!鬝pring能通過接口而不是類促進(jìn)好的編程習(xí)慣,減少編程代價(jià)到幾乎為零?!鬝pring被設(shè)計(jì)為讓使用它創(chuàng)建的應(yīng)用盡可能少的依賴于他的APIs。在Spring應(yīng)用中的大多數(shù)業(yè)務(wù)對(duì)象沒有依賴于Spring?!羰褂肧pring構(gòu)建的應(yīng)用程序易于單元測試?!鬝pring能使EJB的使用成為一個(gè)實(shí)現(xiàn)選擇,而不是應(yīng)用架構(gòu)的必然選擇。你能選擇用POJOs或localEJBs來實(shí)現(xiàn)業(yè)務(wù)接口,卻不會(huì)影響調(diào)用代碼?!鬝pring幫助你解決許多問題而無需使用EJB。Spring能提供一種EJB的替換物,它們適于許多web應(yīng)用。例如,Spring能使用AOP提供聲明性事務(wù)而不通過使用EJB容器,如果你僅僅需要與單個(gè)的數(shù)據(jù)庫打交道,甚至不需要JTA實(shí)現(xiàn)。■Spring為數(shù)據(jù)存取提供了一致的框架,不論是使用JDBC或O/Rmapping產(chǎn)品(如Hibernate)。Spring確實(shí)使你能通過最簡單可行的解決辦法解決你的問題。這些特性是有很大價(jià)值的??偨Y(jié)起來,Spring有如下優(yōu)點(diǎn):◆低侵入式設(shè)計(jì),代碼污染極低◆獨(dú)立于各種應(yīng)用服務(wù)器,可以真正實(shí)現(xiàn)WriteOnce,RunAnywhere的承諾◆Spring的DI機(jī)制降低了業(yè)務(wù)對(duì)象替換的復(fù)雜性◆Spring并不完全依賴于Spring,開發(fā)者可自由選用Spring框架的部分或全部作用Spring提供許多功能,在此我將快速地依次展示其各個(gè)主要方面。首先,讓我們明確Spring范圍。盡管Spring覆蓋了許多方面,但我們已經(jīng)有清楚的概念,它什么應(yīng)該涉及和什么不應(yīng)該涉及。Spring的主要目的是使J2EE易用和促進(jìn)好編程習(xí)慣。Spring不重新開發(fā)已有的東西。因此,在Spring中你將發(fā)現(xiàn)沒有日志記錄的包,沒有連接池,沒有分布事務(wù)調(diào)度。這些均有開源項(xiàng)目提供(例如CommonsLogging用來做所有的日志輸出,或CommonsDBCP用來作數(shù)據(jù)連接池),或由你的應(yīng)用程序服務(wù)器提供。因?yàn)橥瑯拥牡脑?,我們沒有提供O/Rmapping層,對(duì)此,已有友好的解決辦法如Hibernate和JDO。
Spring的目標(biāo)是使已存在的技術(shù)更加易用。例如,盡管我們沒有底層事務(wù)協(xié)調(diào)處理,但我們提供了一個(gè)抽象層覆蓋了JTA或任何其他的事務(wù)策略。Spring沒有直接和其他的開源項(xiàng)目競爭,除非我們感到我們能提供新的一些東西。例如,象許多開發(fā)人員,我們從來沒有為Struts高興過,并且感到在MVCwebframework中還有改進(jìn)的余地。在某些領(lǐng)域,例如輕量級(jí)的IoC容器和AOP框架,Spring有直接的競爭,但是在這些領(lǐng)域還沒有已經(jīng)較為流行的解決方案。(Spring在這些區(qū)域是開路先鋒。)Spring也得益于內(nèi)在的一致性。所有的開發(fā)者都在唱同樣的的贊歌,基礎(chǔ)想法依然是ExpertOne-on-OneJ2EE設(shè)計(jì)與開發(fā)的那些。并且我們已經(jīng)能夠使用一些主要的概念,例如倒置控制,來處理多個(gè)領(lǐng)域。Spring在應(yīng)用服務(wù)器之間是可移植的。當(dāng)然保證可移植性總是一次挑戰(zhàn),但是我們避免任何特定平臺(tái)或非標(biāo)準(zhǔn)化,并且支持在WebLogic,Tomcat,Resin,JBoss,WebSphere和其他的應(yīng)用服務(wù)器上的用戶。2.7MVC設(shè)計(jì)模式概述2.5.1MVC是Model-View-Controller的簡稱,即模型-視圖-控制器。MVC是XeroxPARC在20世紀(jì)80年代為編程語言Smalltalk—80發(fā)明的一種軟件設(shè)計(jì)模式,至今已被廣泛使用,最近幾年被推薦為Sun公司J2EE平臺(tái)的設(shè)計(jì)模式,受到越來越多的Web開發(fā)者的歡迎。MVC設(shè)計(jì)模式MVC是一種設(shè)計(jì)模式,它強(qiáng)制性地把應(yīng)用程序的輸入、處理和輸出分開。MVC把應(yīng)用程序分為三個(gè)核心模塊:模型、視圖和控制器,它們分別擔(dān)任不同的任務(wù)。如下圖顯示了這幾個(gè)模塊各自的功能以及它們的相互關(guān)系。視圖:視圖是用戶看到并與之交互的界面。視圖向用戶顯示相關(guān)的數(shù)據(jù),并能接收用戶的輸入數(shù)據(jù),但是它并不進(jìn)行任何實(shí)際的業(yè)務(wù)處理。視圖可以向模型查詢業(yè)務(wù)狀態(tài),但不能改變模型。視圖還能接收模型發(fā)出的數(shù)據(jù)更新事件,從而對(duì)用戶界面進(jìn)行同步更新。模型:模型是應(yīng)用程序的主體部分。模型表示業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)邏輯。一個(gè)模型能為多個(gè)視圖提供數(shù)據(jù)。由于同一個(gè)模型可以被多個(gè)視圖重用,所以提高了應(yīng)用的可重用性。方法調(diào)用〈控制器〉方法調(diào)用〈控制器〉接受用戶請(qǐng)求調(diào)用模型響應(yīng)用戶請(qǐng)求選擇視圖顯示響應(yīng)結(jié)果〈視圖〉顯示模型狀態(tài)接受數(shù)據(jù)更新請(qǐng)求把用戶輸入數(shù)據(jù)傳輸給控制器〈模型〉代表應(yīng)用程序狀態(tài)響應(yīng)狀態(tài)查詢處理業(yè)務(wù)流程通知視圖業(yè)務(wù)狀態(tài)更新事件圖2.1MVC視圖Fig.2.1MVCView控制器:控制器接收用戶輸入并調(diào)用模型和視圖去完成用戶的需求。當(dāng)Web用戶單擊Web頁面中的提交按鈕來發(fā)送HTML表單時(shí),控制器接收請(qǐng)求并調(diào)用相應(yīng)的模型組件去處理請(qǐng)求,然后調(diào)用相應(yīng)的視圖來顯示模型返回的數(shù)據(jù)。MVC的處理過程如下:首先控制器接收用戶的請(qǐng)求,并決定應(yīng)該調(diào)用哪個(gè)模型來進(jìn)行處理;然后根據(jù)用戶請(qǐng)求并進(jìn)行相應(yīng)的業(yè)務(wù)處理,并返回?cái)?shù)據(jù),最后控制器調(diào)用相應(yīng)的視圖來格式化模型返回的數(shù)據(jù),并通過視圖呈現(xiàn)給用戶。MVC的優(yōu)點(diǎn)和不足MVC的優(yōu)點(diǎn)表現(xiàn)在以下幾個(gè)方面:
可以為一個(gè)模型在運(yùn)行時(shí)同時(shí)建立和使用多個(gè)視圖。變化-傳播機(jī)制可以確保所有相關(guān)的視圖及時(shí)得到模型數(shù)據(jù)變化,從而使所有關(guān)聯(lián)的視圖和控制器做到行為同步。
視圖與控制器的可接插性,允許更換視圖和控制器對(duì)象,而且可以根據(jù)需求動(dòng)態(tài)的打開或關(guān)閉、甚至在運(yùn)行期間進(jìn)行對(duì)象替換。
模型的可移植性。因?yàn)槟P褪仟?dú)立于視圖的,所以可以把一個(gè)模型獨(dú)立地移植到新的平臺(tái)工作。需要做的只是在新平臺(tái)上對(duì)視圖和控制器進(jìn)行新的修改。
潛在的框架結(jié)構(gòu)??梢曰诖四P徒?yīng)用程序框架,不僅僅是用在設(shè)計(jì)界面的設(shè)計(jì)中。MVC的不足表現(xiàn)在以下幾個(gè)方面:增加了系統(tǒng)結(jié)構(gòu)和實(shí)現(xiàn)的復(fù)雜性。對(duì)于簡單的界面,嚴(yán)格遵循MVC,使模型、視圖與控制器分離,會(huì)增加結(jié)構(gòu)的復(fù)雜性,并可能產(chǎn)生過多的更新操作,降低運(yùn)行效率。視圖與控制器間的過于緊密的連接。視圖與控制器是相互分離,但確實(shí)聯(lián)系緊密的部件,視圖沒有控制器的存在,其應(yīng)用是很有限的,反之亦然,這樣就妨礙了他們的獨(dú)立重用。視圖對(duì)模型數(shù)據(jù)的低效率訪問。依據(jù)模型操作接口的不同,視圖可能需要多次調(diào)用才能獲得足夠的顯示數(shù)據(jù)。對(duì)未變化數(shù)據(jù)的不必要的頻繁訪問,也將損害操作性能。
目前,一般高級(jí)的界面工具或構(gòu)造器不支持MVC模式。改造這些工具以適應(yīng)MVC需要和建立分離的部件的代價(jià)是很高的,從而造成使用MVC的困難。3系統(tǒng)分析與設(shè)計(jì)3.1系統(tǒng)功能分析本系統(tǒng)為留言管理系統(tǒng),主要實(shí)現(xiàn)對(duì)留言板的管理,發(fā)表留言,查看留言,刪除留言,用戶可按照一定流程使用本系統(tǒng),首先一個(gè)用戶需要注冊(cè)登錄本系統(tǒng),登錄系統(tǒng)的用戶可以查看已有的留言,發(fā)表一個(gè)新的留言,回復(fù)留言參與對(duì)留言內(nèi)容的討論,如果登錄用戶為管理員,則可以刪除有關(guān)留言,留言功能流程如圖1.1所示。圖1.1留言功能流程圖通過上面的分析,總結(jié)該系統(tǒng)的功能有以下幾項(xiàng):用戶注冊(cè)、用戶登錄、發(fā)表留言、回復(fù)留言、看留言、刪除留言、權(quán)限控制。瀏覽者根據(jù)不同的角色注冊(cè)為本系統(tǒng)的用戶,學(xué)生登錄后可以發(fā)表一些留言,提出自己問題和大家一起分享,一起解決,其他學(xué)生和老師登錄后可以正對(duì)該學(xué)生所提出的留言進(jìn)行回復(fù),分享知識(shí)和經(jīng)驗(yàn),這樣就達(dá)到了學(xué)術(shù)交流的目的,對(duì)于沒有用的留言管理員可以將其刪除。3.2數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)庫E-R圖圖1.4實(shí)體間的關(guān)系E-R圖系統(tǒng)用戶表的列清單名稱代碼數(shù)據(jù)類型是鍵強(qiáng)制默認(rèn)值注釋idu_idintTRUETRUE
姓名u_namevarchar(20)FALSEFALSE
性別u_gendervarchar(20)FALSEFALSE
電子郵件u_emailvarchar(50)FALSEFALSE
登錄帳號(hào)u_loginnamevarchar(50)FALSEFALSE
登錄密碼u_passwordvarchar(50)FALSEFALSE
用戶類型u_typevarchar(20)FALSEFALSE
是否為管理元u_ismanagerbitFALSEFALSE留言表的列清單名稱代碼數(shù)據(jù)類型是鍵強(qiáng)制默認(rèn)值注釋idmessage_idintTRUETRUE
id2u_idintTRUEFALSE
標(biāo)題message_titlevarchar(100)FALSEFALSE
內(nèi)容message_contenttextFALSEFALSE
發(fā)表時(shí)間message_timevarchar(50)FALSEFALSE
表格回復(fù)表的列清單名稱代碼數(shù)據(jù)類型是鍵強(qiáng)制默認(rèn)值注釋ididintTRUETRUE
id2u_idintTRUEFALSE
id3message_idintTRUEFALSE
回復(fù)內(nèi)容replay_contenttextFALSEFALSE
回復(fù)時(shí)間replay_timevarchar(50)FALSEFALSE
考慮到功能的完整性,數(shù)據(jù)庫的設(shè)計(jì)按照數(shù)據(jù)庫設(shè)計(jì)范式進(jìn)行設(shè)計(jì),表與表之間通過外鍵進(jìn)行關(guān)聯(lián)。系統(tǒng)用戶表(sys_user)存放系統(tǒng)的用戶,包括管理員,教師,學(xué)生。教師與學(xué)生之間通過字段“u_type”進(jìn)行區(qū)分,而管理員本身屬于教師或者學(xué)生中的一種,則通過字段“u_ismanager”進(jìn)行標(biāo)識(shí),留言表(levemessage)用來存放用戶的留言,主要包括留言的標(biāo)題,內(nèi)容,留言的時(shí)間,以及留言者。留言回復(fù)表(replaymessage)則記錄了對(duì)某個(gè)留言的回復(fù),包括回復(fù)的內(nèi)容,回復(fù)的事件,回復(fù)人等等信息。數(shù)據(jù)庫建表Sql腳本如下:DROPDATABASEIFEXISTSleve_message;/*==============================================================*//*Database:leve_message*//*==============================================================*/CREATEDATABASEleve_message;USEleve_message;/*==============================================================*//*Table:levemessage*//*==============================================================*/createtablelevemessage(message_idintnotnullauto_increment,u_idint,message_titlevarchar(100),message_contenttext,message_timevarchar(50),primarykey(message_id));/*==============================================================*//*Table:replaymessage*//*==============================================================*/createtablereplaymessage(idintnotnullauto_increment,u_idint,message_idint,replay_contenttext,replay_timevarchar(50),primarykey(id));/*==============================================================*//*Table:sys_user*//*==============================================================*/createtablesys_user(u_idintnotnullauto_increment,u_namevarchar(20),u_gendervarchar(20),u_emailvarchar(50),u_loginnamevarchar(50),u_passwordvarchar(50),u_typevarchar(20),u_ismanagerbit,primarykey(u_id));altertablelevemessageaddconstraintFK_Reference_1foreignkey(u_id)referencessys_user(u_id)ondeleterestrictonupdaterestrict;altertablereplaymessageaddconstraintFK_Reference_2foreignkey(u_id)referencessys_user(u_id)ondeleterestrictonupdaterestrict; altertablereplaymessageaddconstraintFK_Reference_3foreignkey(message_id)referenceslevemessage(message_id)ondeleterestrictonupdaterestrict;INSERTINTOsys_user(u_name,u_gender,u_email,u_loginname,u_password,u_type,u_ismanager)VALUES('管理員','男','admin@163.com','admin','admin','管理員',TRUE);4系統(tǒng)開發(fā)4.1用戶注冊(cè)瀏覽者通過注冊(cè)用戶具有登錄本系統(tǒng)的能力,用戶注冊(cè)需要填寫相關(guān)信息,根據(jù)用戶的不同角色選擇學(xué)生或者教師注冊(cè)成功的用戶可一登錄系統(tǒng)看到留言以及發(fā)表留言或者參與留言的討論 下圖是用戶登錄后進(jìn)入的主界面,列出了所有的留言和相關(guān)信息以及及當(dāng)前登錄的用戶和相關(guān)的操作,用戶可以通過點(diǎn)擊"所有留言"查看所用的留言,可以以點(diǎn)擊"我的留言"查看自己的留言??梢詥螕艟唧w的留言進(jìn)入留言界面,查看留言的詳細(xì)信息以及回復(fù)情況,也可以通過留言的方式參與討論。 當(dāng)Action接收到用戶的動(dòng)作后,做出相應(yīng)的響應(yīng),同時(shí)返回指定的頁面并攜帶數(shù)據(jù),具體Action控制代碼如下:publicStringlistAllMessage()throwsException{ Pagepages=newPage(); pages.setCount(messageservice.getCount()); pages.setPage(page); List<Levemessage>messages=messageservice.getAllMessage(pages); ServletActionContext.getRequest().setAttribute("pages",pages); ServletActionContext.getRequest().setAttribute("messages",messages); return"index"; } publicStringlistMessageForUser()throwsException{ SysUseruser=(SysUser)ServletActionContext.getRequest().getSession().getAttribute("user"); Pagepages=newPage(); pages.setCount(messageservice.getCount(user)); pages.setPage(page); List<Levemessage>usermessages=messageservice.getAllMessage(pages,user); ServletActionContext.getRequest().setAttribute("pages",pages); ServletActionContext.getRequest().setAttribute("usermessages",usermessages); return"usermessage"; }4.2發(fā)表表留言 下圖為發(fā)表留言界面,登錄用戶點(diǎn)擊發(fā)表留言按鈕可進(jìn)入發(fā)表留言界面。學(xué)生可以通過此功能發(fā)表自己的疑問,以及分享自己的學(xué)習(xí)經(jīng)驗(yàn)。 發(fā)表留言控制代碼如下:publicStringaddMessage()throwsException{ Levemessagemessage=newLevemessage(); message.setMessageTitle(messageTitle); message.setMessageContent(messageContent); message.setMessageTime(newSimpleDateFormat("yyyy-MM-dd").format(newDate())); message.setSysUser((SysUser)ServletActionContext.getRequest().getSession().getAttribute("user")); messageservice.addMessage(message); return"success"; }4.3回復(fù)留言 下圖為回復(fù)留言界面,打開具體的留言后,可以查看該留言的詳細(xì)信息,也可以查看該留言的回復(fù)內(nèi)容,回復(fù)時(shí)間,回復(fù)人。同時(shí)用戶也可以回復(fù)該留言,通過此功能,用戶可以從中獲得知己想要知道的知識(shí),也可以參與討論提高自己的技能和幫助他人,教師也可以在此處發(fā)表回復(fù),解答學(xué)生的問題,從而達(dá)到了互動(dòng)教學(xué)的目的。 顯示留言詳細(xì)和發(fā)表回復(fù)的相關(guān)action代碼如下:publicStringshowMessageDetil()throwsException{ Levemessagemessage=messageservice.findMessageById(messageId); ServletActionContext.getRequest().setAttribute("message",message); return"messagereplay"; } publicStringreplayMessage()throwsException{ Replaymessagereplaymessage=newReplaymessage(); replaymessage.setReplayContent(replayContent); replaymessage.setSysUser((SysUser)ServletActionContext.getRequest().getSession().getAttribute("user")); replaymessage.setLeveMessage(messageservice.findMessageById(messageId)); replaymessage.setReplayTime(newSimpleDateFormat("yyyy-MM-dd").format(newDate())); messageservice.addReplayMessage(replaymessage); return"success"; }4.4刪除留言登錄用戶如果具有管理留言的權(quán)限,則可以管理留言,對(duì)已經(jīng)過時(shí)的留言或者沒有用的留言進(jìn)行刪除,如下圖所示點(diǎn)擊刪除后即可刪除有關(guān)留言,可進(jìn)行本留言系統(tǒng)的管理。4.5系統(tǒng)異常處理 為了優(yōu)化系統(tǒng)結(jié)果,簡化異常處理的繁瑣,本系統(tǒng)采用了Struts2Interceptor進(jìn)行異常處理,使得系統(tǒng)的處理能夠統(tǒng)一,如果應(yīng)用發(fā)上錯(cuò)誤,系統(tǒng)將顯示錯(cuò)誤頁面,告知用戶系統(tǒng)發(fā)生了錯(cuò)誤,增強(qiáng)了用戶體驗(yàn),也為系統(tǒng)維護(hù)提供了依據(jù)。異常處理的Interceptor:publicStringintercept(ActionInvocation
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 船舶強(qiáng)度課程設(shè)計(jì)
- 二零二五年度抗滑樁施工信息化管理系統(tǒng)合同2篇
- 二零二五年度寵物店轉(zhuǎn)讓及租賃合同3篇
- 燃?xì)夤艿姥簿€員管理制度模版(2篇)
- 課程設(shè)計(jì)無線充電電動(dòng)車
- 二零二五年度應(yīng)急物資儲(chǔ)備與責(zé)任落實(shí)合同3篇
- 食品安全宣傳周方案模版(2篇)
- 二零二五年度汽車尾氣排放檢測與治理委托合同范本3篇
- 二零二五年度個(gè)人股權(quán)轉(zhuǎn)讓與公司合并重組協(xié)議范本3篇
- 二零二五年圖書館室內(nèi)裝飾合同2篇
- 瑤醫(yī)目診圖-望面診病現(xiàn)用圖解-目診
- 2022年四級(jí)反射療法師考試題庫(含答案)
- 新《安全生產(chǎn)法》培訓(xùn)測試題
- 政務(wù)禮儀-PPT課件
- 特種涂料類型——耐核輻射涂料的研究
- 化工裝置常用英語詞匯對(duì)照
- 物資采購管理流程圖
- 無牙頜解剖標(biāo)志
- 標(biāo)準(zhǔn)《大跨徑混凝土橋梁的試驗(yàn)方法》
- 格拉斯哥昏迷評(píng)分(GCS)--表格-改良自用
- ISO9001記錄保存年限一覽表
評(píng)論
0/150
提交評(píng)論