網站首頁 工作範例 辦公範例 個人範例 黨團範例 簡歷範例 學生範例 其他範例 專題範例
當前位置:三優範文網 > 文祕 > 寫作指導

java畢業論文範文(通用5篇)

欄目: 寫作指導 / 釋出於: / 人氣:3.1W

java畢業論文範文 篇1

學生姓名 _______ _

java畢業論文範文(通用5篇)

學 號 ___________

專 業 ____ 班 級 ____ 指導教師

200 年 月

1.Java語言的出現

自從1946年世界上第一臺電子計算機問世以來,計算模式的發展經歷了三個階段:集中計算模式、分散計算模式和網路計算模式。Internet的出現,為在網路計算模式下的科學計算和資訊處理提供了良好平臺。然而,要充分利用網路計算模式的功能與效益,平臺的執行環境是個制約因素,而Java語言和Java技術則是解決這一問題的最佳途徑。

1991年,SUN公司的Jame Gosling,Bill Joe等人試圖為電視、烤箱等家用電器開發一種互動式的軟體系統,這種應用需要的是那種小而可靠的系統,它能夠移植,並且實時性好,適用於網路分佈環境。流行的C++是自然的選擇。不過,開發過程中遇到的許多難以克服的困難使他們意識到必須徹底解決問題了,最終,開發成功了一個名為Oak的軟體,此中蘊藏著Java的原型,當時,並未引起人們的注意。1994年下半年,隨著Internet的迅猛發展,環球資訊網WWW的快速增長,促進了Java語言研製的進展,使得它逐漸成為Internet上倍受歡迎的開發與程式語言。1995年5月Java正式問世,一些著名的計算機公司紛紛購買了Java語言的使用權,如Microsoft、IBM、Netscape、Novell、Apple、DEC、SGI等。因此,Java語言被美國著名雜誌PC Magazine評為1995年十大優秀科技產品(計算機類僅此一項入選)之一,隨之大量出現了用Java編寫的軟體產品,受到工業界的重視與好評,認為“Java是八十年代以來計算機界的一件大事”。微軟總裁比爾〃蓋茨在認真觀察了一段時間後,確認“Java是長時間以來最卓越的程式設計語言”,並確定微軟整個軟體的開發戰略從PC單機時代向以網路為中心的計算時代轉移,而購買Java則是他的重大戰略決策的實施部署。

因此,Java的誕生必將對整個計算機產業發生深遠的影響,對傳統的計算模型提出了新的挑戰。SUN Microsystem公司的總裁Scott McNealy認為:Java對Internet和WWW開闢了一個嶄新的時代。

有人預言:Java將成為網路上的“世界語”,今後,用其他語言編寫的軟體統統都要用Java語言來改寫。

2.Java語言的主要特點

Java語言是一種適用於網路程式設計的語言,它的基本結構與C++極為相似,但卻簡單得多。它集成了其它一些語言的特點和優勢,又避開了它們的不足之處。它的主要特點如下:

2.1簡單性

Java與C++相比,不再支援運算子過載、多級繼承及廣泛的自動強制等易混淆和較少使用的特性,而增加了記憶體空間自動垃圾收集的功能,複雜特性的省略和實用功能的增加使得開發變得簡單而可靠。

簡單化的另一個方面是Java的系統非常小,其基本解釋和類支援部分只佔40KB,附加的基本標準庫和執行緒支援也只需增加175KB。因此,Java應用軟體能在相當小的系統之上獨立工作

2.2平立性

這是Java最吸引人的地方。由於它採用先編譯成中間碼(位元組碼),然後裝載與校驗,再解釋成不同的機器碼來執行,即“Java虛擬機器”的思想,“遮蔽”了具體的“平臺環境”特性要求,使得只要能支援Java虛擬機器,就可執行各種Java程式。

2.3面嚮物件的技術

面向物件(O-O)的技術是近年來軟體開發中用得最為普遍的程式設計方法,,它通過把客觀事物進行分類組合、引數封裝、用成員變數來描述物件的性質、狀態,而用方法(成員函式)來實現其行為和功能。O-O技術具有繼承性、封裝性、多型性等眾多特點,Java在保留這些優點的基礎上,又具有動態聯編的特性,更能發揮出面向物件的優勢。

2.4多執行緒

多執行緒機制使應用程式能並行執行,Java有一套成熟的同步原語 ,保證了對共享資料的正確操作.通過使用多執行緒,程式設計者可以分別用不同的執行緒完成特定的行為,而不需要採用全域性的事件迴圈機制,這樣就很容易實現網路上實時的互動行為。

2.5動態性

Java的設計使它適合於一個不斷髮展的環境。在類庫中可以自由地加入新的方法和例項變數而不會影響使用者程式的執行。並且Java通過介面來支援多重繼承,使之比嚴格的類繼承具有更靈活的方式和擴充套件性。

2.6安全性

Java有建立在公共金鑰技術基礎上的確認技術.指示器語義的改變將使應用程式不能再去訪問以前的資料結構或是私有資料,大多數病毒也就無法破壞資料.因而,用Java可以構造出無病毒、安全的系統。

Java語言除上述主要特點外,還有高效能、分佈性、強大性、解釋性、可移植性等,此處不再 贅述。

3.Java語言的發展

Java自正式問世以來已經歷了四年的歷程,時間雖短,發展極快。一年一度在美國舊金山召開的世界Java One語言開發者大會(Java One Developer Conference)盛況空前正說明了這一點。四年中每年的Java One大會,既是瞭解Java最新技術動態、應用成果和下一步發展趨勢的最好場所,又是推動下一年Java快速發展的重要動力。首屆Java One大會於1996年召開,各屆簡況如下:

1996年5月29-31日,第一屆,出席會議者6500餘人,來自工業界的超過一半。有人評價說:“這是近年計算機界最光輝的一次盛會”。工業界相當看好Java語言,認為它的使用將會引起一場軟體革命:從軟體的設計風格、設計方法、設計目標到設計過程,都會產生徹底的變革,“甚至會改變此星球的生活方式”。 1997年,第二屆,出席會議者10000人。Java的追隨者不斷增加,應用開發迅速起步。

1998年3月24-27日,第三屆,出席會議者14000餘人(註冊人數),註冊門票售價1195美元,否則1395美元,即使如此,仍有不少人不惜工本,擠入會場。本次會議除了軟體巨頭微軟未參加會議外,幾乎所有的計算機公司都參加了。展廳內設300多個展臺,先後舉行了90場專題討論會,每場參加的人數從千人至五六千人不等。會議的主題是:通過Java的培訓來帶動Java軟體的開發和技術研究,從而發展生產力,獲取高額利潤,提高生活質量,推動資訊產業的進步。會議展出的內容大致如下:

Java開發工具軟體,如:JMF、JDK、Symantec Visual Cafe、Java Dynamic Management Kit、JFC、JNDI、Java Studio 等;

企業資訊管理解決方案軟體,如:EJB(Enterprise JavaBeans);

基於Java技術的資訊家電,如:機頂盒、Java電話等;

個人資訊綜合服務(Java戒指)、社會資訊綜合查詢亭(Kiosk);

電子商務軟體、智慧卡、Java Card API 等;

網路計算環境下的Java伺服器軟體、遠端方法呼叫(RMI)、基於Java技術的移動計算裝置;

JMS(Java Message Service)用於出版、票據訂閱的軟體;

JOS(Java OS)、基於Java技術的NC和Java Station。

1999年6月15-18日,第四屆,出席會議者達20xx0人,300多家廠商參展,舉辦400多場技術講座,555名演講者慷慨陳詞,精彩紛呈。這次大會的主要特點是:

Java框架結構被梳理清晰

本次JavaOne大會上,Sun公司的一個重大舉措就是公佈了Java平臺的最新架構。重新定義的Java平臺以Java 2為核心,由面向企業和伺服器市場的企業版Java 2(J2EE)、面向傳統PC客戶機市場的標準版Java 2(J2SE)和麵向資訊電器等後PC終端裝置市場的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組成。雖然新框架結構中的內容都是已有的,但這樣重新定義和組合,使得Java平臺的概念簡單化,從而變得易於理解,更適合於進行市場推廣。

2)重點放在企業平臺

隨著Internet的飛速發展,企業計算模式正摒棄C/S結構而採用Web-Browser結構,此即瘦客戶端/胖伺服器、大容量資料庫的3層或N層體系結構。由於Java的特點,使得它在開發伺服器端的應用程式方面有著得天獨厚的優勢,面向伺服器端的J2EE為當今逐漸流行的N層體系結構提供了一個標準的Java計算平臺:介面一致、工具簡易、豐富、Web頁面互聯便捷,從而能大大加速和簡化各種應用系統的開發。

3) 加速後PC時代的程序

計算機的發展創造了Internet,但是計算機現在卻不是訪問Internet的唯一方式。正在出現的資訊化、智慧化的消費類電子產品打破了PC作為資訊終端的壟斷地位,成為人類進入Internet的新門戶。資訊終端的多元化預示著所謂後PC(post-PC)時代的到來。消費類的資訊終端量大面廣,是典型的瘦客戶機,其本身的資源和能力不能與PC相比,但必須更加智慧化,並對伺服器端的管理提出了更高的要求。而Java平臺恰恰滿足了這種要求。本次大會推出的Kjava虛擬機器能執行在16以上的微處理器上,佔用記憶體少,人們可以隨心所欲,在資源有限的裝置上方便地開發出各種各樣的應用,直接執行在不同的消費類或其它電子裝置上;而Jini的出現為Java網路連線提供了公共標準,使得任何Java裝置都可以連入網路中被自動識別,並可充分利用網路上已有的各種資源。大力推進Jini的發展是Sun公司加速後PC時代程序的一項重要策略。

4)應用系統異彩紛呈

與上屆大會一樣,展出內容有:應用工具、應用系統、資訊家電等。特別在實時系統開發方面,以IBM為首開發出了應用於工業實時環境的Java嵌入系統,展現出Java在工業領域的廣闊應用前景。

Java語言的出現和發展,得到了IT業界的青睞,它像一面大旗,凝聚了世界眾多的廠商與Sun公司一道,結成了對抗微軟壟斷的聯盟。許多知名廠商紛紛購買Java許可證,目前已有90多萬個軟體開發商加入了Java陣營,1億個Java終端使用者,幾千種Java應用軟體產品,1500餘種Java書籍(自Java問世4年來,平均每天出版一本)。這真是IT業界的盛事!

IBM公司提出“高舉Java大旗,全力以赴”的口號,它在全世界的11個國家有28個實驗室,集聚了2500餘名技術人員,全天侯24小時進行全方位開發;晶片巨人Intel提出“抓住時機,佔領Java陣地”!決心使Intel晶片系統成為開發Java應用執行的最佳平臺;Novell則宣稱“Java是Novell的未來,未來是伺服器端Java的市場”;作為Java發明者的Sun公司,堅持“保衛Java大旗,發展Java之路”的方針,通過對Java的“研究椘攔罈構造棽饈詶推廣”的過程,從而佔領市場。此外,HP、Oracle、Apple、Sybase、Netscape、Informix、3Com、Motorola等公司均是Sun的堅強同盟。

在我國,Java的引進與開發起步早,發展水平基本與世界同步。目前,Sun公司已在中國建成了由5個授權中心、20多個Internet/Intarnet Java解決方案中心和10所Java大學、若干培訓中心組成的三級結構。全面推動Java在中國的普及、應用、研究、開發,培養了數以十萬計的Java開發人員。此外,Sun還牽頭成立了中外軟體廠商的開發聯盟。

在中國,Java的開發可以說是“人才濟濟,成果累累”。如清華大學王克巨集教授帶領的課題組面向全國,自96年開始舉辦了多期Java培訓班和講座,開設了數期本科生、研究生Java課程,出版了“Java系列叢書”10餘冊 ,承擔了國家“”攻關專案“基於Java技術的互動式遠端教學系統”,並與日本就Java開發進行了國際合作,成績斐然;東大阿派下屬的寶鋼東軟軟體技術研究中心是國內是首屈一指的Java研發骨幹企業,該中心從95年起就開始了Java的研發,目前,已掌握了Personal Java的核心移植技術,併成功地將JVM移植到汽車導航平臺。此外,他們還開發出支援Jini協議的即插即用網路印表機軟體,以及一套Jini資訊家電網路的視覺化演示環境,完成了基於JavaBeans的元件化軟體開發及執行支援環境等多項成果;在中國臺灣,22家知名計算機公司成立了“Java聯盟”,並在臺北建立了“Java開發中心”,新竹建立了“Java語言實驗室”;在

香港,舉行了全島Java杯比賽,掀起了學習Java的熱潮 。Java的浪潮洶湧澎湃,席捲全球!

4. Java技術

Java發展至今日,已不僅僅是一種程式語言,實際上已形成了一門技術.其內容包括:

1)Java軟體包

Java語言及其程式設計技術、JavaOS、Java開發環境與工具、Java語言的各種軟體包、資料庫介面JDBC等。

2)Java虛擬機器及其規範

3) Java嵌入技術(Java晶片)

已推出的有Java戒指、Java卡等。1999年8月2日,Sun公司宣佈名為MAJC的專門為Java語言設計的的晶片優化研製成功,欲與Intel試比高低。該晶片在設計時採用了模組式高效能運算引擎,實質為一種晶片級並行處理機,能以更有效的方式分解計算任務,特別適合處理多媒體資料。Sun公司希望通過MAJC晶片的釋出催生出一個基於Java語言的微處理器家族,與Intel公司競爭。設想中的Java處理器將應用在從低價消費電子產品到高階因特網伺服器領域。

4)Java計算

基於Java技術的企業Internet/Intranet資訊系統以及其他應用系統。

5)Jini技術

1999年初正式釋出後,立刻得到業界的廣泛支援。Jini的出現為Java網路連線提供了公共標準,使得任何Java裝置都可以連入網路中被自動識別,並可充分

