基于JAVA_JSP下載系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)(論文+源碼+
目 錄 第1章 緒論11 課題的研究背景、內(nèi)容和意義11 第2章 主要技術(shù)概述33 2.1 B/S結(jié)構(gòu)33 2.2 JSP技術(shù)44 2.2.1 JSP技術(shù)的強(qiáng)勢(shì)55 2.2.2 JSP技術(shù)的弱勢(shì)55 2.3 SQL Server 2000數(shù)據(jù)庫(kù)55 2.4 JDBC數(shù)據(jù)庫(kù)連接66 2.4.1 JDBC接口77 2.4.2 JDBC的驅(qū)動(dòng)程序77 2.5 TOMCAT應(yīng)用服務(wù)器88 第3章 需求分析1010 3.1.1 用戶(hù)及主要操作功能1010 3.1.2 系統(tǒng)角色管理模塊1010 包括系統(tǒng)管理員模塊和會(huì)員模塊1010 3.1.3 電子書(shū)管理模塊1010 3.1.4 公告模塊1111 3.2 系統(tǒng)性能需求分析1111 3.3 開(kāi)發(fā)環(huán)境及開(kāi)發(fā)工具1111 第4章 概要設(shè)計(jì)1212 4.1 系統(tǒng)的體系結(jié)構(gòu)1212 4.2 系統(tǒng)功能結(jié)構(gòu)設(shè)計(jì)1212 4.2.1 管理員模塊1414 4.2.2 會(huì)員模塊1414 4.3 系統(tǒng)流程圖1515 4.3.1 會(huì)員管理1515 4.4 數(shù)據(jù)庫(kù)設(shè)計(jì)1616 第5章 詳細(xì)設(shè)計(jì)1919 5.1 公告管理模塊1919 5.1.1 瀏覽公告1919 5.1.2 發(fā)布公告2020 5.1.3 管理公告2121 5.2 會(huì)員模塊2323 5.2.1 會(huì)員注冊(cè)2323 5.2.2 點(diǎn)券充值2525 點(diǎn)券充值的核心代碼如下:2525 5.2.3 搜索和下載書(shū)籍2727 5.3 書(shū)籍管理模塊2929 5.3.1 電子書(shū)類(lèi)別的管理2929 5.3.2 電子書(shū)管理3131 5.3 留言版模塊3333 5.4 通用模塊3434 5.4.1 登錄、修改個(gè)人信息及注銷(xiāo)退出3535 5.4.2 數(shù)據(jù)庫(kù)的連接接3535 5.5 小結(jié)3737 第6章 系統(tǒng)測(cè)試3838 6.1 公告管理模塊3838 6.1.1 公告的瀏覽3838 6.1.2 公告的添加3838 6.1.3 公告的編輯、刪除3838 6.2 會(huì)員管理模塊3838 6.2.1 成員注冊(cè)3838 6.2.2 點(diǎn)券充值3939 6.2.3 搜索書(shū)籍3939 6.3 書(shū)籍管理模塊3939 6.3.1 電子書(shū)類(lèi)別的管理3939 6.3.2 電子書(shū)管理3939 6.3.3 留言版3939 第7章 結(jié)論與展望4040 參考文獻(xiàn)4141 致 謝4242 第1章 緒論 課題的研究背景、內(nèi)容和意義 電子書(shū)代表人們所閱讀的數(shù)字化出版物, 從而區(qū)別于以紙張為載體的傳統(tǒng)出版物, 電子書(shū)是利用計(jì)算機(jī)技術(shù)將一定的文字、圖片、聲音、影像等信息, 通過(guò)數(shù)碼方式記錄在以光、電、磁為介質(zhì)的設(shè)備中, 借助于特定的設(shè)備來(lái)讀取、復(fù)制、傳輸,已經(jīng)為人們所熟悉。 眾所周知,自20世紀(jì)80年代以來(lái),電子圖書(shū)的出現(xiàn)和迅速發(fā)展已經(jīng)引起社會(huì)各界的普遍關(guān)注。在信息社會(huì)化和社會(huì)信息化的今天,電子圖書(shū)極大地刺激了傳統(tǒng)圖書(shū)出版、發(fā)行市場(chǎng),改變了讀者閱讀習(xí)慣,給人類(lèi)社會(huì)文化和社會(huì)生活帶來(lái)了深刻的變革。一般情況下,閱讀電子圖書(shū)主要有兩種形式,一種是在線或在PC機(jī)上閱讀,即通過(guò)臺(tái)式電腦或筆記本電腦直接閱讀網(wǎng)站提供的免費(fèi)或付費(fèi)的電子圖書(shū),也可以下載到本地計(jì)算機(jī)上閱讀;另一種是離線或脫機(jī)閱讀,即通過(guò)使用專(zhuān)用的手持閱讀器閱讀。手持閱讀器具有體積小,分量輕,容易攜帶的特點(diǎn),不受時(shí)間、地點(diǎn)、環(huán)境的限制。而且,隨著閱讀器材技術(shù)、內(nèi)容、格式的日臻完善,電子圖書(shū)必將展示其更為廣闊的發(fā)展空間。 對(duì)比傳統(tǒng)的圖書(shū)出租的書(shū)店,電子書(shū)租借平臺(tái)有許多的優(yōu)越性。對(duì)租借者來(lái)說(shuō),方便了大家租借圖書(shū)的途徑,不必走出家門(mén),只需有一臺(tái)電腦,一根網(wǎng)線,連上網(wǎng)就可以訪問(wèn)因特網(wǎng)上大量的電子書(shū)網(wǎng)站。隨著因特網(wǎng)發(fā)展和上網(wǎng)用戶(hù)的增加,農(nóng)村也已開(kāi)始有越來(lái)越多的網(wǎng)絡(luò)連接,上網(wǎng)早已不是難事,所以,一個(gè)網(wǎng)絡(luò)的電子書(shū)租借平臺(tái)可以適應(yīng)大眾的需求。對(duì)于管理者來(lái)說(shuō),便于管理,運(yùn)營(yíng)成本低,沒(méi)有地域限制。總之,電子書(shū)租借平臺(tái)有著很高的靈活性和方便性,隨著社會(huì)的發(fā)展,會(huì)為越來(lái)越多的人所接受,有著極高的應(yīng)用前景。 在國(guó)外,電子圖書(shū)的發(fā)展體現(xiàn)在閱讀軟件和閱讀硬件兩個(gè)方面。閱讀軟件主要指在線閱讀器,閱讀硬件一般是手持式閱讀器,也包括手機(jī)。各軟硬件生產(chǎn)廠商為了更好的吸引消費(fèi)者,在這上面都下了不小的精力來(lái)完善自己產(chǎn)品的功能,保證產(chǎn)品質(zhì)量和提高其可用性,競(jìng)爭(zhēng)也比較激烈。 在國(guó)內(nèi),最為普遍的電子書(shū)閱讀終端是PC,手機(jī)閱讀電子書(shū)的方式也在逐漸增加,而專(zhuān)用的手持閱讀器還有待推廣。國(guó)內(nèi)已經(jīng)出現(xiàn)了很多的電子書(shū)網(wǎng)站,比較出名的有晉江文學(xué)、瀟湘書(shū)院、小說(shuō)閱讀網(wǎng)等,內(nèi)容包括一些原創(chuàng),各類(lèi)小說(shuō)和國(guó)內(nèi)外名著。為了自身發(fā)展,網(wǎng)站往往和一些網(wǎng)絡(luò)作家簽約,網(wǎng)絡(luò)作家在簽約網(wǎng)站發(fā)表自己的原創(chuàng)并獲得不低的著作費(fèi),這樣也豐富了網(wǎng)站的內(nèi)容,更好地吸引讀者,達(dá)到雙贏的目的。網(wǎng)站盈利的方式主要是向讀者收取閱讀費(fèi),收費(fèi)方式不盡相同,一般分為按字?jǐn)?shù)收取,按本數(shù)收取和按時(shí)間收取費(fèi)用,所以,擁有一個(gè)廣大的用戶(hù)群是保證網(wǎng)站持續(xù)良好發(fā)展的基礎(chǔ)。網(wǎng)站也可以靠出租廣告位置獲得額外的利益,但是過(guò)多的廣告,會(huì)影響網(wǎng)頁(yè)的美觀簡(jiǎn)潔,一些彈窗廣告甚至?xí)绊懽x者的操作,給用戶(hù)造成不必要的麻煩,所以廣告的投放一般不會(huì)過(guò)多? 第2章 主要技術(shù)概述 2.1 B/S結(jié)構(gòu) B/S 是 Brower/Server 就是用瀏覽器(如IE)為應(yīng)用程序客戶(hù)端操作服務(wù)器。這樣用瀏覽器來(lái)操作簡(jiǎn)單易用,但是對(duì)輸入沒(méi)有很好的驗(yàn)證。邏輯實(shí)現(xiàn)不多。本地只是用于獲取數(shù)據(jù)然后大部分驗(yàn)證需要提交服務(wù)器來(lái)完成。 B/S(Browser/Server)結(jié)構(gòu)即瀏覽器和服務(wù)器結(jié)構(gòu)。它是隨著Internet技術(shù)的興起,對(duì)C/S結(jié)構(gòu)的一種變化或者改進(jìn)的結(jié)構(gòu)[4]。在這種結(jié)構(gòu)下,用戶(hù)工作界面是通過(guò)WWW瀏覽器來(lái)實(shí)現(xiàn),極少部分事務(wù)邏輯在前端(Browser)實(shí)現(xiàn),但是主要事務(wù)邏輯在服務(wù)器端(Server)實(shí)現(xiàn),形成所謂三層3-tier結(jié)構(gòu)。這樣就大大簡(jiǎn)化了客戶(hù)端電腦載荷,減輕了系統(tǒng)維護(hù)與升級(jí)的成本和工作量,降低了用戶(hù)的總體成本(TCO)。 以目前的技術(shù)看,局域網(wǎng)建立B/S結(jié)構(gòu)的網(wǎng)絡(luò)應(yīng)用,并通過(guò)Internet/Intranet模式下數(shù)據(jù)庫(kù)應(yīng)用,相對(duì)易于把握、成本也是較低的。它是一次性到位的開(kāi)發(fā),能實(shí)現(xiàn)不同的人員,從不同的地點(diǎn),以不同的接入方式(比如LAN, WAN, Internet/Intranet等)訪問(wèn)和操作共同的數(shù)據(jù)庫(kù);它能有效地保護(hù)數(shù)據(jù)平臺(tái)和管理訪問(wèn)權(quán)限,服務(wù)器數(shù)據(jù)庫(kù)也很安全 。特別是在JAVA這樣的跨平臺(tái)語(yǔ)言出現(xiàn)之后,B/S架構(gòu)管理軟件更是方便、快捷、高效。 B/S架構(gòu)軟件的優(yōu)勢(shì)與劣勢(shì): 維護(hù)和升級(jí)方式簡(jiǎn)單。
目前,軟件系統(tǒng)的改進(jìn)和升級(jí)越來(lái)越頻繁,B/S架構(gòu)的產(chǎn)品明顯體現(xiàn)著更為方便的特性。對(duì)一個(gè)稍微大一點(diǎn)單位來(lái)說(shuō),系統(tǒng)管理人員如果需要在幾百甚至上千部電腦之間來(lái)回奔跑,效率和工作量是可想而知的,但B/S架構(gòu)的軟件只需要管理服務(wù)器就行了,所有的客戶(hù)端只是瀏覽器,根本不需要做任何的維護(hù)。無(wú)論用戶(hù)的規(guī)模有多大,有多少分支機(jī)構(gòu)都不會(huì)增加任何維護(hù)升級(jí)的工作量,所有的操作只需要針對(duì)服務(wù)器進(jìn)行;如果是異地,只需要把服務(wù)器連接專(zhuān)網(wǎng)即可,實(shí)現(xiàn)遠(yuǎn)程維護(hù)、升級(jí)和共享。所以客戶(hù)機(jī)越來(lái)越“瘦”,而服務(wù)器越來(lái)越“胖”是將來(lái)信息化發(fā)展的主流方向。今后,軟件升級(jí)和維護(hù)會(huì)越來(lái)越容易,而使用起來(lái)會(huì)越來(lái)越簡(jiǎn)單,這對(duì)用戶(hù)人力、物力、時(shí)間、費(fèi)用的節(jié)省是顯而易見(jiàn)的,驚人的。因此,維護(hù)和升級(jí)革命的方式是“瘦”客戶(hù)機(jī),“胖”服務(wù)器。成本降低,選擇更多。
大家都知道windows在桌面電腦上幾乎一統(tǒng)天下,瀏覽器成為了標(biāo)準(zhǔn)配置,但在服務(wù)器操作系統(tǒng)上windows并不是處于絕對(duì)的統(tǒng)治地位?,F(xiàn)在的趨勢(shì)是凡使用B/S架構(gòu)的應(yīng)用管理軟件,只需安裝在Linux服務(wù)器上即可,而且安全性高。所以服務(wù)器操作系統(tǒng)的選擇是很多的,不管選用那種操作系統(tǒng)都可以讓大部分人使用windows作為桌面操作系統(tǒng)電腦不受影響,這就使的最流行免費(fèi)的Linux操作系統(tǒng)快速發(fā)展起來(lái),Linux除了操作系統(tǒng)是免費(fèi)的以外,連數(shù)據(jù)庫(kù)也是免費(fèi)的,這種選擇非常盛行。應(yīng)用服務(wù)器運(yùn)行數(shù)據(jù)負(fù)荷較重。
由于B/S架構(gòu)管理軟件只安裝在服務(wù)器端(Server)上,網(wǎng)絡(luò)管理人員只需要管理服務(wù)器就行了,用戶(hù)界面主要事務(wù)邏輯在服務(wù)器(Server)端完全通過(guò)WWW瀏覽器實(shí)現(xiàn),極少部分事務(wù)邏輯在前端(Browser)實(shí)現(xiàn),所有的客戶(hù)端只有瀏覽器,網(wǎng)絡(luò)管理人員只需要做硬件維護(hù)。但是,應(yīng)用服務(wù)器運(yùn)行數(shù)據(jù)負(fù)荷較重,一旦發(fā)生服務(wù)器“崩潰”等問(wèn)題,后果不堪設(shè)想。因此,許多單位都備有數(shù)據(jù)庫(kù)存儲(chǔ)服務(wù)器,以防萬(wàn)一。 2.2 JSP技術(shù) JSP技術(shù)使用Java編程語(yǔ)言編寫(xiě)類(lèi)XML的tags和scriptlets,來(lái)封裝產(chǎn)生動(dòng)態(tài)網(wǎng)頁(yè)的處理邏輯。網(wǎng)頁(yè)還能通過(guò)tags和scriptlets訪問(wèn)存在于服務(wù)端的資源的應(yīng)用邏輯。JSP將網(wǎng)頁(yè)邏輯與網(wǎng)頁(yè)設(shè)計(jì)和顯示分離,支持可重用的基于組件的設(shè)計(jì),使基于Web的應(yīng)用程序的開(kāi)發(fā)變得迅速和容易。 Web服務(wù)器在遇到訪問(wèn)JSP網(wǎng)頁(yè)的請(qǐng)求時(shí),首先執(zhí)行其中的程序段,然后將執(zhí)行結(jié)果連同JSP文件中的HTML代碼一起返回給客戶(hù)。插入的
Java
程序段可以操作
數(shù)據(jù)庫(kù)
、重新定向網(wǎng)頁(yè)等,以實(shí)現(xiàn)建立動(dòng)態(tài)網(wǎng)頁(yè)所需要的功能。 JSP與Java?
Servlet
一樣,是在服務(wù)器端執(zhí)行的,通常返回給客戶(hù)端的就是一個(gè)HTML文本,因此客戶(hù)端只要有瀏覽器就能瀏覽[5]。 JSP頁(yè)面由HTML代碼和嵌入其中的Java代碼所組成。服務(wù)器在頁(yè)面被客戶(hù)端請(qǐng)求以后對(duì)這些Java代碼進(jìn)行處理,然后將生成的HTML頁(yè)面返回給客戶(hù)端的瀏覽器。
Java Servlet
?是JSP的技術(shù)基礎(chǔ),而且大型的Web應(yīng)用程序的開(kāi)發(fā)需要Java Servlet和JSP配合才能完成。JSP具備了Java技術(shù)的簡(jiǎn)單易用,完全的
面向?qū)ο?/p>
,具有平臺(tái)無(wú)關(guān)性且安全可靠,主要面向
因特網(wǎng)
的所有特點(diǎn)。 自JSP推出后,眾多大公司都支持JSP技術(shù)的服務(wù)器,如
IBM
、
Oracle
、
Bea
公司等,所以JSP迅速成為商業(yè)應(yīng)用的服務(wù)器端語(yǔ)言。 2.2.1 JSP技術(shù)的強(qiáng)勢(shì) 一次編寫(xiě),到處運(yùn)行。除了系統(tǒng)之外,代碼不用做任何更改。系統(tǒng)的多平臺(tái)支持?;旧峡梢栽谒衅脚_(tái)上的任意環(huán)境中開(kāi)發(fā),在任意環(huán)境中進(jìn)行系統(tǒng)部署,在任意環(huán)境中擴(kuò)展。相比
ASP
/
PHP
的局限性是顯而易見(jiàn)的。強(qiáng)大的可伸縮性。從只有一個(gè)小的
Jar
文件就可以運(yùn)行Servlet/JSP,到由多臺(tái)服務(wù)器進(jìn)行集群和負(fù)載均衡,到多臺(tái)Application進(jìn)行事務(wù)處理,消息處理,一臺(tái)服務(wù)器到無(wú)數(shù)臺(tái)服務(wù)器,Java顯示了一個(gè)巨大的生命力。多樣化和功能強(qiáng)大的開(kāi)發(fā)工具支持。這一點(diǎn)與ASP很像,Java已經(jīng)有了許多非常優(yōu)秀的開(kāi)發(fā)工具,而且許多可以免費(fèi)得到,并且其中許多已經(jīng)可以順利的運(yùn)行于多種平臺(tái)之下。支持服務(wù)器端組件。web應(yīng)用需要強(qiáng)大的服務(wù)器端組件來(lái)支持,開(kāi)發(fā)人員需要利用其他工具設(shè)計(jì)實(shí)現(xiàn)復(fù)雜功能的組件供web頁(yè)面調(diào)用,以增強(qiáng)系統(tǒng)性能。JSP可以使用成熟的JAVA BEANS 組件來(lái)實(shí)現(xiàn)復(fù)雜商務(wù)功能。
2.2.2 JSP技術(shù)的弱勢(shì) 與ASP一樣,Java的一些優(yōu)勢(shì)正是它致命的問(wèn)題所在。正是由于為了跨平臺(tái)的功能,為了極度的伸縮能力,所以極大的增加了產(chǎn)品的復(fù)雜性。Java的運(yùn)行速度是用class常駐內(nèi)存來(lái)完成的,所以它在一些情況下所使用的內(nèi)存比起用戶(hù)數(shù)量來(lái)說(shuō)確實(shí)是“最低性能價(jià)格比”了。從另一方面,它還需要硬盤(pán)空間來(lái)儲(chǔ)存一系列的.java文件和.class文件,以及對(duì)應(yīng)的版本文件。
2.3 SQL Server 2000數(shù)據(jù)庫(kù) SQL Server 2000 是Microsoft 公司推出的SQL Server 數(shù)據(jù)庫(kù)管理系統(tǒng)的一個(gè)版本。該版本繼承了SQL Server 7.0 版本的優(yōu)點(diǎn)同時(shí)又比它增加了許多更先進(jìn)的功能,具有使用方便,可伸縮性好與相關(guān)軟件集成程度高等優(yōu)點(diǎn),可跨越從運(yùn)行Microsoft Windows 98 的膝上型電腦到運(yùn)行Microsoft Windows 2000 的大型多處理器的服務(wù)器等多種平臺(tái)使用。 SQL Server 2000 系統(tǒng)之間之所以成為目前流行的大型商用數(shù)據(jù)庫(kù)系統(tǒng),有著其深刻的內(nèi)在因素,這與它鮮明的特點(diǎn)是分不開(kāi)的: ①與Internet 的高度集成。 SQL Server 2000與其它Microsoft Back Office產(chǎn)品緊密集成,在安全、事件瀏覽、Windows NT服務(wù)程序、性能監(jiān)視器、多處理器支持、索引服務(wù)器等方面充分利用了它們的長(zhǎng)處,形成了自己獨(dú)特的優(yōu)勢(shì)。 ②高伸縮性和適應(yīng)性。 同一SQL Server 2000數(shù)據(jù)庫(kù)引擎運(yùn)行在Windows 2000 Professional、Windows 2000 Server、Windows 2000 Advanced Server、Windows 98和Windows Millennium Edition上。還運(yùn)行在Windows NT 4.0版的所有版本上。此數(shù)據(jù)庫(kù)引擎是一個(gè)功能強(qiáng)健的服務(wù)器,可管理供上千用戶(hù)訪問(wèn)的TB數(shù)據(jù)庫(kù)。同時(shí),當(dāng)以默認(rèn)設(shè)置運(yùn)行時(shí),SQL Server 2000還具有動(dòng)態(tài)自調(diào)整等功能,這使得它可以有效地運(yùn)行在便攜式電腦和臺(tái)式機(jī)中,用戶(hù)無(wú)需承擔(dān)管理任務(wù)。SQL Server 2000 Windows CE版將SQL Server 2000程序設(shè)計(jì)模型擴(kuò)展到移動(dòng)的Windows CE設(shè)備上,并且可以很容易地集成到SQL Server 2000環(huán)境中。 ③企業(yè)級(jí)數(shù)據(jù)庫(kù)功能強(qiáng)。 SQL Server 2000關(guān)系數(shù)據(jù)庫(kù)引擎支持當(dāng)今苛刻的數(shù)據(jù)處理環(huán)境所需的功能。數(shù)據(jù)庫(kù)引擎充分保護(hù)資料完整性,同時(shí)將管理上千個(gè)并發(fā)修改數(shù)據(jù)庫(kù)的用戶(hù)的開(kāi)銷(xiāo)減到最小。SQL Server 2000分布式查詢(xún)使您得以引用來(lái)自不同資料源的資料,就好象這些資料是SQL Server 2000數(shù)據(jù)庫(kù)的一部分,同時(shí)分布式事務(wù)支持充分保護(hù)任何分布式資料更新的完整性。復(fù)制同樣使您得以維護(hù)多個(gè)資料復(fù)本,同時(shí)確保單獨(dú)的資料復(fù)本保持同步。可將一組資料復(fù)制到多個(gè)移動(dòng)的脫接用戶(hù),使這些用戶(hù)自主地工作,然后將他們所做的修改合并回發(fā)布服務(wù)器。 ④易于安裝和使用。 SQL Server 2000中包括一系列管理和開(kāi)發(fā)工具,這些工具可改進(jìn)在多個(gè)站點(diǎn)上安裝、部署、管理和使用SQL Server的過(guò)程。SQL Server 2000還支持基于標(biāo)準(zhǔn)的、與Windows DNA集成的程序設(shè)計(jì)模型,使SQL Server 2000數(shù)據(jù)庫(kù)和資料倉(cāng)庫(kù)的使用成為生成強(qiáng)大的可伸縮系統(tǒng)的無(wú)縫部分。 ⑤具有決策支持的資料倉(cāng)庫(kù)。 SQL Server 2000提供了數(shù)據(jù)轉(zhuǎn)換服務(wù)、聯(lián)機(jī)分析處理(OLAP)、數(shù)據(jù)挖掘支持、English Query、Meta Data Services等等工具,以便對(duì)數(shù)進(jìn)行析取、分析匯總資料并對(duì)數(shù)據(jù)庫(kù)的設(shè)計(jì)提供幫助。 2.4 JDBC數(shù)據(jù)庫(kù)連接 JDBC(Java DataBase Connectivity)稱(chēng)為Java數(shù)據(jù)庫(kù)連接,它是一種用于數(shù)據(jù)庫(kù)訪問(wèn)的應(yīng)用程序API,由一組用Java語(yǔ)言編寫(xiě)的類(lèi)和接口組成。JDBC為數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)人員、數(shù)據(jù)庫(kù)前臺(tái)工具開(kāi)發(fā)人員提供了一個(gè)標(biāo)準(zhǔn)的API,使他們能夠用純Java API來(lái)編寫(xiě)數(shù)據(jù)庫(kù)應(yīng)用程序。 JDBC定義了Java語(yǔ)言同SQL數(shù)據(jù)之間的程序設(shè)計(jì)接口。JDBC有一個(gè)非常獨(dú)特的動(dòng)態(tài)連接結(jié)構(gòu),它使得系統(tǒng)模塊化。使用JDBC來(lái)完成對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)包括以下四個(gè)主要組件:Java的應(yīng)用程序、JDBC驅(qū)動(dòng)器管理器、驅(qū)動(dòng)器和數(shù)據(jù)源。簡(jiǎn)單地說(shuō),JDBC可做三件事:與數(shù)據(jù)庫(kù)建立連接、發(fā)送SQL語(yǔ)句,處理結(jié)果。 2.4.1 JDBC接口 一般來(lái)說(shuō),JDBC API中有兩層接口:應(yīng)用程序?qū)樱_(kāi)發(fā)人員用API通過(guò)SQL調(diào)用數(shù)據(jù)庫(kù)和取得結(jié)果;驅(qū)動(dòng)程序?qū)?,處理與具體驅(qū)動(dòng)程序版本的所有通訊。 JDBC API是一系列抽象的接口,應(yīng)用程序開(kāi)發(fā)人員通過(guò)它可以編寫(xiě)訪問(wèn)數(shù)據(jù)庫(kù)的Java應(yīng)用程序。JDBC API中,抽象類(lèi)的實(shí)現(xiàn)是由驅(qū)動(dòng)程序開(kāi)發(fā)商提供的。驅(qū)動(dòng)程序?qū)崿F(xiàn)了應(yīng)用程序和某個(gè)數(shù)據(jù)庫(kù)產(chǎn)品之間的接口,它的管理器則對(duì)應(yīng)用程序和驅(qū)動(dòng)程序之間的交互進(jìn)行控制。JDBC API主要用來(lái)連接數(shù)據(jù)庫(kù)和直接調(diào)用SQL命令,執(zhí)行各種SQL語(yǔ)句。利用JDBC API可以執(zhí)行一般的SQL語(yǔ)句、動(dòng)態(tài)SQL語(yǔ)句,以及帶IN和OUT參數(shù)的存儲(chǔ)過(guò)程。 JDBC API是一個(gè)標(biāo)準(zhǔn)統(tǒng)一的SQL數(shù)據(jù)存取接口,它為Java程序提供了一個(gè)統(tǒng)一無(wú)縫地操作各種數(shù)據(jù)庫(kù)的接口,程序員編程時(shí),可以不關(guān)心它所要操作的數(shù)據(jù)庫(kù)是哪個(gè)廠家的產(chǎn)品,從而提高了軟件的通用性。而且在Internet上確實(shí)無(wú)法預(yù)料你的用戶(hù)想訪問(wèn)什么類(lèi)型的數(shù)據(jù)庫(kù),只要系統(tǒng)上安裝了正確的驅(qū)動(dòng)器組,JDBC應(yīng)用程序就可以訪問(wèn)其相關(guān)的數(shù)據(jù)庫(kù)。您只需用JDBC API寫(xiě)一個(gè)程序就夠了,它可向相應(yīng)數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句。而且,使用Java編程語(yǔ)言編寫(xiě)的應(yīng)用程序,就無(wú)須去憂慮要為不同的平臺(tái)編寫(xiě)不同的應(yīng)用程序。將Java和JDBC結(jié)合起來(lái)將使程序員只需寫(xiě)一遍程序就可讓它在任何平臺(tái)上運(yùn)行。 2.4.2 JDBC的驅(qū)動(dòng)程序 JDBC的數(shù)據(jù)庫(kù)訪問(wèn)要通過(guò)JDBC驅(qū)動(dòng)程序來(lái)完成,JDBC驅(qū)動(dòng)程序是Java應(yīng)用程序與物理數(shù)據(jù)庫(kù)之間橋梁。JDBC驅(qū)動(dòng)程序可以分為下面四種類(lèi)型,分別適用于不同的場(chǎng)合[6]。 JDBC-ODBC橋驅(qū)動(dòng)程序
這類(lèi)驅(qū)動(dòng)程序負(fù)責(zé)將JDBC轉(zhuǎn)換為ODBC,然后通過(guò)JDBC-ODBC的方法調(diào)用ODBC驅(qū)動(dòng)程序來(lái)存取數(shù)據(jù)庫(kù)。本機(jī)應(yīng)用編程接口的JDBC驅(qū)動(dòng)程序
這類(lèi)驅(qū)動(dòng)程序部分采用Java語(yǔ)言編寫(xiě),部分采用本地代碼編寫(xiě)。這種JDBC驅(qū)動(dòng)會(huì)將客戶(hù)機(jī)的JDBC調(diào)用轉(zhuǎn)換為對(duì)特定數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序的調(diào)用,進(jìn)而存取數(shù)據(jù)庫(kù),因此必須先在客戶(hù)機(jī)上安裝好特定的數(shù)據(jù)庫(kù)的數(shù)據(jù)訪問(wèn)驅(qū)動(dòng)庫(kù)才能使用。數(shù)據(jù)庫(kù)中間件的純JDBC驅(qū)動(dòng)程序
這種類(lèi)型的驅(qū)動(dòng)程序把客戶(hù)端的JDBC調(diào)用轉(zhuǎn)換為一種獨(dú)立于特定數(shù)據(jù)庫(kù)的協(xié)議,然后將數(shù)據(jù)庫(kù)訪問(wèn)請(qǐng)求傳輸給服務(wù)器組件,最后該服務(wù)器組件將訪問(wèn)請(qǐng)求轉(zhuǎn)換為特定數(shù)據(jù)庫(kù)的協(xié)議。直接連接數(shù)據(jù)庫(kù)的純JDBC驅(qū)動(dòng)程序
這種類(lèi)型的驅(qū)動(dòng)程序可以將客戶(hù)端的JDBC請(qǐng)求直接轉(zhuǎn)換成特定數(shù)據(jù)庫(kù)的協(xié)議,所有存取數(shù)據(jù)庫(kù)的操作,都直接由驅(qū)動(dòng)程序來(lái)完成。? 2.5 TOMCAT應(yīng)用服務(wù)器 Tomcat是Apache 軟件基金會(huì)(Apache Software Foundation)的Jakarta 項(xiàng)目中的一個(gè)核心項(xiàng)目,由Apache、Sun 和其他一些公司及個(gè)人共同開(kāi)發(fā)而成。由于有了Sun 的參與和支持,最新的Servlet 和JSP 規(guī)范總是能在Tomcat 中得到體現(xiàn),Tomcat 5 支持最新的Servlet 2.4 和JSP 2.0 規(guī)范。因?yàn)門(mén)omcat 技術(shù)先進(jìn)、性能穩(wěn)定,而且免費(fèi),因而深受Java 愛(ài)好者的喜愛(ài)并得到了部分軟件開(kāi)發(fā)商的認(rèn)可,成為目前比較流行的Web 應(yīng)用服務(wù)器。 Tomcat 很受廣大程序員的喜歡,因?yàn)樗\(yùn)行時(shí)占用的系統(tǒng)資源小,擴(kuò)展性好,支持負(fù)載平衡與郵件服務(wù)等開(kāi)發(fā)應(yīng)用系統(tǒng)常用的功能;而且它還在不斷的改進(jìn)和完善中,任何一個(gè)感興趣的程序員都可以更改它或在其中加入新的功能。 Tomcat 是一個(gè)小型的輕量級(jí)應(yīng)用服務(wù)器,在中小型系統(tǒng)和并發(fā)訪問(wèn)用戶(hù)不是很多的場(chǎng)合下被普遍使用,是開(kāi)發(fā)和調(diào)試JSP 程序的首選。對(duì)于一個(gè)初學(xué)者來(lái)說(shuō),可以這樣認(rèn)為,當(dāng)在一臺(tái)機(jī)器上配置好Apache 服務(wù)器,可利用它響應(yīng)對(duì)HTML 頁(yè)面的訪問(wèn)請(qǐng)求。實(shí)際上Tomcat 部分是Apache 服務(wù)器的擴(kuò)展,但它是獨(dú)立運(yùn)行的,所以當(dāng)你運(yùn)行tomcat 時(shí),它實(shí)際上作為一個(gè)與Apache 獨(dú)立的進(jìn)程單獨(dú)運(yùn)行的。 在Tomcat中,應(yīng)用程序的部署很簡(jiǎn)單,你只需將你的WAR放到Tomcat的webapps目錄下,Tomcat會(huì)自動(dòng)檢測(cè)到這個(gè)文件,并將其解壓。你在瀏覽器中訪問(wèn)這個(gè)應(yīng)用的Jsp時(shí),通常第一次會(huì)很慢,因?yàn)門(mén)omcat要將Jsp轉(zhuǎn)化為Servlet文件,然后編譯。編譯以后,訪問(wèn)將會(huì)很快。另外Tomcat也提供了一個(gè)應(yīng)用:manager,訪問(wèn)這個(gè)應(yīng)用需要用戶(hù)名和密碼,用戶(hù)名和密碼存儲(chǔ)在一個(gè)xml文件中。通過(guò)這個(gè)應(yīng)用,輔助于Ftp,你可以在遠(yuǎn)程通過(guò)Web部署和撤銷(xiāo)應(yīng)用,當(dāng)然本地也可以。Tomcat不僅僅是一個(gè)Servlet容器,它也具有傳統(tǒng)的Web服務(wù)器的功能:處理Html頁(yè)面。但是與Apache相比,它的處理靜態(tài)Html的能力就不如Apache。我們可以將Tomcat和Apache集成到一塊,讓Apache處理靜態(tài)Html,而Tomcat處理Jsp和Servlet。這種集成只需要修改一下Apache和Tomcat的配置文件即可。 第3章 需求分析 3.1 系統(tǒng)功能描述 該系統(tǒng)是用于用戶(hù)對(duì)電子書(shū)的租借和相互交流,運(yùn)營(yíng)者可以管理此平臺(tái)盈利,是一個(gè)基于在線閱讀的平臺(tái),怎樣可以方便管理者的管理并實(shí)現(xiàn)盈利,方便用戶(hù)的使用,提供搜索和租借功能并且提供一個(gè)給用戶(hù)的交流平臺(tái)是研究的主要內(nèi)容。重點(diǎn)在于對(duì)訪問(wèn)該系統(tǒng)的身份進(jìn)行基于角色的識(shí)別,使系統(tǒng)可以允許三種不同的角色進(jìn)行訪問(wèn),即游客、會(huì)員、管理員,并賦予他們不同的訪問(wèn)權(quán)限。 3.1.1 用戶(hù)及主要操作功能 游客可以瀏覽網(wǎng)站的主頁(yè),但是需要注冊(cè)為會(huì)員后才能對(duì)電子書(shū)進(jìn)免費(fèi)行閱讀或租借。會(huì)員登錄需要輸入帳號(hào)和密碼信息,每個(gè)會(huì)員的帳號(hào)下都會(huì)對(duì)應(yīng)有相關(guān)的個(gè)人信息,如個(gè)人郵箱,地址等,不同的會(huì)員等級(jí)在租借圖書(shū)時(shí)會(huì)有不同的待遇。以管理員身份登錄也需要輸入賬號(hào)和密碼,可以管理會(huì)員信息,添加公告,管理留言板等,管理員的角色在該系統(tǒng)中擁有最高的權(quán)限。 3.1.2 系統(tǒng)角色管理模塊 包括系統(tǒng)管理員模塊和會(huì)員模塊 在會(huì)員模塊,作為會(huì)員,可以查看個(gè)人的信息,修改自己的密碼;作為管理員可以查看,管理,刪除會(huì)員信息。?在管理員模塊,可以添加、刪除管理員,管理員可以修改自己的密碼。
3.1.3 電子書(shū)管理模塊 電子書(shū)管理模塊包括不同電子書(shū)類(lèi)別的添加,刪除以及電子書(shū)的上傳,刪除管理。 電子書(shū)類(lèi)別的添加是由管理員進(jìn)行的,可以包括武俠小書(shū),都市言情,穿越小書(shū)等各個(gè)類(lèi)別。按照付費(fèi)與否可以添加免費(fèi)和付費(fèi)兩種類(lèi)別,當(dāng)然這和前一種分類(lèi)方式并不沖突。各類(lèi)電子書(shū)由管理員上傳,上傳時(shí)如果是付費(fèi)電子書(shū),可以設(shè)置下載此電子書(shū)是所需費(fèi)用。對(duì)于一些過(guò)時(shí),或人氣不高的電子書(shū),系統(tǒng)管理員可以進(jìn)行刪除操作。
3.1.4 公告模塊 公告模塊主要包括了公告的發(fā)布、編輯、刪除和瀏覽;公告的發(fā)布、編輯和刪除只能由管理員來(lái)進(jìn)行。 3.2 系統(tǒng)性能需求分析 電子書(shū)租賃下載系統(tǒng)是對(duì)廣大讀書(shū)愛(ài)好者設(shè)計(jì)的一個(gè)系統(tǒng),提供給讀者一個(gè)尋找讀物的平臺(tái),因此必須方便用戶(hù)的注冊(cè),搜索和下載等功能,并提供一個(gè)交流平臺(tái)。系統(tǒng)應(yīng)該具有開(kāi)放性和可靠性,同時(shí)又要方便進(jìn)行操作和維護(hù)。 3.3 開(kāi)發(fā)環(huán)境及開(kāi)發(fā)工具 操作系統(tǒng):Windows XP SP3; 語(yǔ)言選擇:JSP 、JavaScript; 數(shù)據(jù)庫(kù)選擇:SQL Server 2000; 主要開(kāi)發(fā)工具:Dreamweaver CS3、Eclipse 3.4; Web應(yīng)用服務(wù)器:Tomcat 5.5。 第4章 概要設(shè)計(jì) 本章詳細(xì)的介紹了本系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn),包括系統(tǒng)功能模塊的設(shè)計(jì)和數(shù)據(jù)庫(kù)的設(shè)計(jì),系統(tǒng)功能模塊設(shè)計(jì)主要介紹了系統(tǒng)的功能和各功能實(shí)現(xiàn)的流程,數(shù)據(jù)庫(kù)設(shè)計(jì)主要介紹了數(shù)據(jù)庫(kù)表的設(shè)計(jì)和各字段的意義。 4.1 系統(tǒng)的體系結(jié)構(gòu) 結(jié)構(gòu)設(shè)計(jì)是系統(tǒng)設(shè)計(jì)的關(guān)鍵,結(jié)構(gòu)是整個(gè)系統(tǒng)的骨架,將對(duì)系統(tǒng)的性能起決定性的作用,采用如圖4-1所示的結(jié)構(gòu)模式。圖中客戶(hù)端可分別為:管理員、游客、和會(huì)員三種角色。 4.2 系統(tǒng)功能結(jié)構(gòu)設(shè)計(jì) 系統(tǒng)功能框圖如圖4-2所示。 電子書(shū)租賃下載系統(tǒng)包括了用戶(hù)登錄模塊和匿名模塊,在用戶(hù)登錄模塊中角色分為管理員和會(huì)員三種角色。管理員可以對(duì)用戶(hù)進(jìn)行管理,可以建立數(shù)目類(lèi)別,上傳電子書(shū),公告的編輯和發(fā)布;會(huì)員可以瀏覽系統(tǒng)公告、電子書(shū)信息,可以同其他會(huì)員進(jìn)行交流。 圖4-2 系統(tǒng)功能結(jié)構(gòu)圖 4.2.1 管理員模塊 本模塊包括會(huì)員管理、公告管理和書(shū)籍管理三部分。具體功能結(jié)構(gòu)分析如圖4-3所示。 4.2.2 會(huì)員模塊 本模塊包括信息管理,點(diǎn)券充值,書(shū)籍搜索三部分,具體的功能結(jié)構(gòu)如圖4-4所示。 信息管理 4-4 會(huì)員模塊結(jié)構(gòu)圖 4.3 系統(tǒng)流程圖 4.3.1 會(huì)員管理? 會(huì)員管理包括對(duì)公司新近員的信息進(jìn)行查看和刪除等操作。還有對(duì)點(diǎn)券充值的確認(rèn)。 刪除會(huì)員
首先查看會(huì)員的信息,查看的會(huì)員的信息必須在庫(kù)里存在,如果有即可找到,如果沒(méi)有就不能看到。當(dāng)找到相應(yīng)的記錄后就會(huì)顯示出來(lái),然后對(duì)會(huì)員信息進(jìn)行刪除,刪除完成該會(huì)員的信息就不存在數(shù)據(jù)庫(kù)中。 具體的操作流程如圖4-5所示。 圖4-5 刪除會(huì)員流程圖 4.3.2 公告管理 系統(tǒng)公告的管理由管理員來(lái)進(jìn)行管理,系統(tǒng)公告發(fā)布后所有人都可以看見(jiàn),系統(tǒng)公告的數(shù)據(jù)表(newsinfo),所有公司公告的相關(guān)操作均在本表了進(jìn)行操作。 4.4 數(shù)據(jù)庫(kù)設(shè)計(jì) 數(shù)據(jù)庫(kù)設(shè)計(jì)是系統(tǒng)設(shè)計(jì)中非常重要的環(huán)節(jié)。數(shù)據(jù)庫(kù)設(shè)計(jì)是整個(gè)系統(tǒng)的根基,如果設(shè)計(jì)不好,在后來(lái)的系統(tǒng)維護(hù)、變更和功能擴(kuò)充時(shí),甚至在系統(tǒng)開(kāi)發(fā)過(guò)程中,將會(huì)引起比較大的問(wèn)題,有時(shí)將會(huì)重新進(jìn)行大量的工作。 創(chuàng)建數(shù)據(jù)庫(kù): 數(shù)據(jù)庫(kù)名:manage(軟件項(xiàng)目團(tuán)隊(duì)管理系統(tǒng)) 本系統(tǒng)中一共用到了以下幾個(gè)數(shù)據(jù)表: 電子書(shū)類(lèi)別表(t_catelog):存儲(chǔ)電子書(shū)類(lèi)別信息,具體為表4-1所示。
表4-1 電子書(shū)類(lèi)別表(t_catelog)名稱(chēng)別名類(lèi)型長(zhǎng)度(字符)1id編號(hào)Int42name類(lèi)別名稱(chēng)Varchar503jieshao類(lèi)別介紹Varchar5000電子書(shū)表(t_book):用于存放電子書(shū)信息,具體如表4-2所示。
表4-2 電子書(shū)信息表(t_book)名稱(chēng)別名類(lèi)型長(zhǎng)度(字符)1id編號(hào)Int42catalog_id類(lèi)別編號(hào)Int503name名稱(chēng)Varchar504zuozhe作者Varchar505shifoumianfei是否免費(fèi)Varchar506dianquan下載所需點(diǎn)券Varchar507daxiao大小Varchar508jieshao介紹Varchar509mianfeizhangjie免費(fèi)試讀Varchar5010fujian附件Varchar50會(huì)員信息表 (t_user):記錄會(huì)員信息,具體如表4-3所示。
表4-3 會(huì)員信息表(t_user)名稱(chēng)別名類(lèi)型長(zhǎng)度(字符)1id編號(hào)Int42loginname登錄帳號(hào)Varchar503loginpw登錄密碼Varchar504name姓名Varchar505sex性別Varchar506age年齡Varchar507address住址Varchar508tel聯(lián)系方式Varchar509email郵箱Varchar5010dianquan擁有點(diǎn)券值Int4充值表(t_chongzhi):用來(lái)存放會(huì)員充值信息,具體設(shè)計(jì)如表4-4所示。
表4-4 充值表(t_chongzhi)名稱(chēng)別名類(lèi)型長(zhǎng)度(字符)1id編號(hào)Int42user_id會(huì)員編號(hào)Int43jine充值金額Int44fukuanfangshi付款方式Varchar505shijian充值時(shí)間Varchar506zhuangtai審核狀態(tài)Varchar50留言表(t_liuyan):用來(lái)存放所有的留言信息,具體設(shè)計(jì)如表4-5所示。
表4-5 留言表(t_liuyan)名稱(chēng)別名類(lèi)型長(zhǎng)度(字符)1id編號(hào)Int42title標(biāo)題Varchar503content內(nèi)容Varchar504shijian留言時(shí)間Varchar505user_id會(huì)員編號(hào)Int4公告表(t-gonggao):用來(lái)存放公告信息,具體設(shè)計(jì)如表4-6所示。
表4-6 公告表(t_gonggao)名稱(chēng)別名類(lèi)型長(zhǎng)度(字符)1id編號(hào)Int42title標(biāo)題Varchar503content內(nèi)容Varchar504shijian留言時(shí)間Varchar50系統(tǒng)管理員表(t_admin):用來(lái)存放管理員信息,具體設(shè)計(jì)如表4-7所示。
表4-7 管理員表(t_admin) 名稱(chēng)別名類(lèi)型長(zhǎng)度(字符)1userId編號(hào)Int42userName帳號(hào)Varchar503userPw密碼Varchar50第5章 詳細(xì)設(shè)計(jì) 本章介紹的是軟件項(xiàng)目團(tuán)隊(duì)管理系統(tǒng)的詳細(xì)功能,包括了頁(yè)面的設(shè)計(jì)以及程序的設(shè)計(jì)。 5.1 公告管理模塊 公告管理包括了公告的發(fā)布、管理和瀏覽,下面介紹這些功能。 5.1.1 瀏覽公告 瀏覽公告是前臺(tái)頁(yè)面的功能,只要登錄網(wǎng)站主頁(yè)即可進(jìn)行公告的瀏覽,在主頁(yè)上顯示最新的幾條公告。 圖5-1為主頁(yè)顯示的部分公告頁(yè)面:
下面為公告模板的核心代碼。 List gonggaoList=new ArrayList();String sql="select * from t_gonggao order by id desc";Object[] params={};DB mydb=new DB();try{mydb.doPstm(sql, params);ResultSet rs=mydb.getRs();while(rs.next()){Tgonggao gonggao=new Tgonggao();gonggao.setId(rs.getString("id"));gonggao.setTitle(rs.getString("title"));gonggao.setContent(rs.getString("content"));gonggao.setShijian(rs.getString("shijian"));gonggaoList.add(gonggao); }rs.close();}catch(Exception e){e.printStackTrace();}mydb.closed(); 圖5-3為某條公告的顯示頁(yè)面:
5.1.2 發(fā)布公告 發(fā)布公告是由管理員來(lái)進(jìn)行的操作,只有管理員有權(quán)限進(jìn)行公告的發(fā)布及修改、刪除,其他人只能夠進(jìn)行瀏覽,而管理員進(jìn)行公告發(fā)布之前需要進(jìn)行登錄,登錄界面如圖5-5所示:
在登陸進(jìn)入管理頁(yè)面之后,就可以進(jìn)行公告的發(fā)布,管理員進(jìn)入管理頁(yè)面之后可以進(jìn)行很多操作,而公告的發(fā)布與管理只是管理員眾多工作之一,圖5-6為管理員登陸后的界面:
5.1.3 管理公告 公告發(fā)布后要及時(shí)對(duì)公告進(jìn)行管理,管理界面如圖5-7所示:
以下公告管理的核心代碼: public void gonggaoAdd(HttpServletRequest req,HttpServletResponse res){String id=String.valueOf(new Date().getTime());String title=req.getParameter("title");String content=req.getParameter("content");String shijian=new Date().toLocaleString();String sql="insert into t_gonggao values(?,?,?,?)";Object[] params={id,title,content,shijian};DB mydb=new DB();mydb.doPstm(sql, params);mydb.closed();req.setAttribute("message", "操作成功");req.setAttribute("path", "gonggao?type=gonggaoMana"); String targetURL = "/common/success.jsp";dispatch(targetURL, req, res);}public void gonggaoDel(HttpServletRequest req,HttpServletResponse res){String id=req.getParameter("id");String sql="delete from t_gonggao where id=?";Object[] params={id};DB mydb=new DB();mydb.doPstm(sql, params);mydb.closed();req.setAttribute("message", "操作成功");req.setAttribute("path", "gonggao?type=gonggaoMana"); String targetURL = "/common/success.jsp";dispatch(targetURL, req, res);}public void gonggaoMana(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException{List gonggaoList=new ArrayList();String sql="select * from t_gonggao";Object[] params={};DB mydb=new DB();try{mydb.doPstm(sql, params);ResultSet rs=mydb.getRs();while(rs.next()){Tgonggao gonggao=new Tgonggao();gonggao.setId(rs.getString("id"));gonggao.setTitle(rs.getString("title"));gonggao.setContent(rs.getString("content"));gonggao.setShijian(rs.getString("shijian"));gonggaoList.add(gonggao); }rs.close();}catch(Exception e){e.printStackTrace();}mydb.closed();req.setAttribute("gonggaoList", gonggaoList);req.getRequestDispatcher("admin/gonggao/gonggaoMana.jsp").forward(req, res);} 5.2 會(huì)員模塊 會(huì)員模塊包括會(huì)員注冊(cè),搜索租借和點(diǎn)券的充值。 5.2.1 會(huì)員注冊(cè) 首先介紹會(huì)員信息的注冊(cè),具體界面如圖5-9所示:
會(huì)員信息的注冊(cè)有一定的限制條件,用戶(hù)名必填項(xiàng),年齡必須為數(shù)字,密碼輸入兩次必須一致,否則會(huì)提示出錯(cuò)。 會(huì)員注冊(cè)的核心代碼如下: 圖5-9 會(huì)員注冊(cè)界面 public void userReg(HttpServletRequest req,HttpServletResponse res){String id=String.valueOf(new Date().getTime());String loginname=req.getParameter("loginname");String loginpw=req.getParameter("loginpw");String name=req.getParameter("name");String sex=req.getParameter("sex");String age=req.getParameter("age");String address=req.getParameter("address");String tel=req.getParameter("tel");String email=req.getParameter("email");String qq=req.getParameter("qq");int dianquan=0;String del="no";String sql="insert into t_user values(?,?,?,?,?,?,?,?,?,?,?,?)";Object[] params={id,loginname,loginpw,name,sex,age,address,tel,email,qq,dianquan,del};DB mydb=new DB();mydb.doPstm(sql, params);mydb.closed(); String targetURL = "/common/add_success.jsp";dispatch(targetURL, req, res);} 5.2.2 點(diǎn)券充值 點(diǎn)券充值應(yīng)為條件限制,不能做到與付費(fèi)接口的連接,再此只做模擬,點(diǎn)券充值后需由管理員來(lái)確認(rèn)。具體界面如圖5-10所示:
點(diǎn)券充值的核心代碼如下: public void chongzhiAdd(HttpServletRequest req,HttpServletResponse res){String user_id=req.getParameter("user_id");int jine=Integer.parseInt(req.getParameter("jine"));String fukuanfangshi=req.getParameter("fukuanfangshi");String shijian=new Date().toLocaleString();String zhuangtai="a";String sql="insert into t_chongzhi values(?,?,?,?,?)";Object[] params={user_id,jine,fukuanfangshi,shijian,zhuangtai};DB mydb=new DB();mydb.doPstm(sql, params);mydb.closed();req.setAttribute("msg", "申請(qǐng)成功。等待管理員審核");String targetURL = "/common/msg.jsp";dispatch(targetURL, req, res);}public void chongzhiMana(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException{List chongzhiList=new ArrayList();String sql="select * from t_chongzhi order by zhuangtai";Object[] params={};DB mydb=new DB();try{mydb.doPstm(sql, params);ResultSet rs=mydb.getRs();while(rs.next()){Tchongzhi chongzhi=new Tchongzhi();chongzhi.setId(rs.getInt("id"));chongzhi.setUser_id(rs.getString("user_id"));chongzhi.setJine(rs.getInt("jine"));chongzhi.setFukuanfangshi(rs.getString("fukuanfangshi"));chongzhi.setShijian(rs.getString("shijian"));chongzhi.setZhuangtai(rs.getString("zhuangtai"));chongzhiList.add(chongzhi); }rs.close();}catch(Exception e){e.printStackTrace();}mydb.closed();req.setAttribute("chongzhiList", chongzhiList);req.getRequestDispatcher("admin/chongzhi/chongzhiMana.jsp").forward(req, res);} 5.2.3 搜索和下載書(shū)籍 登錄到系統(tǒng)的會(huì)員,可以搜索自己喜愛(ài)的書(shū)籍, 可以按照書(shū)名搜索,也可以按照作者搜索, 如果有符合搜索條件的書(shū)籍,則會(huì)顯示在主頁(yè)面。 以下為搜索書(shū)籍的界面:
核心代碼如下: public void bookSearch(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException{List bookList=new ArrayList();String sql="select * from t_book where del='no' and name like '%"+req.getParameter("name").trim()+"%'"+" and zuozhe like '%"+req.getParameter("zuozhe").trim()+"%'";System.out.println(sql+"^^^^^");Object[] params={};DB mydb=new DB();try{mydb.doPstm(sql, params);ResultSet rs=mydb.getRs();while(rs.next()){Tbook book=new Tbook();book.setId(rs.getInt("id"));book.setCatelog_id(rs.getInt("catelog_id"));book.setName(rs.getString("name"));book.setShifoumianfei(rs.getString("shifoumianfei"));book.setDianquan(rs.getInt("dianquan"));book.setDaxiao(rs.getString("daxiao"));book.setJieshao(rs.getString("jieshao"));book.setMianfeizhangjie(rs.getString("mianfeizhangjie"));book.setFujian(rs.getString("fujian"));book.setFujianYuanshiming(rs.getString("fujianYuanshiming"));book.setFabushijian(rs.getString("fabushijian"));book.setDel(rs.getString("del"));book.setCatelog(liuService.getCatelog(rs.getInt("catelog_id")));bookList.add(book); }rs.close();}catch(Exception e){e.printStackTrace();}mydb.closed();req.setAttribute("bookList", bookList);req.getRequestDispatcher("qiantai/book/bookSearch.jsp").forward(req, res);} 下載書(shū)籍界面:
下載核心代碼: try { String fujianPath=request.getParameter("fujianPath"); String fujianYuashiMing=request.getParameter("fujianYuashiMing"); fujianYuashiMing=java.net.URLDecoder.decode(fujianYuashiMing,"UTF-8"); System.out.println(fujianYuashiMing+fujianPath); SmartUpload su = new SmartUpload(); // 新建一個(gè)SmartUpload對(duì)象 su.initialize(pageContext); // 初始化 su.setContentDisposition(null); // 設(shè)定contentDisposition為null以禁止瀏覽器自動(dòng)打開(kāi)文件, //保證點(diǎn)擊鏈接后是下載文件。若不設(shè)定,則下載的文件擴(kuò)展名為 //doc時(shí),瀏覽器將自動(dòng)用word打開(kāi)它。擴(kuò)展名為pdf時(shí),將用acrobat打開(kāi) //response.sendRedirect(path+"/updown/updown_err.jsp"); //su.downloadFile("/uploadPath/file/liu.doc"); // 下載英文文件 su.downloadFile(fujianPath, null, new String(fujianYuashiMing.getBytes(), "ISO8859-1")); // 下載中文文件 //downloadFile(String sourceFilePathName, String contentType, String destFileName) out.clear(); out=pageContext.pushBody(); } catch(Exception e) {%> alert("文件不存在。請(qǐng)聯(lián)系管理人員"); window.history.back(); <%} 5.3 書(shū)籍管理模塊 ,書(shū)籍管理模塊包括電子書(shū)類(lèi)別管理模塊和電子書(shū)的管理,由管理員來(lái)管理操作,可以添加和刪除相應(yīng)的電子書(shū)類(lèi)別,電子書(shū),下面詳細(xì)介紹各個(gè)功能。 5.3.1 電子書(shū)類(lèi)別的管理 電子書(shū)類(lèi)別的管理包括添加和刪除電子書(shū),界面如下圖所示。類(lèi)別建立時(shí),需要要確定好類(lèi)別的名稱(chēng):
設(shè)計(jì)界面如下: 核心代碼如下: public void catelogAdd(HttpServletRequest req,HttpServletResponse res){String name=req.getParameter("name");String jieshao=req.getParameter("jieshao");String del="no";String sql="insert into t_catelog values(?,?,?)";Object[] params={name,jieshao,del};DB mydb=new DB();mydb.doPstm(sql, params);mydb.closed();req.setAttribute("message", "操作成功");req.setAttribute("path", "catelog?type=catelogMana"); String targetURL = "/common/success.jsp";dispatch(targetURL, req, res);}public void catelogDel(HttpServletRequest req,HttpServletResponse res){String sql="update t_catelog set del='yes' where id="+Integer.parseInt(req.getParameter("id"));Object[] params={};DB mydb=new DB();mydb.doPstm(sql, params);mydb.closed();req.setAttribute("message", "操作成功");req.setAttribute("path", "catelog?type=catelogMana"); String targetURL = "/common/success.jsp";dispatch(targetURL, req, res);}public void catelogMana(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException{List catelogList=new ArrayList();String sql="select * from t_catelog where del='no'";Object[] params={};DB mydb=new DB();try{mydb.doPstm(sql, params);ResultSet rs=mydb.getRs();while(rs.next()){Tcatelog catelog=new Tcatelog();catelog.setId(rs.getInt("id"));catelog.setName(rs.getString("name"));catelog.setJieshao(rs.getString("jieshao"));catelogList.add(catelog); }rs.close();}catch(Exception e){e.printStackTrace();}mydb.closed();req.setAttribute("catelogList", catelogList);req.getRequestDispatcher("admin/catelog/catelogMana.jsp").forward(req, res);} 5.3.2 電子書(shū)管理 電子書(shū)的管理包括各個(gè)類(lèi)別中,電子書(shū)的上傳和已有電子書(shū)的刪除,上傳時(shí),有上傳類(lèi)別,付費(fèi)和免費(fèi)的選擇。 電子書(shū)管理的界面如圖所示:
5.3 留言版模塊 下面介紹的是會(huì)員之間的交流,每個(gè)會(huì)員可以在系統(tǒng)的留言版上進(jìn)行留言,而其他會(huì)員看到留言后可以與之進(jìn)行交流。留言版界面如下圖所示:
留言版代碼如下所示: public void liuyanAdd(HttpServletRequest req,HttpServletResponse res){String id=String.valueOf(new Date().getTime());String title=req.getParameter("title");String content=req.getParameter("content");String shijian=new Date().toLocaleString();String user_id="0";if(req.getSession().getAttribute("user")!=null){Tuser user=(Tuser)req.getSession().getAttribute("user");user_id=user.getId();}String sql="insert into t_liuyan values(?,?,?,?,?)";Object[] params={id,title,content,shijian,user_id};DB mydb=new DB();mydb.doPstm(sql, params);mydb.closed();req.setAttribute("message", "操作成功");req.setAttribute("path", "liuyan?type=liuyanAll"); String targetURL = "/common/success.jsp";dispatch(targetURL, req, res);}public void liuyanAll(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException{List liuyanList=new ArrayList();String sql="select * from t_liuyan";Object[] params={};DB mydb=new DB();try{mydb.doPstm(sql, params);ResultSet rs=mydb.getRs();while(rs.next()){Tliuyan liuyan=new Tliuyan();liuyan.setId(rs.getString("id"));liuyan.setTitle(rs.getString("title"));liuyan.setContent(rs.getString("content"));liuyan.setShijian(rs.getString("shijian"));liuyan.setUser_id(rs.getString("user_id"));liuyan.setUser_name(liuService.getUserName(rs.getString("user_id")));liuyanList.add(liuyan); }rs.close();}catch(Exception e){e.printStackTrace();}mydb.closed();req.setAttribute("liuyanList", liuyanList);req.getRequestDispatcher("qiantai/liuyan/liuyanAll.jsp").forward(req, res);} 5.4 通用模塊 5.4.1 登錄、修改個(gè)人信息及注銷(xiāo)退出 登錄是系統(tǒng)的每個(gè)角色都會(huì)進(jìn)行的,但是由于權(quán)限的不同所以登錄后的功能不同,但是每個(gè)人都有修改個(gè)人信息、修改密碼和注銷(xiāo)退出的功能。 由于此處的修改個(gè)人信息與管理員進(jìn)行修改沒(méi)有太大的區(qū)別,在此就不做詳細(xì)介紹,而修改密碼和注銷(xiāo)退出也是比較簡(jiǎn)單的功能,在此也就不再詳細(xì)介紹。 5.4.2 數(shù)據(jù)庫(kù)的連接接 本系統(tǒng)采用數(shù)據(jù)庫(kù)的連接是用了一個(gè)java包來(lái)進(jìn)行連接的,這樣方便了數(shù)據(jù)庫(kù)的管理。 在實(shí)現(xiàn)某一個(gè)功能時(shí),首先要連接數(shù)據(jù)庫(kù)。那么,如果我們?cè)诿恳淮芜M(jìn)行數(shù)據(jù)庫(kù)操作前都需要加載驅(qū)動(dòng)、創(chuàng)建連接,則這些操作可以封裝在一個(gè)數(shù)據(jù)庫(kù)操作類(lèi)中。這樣做有很大的優(yōu)點(diǎn),一旦系統(tǒng)移植、數(shù)據(jù)庫(kù)參數(shù)改變,則不需要重新修改所有的連接代碼并重新編譯,只要在這個(gè)封裝類(lèi)中改變其中的參數(shù)即可。我采用了如下代碼的一個(gè)類(lèi)來(lái)統(tǒng)一管理數(shù)據(jù)庫(kù)的連接: //數(shù)據(jù)庫(kù)連接封裝 public class DB{private Connection con;private PreparedStatement pstm;private String user = "sa";private String password = "sa";private String className = "net.sourceforge.jtds.jdbc.Driver";private String url = "jdbc:jtds:sqlserver://localhost:1433;DatabaseName=db_ebook";public DB(){try{Class.forName(className);} catch (ClassNotFoundException e){System.out.println("加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)失??!");e.printStackTrace();}}/** 創(chuàng)建數(shù)據(jù)庫(kù)連接 */public Connection getCon(){try{con = DriverManager.getConnection(url, user, password);} catch (SQLException e){System.out.println("創(chuàng)建數(shù)據(jù)庫(kù)連接失敗!");con = null;e.printStackTrace();}return con;}public void doPstm(String sql, Object[] params){if (sql != null && !sql.equals("")){if (params == null)params = new Object[0];getCon();if (con != null){try{System.out.println(sql);pstm = con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);for (int i = 0; i < params.length; i++){pstm.setObject(i + 1, params[i]);}pstm.execute();} catch (SQLException e){System.out.println("doPstm()方法出錯(cuò)!");e.printStackTrace();}}}}public ResultSet getRs() throws SQLException{return pstm.getResultSet();}public int getCount() throws SQLException{return pstm.getUpdateCount();}public void closed(){try{if (pstm != null)pstm.close();} catch (SQLException e){System.out.println("關(guān)閉pstm對(duì)象失??!");e.printStackTrace();}try{if (con != null){con.close();}} catch (SQLException e){System.out.println("關(guān)閉con對(duì)象失敗!");e.printStackTrace();}}} 以上就是數(shù)據(jù)庫(kù)的連接函數(shù),在jsp頁(yè)面中只需要引入這個(gè)包就可以,就不需要在每個(gè)頁(yè)面寫(xiě)數(shù)據(jù)庫(kù)的鏈接,大大的提高了工作的效率以及方便了編程。 5.5 小結(jié) 以上是對(duì)本系統(tǒng)做的詳細(xì)介紹,里面對(duì)各個(gè)模塊的功能和界面都做了比較詳細(xì)的介紹。雖然基本功能可以實(shí)現(xiàn),但是系統(tǒng)還是不夠完善,在以后的學(xué)習(xí)和生活中需要繼續(xù)對(duì)此系統(tǒng)進(jìn)行完善。 第6章 系統(tǒng)測(cè)試 所謂系統(tǒng)測(cè)試就是為了發(fā)現(xiàn)程序中的錯(cuò)誤而執(zhí)行程序的過(guò)程。具體地說(shuō),系統(tǒng)測(cè)試時(shí)根據(jù)系統(tǒng)開(kāi)發(fā)各階段的規(guī)格說(shuō)明和程序的內(nèi)部結(jié)構(gòu)而精心設(shè)計(jì)出一批測(cè)試用例,并利用測(cè)試來(lái)運(yùn)行程序,以發(fā)現(xiàn)程序錯(cuò)誤的過(guò)程。 系統(tǒng)測(cè)試是系統(tǒng)開(kāi)發(fā)周期中一個(gè)十分重要的活動(dòng)。盡管在系統(tǒng)開(kāi)發(fā)的各個(gè)階段均采用了嚴(yán)格的技術(shù)審查,但依然難免遺留下差錯(cuò),如果在投入運(yùn)行前的測(cè)試階段沒(méi)有被發(fā)現(xiàn)并糾正,問(wèn)題遲早會(huì)暴露出來(lái),到時(shí)再糾正錯(cuò)誤將要付出更大的代價(jià)[7]。 在經(jīng)過(guò)幾個(gè)月的開(kāi)發(fā)與設(shè)計(jì),軟件項(xiàng)目團(tuán)隊(duì)管理系統(tǒng)已經(jīng)實(shí)現(xiàn)了基本功能,具體的測(cè)試結(jié)果如下。 6.1 公告管理模塊 6.1.1 公告的瀏覽 經(jīng)過(guò)系統(tǒng)測(cè)試公告的瀏覽已能夠成功進(jìn)行,只要登錄網(wǎng)站的主頁(yè)就可以進(jìn)行公告的瀏覽,用戶(hù)可以看到公告的題目和發(fā)布時(shí)間。 6.1.2 公告的添加 公告的添加只能由管理員來(lái)進(jìn)行,經(jīng)過(guò)系統(tǒng)測(cè)試可以順利的進(jìn)行公告的添加,通過(guò)id號(hào)來(lái)確定公告不會(huì)重復(fù)出現(xiàn)。 6.1.3 公告的編輯、刪除 經(jīng)過(guò)系統(tǒng)測(cè)試,會(huì)員可以進(jìn)行對(duì)公告的瀏覽,管理員可以進(jìn)行公告的添加與刪除,管理員登錄后可以點(diǎn)擊公告管理來(lái)進(jìn)行公告的操作,在添加公告時(shí)點(diǎn)擊添加按鈕就可以進(jìn)行對(duì)公告的添加才操作了,每條公告后都有刪除按鈕,可以進(jìn)行刪除操作。 6.2 會(huì)員管理模塊 6.2.1 成員注冊(cè) 經(jīng)過(guò)測(cè)試,會(huì)員可以進(jìn)行注冊(cè)操作,用注冊(cè)的帳號(hào)可以成功登錄系統(tǒng)。 6.2.2 點(diǎn)券充值 會(huì)員登錄后,需要用點(diǎn)券來(lái)下載書(shū)籍,經(jīng)過(guò)測(cè)試,點(diǎn)券充值可以把點(diǎn)券充值在自己的帳號(hào)之下,成功的用來(lái)下載付費(fèi)書(shū)籍。 6.2.3 搜索書(shū)籍 會(huì)員登錄后,可以順利地搜索出系統(tǒng)擁有的電子書(shū)信息,能夠按照書(shū)名或作者搜索,并且可以進(jìn)行下載。 6.3 書(shū)籍管理模塊 6.3.1 電子書(shū)類(lèi)別的管理 經(jīng)測(cè)試,電子書(shū)類(lèi)別只可以由系統(tǒng)管理員進(jìn)行操作,管理員根據(jù)需要添加和刪除電子書(shū)類(lèi)別,可以成功進(jìn)行電子書(shū)類(lèi)別的添加和刪除操作。 6.3.2 電子書(shū)管理 經(jīng)測(cè)試,電子書(shū)的管理只可以。由系統(tǒng)管理員進(jìn)行操作,管理員根據(jù)需要添加和刪除電子書(shū),可以成功地進(jìn)行電子書(shū)的添加和刪除操作。 6.3.3 留言版 經(jīng)過(guò)系統(tǒng)測(cè)試可以進(jìn)行會(huì)員間的交流,每個(gè)人都可以在系統(tǒng)查看別人的留言,留下自己的留言,管理員可以對(duì)留言進(jìn)行刪除。 第7章 結(jié)論與展望 經(jīng)過(guò)三個(gè)月的學(xué)習(xí)和設(shè)計(jì),畢業(yè)設(shè)計(jì)基本完成。剛開(kāi)始做畢業(yè)設(shè)計(jì)的時(shí)候感覺(jué)非常困難,感覺(jué)自己什么都不會(huì),整天覺(jué)得畢業(yè)設(shè)計(jì)很難,后來(lái)經(jīng)過(guò)老師的指導(dǎo)和自己的努力,慢慢的使畢業(yè)設(shè)計(jì)步入正軌。這幾個(gè)月學(xué)到了很多知識(shí),感覺(jué)比較滿(mǎn)足,特別是經(jīng)過(guò)自己的研究之后做出的成果感覺(jué)到很欣慰。 通過(guò)對(duì)課題的研究、分析以及設(shè)計(jì),課題的要求基本實(shí)現(xiàn)。雖然實(shí)現(xiàn)了課題要就的基本功能,但是還有許多問(wèn)題存在,系統(tǒng)不是非常完善,沒(méi)能實(shí)現(xiàn)論壇的功能。但是經(jīng)過(guò)幾個(gè)月的學(xué)習(xí)與設(shè)計(jì),自己感覺(jué)學(xué)到了很多知識(shí),感覺(jué)自己這幾個(gè)月通過(guò)自己的努力取得了不錯(cuò)的成績(jī)。最重要的是讓我認(rèn)識(shí)到了學(xué)習(xí)的重要性,只要自己肯學(xué),就一定能學(xué)會(huì)。同時(shí)不可以眼高手低,不管什么都要?jiǎng)邮謱?shí)踐才行,不可以自己覺(jué)得會(huì)了就是會(huì)了,只有自己做出來(lái)才能叫真正的學(xué)會(huì)。 由于自己的能力和時(shí)間有限,在一學(xué)期的時(shí)間里只做到了現(xiàn)有的地步,不過(guò)我希望在以后的生活和學(xué)習(xí)中可以繼續(xù)完善自己的系統(tǒng),系統(tǒng)還需要論壇等功能。希望在以后的工作和學(xué)習(xí)中可以繼續(xù)完善自己的畢業(yè)設(shè)計(jì),做出屬于自己的完善的系統(tǒng)。 參考文獻(xiàn) [1] 楊崑,王二平. 軟件開(kāi)發(fā)管理中的溝通與協(xié)調(diào)問(wèn)題研究[J]. 中國(guó)管理科學(xué),2004,12(3):141-148. [2] 張珞玲,李師賢. 軟件項(xiàng)目風(fēng)險(xiǎn)管理方法比較和研究[J]. 計(jì)算機(jī)工程,2003,29(3):91-94. [3] 李麗. 項(xiàng)目管理與項(xiàng)目經(jīng)理的技能及策略選擇[J]. 公路,2001,11:39-42. [4] 孫鑫編著. Java Web開(kāi)發(fā)詳解[M].北京: 電子工業(yè)出版社,2006 [5] 賈更新,趙立超編著. JSP完全實(shí)力教程[M].電子工業(yè)出版社,2001. [6] 龍馬工作室.典型網(wǎng)站建設(shè)[M].北京:人民郵電出版社,2004(8):20-54. [7] 薛華成主編.管理信息系統(tǒng)[M].北京:清華大學(xué)出版社,1999. [8] 成典勤. 基于JSP技術(shù)的Web應(yīng)用[J]. 安康師專(zhuān)學(xué)報(bào),2005年6期. [9] 鄧松良.軟件工程[M] .西安:西安電子科技大學(xué)出版社,2004. [10] David B. L. Client Needs and The Design Process in Web Projects[J]. Sydney: University of Technology,2002,1. [11] Thomas R. Peltier.Information Security Risk Analysis[J].Rothstein Associates Inc,2001 致 謝 畢業(yè)設(shè)計(jì)接近尾聲,本學(xué)期經(jīng)過(guò)胡迎新老師的精心指導(dǎo),我的畢業(yè)設(shè)計(jì)基本完成了。 感謝胡老師的悉心指導(dǎo),在胡老師的指導(dǎo)下,我的畢業(yè)設(shè)計(jì)一步一步的完成,作為一個(gè)本科生的畢業(yè)設(shè)計(jì),由于經(jīng)驗(yàn)的匱乏,難免有許多考慮不周全的地方,如果沒(méi)有導(dǎo)師的督促指導(dǎo),以及同學(xué)們的幫助,想要完成這個(gè)設(shè)計(jì)是難以想象的。 首先需要感謝的也是最需要感謝的是指導(dǎo)老師胡迎新老師,胡老師平日工作繁多,但是在每個(gè)階段胡老師都能夠孜孜不倦的給予幫助,從選題、開(kāi)題報(bào)告到程序設(shè)計(jì),每個(gè)部分都有胡老師的大量心血。 其次需要感謝答辯組的老師們,每次檢查都會(huì)提出寶貴的意見(jiàn),使我的畢業(yè)設(shè)計(jì)能夠越來(lái)越完善。 最后需要感謝的是同學(xué)們的幫助,每次遇到解決不了的問(wèn)題都會(huì)和同學(xué)們商量,在經(jīng)過(guò)討論后總能把問(wèn)題解決,同學(xué)們也給了我比較大的幫助。