java畢業(yè)論文范文5篇
Java語(yǔ)言是編程語(yǔ)言史上的一個(gè)里程碑,在此基礎(chǔ)上形成的Java Applet技術(shù)是綜合了計(jì)算機(jī)圖形學(xué)、多媒體技術(shù)、網(wǎng)絡(luò)技術(shù)的新技術(shù),近年來(lái)在很多領(lǐng)域得到了快速的發(fā)展和應(yīng)用。本文是小編為大家整理的java的畢業(yè)論文范文,僅供參考。
java畢業(yè)論文范文篇一:
學(xué)生姓名 _______ _
學(xué) 號(hào) ___________
專 業(yè) ____ 班 級(jí) ____ 指導(dǎo)教師
200 年 月
1.Java語(yǔ)言的出現(xiàn)
自從1946年世界上第一臺(tái)電子計(jì)算機(jī)問(wèn)世以來(lái),計(jì)算模式的發(fā)展經(jīng)歷了三個(gè)階段:集中計(jì)算模式、分散計(jì)算模式和網(wǎng)絡(luò)計(jì)算模式。Internet的出現(xiàn),為在網(wǎng)絡(luò)計(jì)算模式下的科學(xué)計(jì)算和信息處理提供了良好平臺(tái)。然而,要充分利用網(wǎng)絡(luò)計(jì)算模式的功能與效益,平臺(tái)的運(yùn)行環(huán)境是個(gè)制約因素,而Java語(yǔ)言和Java技術(shù)則是解決這一問(wèn)題的最佳途徑。
1991年,SUN公司的Jame Gosling,Bill Joe等人試圖為電視、烤箱等家用電器開(kāi)發(fā)一種交互式的軟件系統(tǒng),這種應(yīng)用需要的是那種小而可靠的系統(tǒng),它能夠移植,并且實(shí)時(shí)性好,適用于網(wǎng)絡(luò)分布環(huán)境。流行的C++是自然的選擇。不過(guò),開(kāi)發(fā)過(guò)程中遇到的許多難以克服的困難使他們意識(shí)到必須徹底解決問(wèn)題了,最終,開(kāi)發(fā)成功了一個(gè)名為Oak的軟件,此中蘊(yùn)藏著Java的原型,當(dāng)時(shí),并未引起人們的注意。1994年下半年,隨著Internet的迅猛發(fā)展,環(huán)球信息網(wǎng)WWW的快速增長(zhǎng),促進(jìn)了Java語(yǔ)言研制的進(jìn)展,使得它逐漸成為Internet上倍受歡迎的開(kāi)發(fā)與編程語(yǔ)言。1995年5月Java正式問(wèn)世,一些著名的計(jì)算機(jī)公司紛紛購(gòu)買(mǎi)了Java語(yǔ)言的使用權(quán),如Microsoft、IBM、Netscape、Novell、Apple、DEC、SGI等。因此,Java語(yǔ)言被美國(guó)著名雜志PC Magazine評(píng)為1995年十大優(yōu)秀科技產(chǎn)品(計(jì)算機(jī)類僅此一項(xiàng)入選)之一,隨之大量出現(xiàn)了用Java編寫(xiě)的軟件產(chǎn)品,受到工業(yè)界的重視與好評(píng),認(rèn)為“Java是八十年代以來(lái)計(jì)算機(jī)界的一件大事”。微軟總裁比爾〃蓋茨在認(rèn)真觀察了一段時(shí)間后,確認(rèn)“Java是長(zhǎng)時(shí)間以來(lái)最卓越的程序設(shè)計(jì)語(yǔ)言”,并確定微軟整個(gè)軟件的開(kāi)發(fā)戰(zhàn)略從PC單機(jī)時(shí)代向以網(wǎng)絡(luò)為中心的計(jì)算時(shí)代轉(zhuǎn)移,而購(gòu)買(mǎi)Java則是他的重大戰(zhàn)略決策的實(shí)施部署。
因此,Java的誕生必將對(duì)整個(gè)計(jì)算機(jī)產(chǎn)業(yè)發(fā)生深遠(yuǎn)的影響,對(duì)傳統(tǒng)的計(jì)算模型提出了新的挑戰(zhàn)。SUN Microsystem公司的總裁Scott McNealy認(rèn)為:Java對(duì)Internet和WWW開(kāi)辟了一個(gè)嶄新的時(shí)代。
有人預(yù)言:Java將成為網(wǎng)絡(luò)上的“世界語(yǔ)”,今后,用其他語(yǔ)言編寫(xiě)的軟件統(tǒng)統(tǒng)都要用Java語(yǔ)言來(lái)改寫(xiě)。
2.Java語(yǔ)言的主要特點(diǎn)
Java語(yǔ)言是一種適用于網(wǎng)絡(luò)編程的語(yǔ)言,它的基本結(jié)構(gòu)與C++極為相似,但卻簡(jiǎn)單得多。它集成了其它一些語(yǔ)言的特點(diǎn)和優(yōu)勢(shì),又避開(kāi)了它們的不足之處。它的主要特點(diǎn)如下:
2.1簡(jiǎn)單性
Java與C++相比,不再支持運(yùn)算符重載、多級(jí)繼承及廣泛的自動(dòng)強(qiáng)制等易混淆和較少使用的特性,而增加了內(nèi)存空間自動(dòng)垃圾收集的功能,復(fù)雜特性的省略和實(shí)用功能的增加使得開(kāi)發(fā)變得簡(jiǎn)單而可靠。
簡(jiǎn)單化的另一個(gè)方面是Java的系統(tǒng)非常小,其基本解釋和類支持部分只占40KB,附加的基本標(biāo)準(zhǔn)庫(kù)和線程支持也只需增加175KB。因此,Java應(yīng)用軟件能在相當(dāng)小的系統(tǒng)之上獨(dú)立工作。
2.2平臺(tái)獨(dú)立性
這是Java最吸引人的地方。由于它采用先編譯成中間碼(字節(jié)碼),然后裝載與校驗(yàn),再解釋成不同的機(jī)器碼來(lái)執(zhí)行,即“Java虛擬機(jī)”的思想,“屏蔽”了具體的“平臺(tái)環(huán)境”特性要求,使得只要能支持Java虛擬機(jī),就可運(yùn)行各種Java程序。
2.3面向?qū)ο蟮募夹g(shù)
面向?qū)ο?O-O)的技術(shù)是近年來(lái)軟件開(kāi)發(fā)中用得最為普遍的程序設(shè)計(jì)方法,,它通過(guò)把客觀事物進(jìn)行分類組合、參數(shù)封裝、用成員變量來(lái)描述對(duì)象的性質(zhì)、狀態(tài),而用方法(成員函數(shù))來(lái)實(shí)現(xiàn)其行為和功能。O-O技術(shù)具有繼承性、封裝性、多態(tài)性等眾多特點(diǎn),Java在保留這些優(yōu)點(diǎn)的基礎(chǔ)上,又具有動(dòng)態(tài)聯(lián)編的特性,更能發(fā)揮出面向?qū)ο蟮膬?yōu)勢(shì)。
2.4多線程
多線程機(jī)制使應(yīng)用程序能并行執(zhí)行,Java有一套成熟的同步原語(yǔ) ,保證了對(duì)共享數(shù)據(jù)的正確操作.通過(guò)使用多線程,程序設(shè)計(jì)者可以分別用不同的線程完成特定的行為,而不需要采用全局的事件循環(huán)機(jī)制,這樣就很容易實(shí)現(xiàn)網(wǎng)絡(luò)上實(shí)時(shí)的交互行為。
2.5動(dòng)態(tài)性
Java的設(shè)計(jì)使它適合于一個(gè)不斷發(fā)展的環(huán)境。在類庫(kù)中可以自由地加入新的方法和實(shí)例變量而不會(huì)影響用戶程序的執(zhí)行。并且Java通過(guò)接口來(lái)支持多重繼承,使之比嚴(yán)格的類繼承具有更靈活的方式和擴(kuò)展性。
2.6安全性
Java有建立在公共密鑰技術(shù)基礎(chǔ)上的確認(rèn)技術(shù).指示器語(yǔ)義的改變將使應(yīng)用程序不能再去訪問(wèn)以前的數(shù)據(jù)結(jié)構(gòu)或是私有數(shù)據(jù),大多數(shù)病毒也就無(wú)法破壞數(shù)據(jù).因而,用Java可以構(gòu)造出無(wú)病毒、安全的系統(tǒng)。
Java語(yǔ)言除上述主要特點(diǎn)外,還有高性能、分布性、強(qiáng)大性、解釋性、可移植性等,此處不再 贅述。
3.Java語(yǔ)言的發(fā)展
Java自正式問(wèn)世以來(lái)已經(jīng)歷了四年的歷程,時(shí)間雖短,發(fā)展極快。一年一度在美國(guó)舊金山召開(kāi)的世界Java One語(yǔ)言開(kāi)發(fā)者大會(huì)(Java One Developer Conference)盛況空前正說(shuō)明了這一點(diǎn)。四年中每年的Java One大會(huì),既是了解Java最新技術(shù)動(dòng)態(tài)、應(yīng)用成果和下一步發(fā)展趨勢(shì)的最好場(chǎng)所,又是推動(dòng)下一年Java快速發(fā)展的重要?jiǎng)恿?。首屆Java One大會(huì)于1996年召開(kāi),各屆簡(jiǎn)況如下:
1996年5月29-31日,第一屆,出席會(huì)議者6500余人,來(lái)自工業(yè)界的超過(guò)一半。有人評(píng)價(jià)說(shuō):“這是近年計(jì)算機(jī)界最光輝的一次盛會(huì)”。工業(yè)界相當(dāng)看好Java語(yǔ)言,認(rèn)為它的使用將會(huì)引起一場(chǎng)軟件革命:從軟件的設(shè)計(jì)風(fēng)格、設(shè)計(jì)方法、設(shè)計(jì)目標(biāo)到設(shè)計(jì)過(guò)程,都會(huì)產(chǎn)生徹底的變革,“甚至?xí)淖兇诵乔虻纳罘绞健薄?1997年,第二屆,出席會(huì)議者10000人。Java的追隨者不斷增加,應(yīng)用開(kāi)發(fā)迅速起步。
1998年3月24-27日,第三屆,出席會(huì)議者14000余人(注冊(cè)人數(shù)),注冊(cè)門(mén)票售價(jià)1195美元,否則1395美元,即使如此,仍有不少人不惜工本,擠入會(huì)場(chǎng)。本次會(huì)議除了軟件巨頭微軟未參加會(huì)議外,幾乎所有的計(jì)算機(jī)公司都參加了。展廳內(nèi)設(shè)300多個(gè)展臺(tái),先后舉行了90場(chǎng)專題討論會(huì),每場(chǎng)參加的人數(shù)從千人至五六千人不等。會(huì)議的主題是:通過(guò)Java的培訓(xùn)來(lái)帶動(dòng)Java軟件的開(kāi)發(fā)和技術(shù)研究,從而發(fā)展生產(chǎn)力,獲取高額利潤(rùn),提高生活質(zhì)量,推動(dòng)信息產(chǎn)業(yè)的進(jìn)步。會(huì)議展出的內(nèi)容大致如下:
Java開(kāi)發(fā)工具軟件,如:JMF、JDK、Symantec Visual Cafe、Java Dynamic Management Kit、JFC、JNDI、Java Studio 等;
企業(yè)信息管理解決方案軟件,如:EJB(Enterprise JavaBeans);
基于Java技術(shù)的信息家電,如:機(jī)頂盒、Java電話等;
個(gè)人信息綜合服務(wù)(Java戒指)、社會(huì)信息綜合查詢亭(Kiosk);
電子商務(wù)軟件、智能卡、Java Card API 等;
網(wǎng)絡(luò)計(jì)算環(huán)境下的Java服務(wù)器軟件、遠(yuǎn)程方法調(diào)用(RMI)、基于Java技術(shù)的移動(dòng)計(jì)算設(shè)備;
JMS(Java Message Service)用于出版、票據(jù)訂閱的軟件;
JOS(Java OS)、基于Java技術(shù)的NC和Java Station。
1999年6月15-18日,第四屆,出席會(huì)議者達(dá)20000人,300多家廠商參展,舉辦400多場(chǎng)技術(shù)講座,555名演講者慷慨陳詞,精彩紛呈。這次大會(huì)的主要特點(diǎn)是:
Java框架結(jié)構(gòu)被梳理清晰
本次JavaOne大會(huì)上,Sun公司的一個(gè)重大舉措就是公布了Java平臺(tái)的最新架構(gòu)。重新定義的Java平臺(tái)以Java 2為核心,由面向企業(yè)和服務(wù)器市場(chǎng)的企業(yè)版Java 2(J2EE)、面向傳統(tǒng)PC客戶機(jī)市場(chǎng)的標(biāo)準(zhǔn)版Java 2(J2SE)和面向信息電器等后PC終端設(shè)備市場(chǎng)的Micro版Java 2(J2ME)三大部分組成。其中,J2EE包括Enterprise JavaBeans(EJB)、Java Server Pages & Java Servlets、Java Mail API和Java Massage Service組成。而J2ME則是原有的Personal Java、EmbeddedJava、JavaCard以及剛剛推出的Kjava組成。雖然新框架結(jié)構(gòu)中的內(nèi)容都是已有的,但這樣重新定義和組合,使得Java平臺(tái)的概念簡(jiǎn)單化,從而變得易于理解,更適合于進(jìn)行市場(chǎng)推廣。
2)重點(diǎn)放在企業(yè)平臺(tái)
隨著Internet的飛速發(fā)展,企業(yè)計(jì)算模式正摒棄C/S結(jié)構(gòu)而采用Web-Browser結(jié)構(gòu),此即瘦客戶端/胖服務(wù)器、大容量數(shù)據(jù)庫(kù)的3層或N層體系結(jié)構(gòu)。由于Java的特點(diǎn),使得它在開(kāi)發(fā)服務(wù)器端的應(yīng)用程序方面有著得天獨(dú)厚的優(yōu)勢(shì),面向服務(wù)器端的J2EE為當(dāng)今逐漸流行的N層體系結(jié)構(gòu)提供了一個(gè)標(biāo)準(zhǔn)的Java計(jì)算平臺(tái):界面一致、工具簡(jiǎn)易、豐富、Web頁(yè)面互聯(lián)便捷,從而能大大加速和簡(jiǎn)化各種應(yīng)用系統(tǒng)的開(kāi)發(fā)。
3) 加速后PC時(shí)代的進(jìn)程
計(jì)算機(jī)的發(fā)展創(chuàng)造了Internet,但是計(jì)算機(jī)現(xiàn)在卻不是訪問(wèn)Internet的唯一方式。正在出現(xiàn)的信息化、智能化的消費(fèi)類電子產(chǎn)品打破了PC作為信息終端的壟斷地位,成為人類進(jìn)入Internet的新門(mén)戶。信息終端的多元化預(yù)示著所謂后PC(post-PC)時(shí)代的到來(lái)。消費(fèi)類的信息終端量大面廣,是典型的瘦客戶機(jī),其本身的資源和能力不能與PC相比,但必須更加智能化,并對(duì)服務(wù)器端的管理提出了更高的要求。而Java平臺(tái)恰恰滿足了這種要求。本次大會(huì)推出的Kjava虛擬機(jī)能運(yùn)行在16以上的微處理器上,占用內(nèi)存少,人們可以隨心所欲,在資源有限的設(shè)備上方便地開(kāi)發(fā)出各種各樣的應(yīng)用,直接運(yùn)行在不同的消費(fèi)類或其它電子設(shè)備上;而Jini的出現(xiàn)為Java網(wǎng)絡(luò)連接提供了公共標(biāo)準(zhǔn),使得任何Java設(shè)備都可以連入網(wǎng)絡(luò)中被自動(dòng)識(shí)別,并可充分利用網(wǎng)絡(luò)上已有的各種資源。大力推進(jìn)Jini的發(fā)展是Sun公司加速后PC時(shí)代進(jìn)程的一項(xiàng)重要策略。
4)應(yīng)用系統(tǒng)異彩紛呈
與上屆大會(huì)一樣,展出內(nèi)容有:應(yīng)用工具、應(yīng)用系統(tǒng)、信息家電等。特別在實(shí)時(shí)系統(tǒng)開(kāi)發(fā)方面,以IBM為首開(kāi)發(fā)出了應(yīng)用于工業(yè)實(shí)時(shí)環(huán)境的Java嵌入系統(tǒng),展現(xiàn)出Java在工業(yè)領(lǐng)域的廣闊應(yīng)用前景。
Java語(yǔ)言的出現(xiàn)和發(fā)展,得到了IT業(yè)界的青睞,它像一面大旗,凝聚了世界眾多的廠商與Sun公司一道,結(jié)成了對(duì)抗微軟壟斷的聯(lián)盟。許多知名廠商紛紛購(gòu)買(mǎi)Java許可證,目前已有90多萬(wàn)個(gè)軟件開(kāi)發(fā)商加入了Java陣營(yíng),1億個(gè)Java最終用戶,幾千種Java應(yīng)用軟件產(chǎn)品,1500余種Java書(shū)籍(自Java問(wèn)世4年來(lái),平均每天出版一本)。這真是IT業(yè)界的盛事!
IBM公司提出“高舉Java大旗,全力以赴”的口號(hào),它在全世界的11個(gè)國(guó)家有28個(gè)實(shí)驗(yàn)室,集聚了2500余名技術(shù)人員,全天侯24小時(shí)進(jìn)行全方位開(kāi)發(fā);芯片巨人Intel提出“抓住時(shí)機(jī),占領(lǐng)Java陣地”!決心使Intel芯片系統(tǒng)成為開(kāi)發(fā)Java應(yīng)用運(yùn)行的最佳平臺(tái);Novell則宣稱“Java是Novell的未來(lái),未來(lái)是服務(wù)器端Java的市場(chǎng)”;作為Java發(fā)明者的Sun公司,堅(jiān)持“保衛(wèi)Java大旗,發(fā)展Java之路”的方針,通過(guò)對(duì)Java的“研究椘攔罈構(gòu)造棽饈詶推廣”的過(guò)程,從而占領(lǐng)市場(chǎng)。此外,HP、Oracle、Apple、Sybase、Netscape、Informi_、3Com、Motorola等公司均是Sun的堅(jiān)強(qiáng)同盟。
在我國(guó),Java的引進(jìn)與開(kāi)發(fā)起步早,發(fā)展水平基本與世界同步。目前,Sun公司已在中國(guó)建成了由5個(gè)授權(quán)中心、20多個(gè)Internet/Intarnet Java解決方案中心和10所Java大學(xué)、若干培訓(xùn)中心組成的三級(jí)結(jié)構(gòu)。全面推動(dòng)Java在中國(guó)的普及、應(yīng)用、研究、開(kāi)發(fā),培養(yǎng)了數(shù)以十萬(wàn)計(jì)的Java開(kāi)發(fā)人員。此外,Sun還牽頭成立了中外軟件廠商的開(kāi)發(fā)聯(lián)盟。
在中國(guó),Java的開(kāi)發(fā)可以說(shuō)是“人才濟(jì)濟(jì),成果累累”。如清華大學(xué)王克宏教授帶領(lǐng)的課題組面向全國(guó),自96年開(kāi)始舉辦了多期Java培訓(xùn)班和講座,開(kāi)設(shè)了數(shù)期本科生、研究生Java課程,出版了“Java系列叢書(shū)”10余冊(cè) ,承擔(dān)了國(guó)家“九五”攻關(guān)項(xiàng)目“基于Java技術(shù)的交互式遠(yuǎn)程教學(xué)系統(tǒng)”,并與日本就Java開(kāi)發(fā)進(jìn)行了國(guó)際合作,成績(jī)斐然;東大阿派下屬的寶鋼東軟軟件技術(shù)研究中心是國(guó)內(nèi)是首屈一指的Java研發(fā)骨干企業(yè),該中心從95年起就開(kāi)始了Java的研發(fā),目前,已掌握了Personal Java的核心移植技術(shù),并成功地將JVM移植到汽車導(dǎo)航平臺(tái)。此外,他們還開(kāi)發(fā)出支持Jini協(xié)議的即插即用網(wǎng)絡(luò)打印機(jī)軟件,以及一套Jini信息家電網(wǎng)絡(luò)的可視化演示環(huán)境,完成了基于JavaBeans的組件化軟件開(kāi)發(fā)及運(yùn)行支持環(huán)境等多項(xiàng)成果;在臺(tái)灣,22家知名計(jì)算機(jī)公司成立了“Java聯(lián)盟”,并在臺(tái)北建立了“Java開(kāi)發(fā)中心”,新竹建立了“Java語(yǔ)言實(shí)驗(yàn)室”;在
香港,舉行了全島Java杯比賽,掀起了學(xué)習(xí)Java的熱潮 。Java的浪潮洶涌澎湃,席卷全球!
4. Java技術(shù)
Java發(fā)展至今日,已不僅僅是一種編程語(yǔ)言,實(shí)際上已形成了一門(mén)技術(shù).其內(nèi)容包括:
1)Java軟件包
Java語(yǔ)言及其編程技術(shù)、JavaOS、Java開(kāi)發(fā)環(huán)境與工具、Java語(yǔ)言的各種軟件包、數(shù)據(jù)庫(kù)接口JDBC等。
2)Java虛擬機(jī)及其規(guī)范
3) Java嵌入技術(shù)(Java芯片)
已推出的有Java戒指、Java卡等。1999年8月2日,Sun公司宣布名為MAJC的專門(mén)為Java語(yǔ)言設(shè)計(jì)的的芯片優(yōu)化研制成功,欲與Intel試比高低。該芯片在設(shè)計(jì)時(shí)采用了模塊式高性能計(jì)算引擎,實(shí)質(zhì)為一種芯片級(jí)并行處理機(jī),能以更有效的方式分解計(jì)算任務(wù),特別適合處理多媒體數(shù)據(jù)。Sun公司希望通過(guò)MAJC芯片的發(fā)布催生出一個(gè)基于Java語(yǔ)言的微處理器家族,與Intel公司競(jìng)爭(zhēng)。設(shè)想中的Java處理器將應(yīng)用在從低價(jià)消費(fèi)電子產(chǎn)品到高端因特網(wǎng)服務(wù)器領(lǐng)域。
4)Java計(jì)算
基于Java技術(shù)的企業(yè)Internet/Intranet信息系統(tǒng)以及其他應(yīng)用系統(tǒng)。
5)Jini技術(shù)
1999年初正式發(fā)布后,立刻得到業(yè)界的廣泛支持。Jini的出現(xiàn)為Java網(wǎng)絡(luò)連接提供了公共標(biāo)準(zhǔn),使得任何Java設(shè)備都可以連入網(wǎng)絡(luò)中被自動(dòng)識(shí)別,并可充分
利用網(wǎng)絡(luò)上已有的各種資源。它把網(wǎng)絡(luò)上的各類設(shè)備(包括消費(fèi)類電子設(shè)備如移動(dòng)電話、PDA、DTV、HPC、NC、游戲機(jī)、電冰箱、智能卡等等)和各種軟件組合成一個(gè)單一、動(dòng)態(tài)的分布式系統(tǒng),使網(wǎng)絡(luò)更易于操縱、易于管理,具有更高的可配臵性。Jini將使網(wǎng)絡(luò)具有自發(fā)性,它的出現(xiàn)大大擴(kuò)展了“計(jì)算”和“計(jì)算機(jī)”的含義,極大地簡(jiǎn)化了網(wǎng)絡(luò)操作,對(duì)家庭用戶來(lái)說(shuō),使用網(wǎng)上設(shè)備即插即用,就像使用電話一樣方便。Java和Jini 不僅可以不依賴于Windows為代表的操作系統(tǒng),而且引導(dǎo)著信息產(chǎn)業(yè)的潮流,使Sun公司能在未來(lái)的、非PC類電子產(chǎn)品的數(shù)字化市場(chǎng)中強(qiáng)占制高點(diǎn)。
6)Jiro平臺(tái)
異質(zhì)網(wǎng)絡(luò)環(huán)境中安裝的存儲(chǔ)系統(tǒng)的多樣性和分布性,給存儲(chǔ)管理帶來(lái)了巨大的挑戰(zhàn)。用戶和開(kāi)發(fā)人員都希望能有一種技術(shù),能更好地促進(jìn)企業(yè)存儲(chǔ)管理方案的開(kāi)發(fā)。而Jiro平臺(tái)正是解決此問(wèn)題的革命性方案。Jiro平臺(tái)實(shí)現(xiàn)了Java和Jini 技術(shù),它是一個(gè)便于用戶管理異質(zhì)網(wǎng)絡(luò)上由各種服務(wù)器、存儲(chǔ)和設(shè)備組成的混合環(huán)境的開(kāi)放式存儲(chǔ)管理平臺(tái)。它對(duì)操作系統(tǒng)是中立的。Jiro為跨異質(zhì)存儲(chǔ)局域網(wǎng)(SAN)的管理服務(wù)和設(shè)備提供了一個(gè)開(kāi)放平臺(tái),允許服務(wù)器、存儲(chǔ)和聯(lián)網(wǎng)設(shè)備在異質(zhì)網(wǎng)絡(luò)環(huán)境中無(wú)縫地協(xié)同工作。Jiro平臺(tái)為開(kāi)發(fā)者帶來(lái)的好處有: 允許開(kāi)發(fā)者利用各種實(shí)現(xiàn)管理存儲(chǔ)網(wǎng)絡(luò)的目標(biāo)功能創(chuàng)建應(yīng)用;
提供了一個(gè)可以在各種應(yīng)用、服務(wù)和設(shè)備之間交互操作的組件模型; 允許設(shè)備易被增加、刪除;
允許應(yīng)用或服務(wù)被自動(dòng)更新。
1999年7月,Sun發(fā)布了正式的Jiro規(guī)范草案,供公眾討論、修改。目前,Jiro平臺(tái)的團(tuán)體成員已超過(guò)25家,支持Jiro平臺(tái)的廠商超過(guò)300家。有眼光的廠商紛紛加入到這些組行列,從而加快了Jiro的發(fā)展。
結(jié)語(yǔ)
Java自問(wèn)世以來(lái),以其得天獨(dú)厚的優(yōu)勢(shì),在IT業(yè)界掀起了研究、開(kāi)發(fā)它的浪潮,顯示了“鵬程萬(wàn)里”的美好前景。作為一種與底層硬件無(wú)關(guān)的、“編寫(xiě)一次,到處運(yùn)行”的高級(jí)語(yǔ)言和計(jì)算平臺(tái),Java天生就具有將網(wǎng)絡(luò)上的各個(gè)平臺(tái)連成一體的能力,真正實(shí)現(xiàn)了“網(wǎng)絡(luò)就是計(jì)算機(jī)”的理念。以Java為代表的網(wǎng)絡(luò)的成長(zhǎng),改變了我們的聯(lián)系方式、生活方式、學(xué)習(xí)方式和經(jīng)營(yíng)方式。它的來(lái)到使我們目睹了一場(chǎng)類似印刷術(shù)的重大變革。毫無(wú)疑問(wèn),它將影響人類社會(huì)的發(fā)展,這就是:Java加速人類進(jìn)入網(wǎng)絡(luò)時(shí)代!
Java是當(dāng)今IT產(chǎn)業(yè)和人類文明的創(chuàng)新和希望!
java畢業(yè)論文范文篇二:
編號(hào)
___學(xué)院
免費(fèi)的
畢 業(yè) 論 文
學(xué)生姓名 _______ _
學(xué) 號(hào) ___________
專 業(yè) ____
班 級(jí) ____
指導(dǎo)教師
200 年 月
1.Java語(yǔ)言的出現(xiàn)
自從1946年世界上第一臺(tái)電子計(jì)算機(jī)問(wèn)世以來(lái),計(jì)算模式的發(fā)展經(jīng)歷了三個(gè)階段:集中計(jì)算模式、分散計(jì)算模式和網(wǎng)絡(luò)計(jì)算模式。Internet的出現(xiàn),為在網(wǎng)絡(luò)計(jì)算模式下的科學(xué)計(jì)算和信息處理提供了良好平臺(tái)。然而,要充分利用網(wǎng)絡(luò)計(jì)算模式的功能與效益,平臺(tái)的運(yùn)行環(huán)境是個(gè)制約因素,而Java語(yǔ)言和Java技術(shù)則是解決這一問(wèn)題的最佳途徑。
1991年,SUN公司的Jame Gosling,Bill Joe等人試圖為電視、烤箱等家用電器開(kāi)發(fā)一種交互式的軟件系統(tǒng),這種應(yīng)用需要的是那種小而可靠的系統(tǒng),它能夠移植,并且實(shí)時(shí)性好,適用于網(wǎng)絡(luò)分布環(huán)境。流行的C++是自然的選擇。不過(guò),開(kāi)發(fā)過(guò)程中遇到的許多難以克服的困難使他們意識(shí)到必須徹底解決問(wèn)題了,最終,開(kāi)發(fā)成功了一個(gè)名為Oak的軟件,此中蘊(yùn)藏著Java的原型,當(dāng)時(shí),并未引起人們的注意。1994年下半年,隨著Internet的迅猛發(fā)展,環(huán)球信息網(wǎng)WWW的快速增長(zhǎng),促進(jìn)了Java語(yǔ)言研制的進(jìn)展,使得它逐漸成為Internet上倍受歡迎的開(kāi)發(fā)與編程語(yǔ)言。1995年5月Java正式問(wèn)世,一些著名的計(jì)算機(jī)公司紛紛購(gòu)買(mǎi)了Java語(yǔ)言的使用權(quán),如Microsoft、IBM、Netscape、Novell、Apple、DEC、SGI等。因此,Java語(yǔ)言被美國(guó)著名雜志PC Magazine評(píng)為1995年十大優(yōu)秀科技產(chǎn)品(計(jì)算機(jī)類僅此一項(xiàng)入選)之一,隨之大量出現(xiàn)了用Java編寫(xiě)的軟件產(chǎn)品,受到工業(yè)界的重視與好評(píng),認(rèn)為“Java是八十年代以來(lái)計(jì)算機(jī)界的一件大事”。微軟總裁比爾·蓋茨在認(rèn)真觀察了一段時(shí)間后,確認(rèn)“Java是長(zhǎng)時(shí)間以來(lái)最卓越的程序設(shè)計(jì)語(yǔ)言”,并確定微軟整個(gè)軟件的開(kāi)發(fā)戰(zhàn)略從PC單機(jī)時(shí)代向以網(wǎng)絡(luò)為中心的計(jì)算時(shí)代轉(zhuǎn)移,而購(gòu)買(mǎi)Java則是他的重大戰(zhàn)略決策的實(shí)施部署。
因此,Java的誕生必將對(duì)整個(gè)計(jì)算機(jī)產(chǎn)業(yè)發(fā)生深遠(yuǎn)的影響,對(duì)傳統(tǒng)的計(jì)算模型提出了新的挑戰(zhàn)。SUN Microsystem公司的總裁Scott McNealy認(rèn)為:Java對(duì)Internet和WWW開(kāi)辟了一個(gè)嶄新的時(shí)代。
有人預(yù)言:Java將成為網(wǎng)絡(luò)上的“世界語(yǔ)”,今后,用其他語(yǔ)言編寫(xiě)的軟件統(tǒng)統(tǒng)都要用Java語(yǔ)言來(lái)改寫(xiě)。
2.Java語(yǔ)言的主要特點(diǎn)
Java語(yǔ)言是一種適用于網(wǎng)絡(luò)編程的語(yǔ)言,它的基本結(jié)構(gòu)與C++極為相似,但卻簡(jiǎn)單得多。它集成了其它一些語(yǔ)言的特點(diǎn)和優(yōu)勢(shì),又避開(kāi)了它們的不足之處。它的主要特點(diǎn)如下:
2.1簡(jiǎn)單性
Java與C++相比,不再支持運(yùn)算符重載、多級(jí)繼承及廣泛的自動(dòng)強(qiáng)制等易混淆和較少使用的特性,而增加了內(nèi)存空間自動(dòng)垃圾收集的功能,復(fù)雜特性的省略和實(shí)用功能的增加使得開(kāi)發(fā)變得簡(jiǎn)單而可靠。
簡(jiǎn)單化的另一個(gè)方面是Java的系統(tǒng)非常小,其基本解釋和類支持部分只占40KB,附加的基本標(biāo)準(zhǔn)庫(kù)和線程支持也只需增加175KB。因此,Java應(yīng)用軟件能在相當(dāng)小的系統(tǒng)之上獨(dú)立工作。
2.2平臺(tái)獨(dú)立性
這是Java最吸引人的地方。由于它采用先編譯成中間碼(字節(jié)碼),然后裝載與校驗(yàn),再解釋成不同的機(jī)器碼來(lái)執(zhí)行,即“Java虛擬機(jī)”的思想,“屏蔽”了具體的“平臺(tái)環(huán)境”特性要求,使得只要能支持Java虛擬機(jī),就可運(yùn)行各種Java程序。
2.3面向?qū)ο蟮募夹g(shù)
面向?qū)ο?O-O)的技術(shù)是近年來(lái)軟件開(kāi)發(fā)中用得最為普遍的程序設(shè)計(jì)方法,,它通過(guò)把客觀事物進(jìn)行分類組合、參數(shù)封裝、用成員變量來(lái)描述對(duì)象的性質(zhì)、狀態(tài),而用方法(成員函數(shù))來(lái)實(shí)現(xiàn)其行為和功能。O-O技術(shù)具有繼承性、封裝性、多態(tài)性等眾多特點(diǎn),Java在保留這些優(yōu)點(diǎn)的基礎(chǔ)上,又具有動(dòng)態(tài)聯(lián)編的特性,更能發(fā)揮出面向?qū)ο蟮膬?yōu)勢(shì)。
2.4多線程
多線程機(jī)制使應(yīng)用程序能并行執(zhí)行,Java有一套成熟的同步原語(yǔ) ,保證了對(duì)共享數(shù)據(jù)的正確操作.通過(guò)使用多線程,程序設(shè)計(jì)者可以分別用不同的線程完成特定的行為,而不需要采用全局的事件循環(huán)機(jī)制,這樣就很容易實(shí)現(xiàn)網(wǎng)絡(luò)上實(shí)時(shí)的交互行為。
2.5動(dòng)態(tài)性
Java的設(shè)計(jì)使它適合于一個(gè)不斷發(fā)展的環(huán)境。在類庫(kù)中可以自由地加入新的方法和實(shí)例變量而不會(huì)影響用戶程序的執(zhí)行。并且Java通過(guò)接口來(lái)支持多重繼承,使之比嚴(yán)格的類繼承具有更靈活的方式和擴(kuò)展性。
2.6安全性
Java有建立在公共密鑰技術(shù)基礎(chǔ)上的確認(rèn)技術(shù).指示器語(yǔ)義的改變將使應(yīng)用程序不能再去訪問(wèn)以前的數(shù)據(jù)結(jié)構(gòu)或是私有數(shù)據(jù),大多數(shù)病毒也就無(wú)法破壞數(shù)據(jù).因而,用Java可以構(gòu)造出無(wú)病毒、安全的系統(tǒng)。
Java語(yǔ)言除上述主要特點(diǎn)外,還有高性能、分布性、強(qiáng)大性、解釋性、可移植性等,此處不再 贅述。
3.Java語(yǔ)言的發(fā)展
Java自正式問(wèn)世以來(lái)已經(jīng)歷了四年的歷程,時(shí)間雖短,發(fā)展極快。一年一度在美國(guó)舊金山召開(kāi)的世界Java One語(yǔ)言開(kāi)發(fā)者大會(huì)(Java One Developer Conference)盛況空前正說(shuō)明了這一點(diǎn)。四年中每年的Java One大會(huì),既是了解Java最新技術(shù)動(dòng)態(tài)、應(yīng)用成果和下一步發(fā)展趨勢(shì)的最好場(chǎng)所,又是推動(dòng)下一年Java快速發(fā)展的重要?jiǎng)恿ΑJ讓肑ava One大會(huì)于1996年召開(kāi),各屆簡(jiǎn)況如下:
1996年5月29-31日,第一屆,出席會(huì)議者6500余人,來(lái)自工業(yè)界的超過(guò)一半。有人評(píng)價(jià)說(shuō):“這是近年計(jì)算機(jī)界最光輝的一次盛會(huì)”。工業(yè)界相當(dāng)看好Java語(yǔ)言,認(rèn)為它的使用將會(huì)引起一場(chǎng)軟件革命:從軟件的設(shè)計(jì)風(fēng)格、設(shè)計(jì)方法、設(shè)計(jì)目標(biāo)到設(shè)計(jì)過(guò)程,都會(huì)產(chǎn)生徹底的變革,“甚至?xí)淖兇诵乔虻纳罘绞健薄?/p>
1997年,第二屆,出席會(huì)議者10000人。Java的追隨者不斷增加,應(yīng)用開(kāi)發(fā)迅速起步。
1998年3月24-27日,第三屆,出席會(huì)議者14000余人(注冊(cè)人數(shù)),注冊(cè)門(mén)票售價(jià)1195美元,否則1395美元,即使如此,仍有不少人不惜工本,擠入會(huì)場(chǎng)。本次會(huì)議除了軟件巨頭微軟未參加會(huì)議外,幾乎所有的計(jì)算機(jī)公司都參加了。展廳內(nèi)設(shè)300多個(gè)展臺(tái),先后舉行了90場(chǎng)專題討論會(huì),每場(chǎng)參加的人數(shù)從千人至五六千人不等。會(huì)議的主題是:通過(guò)Java的培訓(xùn)來(lái)帶動(dòng)Java軟件的開(kāi)發(fā)和技術(shù)研究,從而發(fā)展生產(chǎn)力,獲取高額利潤(rùn),提高生活質(zhì)量,推動(dòng)信息產(chǎn)業(yè)的進(jìn)步。會(huì)議展出的內(nèi)容大致如下:
Java開(kāi)發(fā)工具軟件,如:JMF、JDK、Symantec Visual Cafe、Java Dynamic Management Kit、JFC、JNDI、Java Studio 等;
企業(yè)信息管理解決方案軟件,如:EJB(Enterprise JavaBeans);
基于Java技術(shù)的信息家電,如:機(jī)頂盒、Java電話等;
個(gè)人信息綜合服務(wù)(Java戒指)、社會(huì)信息綜合查詢亭(Kiosk);
電子商務(wù)軟件、智能卡、Java Card API 等;
網(wǎng)絡(luò)計(jì)算環(huán)境下的Java服務(wù)器軟件、遠(yuǎn)程方法調(diào)用(RMI)、基于Java技術(shù)的移動(dòng)計(jì)算設(shè)備;
JMS(Java Message Service)用于出版、票據(jù)訂閱的軟件;
JOS(Java OS)、基于Java技術(shù)的NC和Java Station。
1999年6月15-18日,第四屆,出席會(huì)議者達(dá)20000人,300多家廠商參展,舉辦400多場(chǎng)技術(shù)講座,555名演講者慷慨陳詞,精彩紛呈。這次大會(huì)的主要特點(diǎn)是:
Java框架結(jié)構(gòu)被梳理清晰
本次JavaOne大會(huì)上,Sun公司的一個(gè)重大舉措就是公布了Java平臺(tái)的最新架構(gòu)。重新定義的Java平臺(tái)以Java 2為核心,由面向企業(yè)和服務(wù)器市場(chǎng)的企業(yè)版Java 2(J2EE)、面向傳統(tǒng)PC客戶機(jī)市場(chǎng)的標(biāo)準(zhǔn)版Java 2(J2SE)和面向信息電器等后PC終端設(shè)備市場(chǎng)的Micro版Java 2(J2ME)三大部分組成。其中,J2EE包括Enterprise JavaBeans(EJB)、Java Server Pages & Java Servlets、Java Mail API和Java Massage Service組成。而J2ME則是原有的Personal Java、EmbeddedJava、JavaCard以及剛剛推出的Kjava組成。雖然新框架結(jié)構(gòu)中的內(nèi)容都是已有的,但這樣重新定義和組合,使得Java平臺(tái)的概念簡(jiǎn)單化,從而變得易于理解,更適合于進(jìn)行市場(chǎng)推廣。
2)重點(diǎn)放在企業(yè)平臺(tái)
隨著Internet的飛速發(fā)展,企業(yè)計(jì)算模式正摒棄C/S結(jié)構(gòu)而采用Web-Browser結(jié)構(gòu),此即瘦客戶端/胖服務(wù)器、大容量數(shù)據(jù)庫(kù)的3層或N層體系結(jié)構(gòu)。由于Java的特點(diǎn),使得它在開(kāi)發(fā)服務(wù)器端的應(yīng)用程序方面有著得天獨(dú)厚的優(yōu)勢(shì),面向服務(wù)器端的J2EE為當(dāng)今逐漸流行的N層體系結(jié)構(gòu)提供了一個(gè)標(biāo)準(zhǔn)的Java計(jì)算平臺(tái):界面一致、工具簡(jiǎn)易、豐富、Web頁(yè)面互聯(lián)便捷,從而能大大加速和簡(jiǎn)化各種應(yīng)用系統(tǒng)的開(kāi)發(fā)。
3) 加速后PC時(shí)代的進(jìn)程
計(jì)算機(jī)的發(fā)展創(chuàng)造了Internet,但是計(jì)算機(jī)現(xiàn)在卻不是訪問(wèn)Internet的唯一方式。正在出現(xiàn)的信息化、智能化的消費(fèi)類電子產(chǎn)品打破了PC作為信息終端的壟斷地位,成為人類進(jìn)入Internet的新門(mén)戶。信息終端的多元化預(yù)示著所謂后PC(post-PC)時(shí)代的到來(lái)。消費(fèi)類的信息終端量大面廣,是典型的瘦客戶機(jī),其本身的資源和能力不能與PC相比,但必須更加智能化,并對(duì)服務(wù)器端的管理提出了更高的要求。而Java平臺(tái)恰恰滿足了這種要求。本次大會(huì)推出的Kjava虛擬機(jī)能運(yùn)行在16以上的微處理器上,占用內(nèi)存少,人們可以隨心所欲,在資源有限的設(shè)備上方便地開(kāi)發(fā)出各種各樣的應(yīng)用,直接運(yùn)行在不同的消費(fèi)類或其它電子設(shè)備上;而Jini的出現(xiàn)為Java網(wǎng)絡(luò)連接提供了公共標(biāo)準(zhǔn),使得任何Java設(shè)備都可以連入網(wǎng)絡(luò)中被自動(dòng)識(shí)別,并可充分利用網(wǎng)絡(luò)上已有的各種資源。大力推進(jìn)Jini的發(fā)展是Sun公司加速后PC時(shí)代進(jìn)程的一項(xiàng)重要策略。
4)應(yīng)用系統(tǒng)異彩紛呈
與上屆大會(huì)一樣,展出內(nèi)容有:應(yīng)用工具、應(yīng)用系統(tǒng)、信息家電等。特別在實(shí)時(shí)系統(tǒng)開(kāi)發(fā)方面,以IBM為首開(kāi)發(fā)出了應(yīng)用于工業(yè)實(shí)時(shí)環(huán)境的Java嵌入系統(tǒng),展現(xiàn)出Java在工業(yè)領(lǐng)域的廣闊應(yīng)用前景。
Java語(yǔ)言的出現(xiàn)和發(fā)展,得到了IT業(yè)界的青睞,它像一面大旗,凝聚了世界眾多的廠商與Sun公司一道,結(jié)成了對(duì)抗微軟壟斷的聯(lián)盟。許多知名廠商紛紛購(gòu)買(mǎi)Java許可證,目前已有90多萬(wàn)個(gè)軟件開(kāi)發(fā)商加入了Java陣營(yíng),1億個(gè)Java最終用戶,幾千種Java應(yīng)用軟件產(chǎn)品,1500余種Java書(shū)籍(自Java問(wèn)世4年來(lái),平均每天出版一本)。這真是IT業(yè)界的盛事!
IBM公司提出“高舉Java大旗,全力以赴”的口號(hào),它在全世界的11個(gè)國(guó)家有28個(gè)實(shí)驗(yàn)室,集聚了2500余名技術(shù)人員,全天侯24小時(shí)進(jìn)行全方位開(kāi)發(fā);芯片巨人Intel提出“抓住時(shí)機(jī),占領(lǐng)Java陣地”!決心使Intel芯片系統(tǒng)成為開(kāi)發(fā)Java應(yīng)用運(yùn)行的最佳平臺(tái);Novell則宣稱“Java是Novell的未來(lái),未來(lái)是服務(wù)器端Java的市場(chǎng)”;作為Java發(fā)明者的Sun公司,堅(jiān)持“保衛(wèi)Java大旗,發(fā)展Java之路”的方針,通過(guò)對(duì)Java的“研究椘攔罈構(gòu)造棽饈詶推廣”的過(guò)程,從而占領(lǐng)市場(chǎng)。此外,HP、Oracle、Apple、Sybase、Netscape、Informi_、3Com、Motorola等公司均是Sun的堅(jiān)強(qiáng)同盟。
在我國(guó),Java的引進(jìn)與開(kāi)發(fā)起步早,發(fā)展水平基本與世界同步。目前,Sun公司已在中國(guó)建成了由5個(gè)授權(quán)中心、20多個(gè)Internet/Intarnet Java解決方案中心和10所Java大學(xué)、若干培訓(xùn)中心組成的三級(jí)結(jié)構(gòu)。全面推動(dòng)Java在中國(guó)的普及、應(yīng)用、研究、開(kāi)發(fā),培養(yǎng)了數(shù)以十萬(wàn)計(jì)的Java開(kāi)發(fā)人員。此外,Sun還牽頭成立了中外軟件廠商的開(kāi)發(fā)聯(lián)盟。
在中國(guó),Java的開(kāi)發(fā)可以說(shuō)是“人才濟(jì)濟(jì),成果累累”。如清華大學(xué)王克宏教授帶領(lǐng)的課題組面向全國(guó),自96年開(kāi)始舉辦了多期Java培訓(xùn)班和講座,開(kāi)設(shè)了數(shù)期本科生、研究生Java課程,出版了“Java系列叢書(shū)”10余冊(cè) ,承擔(dān)了國(guó)家“九五”攻關(guān)項(xiàng)目“基于Java技術(shù)的交互式遠(yuǎn)程教學(xué)系統(tǒng)”,并與日本就Java開(kāi)發(fā)進(jìn)行了國(guó)際合作,成績(jī)斐然;東大阿派下屬的寶鋼東軟軟件技術(shù)研究中心是國(guó)內(nèi)是首屈一指的Java研發(fā)骨干企業(yè),該中心從95年起就開(kāi)始了Java的研發(fā),目前,已掌握了Personal Java的核心移植技術(shù),并成功地將JVM移植到汽車導(dǎo)航平臺(tái)。此外,他們還開(kāi)發(fā)出支持Jini協(xié)議的即插即用網(wǎng)絡(luò)打印機(jī)軟件,以及一套Jini信息家電網(wǎng)絡(luò)的可視化演示環(huán)境,完成了基于JavaBeans的組件化軟件開(kāi)發(fā)及運(yùn)行支持環(huán)境等多項(xiàng)成果;在臺(tái)灣,22家知名計(jì)算機(jī)公司成立了“Java聯(lián)盟”,并在臺(tái)北建立了“Java開(kāi)發(fā)中心”,新竹建立了“Java語(yǔ)言實(shí)驗(yàn)室”;在香港,舉行了全島Java杯比賽,掀起了學(xué)習(xí)Java的熱潮 。Java的浪潮洶涌澎湃,席卷全球!
4. Java技術(shù)
Java發(fā)展至今日,已不僅僅是一種編程語(yǔ)言,實(shí)際上已形成了一門(mén)技術(shù).其內(nèi)容包括:
1)Java軟件包
Java語(yǔ)言及其編程技術(shù)、JavaOS、Java開(kāi)發(fā)環(huán)境與工具、Java語(yǔ)言的各種軟件包、數(shù)據(jù)庫(kù)接口JDBC等。
2)Java虛擬機(jī)及其規(guī)范
3) Java嵌入技術(shù)(Java芯片)
已推出的有Java戒指、Java卡等。1999年8月2日,Sun公司宣布名為MAJC的專門(mén)為Java語(yǔ)言設(shè)計(jì)的的芯片優(yōu)化研制成功,欲與Intel試比高低。該芯片在設(shè)計(jì)時(shí)采用了模塊式高性能計(jì)算引擎,實(shí)質(zhì)為一種芯片級(jí)并行處理機(jī),能以更有效的方式分解計(jì)算任務(wù),特別適合處理多媒體數(shù)據(jù)。Sun公司希望通過(guò)MAJC芯片的發(fā)布催生出一個(gè)基于Java語(yǔ)言的微處理器家族,與Intel公司競(jìng)爭(zhēng)。設(shè)想中的Java處理器將應(yīng)用在從低價(jià)消費(fèi)電子產(chǎn)品到高端因特網(wǎng)服務(wù)器領(lǐng)域。
4)Java計(jì)算
基于Java技術(shù)的企業(yè)Internet/Intranet信息系統(tǒng)以及其他應(yīng)用系統(tǒng)。
5)Jini技術(shù)
1999年初正式發(fā)布后,立刻得到業(yè)界的廣泛支持。Jini的出現(xiàn)為Java網(wǎng)絡(luò)連接提供了公共標(biāo)準(zhǔn),使得任何Java設(shè)備都可以連入網(wǎng)絡(luò)中被自動(dòng)識(shí)別,并可充分利用網(wǎng)絡(luò)上已有的各種資源。它把網(wǎng)絡(luò)上的各類設(shè)備(包括消費(fèi)類電子設(shè)備如移動(dòng)電話、PDA、DTV、HPC、NC、游戲機(jī)、電冰箱、智能卡等等)和各種軟件組合成一個(gè)單一、動(dòng)態(tài)的分布式系統(tǒng),使網(wǎng)絡(luò)更易于操縱、易于管理,具有更高的可配置性。Jini將使網(wǎng)絡(luò)具有自發(fā)性,它的出現(xiàn)大大擴(kuò)展了“計(jì)算”和“計(jì)算機(jī)”的含義,極大地簡(jiǎn)化了網(wǎng)絡(luò)操作,對(duì)家庭用戶來(lái)說(shuō),使用網(wǎng)上設(shè)備即插即用,就像使用電話一樣方便。Java和Jini 不僅可以不依賴于Windows為代表的操作系統(tǒng),而且引導(dǎo)著信息產(chǎn)業(yè)的潮流,使Sun公司能在未來(lái)的、非PC類電子產(chǎn)品的數(shù)字化市場(chǎng)中強(qiáng)占制高點(diǎn)。
6)Jiro平臺(tái)
異質(zhì)網(wǎng)絡(luò)環(huán)境中安裝的存儲(chǔ)系統(tǒng)的多樣性和分布性,給存儲(chǔ)管理帶來(lái)了巨大的挑戰(zhàn)。用戶和開(kāi)發(fā)人員都希望能有一種技術(shù),能更好地促進(jìn)企業(yè)存儲(chǔ)管理方案的開(kāi)發(fā)。而Jiro平臺(tái)正是解決此問(wèn)題的革命性方案。Jiro平臺(tái)實(shí)現(xiàn)了Java和Jini 技術(shù),它是一個(gè)便于用戶管理異質(zhì)網(wǎng)絡(luò)上由各種服務(wù)器、存儲(chǔ)和設(shè)備組成的混合環(huán)境的開(kāi)放式存儲(chǔ)管理平臺(tái)。它對(duì)操作系統(tǒng)是中立的。Jiro為跨異質(zhì)存儲(chǔ)局域網(wǎng)(SAN)的管理服務(wù)和設(shè)備提供了一個(gè)開(kāi)放平臺(tái),允許服務(wù)器、存儲(chǔ)和聯(lián)網(wǎng)設(shè)備在異質(zhì)網(wǎng)絡(luò)環(huán)境中無(wú)縫地協(xié)同工作。Jiro平臺(tái)為開(kāi)發(fā)者帶來(lái)的好處有:
允許開(kāi)發(fā)者利用各種實(shí)現(xiàn)管理存儲(chǔ)網(wǎng)絡(luò)的目標(biāo)功能創(chuàng)建應(yīng)用;
提供了一個(gè)可以在各種應(yīng)用、服務(wù)和設(shè)備之間交互操作的組件模型;
允許設(shè)備易被增加、刪除;
允許應(yīng)用或服務(wù)被自動(dòng)更新。
1999年7月,Sun發(fā)布了正式的Jiro規(guī)范草案,供公眾討論、修改。目前,Jiro平臺(tái)的團(tuán)體成員已超過(guò)25家,支持Jiro平臺(tái)的廠商超過(guò)300家。有眼光的廠商紛紛加入到這些組行列,從而加快了Jiro的發(fā)展。
結(jié)語(yǔ)
Java自問(wèn)世以來(lái),以其得天獨(dú)厚的優(yōu)勢(shì),在IT業(yè)界掀起了研究、開(kāi)發(fā)它的浪潮,顯示了“鵬程萬(wàn)里”的美好前景。作為一種與底層硬件無(wú)關(guān)的、“編寫(xiě)一次,到處運(yùn)行”的高級(jí)語(yǔ)言和計(jì)算平臺(tái),Java天生就具有將網(wǎng)絡(luò)上的各個(gè)平臺(tái)連成一體的能力,真正實(shí)現(xiàn)了“網(wǎng)絡(luò)就是計(jì)算機(jī)”的理念。以Java為代表的網(wǎng)絡(luò)的成長(zhǎng),改變了我們的聯(lián)系方式、生活方式、學(xué)習(xí)方式和經(jīng)營(yíng)方式。它的來(lái)到使我們目睹了一場(chǎng)類似印刷術(shù)的重大變革。毫無(wú)疑問(wèn),它將影響人類社會(huì)的發(fā)展,這就是:Java加速人類進(jìn)入網(wǎng)絡(luò)時(shí)代!
Java是當(dāng)今IT產(chǎn)業(yè)和人類文明的創(chuàng)新和希望!
java畢業(yè)論文范文篇三:
__ 大 學(xué)
畢業(yè)設(shè)計(jì)(論文)
題目: 基于Java技術(shù)的網(wǎng)上交易系統(tǒng)的開(kāi)發(fā)
學(xué) 院:
專 業(yè):
班 級(jí):
學(xué) 號(hào): ___
學(xué)生姓名: __
指導(dǎo)老師: __
2009年6月9日
摘 要
隨著信息高速公路的建立,Internet的普及,網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展,人類社會(huì)已經(jīng)進(jìn)入了一個(gè)信息化社會(huì)。
電子商務(wù)指利用簡(jiǎn)單、快捷、低成本的電子通訊方式,買(mǎi)賣(mài)雙方通過(guò)網(wǎng)絡(luò)進(jìn)行各種商貿(mào)活動(dòng)的一種商業(yè)交易模式。隨著互聯(lián)網(wǎng)的發(fā)展,以及人們消費(fèi)觀念和生活方式的改變,這種新型的商業(yè)模式逐漸融入了人們的生活中。通過(guò)企業(yè)的門(mén)戶網(wǎng)站,人們可以足不出戶的尋找自己所需的物品,通過(guò)對(duì)不同虛擬商城的訪問(wèn),“顧客”可以找出性價(jià)比最高的商品,自己有極大地選擇空間;通過(guò)下訂單,你可以很快得到自己想要的物品,這給顧客節(jié)省很多時(shí)間和精力;對(duì)于廠家來(lái)說(shuō),可以極大地降低庫(kù)存風(fēng)險(xiǎn),可根據(jù)客戶需要,按需采購(gòu)和生產(chǎn),大大地提高了效益。
本畢業(yè)設(shè)計(jì)的內(nèi)容是設(shè)計(jì)并且實(shí)現(xiàn)一個(gè)基于web技術(shù)的在線交易系統(tǒng)。系統(tǒng)主要以j2EE作為開(kāi)發(fā)基礎(chǔ),使用了struts+spring+hibernate等多種協(xié)議或技術(shù),用eclipse作為開(kāi)發(fā)工具,以Macromedia公司的Dreamweaver作為界面美化工具。基本實(shí)現(xiàn)了網(wǎng)上交易系統(tǒng)應(yīng)有的主要功能模塊,包括:管理員的登錄,管理和維護(hù);用戶注冊(cè)、登錄、注銷,個(gè)人信息的查詢、修改;商品管理,購(gòu)物車管理,訂單管理。該系統(tǒng)界面簡(jiǎn)單、操作方便,容易維護(hù)。
關(guān)鍵詞:電子商務(wù) j2EE struts + spring + hibernate
Development of an Online Trading System Based on Java Technology
Abstract
With the establishment of high way of information, the popularization of Internet and the rapid development of network technology, human society has entered a society of information.
E-commerce is a new business transaction, through which both buyers and sellers can use a simple, fast and low-cost means of electronic and communication. With the development of the Internet, and people's consumption idea and the way of life changing, this new business model has gradually integrated into people's lives. Through the portal site of enterprise, people can look up the goods which they required without going out; through the different virtual mall visit, people can find the most cost-effective products, and they have much self-choice; through orders, people can find the things which they need, and quickly get the products which they ordered. This new business modle can save a lot of time and energy for custormers, and greatly reduce inventory risk of manufaturers. The manufactures can procure and produce according to customer needs, this was called on-demand procurement and production, which greatly improved the efficiency.
The subject of this graduation project is designing a web-based online trading system. This system mainly uses j2EE as the basis of development, and also use the struts + spring + hibernate technologies and other orders. This project use eclipse as the development tools, and Macromedia's Dreamweaver as the interfaces landscaping tools. The basic functions of an online trading system have been implemented, which include administrator login, management and maintenance; user registration, login, write-offs personal information enquiries and amendments; commodity management, cart management, order management. Interface of the system is simple, it can be used and maintained easily.
Key words: E-commerce j2EE struts + spring + hibernate
6
目錄
摘 要
Abstract
第一章 引言
1.1 課題背景
1.2 課題目的和意義
1.3 本文結(jié)構(gòu)
第二章 系統(tǒng)應(yīng)用的關(guān)鍵技術(shù)
2.1 JSP技術(shù)介紹
2.1.1 JSP的概述
2.1.3 JSP的強(qiáng)勢(shì)與劣勢(shì)
2.1.4 JSP與ASP的比較
2.2 Java組件JavaBeans
2.2.1 什么是JavaBeans
2.2.2 JSP與JavaBeans的關(guān)系
2.3 J2EE概述
2.4關(guān)于Struts
2.4.1 Struts簡(jiǎn)介
2.4.2 Struts的主要功能
2.5 關(guān)于Spring
2.5.1 Spring簡(jiǎn)介
2.5.2 為什么需要Spring
2.5.3 Spring帶給我們什么
2.6 關(guān)于Hibernate
2.6.1為什么引入hibernate
2.6.2使用Hibernate的好處
2.6.3 Hibernate的工作原理
2.7 Mysql
2.7.1 mysql的特點(diǎn)
2.7.2 mysql的安裝和配置(部分截圖)
2.8 Tomcat服務(wù)器
2.8.1 Tomcat 服務(wù)器簡(jiǎn)介
2.8.2 Tomcat的特點(diǎn)
2.8.3 Tomcat的優(yōu)勢(shì)
2.8.4 Tomcat服務(wù)器的安裝和配置
小結(jié)
第三章 系統(tǒng)需求分析和總體設(shè)計(jì)
3.1 系統(tǒng)功能需求
3.2 系統(tǒng)角色及其功能分析
3.2.1 系統(tǒng)的3個(gè)角色:
3.2.2 系統(tǒng)角色的功能
3.3 總體設(shè)計(jì)思想概述
3.4 數(shù)據(jù)庫(kù)設(shè)計(jì)
3.4.1 E-R圖
3.4.2數(shù)據(jù)表的設(shè)計(jì)
3.5 系統(tǒng)的類設(shè)計(jì)
3.5.1 DAO類設(shè)計(jì)
3.5.2 POJO類設(shè)計(jì)(部分)
3.5.3 過(guò)濾器類設(shè)計(jì)
3.5.4 監(jiān)聽(tīng)器類設(shè)計(jì)
3.6系統(tǒng)的用例圖
3.6.1 總體用例分析
3.6.2 用戶管理用例分析
3.6.3 購(gòu)物車管理用例分析
小結(jié)
第四章 系統(tǒng)的詳細(xì)設(shè)計(jì)
4.1 數(shù)據(jù)庫(kù)與POJO映射的實(shí)現(xiàn)
4.2 主要模塊的設(shè)計(jì)說(shuō)明與界面
4.2.1用戶管理模塊
4.2.2購(gòu)物車管理模塊
4.2.3 定單模塊
4.3 系統(tǒng)的測(cè)試
小結(jié)
第五章 總結(jié)與展望
5.1 工作總結(jié)
5.2 后續(xù)工作展望
參考文獻(xiàn)
附錄
致謝
第一章 引言
1.1 課題背景
隨著當(dāng)今世界進(jìn)入信息時(shí)代,Internet的飛速發(fā)展和在全球的普及給人類生活帶來(lái)革命性的改變。Internet將傳統(tǒng)意義上的物理空間轉(zhuǎn)變成電子空間,把人們帶入了一個(gè)網(wǎng)絡(luò)社會(huì)中。網(wǎng)絡(luò)時(shí)代的到來(lái),帶給人們的不只是快捷、方便,它帶來(lái)的是劃時(shí)代的進(jìn)步。在網(wǎng)絡(luò)大家族中,電子商務(wù)則是一個(gè)熱點(diǎn),它的發(fā)展速度之快遠(yuǎn)遠(yuǎn)超過(guò)我們的想象,普及速度之快令人難以置信。我們完全有理由相信,全球性的電子商務(wù)熱潮必將一浪高于一浪[1]。
電子商務(wù)一個(gè)最基本體現(xiàn)就是電子購(gòu)物網(wǎng)站,從一定程度上講它就是網(wǎng)上超市,也就是一種網(wǎng)上交易?!熬W(wǎng)”字意味著它具有信息時(shí)代的快捷方便等特征。事實(shí)上電子商務(wù)的出現(xiàn),給消費(fèi)者的地位,消費(fèi)觀念帶來(lái)了重要的變化。網(wǎng)上交易系統(tǒng)正是應(yīng)這種變化而悄然崛起,并以驚人的速度發(fā)展著。通過(guò)網(wǎng)上交易系統(tǒng),人們可以足不出戶的尋找自己所需的物品,通過(guò)對(duì)不同虛擬商城的訪問(wèn),“顧客”可以找出性價(jià)比最高的商品,自己有極大地選擇空間,通過(guò)下訂單,你可以很快得到自己想要的物品,這給顧客節(jié)省很多時(shí)間和精力,對(duì)于廠家來(lái)說(shuō),可以極大的降低庫(kù)存風(fēng)險(xiǎn),根據(jù)客戶需要,按需生產(chǎn)和采購(gòu),大大的提高了效益。
1.2 課題目的和意義
自從電子商務(wù)出現(xiàn)在人們的視野中,電子商務(wù)就在全世界范圍內(nèi)受到了格外的關(guān)注,并得到了迅速的發(fā)展。從實(shí)用角度看,目前電子商務(wù)網(wǎng)站的普遍存在是購(gòu)買(mǎi)者難以找到所希望購(gòu)買(mǎi)的商品甚至用戶在耗費(fèi)很大的經(jīng)歷與時(shí)間后即使找到了自己想要的產(chǎn)品,最后卻由于各種原因而放棄購(gòu)買(mǎi)。很多報(bào)道指出,推銷商們普遍對(duì)目前的網(wǎng)絡(luò)行銷感到失望,盡管如此,電子商務(wù)無(wú)疑是目前最好的在線商品展示的媒體和工具。然而,網(wǎng)上產(chǎn)品展示的目的不僅僅是展示產(chǎn)品,而更重要的是通過(guò)讓客戶更多地了解產(chǎn)品而提高產(chǎn)品的購(gòu)買(mǎi)率。因此,電子商務(wù)目前所面臨的挑戰(zhàn)之一就是網(wǎng)站的設(shè)計(jì),如何使得網(wǎng)頁(yè)能夠有效地展示自己的產(chǎn)品,同時(shí)方便用戶的使用,使用戶以愉悅的心情選購(gòu)稱心如意的商品。
本系統(tǒng)的目的和意義就是應(yīng)上述挑戰(zhàn)而嘗試為用戶提供一個(gè)操作簡(jiǎn)單方便的網(wǎng)上交易系統(tǒng)。利用本系統(tǒng),用戶可以自由地瀏覽商品,注冊(cè)成為網(wǎng)站會(huì)員,選擇商品加入自己的購(gòu)物車,而后生成訂單,實(shí)現(xiàn)網(wǎng)上購(gòu)物。
1.3 本文結(jié)構(gòu)
本文共分五個(gè)章節(jié),系統(tǒng)地闡述了系統(tǒng)開(kāi)發(fā)的全過(guò)程。
第一章,主要介紹了開(kāi)發(fā)的背景、目的和意義。
第二章,主要介紹了本系統(tǒng)所用到的關(guān)鍵技術(shù)和工具,為下一步的設(shè)計(jì)的設(shè)計(jì)奠定基礎(chǔ)。
第三章,主要對(duì)系統(tǒng)進(jìn)行需求分析并進(jìn)行總體設(shè)計(jì)。需求分析階段通過(guò)分析系統(tǒng)的功能模塊的劃分以及角色的劃分,為系統(tǒng)的總體設(shè)計(jì)提供依據(jù)??傮w設(shè)計(jì)階段通過(guò)對(duì)數(shù)據(jù)庫(kù)、過(guò)濾器、監(jiān)聽(tīng)器、和實(shí)體類的設(shè)計(jì),以及各個(gè)模塊用例圖的描述,形成了開(kāi)發(fā)的整體思路。
第四章,主要介紹了主要模塊的設(shè)計(jì)與實(shí)現(xiàn),并給出關(guān)鍵源代碼和最終的效果圖。
第五章,主要是對(duì)這次畢業(yè)設(shè)計(jì)的總結(jié)和對(duì)后續(xù)工作的展望。
第二章 系統(tǒng)應(yīng)用的關(guān)鍵技術(shù)
2.1 JSP技術(shù)介紹
2.1.1 JSP的概述
JSP(Java Server Pages)是由Sun Microsystems公司倡導(dǎo)、許多公司參與一起建立的一種動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)標(biāo)準(zhǔn),類似于其他技術(shù)標(biāo)準(zhǔn),如ASP,PHP等,主要用于開(kāi)發(fā)動(dòng)態(tài)網(wǎng)頁(yè)內(nèi)容。
JSP是新一代的動(dòng)態(tài)內(nèi)容編程技術(shù),它繼承了Java技術(shù)的“一次編寫(xiě),隨處運(yùn)行”的特性,允許Web開(kāi)發(fā)人員開(kāi)發(fā)和維護(hù)與平臺(tái)無(wú)關(guān),信息豐富動(dòng)態(tài)的Web頁(yè)面,包括HTML,DHTML,_HTML和_ML,它能使Web開(kāi)發(fā)人員輕易搭建網(wǎng)絡(luò)平臺(tái),建立起功能強(qiáng)大的Web網(wǎng)站。JSP可以把用戶界面從內(nèi)容層次中分離出來(lái),使得Web開(kāi)發(fā)人員不必修改在底層的動(dòng)態(tài)內(nèi)容,就可以修改整體的頁(yè)面布局。
2.1.2 JSP的運(yùn)行機(jī)制
JSP文檔被復(fù)制到Web服務(wù)器的文檔目錄中。當(dāng)有人請(qǐng)求這個(gè)文檔時(shí),服務(wù)器識(shí)別出這個(gè)帶有.jsp擴(kuò)展名的文檔,并意識(shí)到需要做特殊處理。第一次請(qǐng)求這個(gè)文檔時(shí),它被編譯成一個(gè)servlet對(duì)象,并存儲(chǔ)在內(nèi)存中,然后輸出內(nèi)容回送給發(fā)出請(qǐng)求的客戶機(jī)。第一請(qǐng)求之后,只要有請(qǐng)求到來(lái),服務(wù)器將進(jìn)行檢查,看看這個(gè)文件是否做過(guò)改動(dòng),如果沒(méi)有變化,服務(wù)器調(diào)用先前編譯過(guò)的servlet對(duì)象。
JSP請(qǐng)求的步驟[2]如圖2-1所示。
(1)客戶機(jī)請(qǐng)求一個(gè)JSP頁(yè)面。
(2)JSP引擎編譯該JSP成一個(gè)servlet。
Web
瀏覽器
JSP頁(yè)面
生成的servlet
編譯的servlet
Web服務(wù)器
2.第一次編譯
3.第二次編譯
1.請(qǐng)求
4.響應(yīng)
圖2-1 一個(gè)JSP的請(qǐng)求步驟
(3)生成的servlet被編譯并裝載。
(4)編譯的servlet服務(wù)請(qǐng)求并把一響應(yīng)發(fā)送回客戶機(jī)。
JSP主要是針對(duì)Java程序處理不熟悉的人設(shè)計(jì)的。與Servlet相比,JSP有如下兩個(gè)優(yōu)勢(shì):方便與HTML混合;在開(kāi)發(fā)、測(cè)試方面比Servlet方便。
2.1.3 JSP的強(qiáng)勢(shì)與劣勢(shì)
JSP的強(qiáng)勢(shì):
(1)可移植性。JSP是用Java開(kāi)發(fā)的,因此它是可移植的,可以一處編寫(xiě),隨處運(yùn)行,支持多平臺(tái)。
(2)有效性。JSP的初始化代碼僅在Web服務(wù)器第一次加載時(shí)執(zhí)行一次。一旦加載,在處理一個(gè)新的請(qǐng)求時(shí),只須調(diào)用一個(gè)新的服務(wù)方法。與處理每個(gè)請(qǐng)求都要全部加載一個(gè)完整的可執(zhí)行程序相比,這是一個(gè)相當(dāng)有效的技術(shù)。
(3)強(qiáng)大的可伸縮性和可擴(kuò)充性。它能夠在面向?qū)ο蟮恼Z(yǔ)言(Java)中進(jìn)行開(kāi)發(fā),并可以在現(xiàn)有對(duì)象基礎(chǔ)上進(jìn)行擴(kuò)展,形成新的對(duì)象,從而更好地滿足用戶的需求。
(4)多樣化和功能強(qiáng)大的開(kāi)發(fā)工具支持。Java已經(jīng)有了許多非常優(yōu)秀的開(kāi)發(fā)工具,而且許多可以免費(fèi)得到,并且其中許多已經(jīng)可以順利的運(yùn)行于多種平臺(tái)之下。
(5)Java Servlet是一種開(kāi)發(fā)Web應(yīng)用的理想框架。JSP以Servlet技術(shù)為基礎(chǔ),又在許多方面作了改進(jìn)。利用跨平臺(tái)的JavaBeans組件,JSP為分離處理邏輯與顯示樣式提供了卓越的解決方案。
JSP的劣勢(shì):
(1)為了跨平臺(tái)的功能,為了極度的伸縮能力,極大的增加了產(chǎn)品的復(fù)雜性,Java系統(tǒng)中包括JRE,JDK,J2EE,EJB等多種產(chǎn)品,這就需要大量的學(xué)習(xí)和培訓(xùn)才能掌握它們,將它們有效地搭配在一起,靈活地加以運(yùn)用。
(2)Java的運(yùn)行速度快是由于用戶將class常駐內(nèi)存,這樣使用的內(nèi)存空間就比較大。另一方面,它還需要硬盤(pán)空間來(lái)存儲(chǔ)一系列.Java文件和.class文件以及對(duì)應(yīng)的版本文件。
(3)JSP只有對(duì)Java相當(dāng)熟悉的人才能用得很好。
(4)JSP程序調(diào)試?yán)щy。
2.1.4 JSP與ASP的比較
JSP與ASP(Active Server Page)兩者都是常用的動(dòng)態(tài)網(wǎng)頁(yè)技術(shù),也都是可以嵌入HTML中的程序,但兩者是有著本質(zhì)的不同,主要從以下幾個(gè)方面對(duì)其進(jìn)行比較:
(1)Web服務(wù)器的支持:大多數(shù)通用的 Web服務(wù)器如:Apache、Netscape和Microsoft IIS都支持JSP頁(yè)面,只有微軟本身的Microsoft IIS和Personal Web Server可以支持ASP。
(2)平臺(tái)的支持:JSP具有平臺(tái)獨(dú)立性,只要是一般的Java程序可以運(yùn)行的平臺(tái),都支持JSP程序。Windows平臺(tái)可以很好的支持ASP,但ASP對(duì)于基于Win32逐漸模型的依賴,使得它難于一直到其它平臺(tái)上。
(3)組件模型:JSP是建立在可重用的、跨平臺(tái)的組件(如:JavaBeans、Enterprises JavaBeans和用戶定制的標(biāo)簽庫(kù)等組件)之上的,而ASP使用的是基于Win32的COM組件模型。
(4)腳本語(yǔ)言:JSP可以使用Java編程語(yǔ)言或JavaScript作為腳本語(yǔ)言,而ASP使用VBScript或Jscript作為腳本語(yǔ)言。
(5)安全性:JSP使用Java安全模型,而ASP使用Windows NT的安全結(jié)構(gòu)。
(6)與Access數(shù)據(jù)庫(kù)的連接:JSP使用JDBC建立與Access數(shù)據(jù)庫(kù)的連接,而ASP對(duì)Access數(shù)據(jù)庫(kù)使用Data Active Objects。
(7)用戶定制的標(biāo)簽:JSP可以使用用戶定制標(biāo)簽庫(kù)進(jìn)行擴(kuò)充,而ASP中沒(méi)有用戶定制標(biāo)簽庫(kù),ASP是不能擴(kuò)充的[3]。
2.2 Java組件JavaBeans
2.2.1 什么是JavaBeans
JavaBeans事實(shí)上有三層含義。首先,JavaBeans是一種規(guī)范,一種在Java(包括JSP)中使用可重復(fù)使用的Java組件的技術(shù)規(guī)范。其次,JavaBeans是一個(gè)Java的類,一般來(lái)說(shuō),這樣的Java類將對(duì)應(yīng)于一個(gè)獨(dú)立的.java文件,在絕大多數(shù)情況下,這應(yīng)該是一個(gè)public類型的類。最后,當(dāng)JavaBeans這樣的一個(gè)Java類在我們的具體的Java程序中被示例之后,我們有時(shí)也會(huì)將這樣的一個(gè)JavaBeans的實(shí)例稱之為JavaBeans[4]。
2.2.2 JSP與JavaBeans的關(guān)系
使用JSP技術(shù),Web頁(yè)面開(kāi)發(fā)人員可以使用HTML和_ML標(biāo)識(shí)來(lái)設(shè)計(jì)和格式化最終頁(yè)面。使用JSP標(biāo)識(shí)或者小腳本生成頁(yè)面上的動(dòng)態(tài)內(nèi)容。生成內(nèi)容的邏輯被封裝在JSP標(biāo)識(shí)和JavaBeans組件中,并且捆綁在小腳本中,所有的腳本在服務(wù)器端運(yùn)行。核心邏輯封裝在標(biāo)識(shí)和Beans中,可以方便頁(yè)面設(shè)計(jì)者編輯和使用JSP頁(yè)面。
在服務(wù)器端,JSP引擎解釋JSP標(biāo)識(shí)和小腳本生成所請(qǐng)求的內(nèi)容(例如,通過(guò)訪問(wèn)JavaBeans組件,使用JDBC技術(shù)訪問(wèn)數(shù)據(jù)庫(kù)),并且將結(jié)果以HTML(或_ML)頁(yè)面的形式發(fā)送回瀏覽器。
絕大多數(shù)JSP頁(yè)面依賴于可重用的跨平臺(tái)的足見(jiàn)(JavaBeans或者Enterprise JavaBeans組件)來(lái)執(zhí)行應(yīng)用程序所要求的復(fù)雜的處理。這樣的好處是開(kāi)發(fā)人員能夠共享和交換執(zhí)行普通操作的組件,加速了總體開(kāi)發(fā)過(guò)程。因此,基于Web的較為復(fù)雜的應(yīng)用程序(如電子商務(wù)網(wǎng)站或網(wǎng)上MIS),JSP的復(fù)雜架構(gòu)必須由JavaBeans達(dá)成。
2.3 J2EE概述
J2EE(Java 2 Platform Enterprise Edition)是使用Java技術(shù)開(kāi)發(fā)企業(yè)級(jí)應(yīng)用的一種事實(shí)上的工業(yè)標(biāo)準(zhǔn)(Sun公司出于其自身利益的考慮,至今沒(méi)有將Java及其相關(guān)技術(shù)納入標(biāo)準(zhǔn)化組織的體系),它是Java技術(shù)不斷適應(yīng)和促進(jìn)企業(yè)級(jí)應(yīng)用過(guò)程中的產(chǎn)物。目前,Java平臺(tái)有三個(gè)版本:適用于小型設(shè)備和智能卡的J2ME(Java 2 Platform Micro Edition)、適用于桌面系統(tǒng)的J2SE(Java 2 Platform Standard Edition)和適用于企業(yè)級(jí)應(yīng)用的J2EE(Java 2 Platform Enterprise Edition)。Sun推出J2EE的目的是為了克服傳統(tǒng)Client/Server模式的弊病,迎合Browser/Server架構(gòu)的潮流,為應(yīng)用Java技術(shù)開(kāi)發(fā)服務(wù)器端應(yīng)用提供一個(gè)平臺(tái)獨(dú)立的、可移植的、多用戶的、安全的和基于標(biāo)準(zhǔn)的企業(yè)級(jí)平臺(tái),從而簡(jiǎn)化企業(yè)應(yīng)用的開(kāi)發(fā)、管理和部署。J2EE是一個(gè)標(biāo)準(zhǔn),而不是一個(gè)現(xiàn)成的產(chǎn)品。各個(gè)平臺(tái)開(kāi)發(fā)商按照J(rèn)2EE規(guī)范分別開(kāi)發(fā)了不同的J2EE應(yīng)用服務(wù)器,J2EE應(yīng)用服務(wù)器是J2EE企業(yè)級(jí)應(yīng)用的部署平臺(tái)。由于它們都遵循了J2EE規(guī)范,因此,使用J2EE技術(shù)開(kāi)發(fā)的企業(yè)級(jí)應(yīng)用可以部署在各種J2EE應(yīng)用服務(wù)器上。為了推廣并規(guī)范化使用J2EE架構(gòu)企業(yè)級(jí)應(yīng)用的體系架構(gòu),Sun同時(shí)給出了一個(gè)建議性的J2EE應(yīng)用設(shè)計(jì)模型:J2EE Blueprints。J2EE Blueprints提供了實(shí)施J2EE企業(yè)級(jí)應(yīng)用的體系架構(gòu)、設(shè)計(jì)模式和相關(guān)的代碼,通過(guò)應(yīng)用J2EE Blueprints所描述的體系模型,能夠部分簡(jiǎn)化架構(gòu)企業(yè)級(jí)應(yīng)用這項(xiàng)復(fù)雜的工作。J2EE Blueprints是開(kāi)發(fā)人員設(shè)計(jì)和優(yōu)化J2EE組件的基本原則,同時(shí)為圍繞開(kāi)發(fā)工作進(jìn)行職能分工給出了指導(dǎo)性策略,以幫助應(yīng)用開(kāi)發(fā)設(shè)計(jì)人員合理地分配技術(shù)資源。
J2EE的優(yōu)勢(shì)主要有以下幾點(diǎn):
(1)高效的開(kāi)發(fā): J2EE允許公司把一些通用的、很繁瑣的服務(wù)端任務(wù)交給中間件供應(yīng)商去完成這樣開(kāi)發(fā)人員可以集中精力在如何創(chuàng)建商業(yè)邏輯上,相應(yīng)地縮短了開(kāi)發(fā)時(shí)間。高級(jí)中間件供應(yīng)商提供以下這些復(fù)雜的中間件服務(wù):狀態(tài)管理服務(wù) -- 讓開(kāi)發(fā)人員寫(xiě)更少的代碼,不用關(guān)心如何管理狀態(tài),這樣能夠更快地完成程序開(kāi)發(fā)。
(2)持續(xù)性服務(wù) : 讓開(kāi)發(fā)人員不用對(duì)數(shù)據(jù)訪問(wèn)邏輯進(jìn)行編碼就能編寫(xiě)應(yīng)用程序,能生成更輕巧,與數(shù)據(jù)庫(kù)無(wú)關(guān)的應(yīng)用程序,這種應(yīng)用程序更易于開(kāi)發(fā)與維護(hù)。分布式共享數(shù)據(jù)對(duì)象CACHE服務(wù),讓開(kāi)發(fā)人員編制高性能的系統(tǒng),極大提高整體部署的伸縮性。
(3)支持異構(gòu)環(huán)境: J2EE能夠開(kāi)發(fā)部署在異構(gòu)環(huán)境中的可移植程序?;贘2EE的應(yīng)用程序不依賴任何特定操作系統(tǒng)、中間件、硬件。因此設(shè)計(jì)合理的基于J2EE的程序只需開(kāi)發(fā)一次就可部署到各種平臺(tái)。這在典型的異構(gòu)企業(yè)計(jì)算環(huán)境中是十分關(guān)鍵的。J2EE標(biāo)準(zhǔn)也允許客戶訂購(gòu)與J2EE兼容的第三方的現(xiàn)成的組件,把他們部署到異構(gòu)環(huán)境中,節(jié)省了由自己制訂整個(gè)方案所需的費(fèi)用。
(4)可伸縮性:企業(yè)必須要選擇一種服務(wù)器端平臺(tái),這種平臺(tái)應(yīng)能提供極佳的可伸縮性去滿足那些在他們系統(tǒng)上進(jìn)行商業(yè)運(yùn)作的大批新客戶。基于J2EE平臺(tái)的應(yīng)用程序可被部署到各種操作系統(tǒng)上。例如可被部署到高端UNI_與大型機(jī)系統(tǒng),這種系統(tǒng)單機(jī)可支持64至256個(gè)處理器。(這是NT服務(wù)器所望塵莫及的)J2EE領(lǐng)域的供應(yīng)商提供了更為廣泛的負(fù)載平衡策略。能消除系統(tǒng)中的瓶頸,允許多臺(tái)服務(wù)器集成部署。這種部署可達(dá)數(shù)千個(gè)處理器,實(shí)現(xiàn)可高度伸縮的系統(tǒng),滿足未來(lái)商業(yè)應(yīng)用的需要。
(5)穩(wěn)定的可用性: 一個(gè)服務(wù)器端平臺(tái)必須能全天候運(yùn)轉(zhuǎn)以滿足公司客戶、合作伙伴的需要。這是實(shí)時(shí)性很強(qiáng)商業(yè)系統(tǒng)理想的選擇[5]。
2.4關(guān)于Struts
2.4.1 Struts簡(jiǎn)介
Struts已逐步越來(lái)越多運(yùn)用于商業(yè)軟件,是一種非常優(yōu)秀的J2EE MVC實(shí)現(xiàn)方式。Struts用Java Servlet/JavaServer Pages技術(shù),開(kāi)發(fā)Web應(yīng)用程序的開(kāi)放源碼的framework。
2.4.2 Struts的主要功能
(1) 包含一個(gè)controller servlet,能將用戶的請(qǐng)求發(fā)送到相應(yīng)的Action對(duì)象。
(2)JSP自由tag庫(kù),并且在controller servlet中提供關(guān)聯(lián)支持,幫助開(kāi)發(fā)員創(chuàng)建交互式表單應(yīng)用。
(3)提供了一系列實(shí)用對(duì)象:_ML處理、通過(guò)Java reflection APIs自動(dòng)處理JavaBeans屬性、國(guó)際化的提示和消息。Struts項(xiàng)目的目標(biāo)是為創(chuàng)建Java web應(yīng)用提供一個(gè)開(kāi)放源代framework。Struts framework的內(nèi)核是基于例如Java Servlets,
JavaBeans, ResourceBundles, 和 _ML,以及各種 Jakarta Commons包的標(biāo)準(zhǔn)技術(shù)的靈活的控制層。Struts提供了它自身的控制器組件,并整合了其他技術(shù),以提供模型和視圖。Struts已逐步越來(lái)越多運(yùn)用于商業(yè)軟件,是一種非常優(yōu)秀的J2EE MVC實(shí)現(xiàn)方式[6]。
2.4.3 Struts工作原理
MVC(Model-View-Controller),是一種常用的設(shè)計(jì)模式。MVC 減弱了業(yè)務(wù)邏輯接口和數(shù)據(jù)接口之間的耦合,以及讓視圖層更富于變化,MVC可以讓整個(gè)邏輯很清晰,這種思想和思維和人的思維很接近,很容易被理解。
MVC的工作原理如圖2-2所示:
圖2-2 MVC工作原理
Struts 是MVC的一種實(shí)現(xiàn),它將 Servlet和 JSP 標(biāo)記(屬于 J2EE 規(guī)范)用作實(shí)現(xiàn)的一部分。Struts繼承了MVC的各項(xiàng)特性,并根據(jù)J2EE的特點(diǎn),做了相應(yīng)的變化與擴(kuò)展。Struts的工作原理,如圖2-3所示:
圖2-3 struts工作原理
(1)Controller:在_ML文件Struts-config._ml中,與之相關(guān)聯(lián)的是Controller,在Struts中,承擔(dān)MVC中Controller角色的是一個(gè)Servlet,叫ActionServlet。ActionServlet是一個(gè)通用的控制組件。這個(gè)控制組件提供了處理所有發(fā)送到Struts的HTTP請(qǐng)求的入口點(diǎn)。它截取和分發(fā)這些請(qǐng)求到相應(yīng)的動(dòng)作類(這些動(dòng)作類都是Action類的子類)。另外控制組件也負(fù)責(zé)用相應(yīng)的請(qǐng)求參數(shù)填充 Action From(通常稱之為FromBean),并傳給動(dòng)作類(通常稱之為ActionBean)。動(dòng)作類實(shí)現(xiàn)核心商業(yè)邏輯,它可以訪問(wèn)java bean 或調(diào)用EJB。最后動(dòng)作類把控制權(quán)傳給后續(xù)的JSP 文件,后者生成視圖。所有這些控制邏輯利用Struts-config._ml文件來(lái)配置。
(2)視圖:主要由JSP生成頁(yè)面完成視圖,Struts提供豐富的JSP 標(biāo)簽庫(kù):Html,Bean,Logic,Template等,這有利于分開(kāi)表現(xiàn)邏輯和程序邏輯。
(3)模型:模型以一個(gè)或多個(gè)java bean的形式存在。這些bean分為三類:Action Form、Action、JavaBean or EJB。Action Form通常稱之為FormBean,封裝了來(lái)自于Client的用戶請(qǐng)求信息,如表單信息。Action通常稱之為ActionBean,獲取從ActionSevlet傳來(lái)的FormBean,取出FormBean中的相關(guān)信息,并做出相關(guān)的處理,一般是調(diào)用Java Bean或EJB等[7]。
2.5 關(guān)于Spring
2.5.1 Spring簡(jiǎn)介
Spring是一個(gè)開(kāi)源框架,它由Rod Johnson創(chuàng)建。它是為了解決企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用基本的JavaBean來(lái)完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限于服務(wù)器端的開(kāi)發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益[8]。
◆目的:解決企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性
◆功能:使用基本的JavaBean代替EJB,并提供了更多的企業(yè)應(yīng)用功能
◆范圍:任何Java應(yīng)用
簡(jiǎn)單來(lái)說(shuō),Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。
◆輕量——從大小與開(kāi)銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個(gè)大小只有1MB多的JAR文件里發(fā)布。并且Spring所需的處理開(kāi)銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應(yīng)用中的對(duì)象不依賴于Spring的特定類。
◆控制反轉(zhuǎn)——Spring通過(guò)一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了松耦合。當(dāng)應(yīng)用了IoC,一個(gè)對(duì)象依賴的其它對(duì)象會(huì)通過(guò)被動(dòng)的方式傳遞進(jìn)來(lái),而不是這個(gè)對(duì)象自己創(chuàng)建或者查找依賴對(duì)象。你可以認(rèn)為IoC與JNDI相反——不是對(duì)象從容器中查找依賴,而是容器在對(duì)象初始化時(shí)不等對(duì)象請(qǐng)求就主動(dòng)將依賴傳遞給它。
◆面向切面——Spring提供了面向切面編程的豐富支持,允許通過(guò)分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)(例如審計(jì)(auditing)和事務(wù)(transaction)管理)進(jìn)行內(nèi)聚性的開(kāi)發(fā)。應(yīng)用對(duì)象只實(shí)現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯——僅此而已。它們并不負(fù)責(zé)(甚至是意識(shí))其它的系統(tǒng)級(jí)關(guān)注點(diǎn),例如日志或事務(wù)支持。
◆容器——Spring包含并管理應(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可以將簡(jiǎn)單的組件配置、組合成為復(fù)雜的應(yīng)用。在Spring中,應(yīng)用對(duì)象被聲明式地組合,典型地是在一個(gè)_ML文件里。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理、持久化框架集成等等),將應(yīng)用邏輯的開(kāi)發(fā)留給了你。
所有Spring的這些特征使你能夠編寫(xiě)更干凈、更可管理、并且更易于測(cè)試的代碼。它們也為Spring中的各種模塊提供了基礎(chǔ)支持。
2.5.2 為什么需要Spring
你可能正在想“Spring不過(guò)是另外一個(gè)的framework”。當(dāng)已經(jīng)有許多開(kāi)放源代碼(和專有) J2EE framework時(shí),我們?yōu)槭裁催€需要Spring Framework?
Spring是獨(dú)特的,因?yàn)槿舾蓚€(gè)原因:
◆它定位的領(lǐng)域是許多其他流行的framework沒(méi)有的。Spring關(guān)注提供一種方法管理你的業(yè)務(wù)對(duì)象。
◆ Spring是全面的和模塊化的。Spring有分層的體系結(jié)構(gòu),這意味著你能選擇使用它孤立的任何部分,它的架構(gòu)仍然是內(nèi)在穩(wěn)定的。因此從你的學(xué)習(xí)中,你可得到最大的價(jià)值。例如,你可能選擇僅僅使用Spring來(lái)簡(jiǎn)單化JDBC的使用,或用來(lái)管理所有的業(yè)務(wù)對(duì)象。
◆它的設(shè)計(jì)從底部幫助你編寫(xiě)易于測(cè)試的代碼。Spring是用于測(cè)試驅(qū)動(dòng)工程的理想的framework。
Spring對(duì)你的工程來(lái)說(shuō),它不需要一個(gè)以上的framework。Spring是潛在地一站式解決方案,定位于與典型應(yīng)用相關(guān)的大部分基礎(chǔ)結(jié)構(gòu)。它也涉及到其他framework沒(méi)有考慮到的內(nèi)容。
2.5.3 Spring帶給我們什么
◆方便解耦,簡(jiǎn)化開(kāi)發(fā)
通過(guò)Spring提供的IoC容器,我們可以將對(duì)象之間的依賴關(guān)系交由Spring進(jìn)行控制,避免硬編碼所造成的過(guò)度程序耦合。有了Spring,用戶不必再為單實(shí)例模式類、屬性文件解析等這些很底層的需求編寫(xiě)代碼,可以更專注于上層的應(yīng)用。
◆AOP編程的支持
通過(guò)Spring提供的AOP功能,方便進(jìn)行面向切面的編程,許多不容易用傳統(tǒng)OOP實(shí)現(xiàn)的功能可以通過(guò)AOP輕松應(yīng)付。
◆聲明式事務(wù)的支持
在Spring中,我們可以從單調(diào)煩悶的事務(wù)管理代碼中解脫出來(lái),通過(guò)聲明式方式靈活地進(jìn)行事務(wù)的管理,提高開(kāi)發(fā)效率和質(zhì)量。
◆方便程序的測(cè)試
可以用非容器依賴的編程方式進(jìn)行幾乎所有的測(cè)試工作,在Spring里,測(cè)試不再是昂貴的操作,而是隨手可做的事情。
◆方便集成各種優(yōu)秀框架
Spring不排斥各種優(yōu)秀的開(kāi)源框架,相反,Spring可以降低各種框架的使用難度,Spring提供了對(duì)各種優(yōu)秀框架(如Struts,Hibernate、Hession、Quartz)等的直接支持。
◆降低Java EE API的使用難度
Spring對(duì)很多難用的Java EE API(如JDBC,JavaMail,遠(yuǎn)程調(diào)用等)提供了一個(gè)薄薄的封裝層,通過(guò)Spring的簡(jiǎn)易封裝,這些Java EE API的使用難度大為降低。
◆Java 源碼是經(jīng)典學(xué)習(xí)范例
Spring的源碼設(shè)計(jì)精妙、結(jié)構(gòu)清晰、匠心獨(dú)用,處處體現(xiàn)著大師對(duì)Java設(shè)計(jì)模式靈活運(yùn)用以及對(duì)Java技術(shù)的高深造詣。Spring框架源碼無(wú)疑是Java技術(shù)的最佳實(shí)踐范例。如果想在短時(shí)間內(nèi)迅速提高自己的Java技術(shù)水平和應(yīng)用開(kāi)發(fā)水平,學(xué)習(xí)和研究Spring源碼將會(huì)使你收到意想不到的效果[9]。
2.6 關(guān)于Hibernate
2.6.1為什么引入hibernate
在B/S項(xiàng)目的開(kāi)發(fā)中,和數(shù)據(jù)庫(kù)的交互式不可避免的,J2EE的規(guī)范中提供了JDBC的接口來(lái)操作數(shù)據(jù)庫(kù),對(duì)于JDBC,開(kāi)發(fā)人員可以獲取數(shù)據(jù)庫(kù)連接,然后向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句,并返回?cái)?shù)據(jù)庫(kù)操作的結(jié)果集,然后封裝成對(duì)象返回給上層的應(yīng)用程序。這就造成開(kāi)發(fā)人員不但要求能夠編寫(xiě)程序,熟悉業(yè)務(wù)邏輯,還要求開(kāi)發(fā)人員同時(shí)能夠擔(dān)任DBA,對(duì)開(kāi)發(fā)人員的要求很高;同時(shí),當(dāng)引入新的項(xiàng)目時(shí),很多地方必須廢棄,因?yàn)槲覀兊拇a中不光是業(yè)務(wù)邏輯,其中也嵌入了許多和底層有關(guān)的一些SQL代碼;
另外這些嵌入在代碼中的SQL語(yǔ)句也影響了我們程序的可測(cè)試性,我們?cè)趯?duì)代碼進(jìn)行調(diào)試的時(shí)候,既要測(cè)試代碼,同時(shí)我們還要測(cè)試SQL語(yǔ)句。為了解決這些問(wèn)題,引入了hibernate[10]。
2.6.2使用Hibernate的好處
(1)Hibernate是JDBC的輕量級(jí)的對(duì)象封裝,它是一個(gè)獨(dú)立的對(duì)象持久層框架,和App Server,和EJB沒(méi)有什么必然的聯(lián)系。Hibernate可以用在任何JDBC可以使用的場(chǎng)合,例如Java應(yīng)用程序的數(shù)據(jù)庫(kù)訪問(wèn)代碼,DAO接口的實(shí)現(xiàn)類,甚至可以是BMP(Bean-Managed Persistence)里面的訪問(wèn)數(shù)據(jù)庫(kù)的代碼。
(2)Hibernate是一個(gè)和JDBC密切關(guān)聯(lián)的框架,所以Hibernate的兼容性和JDBC驅(qū)動(dòng),和數(shù)據(jù)庫(kù)都有一定的關(guān)系,但是和使用它的Java程序,和Application Server
沒(méi)有任何關(guān)系,也不存在兼容性問(wèn)題。
(3)Hibernate不能用來(lái)直接和Entity Bean做對(duì)比,只有放在整個(gè)J2EE項(xiàng)目的框架中才能比較。并且即使是放在軟件整體框架中來(lái)看,Hibernate也是做為JDBC
的替代者出現(xiàn)的,而不是Entity Bean的替代者出現(xiàn)的。
(4)由于是對(duì)JDBC的輕易級(jí)封閉,內(nèi)存消耗少,最快的運(yùn)行效率。
(5)開(kāi)發(fā)效率高,Eclipse、JBuilder等主流JAVA集成開(kāi)發(fā)環(huán)境對(duì)Hibernate有很好的支持,在大的項(xiàng)目,特別是持久層關(guān)系映射很復(fù)雜的情況下,Hibernate效率高的驚人。
(6)分布式,安全檢查,集群,負(fù)載均衡的支持。
2.6.3 Hibernate的工作原理
Hibernate的工作就是為Object和Ralational之間提供一個(gè)映射,其工作流程如下面的圖2-4所示。
圖2-4 hibernate工作流程
(1) 啟動(dòng)Hibernate,如果在系統(tǒng)中添加Hibernate的支持,此處加載由系統(tǒng)自動(dòng)完成。
(2) 讀取hibernate.cfg._ml或者h(yuǎn)ibernate.properties文件的配置信息,并將其加載為實(shí)例。
(3) 構(gòu)建SessionFactory實(shí)例(包含二級(jí)緩存)。
(4) 從SessionFactory中取得Session對(duì)象,從而可以調(diào)用其方法,對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,實(shí)現(xiàn)ORM的功能。
Hibernate可以通過(guò)一個(gè)_ML的mapping文件把一個(gè)POJO(Plain old java object)和數(shù)據(jù)庫(kù)中的表對(duì)應(yīng)起來(lái),在這個(gè)_ML文件(一般命名為_(kāi).hbm._ml)中,我們可以配置好Object和數(shù)據(jù)庫(kù)中標(biāo)的映射關(guān)系,然后把這個(gè)mapping加入到hibernate.cfg._ml中,這樣Hibernate在啟動(dòng)時(shí)就可以加載這些mapping,并可以根據(jù)配置文件對(duì)對(duì)象實(shí)現(xiàn)自動(dòng)的加載,并且可以對(duì)這些Object實(shí)習(xí)自動(dòng)的維護(hù)。Hibernate還提供查詢語(yǔ)句(HQL)供應(yīng)用程序使用,Hibernate對(duì)數(shù)據(jù)訪問(wèn)實(shí)現(xiàn)封裝,還可以對(duì)查詢語(yǔ)句的發(fā)送實(shí)現(xiàn)管理,達(dá)到優(yōu)化的目的,能夠有效減少數(shù)據(jù)庫(kù)的訪問(wèn)頻率。
2.7 Mysql
數(shù)據(jù)庫(kù)(Database)是一系列信息資源的集合。在一個(gè)數(shù)據(jù)庫(kù)中,與一個(gè)項(xiàng)目有關(guān)的所有信息都可以叫做一條記錄(Record)。每一條記錄都是由一系列的字段(Field)組成的。一系列記錄的集合就構(gòu)成了數(shù)據(jù)表格(Table)。對(duì)于一個(gè)簡(jiǎn)單的“平面文件”的數(shù)據(jù)庫(kù)來(lái)說(shuō),它僅包含了一個(gè)數(shù)據(jù)表格,而對(duì)一個(gè)“關(guān)系型”數(shù)據(jù)庫(kù)來(lái)說(shuō),它卻包含兩個(gè)或兩個(gè)以上的數(shù)據(jù)表格,表格的各字段之間存在這一種或多種關(guān)系(有時(shí)可以把這種關(guān)系叫做“鏈接”)。
2.7.1 mysql的特點(diǎn)
MySQL是一種開(kāi)放源代碼的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),MySQL數(shù)據(jù)庫(kù)系統(tǒng)使用最常用的數(shù)據(jù)庫(kù)管理語(yǔ)言--結(jié)構(gòu)化查詢語(yǔ)言(SQL)進(jìn)行數(shù)據(jù)庫(kù)管理。
由于MySQL是開(kāi)放源代碼的,因此任何人都可以在General Public License的許可下下載并根據(jù)個(gè)性化的需要對(duì)其進(jìn)行修改。MySQL因?yàn)槠渌俣?、可靠性和適應(yīng)性而備受關(guān)注。大多數(shù)人都認(rèn)為在不需要事務(wù)化處理的情況下,MySQL是管理內(nèi)容最好的選擇。它使用系統(tǒng)核心提供的多線程機(jī)制提供完全的多線程運(yùn)行模式,提供了面向C、C++、Eiffel、Java、Perl、PHP、Python以及Tcl等編程語(yǔ)言的編程接口(APIs),支持多種字段類型并且提供了完整的操作符支持查詢中的SELECT和WHERE操作。
目前MySQL被廣泛地應(yīng)用在Internet上的中小型網(wǎng)站中。由于其體積小、速度快、總體擁有成本低,尤其是開(kāi)放源碼這一特點(diǎn),許多中小型網(wǎng)站為了降低網(wǎng)站總體擁有成本而選擇了MySQL作為網(wǎng)站數(shù)據(jù)庫(kù)[11]。
2.7.2 mysql的安裝和配置(部分截圖)[12]
圖2-5 mysql安裝圖(開(kāi)始)
安裝時(shí)一般采用默認(rèn)路徑:
圖2-6 mysql安裝圖(路徑)
圖2-7 mysql安裝圖(數(shù)據(jù)庫(kù)類型)
為了支持中文,在下面的列表框中學(xué)者gb2312(切記)
圖2-8 mysql安裝圖(語(yǔ)言)
圖2-9 mysql安裝圖(等待成功)
2.8 Tomcat服務(wù)器
2.8.1 Tomcat 服務(wù)器簡(jiǎn)介
Tomcat是一個(gè)免費(fèi)的開(kāi)源的Serlvet容器,它是Apache基金會(huì)的Jakarta項(xiàng)目中的一個(gè)核心項(xiàng)目,由Apache,Sun和其它一些公司及個(gè)人共同開(kāi)發(fā)而成。由于有了Sun的參與和支持,最新的Servlet和Jsp規(guī)范總能在Tomcat中得到體現(xiàn)。 Tomcat中采用了Servlet容器:Catalina,完整的實(shí)現(xiàn)了Servlet2.3和Jsp1.2規(guī)范。Tomcat提供了各種平臺(tái)的版本供下載,可以從其官方網(wǎng)站上下載其源代碼版或者二進(jìn)制版。由于Java的跨平臺(tái)特性,基于Java的Tomcat也具有跨平臺(tái)性[13]。
2.8.2 Tomcat的特點(diǎn)
在Tomcat中,應(yīng)用程序的部署很簡(jiǎn)單,你只需將你的WAR放到Tomcat的webapp目錄下,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)用需要用戶名和密碼,用戶名和密碼存儲(chǔ)在一個(gè)_ml文件中。通過(guò)這個(gè)應(yīng)用,輔助于Ftp,你可以在遠(yuǎn)程通過(guò)Web部署和撤銷應(yīng)用。當(dāng)然本地也可以。
2.8.3 Tomcat的優(yōu)勢(shì)
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的配置文件即可。
2.8.4 Tomcat服務(wù)器的安裝和配置
在開(kāi)始安裝之前,先準(zhǔn)備J2SDK和TOMCAT兩個(gè)軟件,如果已經(jīng)安裝了J2SDK,就只需TOMCAT即可。
(1)需設(shè)置的環(huán)境變量
變量名:CATALINA_HOME
變量值:D:/Program Files/tomcat6.0
變量名:CLASSPATH
變量值:.;%JAVA_HOME%/lib;%CATALINA_HOME%/common/lib
(2)安裝完成后,打開(kāi)tomcat服務(wù)器,啟動(dòng)瀏覽器,在地址欄上輸入:http://localhost:8080/ 若出現(xiàn)以下界面說(shuō)明安裝成功[14]。
圖2-10 tomcat啟動(dòng)頁(yè)面
小結(jié)
本章全面介紹本系統(tǒng)所用到的關(guān)鍵技術(shù)和工具,其中jsp作為javaweb開(kāi)發(fā)的基礎(chǔ),對(duì)它的運(yùn)行機(jī)制要理解,同時(shí)還要明白它的優(yōu)劣勢(shì);j2ee作為開(kāi)發(fā)的標(biāo)準(zhǔn)也作了簡(jiǎn)單介紹。而SSH(struts+spring+hibernate)作為本系統(tǒng)的核心與亮點(diǎn)技術(shù),更是作了詳細(xì)介紹,要掌握他們的工作原理,主要功能。最后介紹了本系統(tǒng)使用的數(shù)據(jù)庫(kù)mysql以及tomcat服務(wù)器的安裝與配置。只有掌握了這些技術(shù)基礎(chǔ),才能使本系統(tǒng)的開(kāi)發(fā)正常進(jìn)行。
第三章 系統(tǒng)需求分析和總體設(shè)計(jì)
3.1 系統(tǒng)功能需求
圖3-1 系統(tǒng)功能模塊
如圖3-1所示,在本系統(tǒng)中主要闡述用戶管理、購(gòu)物車管理、訂單管理、產(chǎn)品展示四個(gè)模塊。
(1)購(gòu)物車管理:實(shí)現(xiàn)添加商品、取消一個(gè)商品、數(shù)量修改、清空購(gòu)物車功能。
(2)訂單管理:實(shí)現(xiàn)提交訂單、刪除訂單、查詢訂單功能。
(3)產(chǎn)品展示:實(shí)現(xiàn)產(chǎn)品列表、產(chǎn)品明細(xì)功能。
(4)用戶管理:實(shí)現(xiàn)用戶注冊(cè)、用戶信息修改、用戶刪除、用戶查詢功能。
3.2 系統(tǒng)角色及其功能分析
3.2.1 系統(tǒng)的3個(gè)角色:
(1)注冊(cè)用戶
(2)管理員
(3)普通的網(wǎng)站瀏覽者(即游客)
3.2.2 系統(tǒng)角色的功能
(1)普通用戶
網(wǎng)站的普通瀏覽者(即游客)只能瀏覽商品。
(2)注冊(cè)用戶
普通瀏覽者只要注冊(cè)為網(wǎng)站用戶后,獲得自己的帳號(hào),設(shè)置自己的密碼就具有以下功能:登錄,登出,向購(gòu)物車中添加商品,生成并提交訂單。添加或修改個(gè)人明細(xì)資料。
(3)管理員
擁有注冊(cè)用戶的所有功能
還可以對(duì)用戶進(jìn)行管理,包括添加新用戶、修改用戶密碼、刪除用戶。
3.3 總體設(shè)計(jì)思想概述
本系統(tǒng)是基于B/S架構(gòu)下的多層結(jié)構(gòu)應(yīng)用系統(tǒng)。B/S(Browser/Server)結(jié)構(gòu)即瀏覽器和服務(wù)器結(jié)構(gòu)。它是隨著Internet技術(shù)的興起,對(duì)C/S結(jié)構(gòu)的一種變化或者改進(jìn)的結(jié)構(gòu)。在這種結(jié)構(gòu)下,用戶工作界面是通過(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)化了客戶端電腦載荷,減輕了系統(tǒng)維護(hù)與升級(jí)的成本和工作量,降低了用戶的總體成本(TCO)[15]。
在軟件體系架構(gòu)設(shè)計(jì)中,分層式結(jié)構(gòu)是最常見(jiàn),也是最重要的一種結(jié)構(gòu)。推薦的分層式結(jié)構(gòu)一般分為三層,從下至上分別為:數(shù)據(jù)訪問(wèn)(持久)層、業(yè)務(wù)邏輯層(或稱為領(lǐng)域?qū)?、表示層[16],如圖3-2:
圖3-2 系統(tǒng)架構(gòu)
總的來(lái)說(shuō),采用分層結(jié)構(gòu)的設(shè)計(jì)思想,可以讓每個(gè)層由一組相關(guān)的類或組件構(gòu)成,共同完成特定的功能。層與層之間存在自上而下的依賴關(guān)系,上層組件會(huì)依賴下層組件的API,而下層組件則不依賴于上層組件。例如:表述層依賴于業(yè)務(wù)邏輯層,而業(yè)務(wù)邏輯層依賴于數(shù)據(jù)庫(kù)層。并且每個(gè)層對(duì)對(duì)上層公開(kāi)API,但具體的實(shí)現(xiàn)細(xì)節(jié)對(duì)外透明。當(dāng)某一層發(fā)生變化,只要API不變,不會(huì)影響其他層的實(shí)現(xiàn)。
在本系統(tǒng)中,使用開(kāi)源的mysql數(shù)據(jù)庫(kù),持久層用到spring所集成的Hibernate技術(shù),業(yè)務(wù)邏輯層用普通javabean實(shí)現(xiàn),表述層運(yùn)用基于struts的MVC設(shè)計(jì)模式(struts用來(lái)做C層,spring實(shí)現(xiàn)V層與C層的解耦以及C層與M層的解耦)。
3.4 數(shù)據(jù)庫(kù)設(shè)計(jì)
3.4.1 E-R圖
下面是該系統(tǒng)數(shù)據(jù)庫(kù)表的E-R圖,如圖3-3:
圖3-3 E-R圖
3.4.2數(shù)據(jù)表的設(shè)計(jì)
下面列出了設(shè)計(jì)過(guò)程中所用到的數(shù)據(jù)庫(kù)表及其結(jié)構(gòu):
orders表用來(lái)保存客戶的訂單信息,如表3-1:
1. orders
列名類型長(zhǎng)度描述
orderidint11訂單ID
totalpriceNUMBER16總價(jià)錢(qián)
orderstateNUMBER1訂單狀態(tài)
payinfoDATE 付款方式
CreatetimeDATE 創(chuàng)建日期
useridVARCHAR220用戶ID
User_item_idNUMBER8用戶明細(xì)ID
表3-1 orders
2. orderline表用來(lái)保存客戶訂單中的訂單項(xiàng)信息,如表3-2:
3. orderline
列名類型長(zhǎng)度描述
order_item_idNUMBER16訂單條目ID
ProductidNUMBER16商品對(duì)象ID
OrderidVARCHAR220訂單對(duì)象ID
qualityNUMBER8數(shù)量
numNUMBER8商品數(shù)量
表3-2 orderline
3.orderstatus表用來(lái)保存定單狀態(tài),如表3-3:
orderstatus
列名類型長(zhǎng)度描述
statusidint11狀態(tài)ID
namevarchar30狀態(tài)名
descriptionvarchar100描述
表3-3 orderstatus
4.users表用來(lái)保存用戶個(gè)人信息,如表3-4:
users
列名類型長(zhǎng)度描述
user_idint11用戶ID
passwordvarchar15用戶密碼
表3-4 users
5.contactinfo表用來(lái)保存用戶個(gè)人明細(xì),如表3-5:
contactinfo
列名類型長(zhǎng)度描述
contact_idint11
User_idvarchar30用戶id
Street1varchar64住址1
Street2varchar64住址2
cityvarchar32城市
provincevarchar32省份
Countryvarchar32國(guó)家
zipvarchar20郵編
officephonevarchar50辦公室電話
cellphonevarchar20手機(jī)
emailvarchar20電郵
homephonevarchar12家庭電話
表3-5 contactinfo
6.product表用來(lái)保存商品,如表3-6:
product
列名類型長(zhǎng)度描述
productidint11產(chǎn)品
modlevarchar30產(chǎn)品型號(hào)
namevarchar15品牌名
companyvarchar20出品公司
weightdouble50產(chǎn)品重量
pricedouble20價(jià)格
statevarchar20產(chǎn)品狀態(tài)
createtimedate 出廠日期
CategoryidInt10產(chǎn)品類型
descriptionvarchar1000產(chǎn)品描述
表3-6 product
7.category表用來(lái)保存商品類型,如表3-7:
category
列名類型長(zhǎng)度描述
categoryidint11類型ID
namevarchar30類型名
descriptionvarchar100描述
表3-7 category
8. payway表用來(lái)保存權(quán)限信息,如表3-8:
payway
列名類型長(zhǎng)度描述
paywayidint11ID
payStylevarchar30名
表3-8 payway
3.5 系統(tǒng)的類設(shè)計(jì)
3.5.1 DAO類設(shè)計(jì)
圖3-4 dao類設(shè)計(jì)
如圖3-4,通過(guò)這個(gè)工廠獲取對(duì)應(yīng)的 DAO,然后使用DAO 進(jìn)行數(shù)據(jù)庫(kù)操作。
3.5.2 POJO類設(shè)計(jì)(部分)
圖3-5 POJO類設(shè)計(jì)
這些實(shí)體類將通過(guò)hibernate映射到數(shù)據(jù)庫(kù)中
3.5.3 過(guò)濾器類設(shè)計(jì)
圖3-6 過(guò)濾器類設(shè)計(jì)1
如圖3-6,這是編碼過(guò)濾器類,通過(guò)他可保證頁(yè)面不出現(xiàn)亂碼問(wèn)題。
圖3-7 過(guò)濾器類設(shè)計(jì)2
如圖3-7,這是登陸安全過(guò)濾器類,通過(guò)它來(lái)達(dá)到控制訪問(wèn)權(quán)限的功能。
3.5.4 監(jiān)聽(tīng)器類設(shè)計(jì)
如圖3-8,“CartSessionListener”啟動(dòng)時(shí)把購(gòu)物車信息初始化到內(nèi)存中,提高系統(tǒng)性能。“ProductConte_tListener”啟動(dòng)時(shí)把商品信息初始化到內(nèi)存中,提高系統(tǒng)性能。
圖3-8 監(jiān)聽(tīng)器類設(shè)計(jì)
3.6系統(tǒng)的用例圖
3.6.1 總體用例分析
圖3-9 總體用例圖
如圖3-9,用戶管理、購(gòu)物車管理、訂單管理、產(chǎn)品展示四個(gè)模塊構(gòu)成了本網(wǎng)上交易系統(tǒng)。User是指系統(tǒng)用戶,包括注冊(cè)用戶和匿名用戶兩種,匿名用戶只可以瀏覽商品,匿名用戶通過(guò)用戶管理模塊注冊(cè)后就可以使用購(gòu)物車和下訂單。
3.6.2 用戶管理用例分析
圖3-10 用戶管理用例圖
如圖3-10,用戶管理模塊主要包括:用戶登陸、用戶注冊(cè)、用戶信息修改、用戶刪除、用戶信息查詢五個(gè)功能組成。
3.6.3 購(gòu)物車管理用例分析
圖3-11 購(gòu)物車管理用例圖
如圖3-11,購(gòu)物車管理模塊主要包括:添加商品、取消一個(gè)商品、數(shù)量修改、清空購(gòu)物車四個(gè)功能組成。
3.6.4 訂單管理用例分析
圖3-12 訂單管理用例圖
如圖3-12,訂單管理模塊主要包括:訂單提交、刪除訂單、訂單明細(xì)三個(gè)功能組成。
3.6.5 產(chǎn)品展示用例分析
圖3-13 產(chǎn)品展示用例圖
如圖3-13,商品展示模塊主要包括:產(chǎn)品列表、產(chǎn)品明細(xì)兩個(gè)功能組成。
小結(jié)
本章首先分析系統(tǒng)的功能需求,通過(guò)對(duì)系統(tǒng)功能模塊的劃分以及角色的劃分,明確了系統(tǒng)需求,為總體設(shè)計(jì)提供依據(jù)。接下來(lái)闡述了系統(tǒng)的總體設(shè)計(jì)思想,說(shuō)明了本系統(tǒng)是基于B/S架構(gòu)下的多層結(jié)構(gòu)應(yīng)用系統(tǒng)。最后通過(guò)對(duì)數(shù)據(jù)庫(kù)、過(guò)濾器、監(jiān)聽(tīng)器、和實(shí)體類的設(shè)計(jì)分析,以及各個(gè)模塊用例圖的描述,形成了開(kāi)發(fā)的整體思路,為下一步編程實(shí)現(xiàn)各個(gè)具體功能鋪平了道路。
第四章 系統(tǒng)的詳細(xì)設(shè)計(jì)
4.1 數(shù)據(jù)庫(kù)與POJO映射的實(shí)現(xiàn)
前面第二章曾介紹過(guò):Hibernate可以通過(guò)一個(gè)_ML的mapping文件把一個(gè)POJO(Plain old java object)和數(shù)據(jù)庫(kù)中的表對(duì)應(yīng)起來(lái),在這個(gè)_ML文件(一般命名為_(kāi).hbm._ml)中,我們可以配置好Object和數(shù)據(jù)庫(kù)中表的映射關(guān)系,然后把這個(gè)mapping加入到hibernate.cfg._ml中,這樣Hibernate在啟動(dòng)時(shí)就可以加載這些mapping,并可以根據(jù)配置文件對(duì)對(duì)象實(shí)現(xiàn)自動(dòng)的加載,并且可以對(duì)這些Object實(shí)習(xí)自動(dòng)的維護(hù)。
由于Spring提供了對(duì)Hibernate的集成,所以我們可以不配置hibernate.cfg._ml文件,而通過(guò)在applicationConte_t._ml文件中進(jìn)行相關(guān)配置來(lái)達(dá)到同樣的目的。圖例說(shuō)明如下:
圖4-1 user.hbm._ml
如圖4-1,user.hbm._ml文件配置了user類的相關(guān)信息。
圖4-2 session工廠配置
圖4-2是applicationConte_t._ml文件中Session工廠的配置信息,可以看到,圖中的mappingResources屬性中囊括了所有我們需要的mapping文件。
4.2 主要模塊的設(shè)計(jì)說(shuō)明與界面
4.2.1用戶管理模塊
用戶管理模塊主要包括用戶注冊(cè),登錄,退出3個(gè)部分.
(1)用戶注冊(cè)
當(dāng)用戶第一次登錄時(shí)首先要注冊(cè),成為會(huì)員后,才可以購(gòu)買(mǎi)物品.用戶可以通過(guò)單擊首頁(yè)的注冊(cè)按鍵來(lái)打開(kāi)注冊(cè)頁(yè)面進(jìn)行會(huì)員注冊(cè)操作,用戶注冊(cè)頁(yè)面的運(yùn)行結(jié)果如圖4-3所示.
圖4-3用戶登錄/注冊(cè)界面
如果用戶的注冊(cè)信息不符合要求,系統(tǒng)會(huì)提示用戶,部分結(jié)果如圖4-4:
圖4-4登錄信息提示界面
校驗(yàn)用戶注冊(cè)信息是是否正確的javaScript部分代碼如下[17]:
當(dāng)用戶確認(rèn)所提按信息無(wú)誤后,單擊“注冊(cè)“按鈕,系統(tǒng)會(huì)執(zhí)行以下流程:
request 請(qǐng)求將頁(yè)面上的信息傳遞到控制層的struts中的Action類中,執(zhí)行以下代碼
/_
_ 注冊(cè)一個(gè)新用戶
_/
public ActionForward register(ActionMapping mapping,
ActionForm form,HttpServletRequest req, HttpServletResponse res) throws E_ception {
ActionForward forward = null;
RegisterActionForm registerForm = (RegisterActionForm) form;
User user = registerForm.getUser();
ContactInfo contactInfo = registerForm.getContactInfo();
if (userBiz.getUserById(user.getUserid()) != null) {
user.setContactinfo(contactInfo);
req.setAttribute("user", user);
forward = mapping.findForward("refresh");
} else {
try {
log.debug("begin save user info . . .");
userBiz.userRegister(user, contactInfo);
req.setAttribute("TIP_KEY", "恭喜您!注冊(cè)成功!");
forward = mapping.findForward("success");
} catch (ECPortE_ception be) {
forward = mapping.findForward("fail");
be.printStackTrace();
log.error("save user info error. . .", be);
}
}
return forward;
}
在UserService中調(diào)用dao中的addUser方法,代碼如下:
public void addUser(User user) throws StoreE_ception {
.....
try {
session = HibernateSessionFactory.getSession();
t_ = session.beginTransaction();
session.save(user);
t_.commit();
} .....
}
在注冊(cè)成功后,會(huì)跳轉(zhuǎn)到這樣的頁(yè)面,如圖4-4:
圖4-4注冊(cè)成功界面
(2)用戶登錄
網(wǎng)站首頁(yè)在用戶第一次訪問(wèn)時(shí)會(huì)判斷用戶是否登錄,未登錄則顯示用戶登錄窗口,提示用戶登錄或注冊(cè).對(duì)于已經(jīng)登錄的用戶,在用戶登錄窗口將顯示用戶的相關(guān)信息.
首頁(yè)主要是根據(jù)保存用戶名信息的Session參數(shù)來(lái)判斷用戶是否已經(jīng)登錄的,關(guān)鍵代碼如下:
在會(huì)員登錄窗口中單擊登錄按紐后,系統(tǒng)將對(duì)用戶名和密碼進(jìn)行驗(yàn)證,判斷用戶是否是已注冊(cè)用戶,如果已注冊(cè),則更新用戶在網(wǎng)站中的狀態(tài),如果沒(méi)有注冊(cè),則拒絕用戶的登錄操作,登錄數(shù)據(jù)驗(yàn)證的程序代碼如下:
/_
_ 用戶登錄方法
_/
public ActionForward login(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws E_ception {
String username = request.getParameter("userid");
String password = request.getParameter("password");
if (userService.isLoginCorrect(username, password)) {
User user = userService.getUserByName(username);
/_
_ 只有在用戶登錄的時(shí)候才創(chuàng)建一個(gè)session,并且把用戶的信息存放到session中;
_ 同時(shí)sessionListener也會(huì)把car同時(shí)也放到session中,這樣能保證為每一個(gè)來(lái)
_ 網(wǎng)站需要購(gòu)物的用戶分配一個(gè)session,一個(gè)購(gòu)物車,并且也可以利用session來(lái) 跟蹤用戶.
_/
HttpSession session = ((HttpServletRequest) request).getSession(true);
session.setAttribute("user", user);
return mapping.findForward("loginsuccess");
} else {
String message = "用戶名或者密碼錯(cuò)誤!";
request.setAttribute("message", message);
return mapping.findForward("loginfailed");
}
}
public User getUserByName(String name) throws StoreE_ception {
Session session = null;
try {
session = HibernateSessionFactory.getSession();
User user = (User) session.createQuery(
"from User u where u.username = '" + name + "'")
.uniqueResult();
return user;
} ....
}
(3)用戶退出
當(dāng)用戶決定退出網(wǎng)站時(shí),只要點(diǎn)擊當(dāng)前頁(yè)面上的“退出”按鈕,就會(huì)回到首頁(yè)。
實(shí)現(xiàn)代碼如下:
/_
_ 用戶退出系統(tǒng)并做一些清理工作;
_/
public ActionForward logout(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws E_ception {
HttpSession session = request.getSession();
session.removeAttribute("user");
session.removeAttribute("cart");
return mapping.findForward("logout");
}
(4)管理員登錄
系統(tǒng)設(shè)置了一個(gè)默認(rèn)的管理員admin,只要通過(guò)此用戶名登錄就可進(jìn)入管理員界面,如圖4-5和圖4-6所示:
圖4-5 管理員登錄
圖4-6 管理員界面
主要代碼如下:
public ActionForward toModify(ActionMapping mapping, ActionForm form,
HttpServletRequest req, HttpServletResponse res) throws E_ception {
HttpSession cur_session = req.getSession(false);
User user = (User) cur_session.getAttribute("USER");
String userid = user.getUserid();
String reqUserid = req.getParameter("userid");
if (reqUserid == null) {
List userList = userBiz.findAllUsers();
cur_session.setAttribute("userList", userList);
if (userid.equals("admin")) {
return mapping.findForward("adminInfo");
} else {
User p_user = userBiz.getUserById(userid);
req.setAttribute("user", p_user);
}
}
if (reqUserid != null) {
User p_user = userBiz.getUserById(reqUserid);
req.setAttribute("user", p_user);
}
return mapping.findForward("modify");
}
4.2.2購(gòu)物車管理模塊
購(gòu)物車管理模塊主要功能有如下幾個(gè)部分:
(1)創(chuàng)建購(gòu)物車
當(dāng)客戶登錄后,系統(tǒng)會(huì)給客戶創(chuàng)建一個(gè)購(gòu)物車放入服務(wù)器的Session會(huì)話中。使客戶在整個(gè)會(huì)話中都擁有一個(gè)相同的購(gòu)物車。這里主要運(yùn)用了Http協(xié)議中的會(huì)話機(jī)制,將購(gòu)物車保存在客戶的會(huì)話中,這樣在整個(gè)客戶游覽不同頁(yè)面商品的過(guò)程中,都會(huì)使用同一個(gè)購(gòu)物車對(duì)象。
具體執(zhí)行步驟:
(1)從客戶的請(qǐng)求對(duì)象中獲取Session會(huì)話對(duì)象
(2)從會(huì)話對(duì)象中獲取購(gòu)物車對(duì)象
(3)判斷是購(gòu)物車對(duì)象是不是空的,如果是空是就創(chuàng)建一個(gè)
/_
_ 在監(jiān)聽(tīng)到session被創(chuàng)建之后,就立即向session中添加一個(gè)購(gòu)物車Car;
_/
public void sessionCreated(HttpSessionEvent arg0) {
HttpSession session = arg0.getSession();
Cart cart=new Cart();
session.setAttribute("cart", cart);
}
/_
_ 從session中獲得購(gòu)物車
_/
Cart cart = (Cart) session.getAttribute("cart");
if (cart == null) {
cart = new Cart();
}
(2)向購(gòu)物車中添加一個(gè)商品項(xiàng)
客戶在查看網(wǎng)頁(yè)上的一個(gè)商品時(shí),當(dāng)向服務(wù)器發(fā)送一個(gè)“添加到購(gòu)物車”的請(qǐng)求時(shí),會(huì)執(zhí)行這個(gè)功能。
功能執(zhí)行過(guò)程:
(1)從客戶請(qǐng)求對(duì)象中獲取商品的ID
(2)調(diào)用業(yè)務(wù)層的方法根據(jù)商品ID去數(shù)據(jù)查詢商品的信息,返回商品對(duì)象
(3)從商品對(duì)象中獲取商品名,商品價(jià)格,來(lái)構(gòu)建一個(gè)商品項(xiàng)對(duì)象
(4)從Session會(huì)話中獲取購(gòu)物車對(duì)象
(5)調(diào)用業(yè)務(wù)層的方法來(lái)根據(jù)購(gòu)物車對(duì)象和商品項(xiàng)對(duì)象來(lái)執(zhí)行添加操作
(6)將些商品項(xiàng)對(duì)象放入到購(gòu)物車中
部分實(shí)現(xiàn)代碼:
/_
_ 從數(shù)據(jù)庫(kù)中把商品取到;
_/
ProductService productService = (ProductService) ServiceFactory.getInstance().getService(Globals.PRODUCT_SERVICE);
Integer id = Integer.parseInt(request.getParameter("productid"));
Product product = productService.getProductById(id);
/_
_ 在向購(gòu)物車中添加商品的時(shí)候會(huì)判斷商品是否已經(jīng)存在,
_ 已存在的就不讓在加入了;
_/
if (cart.isE_ist(id)) {
message = "該商品已經(jīng)存在!請(qǐng)返回!";
request.setAttribute("message", message);
return mapping.findForward("error");
} else {
/_
_ 向購(gòu)物車添加一個(gè)商品;
_/
cart.addCart(product);
session.setAttribute("cart", cart);
return mapping.findForward("addcartsuccess");
}
(3) 修改購(gòu)物車中一個(gè)商品項(xiàng)
在客戶查看購(gòu)物車時(shí),想修改自己的購(gòu)買(mǎi)商品時(shí),會(huì)執(zhí)行這個(gè)功能。由于商品的名稱和價(jià)格都是系統(tǒng)管理人員設(shè)置的,所以客戶都不可以修改,客戶只能修改他/她所購(gòu)買(mǎi)商品的數(shù)量。修改所選購(gòu)的商品數(shù)量時(shí),相應(yīng)的商品項(xiàng)的小計(jì)和購(gòu)物車的總計(jì)都會(huì)保持實(shí)時(shí)的更新,如圖4-7。
圖4-7 修改商品數(shù)量
功能的執(zhí)行步驟:
(1)將ActionForm轉(zhuǎn)換為ItemForm對(duì)象
(2)從ItemForm對(duì)象中獲取商品ID
(3)從Session會(huì)話中獲取購(gòu)物車對(duì)象
(4)根據(jù)商品ID去調(diào)用業(yè)務(wù)層的方法去修改商品項(xiàng)
(5)修改小計(jì)
(6)將些商品項(xiàng)對(duì)象放入到購(gòu)物車中
部分實(shí)現(xiàn)代碼:
public ActionForward modifyNumber(ActionMapping mapping, ActionForm form,
HttpServletRequest req, HttpServletResponse res) throws E_ception {
String tempid = req.getParameter("productId");
Long productId = Long.parseLong(tempid);
String tempNum = req.getParameter("num" + productId);// num是一與JSP頁(yè)面一致的字符串
int num = new Integer(tempNum).intValue();
HttpSession session = req.getSession(false);
IShoppingCart cart = (IShoppingCart) session
.getAttribute("SHOPPING_CART");
cart.modifyProductAmountById(productId, num);
return mapping.findForward("success");
}
(4)查看購(gòu)物車
客戶選取了所有的商品后,來(lái)向服務(wù)器發(fā)送“購(gòu)物車”請(qǐng)求時(shí),會(huì)執(zhí)行此功能,系統(tǒng)根據(jù)會(huì)話中的購(gòu)物車中的商品項(xiàng),來(lái)獲取客戶所選選商品的一個(gè)集合,在JSP頁(yè)面上對(duì)這個(gè)集合中的商品項(xiàng)進(jìn)行顯示,如圖4-8。
圖4-8 我的購(gòu)物車
功能的執(zhí)行步驟:
(1)從客戶的請(qǐng)求對(duì)象中獲取購(gòu)物車對(duì)象
(2)從購(gòu)物車對(duì)象中獲取所有的商品項(xiàng)
(3)將所有的商品項(xiàng)對(duì)象加載到請(qǐng)求對(duì)象中發(fā)送給客戶端
部分實(shí)現(xiàn)代碼:
var="orderLine" items="${sessionScope.SHOPPING_CART.orders.orderlines}" varStatus="status">
(5)刪除購(gòu)物車中的一個(gè)商品項(xiàng)
客戶在查看購(gòu)物車時(shí),當(dāng)向服務(wù)器發(fā)送一個(gè)“刪除商品項(xiàng)”的請(qǐng)求時(shí),會(huì)執(zhí)行這個(gè)功能。刪除商品項(xiàng)時(shí),系統(tǒng)會(huì)自動(dòng)更新購(gòu)物車的總計(jì)值,如圖4-9:
圖4-9 刪除商品
功能執(zhí)行過(guò)程:
1從客戶請(qǐng)求對(duì)象中獲取商品的ID
2調(diào)用業(yè)務(wù)層的方法根據(jù)商品ID去數(shù)據(jù)查詢商品的信息,返回商品對(duì)象
3從Session會(huì)話中獲取購(gòu)物車對(duì)象
4調(diào)用業(yè)務(wù)層的方法根據(jù)商品ID去刪除購(gòu)物車對(duì)象中的商品項(xiàng)
5將購(gòu)物車重新加入到Session會(huì)話中,來(lái)更新Session會(huì)話中的購(gòu)物車對(duì)象
部分代碼實(shí)現(xiàn):
//刪除購(gòu)物車中一個(gè)商品項(xiàng)
public ActionForward deleteById(ActionMapping mapping, ActionForm form,
HttpServletRequest req, HttpServletResponse res) throws E_ception {
String tempid = req.getParameter("productId");
Long productId = Long.parseLong(tempid);
HttpSession session = req.getSession(false);
ShoppingCart cart = (ShoppingCart) session
.getAttribute("SHOPPING_CART");
cart.removeProductById(productId);
if (cart.isEmpty()) {
return mapping.findForward("inde_");
}
return mapping.findForward("success");
}
(6)清空購(gòu)物車
客戶在查看購(gòu)物時(shí)不要想要所有所選的商品時(shí),向服務(wù)器發(fā)送“清空購(gòu)物車”請(qǐng)求時(shí)會(huì)執(zhí)行此功能。如圖4-10:
圖4-10 清空購(gòu)物車
執(zhí)行此功能的步驟:
(1)從請(qǐng)求對(duì)象中獲取Session會(huì)話
(2)從Session會(huì)話中獲取購(gòu)物車對(duì)象
(3)將購(gòu)物車對(duì)象傳給業(yè)務(wù)層的方法去清空購(gòu)物車中的所有商品項(xiàng)
部分實(shí)現(xiàn)代碼:
/_
_ 也就是從session中把購(gòu)物車清除掉;
_/
public ActionForward clearShopCart(ActionMapping mapping, ActionForm form,
HttpServletRequest req, HttpServletResponse res) throws E_ception {
HttpSession session = req.getSession(false);
IShoppingCart cart = (IShoppingCart) session
.getAttribute("SHOPPING_CART");
cart.removeAllProducts();
return mapping.findForward("inde_");
}
4.2.3 定單模塊
生成訂單是網(wǎng)上購(gòu)物商城的最終目的,前面的所有的功能的實(shí)現(xiàn)都是為最后生成一個(gè)用戶滿意的訂單做基礎(chǔ),在此要生成一個(gè)可以供用戶隨時(shí)查詢訂單號(hào),還要保存用戶訂單中所購(gòu)買(mǎi)的商品信息。當(dāng)用戶確認(rèn)對(duì)購(gòu)物車不再改變后,就可以到收銀臺(tái)結(jié)帳并生成訂單。結(jié)帳的流程是:從購(gòu)物車中讀取商品名稱,商品數(shù)量,商品價(jià)格信息,生成唯一的一個(gè)訂單號(hào),同時(shí)也把用戶注冊(cè)的基本信息讀取出來(lái),形成一個(gè)完整的訂單寫(xiě)入數(shù)據(jù)庫(kù)中。
1、創(chuàng)建一個(gè)訂單
客戶選好了所有的商品時(shí),并確認(rèn)要買(mǎi)時(shí),會(huì)向服務(wù)器發(fā)送一個(gè)“生成定單”的請(qǐng)求,運(yùn)行結(jié)果如圖4-11:
圖4-11 生成訂單
此時(shí)用戶可以添加收貨人的地址,點(diǎn)擊圖中的用戶信息“修改”,會(huì)彈出一個(gè)頁(yè)面,在此修改收貨人地址等信息,如圖4-12:
圖4-12 修改收貨地址
/_
_ 將修改后的地址保存到數(shù)據(jù)庫(kù)中,其中保存了用戶的信息:id
_/
public void addUserItem(UserItem useritem) throws StoreE_ception {
..
try {
session = HibernateSessionFactory.getSession();
t_ = session.beginTransaction();
session.save(useritem);
t_.commit();
} ..
}
用戶確認(rèn)無(wú)誤后點(diǎn)擊圖4-11的“提交訂單“,會(huì)出現(xiàn)下圖:
圖4-13 訂單列表
部分實(shí)現(xiàn)代碼:
/_
_ 確定定單
_/
public ActionForward checkOut(ActionMapping mapping, ActionForm form,
HttpServletRequest req, HttpServletResponse res) throws E_ception {
ActionForward forward = null;
GregorianCalendar gc = new GregorianCalendar();
Long paywayid = Long.parseLong(req.getParameter("payway"));
PayWay pw = new PayWay(paywayid);
List orderStatus = (List) req.getSession().getServletConte_t()
.getAttribute("all_orderStatus");
OrderStatus os = (OrderStatus) orderStatus.get(1);
HttpSession session = req.getSession(false);
User user = (User) session.getAttribute("USER");
ShoppingCart cart = (ShoppingCart) session
.getAttribute("SHOPPING_CART");
// Map orderLineMap = cart.getOrderLineMap();
Orders order = cart.getOrders();
order.setUsers(user);
order.setCost(cart.getTotalPrice());
order.setName(user.getUserid() + "-" + gc.get(gc.YEAR) + ""
+ gc.get(gc.MONTH) + "" + gc.get(gc.DAY_OF_MONTH));
order.setPayway(pw);
order.setOrderstatus(os);
try {
log.debug("=== begin to generator order =====");
orderBiz.checkOut(order);
log.debug("==== generator order success . . .");
forward = mapping.findForward("success");
} catch (ECPortE_ception be) {
forward = mapping.findForward("fail");
log.error("==== save user order fail...", be);
be.printStackTrace();
}
cart.removeAllProducts(); // 定單產(chǎn)生后應(yīng)清楚當(dāng)明購(gòu)物車中的商品
return forward;
}
/_
_ 向數(shù)據(jù)庫(kù)中保存一個(gè)指定的order對(duì)象;
_/
public void save(Orders transientInstance) {
log.debug("saving Orders instance");
try {
getSession().save(transientInstance);
log.debug("save successful");
} catch (RuntimeE_ception re) {
log.error("save failed", re);
throw re;
}
}
2.查看定單
客戶確認(rèn)了所有的訂單選項(xiàng)后,可以向服務(wù)器 發(fā)送“查看定單明細(xì)”的請(qǐng)求:當(dāng)用戶點(diǎn)擊了圖4-13上的“明細(xì)”按鈕是,頁(yè)面運(yùn)行結(jié)果如下:
圖4-14 訂單明細(xì)
部分代碼實(shí)現(xiàn):
/_
_ 根據(jù)指定的order對(duì)象來(lái)獲得屬于該order的所有orderline項(xiàng);
_/
public ActionForward orderDetail(ActionMapping mapping, ActionForm form,
HttpServletRequest req, HttpServletResponse res) throws E_ception {
ActionForward forward = null;
String tempid = req.getParameter("orderid");
Long orderid = Long.parseLong(tempid);
Orders order = null;
try {
order = orderBiz.getOrderById(orderid);
log.debug("=== get order successful.===");
req.setAttribute("ORDER", order);
forward = mapping.findForward("showinfo");
} catch (ECPortE_ception be) {
log.error("==== get failed .====");
forward = mapping.findForward("fail");
}
return forward;
}
4.3 系統(tǒng)的測(cè)試
測(cè)試是軟件開(kāi)發(fā)必不可少的環(huán)節(jié),每個(gè)開(kāi)發(fā)者都應(yīng)該養(yǎng)成良好的測(cè)試習(xí)慣,一個(gè)系統(tǒng)的完善就是通過(guò)不斷地測(cè)試與維護(hù)來(lái)完成的。
測(cè)試的意義有以下幾點(diǎn)[18]:
(1)測(cè)試并不僅僅是為了找出錯(cuò)誤.通過(guò)分析錯(cuò)誤產(chǎn)生的原因和錯(cuò)誤的發(fā)生趨勢(shì),可以幫助項(xiàng)目管理者發(fā)現(xiàn)當(dāng)前軟件開(kāi)發(fā)過(guò)程中的缺陷,以便及時(shí)改進(jìn);
(2)這種分析也能幫助測(cè)試人員設(shè)計(jì)出有針對(duì)性的測(cè)試方法,改善測(cè)試的效率和有效性;
(3)沒(méi)有發(fā)現(xiàn)錯(cuò)誤的測(cè)試也是有價(jià)值的,完整的測(cè)試是評(píng)定軟件質(zhì)量的一種方法。
測(cè)試一般有兩種方法:如果已經(jīng)知道了產(chǎn)品應(yīng)該具有的功能,可以通過(guò)測(cè)試來(lái)檢驗(yàn)是否每個(gè)功能都能正常使用;如果知道產(chǎn)品內(nèi)部工作過(guò)程,可以通過(guò)測(cè)試來(lái)檢驗(yàn)產(chǎn)品的內(nèi)部動(dòng)作是否按照說(shuō)明書(shū)的規(guī)定正常運(yùn)行。前一個(gè)方法稱為黑盒測(cè)試,后一個(gè)稱為白盒測(cè)試。
對(duì)于本系統(tǒng),我采取第一個(gè)方法,即黑盒測(cè)試。做完一個(gè)模塊,就進(jìn)行測(cè)試,看所做的模塊能不能實(shí)現(xiàn)所需要的功能。經(jīng)過(guò)了先期的模塊測(cè)試和后期的綜合測(cè)試,本系統(tǒng)實(shí)現(xiàn)了規(guī)格說(shuō)明書(shū)的所有功能,達(dá)到了預(yù)期的要求。
小結(jié)
本章詳細(xì)介紹了系統(tǒng)主要功能模塊的具體實(shí)現(xiàn),包括用戶管理模塊、購(gòu)物車模塊和定單模塊,分析他們的設(shè)計(jì)思路,執(zhí)行步驟,并給出了每個(gè)功能的主要實(shí)現(xiàn)代碼,還有為每個(gè)功能的最終執(zhí)行結(jié)果配上截圖,讓我們看到更直觀的效果。最后對(duì)完成的系統(tǒng)進(jìn)行了測(cè)試,介紹了兩種主流的測(cè)試方法,給出了測(cè)試結(jié)果,達(dá)到了預(yù)期的要求。
第五章 總結(jié)與展望
5.1 工作總結(jié)
開(kāi)發(fā)Web站點(diǎn),是一項(xiàng)復(fù)雜、繁重的工作,需要多方面的知識(shí)。
此次通過(guò)設(shè)計(jì)網(wǎng)上交易系統(tǒng),使我接觸到許多基于java語(yǔ)言的WEB網(wǎng)絡(luò)開(kāi)發(fā)方面的知識(shí),包括HTML語(yǔ)言,CSS級(jí)聯(lián)樣式表,客戶端開(kāi)發(fā)語(yǔ)言JavaScript,MVC分層體系結(jié)構(gòu),支持MVC架構(gòu)的struts框架,開(kāi)源服務(wù)器Tomcat,mysql數(shù)據(jù)庫(kù),服務(wù)器端開(kāi)發(fā)語(yǔ)言JSP等,這些語(yǔ)言(或技術(shù))擴(kuò)展了我的知識(shí)面,也使我在制作的過(guò)程中對(duì)它們的特點(diǎn),應(yīng)用方向等有了基本的了解,并在實(shí)際的應(yīng)用中大致明白如何將它們?nèi)诤线\(yùn)用,以開(kāi)發(fā)出界面美觀,功能強(qiáng)大的Web站點(diǎn)來(lái)。
通過(guò)本次親自動(dòng)手設(shè)計(jì)系統(tǒng),我更加深刻的了解系統(tǒng)開(kāi)發(fā)的全過(guò)程,從中我熟練掌握了B/S結(jié)構(gòu)Web應(yīng)用軟件設(shè)計(jì)的思想及其開(kāi)發(fā)的全過(guò)程。首先要進(jìn)行系統(tǒng)的需求分析,分析系統(tǒng)要達(dá)到什么功能,系統(tǒng)要?jiǎng)澐譃閹讉€(gè)模塊來(lái)設(shè)計(jì),系統(tǒng)的具體功能應(yīng)當(dāng)如何去實(shí)現(xiàn);分析完之后,考慮其涉及到的計(jì)算機(jī)專業(yè)知識(shí),把問(wèn)題細(xì)化,把大的問(wèn)題劃分為小的問(wèn)題,然后逐個(gè)進(jìn)行解決。畢業(yè)設(shè)計(jì)開(kāi)始階段,由于我們沒(méi)有軟件架構(gòu)的設(shè)計(jì)經(jīng)驗(yàn),所以在項(xiàng)目的業(yè)務(wù)流程和軟件的開(kāi)發(fā)規(guī)范上犯了很的錯(cuò)誤,所以在后期的組裝過(guò)程變的非常的困難。
設(shè)計(jì)收獲:
1.掌握了網(wǎng)站開(kāi)發(fā)的基本流程,設(shè)計(jì)整個(gè)網(wǎng)站的功能模塊圖;
2.掌握了如何搭建和配置一個(gè)Tomcat服務(wù)器;
3.掌握了使用JSP編程,實(shí)現(xiàn)對(duì)信息的顯示、修改、刪除和添加等;
遇到的問(wèn)題:
1.JSP中文亂碼問(wèn)題的解決
對(duì)于JSP中文亂碼問(wèn)題的處理,常用的方法有兩種:一種方法是在JSP頁(yè)面上設(shè)置頁(yè)面的“contentType”屬性。這種方法就是在頁(yè)面開(kāi)始時(shí),設(shè)置頁(yè)面的“contentType”屬性,例如:
另一種方法是輸出中文信息時(shí)使用“ISO 8859-1”編碼。這種方法是在輸出中文信息之前,對(duì)中文信息進(jìn)行一次“ISO 8859-1”編碼。
2.Java.lang.NullPointerE_ception異常
一般是對(duì)一個(gè)為NULL值的變量進(jìn)行操作引起的。為了避免這種異常,最好在對(duì)變量操作之前檢查看它是否為NULL值。
3.SQL語(yǔ)句換行書(shū)寫(xiě)時(shí)未加適當(dāng)?shù)目崭穸鴮?dǎo)致的錯(cuò)誤。我們先看一段代碼,
String test=aaa;
String sql=〞select _ from test〞+
〞where test1=’〞+a+〞’〞+
〞and test2=bbb〞;
上面所示的代碼在執(zhí)行時(shí)將轉(zhuǎn)換成這樣的SQL語(yǔ)句:
Select _from testwhere test1=’aaa’ and test2=bbb
從輸出的SQL語(yǔ)句可以看出test和where之間,以及’aaa’和and之間都缺空格,這樣是不能從數(shù)據(jù)庫(kù)中取出數(shù)據(jù)的.正確的寫(xiě)法如下:
String test=aaa;
String sql=〞select _ from test〞+
〞 where test1=’〞+a+〞’〞+
〞 and test2=bbb〞;
5.2 后續(xù)工作展望
由于個(gè)人能力有限以及實(shí)踐經(jīng)驗(yàn)欠缺,系統(tǒng)基本滿足在線電子產(chǎn)品交易的功能需求,本系統(tǒng)不可避免有不足之處,如一些系統(tǒng)功能過(guò)于簡(jiǎn)單,所以系統(tǒng)的功能還算不上很完善。希望老師和同學(xué)能給予建議和指導(dǎo)。
參考文獻(xiàn)
[1] 景玉建.電子商務(wù)的發(fā)展與前景[J].《職業(yè)時(shí)空》,2005年第13期,P10-11
[2] 張孝祥.深入Java Web開(kāi)發(fā)內(nèi)幕——核心基礎(chǔ)[M].北京:電子工業(yè)出版社.北京.2006.10
致謝
本次畢業(yè)設(shè)計(jì)的最終完成離不開(kāi)很多人的大力協(xié)助。衷心的感謝上海達(dá)內(nèi)科技有限公司在我實(shí)習(xí)期間交給我這個(gè)項(xiàng)目任務(wù),使我有了設(shè)計(jì)課題,還感謝在實(shí)習(xí)期間給我?guī)椭捻?xiàng)目經(jīng)理以及公司同事。真誠(chéng)的感謝本次畢業(yè)設(shè)計(jì)的指導(dǎo)老師-宋玲教授,給了我自由選題的機(jī)會(huì),在我的論文審稿階段指出了很多方面的不足,并一一給出修改意見(jiàn),對(duì)我進(jìn)行悉心指導(dǎo),對(duì)我的畢業(yè)論文最終完成給予了極大的支持和幫助。
特別感謝曹杰師兄,在畢業(yè)設(shè)計(jì)中遇到難點(diǎn)的時(shí)候,熱情和耐心地給予指導(dǎo),對(duì)我畢業(yè)設(shè)計(jì)工作的順利完成有著重要的意義。
最后,再一次感謝所有幫助過(guò)我的人們!
java畢業(yè)論文范文篇四:
摘要
本文圍繞Java編程語(yǔ)言在網(wǎng)絡(luò)編程方面的具體應(yīng)用,論述了使用面向?qū)ο蠓椒?,?duì)計(jì)算器程序進(jìn)行需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì),最后使用Java編程實(shí)現(xiàn)的全過(guò)程。
java語(yǔ)言,是目前比較流行的編程語(yǔ)言。經(jīng)過(guò)10多年的發(fā)展,java已經(jīng)滲透到全球每個(gè)角落。在當(dāng)今這個(gè)網(wǎng)絡(luò)的時(shí)代,java語(yǔ)言在網(wǎng)絡(luò)編程方面的優(yōu)勢(shì)使得網(wǎng)絡(luò)編程有了更好的選擇。Java語(yǔ)言最令人矚目的特點(diǎn)是具有跨平臺(tái)性,使其不受平臺(tái)不同的影響,并得到了廣泛的應(yīng)用。
設(shè)計(jì)內(nèi)容:設(shè)計(jì)GUI界面的計(jì)算器。用戶可以通過(guò)鼠標(biāo)依次輸入?yún)⒓佑?jì)算的數(shù)值,進(jìn)行加、減、乘、除等混合運(yùn)算。
設(shè)計(jì)要求:
1.系統(tǒng)界面的上面是數(shù)字輸入對(duì)話框,用來(lái)顯示所輸入的數(shù)字和運(yùn)行的結(jié)果。
2.系統(tǒng)界面下面的左側(cè)是記憶 + - _ /。
3. 系統(tǒng)界面下面的中部是數(shù)字輸入按鈕,用來(lái)輸入數(shù)字。
4.系統(tǒng)界面下面的右側(cè)是運(yùn)算符號(hào)按鈕,用來(lái)實(shí)現(xiàn)具體的運(yùn)算。
關(guān)鍵字:java面向?qū)ο?計(jì)算器 網(wǎng)絡(luò)編程
第一章 概述
1.1 設(shè)計(jì)目的
計(jì)算器是日常生活中十分便捷有效的工具,能實(shí)現(xiàn)加、減、乘、除、開(kāi)方、求倒數(shù)等簡(jiǎn)單運(yùn)算的功能。本論文采用java編程語(yǔ)言實(shí)現(xiàn)計(jì)算器功能。該計(jì)算器大大的降低了數(shù)字計(jì)算的難度并且提高了計(jì)算的準(zhǔn)確度和精確度。使用簡(jiǎn)單,適合廣大工作人員和中小學(xué)生使用。
1.2 計(jì)算器系統(tǒng)概述
標(biāo)準(zhǔn)計(jì)算器的界面采用“圖形界面程序設(shè)計(jì)(GUI)”。GUI為用戶和應(yīng)用程序之間的交互提供了直觀、方便的交流方式。用戶使用鼠標(biāo)、鍵盤(pán)操作圖形界面上的按鈕、菜單等元素湘計(jì)算機(jī)系統(tǒng)發(fā)送命令,系統(tǒng)運(yùn)行的結(jié)果以圖形的方式顯示給用戶。
編寫(xiě)java計(jì)算器主要使用了Swing組件和AWT布局類。Swing組件主要包括按鈕、標(biāo)簽、文本輸入類、等組件,AWT主要運(yùn)用了其中的布局管理器。
1.2.1 Swing組件
Swing組件的按鈕用JButton類表示,計(jì)算器的界面主要由JButton按鈕組成,以響應(yīng)用戶的操作;
Swing中的標(biāo)簽用JLabel類表示,標(biāo)簽上可以顯示圖標(biāo)和文本;
Swing的文本輸入類包括文本框JTe_tField、文本區(qū)JTe_tArea和密碼框JPasswordField。
本計(jì)算器中僅僅使用了文本框JTe_tField,用于文本數(shù)字的顯示。
1.2.2 AWT組件
布局管理器管理組件如何放置在容器中,AWT中最常用的四種布局類:FlowLayout、BorderLayout、GridLayout、CardLayout。本項(xiàng)目主要采用了GridLayout布局。
1.3功能模塊設(shè)計(jì)
★標(biāo)準(zhǔn)計(jì)算器。
以下是標(biāo)準(zhǔn)計(jì)算器的各項(xiàng)功能:
(1)加法:
兩個(gè)及兩個(gè)以上數(shù)據(jù)進(jìn)行加法操作,可以為小數(shù)形式。
(2)減法:
兩個(gè)及兩個(gè)以上數(shù)據(jù)進(jìn)行減法操作,可以為負(fù)數(shù)形式。
(3)乘法:
兩個(gè)及兩個(gè)以上數(shù)據(jù)進(jìn)行乘法操作。
(4)除法:
兩個(gè)及兩個(gè)以上數(shù)據(jù)進(jìn)行除法操作。
(5)開(kāi)平方:
對(duì)任意數(shù)開(kāi)平方,可以為小數(shù)(不能為負(fù)數(shù))。
(6)求倒數(shù):
對(duì)任意數(shù)求倒數(shù),0除外。
(7)求百分?jǐn)?shù):
對(duì)任意一個(gè)數(shù)進(jìn)行百分號(hào)操作。
1.4 系統(tǒng)功能圖。
標(biāo)準(zhǔn)計(jì)算器
求倒數(shù)
開(kāi)平方
求百分號(hào)
加法
減法
乘法
除法
圖1.1 計(jì)算器系統(tǒng)功能圖
第二章 項(xiàng)目設(shè)計(jì)說(shuō)明
2.1標(biāo)準(zhǔn)計(jì)算器設(shè)計(jì)界面
圖2.1 計(jì)算器設(shè)計(jì)界面
2.2標(biāo)準(zhǔn)計(jì)算器設(shè)計(jì)主要代碼
標(biāo)準(zhǔn)計(jì)算器主要由一個(gè)菜單欄、一個(gè)文本框、27個(gè)按鈕組成。
2.2.1整體框架代碼
JFrame f = new JFrame("標(biāo)準(zhǔn)計(jì)算器");
f.setLocation(400, 300);
Container contentPane = f.getContentPane();
2.2.2 菜單欄代碼
圖2.2 菜單欄
JMenuBar mBar = new JMenuBar();
mBar.setOpaque(true);
mEdit = new JMenu("編輯(E)");
mEdit.setMnemonic(KeyEvent.VK_E);
mCopy = new JMenuItem("復(fù)制(C)");
mEdit.add(mCopy);
mPaste = new JMenuItem("粘貼(P)");
mEdit.add(mPaste);
mView = new JMenu("查看(V)");
mView.setMnemonic(KeyEvent.VK_V);
mView.add(new JMenuItem("標(biāo)準(zhǔn)型"));
mView.add(new JMenuItem("科學(xué)型"));
mView.addSeparator();
mView.add(new JMenuItem("查看分組"));
mHelp = new JMenu("幫助(H)");
mHelp.setMnemonic(KeyEvent.VK_H);
mHelp.add(new JMenuItem("幫助主題"));
mHelp.addSeparator();
mHelp.add(new JMenuItem("關(guān)于計(jì)算器"));
mBar.add(mEdit);
mBar.add(mView);
mBar.add(mHelp);
f.setJMenuBar(mBar);
contentPane.setLayout(new BorderLayout());
2.2.3 文本框代碼
圖2.3 文本框
JPanel pTop = new JPanel();
tResult = new JTe_tField("0.",26);
tResult.setHorizontalAlignment(JTe_tField.RIGHT);
tResult.setEditable(false);
pTop.add(tResult);
contentPane.add(pTop,BorderLayout.NORTH);
2.2.4 計(jì)算器各功能鍵代碼
圖2.4 各功能鍵圖
bOther = new JButton("MC");
bOther.addActionListener(this);
bOther.setForeground(Color.red); //字體顏色
bOther.setMargin(new Insets(3,2,3,2));//按鈕邊框和標(biāo)簽之間的空白
pLeft.add(bOther);
bOther = new JButton("MR");
bOther.addActionListener(this);
bOther.setForeground(Color.red);
bOther.setMargin(new Insets(3,2,3,2));
pLeft.add(bOther);
bOther = new JButton("MS");
bOther.addActionListener(this);
bOther.setForeground(Color.red);
bOther.setMargin(new Insets(3,2,3,2));
pLeft.add(bOther);
bOther = new JButton("M+");
bOther.addActionListener(this);
bOther.setForeground(Color.red);
bOther.setMargin(new Insets(3,2,3,2));
pLeft.add(bOther);
pBottom.add(pLeft,BorderLayout.WEST);
JPanel pRight = new JPanel();
pRight.setLayout(new BorderLayout());
JPanel pUp = new JPanel();
pUp.setLayout(new GridLayout(1,3,3,0));
bOther = new JButton("BackSpace");
bOther.addActionListener(this);
bOther.setForeground(Color.red);
bOther.setMargin(new Insets(3,0,3,5));
pUp.add(bOther);
bOther = new JButton("CE");
bOther.addActionListener(this);
bOther.setForeground(Color.red);
pUp.add(bOther);
bOther = new JButton("C");
bOther.addActionListener(this);
bOther.setForeground(Color.red);
pUp.add(bOther);
2.2.5 數(shù)字鍵及運(yùn)算符號(hào)代碼
圖2.5 數(shù)字鍵圖
JPanel pDown = new JPanel();
pDown.setLayout(new GridLayout(4,5,3,2));
bNumber = new JButton("7");
bNumber.setForeground(Color.blue);
bNumber.addActionListener(this);
bNumber.setMargin(new Insets(3,3,3,3));
pDown.add(bNumber);
(注:其他數(shù)字鍵、運(yùn)算符號(hào)鍵與“7”定義相同。)
第三章 程序運(yùn)行效果
3.1加法運(yùn)算
本計(jì)算器可以實(shí)現(xiàn)多個(gè)運(yùn)算數(shù)相加,例如:1+2+3+4
計(jì)算結(jié)果為10,所有數(shù)據(jù)均為double類型。
3.2減法運(yùn)算
本計(jì)算器可以實(shí)現(xiàn)多個(gè)運(yùn)算數(shù)相減(正負(fù)數(shù)),例如:6-5-3-1
計(jì)算結(jié)果為-3,數(shù)據(jù)類型為double類型。
3.3乘法運(yùn)算
本計(jì)算器可以實(shí)現(xiàn)多個(gè)運(yùn)算數(shù)相乘,例如2_3_4_5
運(yùn)算結(jié)果為120,數(shù)據(jù)類型為double類型。
3.4除法運(yùn)算
本計(jì)算器可以實(shí)現(xiàn)多個(gè)運(yùn)算數(shù)相除(除數(shù)不為0)例如:15/3/5/2
運(yùn)算結(jié)果為0.5,數(shù)據(jù)類型為double類型
當(dāng)除數(shù)為0時(shí),計(jì)算器自動(dòng)報(bào)錯(cuò),例如:15/0
3.5開(kāi)方運(yùn)算
當(dāng)被開(kāi)方數(shù)為非負(fù)數(shù)時(shí),計(jì)算器自動(dòng)開(kāi)方,例如:25開(kāi)方
運(yùn)算結(jié)果為5.
3.6求倒數(shù)運(yùn)算
當(dāng)按下求倒數(shù)鍵時(shí),計(jì)算器自動(dòng)為運(yùn)算數(shù)求其倒數(shù)。例如:5的倒數(shù)
運(yùn)算結(jié)果為0.2.
第四章 項(xiàng)目重難點(diǎn)分析
4.1重難點(diǎn)分析
Java計(jì)算器中整體框架的建立,按鈕的設(shè)置,整體布局在操作過(guò)程中都是很順暢的。計(jì)算器的關(guān)鍵步驟也是重點(diǎn)是實(shí)現(xiàn)計(jì)算器的計(jì)算方法。
實(shí)現(xiàn)兩個(gè)數(shù)的加減乘除等運(yùn)算是比較簡(jiǎn)單的,但是一個(gè)計(jì)算器需要做到的是實(shí)現(xiàn)多個(gè)運(yùn)算數(shù)的運(yùn)算。此時(shí)就用到了我在項(xiàng)目一開(kāi)始定義的兩個(gè)數(shù)據(jù)
每執(zhí)行一次運(yùn)算操作就把運(yùn)算結(jié)果賦值給操作數(shù)1 “op1”,并判斷下一步操作是“=”或者“其他運(yùn)算符”,決定下一步計(jì)算器的操作。
4.2程序中存在的問(wèn)題
(1)菜單欄中雖然設(shè)置了編輯、查看、幫助等選項(xiàng),但是項(xiàng)目中并沒(méi)有實(shí)際的功能。
(2)程序中設(shè)置了內(nèi)存的有關(guān)操作但是并沒(méi)有達(dá)到其預(yù)期的功能。
(3)百分號(hào)的實(shí)際功能并沒(méi)有實(shí)現(xiàn)。
(4)當(dāng)被開(kāi)方數(shù)是負(fù)數(shù)時(shí),計(jì)算器并不能給出錯(cuò)誤提示。
[參考文獻(xiàn)]
《Java編程實(shí)用技術(shù)與案例 》 譯作者:楊紹方
《軟件工程Java語(yǔ)言實(shí)現(xiàn)SoftwareEngineeringwithJava》StephenR.Schach譯者:袁兆山等
程序員天堂( 英文網(wǎng)站 大量的程序, 庫(kù), 包) http://www.programmersheavean.com
java畢業(yè)論文范文篇五:
一、引言
加深對(duì)《Java2面向?qū)ο蟪绦蛟O(shè)計(jì)》課程所學(xué)知識(shí)的理解,進(jìn)一步鞏固 Java語(yǔ)言的語(yǔ)法規(guī)則。分析系統(tǒng)的可行性,讓系統(tǒng)有一個(gè)明確的方向,使開(kāi)發(fā)更具合理性,并能分析出系統(tǒng)的具體流程,為后面的開(kāi)發(fā)做好鋪墊。明確本次課程設(shè)計(jì)所要用到的技術(shù)點(diǎn)并到網(wǎng)上搜索以及查閱相關(guān)的書(shū)籍來(lái)搜集資料。通過(guò)編寫(xiě)一個(gè)基于JAVA的應(yīng)用系統(tǒng)綜合實(shí)例,來(lái)掌握J(rèn)ava語(yǔ)言編程技巧。并學(xué)會(huì)編制結(jié)構(gòu)清晰、風(fēng)格良好的、數(shù)據(jù)結(jié)構(gòu)適當(dāng)?shù)腏ava語(yǔ)言程序,從而具備解決綜合性實(shí)際問(wèn)題的能力
二、課題內(nèi)容
用Java設(shè)計(jì)一個(gè)職工信息管理系統(tǒng),并實(shí)現(xiàn)相關(guān)功能。
三、系統(tǒng)程序要求
1、設(shè)計(jì)一個(gè)職工信息管理系統(tǒng)
2、要求包括職工信息包括職工號(hào)、姓名、性別、年齡、學(xué)歷、工資、
住 址、電話(職工號(hào)不重復(fù))
3、本系統(tǒng)功能描述:
職工信息錄入功能(職工信息用文本保存);
職工信息瀏覽功能;
查詢功能(至少一種查詢方式):
按工資查詢, 按學(xué)歷查詢
4、職工信息刪除、修改功能(這兩個(gè)功能任選)。
四、程序設(shè)計(jì)思想
該課題要求是輸入職工信息,對(duì)職工信息進(jìn)行一系列的處理。既要輸入工號(hào)又要能查找到與之對(duì)應(yīng)的職工,還要對(duì)實(shí)現(xiàn)建立,顯示,查找,刪除,信息的保存。
因?yàn)榭紤]到信息管理信息的實(shí)用性,我額外添加了一個(gè)“讀文件”功能,使利用void read()方法來(lái)實(shí)現(xiàn)的。這個(gè)“讀文件模塊"!是我用來(lái)擴(kuò)充信息管理系統(tǒng)功能的!可以使系統(tǒng)在用戶不用輸入信息就能讀取先前已存在的職工信息文件。
根據(jù)課題要求,我是這樣設(shè)計(jì)的:首先對(duì)要實(shí)現(xiàn)的功能類型分為三大類——Public類、方法類、信息類;然后細(xì)分為六個(gè)方法——void caidan()、void creat()、void output()、void search()、void delete()、void read ()。這些類和方法構(gòu)成了能夠?qū)崿F(xiàn)不同功能的模塊,很好地體現(xiàn)了面向?qū)ο蟮腏ava語(yǔ)言的編程模塊塊的思想。
我通過(guò)調(diào)用各功能模塊的幾個(gè)方法,隨后在各個(gè)method中具體實(shí)現(xiàn)相關(guān)的功能。當(dāng)然要利用throws IOE_ception進(jìn)行一些異常處理,包括輸入異常和數(shù)據(jù)的異常。在數(shù)據(jù)的錄入與輸出的過(guò)程中涉及到文件的相關(guān)操作(包括打開(kāi)與關(guān)閉等)最后是系統(tǒng)的安全退出。大部分功能都是在具體的模塊中加以實(shí)現(xiàn)的。
如search方法實(shí)現(xiàn)查詢職工信息功能;caidan方法實(shí)現(xiàn)系統(tǒng)選擇菜單界面的輸出等相關(guān)功能;delete方法用于職工信息刪除;output方法用于職工信息的輸出及瀏覽等系列功能。
五、程序源代碼及其解析
package staff;//包
import java.io._;
public class StaffInfomation {
public static void main(final String[] args) throws IOE_ception
//throws IOE_ception用來(lái)拋出io的錯(cuò)誤,文件讀寫(xiě)錯(cuò)誤, 主要涉及到j(luò)ava的安全機(jī)制
{
staffInfo staffOne[]=new staffInfo[100]; //定義100個(gè)類數(shù)組
for(int j=0;j<100;j++) staffOne[j] = new staffInfo();
//建立這100個(gè)類的對(duì)象
final ways staffTwo=new ways(); //建立這個(gè)方法類的對(duì)象
staffTwo.caidan(staffOne);
staffTwo.creat(staffOne);
staffTwo.output(staffOne);
staffTwo.search(staffOne);
staffTwo.delete(staffOne);
//以上幾個(gè)方法分別對(duì)應(yīng)著:caidan菜單選擇、增加(建立)職工信息、輸出(預(yù)覽)、查詢、刪除這些功能,以數(shù)組類為參數(shù)
}
}
class staffInfo
//職工信息類換句話說(shuō)就相當(dāng)與c語(yǔ)言里面的結(jié)構(gòu)體,存放職工的信息
{
public String name;
public String num;
public String se_;
public String age;
public String record;
public String position;
public String wanges;
public String tel;
public String addr;
//把name、num、se_、age、record等聲明為全局變量,因?yàn)樗鼈冐灤┯谡麄€(gè)程序中,方便其它方法、類調(diào)用它們
}
class ways //方法類,主要實(shí)現(xiàn)職工信息的建立,顯示,查找,刪除,信息的保存與讀取;這個(gè)類是整個(gè)程序的操作類。
{
public String recordkey;
public int i=0;//i用來(lái)存放職工的人數(shù)
public String filename="Infomation.t_t";
BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
//此處是JAVA語(yǔ)言中輸入數(shù)據(jù)的基本格式,功能有如C中的scanf函數(shù)
void caidan(staffInfo staffOne[]) throws IOE_ception
{
final BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
// 參看書(shū)34頁(yè),產(chǎn)生Buf對(duì)象;buf是BufferedReader類的變量,此處將讀入字符串至buf
int choice;
do{
System.out.println("☆★☆★☆★☆★電子信息系40706班★賀 雪 設(shè)計(jì)★☆★☆★☆\n\n");
System.out.println("┏━━━━━━━━━━━━━━━━━━┓");
System.out.println("┃★ 職工管理系統(tǒng)主菜單界面 ★┃");
System.out.println("┣━━━━━━━━━━━━━━━━━━┫");
System.out.println("┃ ★ ①.輸入職工信息 ★ ┃");
System.out.println("┃ ★ ②.預(yù)覽職工信息 ★ ┃");
System.out.println("┃ ★ ③.查找職工信息 ★ ┃");
System.out.println("┃ ★ ④.刪除職工信息 ★ ┃");
System.out.println("┃ ★?、?安全退出系統(tǒng) ★ ┃");
System.out.println("┃ ★ ⑥.讀取數(shù)據(jù) ★ ┃");
System.out.println("┗━━━━━━━━━━━━━━━━━━┛");
System.out.print(" 請(qǐng)輸入您的選擇(0--6):");
choice=Integer.parseInt(buf.readLine());
switch(choice)
{
case 1:creat(staffOne);break;
case 2:output(staffOne);break;
case 3:search(staffOne);break;
case 4:delete(staffOne);break;
case 5:save(staffOne);break;
case 6:read(staffOne);break;
}
}while(choice!=0);
}
void creat(staffInfo staffOne[]) throws IOE_ception
//這個(gè)方法是實(shí)現(xiàn)“增加(建立)職工信息”;是建立信息模塊
{
final BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
System.out.print("\n請(qǐng)輸入職工信息(以0結(jié)束)\n");
System.out.print("姓名:\n\n");
staffOne[i].name=buf.readLine();
while(staffOne[i].name.compareTo("0")!=0)
//用數(shù)組staffOne[i]來(lái)暫存職工的序 號(hào),并用compareTo方 法確定判定是否應(yīng)該寫(xiě)入新信息
{
System.out.print("工號(hào):\n\n");
staffOne[i].num=buf.readLine();
System.out.print("性別:\n\n");
staffOne[i].se_=buf.readLine();
System.out.print("年齡:\n\n");
staffOne[i].age=buf.readLine();
System.out.print("學(xué)歷:\n\n");
staffOne[i].record=buf.readLine();
System.out.print("職位:\n\n");
staffOne[i].position=buf.readLine();
System.out.print("工資:\n\n");
staffOne[i].wanges=buf.readLine();
System.out.print("電話:\n\n");
staffOne[i].tel=buf.readLine();
System.out.print("住址:\n\n");
staffOne[i].addr=buf.readLine();
i++;
System.out.println("請(qǐng)輸入下一個(gè)職工信息:\n\n");
staffOne[i].name=buf.readLine();
}
}
void output(staffInfo staffOne[]) throws IOE_ception
//這里是實(shí)現(xiàn)“輸出(預(yù)覽)職工信息”output的模塊
{
System.out.println("--------------------------------------");
System.out.println(" _員工信息表_ );
System.out.println("------------------------------------");
System.out.println("姓名 工號(hào) 性別 年齡 學(xué)歷 職位 工資 電話號(hào)碼 住址");
System.out.println("---------------------------------");
if(i!=0)
{
for(int j=0;j<i;j++)
{
System.out.print(staffOne[j].name+" "+staffOne[j].num+" "+staffOne[j].se_+" ");
System.out.print(staffOne[j].age+" "+staffOne[j].record+" "+staffOne[j].position+" ");
System.out.print(staffOne[j].wanges+" "+staffOne[j].tel+" "+staffOne[j].addr+"\n");
}
System.out.println("------------------------------");
}
else System.out.println("沒(méi)有員工信息!");
}
void search(staffInfo staffOne[]) throws IOE_ception
//這里是實(shí)現(xiàn)職工信息的查詢功能的模塊
{
final BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
System.out.println("\n請(qǐng)輸入您要查找的職工學(xué)歷:");
recordkey=buf.readLine();
boolean flg=true;
System.out.println("------------------------------------");
System.out.println(" _員工信息表_ );
System.out.println("-----------------------------------");
System.out.println("姓名 工號(hào) 性別 年齡 學(xué)歷 職位 工資 電話號(hào)碼 住址");
System.out.println("---------------------------------------");
for(int j=0;j<i;j++)
{
if(recordkey.equals(staffOne[j].record))
//equals是字符串比較函數(shù)相等返回true
{
System.out.print(staffOne[j].name+" "+staffOne[j].num+" "+staffOne[j].se_+" ");
System.out.print(staffOne[j].age+" "+staffOne[j].record+" "+staffOne[j].position+" ");
System.out.print(staffOne[j].wanges+" "+staffOne[j].tel+" "+staffOne[j].addr+"\n");
flg=false;
}
}
if(flg)
System.out.println("對(duì)不起,查無(wú)此人!");
}
void delete(staffInfo staffOne[]) throws IOE_ception
{
final BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
System.out.println("\n請(qǐng)輸入您要?jiǎng)h除的職工姓名:");
recordkey=buf.readLine();
boolean flg=true;
for(int j=0;j<i;j++)
{
//System.out.println("staffOne[j].name="+staffOne[j].name);
//System.out.println("recordkey="+recordkey);
//System.out.println("recordkey.equals(staffOne[j].name)="+recordkey.equals(staffOne[j].name));
if(recordkey.equals(staffOne[j].name))
{
for(int k=j;k<=i-1;k++)
//利用順序表的刪除算法,刪除值之后,再把后面的值往前移位,從而實(shí)現(xiàn)刪除
{
staffOne[k].name=staffOne[k+1].name ;
staffOne[k].num=staffOne[k+1].num ;
staffOne[k].se_=staffOne[k+1].se_ ;
staffOne[k].age=staffOne[k+1].age ;
staffOne[k].record=staffOne[k+1].record ;
staffOne[k].position=staffOne[k+1].position ;
staffOne[k].wanges=staffOne[k+1].wanges ;
staffOne[k].tel=staffOne[k+1].tel ;
staffOne[k].addr=staffOne[k+1].addr ;
}
i--;//職工人數(shù)要減一
flg=false;
}
}
if(flg)
System.out.println("對(duì)不起,查無(wú)此人!。");
else System.out.println("已經(jīng)刪除!。");
}
void save(staffInfo staffOne[]) throws IOE_ception
//數(shù)據(jù)的保存模塊, 把輸入的職工信息保存到相應(yīng)的文件里。
{
int k;
final FileWriter fw=new FileWriter(filename);
//調(diào)用構(gòu)造函數(shù)FileWriter()創(chuàng)建FileWriter類的對(duì)象。
//文件的讀取(書(shū)216頁(yè)13-2-2)
fw.write( i+"\n");//把職工的人數(shù)保存到文件中以便下次讀取是使用
for( k=0;k<i;k++)//每個(gè)職工有9個(gè)信息字段,下面就是這9個(gè)信息段。
{
fw.write( staffOne[k].name+"\n");
fw.write( staffOne[k].num+"\n");
fw.write( staffOne[k].se_+"\n" );
fw.write( staffOne[k].age+"\n");
fw.write( staffOne[k].record+"\n");
fw.write( staffOne[k].position+"\n") ;
fw.write( staffOne[k].wanges+"\n");
fw.write( staffOne[k].tel+"\n");
fw.write( staffOne[k].addr+"\n");
}
fw.close();
System.out.println("\n 系統(tǒng)已經(jīng)安全退出!感謝您的使用!");
System.e_it(0);
}
void read(staffInfo staffOne[]) throws IOE_ception
//這是程序的“讀文件模塊"!是我自己添加進(jìn)去擴(kuò)充系統(tǒng)功能的!可以使系統(tǒng)不用輸入信息就能讀取先前已存在的職工信息文件。
{
final FileReader fr=new FileReader(filename);
final BufferedReader bfr=new BufferedReader(fr);
//關(guān)于文件的讀取不會(huì)的看看書(shū)216頁(yè)13-2-2
if((recordkey=bfr.readLine())!=null)
i=Integer.parseInt(recordkey);
for(int j=0;j<i;j++)
{
staffOne[j].name=bfr.readLine(); 這是程序的“讀文件模塊",
是我自己添加進(jìn)去擴(kuò)充系統(tǒng)功
staffOne[j].num=bfr.readLine(); 能的!可以使系統(tǒng)不用輸入信息
就能讀取先前已存在的職工信息
staffOne[j].se_=bfr.readLine(); 文件,從中讀取數(shù)據(jù)。利用了書(shū)
本P216頁(yè)13-2-2的文件相關(guān)知識(shí)
staffOne[j].age=bfr.readLine();
staffOne[j].record=bfr.readLine();
staffOne[j].position=bfr.readLine() ;
staffOne[j].wanges=bfr.readLine();
staffOne[j].tel=bfr.readLine();
staffOne[j].addr=bfr.readLine();
}
fr.close();
System.out.println("\n 數(shù)據(jù)已經(jīng)成功讀取!");
}
}
六、心得體會(huì)
我自己感覺(jué)此次課程設(shè)計(jì)做得挺成功的,通過(guò)這一次,我學(xué)到了不少實(shí)際編程的知識(shí)。
在這次設(shè)計(jì)開(kāi)始的第一天開(kāi)始,我就開(kāi)始著手修改一個(gè)用“職工信息管理系統(tǒng)”的JAVA程序。這一過(guò)程太不順利,調(diào)試的時(shí)候都沒(méi)有成功。后來(lái)我請(qǐng)教一個(gè)學(xué)長(zhǎng),在他的指導(dǎo)下我不斷的發(fā)現(xiàn)錯(cuò)誤,并改正它們,功夫不負(fù)有心人人,我的程序最后運(yùn)行成功了。
這其中了不少的東西,磨礪了我的意志;同時(shí)還鞏固了以前所學(xué)的知識(shí),學(xué)到了不少書(shū)本上沒(méi)有的知識(shí);學(xué)到了很多java編程知識(shí),并學(xué)會(huì)了簡(jiǎn)單的使用eclipse來(lái)開(kāi)發(fā)java程序的一些使用技巧這次課程設(shè)計(jì)是對(duì)我本學(xué)期所學(xué)的知識(shí)的檢驗(yàn),由此我發(fā)現(xiàn)了不少的問(wèn)題??梢哉f(shuō)它給了我一次自我評(píng)估的機(jī)會(huì)。通過(guò)設(shè)計(jì)讓我知道了那些方面我還是有欠缺的,促使我花時(shí)間彌補(bǔ)。
臨近考試,時(shí)間太緊迫,致使程序?qū)崿F(xiàn)的功能在方法上也許不是很完美,但我以后會(huì)多向老師請(qǐng)教,自己也要加強(qiáng)對(duì)Java 的學(xué)習(xí)。努力進(jìn)一步提高自己的編程水平。
參考資料
1、《程序天下》
2、洪維恩、何嘉《java2面向?qū)ο蟪绦蛟O(shè)計(jì)》
3、Java天下-java、jsp編程論壇[黑咖啡屋]
4、黃旭等《java課程設(shè)計(jì)指導(dǎo)》
5、C編程設(shè)計(jì)(第三版) 譚浩強(qiáng)(著)
java畢業(yè)論文范文5篇相關(guān)文章:
★ Java實(shí)習(xí)報(bào)告范文精選5篇
★ 關(guān)于畢業(yè)論文中期報(bào)告心得范文十篇
★ java人力資源計(jì)算機(jī)畢業(yè)論文總結(jié)致謝(2)