利用網路上已有的各種資源。它把網路上的各類裝置(包括消費類電子裝置如行動電話、PDA、DTV、HPC、NC、遊戲機、電冰箱、智慧卡等等)和各種軟體組合成一個單一、動態的分散式系統,使網路更易於操縱、易於管理,具有更高的可配臵性。Jini將使網路具有自發性,它的出現大大擴充套件了“計算”和“計算機”的含義,極大地簡化了網路操作,對家庭使用者來說,使用網上裝置即插即用,就像使用電話一樣方便。Java和Jini 不僅可以不依賴於Windows為代表的作業系統,而且引導著資訊產業的潮流,使Sun公司能在未來的、非PC類電子產品的數字化市場中強佔制高點。

6)Jiro平臺

異質網路環境中安裝的儲存系統的多樣性和分佈性,給儲存管理帶來了巨大的挑戰。使用者和開發人員都希望能有一種技術,能更好地促進企業儲存管理方案的開發。而Jiro平臺正是解決此問題的革命性方案。Jiro平臺實現了Java和Jini 技術,它是一個便於使用者管理異質網路上由各種伺服器、儲存和裝置組成的混合環境的開放式儲存管理平臺。它對作業系統是中立的。Jiro為跨異質儲存區域網(SAN)的管理服務和裝置提供了一個開放平臺,允許伺服器、儲存和聯網裝置在異質網路環境中無縫地協同工作。Jiro平臺為開發者帶來的好處有: 允許開發者利用各種實現管理儲存網路的目標功能建立應用;

提供了一個可以在各種應用、服務和裝置之間互動操作的元件模型; 允許裝置易被增加、刪除;

允許應用或服務被自動更新。

1999年7月,Sun釋出了正式的Jiro規範草案,供公眾討論、修改。目前,Jiro平臺的團體成員已超過25家,支援Jiro平臺的廠商超過300家。有眼光的廠商紛紛加入到這些組行列,從而加快了Jiro的發展。

結語

Java自問世以來,以其得天獨厚的優勢,在IT業界掀起了研究、開發它的浪潮,顯示了“鵬程萬里”的美好前景。作為一種與底層硬體無關的、“編寫一次,到處執行”的高階語言和計算平臺,Java天生就具有將網路上的各個平臺連成一體的能力,真正實現了“網路就是計算機”的理念。以Java為代表的網路的成長,改變了我們的聯絡方式、生活方式、學習方式和經營方式。它的來到使我們目睹了一場類似印刷術的重大變革。毫無疑問,它將影響人類社會的發展,這就是:Java加速人類進入網路時代!

Java是當今IT產業和人類文明的創新和希望!

java畢業論文範文 篇2

摘要

本文圍繞Java程式語言在網路程式設計方面的具體應用,論述了使用面向物件方法,對計算器程式進行需求分析、概要設計、詳細設計,最後使用Java程式設計實現的全過程。

java語言,是目前比較流行的程式語言。經過10多年的發展,java已經滲透到全球每個角落。在當今這個網路的時代,java語言在網路程式設計方面的優勢使得網路程式設計有了更好的選擇。Java語言最令人矚目的特點是具有跨平臺性,使其不受平臺不同的影響,並得到了廣泛的應用。

設計內容:設計GUI介面的計算器。使用者可以通過滑鼠依次輸入參加計算的數值,進行加、減、乘、除等混合運算。

設計要求:

1.系統介面的上面是數字輸入對話方塊,用來顯示所輸入的數字和執行的結果。

2.系統介面下面的左側是記憶 + - * /。

3. 系統介面下面的中部是數字輸入按鈕,用來輸入數字。

4.系統介面下面的右側是運算子號按鈕,用來實現具體的運算。

關鍵字:java面向物件 計算器 網路程式設計

第一章 概述

1.1 設計目的

計算器是日常生活中十分便捷有效的工具,能實現加、減、乘、除、開方、求倒數等簡單運算的功能。本論文采用java程式語言實現計算器功能。該計算器大大的降低了數字計算的難度並且提高了計算的準確度和精確度。使用簡單,適合廣大工作人員和中國小生使用。

1.2 計算器系統概述

標準計算器的介面採用“圖形介面程式設計(GUI)”。GUI為使用者和應用程式之間的互動提供了直觀、方便的交流方式。使用者使用滑鼠、鍵盤操作圖形介面上的按鈕、選單等元素湘計算機系統傳送命令,系統執行的結果以圖形的方式顯示給使用者。

編寫java計算器主要使用了Swing元件和AWT佈局類。Swing元件主要包括按鈕、標籤、文字輸入類、等元件,AWT主要運用了其中的佈局管理器。

1.2.1 Swing元件

Swing元件的按鈕用JButton類表示,計算器的介面主要由JButton按鈕組成,以響應使用者的操作;

Swing中的標籤用JLabel類表示,標籤上可以顯示圖示和文字;

Swing的文字輸入類包括文字框JTextField、文字區JTextArea和密碼框JPasswordField。

本計算器中僅僅使用了文字框JTextField,用於文字數字的顯示。

1.2.2 AWT元件

佈局管理器管理元件如何放置在容器中,AWT中最常用的四種佈局類:FlowLayout、BorderLayout、GridLayout、CardLayout。本專案主要採用了GridLayout佈局。

1.3功能模組設計

★標準計算器。

以下是標準計算器的各項功能:

(1)加法:

兩個及兩個以上資料進行加法操作,可以為小數形式。

(2)減法:

兩個及兩個以上資料進行減法操作,可以為負數形式。

(3)乘法:

兩個及兩個以上資料進行乘法操作。

(4)除法:

兩個及兩個以上資料進行除法操作。

(5)開平方:

對任意數開平方,可以為小數(不能為負數)。

(6)求倒數:

對任意數求倒數,0除外。

(7)求百分數:

對任意一個數進行百分號操作。

1.4 系統功能圖。

標準計算器

求倒數

開平方

求百分號

加法

減法

乘法

除法

圖1.1 計算器系統功能圖

第二章 專案設計說明

2.1標準計算器設計介面

圖2.1 計算器設計介面

2.2標準計算器設計主要程式碼

標準計算器主要由一個選單欄、一個文字框、27個按鈕組成。

2.2.1整體框架程式碼

JFrame f = new JFrame("標準計算器");

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("複製(C)");

mEdit.add(mCopy);

mPaste = new JMenuItem("貼上(P)");

mEdit.add(mPaste);

mView = new JMenu("檢視(V)");

mView.setMnemonic(KeyEvent.VK_V);

mView.add(new JMenuItem("標準型"));

mView.add(new JMenuItem("科學型"));

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("關於計算器"));

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 JTextField("0.",26);

tResult.setHorizontalAlignment(JTextField.RIGHT);

tResult.setEditable(false);

pTop.add(tResult);

contentPane.add(pTop,BorderLayout.NORTH);

2.2.4 計算器各功能鍵程式碼

圖2.4 各功能鍵圖

bOther = new JButton("MC");

bOther.addActionListener(this);

bOther.setForeground(Color.red); //字型顏色

bOther.setMargin(new Insets(3,2,3,2));//按鈕邊框和標籤之間的空白

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 數字鍵及運算子號程式碼

圖2.5 數字鍵圖

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);

(注:其他數字鍵、運算子號鍵與“7”定義相同。)

第三章 程式執行效果

3.1加法運算

本計算器可以實現多個運算數相加,例如:1+2+3+4

計算結果為10,所有資料均為double型別。

3.2減法運算

本計算器可以實現多個運算數相減(正負數),例如:6-5-3-1

計算結果為-3,資料型別為double型別。

3.3乘法運算

本計算器可以實現多個運算數相乘,例如2*3*4*5

運算結果為120,資料型別為double型別。

3.4除法運算

本計算器可以實現多個運算數相除(除數不為0)例如:15/3/5/2

運算結果為0.5,資料型別為double型別

當除數為0時,計算器自動報錯,例如:15/0

3.5開方運算

當被開方數為非負數時,計算器自動開方,例如:25開方

運算結果為5.

3.6求倒數運算

當按下求倒數鍵時,計算器自動為運算數求其倒數。例如:5的倒數

運算結果為0.2.

第四章 專案重難點分析

4.1重難點分析

Java計算器中整體框架的建立,按鈕的設定,整體佈局在操作過程中都是很順暢的。計算器的關鍵步驟也是重點是實現計算器的計算方法。

實現兩個數的加減乘除等運算是比較簡單的,但是一個計算器需要做到的是實現多個運算數的運算。此時就用到了我在專案一開始定義的兩個資料

每執行一次運算操作就把運算結果賦值給運算元1 “op1”,並判斷下一步操作是“=”或者“其他運算子”,決定下一步計算器的操作。

4.2程式中存在的問題

(1)選單欄中雖然設定了編輯、檢視、幫助等選項,但是專案中並沒有實際的功能。

(2)程式中設定了記憶體的有關操作但是並沒有達到其預期的功能。

(3)百分號的實際功能並沒有實現。

(4)當被開方數是負數時,計算器並不能給出錯誤提示。

[參考文獻]

《Java程式設計實用技術與案例 》 譯作者:楊紹方

《軟體工程Java語言實現SoftwareEngineeringwithJava》StephenR.Schach譯者:袁兆山等

程式設計師天堂( 英文網站 大量的程式, 庫, 包)

java畢業論文範文 篇3

一、引言

加深對《Java2面向物件程式設計》課程所學知識的理解,進一步鞏固 Java語言的語法規則。分析系統的可行性,讓系統有一個明確的方向,使開發更具合理性,並能分析出系統的具體流程,為後面的開發做好鋪墊。明確本次課程設計所要用到的技術點併到網上搜索以及查閱相關的書籍來蒐集資料。通過編寫一個基於JAVA的應用系統綜合例項,來掌握Java語言程式設計技巧。並學會編制結構清晰、風格良好的、資料結構適當的Java語言程式,從而具備解決綜合性實際問題的能力

二、課題內容

用Java設計一個職工資訊管理系統,並實現相關功能。

三、系統程式要求

1、設計一個職工資訊管理系統

2、要求包括職工資訊包括職工號、姓名、性別、年齡、學歷、工資、

住 址、電話(職工號不重複)

3、本系統功能描述:

職工資訊錄入功能(職工資訊用文字儲存);

職工資訊瀏覽功能;

查詢功能(至少一種查詢方式):

按工資查詢, 按學歷查詢

4、職工資訊刪除、修改功能(這兩個功能任選)。

四、程式設計思想

該課題要求是輸入職工資訊,對職工資訊進行一系列的處理。既要輸入工號又要能查詢到與之對應的職工,還要對實現建立,顯示,查詢,刪除,資訊的儲存。

因為考慮到資訊管理資訊的實用性,我額外添加了一個“讀檔案”功能,使利用void read方法來實現的。這個“讀檔案模組"!是我用來擴充資訊管理系統功能的!可以使系統在使用者不用輸入資訊就能讀取先前已存在的職工資訊檔案。

根據課題要求,我是這樣設計的:首先對要實現的功能型別分為三大類——Public類、方法類、資訊類;然後細分為六個方法——void caidan、void creat、void output、void search、void delete、void read 。這些類和方法構成了能夠實現不同功能的模組,很好地體現了面向物件的Java語言的程式設計模組塊的思想。

我通過呼叫各功能模組的幾個方法,隨後在各個method中具體實現相關的功能。當然要利用throws IOException進行一些異常處理,包括輸入異常和資料的異常。在資料的錄入與輸出的過程中涉及到檔案的相關操作(包括開啟與關閉等)最後是系統的安全退出。大部分功能都是在具體的模組中加以實現的。

如search方法實現查詢職工資訊功能;caidan方法實現系統選擇選單介面的輸出等相關功能;delete方法用於職工資訊刪除;output方法用於職工資訊的輸出及瀏覽等系列功能。

五、程式原始碼及其解析

package staff;//包

import java.io.*;

public class StaffInfomation {

public static void main(final String args) throws IOException

//throws IOException用來丟擲io的錯誤,檔案讀寫錯誤, 主要涉及到java的安全機制

{

staffInfo staffOne=new staffInfo[100]; //定義100個類陣列

for(int j=0;j<100;j++) staffOne[j] = new staffInfo;

//建立這100個類的物件

final ways staffTwo=new ways; //建立這個方法類的物件

staffTwo.caidan(staffOne);

staffTwo.creat(staffOne);

staffTwo.output(staffOne);

staffTwo.search(staffOne);

staffTwo.delete(staffOne);

//以上幾個方法分別對應著:caidan選單選擇、增加(建立)職工資訊、輸出(預覽)、查詢、刪除這些功能,以陣列類為引數

}

}

class staffInfo

//職工資訊類換句話說就相當與c語言裡面的結構體,存放職工的資訊

{

public String name;

public String num;

public String sex;

public String age;

public String record;

public String position;

public String wanges;

public String tel;

public String addr;

//把name、num、sex、age、record等宣告為全域性變數,因為它們貫穿於整個程式中,方便其它方法、類呼叫它們

}

class ways //方法類,主要實現職工資訊的建立,顯示,查詢,刪除,資訊的儲存與讀取;這個類是整個程式的操作類。

{

public String recordkey;

public int i=0;//i用來存放職工的人數

public String filename="Infomation.txt";

BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));

//此處是JAVA語言中輸入資料的基本格式,功能有如C中的scanf函式

void caidan(staffInfo staffOne) throws IOException

{

final BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));

// 參看書34頁,產生Buf物件;buf是BufferedReader類的變數,此處將讀入字串至buf

int choice;

do{

System.out.println("☆★☆★☆★☆★電子資訊系40706班★賀 雪 設計★☆★☆★☆nn");

System.out.println("┏━━━━━━━━━━━━━━━━━━┓");

System.out.println("┃★ 職工管理系統主選單介面 ★┃");

System.out.println("┣━━━━━━━━━━━━━━━━━━┫");

System.out.println("┃ ★ ①.輸入職工資訊 ★ ┃");

System.out.println("┃ ★ ②.預覽職工資訊 ★ ┃");

System.out.println("┃ ★ ③.查詢職工資訊 ★   ┃");

System.out.println("┃ ★ ④.刪除職工資訊 ★    ┃");

System.out.println("┃ ★ ⑤.安全退出系統 ★ ┃");

System.out.println("┃ ★ ⑥.讀取資料 ★ ┃");

System.out.println("┗━━━━━━━━━━━━━━━━━━┛");

System.out.print(" 請輸入您的選擇(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 IOException

//這個方法是實現“增加(建立)職工資訊”;是建立資訊模組

{

final BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));

System.out.print("n請輸入職工資訊(以0結束)n");

System.out.print("姓名:nn");

staffOne[i].name=buf.readLine;

while(staffOne[i].name.compareTo("0")!=0)

//用陣列staffOne[i]來暫存職工的序 號,並用compareTo方 法確定判定是否應該寫入新資訊

{

System.out.print("工號:nn");

staffOne[i].num=buf.readLine;

System.out.print("性別:nn");

staffOne[i].sex=buf.readLine;

System.out.print("年齡:nn");

staffOne[i].age=buf.readLine;

System.out.print("學歷:nn");

staffOne[i].record=buf.readLine;

System.out.print("職位:nn");

staffOne[i].position=buf.readLine;

System.out.print("工資:nn");

staffOne[i].wanges=buf.readLine;

System.out.print("電話:nn");

staffOne[i].tel=buf.readLine;

System.out.print("住址:nn");

staffOne[i].addr=buf.readLine;

i++;

System.out.println("請輸入下一個職工資訊:nn");

staffOne[i].name=buf.readLine;

}

}

void output(staffInfo staffOne) throws IOException

//這裡是實現“輸出(預覽)職工資訊”output的模組

{

System.out.println("--------------------------------------");

System.out.println(" *員工資訊表* );

System.out.println("------------------------------------");

System.out.println("姓名 工號 性別 年齡 學歷 職位 工資 電話號碼 住址");

System.out.println("---------------------------------");

if(i!=0)

{

for(int j=0;j<i;j++)

{

System.out.print(staffOne[j].name+" "+staffOne[j].num+" "+staffOne[j].sex+" ");

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("沒有員工資訊!");

}

void search(staffInfo staffOne) throws IOException

//這裡是實現職工資訊的查詢功能的模組

{

final BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));

System.out.println("n請輸入您要查詢的職工學歷:");

recordkey=buf.readLine;

boolean flg=true;

System.out.println("------------------------------------");

System.out.println(" *員工資訊表* );

System.out.println("-----------------------------------");

System.out.println("姓名 工號 性別 年齡 學歷 職位 工資 電話號碼 住址");

System.out.println("---------------------------------------");

for(int j=0;j<i;j++)

{

if(recordkey.equals(staffOne[j].record))

//equals是字串比較函式相等返回true

{

System.out.print(staffOne[j].name+" "+staffOne[j].num+" "+staffOne[j].sex+" ");

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("對不起,查無此人!");

}

void delete(staffInfo staffOne) throws IOException

{

final BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));

System.out.println("n請輸入您要刪除的職工姓名:");

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++)

//利用順序表的刪除演算法,刪除值之後,再把後面的值往前移位,從而實現刪除

{

staffOne[k].name=staffOne[k+1].name ;

staffOne[k].num=staffOne[k+1].num ;

staffOne[k].sex=staffOne[k+1].sex ;

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--;//職工人數要減一

flg=false;

}

}

if(flg)

System.out.println("對不起,查無此人!。");

else System.out.println("已經刪除!。");

}

void save(staffInfo staffOne) throws IOException

//資料的儲存模組, 把輸入的職工資訊儲存到相應的檔案裡。

{

int k;

final FileWriter fw=new FileWriter(filename);

//呼叫建構函式FileWriter建立FileWriter類的物件。

//檔案的讀取(書216頁13-2-2)

fw.write( i+"n");//把職工的人數儲存到檔案中以便下次讀取是使用

for( k=0;k<i;k++)//每個職工有9個資訊欄位,下面就是這9個資訊段。

{

fw.write( staffOne[k].name+"n");

fw.write( staffOne[k].num+"n");

fw.write( staffOne[k].sex+"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 系統已經安全退出!感謝您的使用!");

System.exit(0);

}

void read(staffInfo staffOne) throws IOException

//這是程式的“讀檔案模組"!是我自己新增進去擴充系統功能的!可以使系統不用輸入資訊就能讀取先前已存在的職工資訊檔案。

{

final FileReader fr=new FileReader(filename);

final BufferedReader bfr=new BufferedReader(fr);

//關於檔案的讀取不會的看看書216頁13-2-2

if((recordkey=bfr.readLine)!=null)

i=Integer.parseInt(recordkey);

for(int j=0;j<i;j++)

{

staffOne[j].name=bfr.readLine; 這是程式的“讀檔案模組",

是我自己新增進去擴充系統功

staffOne[j].num=bfr.readLine; 能的!可以使系統不用輸入資訊

就能讀取先前已存在的職工資訊

staffOne[j].sex=bfr.readLine; 檔案,從中讀取資料。利用了書

本P216頁13-2-2的檔案相關知識

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 資料已經成功讀取!");

}

}

六、心得體會

我自己感覺此次課程設計做得挺成功的,通過這一次,我學到了不少實際程式設計的知識。

在這次設計開始的第一天開始,我就開始著手修改一個用“職工資訊管理系統”的JAVA程式。這一過程太不順利,除錯的時候都沒有成功。後來我請教一個學長,在他的指導下我不斷的發現錯誤,並改正它們,功夫不負有心人人,我的程式最後執行成功了。

這其中了不少的東西,磨礪了我的意志;同時還鞏固了以前所學的知識,學到了不少書本上沒有的知識;學到了很多java程式設計知識,並學會了簡單的使用eclipse來開發java程式的一些使用技巧這次課程設計是對我本學期所學的知識的檢驗,由此我發現了不少的問題。可以說它給了我一次自我評估的機會。通過設計讓我知道了那些方面我還是有欠缺的,促使我花時間彌補。

臨近考試,時間太緊迫,致使程式實現的功能在方法上也許不是很完美,但我以後會多向老師請教,自己也要加強對Java 的學習。努力進一步提高自己的程式設計水平。

參考資料

1、《程式天下》

2、洪維恩、何嘉《java2面向物件程式設計》

3、Java天下-java、jsp程式設計論壇[黑咖啡屋]

4、黃旭等《java課程設計指導》

5、C程式設計設計(第三版) 譚浩強(著)

java畢業論文範文 篇4

大 學

畢業設計(論文)

題目: 基於Java技術的網上交易系統的開發

學 院:

專 業:

班 級:

學 號:

學生姓名:

指導老師:

20xx年6月9日

摘 要

隨著資訊高速公路的建立,Internet的普及,網路技術的迅猛發展,人類社會已經進入了一個資訊化社會。

電子商務指利用簡單、快捷、低成本的電子通訊方式,買賣雙方通過網路進行各種商貿活動的一種商業交易模式。隨著網際網路的發展,以及人們消費觀念和生活方式的改變,這種新型的商業模式逐漸融入了人們的生活中。通過企業的入口網站,人們可以足不出戶的尋找自己所需的物品,通過對不同虛擬商城的訪問,“顧客”可以找出價效比最高的商品,自己有極大地選擇空間;通過下訂單,你可以很快得到自己想要的物品,這給顧客節省很多時間和精力;對於廠家來說,可以極大地降低庫存風險,可根據客戶需要,按需採購和生產,大大地提高了效益。

本畢業設計的內容是設計並且實現一個基於web技術的線上交易系統。系統主要以j2EE作為開發基礎,使用了struts+spring+hibernate等多種協議或技術,用eclipse作為開發工具,以Macromedia公司的Dreamweaver作為介面美化工具。基本實現了網上交易系統應有的主要功能模組,包括:管理員的登入,管理和維護;使用者註冊、登入、登出,個人資訊的查詢、修改;商品管理,購物車管理,訂單管理。該系統介面簡單、操作方便,容易維護。

關鍵詞:電子商務 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 本文結構

第二章 系統應用的關鍵技術

2.1 JSP技術介紹

2.1.1 JSP的概述

2.1.3 JSP的強勢與劣勢

2.1.4 JSP與ASP的比較

2.2 Java元件JavaBeans

2.2.1 什麼是JavaBeans

2.2.2 JSP與JavaBeans的關係

2.3 J2EE概述

2.4關於Struts

2.4.1 Struts簡介

2.4.2 Struts的主要功能

2.5 關於Spring

2.5.1 Spring簡介

2.5.2 為什麼需要Spring

2.5.3 Spring帶給我們什麼

2.6 關於Hibernate

2.6.1為什麼引入hibernate

2.6.2使用Hibernate的好處

2.6.3 Hibernate的工作原理

2.7 Mysql

2.7.1 mysql的特點

2.7.2 mysql的安裝和配置(部分截圖)

2.8 Tomcat伺服器

2.8.1 Tomcat 伺服器簡介

2.8.2 Tomcat的特點

2.8.3 Tomcat的優勢

2.8.4 Tomcat伺服器的安裝和配置

小結

第三章 系統需求分析和總體設計

3.1 系統功能需求

3.2 系統角色及其功能分析

3.2.1 系統的3個角色:

3.2.2 系統角色的功能

3.3 總體設計思想概述

3.4 資料庫設計

3.4.1 E-R圖

3.4.2資料表的設計

3.5 系統的類設計

3.5.1 DAO類設計

3.5.2 POJO類設計(部分)

3.5.3 過濾器類設計

3.5.4 監聽器類設計

3.6系統的用例圖

3.6.1 總體用例分析

3.6.2 使用者管理用例分析

3.6.3 購物車管理用例分析

小結

第四章 系統的詳細設計

4.1 資料庫與POJO對映的實現

4.2 主要模組的設計說明與介面

4.2.1使用者管理模組

4.2.2購物車管理模組

4.2.3 定單模組

4.3 系統的測試

小結

第五章 總結與展望

5.1 工作總結

5.2 後續工作展望

參考文獻

附錄

致謝

第一章 引言

1.1 課題背景

隨著當今世界進入資訊時代,Internet的飛速發展和在全球的普及給人類生活帶來革命性的改變。Internet將傳統意義上的物理空間轉變成電子空間,把人們帶入了一個網路社會中。網路時代的到來,帶給人們的不只是快捷、方便,它帶來的是劃時代的進步。在網路大家族中,電子商務則是一個熱點,它的發展速度之快遠遠超過我們的想象,普及速度之快令人難以置信。我們完全有理由相信,全球性的電子商務熱潮必將一浪高於一浪[1]。

電子商務一個最基本體現就是電子購物網站,從一定程度上講它就是網上超市,也就是一種網上交易。“網”字意味著它具有資訊時代的快捷方便等特徵。事實上電子商務的出現,給消費者的地位,消費觀念帶來了重要的變化。網上交易系統正是應這種變化而悄然崛起,並以驚人的速度發展著。通過網上交易系統,人們可以足不出戶的尋找自己所需的物品,通過對不同虛擬商城的訪問,“顧客”可以找出價效比最高的商品,自己有極大地選擇空間,通過下訂單,你可以很快得到自己想要的物品,這給顧客節省很多時間和精力,對於廠家來說,可以極大的降低庫存風險,根據客戶需要,按需生產和採購,大大的提高了效益。

1.2 課題目的和意義

自從電子商務出現在人們的視野中,電子商務就在全世界範圍內受到了格外的關注,並得到了迅速的發展。從實用角度看,目前電子商務網站的普遍存在是購買者難以找到所希望購買的商品甚至使用者在耗費很大的經歷與時間後即使找到了自己想要的產品,最後卻由於各種原因而放棄購買。很多報道指出,推銷商們普遍對目前的網路行銷感到失望,儘管如此,電子商務無疑是目前最好的線上商品展示的媒體和工具。然而,網上產品展示的目的不僅僅是展示產品,而更重要的是通過讓客戶更多地瞭解產品而提高產品的購買率。因此,電子商務目前所面臨的挑戰之一就是網站的設計,如何使得網頁能夠有效地展示自己的產品,同時方便使用者的使用,使使用者以愉悅的心情選購稱心如意的商品。

本系統的目的和意義就是應上述挑戰而嘗試為使用者提供一個操作簡單方便的網上交易系統。利用本系統,使用者可以自由地瀏覽商品,註冊成為網站會員,選擇商品加入自己的購物車,而後生成訂單,實現網上購物。

1.3 本文結構

本文共分五個章節,系統地闡述了系統開發的全過程。

第一章,主要介紹了開發的背景、目的和意義。

第二章,主要介紹了本系統所用到的關鍵技術和工具,為下一步的設計的設計奠定基礎。

第三章,主要對系統進行需求分析並進行總體設計。需求分析階段通過分析系統的功能模組的劃分以及角色的劃分,為系統的總體設計提供依據。總體設計階段通過對資料庫、過濾器、監聽器、和實體類的設計,以及各個模組用例圖的描述,形成了開發的整體思路。

第四章,主要介紹了主要模組的設計與實現,並給出關鍵原始碼和最終的效果圖。

第五章,主要是對這次畢業設計的總結和對後續工作的展望。

第二章 系統應用的關鍵技術

2.1 JSP技術介紹

2.1.1 JSP的概述

JSP(Java Server Pages)是由Sun Microsystems公司倡導、許多公司參與一起建立的一種動態網頁技術標準,類似於其他技術標準,如ASP,PHP等,主要用於開發動態網頁內容。

JSP是新一代的動態內容程式設計技術,它繼承了Java技術的“一次編寫,隨處執行”的特性,允許Web開發人員開發和維護與平臺無關,資訊豐富動態的Web頁面,包括HTML,DHTML,XHTML和XML,它能使Web開發人員輕易搭建網路平臺,建立起功能強大的Web網站。JSP可以把使用者介面從內容層次中分離出來,使得Web開發人員不必修改在底層的動態內容,就可以修改整體的頁面佈局。

2.1.2 JSP的執行機制

JSP文件被複制到Web伺服器的文件目錄中。當有人請求這個文件時,伺服器識別出這個帶有.jsp副檔名的文件,並意識到需要做特殊處理。第一次請求這個文件時,它被編譯成一個servlet物件,並存儲在記憶體中,然後輸出內容回送給發出請求的客戶機。第一請求之後,只要有請求到來,伺服器將進行檢查,看看這個檔案是否做過改動,如果沒有變化,伺服器呼叫先前編譯過的servlet物件。

JSP請求的步驟[2]如圖2-1所示。

(1)客戶機請求一個JSP頁面。

(2)JSP引擎編譯該JSP成一個servlet。

Web

瀏覽器

JSP頁面

生成的servlet

編譯的servlet

Web伺服器

2.第一次編譯

3.第二次編譯

1.請求

4.響應

圖2-1 一個JSP的請求步驟

(3)生成的servlet被編譯並裝載。

(4)編譯的servlet服務請求並把一響應傳送回客戶機。

JSP主要是針對Java程式處理不熟悉的人設計的。與Servlet相比,JSP有如下兩個優勢:方便與HTML混合;在開發、測試方面比Servlet方便。

2.1.3 JSP的強勢與劣勢

JSP的強勢:

(1)可移植性。JSP是用Java開發的,因此它是可移植的,可以一處編寫,隨處執行,支援多平臺。

(2)有效性。JSP的初始化程式碼僅在Web伺服器第一次載入時執行一次。一旦載入,在處理一個新的請求時,只須呼叫一個新的服務方法。與處理每個請求都要全部載入一個完整的可執行程式相比,這是一個相當有效的技術。

(3)強大的可伸縮性和可擴充性。它能夠在面向物件的語言(Java)中進行開發,並可以在現有物件基礎上進行擴充套件,形成新的物件,從而更好地滿足使用者的需求。

(4)多樣化和功能強大的開發工具支援。Java已經有了許多非常優秀的開發工具,而且許多可以免費得到,並且其中許多已經可以順利的運行於多種平臺之下。

(5)Java Servlet是一種開發Web應用的理想框架。JSP以Servlet技術為基礎,又在許多方面作了改進。利用跨平臺的JavaBeans元件,JSP為分離處理邏輯與顯示樣式提供了卓越的解決方案。

JSP的劣勢:

(1)為了跨平臺的功能,為了極度的伸縮能力,極大的增加了產品的複雜性,Java系統中包括JRE,JDK,J2EE,EJB等多種產品,這就需要大量的學習和培訓才能掌握它們,將它們有效地搭配在一起,靈活地加以運用。

(2)Java的執行速度快是由於使用者將class常駐記憶體,這樣使用的記憶體空間就比較大。另一方面,它還需要硬碟空間來儲存一系列.Java檔案和.class檔案以及對應的版本檔案。

(3)JSP只有對Java相當熟悉的人才能用得很好。

(4)JSP程式除錯困難。

2.1.4 JSP與ASP的比較

JSP與ASP(Active Server Page)兩者都是常用的動態網頁技術,也都是可以嵌入HTML中的程式,但兩者是有著本質的不同,主要從以下幾個方面對其進行比較:

(1)Web伺服器的支援:大多數通用的 Web伺服器如:Apache、Netscape和Microsoft IIS都支援JSP頁面,只有微軟本身的Microsoft IIS和Personal Web Server可以支援ASP。

(2)平臺的支援:JSP具有平立性,只要是一般的Java程式可以執行的平臺,都支援JSP程式。Windows平臺可以很好的支援ASP,但ASP對於基於Win32逐漸模型的依賴,使得它難於一直到其它平臺上。

(3)元件模型:JSP是建立在可重用的、跨平臺的元件(如:JavaBeans、Enterprises JavaBeans和使用者定製的標籤庫等元件)之上的,而ASP使用的是基於Win32的COM元件模型。

(4)指令碼語言:JSP可以使用Java程式語言或JavaScript作為指令碼語言,而ASP使用VBScript或Jscript作為指令碼語言。

(5)安全性:JSP使用Java安全模型,而ASP使用Windows NT的安全結構。

(6)與Access資料庫的連線:JSP使用JDBC建立與Access資料庫的連線,而ASP對Access資料庫使用Data Active Objects。

(7)使用者定製的標籤:JSP可以使用使用者定製標籤庫進行擴充,而ASP中沒有使用者定製標籤庫,ASP是不能擴充的[3]。

2.2 Java元件JavaBeans

2.2.1 什麼是JavaBeans

JavaBeans事實上有三層含義。首先,JavaBeans是一種規範,一種在Java(包括JSP)中使用可重複使用的Java元件的技術規範。其次,JavaBeans是一個Java的類,一般來說,這樣的Java類將對應於一個獨立的.java檔案,在絕大多數情況下,這應該是一個public型別的類。最後,當JavaBeans這樣的一個Java類在我們的具體的Java程式中被示例之後,我們有時也會將這樣的一個JavaBeans的例項稱之為JavaBeans[4]。

2.2.2 JSP與JavaBeans的關係

使用JSP技術,Web頁面開發人員可以使用HTML和XML標識來設計和格式化最終頁面。使用JSP標識或者小指令碼生成頁面上的動態內容。生成內容的邏輯被封裝在JSP標識和JavaBeans元件中,並且捆綁在小指令碼中,所有的指令碼在伺服器端執行。核心邏輯封裝在標識和Beans中,可以方便頁面設計者編輯和使用JSP頁面。

在伺服器端,JSP引擎解釋JSP標識和小指令碼生成所請求的內容(例如,通過訪問JavaBeans元件,使用JDBC技術訪問資料庫),並且將結果以HTML(或XML)頁面的形式傳送回瀏覽器。

絕大多數JSP頁面依賴於可重用的跨平臺的足見(JavaBeans或者Enterprise JavaBeans元件)來執行應用程式所要求的複雜的處理。這樣的好處是開發人員能夠共享和交換執行普通操作的元件,加速了總體開發過程。因此,基於Web的較為複雜的應用程式(如電子商務網站或網上MIS),JSP的複雜架構必須由JavaBeans達成。

2.3 J2EE概述

J2EE(Java 2 Platform Enterprise Edition)是使用Java技術開發企業級應用的一種事實上的工業標準(Sun公司出於其自身利益的考慮,至今沒有將Java及其相關技術納入標準化組織的體系),它是Java技術不斷適應和促進企業級應用過程中的產物。目前,Java平臺有三個版本:適用於小型裝置和智慧卡的J2ME(Java 2 Platform Micro Edition)、適用於桌面系統的J2SE(Java 2 Platform Standard Edition)和適用於企業級應用的J2EE(Java 2 Platform Enterprise Edition)。Sun推出J2EE的目的是為了克服傳統Client/Server模式的弊病,迎合Browser/Server架構的潮流,為應用Java技術開發伺服器端應用提供一個平立的、可移植的、多使用者的、安全的和基於標準的企業級平臺,從而簡化企業應用的開發、管理和部署。J2EE是一個標準,而不是一個現成的產品。各個平臺開發商按照J2EE規範分別開發了不同的J2EE應用伺服器,J2EE應用伺服器是J2EE企業級應用的部署平臺。由於它們都遵循了J2EE規範,因此,使用J2EE技術開發的企業級應用可以部署在各種J2EE應用伺服器上。為了推廣並規範化使用J2EE架構企業級應用的體系架構,Sun同時給出了一個建議性的J2EE應用設計模型:J2EE Blueprints。J2EE Blueprints提供了實施J2EE企業級應用的體系架構、設計模式和相關的程式碼,通過應用J2EE Blueprints所描述的體系模型,能夠部分簡化架構企業級應用這項複雜的工作。J2EE Blueprints是開發人員設計和優化J2EE元件的基本原則,同時為圍繞開發工作進行職能分工給出了指導性策略,以幫助應用開發設計人員合理地分配技術資源。

J2EE的優勢主要有以下幾點:

(1)高效的開發: J2EE允許公司把一些通用的、很繁瑣的服務端任務交給中介軟體供應商去完成這樣開發人員可以集中精力在如何建立商業邏輯上,相應地縮短了開發時間。高階中介軟體供應商提供以下這些複雜的中介軟體服務:狀態管理服務 -- 讓開發人員寫更少的程式碼,不用關心如何管理狀態,這樣能夠更快地完成程式開發。

(2)持續性服務 : 讓開發人員不用對資料訪問邏輯進行編碼就能編寫應用程式,能生成更輕巧,與資料庫無關的應用程式,這種應用程式更易於開發與維護。分散式共享資料物件CACHE服務,讓開發人員編制高效能的系統,極大提高整體部署的伸縮性。

(3)支援異構環境: J2EE能夠開發部署在異構環境中的可移植程式。基於J2EE的應用程式不依賴任何特定作業系統、中介軟體、硬體。因此設計合理的基於J2EE的程式只需開發一次就可部署到各種平臺。這在典型的異構企業計算環境中是十分關鍵的。J2EE標準也允許客戶訂購與J2EE相容的第三方的現成的元件,把他們部署到異構環境中,節省了由自己制訂整個方案所需的費用。

(4)可伸縮性:企業必須要選擇一種伺服器端平臺,這種平臺應能提供極佳的可伸縮性去滿足那些在他們系統上進行商業運作的大批新客戶。基於J2EE平臺的應用程式可被部署到各種作業系統上。例如可被部署到高階UNIX與大型機系統,這種系統單機可支援64至256個處理器。(這是NT伺服器所望塵莫及的)J2EE領域的供應商提供了更為廣泛的負載平衡策略。能消除系統中的瓶頸,允許多臺伺服器整合部署。這種部署可達數千個處理器,實現可高度伸縮的系統,滿足未來商業應用的需要。

(5)穩定的可用性: 一個伺服器端平臺必須能全天候運轉以滿足公司客戶、合作伙伴的需要。這是實時性很強商業系統理想的選擇[5]。

2.4關於Struts

2.4.1 Struts簡介

Struts已逐步越來越多運用於商業軟體,是一種非常優秀的J2EE MVC實現方式。Struts用Java Servlet/JavaServer Pages技術,開發Web應用程式的開放原始碼的framework。

2.4.2 Struts的主要功能

(1) 包含一個controller servlet,能將使用者的請求傳送到相應的Action物件。

(2)JSP自由tag庫,並且在controller servlet中提供關聯支援,幫助開發員建立互動式表單應用。

(3)提供了一系列實用物件:XML處理、通過Java reflection APIs自動處理JavaBeans屬性、國際化的提示和訊息。Struts專案的目標是為建立Java web應用提供一個開放源代framework。Struts framework的核心是基於例如Java Servlets,

JavaBeans, ResourceBundles, 和 XML,以及各種 Jakarta Commons包的標準技術的靈活的控制層。Struts提供了它自身的控制器元件,並整合了其他技術,以提供模型和檢視。Struts已逐步越來越多運用於商業軟體,是一種非常優秀的J2EE MVC實現方式[6]。

2.4.3 Struts工作原理

MVC(Model-View-Controller),是一種常用的設計模式。MVC 減弱了業務邏輯介面和資料介面之間的耦合,以及讓檢視層更富於變化,MVC可以讓整個邏輯很清晰,這種思想和思維和人的思維很接近,很容易被理解。

MVC的工作原理如圖2-2所示:

圖2-2 MVC工作原理

Struts 是MVC的一種實現,它將 Servlet和 JSP 標記(屬於 J2EE 規範)用作實現的一部分。Struts繼承了MVC的各項特性,並根據J2EE的特點,做了相應的變化與擴充套件。Struts的工作原理,如圖2-3所示:

圖2-3 struts工作原理

(1)Controller:在XML檔案Struts-config.xml中,與之相關聯的是Controller,在Struts中,承擔MVC中Controller角色的是一個Servlet,叫ActionServlet。ActionServlet是一個通用的控制組件。這個控制組件提供了處理所有傳送到Struts的HTTP請求的入口點。它擷取和分發這些請求到相應的動作類(這些動作類都是Action類的子類)。另外控制組件也負責用相應的請求引數填充 Action From(通常稱之為FromBean),並傳給動作類(通常稱之為ActionBean)。動作類實現核心商業邏輯,它可以訪問java bean 或呼叫EJB。最後動作類把控制權傳給後續的JSP 檔案,後者生成檢視。所有這些控制邏輯利用Struts-config.xml檔案來配置。

(2)檢視:主要由JSP生成頁面完成檢視,Struts提供豐富的JSP 標籤庫:Html,Bean,Logic,Template等,這有利於分開表現邏輯和程式邏輯。

(3)模型:模型以一個或多個java bean的形式存在。這些bean分為三類:Action Form、Action、JavaBean or EJB。Action Form通常稱之為FormBean,封裝了來自於Client的使用者請求資訊,如表單資訊。Action通常稱之為ActionBean,獲取從ActionSevlet傳來的FormBean,取出FormBean中的相關資訊,並做出相關的處理,一般是呼叫Java Bean或EJB等[7]。

2.5 關於Spring

2.5.1 Spring簡介

Spring是一個開源框架,它由Rod Johnson建立。它是為了解決企業應用開發的複雜性而建立的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限於伺服器端的開發。從簡單性、可測試性和鬆耦合的角度而言,任何Java應用都可以從Spring中受益[8]。

◆目的:解決企業應用開發的複雜性

◆功能:使用基本的JavaBean代替EJB,並提供了更多的企業應用功能

◆範圍:任何Java應用

簡單來說,Spring是一個輕量級的控制反轉(IoC)和麵向切面(AOP)的容器框架。

◆輕量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小隻有1MB多的JAR檔案裡釋出。並且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應用中的物件不依賴於Spring的特定類。

◆控制反轉——Spring通過一種稱作控制反轉(IoC)的技術促進了鬆耦合。當應用了IoC,一個物件依賴的其它物件會通過被動的方式傳遞進來,而不是這個物件自己建立或者查詢依賴物件。你可以認為IoC與JNDI相反——不是物件從容器中查詢依賴,而是容器在物件初始化時不等物件請求就主動將依賴傳遞給它。

◆面向切面——Spring提供了面向切面程式設計的豐富支援,允許通過分離應用的業務邏輯與系統級服務(例如審計(auditing)和事務(transaction)管理)進行內聚性的開發。應用物件只實現它們應該做的——完成業務邏輯——僅此而已。它們並不負責(甚至是意識)其它的系統級關注點,例如日誌或事務支援。

◆容器——Spring包含並管理應用物件的配置和生命週期,在這個意義上它是一種容器,你可以配置你的每個bean如何被建立——基於一個可配置原型(prototype),你的bean可以建立一個單獨的例項或者每次需要時都生成一個新的例項——以及它們是如何相互關聯的。然而,Spring不應該被混同於傳統的重量級的EJB容器,它們經常是龐大與笨重的,難以使用。

◆框架——Spring可以將簡單的元件配置、組合成為複雜的應用。在Spring中,應用物件被宣告式地組合,典型地是在一個XML檔案裡。Spring也提供了很多基礎功能(事務管理、持久化框架整合等等),將應用邏輯的開發留給了你。

所有Spring的這些特徵使你能夠編寫更乾淨、更可管理、並且更易於測試的程式碼。它們也為Spring中的各種模組提供了基礎支援。

2.5.2 為什麼需要Spring

你可能正在想“Spring不過是另外一個的framework”。當已經有許多開放原始碼(和專有) J2EE framework時,我們為什麼還需要Spring Framework?

Spring是獨特的,因為若干個原因:

◆它定位的領域是許多其他流行的framework沒有的。Spring關注提供一種方法管理你的業務物件。

◆ Spring是全面的和模組化的。Spring有分層的體系結構,這意味著你能選擇使用它孤立的任何部分,它的架構仍然是內在穩定的。因此從你的學習中,你可得到最大的價值。例如,你可能選擇僅僅使用Spring來簡單化JDBC的使用,或用來管理所有的業務物件。

◆它的設計從底部幫助你編寫易於測試的程式碼。Spring是用於測試驅動工程的理想的framework。

Spring對你的工程來說,它不需要一個以上的framework。Spring是潛在地一站式解決方案,定位於與典型應用相關的大部分基礎結構。它也涉及到其他framework沒有考慮到的內容。

2.5.3 Spring帶給我們什麼

◆方便解耦,簡化開發

通過Spring提供的IoC容器,我們可以將物件之間的依賴關係交由Spring進行控制,避免硬編碼所造成的過度程式耦合。有了Spring,使用者不必再為單例項模式類、屬性檔案解析等這些很底層的需求編寫程式碼,可以更專注於上層的應用。

◆AOP程式設計的支援

通過Spring提供的AOP功能,方便進行面向切面的程式設計,許多不容易用傳統OOP實現的功能可以通過AOP輕鬆應付。

◆宣告式事務的支援

在Spring中,我們可以從單調煩悶的事務管理程式碼中解脫出來,通過宣告式方式靈活地進行事務的管理,提高開發效率和質量。

◆方便程式的測試

可以用非容器依賴的程式設計方式進行幾乎所有的測試工作,在Spring裡,測試不再是昂貴的操作,而是隨手可做的事情。

◆方便整合各種優秀框架

Spring不排斥各種優秀的開源框架,相反,Spring可以降低各種框架的使用難度,Spring提供了對各種優秀框架(如Struts,Hibernate、Hession、Quartz)等的直接支援。

◆降低Java EE API的使用難度

Spring對很多難用的Java EE API(如JDBC,JavaMail,遠端呼叫等)提供了一個薄薄的封裝層,通過Spring的簡易封裝,這些Java EE API的使用難度大為降低。

◆Java 原始碼是經典學習範例

Spring的原始碼設計精妙、結構清晰、匠心獨用,處處體現著大師對Java設計模式靈活運用以及對Java技術的高深造詣。Spring框架原始碼無疑是Java技術的最佳實踐範例。如果想在短時間內迅速提高自己的Java技術水平和應用開發水平,學習和研究Spring原始碼將會使你收到意想不到的效果[9]。

2.6 關於Hibernate

2.6.1為什麼引入hibernate

在B/S專案的開發中,和資料庫的互動式不可避免的,J2EE的規範中提供了JDBC的介面來操作資料庫,對於JDBC,開發人員可以獲取資料庫連線,然後向資料庫傳送SQL語句,並返回資料庫操作的結果集,然後封裝成物件返回給上層的應用程式。這就造成開發人員不但要求能夠編寫程式,熟悉業務邏輯,還要求開發人員同時能夠擔任DBA,對開發人員的要求很高;同時,當引入新的專案時,很多地方必須廢棄,因為我們的程式碼中不光是業務邏輯,其中也嵌入了許多和底層有關的一些SQL程式碼;

另外這些嵌入在程式碼中的SQL語句也影響了我們程式的可測試性,我們在對程式碼進行除錯的時候,既要測試程式碼,同時我們還要測試SQL語句。為了解決這些問題,引入了hibernate[10]。

2.6.2使用Hibernate的好處

(1)Hibernate是JDBC的輕量級的物件封裝,它是一個獨立的物件持久層框架,和App Server,和EJB沒有什麼必然的聯絡。Hibernate可以用在任何JDBC可以使用的場合,例如Java應用程式的資料庫訪問程式碼,DAO介面的實現類,甚至可以是BMP(Bean-Managed Persistence)裡面的訪問資料庫的程式碼。

(2)Hibernate是一個和JDBC密切關聯的框架,所以Hibernate的相容性和JDBC驅動,和資料庫都有一定的關係,但是和使用它的Java程式,和Application Server

沒有任何關係,也不存在相容性問題。

(3)Hibernate不能用來直接和Entity Bean做對比,只有放在整個J2EE專案的框架中才能比較。並且即使是放在軟體整體框架中來看,Hibernate也是做為JDBC

的替代者出現的,而不是Entity Bean的替代者出現的。

(4)由於是對JDBC的輕易級封閉,記憶體消耗少,最快的執行效率。

(5)開發效率高,Eclipse、JBuilder等主流JAVA整合開發環境對Hibernate有很好的支援,在大的專案,特別是持久層關係對映很複雜的情況下,Hibernate效率高的驚人。

(6)分散式,安全檢查,叢集,負載均衡的支援。

2.6.3 Hibernate的工作原理

Hibernate的工作就是為Object和Ralational之間提供一個對映,其工作流程如下面的圖2-4所示。

圖2-4 hibernate工作流程

(1) 啟動Hibernate,如果在系統中新增Hibernate的支援,此處載入由系統自動完成。

(2) 讀取hibernate.cfg.xml或者hibernate.properties檔案的配置資訊,並將其載入為例項。

(3) 構建SessionFactory例項(包含二級快取)。

(4) 從SessionFactory中取得Session物件,從而可以呼叫其方法,對資料庫進行操作,實現ORM的功能。

Hibernate可以通過一個XML的mapping檔案把一個POJO(Plain old java object)和資料庫中的表對應起來,在這個XML檔案(一般命名為*.hbm.xml)中,我們可以配置好Object和資料庫中標的對映關係,然後把這個mapping加入到hibernate.cfg.xml中,這樣Hibernate在啟動時就可以載入這些mapping,並可以根據配置檔案對物件實現自動的載入,並且可以對這些Object實習自動的維護。Hibernate還提供查詢語句(HQL)供應用程式使用,Hibernate對資料訪問實現封裝,還可以對查詢語句的傳送實現管理,達到優化的目的,能夠有效減少資料庫的訪問頻率。

2.7 Mysql

資料庫(Database)是一系列資訊資源的集合。在一個數據庫中,與一個專案有關的所有資訊都可以叫做一條記錄(Record)。每一條記錄都是由一系列的欄位(Field)組成的。一系列記錄的集合就構成了資料表格(Table)。對於一個簡單的“平面檔案”的資料庫來說,它僅包含了一個數據表格,而對一個“關係型”資料庫來說,它卻包含兩個或兩個以上的資料表格,表格的各欄位之間存在這一種或多種關係(有時可以把這種關係叫做“連結”)。

2.7.1 mysql的特點

MySQL是一種開放原始碼的關係型資料庫管理系統(RDBMS),MySQL資料庫系統使用最常用的資料庫管理語言--結構化查詢語言(SQL)進行資料庫管理。

由於MySQL是開放原始碼的,因此任何人都可以在General Public License的許可下下載並根據個性化的需要對其進行修改。MySQL因為其速度、可靠性和適應性而備受關注。大多數人都認為在不需要事務化處理的情況下,MySQL是管理內容最好的選擇。它使用系統核心提供的多執行緒機制提供完全的多執行緒執行模式,提供了面向C、C++、Eiffel、Java、Perl、PHP、Python以及Tcl等程式語言的程式設計介面(APIs),支援多種欄位型別並且提供了完整的操作符支援查詢中的SELECT和WHERE操作。

目前MySQL被廣泛地應用在Internet上的中小型網站中。由於其體積小、速度快、總體擁有成本低,尤其是開放原始碼這一特點,許多中小型網站為了降低網站總體擁有成本而選擇了MySQL作為網站資料庫[11]。

2.7.2 mysql的安裝和配置(部分截圖)[12]

圖2-5 mysql安裝圖(開始)

安裝時一般採用預設路徑:

圖2-6 mysql安裝圖(路徑)

圖2-7 mysql安裝圖(資料庫型別)

為了支援中文,在下面的列表框中學者gb2312(切記)

圖2-8 mysql安裝圖(語言)

圖2-9 mysql安裝圖(等待成功)

2.8 Tomcat伺服器

2.8.1 Tomcat 伺服器簡介

Tomcat是一個免費的開源的Serlvet容器,它是Apache基金會的Jakarta專案中的一個核心專案,由Apache,Sun和其它一些公司及個人共同開發而成。由於有了Sun的參與和支援,最新的Servlet和Jsp規範總能在Tomcat中得到體現。 Tomcat中採用了Servlet容器:Catalina,完整的實現了Servlet2.3和Jsp1.2規範。Tomcat提供了各種平臺的版本供下載,可以從其官方網站上下載其原始碼版或者二進位制版。由於Java的跨平臺特性,基於Java的Tomcat也具有跨平臺性[13]。

2.8.2 Tomcat的特點

在Tomcat中,應用程式的部署很簡單,你只需將你的WAR放到Tomcat的webapp目錄下,Tomcat會自動檢測到這個檔案,並將其解壓。你在瀏覽器中訪問這個應用的Jsp時,通常第一次會很慢,因為Tomcat要將Jsp轉化為Servlet檔案,然後編譯。編譯以後,訪問將會很快。另外Tomcat也提供了一個應用:manager,訪問這個應用需要使用者名稱和密碼,使用者名稱和密碼儲存在一個xml檔案中。通過這個應用,輔助於Ftp,你可以在遠端通過Web部署和撤銷應用。當然本地也可以。

2.8.3 Tomcat的優勢

Tomcat不僅僅是一個Servlet容器,它也具有傳統的Web伺服器的功能:處理Html頁面。但是與Apache相比,它的處理靜態Html的能力就不如Apache.我們可以將Tomcat和Apache整合到一塊,讓Apache處理靜態Html,而Tomcat處理Jsp和Servlet.這種整合只需要修改一下Apache和Tomcat的配置檔案即可。

2.8.4 Tomcat伺服器的安裝和配置

在開始安裝之前,先準備J2SDK和TOMCAT兩個軟體,如果已經安裝了J2SDK,就只需TOMCAT即可。

(1)需設定的環境變數

變數名:CATALINA_HOME

變數值:D:/Program Files/tomcat6.0

變數名:CLASSPATH

變數值:.;%JAVA_HOME%/lib;%CATALINA_HOME%/common/lib

(2)安裝完成後,開啟tomcat伺服器,啟動瀏覽器,在位址列上輸入::8080/ 若出現以下介面說明安裝成功[14]。

圖2-10 tomcat啟動頁面

小結

本章全面介紹本系統所用到的關鍵技術和工具,其中jsp作為javaweb開發的基礎,對它的執行機制要理解,同時還要明白它的優劣勢;j2ee作為開發的標準也作了簡單介紹。而SSH(struts+spring+hibernate)作為本系統的核心與亮點技術,更是作了詳細介紹,要掌握他們的工作原理,主要功能。最後介紹了本系統使用的資料庫mysql以及tomcat伺服器的安裝與配置。只有掌握了這些技術基礎,才能使本系統的開發正常進行。

第三章 系統需求分析和總體設計

3.1 系統功能需求

圖3-1 系統功能模組

如圖3-1所示,在本系統中主要闡述使用者管理、購物車管理、訂單管理、產品展示四個模組。

(1)購物車管理:實現新增商品、取消一個商品、數量修改、清空購物車功能。

(2)訂單管理:實現提交訂單、刪除訂單、查詢訂單功能。

(3)產品展示:實現產品列表、產品明細功能。

(4)使用者管理:實現使用者註冊、使用者資訊修改、使用者刪除、使用者查詢功能。

3.2 系統角色及其功能分析

3.2.1 系統的3個角色:

(1)註冊使用者

(2)管理員

(3)普通的網站瀏覽者(即遊客)

3.2.2 系統角色的功能

(1)普通使用者

網站的普通瀏覽者(即遊客)只能瀏覽商品。

(2)註冊使用者

普通瀏覽者只要註冊為網站使用者後,獲得自己的帳號,設定自己的密碼就具有以下功能:登入,登出,向購物車中新增商品,生成並提交訂單。新增或修改個人明細資料。

(3)管理員

擁有註冊使用者的所有功能

還可以對使用者進行管理,包括新增新使用者、修改使用者密碼、刪除使用者。

3.3 總體設計思想概述

本系統是基於B/S架構下的多層結構應用系統。B/S(Browser/Server)結構即瀏覽器和伺服器結構。它是隨著Internet技術的興起,對C/S結構的一種變化或者改進的結構。在這種結構下,使用者工作介面是通過WWW瀏覽器來實現,極少部分事務邏輯在前端(Browser)實現,但是主要事務邏輯在伺服器端(Server)實現,形成所謂三層3-tier結構。這樣就大大簡化了客戶端電腦載荷,減輕了系統維護與升級的成本和工作量,降低了使用者的總體成本(TCO)[15]。

在軟體體系架構設計中,分層式結構是最常見,也是最重要的一種結構。推薦的分層式結構一般分為三層,從下至上分別為:資料訪問(持久)層、業務邏輯層(或稱為領域層)、表示層[16],如圖3-2:

圖3-2 系統架構

總的來說,採用分層結構的設計思想,可以讓每個層由一組相關的類或元件構成,共同完成特定的功能。層與層之間存在自上而下的依賴關係,上層元件會依賴下層元件的API,而下層元件則不依賴於上層元件。例如:表述層依賴於業務邏輯層,而業務邏輯層依賴於資料庫層。並且每個層對對上層公開API,但具體的實現細節對外透明。當某一層發生變化,只要API不變,不會影響其他層的實現。

在本系統中,使用開源的mysql資料庫,持久層用到spring所整合的Hibernate技術,業務邏輯層用普通javabean實現,表述層運用基於struts的MVC設計模式(struts用來做C層,spring實現V層與C層的解耦以及C層與M層的解耦)。

3.4 資料庫設計

3.4.1 E-R圖

下面是該系統資料庫表的E-R圖,如圖3-3:

圖3-3 E-R圖

3.4.2資料表的設計

下面列出了設計過程中所用到的資料庫表及其結構:

orders表用來儲存客戶的訂單資訊,如表3-1:

1. orders

列名型別長度描述

orderidint11訂單ID

totalpriceNUMBER16總價錢

orderstateNUMBER1訂單狀態

payinfoDATE 付款方式

CreatetimeDATE 建立日期

useridVARCHAR220使用者ID

User_item_idNUMBER8使用者明細ID

表3-1 orders

2. orderline表用來儲存客戶訂單中的訂單項資訊,如表3-2:

3. orderline

列名型別長度描述

order_item_idNUMBER16訂單條目ID

ProductidNUMBER16商品物件ID

OrderidVARCHAR220訂單物件ID

qualityNUMBER8數量

numNUMBER8商品數量

表3-2 orderline

3.orderstatus表用來儲存定單狀態,如表3-3:

orderstatus

列名型別長度描述

statusidint11狀態ID

namevarchar30狀態名

descriptionvarchar100描述

表3-3 orderstatus

4.users表用來儲存使用者個人資訊,如表3-4:

users

列名型別長度描述

user_idint11使用者ID

passwordvarchar15使用者密碼

表3-4 users

5.contactinfo表用來儲存使用者個人明細,如表3-5:

contactinfo

列名型別長度描述

contact_idint11

User_idvarchar30使用者id

Street1varchar64住址1

Street2varchar64住址2

cityvarchar32城市

provincevarchar32省份

Countryvarchar32國家

zipvarchar20郵編

officephonevarchar50辦公室電話

cellphonevarchar20手機

emailvarchar20電郵

homephonevarchar12家庭電話

表3-5 contactinfo

6.product表用來儲存商品,如表3-6:

product

列名型別長度描述

productidint11產品

modlevarchar30產品型號

namevarchar15品牌名

companyvarchar20出品公司

weightdouble50產品重量

pricedouble20價格

statevarchar20產品狀態

createtimedate 出廠日期

CategoryidInt10產品型別

descriptionvarchar1000產品描述

表3-6 product

7.category表用來儲存商品型別,如表3-7:

category

列名型別長度描述

categoryidint11型別ID

namevarchar30型別名

descriptionvarchar100描述

表3-7 category

8. payway表用來儲存許可權資訊,如表3-8:

payway

列名型別長度描述

paywayidint11ID

payStylevarchar30名

表3-8 payway

3.5 系統的類設計

3.5.1 DAO類設計

圖3-4 dao類設計

如圖3-4,通過這個工廠獲取對應的 DAO,然後使用DAO 進行資料庫操作。

3.5.2 POJO類設計(部分)

圖3-5 POJO類設計

這些實體類將通過hibernate對映到資料庫中

3.5.3 過濾器類設計

圖3-6 過濾器類設計1

如圖3-6,這是編碼過濾器類,通過他可保證頁面不出現亂碼問題。

圖3-7 過濾器類設計2

如圖3-7,這是登陸安全過濾器類,通過它來達到控制訪問許可權的功能。

3.5.4 監聽器類設計

如圖3-8,“CartSessionListener”啟動時把購物車資訊初始化到記憶體中,提高系統性能。“ProductContextListener”啟動時把商品資訊初始化到記憶體中,提高系統性能。

圖3-8 監聽器類設計

3.6系統的用例圖

3.6.1 總體用例分析

圖3-9 總體用例圖

如圖3-9,使用者管理、購物車管理、訂單管理、產品展示四個模組構成了本網上交易系統。User是指系統使用者,包括註冊使用者和匿名使用者兩種,匿名使用者只可以瀏覽商品,匿名使用者通過使用者管理模組註冊後就可以使用購物車和下訂單。

3.6.2 使用者管理用例分析

圖3-10 使用者管理用例圖

如圖3-10,使用者管理模組主要包括:使用者登陸、使用者註冊、使用者資訊修改、使用者刪除、使用者資訊查詢五個功能組成。

3.6.3 購物車管理用例分析

圖3-11 購物車管理用例圖

如圖3-11,購物車管理模組主要包括:新增商品、取消一個商品、數量修改、清空購物車四個功能組成。

3.6.4 訂單管理用例分析

圖3-12 訂單管理用例圖

如圖3-12,訂單管理模組主要包括:訂單提交、刪除訂單、訂單明細三個功能組成。

3.6.5 產品展示用例分析

圖3-13 產品展示用例圖

如圖3-13,商品展示模組主要包括:產品列表、產品明細兩個功能組成。

小結

本章首先分析系統的功能需求,通過對系統功能模組的劃分以及角色的劃分,明確了系統需求,為總體設計提供依據。接下來闡述了系統的總體設計思想,說明了本系統是基於B/S架構下的多層結構應用系統。最後通過對資料庫、過濾器、監聽器、和實體類的設計分析,以及各個模組用例圖的描述,形成了開發的整體思路,為下一步程式設計實現各個具體功能鋪平了道路。

第四章 系統的詳細設計

4.1 資料庫與POJO對映的實現

前面第二章曾介紹過:Hibernate可以通過一個XML的mapping檔案把一個POJO(Plain old java object)和資料庫中的表對應起來,在這個XML檔案(一般命名為*.hbm.xml)中,我們可以配置好Object和資料庫中表的對映關係,然後把這個mapping加入到hibernate.cfg.xml中,這樣Hibernate在啟動時就可以載入這些mapping,並可以根據配置檔案對物件實現自動的載入,並且可以對這些Object實習自動的維護。

由於Spring提供了對Hibernate的整合,所以我們可以不配置hibernate.cfg.xml檔案,而通過在applicationContext.xml檔案中進行相關配置來達到同樣的目的。圖例說明如下:

圖4-1 user.hbm.xml

如圖4-1,user.hbm.xml檔案配置了user類的相關資訊。

圖4-2 session工廠配置

圖4-2是applicationContext.xml檔案中Session工廠的配置資訊,可以看到,圖中的mappingResources屬性中囊括了所有我們需要的mapping檔案。

4.2 主要模組的設計說明與介面

4.2.1使用者管理模組

使用者管理模組主要包括使用者註冊,登入,退出3個部分.

(1)使用者註冊

當用戶第一次登入時首先要註冊,成為會員後,才可以購買物品.使用者可以通過單擊首頁的註冊按鍵來開啟註冊頁面進行會員註冊操作,使用者註冊頁面的執行結果如圖4-3所示.

圖4-3使用者登入/註冊介面

如果使用者的註冊資訊不符合要求,系統會提示使用者,部分結果如圖4-4:

圖4-4登入資訊提示介面

校驗使用者註冊資訊是是否正確的javaScript部分程式碼如下[17]:

當用戶確認所提按資訊無誤後,單擊“註冊“按鈕,系統會執行以下流程:

request 請求將頁面上的資訊傳遞到控制層的struts中的Action類中,執行以下程式碼

/*

* 註冊一個新使用者

*/

public ActionForward register(ActionMapping mapping,

ActionForm form,HttpServletRequest req, HttpServletResponse res) throws Exception {

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", "恭喜您!註冊成功!");

forward = mapping.findForward("success");

} catch (ECPortException be) {

forward = mapping.findForward("fail");

be.printStackTrace;

log.error("save user info error. . .", be);

}

}

return forward;

}

在UserService中呼叫dao中的addUser方法,程式碼如下:

public void addUser(User user) throws StoreException {

.....

try {

session = HibernateSessionFactory.getSession;

tx = session.beginTransaction;

session.save(user);

tx.commit;

} .....

}

在註冊成功後,會跳轉到這樣的頁面,如圖4-4:

圖4-4註冊成功介面

(2)使用者登入

網站首頁在使用者第一次訪問時會判斷使用者是否登入,未登入則顯示使用者登入視窗,提示使用者登入或註冊.對於已經登入的使用者,在使用者登入視窗將顯示使用者的相關資訊.

首頁主要是根據儲存使用者名稱資訊的Session引數來判斷使用者是否已經登入的,關鍵程式碼如下:

在會員登入視窗中單擊登入按紐後,系統將對使用者名稱和密碼進行驗證,判斷使用者是否是已註冊使用者,如果已註冊,則更新使用者在網站中的狀態,如果沒有註冊,則拒絕使用者的登入操作,登入資料驗證的程式程式碼如下:

/*

* 使用者登入方法

*/

public ActionForward login(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)

throws Exception {

String username = request.getParameter("userid");

String password = request.getParameter("password");

if (userService.isLoginCorrect(username, password)) {

User user = userService.getUserByName(username);

/*

* 只有在使用者登入的時候才建立一個session,並且把使用者的資訊存放到session中;

* 同時sessionListener也會把car同時也放到session中,這樣能保證為每一個來

* 網站需要購物的使用者分配一個session,一個購物車,並且也可以利用session來 跟蹤使用者.

*/

HttpSession session = ((HttpServletRequest) request).getSession(true);

session.setAttribute("user", user);

return mapping.findForward("loginsuccess");

} else {

String message = "使用者名稱或者密碼錯誤!";

request.setAttribute("message", message);

return mapping.findForward("loginfailed");

}

}

public User getUserByName(String name) throws StoreException {

Session session = null;

try {

session = HibernateSessionFactory.getSession;

User user = (User) session.createQuery(

"from User u where u.username = '" + name + "'")

.uniqueResult;

return user;

} ....

}

(3)使用者退出

當用戶決定退出網站時,只要點選當前頁面上的“退出”按鈕,就會回到首頁。

實現程式碼如下:

/*

* 使用者退出系統並做一些清理工作;

*/

public ActionForward logout(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)

throws Exception {

HttpSession session = request.getSession;

session.removeAttribute("user");

session.removeAttribute("cart");

return mapping.findForward("logout");

}

(4)管理員登入

系統設定了一個預設的管理員admin,只要通過此使用者名稱登入就可進入管理員介面,如圖4-5和圖4-6所示:

圖4-5 管理員登入

圖4-6 管理員介面

主要程式碼如下:

public ActionForward toModify(ActionMapping mapping, ActionForm form,

HttpServletRequest req, HttpServletResponse res) throws Exception {

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購物車管理模組

購物車管理模組主要功能有如下幾個部分:

(1)建立購物車

當客戶登入後,系統會給客戶建立一個購物車放入伺服器的Session會話中。使客戶在整個會話中都擁有一個相同的購物車。這裡主要運用了Http協議中的會話機制,將購物車儲存在客戶的會話中,這樣在整個客戶遊覽不同頁面商品的過程中,都會使用同一個購物車物件。

具體執行步驟:

(1)從客戶的請求物件中獲取Session會話物件

(2)從會話物件中獲取購物車物件

(3)判斷是購物車物件是不是空的,如果是空是就建立一個

/*

* 在監聽到session被建立之後,就立即向session中新增一個購物車Car;

*/

public void sessionCreated(HttpSessionEvent arg0) {

HttpSession session = arg0.getSession;

Cart cart=new Cart;

session.setAttribute("cart", cart);

}

/*

* 從session中獲得購物車

*/

Cart cart = (Cart) session.getAttribute("cart");

if (cart == null) {

cart = new Cart;

}

(2)向購物車中新增一個商品項

客戶在檢視網頁上的一個商品時,當向伺服器傳送一個“新增到購物車”的請求時,會執行這個功能。

功能執行過程:

(1)從客戶請求物件中獲取商品的ID

(2)呼叫業務層的方法根據商品ID去資料查詢商品的資訊,返回商品物件

(3)從商品物件中獲取商品名,商品價格,來構建一個商品項物件

(4)從Session會話中獲取購物車物件

(5)呼叫業務層的方法來根據購物車物件和商品項物件來執行新增操作

(6)將些商品項物件放入到購物車中

部分實現程式碼:

/*

* 從資料庫中把商品取到;

*/

ProductService productService = (ProductService) ServiceFactory.getInstance.getService(Globals.PRODUCT_SERVICE);

Integer id = Integer.parseInt(request.getParameter("productid"));

Product product = productService.getProductById(id);

/*

* 在向購物車中新增商品的時候會判斷商品是否已經存在,

* 已存在的就不讓在加入了;

*/

if (cart.isExist(id)) {

message = "該商品已經存在!請返回!";

request.setAttribute("message", message);

return mapping.findForward("error");

} else {

/*

* 向購物車新增一個商品;

*/

cart.addCart(product);

session.setAttribute("cart", cart);

return mapping.findForward("addcartsuccess");

}

(3) 修改購物車中一個商品項

在客戶檢視購物車時,想修改自己的購買商品時,會執行這個功能。由於商品的名稱和價格都是系統管理人員設定的,所以客戶都不可以修改,客戶只能修改他/她所購買商品的數量。修改所選購的商品數量時,相應的商品項的小計和購物車的總計都會保持實時的更新,如圖4-7。

圖4-7 修改商品數量

功能的執行步驟:

(1)將ActionForm轉換為ItemForm物件

(2)從ItemForm物件中獲取商品ID

(3)從Session會話中獲取購物車物件

(4)根據商品ID去呼叫業務層的方法去修改商品項

(5)修改小計

(6)將些商品項物件放入到購物車中

部分實現程式碼:

public ActionForward modifyNumber(ActionMapping mapping, ActionForm form,

HttpServletRequest req, HttpServletResponse res) throws Exception {

String tempid = req.getParameter("productId");

Long productId = Long.parseLong(tempid);

String tempNum = req.getParameter("num" + productId);// num是一與JSP頁面一致的字串

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)檢視購物車

客戶選取了所有的商品後,來向伺服器傳送“購物車”請求時,會執行此功能,系統根據會話中的購物車中的商品項,來獲取客戶所選選商品的一個集合,在JSP頁面上對這個集合中的商品項進行顯示,如圖4-8。

圖4-8 我的購物車

功能的執行步驟:

(1)從客戶的請求物件中獲取購物車物件

(2)從購物車物件中獲取所有的商品項

(3)將所有的商品項物件載入到請求物件中傳送給客戶端

部分實現程式碼:

var="orderLine" items="${sessionScope.SHOPPING_CART.orders.orderlines}" varStatus="status">

(5)刪除購物車中的一個商品項

客戶在檢視購物車時,當向伺服器傳送一個“刪除商品項”的請求時,會執行這個功能。刪除商品項時,系統會自動更新購物車的總計值,如圖4-9:

圖4-9 刪除商品

功能執行過程:

1從客戶請求物件中獲取商品的ID

2呼叫業務層的方法根據商品ID去資料查詢商品的資訊,返回商品物件

3從Session會話中獲取購物車物件

4呼叫業務層的方法根據商品ID去刪除購物車物件中的商品項

5將購物車重新加入到Session會話中,來更新Session會話中的購物車物件

部分程式碼實現:

//刪除購物車中一個商品項

public ActionForward deleteById(ActionMapping mapping, ActionForm form,

HttpServletRequest req, HttpServletResponse res) throws Exception {

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("index");

}

return mapping.findForward("success");

}

(6)清空購物車

客戶在檢視購物時不要想要所有所選的商品時,向伺服器傳送“清空購物車”請求時會執行此功能。如圖4-10:

圖4-10 清空購物車

執行此功能的步驟:

(1)從請求物件中獲取Session會話

(2)從Session會話中獲取購物車物件

(3)將購物車物件傳給業務層的方法去清空購物車中的所有商品項

部分實現程式碼:

/*

* 也就是從session中把購物車清除掉;

*/

public ActionForward clearShopCart(ActionMapping mapping, ActionForm form,

HttpServletRequest req, HttpServletResponse res) throws Exception {

HttpSession session = req.getSession(false);

IShoppingCart cart = (IShoppingCart) session

.getAttribute("SHOPPING_CART");

cart.removeAllProducts;

return mapping.findForward("index");

}

4.2.3 定單模組

生成訂單是網上購物商城的最終目的,前面的所有的功能的實現都是為最後生成一個使用者滿意的訂單做基礎,在此要生成一個可以供使用者隨時查詢訂單號,還要儲存使用者訂單中所購買的商品資訊。當用戶確認對購物車不再改變後,就可以到收銀臺結帳並生成訂單。結帳的流程是:從購物車中讀取商品名稱,商品數量,商品價格資訊,生成唯一的一個訂單號,同時也把使用者註冊的基本資訊讀取出來,形成一個完整的訂單寫入資料庫中。

1、建立一個訂單

客戶選好了所有的商品時,並確認要買時,會向伺服器傳送一個“生成定單”的請求,執行結果如圖4-11:

圖4-11 生成訂單

此時使用者可以新增收貨人的地址,點選圖中的使用者資訊“修改”,會彈出一個頁面,在此修改收貨人地址等資訊,如圖4-12:

圖4-12 修改收貨地址

/*

* 將修改後的地址儲存到資料庫中,其中儲存了使用者的資訊:id

*/

public void addUserItem(UserItem useritem) throws StoreException {

..

try {

session = HibernateSessionFactory.getSession;

tx = session.beginTransaction;

session.save(useritem);

tx.commit;

} ..

}

使用者確認無誤後點擊圖4-11的“提交訂單“,會出現下圖:

圖4-13 訂單列表

部分實現程式碼:

/*

* 確定定單

*/

public ActionForward checkOut(ActionMapping mapping, ActionForm form,

HttpServletRequest req, HttpServletResponse res) throws Exception {

ActionForward forward = null;

GregorianCalendar gc = new GregorianCalendar;

Long paywayid = Long.parseLong(req.getParameter("payway"));

PayWay pw = new PayWay(paywayid);

List orderStatus = (List) req.getSession.getServletContext

.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 (ECPortException be) {

forward = mapping.findForward("fail");

log.error("==== save user order fail...", be);

be.printStackTrace;

}

cart.removeAllProducts; // 定單產生後應清楚當明購物車中的商品

return forward;

}

/*

* 向資料庫中儲存一個指定的order物件;

*/

public void save(Orders transientInstance) {

log.debug("saving Orders instance");

try {

getSession.save(transientInstance);

log.debug("save successful");

} catch (RuntimeException re) {

log.error("save failed", re);

throw re;

}

}

2.檢視定單

客戶確認了所有的訂單選項後,可以向伺服器 傳送“檢視定單明細”的請求:當用戶點選了圖4-13上的“明細”按鈕是,頁面執行結果如下:

圖4-14 訂單明細

部分程式碼實現:

/*

* 根據指定的order物件來獲得屬於該order的所有orderline項;

*/

public ActionForward orderDetail(ActionMapping mapping, ActionForm form,

HttpServletRequest req, HttpServletResponse res) throws Exception {

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 (ECPortException be) {

log.error("==== get failed .====");

forward = mapping.findForward("fail");

}

return forward;

}

4.3 系統的測試

測試是軟體開發必不可少的環節,每個開發者都應該養成良好的測試習慣,一個系統的完善就是通過不斷地測試與維護來完成的。

測試的意義有以下幾點[18]:

(1)測試並不僅僅是為了找出錯誤.通過分析錯誤產生的原因和錯誤的發生趨勢,可以幫助專案管理者發現當前軟體開發過程中的缺陷,以便及時改進;

(2)這種分析也能幫助測試人員設計出有針對性的測試方法,改善測試的效率和有效性;

(3)沒有發現錯誤的測試也是有價值的,完整的測試是評定軟體質量的一種方法。

測試一般有兩種方法:如果已經知道了產品應該具有的功能,可以通過測試來檢驗是否每個功能都能正常使用;如果知道產品內部工作過程,可以通過測試來檢驗產品的內部動作是否按照說明書的規定正常執行。前一個方法稱為黑盒測試,後一個稱為白盒測試。

對於本系統,我採取第一個方法,即黑盒測試。做完一個模組,就進行測試,看所做的模組能不能實現所需要的功能。經過了先期的模組測試和後期的綜合測試,本系統實現了規格說明書的所有功能,達到了預期的要求。

小結

本章詳細介紹了系統主要功能模組的具體實現,包括使用者管理模組、購物車模組和定單模組,分析他們的設計思路,執行步驟,並給出了每個功能的主要實現程式碼,還有為每個功能的最終執行結果配上截圖,讓我們看到更直觀的效果。最後對完成的系統進行了測試,介紹了兩種主流的測試方法,給出了測試結果,達到了預期的要求。

第五章 總結與展望

5.1 工作總結

開發Web站點,是一項複雜、繁重的工作,需要多方面的知識。

此次通過設計網上交易系統,使我接觸到許多基於java語言的WEB網路開發方面的知識,包括HTML語言,CSS級聯樣式表,客戶端開發語言JavaScript,MVC分層體系結構,支援MVC架構的struts框架,開源伺服器Tomcat,mysql資料庫,伺服器端開發語言JSP等,這些語言(或技術)擴充套件了我的知識面,也使我在製作的過程中對它們的特點,應用方向等有了基本的瞭解,並在實際的應用中大致明白如何將它們融合運用,以開發出介面美觀,功能強大的Web站點來。

通過本次親自動手設計系統,我更加深刻的瞭解系統開發的全過程,從中我熟練掌握了B/S結構Web應用軟體設計的思想及其開發的全過程。首先要進行系統的需求分析,分析系統要達到什麼功能,系統要劃分為幾個模組來設計,系統的具體功能應當如何去實現;分析完之後,考慮其涉及到的計算機專業知識,把問題細化,把大的問題劃分為小的問題,然後逐個進行解決。畢業設計開始階段,由於我們沒有軟體架構的設計經驗,所以在專案的業務流程和軟體的開發規範上犯了很的錯誤,所以在後期的組裝過程變的非常的困難。

設計收穫:

1.掌握了網站開發的基本流程,設計整個網站的功能模組圖;

2.掌握瞭如何搭建和配置一個Tomcat伺服器;

3.掌握了使用JSP程式設計,實現對資訊的顯示、修改、刪除和新增等;

遇到的問題:

1.JSP中文亂碼問題的解決

對於JSP中文亂碼問題的處理,常用的方法有兩種:一種方法是在JSP頁面上設定頁面的“contentType”屬性。這種方法就是在頁面開始時,設定頁面的“contentType”屬性,例如:

另一種方法是輸出中文資訊時使用“ISO 8859-1”編碼。這種方法是在輸出中文資訊之前,對中文資訊進行一次“ISO 8859-1”編碼。

2.Java.lang.NullPointerException異常

一般是對一個為NULL值的變數進行操作引起的。為了避免這種異常,最好在對變數操作之前檢檢視它是否為NULL值。

3.SQL語句換行書寫時未加適當的空格而導致的錯誤。我們先看一段程式碼,

String test=aaa;

String sql=〞select * from test〞+

〞where test1=’〞+a+〞’〞+

〞and test2=bbb〞;

上面所示的程式碼在執行時將轉換成這樣的SQL語句:

Select *from testwhere test1=’aaa’ and test2=bbb

從輸出的SQL語句可以看出test和where之間,以及’aaa’和and之間都缺空格,這樣是不能從資料庫中取出資料的.正確的寫法如下:

String test=aaa;

String sql=〞select * from test〞+

〞 where test1=’〞+a+〞’〞+

〞 and test2=bbb〞;

5.2 後續工作展望

由於個人能力有限以及實踐經驗欠缺,系統基本滿足線上電子產品交易的功能需求,本系統不可避免有不足之處,如一些系統功能過於簡單,所以系統的功能還算不上很完善。希望老師和同學能給予建議和指導。

參考文獻

[1] 景玉建.電子商務的發展與前景[J].《職業時空》,20xx年第13期,P10-11

[2] 張孝祥.深入Java Web開發內幕——核心基礎[M].北京:電子工業出版社.北京.20xx.10

致謝

本次畢業設計的最終完成離不開很多人的大力協助。衷心的感謝上海達內科技有限公司在我實習期間交給我這個專案任務,使我有了設計課題,還感謝在實習期間給我幫助的專案經理以及公司同事。真誠的感謝本次畢業設計的指導老師-宋玲教授,給了我自由選題的機會,在我的論文審稿階段指出了很多方面的不足,並一一給出修改意見,對我進行悉心指導,對我的畢業論文最終完成給予了極大的支援和幫助。

特別感謝曹傑師兄,在畢業設計中遇到難點的時候,熱情和耐心地給予指導,對我畢業設計工作的順利完成有著重要的意義。

最後,再一次感謝所有幫助過我的人們!

java畢業論文範文 篇5

編號

x學院

免費的

畢 業 論 文

學生姓名 _______ _

學 號 ___________

專 業 ____

班 級 ____

指導教師

200 年 月

1.Java語言的出現

自從1946年世界上第一臺電子計算機問世以來,計算模式的發展經歷了三個階段:集中計算模式、分散計算模式和網路計算模式。Internet的出現,為在網路計算模式下的科學計算和資訊處理提供了良好平臺。然而,要充分利用網路計算模式的功能與效益,平臺的執行環境是個制約因素,而Java語言和Java技術則是解決這一問題的最佳途徑。

1991年,SUN公司的Jame Gosling,Bill Joe等人試圖為電視、烤箱等家用電器開發一種互動式的軟體系統,這種應用需要的是那種小而可靠的系統,它能夠移植,並且實時性好,適用於網路分佈環境。流行的C++是自然的選擇。不過,開發過程中遇到的許多難以克服的困難使他們意識到必須徹底解決問題了,最終,開發成功了一個名為Oak的軟體,此中蘊藏著Java的原型,當時,並未引起人們的注意。1994年下半年,隨著Internet的迅猛發展,環球資訊網WWW的快速增長,促進了Java語言研製的進展,使得它逐漸成為Internet上倍受歡迎的開發與程式語言。1995年5月Java正式問世,一些著名的計算機公司紛紛購買了Java語言的使用權,如Microsoft、IBM、Netscape、Novell、Apple、DEC、SGI等。因此,Java語言被美國著名雜誌PC Magazine評為1995年十大優秀科技產品(計算機類僅此一項入選)之一,隨之大量出現了用Java編寫的軟體產品,受到工業界的重視與好評,認為“Java是八十年代以來計算機界的一件大事”。微軟總裁比爾·蓋茨在認真觀察了一段時間後,確認“Java是長時間以來最卓越的程式設計語言”,並確定微軟整個軟體的開發戰略從PC單機時代向以網路為中心的計算時代轉移,而購買Java則是他的重大戰略決策的實施部署。

因此,Java的誕生必將對整個計算機產業發生深遠的影響,對傳統的計算模型提出了新的挑戰。SUN Microsystem公司的總裁Scott McNealy認為:Java對Internet和WWW開闢了一個嶄新的時代。

有人預言:Java將成為網路上的“世界語”,今後,用其他語言編寫的軟體統統都要用Java語言來改寫。

2.Java語言的主要特點

Java語言是一種適用於網路程式設計的語言,它的基本結構與C++極為相似,但卻簡單得多。它集成了其它一些語言的特點和優勢,又避開了它們的不足之處。它的主要特點如下:

2.1簡單性

Java與C++相比,不再支援運算子過載、多級繼承及廣泛的自動強制等易混淆和較少使用的特性,而增加了記憶體空間自動垃圾收集的功能,複雜特性的省略和實用功能的增加使得開發變得簡單而可靠。

簡單化的另一個方面是Java的系統非常小,其基本解釋和類支援部分只佔40KB,附加的基本標準庫和執行緒支援也只需增加175KB。因此,Java應用軟體能在相當小的系統之上獨立工作。

2.2平立性

這是Java最吸引人的地方。由於它採用先編譯成中間碼(位元組碼),然後裝載與校驗,再解釋成不同的機器碼來執行,即“Java虛擬機器”的思想,“遮蔽”了具體的“平臺環境”特性要求,使得只要能支援Java虛擬機器,就可執行各種Java程式。

2.3面嚮物件的技術

面向物件(O-O)的技術是近年來軟體開發中用得最為普遍的程式設計方法,,它通過把客觀事物進行分類組合、引數封裝、用成員變數來描述物件的性質、狀態,而用方法(成員函式)來實現其行為和功能。O-O技術具有繼承性、封裝性、多型性等眾多特點,Java在保留這些優點的基礎上,又具有動態聯編的特性,更能發揮出面向物件的優勢。

2.4多執行緒

多執行緒機制使應用程式能並行執行,Java有一套成熟的同步原語 ,保證了對共享資料的正確操作.通過使用多執行緒,程式設計者可以分別用不同的執行緒完成特定的行為,而不需要採用全域性的事件迴圈機制,這樣就很容易實現網路上實時的互動行為。

2.5動態性

Java的設計使它適合於一個不斷髮展的環境。在類庫中可以自由地加入新的方法和例項變數而不會影響使用者程式的執行。並且Java通過介面來支援多重繼承,使之比嚴格的類繼承具有更靈活的方式和擴充套件性。

2.6安全性

Java有建立在公共金鑰技術基礎上的確認技術.指示器語義的改變將使應用程式不能再去訪問以前的資料結構或是私有資料,大多數病毒也就無法破壞資料.因而,用Java可以構造出無病毒、安全的系統。

Java語言除上述主要特點外,還有高效能、分佈性、強大性、解釋性、可移植性等,此處不再 贅述。

3.Java語言的發展

Java自正式問世以來已經歷了四年的歷程,時間雖短,發展極快。一年一度在美國舊金山召開的世界Java One語言開發者大會(Java One Developer Conference)盛況空前正說明了這一點。四年中每年的Java One大會,既是瞭解Java最新技術動態、應用成果和下一步發展趨勢的最好場所,又是推動下一年Java快速發展的重要動力。首屆Java One大會於1996年召開,各屆簡況如下:

1996年5月29-31日,第一屆,出席會議者6500餘人,來自工業界的超過一半。有人評價說:“這是近年計算機界最光輝的一次盛會”。工業界相當看好Java語言,認為它的使用將會引起一場軟體革命:從軟體的設計風格、設計方法、設計目標到設計過程,都會產生徹底的變革,“甚至會改變此星球的生活方式”。

1997年,第二屆,出席會議者10000人。Java的追隨者不斷增加,應用開發迅速起步。

1998年3月24-27日,第三屆,出席會議者14000餘人(註冊人數),註冊門票售價1195美元,否則1395美元,即使如此,仍有不少人不惜工本,擠入會場。本次會議除了軟體巨頭微軟未參加會議外,幾乎所有的計算機公司都參加了。展廳內設300多個展臺,先後舉行了90場專題討論會,每場參加的人數從千人至五六千人不等。會議的主題是:通過Java的培訓來帶動Java軟體的開發和技術研究,從而發展生產力,獲取高額利潤,提高生活質量,推動資訊產業的進步。會議展出的內容大致如下:

Java開發工具軟體,如:JMF、JDK、Symantec Visual Cafe、Java Dynamic Management Kit、JFC、JNDI、Java Studio 等;

企業資訊管理解決方案軟體,如:EJB(Enterprise JavaBeans);

基於Java技術的資訊家電,如:機頂盒、Java電話等;

個人資訊綜合服務(Java戒指)、社會資訊綜合查詢亭(Kiosk);

電子商務軟體、智慧卡、Java Card API 等;

網路計算環境下的Java伺服器軟體、遠端方法呼叫(RMI)、基於Java技術的移動計算裝置;

JMS(Java Message Service)用於出版、票據訂閱的軟體;

JOS(Java OS)、基於Java技術的NC和Java Station。

1999年6月15-18日,第四屆,出席會議者達20xx0人,300多家廠商參展,舉辦400多場技術講座,555名演講者慷慨陳詞,精彩紛呈。這次大會的主要特點是:

Java框架結構被梳理清晰

本次JavaOne大會上,Sun公司的一個重大舉措就是公佈了Java平臺的最新架構。重新定義的Java平臺以Java 2為核心,由面向企業和伺服器市場的企業版Java 2(J2EE)、面向傳統PC客戶機市場的標準版Java 2(J2SE)和麵向資訊電器等後PC終端裝置市場的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組成。雖然新框架結構中的內容都是已有的,但這樣重新定義和組合,使得Java平臺的概念簡單化,從而變得易於理解,更適合於進行市場推廣。

2)重點放在企業平臺

隨著Internet的飛速發展,企業計算模式正摒棄C/S結構而採用Web-Browser結構,此即瘦客戶端/胖伺服器、大容量資料庫的3層或N層體系結構。由於Java的特點,使得它在開發伺服器端的應用程式方面有著得天獨厚的優勢,面向伺服器端的J2EE為當今逐漸流行的N層體系結構提供了一個標準的Java計算平臺:介面一致、工具簡易、豐富、Web頁面互聯便捷,從而能大大加速和簡化各種應用系統的開發。

3) 加速後PC時代的程序

計算機的發展創造了Internet,但是計算機現在卻不是訪問Internet的唯一方式。正在出現的資訊化、智慧化的消費類電子產品打破了PC作為資訊終端的壟斷地位,成為人類進入Internet的新門戶。資訊終端的多元化預示著所謂後PC(post-PC)時代的到來。消費類的資訊終端量大面廣,是典型的瘦客戶機,其本身的資源和能力不能與PC相比,但必須更加智慧化,並對伺服器端的管理提出了更高的要求。而Java平臺恰恰滿足了這種要求。本次大會推出的Kjava虛擬機器能執行在16以上的微處理器上,佔用記憶體少,人們可以隨心所欲,在資源有限的裝置上方便地開發出各種各樣的應用,直接執行在不同的消費類或其它電子裝置上;而Jini的出現為Java網路連線提供了公共標準,使得任何Java裝置都可以連入網路中被自動識別,並可充分利用網路上已有的各種資源。大力推進Jini的發展是Sun公司加速後PC時代程序的一項重要策略。

4)應用系統異彩紛呈

與上屆大會一樣,展出內容有:應用工具、應用系統、資訊家電等。特別在實時系統開發方面,以IBM為首開發出了應用於工業實時環境的Java嵌入系統,展現出Java在工業領域的廣闊應用前景。

Java語言的出現和發展,得到了IT業界的青睞,它像一面大旗,凝聚了世界眾多的廠商與Sun公司一道,結成了對抗微軟壟斷的聯盟。許多知名廠商紛紛購買Java許可證,目前已有90多萬個軟體開發商加入了Java陣營,1億個Java終端使用者,幾千種Java應用軟體產品,1500餘種Java書籍(自Java問世4年來,平均每天出版一本)。這真是IT業界的盛事!

IBM公司提出“高舉Java大旗,全力以赴”的口號,它在全世界的11個國家有28個實驗室,集聚了2500餘名技術人員,全天侯24小時進行全方位開發;晶片巨人Intel提出“抓住時機,佔領Java陣地”!決心使Intel晶片系統成為開發Java應用執行的最佳平臺;Novell則宣稱“Java是Novell的未來,未來是伺服器端Java的市場”;作為Java發明者的Sun公司,堅持“保衛Java大旗,發展Java之路”的方針,通過對Java的“研究椘攔罈構造棽饈詶推廣”的過程,從而佔領市場。此外,HP、Oracle、Apple、Sybase、Netscape、Informix、3Com、Motorola等公司均是Sun的堅強同盟。

在我國,Java的引進與開發起步早,發展水平基本與世界同步。目前,Sun公司已在中國建成了由5個授權中心、20多個Internet/Intarnet Java解決方案中心和10所Java大學、若干培訓中心組成的三級結構。全面推動Java在中國的普及、應用、研究、開發,培養了數以十萬計的Java開發人員。此外,Sun還牽頭成立了中外軟體廠商的開發聯盟。

在中國,Java的開發可以說是“人才濟濟,成果累累”。如清華大學王克巨集教授帶領的課題組面向全國,自96年開始舉辦了多期Java培訓班和講座,開設了數期本科生、研究生Java課程,出版了“Java系列叢書”10餘冊 ,承擔了國家“”攻關專案“基於Java技術的互動式遠端教學系統”,並與日本就Java開發進行了國際合作,成績斐然;東大阿派下屬的寶鋼東軟軟體技術研究中心是國內是首屈一指的Java研發骨幹企業,該中心從95年起就開始了Java的研發,目前,已掌握了Personal Java的核心移植技術,併成功地將JVM移植到汽車導航平臺。此外,他們還開發出支援Jini協議的即插即用網路印表機軟體,以及一套Jini資訊家電網路的視覺化演示環境,完成了基於JavaBeans的元件化軟體開發及執行支援環境等多項成果;在中國臺灣,22家知名計算機公司成立了“Java聯盟”,並在臺北建立了“Java開發中心”,新竹建立了“Java語言實驗室”;在香港,舉行了全島Java杯比賽,掀起了學習Java的熱潮 。Java的浪潮洶湧澎湃,席捲全球!

4. Java技術

Java發展至今日,已不僅僅是一種程式語言,實際上已形成了一門技術.其內容包括:

1)Java軟體包

Java語言及其程式設計技術、JavaOS、Java開發環境與工具、Java語言的各種軟體包、資料庫介面JDBC等。

2)Java虛擬機器及其規範

3) Java嵌入技術(Java晶片)

已推出的有Java戒指、Java卡等。1999年8月2日,Sun公司宣佈名為MAJC的專門為Java語言設計的的晶片優化研製成功,欲與Intel試比高低。該晶片在設計時採用了模組式高效能運算引擎,實質為一種晶片級並行處理機,能以更有效的方式分解計算任務,特別適合處理多媒體資料。Sun公司希望通過MAJC晶片的釋出催生出一個基於Java語言的微處理器家族,與Intel公司競爭。設想中的Java處理器將應用在從低價消費電子產品到高階因特網伺服器領域。

4)Java計算

基於Java技術的企業Internet/Intranet資訊系統以及其他應用系統。

5)Jini技術

1999年初正式釋出後,立刻得到業界的廣泛支援。Jini的出現為Java網路連線提供了公共標準,使得任何Java裝置都可以連入網路中被自動識別,並可充分利用網路上已有的各種資源。它把網路上的各類裝置(包括消費類電子裝置如行動電話、PDA、DTV、HPC、NC、遊戲機、電冰箱、智慧卡等等)和各種軟體組合成一個單一、動態的分散式系統,使網路更易於操縱、易於管理,具有更高的可配置性。Jini將使網路具有自發性,它的出現大大擴充套件了“計算”和“計算機”的含義,極大地簡化了網路操作,對家庭使用者來說,使用網上裝置即插即用,就像使用電話一樣方便。Java和Jini 不僅可以不依賴於Windows為代表的作業系統,而且引導著資訊產業的潮流,使Sun公司能在未來的、非PC類電子產品的數字化市場中強佔制高點。

6)Jiro平臺

異質網路環境中安裝的儲存系統的多樣性和分佈性,給儲存管理帶來了巨大的挑戰。使用者和開發人員都希望能有一種技術,能更好地促進企業儲存管理方案的開發。而Jiro平臺正是解決此問題的革命性方案。Jiro平臺實現了Java和Jini 技術,它是一個便於使用者管理異質網路上由各種伺服器、儲存和裝置組成的混合環境的開放式儲存管理平臺。它對作業系統是中立的。Jiro為跨異質儲存區域網(SAN)的管理服務和裝置提供了一個開放平臺,允許伺服器、儲存和聯網裝置在異質網路環境中無縫地協同工作。Jiro平臺為開發者帶來的好處有:

允許開發者利用各種實現管理儲存網路的目標功能建立應用;

提供了一個可以在各種應用、服務和裝置之間互動操作的元件模型;

允許裝置易被增加、刪除;

允許應用或服務被自動更新。

1999年7月,Sun釋出了正式的Jiro規範草案,供公眾討論、修改。目前,Jiro平臺的團體成員已超過25家,支援Jiro平臺的廠商超過300家。有眼光的廠商紛紛加入到這些組行列,從而加快了Jiro的發展。

結語

Java自問世以來,以其得天獨厚的優勢,在IT業界掀起了研究、開發它的浪潮,顯示了“鵬程萬里”的美好前景。作為一種與底層硬體無關的、“編寫一次,到處執行”的高階語言和計算平臺,Java天生就具有將網路上的各個平臺連成一體的能力,真正實現了“網路就是計算機”的理念。以Java為代表的網路的成長,改變了我們的聯絡方式、生活方式、學習方式和經營方式。它的來到使我們目睹了一場類似印刷術的重大變革。毫無疑問,它將影響人類社會的發展,這就是:Java加速人類進入網路時代!

Java是當今IT產業和人類文明的創新和希望!