基于B2C的網(wǎng)上拍賣系統(tǒng)—秒殺與競(jìng)價(jià)系統(tǒng)(論文+PPT+源碼)
時(shí)間:2023-05-25 14:03:01 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)
時(shí)間:2023-05-25 14:03:01 來(lái)源:網(wǎng)站運(yùn)營(yíng)
基于B2C的網(wǎng)上拍賣系統(tǒng)—秒殺與競(jìng)價(jià)系統(tǒng)(論文+PPT+源碼):
分類號(hào)_______________ 密級(jí)________________
UDC _______________ 學(xué)號(hào)_ ___
畢業(yè)設(shè)計(jì)(論文)
論文題目 | 基于B2C的網(wǎng)上拍賣系統(tǒng)—秒殺與競(jìng)價(jià) |
---|
Thesis Topic | Spike and Auction Design - B2C online auction-based system |
2017年 5 月 24日
畢業(yè)設(shè)計(jì)(論文)任務(wù)書
第1頁(yè)
畢業(yè)設(shè)計(jì)(論文)題目:基于B2C的網(wǎng)上拍賣系統(tǒng)—秒殺與競(jìng)價(jià)畢業(yè)設(shè)計(jì)(論文)要求及原始數(shù)據(jù)(資料):1.綜述國(guó)內(nèi)外基于B2C的網(wǎng)上拍賣系統(tǒng)研究現(xiàn)狀;2.深入了解基于B2C的網(wǎng)上拍賣系統(tǒng)及其插件的相關(guān)技術(shù);3.熟練掌握基于B2C的網(wǎng)上拍賣系統(tǒng)的應(yīng)用與分析,訓(xùn)練編寫插件程序的能力;4.設(shè)計(jì)并實(shí)現(xiàn)基于B2C的網(wǎng)上拍賣系統(tǒng)中針對(duì)數(shù)據(jù)檢查的插件;5.深入分析基于B2C的網(wǎng)上拍賣系統(tǒng)中插件的關(guān)鍵技術(shù)與編寫語(yǔ)言;6.訓(xùn)練檢索文獻(xiàn)資料和利用文獻(xiàn)資料的能力; 7.訓(xùn)練撰寫技術(shù)文檔與學(xué)位論文的能力。 |
---|
第2頁(yè)
畢業(yè)設(shè)計(jì)(論文)主要內(nèi)容:1.綜述基于B2C的網(wǎng)上拍賣系統(tǒng)在現(xiàn)實(shí)生活中的應(yīng)用;2.了解基于B2C的網(wǎng)上拍賣系統(tǒng)的相關(guān)技術(shù);3.熟悉基于B2C的網(wǎng)上拍賣系統(tǒng)以及插件的開發(fā)環(huán)境; 4.設(shè)計(jì)基于B2C的網(wǎng)上拍賣系統(tǒng)中針對(duì)數(shù)據(jù)檢查的插件;5. 深入基于B2C的網(wǎng)上拍賣系統(tǒng)中插件的關(guān)鍵技術(shù)與編寫語(yǔ)言NASL的設(shè)計(jì)流程;6.熟練掌握基于基于B2C的網(wǎng)上拍賣系統(tǒng)平臺(tái)的插件編寫;7.設(shè)計(jì)與實(shí)現(xiàn)針對(duì)基于B2C的網(wǎng)上拍賣系統(tǒng)檢查的插件的程序。學(xué)生應(yīng)交出的設(shè)計(jì)文件(論文):1.內(nèi)容完整、層次清晰、敘述流暢、排版規(guī)范的畢業(yè)設(shè)計(jì)論文;2.包括畢業(yè)設(shè)計(jì)論文、源程序等內(nèi)容在內(nèi)的畢業(yè)設(shè)計(jì)電子文檔及其它相關(guān)材料。 |
---|
第3頁(yè)
主要參考文獻(xiàn)(資料):曹建.電子商務(wù)與網(wǎng)上經(jīng)營(yíng)[M].電子科技大學(xué)出版社,2003耿祥義,張躍平.Java2實(shí)習(xí)教程[M] . 杭州:清華大學(xué)出版社, 2001. 李剛.瘋狂java講義[M]. 杭州:電子工業(yè)出版社, 王曰芬.電子商務(wù)網(wǎng)站設(shè)計(jì)與管理[M].杭州:杭州大學(xué)出版社,2002陶國(guó)榮. jQuery權(quán)威指南[M]. 機(jī)械工業(yè)出版社, 2011.肖暉,張玉清. Nessus插件開發(fā)及實(shí)例[J]. 計(jì)算機(jī)工程, 2007,(02)劉曉華,張健,周慧貞.JSP應(yīng)用開發(fā)詳解[M].電子工業(yè)出版社,2007Bob Reselman. Visual Basic 6.0 使用指南.電子工業(yè)出版社,2006.Craig Eddy. 中文Access 2000 24學(xué)時(shí)建設(shè).機(jī)械工業(yè)出版社,2001.耿祥義,張躍平. JSP實(shí)用教程[M].杭州:清華大學(xué)出版社,2007.林金霖.ASP實(shí)物經(jīng)典[M].杭州:中國(guó)鐵道出版社,1999,12專業(yè)班級(jí)學(xué)生要求設(shè)計(jì)(論文)工作起止日期指導(dǎo)教師簽字日期教研室主任審查簽字日期系主任批準(zhǔn)簽字日期 |
---|
目錄
摘要II
AbstractIIII
第1章 緒論11
1.1 選題背景11
1.2 項(xiàng)目的主要研究工作22
1.2.1 應(yīng)用客戶端程序及J2EE服務(wù)器22
1.2.2 WEB層組件22
1.2.3 客戶層組件22
1.2.4 編寫算法22
1.3 開發(fā)環(huán)境22
第2章 關(guān)鍵技術(shù)平臺(tái)與理論介紹33
2.1 概念33
2.1.1 J2EE的概念33
2.1.2 JSP的概念及其特點(diǎn)33
2.1.3 Java Bean的概念33
2.1.4 Java Servlet的概念33
2.1.5 Session對(duì)象44
2.2 J2EE的結(jié)構(gòu)44
2.3 J2EE的容器類型44
2.4 J2EE的體系與模式44
2.4.1 J2EE的體系(分布式計(jì)算)44
2.4.2 J2EE的模式44
2.5 JAVA三大框架55
2.5.1 Struts框架55
2.5.2 Spring框架66
2.5.3 Hibernate框架66
2.6 開發(fā)環(huán)境的搭建77
2.6.1 服務(wù)器配置77
2.6.2 Tomcat安裝及配置77
2.6.3 數(shù)據(jù)庫(kù)配置88
第3章 需求分析和可行性研究1111
3.1 問(wèn)題的定義1111
3.2 需求分析1111
3.2.1 需求分析的過(guò)程1111
3.2.2 需求分析的方法1212
3.2.3 本軟件研究方法1212
3.2.4 目標(biāo)需求1313
3.2.5 功能需求1414
3.2.6 性能需求1616
3.3 可行性分析1616
3.3.1 經(jīng)濟(jì)可行性1616
3.3.2 技術(shù)可行性1616
3.3.3 操作可行性1717
3.3.4 法律可行性1717
第4章 系統(tǒng)總體設(shè)計(jì)1818
4.1 系統(tǒng)需求1919
4.1.1 系統(tǒng)需求描述1919
4.2 系統(tǒng)功能2020
第5章 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)2121
5.1 系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)2121
5.1.1 系統(tǒng)E-R圖2121
5.1.2 數(shù)據(jù)庫(kù)表設(shè)計(jì)2222
5.2 前臺(tái)頁(yè)面管理2424
5.2.1 注冊(cè)與登錄2525
5.2.2 選擇物品加入購(gòu)物車2727
5.3 后臺(tái)管理3131
5.3.1 修改密碼3232
5.3.2 商品管理3333
5.3.3 訂單管理3939
5.3.4 留言管理3939
第6章 系統(tǒng)測(cè)試與分析4040
6.1 程序調(diào)試4040
6.2 程序的測(cè)試4040
6.2.1 測(cè)試的重要性及目的4040
6.2.2 測(cè)試的步驟4141
6.2.3 測(cè)試的主要內(nèi)容4242
第7章 安全性問(wèn)題4444
結(jié)論4545
參考文獻(xiàn)4747
致謝4848
附錄一:英文文獻(xiàn)原文4949
附錄二:中文譯文5757
基于B2C的網(wǎng)上拍賣系統(tǒng)—秒殺與競(jìng)價(jià)
摘要
網(wǎng)絡(luò)商城近年來(lái)非常火熱的一種經(jīng)營(yíng)方式,與現(xiàn)實(shí)生活中的商店的差別是利用電子商務(wù)的一些手段,從而溝通消費(fèi)者與商家進(jìn)行商品買賣的虛擬商店,減少買家賣家間的多層環(huán)節(jié),減少運(yùn)輸?shù)某杀疽约皩訉哟磉^(guò)程中的差價(jià),這就有巨大的價(jià)格優(yōu)勢(shì)從而帶來(lái)巨大的發(fā)展空間。網(wǎng)絡(luò)商城盡可能帶給消費(fèi)者最大的利益,帶動(dòng)商品經(jīng)濟(jì)的快速發(fā)展,引領(lǐng)國(guó)民經(jīng)濟(jì)的穩(wěn)固快速發(fā)展,推進(jìn)國(guó)內(nèi)經(jīng)濟(jì)形勢(shì)的上揚(yáng)。
本論文詳細(xì)介紹了整個(gè)系統(tǒng)的已實(shí)現(xiàn)的各項(xiàng)功能。實(shí)現(xiàn)多種商品的維護(hù)功能;增加了用戶留言的功能;能夠收集用戶的留言反饋使用戶留言系統(tǒng)的主要功能,該功能可以依據(jù)用戶提出的各種建議或是提供的留言反饋,在后期對(duì)該系統(tǒng)進(jìn)行修正和完善;后臺(tái)管理功能主要是管理員對(duì)網(wǎng)站持續(xù)的維護(hù)工作;后臺(tái)管理功能主要包含的功能有:維護(hù)商品功能、查看秒殺拍賣促銷、查看訂單功能,這樣做可以使系統(tǒng)得到實(shí)時(shí)更新,為用戶查詢提供更為準(zhǔn)確的信息。
關(guān)鍵詞 網(wǎng)上商城 秒殺 競(jìng)拍
Spike and Auction Design - B2C online auction-based system Abstract
Online Shopping Mall which is similar to real-world stores, the difference is the use of various means of e-commerce to reach virtual store selling process from buy to reduce intermediate links, eliminating transportation costs and agency in the middle of the post, created for ordinary consumption and increase market liquidity huge space for development. The best interests of consumers can also drive the development of the company and the business take off, guide steady and rapid development of the national economy, promote GDP.
This paper details the features have been implemented throughout the system. Maintenance functions to achieve a variety of goods; provides functional user message; user message function is mainly to collect user message, you can leave a message on the recommendation of user-supplied information or proposed to modify and improve the system; background management functions mainly administrator user maintenance work on the site; background management functions mainly includes the maintenance commodity function, see spike and promotions, view order functions, so do real-time updates, to provide users with more accurate information queries.
Key Words: Online Shopping Mall spike auction
第1章 緒論
1.1 選題背景
伴隨著網(wǎng)絡(luò)技術(shù)的廣泛應(yīng)用和高速發(fā)展,隨著人們生活節(jié)奏的越來(lái)越快,越來(lái)越多的人們開始在網(wǎng)絡(luò)中尋求便利。網(wǎng)絡(luò)購(gòu)物具備了省時(shí)、省事、省心、高效等特點(diǎn),從而廣泛被大眾接受,并逐漸滲透到人們的生活中,成為人們?nèi)粘I钪斜夭豢缮俚囊粋€(gè)部分。
在網(wǎng)絡(luò)消費(fèi)成為主流趨勢(shì)的今天,淘寶、京東等網(wǎng)絡(luò)購(gòu)物平臺(tái)為人們所熟知,在線購(gòu)物成為大眾購(gòu)買商品以及商家出售商品追求簡(jiǎn)單、方便、快捷的最好方式。美食、服裝、電子產(chǎn)品、奇奇怪怪的小商品、日用品等等森羅萬(wàn)象的各種商品,只需要輕松點(diǎn)擊幾個(gè)按鈕就可以通過(guò)網(wǎng)絡(luò)平臺(tái)簡(jiǎn)單的搜索到并足不出戶的購(gòu)買到,更為便宜的價(jià)格、方便的購(gòu)買、送貨上門的服務(wù),所有這些,都是在如今競(jìng)爭(zhēng)激烈的市場(chǎng)環(huán)境中網(wǎng)上購(gòu)物能夠獲得大量消費(fèi)者親賴的制勝法寶。特別是當(dāng)今世界快時(shí)尚快節(jié)奏的引領(lǐng),龐大的互聯(lián)網(wǎng)用戶群體,時(shí)尚潮流、科技前端、重大事件等各種信息通過(guò)互聯(lián)網(wǎng)的快速傳播,人們第一時(shí)間了解當(dāng)今世界的同時(shí),就能夠通過(guò)網(wǎng)絡(luò)購(gòu)物的形式與世界相連,使每一個(gè)普通百姓都能參與到世界的變化當(dāng)中來(lái)。
在如此的時(shí)代背景下,在龐大的人口基數(shù)下暗藏著龐大的客戶群的當(dāng)今中國(guó),在蒸蒸日上經(jīng)濟(jì)形勢(shì)下,毫無(wú)疑問(wèn)選擇創(chuàng)建網(wǎng)絡(luò)商城是一個(gè)與時(shí)俱進(jìn)并且前景非常光明的一條康莊大道,必將獲得巨大的成功。
網(wǎng)絡(luò)商城作為為廣大的消費(fèi)者群體與商家之間提供網(wǎng)絡(luò)交易的平臺(tái),目的是能夠?yàn)榱藦V大網(wǎng)上商家與用戶提供一個(gè)交流平等、信息安全、交易可靠、可全面支持各類商品銷售的電子商務(wù)運(yùn)營(yíng)平臺(tái),消費(fèi)者和客戶或潛在的消費(fèi)者和客戶在這個(gè)平臺(tái)上可以進(jìn)行商品的查看、搜索、交易、交流。系統(tǒng)集會(huì)員、產(chǎn)品展示、訂購(gòu)系統(tǒng)、訂單管理、促銷管理、分類搜索、在線支付于一體。
富有特色的網(wǎng)絡(luò)平臺(tái)界面搭配簡(jiǎn)潔易操作的各項(xiàng)功能,吸引用戶的目光并提升了用戶體驗(yàn),更為自由的頁(yè)面展示搭配靈活的后臺(tái)管理,方便管大的網(wǎng)絡(luò)商家進(jìn)行個(gè)性化的網(wǎng)絡(luò)運(yùn)營(yíng),打造網(wǎng)絡(luò)商城的需求。
本項(xiàng)目研究的是基于B2C的網(wǎng)上拍賣系統(tǒng)的網(wǎng)上拍賣系統(tǒng),讓人們能通過(guò)互聯(lián)網(wǎng)盡快的買到自己所中意的商品。
B2C(business-to-customer)期中“B”指的是商家,“C”指的是消費(fèi)者,客戶,B2C就是說(shuō)商家與客戶對(duì)接,也就是“商對(duì)客”,“商對(duì)客”這種新型的電子商務(wù)模式,就是現(xiàn)在所說(shuō)的商業(yè)零售,是直接面向消費(fèi)者銷售服務(wù)和產(chǎn)品的方式。這種形式的電子商務(wù)大多以網(wǎng)絡(luò)零售業(yè)為主經(jīng)營(yíng)業(yè)務(wù),主要借助于互聯(lián)網(wǎng)來(lái)開展在線銷售活動(dòng)。B2C即企業(yè)通過(guò)互聯(lián)網(wǎng)平臺(tái)為消費(fèi)者提供一個(gè)新型的便捷的購(gòu)物環(huán)境--網(wǎng)絡(luò)商店、消費(fèi)者通過(guò)互聯(lián)網(wǎng)在網(wǎng)上購(gòu)物、在網(wǎng)上進(jìn)行支付。
1.2 項(xiàng)目的主要研究工作
本系統(tǒng)是基于時(shí)下最火的網(wǎng)上購(gòu)物的現(xiàn)狀,根據(jù)人們?nèi)粘5氖褂昧?xí)慣,設(shè)計(jì)了一個(gè)完整的基于B2C的網(wǎng)絡(luò)拍賣系統(tǒng)。
該系統(tǒng)的模型構(gòu)架分為以下四層結(jié)構(gòu),如下:
J2EE應(yīng)用程序是由三大組件構(gòu)成的。J2EE組件是具有獨(dú)立功能的軟件單元,J2EE組件在經(jīng)過(guò)與之相關(guān)的類以及文件便可以合并成為J2EE應(yīng)用程序,而且可以與其他的組件進(jìn)行交互作用。本系統(tǒng)包括如下組件:
1.2.1 應(yīng)用客戶端程序及J2EE服務(wù)器
Java Servlet,JavaServer Pages(JSP)Web組件以及JavaBean。
1.2.2 WEB層組件
J2EE web層組件包含JSP頁(yè)面或者Servlet。根據(jù)J2EE的相關(guān)規(guī)范,還包括一些JavaBean對(duì)象來(lái)對(duì)用戶的輸入進(jìn)行處理,并將輸入發(fā)送給運(yùn)行在業(yè)務(wù)邏輯層上的相關(guān)組件來(lái)進(jìn)行處理。
1.2.3 客戶層組件
基于WEB方式的靜態(tài)HTML、JSP頁(yè)面應(yīng)用程序。
1.2.4 編寫算法
編寫秒殺競(jìng)拍算法,解決完成秒殺競(jìng)拍功能。
1.3 開發(fā)環(huán)境
開發(fā)工具:Eclipse 。
運(yùn)行環(huán)境:jdk1.7
服務(wù)器:Tomcat 7.0。
數(shù)據(jù)庫(kù):MySql。
操作系統(tǒng):Windows 7。
所需內(nèi)存:2 G。
第2章 關(guān)鍵技術(shù)平臺(tái)與理論介紹
2.1 概念
2.1.1 J2EE的概念
J2EE是利用Java 2平臺(tái)從而對(duì)企業(yè)解決方案的開發(fā)、布置和管理相關(guān)的復(fù)雜問(wèn)題進(jìn)行簡(jiǎn)化的一種體系構(gòu)造。J2EE技術(shù)它的基礎(chǔ)是核心Java平臺(tái)或Java 2標(biāo)準(zhǔn)平臺(tái)。J2EE不但穩(wěn)固了標(biāo)準(zhǔn)版中的很多好的設(shè)計(jì),比如在設(shè)計(jì)好代碼之后可以在不同的平臺(tái)上運(yùn)行、便于使用數(shù)據(jù)庫(kù)的JDBC API、CORBA技術(shù)及可以在網(wǎng)絡(luò)應(yīng)用里來(lái)保護(hù)數(shù)據(jù)的安全模式之類,與此同時(shí)它還提供了對(duì)EJB(Enterprise JavaBeans)、Java Servlet API、JSP(Java Server Pages)以及XML技術(shù)的全面支持。其最后的目的便是可以成為使企業(yè)的開發(fā)者大范圍減少投放到市場(chǎng)中所需時(shí)間的體系構(gòu)造。
2.1.2 JSP的概念及其特點(diǎn)
JSP程序是一個(gè)服務(wù)端的頁(yè)面腳本程序,是英文Java Server Pages的簡(jiǎn)寫,翻譯成中文就是java服務(wù)器頁(yè)面,簡(jiǎn)單的來(lái)說(shuō)JSP就是簡(jiǎn)易的Servlet設(shè)計(jì),能夠在該腳本里直接對(duì)客戶端瀏覽器進(jìn)行編寫所須要顯示的HTML的文檔內(nèi)容,當(dāng)然也可以按照J(rèn)SP規(guī)范將Java程序代碼嵌入到腳本中。JSP腳本規(guī)范為簡(jiǎn)化JSP程序和瀏覽器之間的輸入輸出處理提供了若干內(nèi)部對(duì)象。因?yàn)槭菑腍TML頁(yè)面中增加Java動(dòng)態(tài)處理代碼從而得到JSP程序,所以又被稱為動(dòng)態(tài)JSP頁(yè)面。
2.1.3 Java Bean的概念
JavaBean是一種可反復(fù)使用的組件,它由JAVA語(yǔ)言寫成的,用戶可以通過(guò)JavaBean打包所有功能、處理、值、數(shù)據(jù)庫(kù)訪問(wèn)以及所有能夠用java代碼創(chuàng)造的對(duì)象,而且能夠被別的開發(fā)人員可以通過(guò)內(nèi)部的JSP頁(yè)面、Servlet、其他JavaBean、applet程序或者應(yīng)用來(lái)運(yùn)用這些對(duì)象。一定程度上認(rèn)為JavaBean為用戶準(zhǔn)備了一種隨時(shí)隨地都可以拷貝的能力,而不需要考慮意外的發(fā)生。這對(duì)于J2EE業(yè)務(wù)邏輯層處理是具有非常重要作用的地方。
2.1.4 Java Servlet的概念
Java Servlet用的是某種請(qǐng)求/響應(yīng)的機(jī)制,即是說(shuō)使用設(shè)定的Java程序設(shè)計(jì)的技術(shù),通過(guò)該Servlet動(dòng)態(tài)產(chǎn)生響應(yīng)從而向一個(gè)特定的請(qǐng)求做出相應(yīng)的響應(yīng)。Servlet能應(yīng)用的請(qǐng)求/響應(yīng)場(chǎng)合有很多,但是經(jīng)常使用的仍是于Web應(yīng)用程序中用來(lái)產(chǎn)生超文本傳輸協(xié)議響應(yīng)(HTTP)。由此,Servlet可以代替別的類型HTTP請(qǐng)求/響應(yīng)機(jī)制,比如通用網(wǎng)關(guān)接口(CGI)腳本。
2.1.5 Session對(duì)象
Session對(duì)象是類javax.servlet.Httpsession中的對(duì)象,它用來(lái)存儲(chǔ)全部用戶的信息(通過(guò)會(huì)話的方式存儲(chǔ)到WEB服務(wù)器端),從而來(lái)追蹤全部使用者的操作狀況。
2.2 J2EE的結(jié)構(gòu)
J2EE結(jié)構(gòu)具有與平臺(tái)無(wú)關(guān)性的J2EE結(jié)構(gòu)。因此通過(guò)J2EE設(shè)計(jì)出的程序就可以在不同平臺(tái)的操作系統(tǒng)下來(lái)使用。因?yàn)樵撎攸c(diǎn)就令編寫J2EE程序變成一件簡(jiǎn)單的事情,由于將業(yè)務(wù)邏輯封裝成了能夠被用來(lái)復(fù)用的部件,而且J2EE服務(wù)器通過(guò)容器的形式為每一種組件類型來(lái)提供后臺(tái)服務(wù),因此你可以集中注意力來(lái)解決業(yè)務(wù)邏輯。
2.3 J2EE的容器類型
J2EE容器類型可以分為兩種:WEB容器,EJB容器。
EJB容器可以處理所有J2EE應(yīng)用程序里企業(yè)級(jí)Bean的執(zhí)行,Enterprise Bean以及它們的容器在J2EE服務(wù)器之上運(yùn)行的。
WEB容器也是管理一切J2EE應(yīng)用程序中JSP和Servlet組件的執(zhí)行,與此相同的 WEB組件和它們的容器也是在J2EE服務(wù)器上運(yùn)行的。
2.4 J2EE的體系與模式
2.4.1 J2EE的體系(分布式計(jì)算)
(1)表示層:Web Page| HTML | HTTP
(2)控制層:JSP | Servlets
(3)邏輯層:JavaBean
(4)數(shù)據(jù)層:Database
(5)JDBC
2.4.2 J2EE的模式
MVC(Model – View – Controller)
頁(yè)面bean是模型(model),而JSP是視圖(view), Servlet是控制器(controller)。
2.5 JAVA三大框架
Java三大框架主要用來(lái)做WEN應(yīng)用。
Struts主要負(fù)責(zé)表示層的顯示
Spring通過(guò)操縱它的IOC和AOP來(lái)處理控制業(yè)務(wù)(負(fù)責(zé)對(duì)數(shù)據(jù)庫(kù)的操作)
Hibernate主要是數(shù)據(jù)持久化到數(shù)據(jù)庫(kù)
再用jsp的servlet做網(wǎng)頁(yè)開發(fā)的時(shí)候有個(gè) web.xml的映射文件,里面有一個(gè)mapping的標(biāo)簽就是用來(lái)做文件映射的。當(dāng)你在瀏覽器上輸入U(xiǎn)RL得知的時(shí)候,文件就會(huì)根據(jù)你寫的名稱對(duì)應(yīng)到一 個(gè)JAVA文件,根據(jù)java文件里編寫的內(nèi)容顯示在瀏覽器上,就是一個(gè)網(wǎng)頁(yè)。
2.5.1 Struts框架
struts是開源軟件。為了能夠使我們降低在使用MVC設(shè)計(jì)模型來(lái)開發(fā)Web應(yīng)用所用的的時(shí)長(zhǎng),所以我們使用struts。若是想同時(shí)使用Servlets和JSP的優(yōu)勢(shì)來(lái)創(chuàng)建可擴(kuò)張的應(yīng)用,選用struts也是很好的。
1.流程:服務(wù)器啟動(dòng)后,根據(jù)web.xml加載ActionServlet讀取struts-config.xml文件內(nèi)容到內(nèi)存。
2.架構(gòu):Struts對(duì)Model,View和Controller都提供了對(duì)應(yīng)的組件。ActionServlet,該類是Struts的核心控制器,用來(lái)阻攔用戶發(fā)出的請(qǐng)求信息。
Model部分:由JavaBean組 成,ActionForm對(duì)用戶的請(qǐng)求參數(shù)進(jìn)行封裝,從而成為ActionForm對(duì)象,該對(duì)象被ActionServlet轉(zhuǎn)發(fā)給 Action,Action按照ActionFrom中的請(qǐng)求參數(shù)對(duì)用戶的請(qǐng)求進(jìn)行處理。JavaBean則封裝了底層的業(yè)務(wù)邏輯,包括數(shù)據(jù)庫(kù)訪問(wèn)等。View部分:該部分采用JSP實(shí)現(xiàn)。大量的標(biāo)簽庫(kù)有Struts提供,減少腳本的使用可以運(yùn)用標(biāo)簽庫(kù)來(lái)減少,自定義的標(biāo)簽庫(kù)能夠?qū)崿F(xiàn)與Model的有效交互,并增添了現(xiàn)實(shí)功能。對(duì)應(yīng)上圖的JSP部分。
Controller組件:系統(tǒng)核心控制器,業(yè)務(wù)邏輯控制器兩個(gè)部分組成了Controller組件。系統(tǒng)核心控制器,對(duì)應(yīng)上面的ActionServlet。Struts框架提供了該控制器,繼承HttpServlet 類,所以能夠配置成標(biāo)注的Servlet。該控制器用來(lái)阻截每一個(gè)HTTP請(qǐng)求,之后按照用戶的相關(guān)請(qǐng)求確定是否要交給業(yè)務(wù)邏輯控制器。業(yè)務(wù)邏輯控制器,用于處理用戶的請(qǐng)求,該控制器本來(lái)沒(méi)有處理的功能,它通過(guò)使用Model來(lái)完成該功能。對(duì)應(yīng)Action部分。
2.5.2 Spring框架
Spring是一個(gè)處理了大量的在J2EE開發(fā)中常見錯(cuò)誤的非常優(yōu)秀的框架。 Spring供給了管理業(yè)務(wù)對(duì)象的同步方法而且鼓勵(lì)了注入對(duì)接口編程而不是對(duì)類變成的好習(xí)慣。Spring的架構(gòu)基礎(chǔ)是基于使用JavaBean屬性 的Inversion of Control 容器。然而Spring在運(yùn)用IoC容器作為建立完好關(guān)注全部架構(gòu)層層的完全解決方案方面是唯一的。Spring提供了獨(dú)一的數(shù)據(jù)管理 抽象包括簡(jiǎn)易和高效能的JDBC框架,很大程度上提高了效能而且降低了一定數(shù)量的漏洞。Spring的數(shù)據(jù)訪問(wèn)架構(gòu)還集成了Hibernate和其他O/R mapping 解決方案。
2.5.3 Hibernate框架
Hibernate是一個(gè)開源代碼的對(duì)象關(guān)系映射框架,對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝,使得Java程序員可以更為隨意的使用對(duì)象變成思維來(lái)操作數(shù)據(jù)庫(kù)。Hebernate能夠運(yùn)用在所有應(yīng)用JDBC的地方,既能夠在java的 客戶端程序用,也可以在Servlet/JSP的Web應(yīng)用中來(lái)進(jìn)行運(yùn)用,最最具有重大意義的是,Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP, 完成數(shù)據(jù)持久化的重要任務(wù)。
Hibernate的核心接口一共有5個(gè),分別為:Session、 SessionFactory、Transaction、Query和Configuration。這5個(gè)核心接口在任何開發(fā)中都會(huì)用到。通過(guò)這些接口, 不僅可以對(duì)持久化對(duì)象進(jìn)行存取,還能夠進(jìn)行事務(wù)控制。下面對(duì)這五個(gè)核心接口分別加以介紹。
1.Session接口:負(fù)責(zé)執(zhí)行被持久化對(duì)象的CRUD操作(CRUD的任務(wù)是完成與 數(shù)據(jù)庫(kù)的交流,包含了很多常見的SQL語(yǔ)句。)。但需要注意的是Session對(duì)象是非線程安全的。同時(shí),Hibernate的session不同于 JSP應(yīng)用中的HttpSession。這里當(dāng)使用session這個(gè)術(shù)語(yǔ)時(shí),其實(shí)指的是Hibernate中的session,而以后會(huì)將 HttpSession對(duì)象稱為用戶session。
2.SessionFactory接口:負(fù)責(zé)初始化Hibernate。它充當(dāng)數(shù)據(jù)存儲(chǔ) 源的代理,并負(fù)責(zé)創(chuàng)建Session對(duì)象。這里用到了工廠模式。需要注意的是SessionFactory并不是輕量級(jí)的,因?yàn)橐话闱闆r下,一個(gè)項(xiàng)目通常 只需要一個(gè)SessionFactory就夠,當(dāng)需要操作多個(gè)數(shù)據(jù)庫(kù)時(shí),可以為每個(gè)數(shù)據(jù)庫(kù)指定一個(gè)SessionFactory。
3.Configuration接口:負(fù)責(zé)配置并啟動(dòng)Hibernate,創(chuàng)建SessionFactory對(duì)象。在Hibernate的啟動(dòng)的過(guò)程中,Configuration類的實(shí)例首先定位映射文檔位置、讀取配置,之后創(chuàng)建SessionFactory對(duì)象。
4.Transaction接口:負(fù)責(zé)事務(wù)相關(guān)的操作。該接口是可以被選擇的,開發(fā)人員也可以設(shè)計(jì)編寫個(gè)人的底層事務(wù)處理代碼。
5.Query和Criteria接口:負(fù)責(zé)執(zhí)行各種數(shù)據(jù)庫(kù)查詢。它可以使用HQL語(yǔ)言或SQL語(yǔ)句兩種表現(xiàn)方法。
2.6 開發(fā)環(huán)境的搭建
2.6.1 服務(wù)器配置
第一步:首先從官方網(wǎng)站http;//
http://java.sun.com下載該軟件的最新版本。
第二步:雙擊.exe文件,安裝在C:/Program Files/Java/ jdk1.7.0_79。
第三步:JDK的環(huán)境配置:在桌面上用鼠標(biāo)選中我的電腦,單擊右鍵,點(diǎn)擊屬性按鈕,然后在“系統(tǒng)特性”一欄內(nèi)點(diǎn)擊“高級(jí)”標(biāo)簽,之后 “高級(jí)”里面選擇“環(huán)境變量”,在系統(tǒng)變量中加入變量JAVA_HOME(C:/ProgramFiles/Java/ jdk1.7.0_79),classpath(變量值為C:/Program Files/Java/ jdk1.7.0_79/lib/dt.jar;C:/ProgramFiles/Java/ jdk1.7.0_79/lib/tools.jar;C:/ProgramFiles/Java/ jdk1.7.0_79)和path(變量值為C:/Program Files/Java/ jdk1.7.0_79/bin;)。
完成前面的所有步驟之后,輸入javac,如果出現(xiàn)圖中的畫面,就表明JDK安裝以及配置都是對(duì)的。
圖1 javac調(diào)試界面
2.6.2 Tomcat安裝及配置
打開并運(yùn)行apache-tomcat-7.0.32.exe文件,依據(jù)普通的程序安裝步驟一步一步就可以輕松安裝好Tomcat,安裝時(shí)它會(huì)自動(dòng)查找到JDK所在的位置。在安裝的過(guò)程中必須要選擇某個(gè)文件夾從而作為Tomcat的安裝目錄。我選擇安裝的位置是C:/ Tomcat 7.0。
完成安裝之后,增加Tomcat的環(huán)境變量,增加的方法與JDK的環(huán)境變量的添加方法類似,設(shè)置變量名為TOMCAT_HOME,變量值為C:/ Tomcat 7.0。
設(shè)置完畢后就可以運(yùn)行Tomcat服務(wù)器了。Tomcat成功啟動(dòng)后,在瀏覽器中輸入http;//localhost;8080/,如果出現(xiàn)歡迎界面,則說(shuō)明Tomcat安裝成功。
2.6.3 數(shù)據(jù)庫(kù)配置
(1)SQL Server
首先,要定義一個(gè)數(shù)據(jù)庫(kù)名稱(DSN)。打開“開始”按鈕然后“設(shè)置”然后“控制面板”|“管理工具“,之后在文件夾下有ODBC數(shù)據(jù)源的快捷方式。
在彈出的“ODBC數(shù)據(jù)源管理器”的窗口中選擇“系統(tǒng)DSN”,之后點(diǎn)擊“添加”選項(xiàng),選擇“SQL Server”為數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序,點(diǎn)擊“完成”。如圖2所示。
圖2 創(chuàng)建新數(shù)據(jù)源
在彈出的“創(chuàng)建SQL Server的新數(shù)據(jù)源”對(duì)話框的“數(shù)據(jù)源名稱”文本框輸入“douxing”,在“描述”文本框中可以寫上數(shù)據(jù)庫(kù)的功能。在“服務(wù)器”下拉列表中選擇要連接的SQL Server,因?yàn)橐惭b到本地服務(wù)器,因此點(diǎn)擊 “XY”即可。如圖3所示。
圖3 選擇數(shù)據(jù)庫(kù)服務(wù)器
選擇 “下一步”按鈕,點(diǎn)擊“使用用戶輸入登錄ID和密碼的SQL Server驗(yàn)證”單選按
鈕,“登錄ID”默認(rèn)為“admin”,密碼為空。如圖4所示。
圖4 SQL Server身份驗(yàn)證設(shè)置
選擇“下一步”按鈕,在該頁(yè)面中選擇該數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)為“畢業(yè)設(shè)計(jì)”,如圖5所示。
圖5 選擇SQL數(shù)據(jù)庫(kù)
點(diǎn)擊“下一步”按鈕,再點(diǎn)擊“完成”按鈕即可打開“ODBC Microsoft SQL Server 安裝”對(duì)話框。如圖6所示。
圖6 測(cè)試數(shù)據(jù)源
第3章 需求分析和可行性研究
需求分析通俗的來(lái)說(shuō)就是對(duì)一般用戶的需求進(jìn)行分析處理,通過(guò)充分了解用戶需求進(jìn)而把目標(biāo)系統(tǒng)大致架構(gòu)出來(lái)。需求分析第一要?jiǎng)?wù)就是對(duì)實(shí)際要處理的對(duì)象進(jìn)行全面的調(diào)查,要對(duì)所調(diào)查目標(biāo)的對(duì)象進(jìn)行充分的了解,了解之后才能真正確定下來(lái)用戶所需要的也切合實(shí)際情況的系統(tǒng),最終才能根據(jù)該情況確定系統(tǒng)所應(yīng)該擁有的各種功能。本次設(shè)計(jì)的網(wǎng)上拍賣系統(tǒng)亦是如此。
3.1 問(wèn)題的定義
問(wèn)題定義是指從系統(tǒng)的方向來(lái)認(rèn)識(shí)了解軟件,確定對(duì)所開發(fā)系統(tǒng)的全部要求,并指出要實(shí)現(xiàn)這些需求所需要的條件,需求需要達(dá)到怎樣的標(biāo)準(zhǔn).這些需求是指:環(huán)境需求(如jdk、服務(wù)器等)、功能需求(要做什么),性能需求(要達(dá)到什么指標(biāo)),可靠性需求(避免發(fā)生故障的能力), 用戶界面需求,安全保密的需求,資源使用需求(軟件運(yùn)行是所需的內(nèi)存,CPU等),軟件資源損耗與開發(fā)進(jìn)度需求,提前預(yù)計(jì)之后系統(tǒng)可以達(dá)成的目標(biāo)。
因此在進(jìn)行項(xiàng)目開發(fā)之前,通過(guò)大量查詢資料,我對(duì)網(wǎng)上拍賣系統(tǒng)進(jìn)行了系統(tǒng)的研究,確定了開發(fā)該系統(tǒng)所需的環(huán)境需求,為充分滿足用戶需求所設(shè)計(jì)的多功能個(gè)性化的界面,為商戶設(shè)計(jì)的多樣化的商品陳列界面,并對(duì)日后項(xiàng)目開發(fā)所需時(shí)間進(jìn)行預(yù)估,保證在驗(yàn)收項(xiàng)目之前提早完成該系統(tǒng)。
3.2 需求分析
3.2.1 需求分析的過(guò)程
進(jìn)行需求分析需要分為三個(gè)方面:分析與綜合,制訂規(guī)格說(shuō)明,評(píng)審。
分析與綜合:一步一步將所有軟件功能進(jìn)行細(xì)化,找出系統(tǒng)元素間的相互聯(lián)系,接口特性以及設(shè)計(jì)上的各種限制,判斷他們是否滿足需求,去掉不合理的部分,添加需要的部分。最后,整理成為系統(tǒng)的解決方案,以及將要開發(fā)的系統(tǒng)的詳細(xì)邏輯模型(做什么的模型)。
制訂規(guī)格說(shuō)明書:也就是編制文檔,軟件需求規(guī)格說(shuō)明書就是描述需求的文檔。注意需求規(guī)格說(shuō)明書是需求分析階段的成果,然后向下一階段提交。
評(píng)審:對(duì)功能的正確性,完整性和清晰性,以及其它方面的需求進(jìn)行評(píng)價(jià)。評(píng)審?fù)ㄟ^(guò)才能進(jìn)行下一個(gè)階段的工作,不通過(guò)則需重新開始需求分析。
3.2.2 需求分析的方法
有很多進(jìn)行需求分析的方法。現(xiàn)在我們只討論原型化方法
, 對(duì)結(jié)構(gòu)化方法,動(dòng)態(tài)分析法等別的的方法在此不進(jìn)行分析。
在需求分析的種種方法中原型化方法是非常重要的一種方法。原型的含義就是軟件的早期可運(yùn)行的某個(gè)版本,該版本實(shí)現(xiàn)了目標(biāo)系統(tǒng)的一些甚至全部的功能。
原型化方法就是為了縮短時(shí)間先建立一個(gè)相對(duì)不那么完善的簡(jiǎn)單系統(tǒng),這樣的的一個(gè)系統(tǒng)具有一些目標(biāo)系統(tǒng)的某些或者所有的功能,但是因?yàn)楸容^粗糙在可靠性,界面友好性以及等等方面并不完全具備,有許多功能的短缺和缺點(diǎn)。我們建立這樣的一個(gè)系統(tǒng)可以發(fā)現(xiàn)目標(biāo)系統(tǒng)的某一方面是否真正可行,比如算法的可行性,是否擁有相關(guān)技術(shù),是否滿足用戶真正的需求。舉個(gè)例子來(lái)說(shuō),在研究是否滿足客戶真正需求的時(shí)候,可以快速建立一個(gè)簡(jiǎn)易的系統(tǒng),該系統(tǒng)只有一個(gè)借口,通過(guò)用戶實(shí)地操作后進(jìn)行反饋,從而得到這方面的信息,繼而基于原型系統(tǒng)進(jìn)行目標(biāo)系統(tǒng)的開發(fā)。
有三種主要類型的原型:探索性,實(shí)驗(yàn)性,進(jìn)化性,探索性:目標(biāo)是確定目標(biāo)系統(tǒng)的要求,確定可取的功能,并探討多種方案的可行性。實(shí)驗(yàn)型:目的在于在大范圍的開發(fā)和實(shí)現(xiàn)前,考核方案是否真的合適,規(guī)格說(shuō)明是否真的可靠。進(jìn)化型:它的目的不在于改進(jìn)規(guī)格說(shuō)明,而是在于將系統(tǒng)建造得更易于變化,在不斷改進(jìn)軟件原型的過(guò)程中,一步一步將原型升級(jí)成為最終版本系統(tǒng)。
運(yùn)用兩種不同的策略來(lái)進(jìn)行原型化方法:廢棄策略,追加策略。廢棄策略是指先創(chuàng)建一個(gè)功能相對(duì)簡(jiǎn)單并且質(zhì)量要求低的模型系統(tǒng),然后對(duì)這個(gè)系統(tǒng)進(jìn)行反復(fù)的修改,形成比較好的思想之后,由此設(shè)計(jì)出較為完善,精確,一致,穩(wěn)固的最終系統(tǒng)。系統(tǒng)構(gòu)造完成后,原來(lái)的模型系統(tǒng)就被廢棄不再使用.探索型以及實(shí)驗(yàn)型都屬于廢棄策略。
追加策略是指先建構(gòu)一個(gè)功能不太復(fù)雜并且對(duì)質(zhì)量的要求低的模型系統(tǒng),作為最終要完成的系統(tǒng)的核心,進(jìn)而通過(guò)不斷地進(jìn)行擴(kuò)充與修改,漸次追加新的要求,繼而發(fā)展成為最終的系統(tǒng)。進(jìn)化型屬于這種策略。
3.2.3 本軟件研究方法
軟件工程顧名思義,就是求解軟件的一類工程,它運(yùn)用計(jì)算機(jī)科學(xué)、數(shù)學(xué)和管理科學(xué)的原理,運(yùn)用傳統(tǒng)工程的原理和方法,建立軟件,以提高質(zhì)量,降低成本。在軟件工程中,構(gòu)造模型與算法通過(guò)計(jì)算機(jī)科學(xué)、數(shù)學(xué)來(lái)構(gòu)造,而工程科學(xué)則用于制定規(guī)范、設(shè)計(jì)范型、評(píng)估成本以及確定權(quán)衡,管理科學(xué)則是用于對(duì)計(jì)劃、資源、質(zhì)量、成本等的管理。軟件工程是一個(gè)工程類學(xué)科,對(duì)計(jì)算機(jī)軟件的開發(fā)以及維護(hù)起到了指導(dǎo)作用。
軟件工程的模型是一個(gè)結(jié)構(gòu)框架,包含了軟件開發(fā)全部的過(guò)程、活動(dòng)和任務(wù)。
瀑布模型的內(nèi)容及其特點(diǎn):
瀑布模型把軟件生存周期中的各種活動(dòng)規(guī)定為按照固有的順序進(jìn)行連接的軟干階段工作,是一種線性的模型。瀑布模型的各階段的活動(dòng)是:指出系統(tǒng)相關(guān)需求、指出軟件相關(guān)需求、需求的分析、設(shè)計(jì)、編碼、測(cè)試以及運(yùn)行。各個(gè)開發(fā)的階段具有以下的幾項(xiàng)特征,將上一階段接受本階段的工作對(duì)象作為輸入,對(duì)于上述輸入從而進(jìn)行本階段的活動(dòng),將本階段的工作成果作為輸出傳遞到下一個(gè)階段,評(píng)審該階段的工作,如果該階段工作被確認(rèn)后,就開始進(jìn)行下階段的工作,不然的話返回前一階段甚至更前面的某個(gè)階段。瀑布模型有種種缺點(diǎn)但它最大的缺陷就是這個(gè)模型嚴(yán)重缺乏靈活性。
演化模型的內(nèi)容及其特點(diǎn):
部分軟件開發(fā)不能夠事先完整的定義相關(guān)的軟件需求,這時(shí)候就需要用到演化模型,演化模型的開發(fā)過(guò)程通常是一開始的時(shí)候?qū)诵南到y(tǒng)進(jìn)行開發(fā),在投入運(yùn)行核心系統(tǒng)之后,軟件開發(fā)人員依據(jù)用戶的返回的相關(guān)信息,實(shí)施進(jìn)行開發(fā)的迭代過(guò)程,每進(jìn)行一次迭代的過(guò)程均要進(jìn)行需求、設(shè)計(jì)、編碼、測(cè)試、集成等幾個(gè)階段,迭代過(guò)程進(jìn)行到整個(gè)軟件開發(fā)的結(jié)束。演化模型能夠在部分程度上降低了軟件開發(fā)活動(dòng)的盲目性。
螺旋模型的相關(guān)內(nèi)容及其特點(diǎn):
這個(gè)模型是在瀑布模型以及演化模型的基礎(chǔ)上出現(xiàn)的模型,但它是增加了這兩個(gè)模型之前所沒(méi)有的風(fēng)險(xiǎn)分析階段從而在此基礎(chǔ)上出現(xiàn)的一種新型的軟件開發(fā)的模型。螺旋模型沿著順時(shí)針的方向,漸次體現(xiàn)了以下幾個(gè)方面的活動(dòng):制定計(jì)劃、風(fēng)險(xiǎn)分析、實(shí)施工程以及客戶評(píng)估。
噴泉模型的相關(guān)內(nèi)容及其特點(diǎn):
軟件創(chuàng)建所固有的迭代和無(wú)間隙特征在噴泉模型上得到了體現(xiàn),部分軟件開發(fā)過(guò)程需要面向?qū)ο箝_發(fā),這時(shí)候就需要使用噴泉模型。
增量模型的相關(guān)內(nèi)容及其特點(diǎn):
在完成了軟件系統(tǒng)完整的體系結(jié)構(gòu)的設(shè)計(jì)之后,開始完整的開發(fā)系統(tǒng)的一個(gè)初始子集,繼之,根據(jù)這一子集,建造一個(gè)更加精細(xì)的版本,如此不斷的進(jìn)行系統(tǒng)的增量開發(fā)。
瀑布模型、演化模型、螺旋模型之間的聯(lián)系:這三者的相似的地方就是它們都可以分為多個(gè)階段進(jìn)行軟件開發(fā),而瀑布模型一次完成軟件,演化模型分為多次完成,每次迭代完成軟件的一個(gè)部分,螺旋模型也分為多次完成,每次完成軟件的一個(gè)新原型,并考慮風(fēng)險(xiǎn)分析。
3.2.4 目標(biāo)需求
本項(xiàng)目主要實(shí)現(xiàn)的功能是為為廣大的消費(fèi)者群體與商家之間提供網(wǎng)絡(luò)交易的平臺(tái),實(shí)現(xiàn)該平臺(tái)的創(chuàng)建需要實(shí)現(xiàn)一系列的功能。商品信息發(fā)布的功能,商家發(fā)布自己產(chǎn)品的相關(guān)信息;注冊(cè)登錄功能,游客通過(guò)注冊(cè)成為用戶后可以正式開始購(gòu)物收藏等操作;商品購(gòu)買功能,將商品加購(gòu)物車后繼而填寫相關(guān)信息進(jìn)行購(gòu)買;秒殺功能,商家推出低價(jià)產(chǎn)品來(lái)進(jìn)行推廣或清倉(cāng),用戶購(gòu)買廉價(jià)商品;競(jìng)拍功能,稀有產(chǎn)品通過(guò)競(jìng)拍價(jià)高者得;后臺(tái)管理功能,通過(guò)后臺(tái)管理對(duì)商品的增添,活動(dòng)的開始關(guān)閉進(jìn)行操作。
首先進(jìn)行總體的分析和設(shè)計(jì),再將基本信息模塊的具體內(nèi)容設(shè)計(jì)完成,然后完成其它各個(gè)子模塊的功能。并要重視作好筆記。本項(xiàng)目采用MySql進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì),開發(fā)工具采用eclipse。
3.2.5 功能需求
3.2.5.1 系統(tǒng)用例
3.2.5.2 登錄注冊(cè)
3.2.6 性能需求
(1)磁盤容量要求:存儲(chǔ)容量不大,數(shù)據(jù)庫(kù)系統(tǒng)也比較小,系統(tǒng)容量約占30MB空間左右;
(2)安全性要求:有權(quán)限的相關(guān)設(shè)置,未注冊(cè)登錄的游客不能進(jìn)行用戶權(quán)限的操作,如加入收藏夾,購(gòu)買等操作。普通用戶不能進(jìn)行商品上架,開放商品秒殺競(jìng)拍等功能,只有商家可以;
(3)適應(yīng)性要求:要求界面美觀簡(jiǎn)介,方便用戶熟悉操作,方面商品的管理上架、下架、購(gòu)買、參與競(jìng)拍等操作。
3.3 可行性分析
進(jìn)行可行性分析就是為了能夠運(yùn)用某個(gè)具體的項(xiàng)目中它的最重要的內(nèi)容以及與其對(duì)應(yīng)的需求,繼而從不同的方向進(jìn)行分析解決,然后看問(wèn)題是不是確實(shí)可以被處理,就是說(shuō)在最小的付出的情況下盡最大的可能來(lái)保證問(wèn)題得到處理,盡力減少人力物力的過(guò)量付出,導(dǎo)致事倍功半。進(jìn)行可行性分析須要集思廣益,對(duì)盡可能多的解決方法進(jìn)行調(diào)查研究,對(duì)這些方法可能招致的結(jié)果進(jìn)行篩選,看結(jié)果所取得的成果效益是否影響一開始的目標(biāo)。進(jìn)行可行性分析一定要科學(xué)、可靠、公正。我們可以從四個(gè)方面來(lái)進(jìn)行可行性分析。
3.3.1 經(jīng)濟(jì)可行性
基于B2C網(wǎng)上拍賣系統(tǒng)的開發(fā),通過(guò)從不同渠道大范圍的查詢相關(guān)的資料以及在通過(guò)問(wèn)卷形式和對(duì)得來(lái)的資料進(jìn)行獨(dú)立的分析與思考之后,最終確定網(wǎng)絡(luò)商城系統(tǒng)在經(jīng)濟(jì)上是可以實(shí)行的。接下來(lái)我從投入和效益這兩方面來(lái)對(duì)其進(jìn)行分析。
作為獨(dú)立設(shè)計(jì)的系統(tǒng),不需要人力資源的投入,而且僅憑一臺(tái)電腦搭建相關(guān)環(huán)境就可以完成,而且項(xiàng)目開發(fā)中用到的開發(fā)工具Eclipse 、服務(wù)器Tomcat、 數(shù)據(jù)庫(kù)MySql都是免費(fèi)的開源的,投入很少,開發(fā)完成后沒(méi)有盈利目的,因而可以進(jìn)行開發(fā)。
3.3.2 技術(shù)可行性
因?yàn)橛幸酝趯W(xué)校的軟件開發(fā)得相關(guān)經(jīng)驗(yàn)再加上對(duì)該系統(tǒng)所需技術(shù)以及設(shè)計(jì)相關(guān)功能進(jìn)行了詳盡的調(diào)查和思考,決定使用JSP來(lái)進(jìn)行該項(xiàng)目的開發(fā), 而JSP是一種以JAVA語(yǔ)言為主的能在不同平臺(tái)不同的環(huán)境中都可以進(jìn)行部署和開發(fā)的語(yǔ)言,而這正是該系統(tǒng)所需要的,所以在技術(shù)上本系統(tǒng)是可行的。
3.3.3 操作可行性
基于B2C網(wǎng)上拍賣系統(tǒng)具備多樣化、個(gè)性化、多功能的界面,為用戶和商家廣泛接受,而且具備競(jìng)價(jià)和秒殺等具有特色的功能,操作簡(jiǎn)單,安全性高,便于維護(hù),所以從使用操作方面的角度來(lái)講,該系統(tǒng)是值得開發(fā)的。
3.3.4 法律可行性
作為我個(gè)人的畢業(yè)設(shè)計(jì),該系統(tǒng)完全由我一人開發(fā),因此在開發(fā)過(guò)程不需要與外界以及其他單位個(gè)人有所沖突,完全符合法律的相關(guān)規(guī)定。因此,本系統(tǒng)在法律上是可行的。
通過(guò)從以上的四點(diǎn)進(jìn)行詳盡的可行性分析之后,確定開發(fā)一個(gè)基于B2C的網(wǎng)上拍賣系統(tǒng)是可以完全可行的。
第4章 系統(tǒng)總體設(shè)計(jì)
本數(shù)據(jù)庫(kù)使用的是Mysql,MySQL是關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),是由瑞典MySQL AB公司所開發(fā)的,目前屬于的是Oracle公司。Mysql是現(xiàn)如今最風(fēng)行的關(guān)系型的數(shù)據(jù)庫(kù)管理系統(tǒng),在WEB應(yīng)用方面MySQL是最好的RDBMS(Relational Database Management System)應(yīng)用軟件之一。MySQL是關(guān)聯(lián)數(shù)據(jù)庫(kù)管理系統(tǒng),關(guān)聯(lián)數(shù)據(jù)庫(kù)在不同的表中保存數(shù)據(jù),而不是在一個(gè)大倉(cāng)庫(kù)將所有數(shù)據(jù)放入內(nèi),這樣就提高了速度并且提高了數(shù)據(jù)的靈活性。作為經(jīng)常被人們使用的用來(lái)訪問(wèn)數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)化語(yǔ)言SQL語(yǔ)言在MySQL中得到應(yīng)用,為了方便不同人群,MySQL采用了兩種版本,分別是社區(qū)版和商業(yè)版,而且由于MySQL軟件的種種優(yōu)點(diǎn),如占用空間小、運(yùn)行速度快等特點(diǎn),尤其是它的開放源碼的這一優(yōu)勢(shì),得到了大量中小型網(wǎng)站開發(fā)者的青睞,數(shù)據(jù)庫(kù)都采用MySQL。
Mysql具有以下特性:
1.使用C與C++語(yǔ)言編寫,而且多種的編譯器對(duì)其進(jìn)行了測(cè)試,確保了源代碼的可移植性。
2.得到 Windows、FreeBSD、AIX、HP-UX、NovellNetware、Linux、SolarisMac 、OS、OpenBSD、OS/2 Wrap等多種操作系統(tǒng)的支持。
3.為多種編程語(yǔ)言提供了API。這些編程語(yǔ)言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
4.充分的利用了CPU資源,支持多線程。
5.經(jīng)過(guò)改良的SQL查詢算法,大大的提升了查詢的速率。
6.不僅可以當(dāng)作獨(dú)立的應(yīng)用程序來(lái)使用在客戶端服務(wù)器網(wǎng)絡(luò)環(huán)境中,而且可以當(dāng)作庫(kù)來(lái)嵌入到別的軟件中。
7.滿足多種語(yǔ)言的支持,常用的編碼譬如中文的BIG5、GB 2312,日文的Shift_JIS都能夠被用作數(shù)據(jù)表名、數(shù)據(jù)列名。
8.提供了很多的數(shù)據(jù)庫(kù)連接途徑,譬如TCP/IP、ODBC和JDBC等。
9.提供了管理工具用于檢查、管理、優(yōu)化數(shù)據(jù)庫(kù)的操作。
10.Mysql可以滿足大型的數(shù)據(jù)庫(kù)需求,能夠用于解決包含大量的內(nèi)容的大型數(shù)據(jù)庫(kù)。
11.支持多種存儲(chǔ)引擎。
12.是開源的數(shù)據(jù)庫(kù),你不需要支付其它的費(fèi)用。
13.使用的數(shù)據(jù)語(yǔ)言形式是標(biāo)準(zhǔn)的SQL數(shù)據(jù)語(yǔ)言形式。
14.很好的支持目前最流行的Web開發(fā)語(yǔ)言—PHP。
15.是可以定制的數(shù)據(jù)庫(kù),Mysql采用了GPL協(xié)議,可以通過(guò)修改源碼來(lái)開發(fā)私人的Mysql系統(tǒng)。
4.1 系統(tǒng)需求
4.1.1 系統(tǒng)需求描述
該項(xiàng)目研究的是基于B2C的網(wǎng)上拍賣系統(tǒng),幫助人們應(yīng)用互聯(lián)網(wǎng)很買到自己所中意的商品,并參與到秒殺與競(jìng)拍當(dāng)中。
4.1.2 軟件結(jié)構(gòu)
本軟件結(jié)構(gòu)采用的是dao---service---action的分層結(jié)構(gòu),期中 dao層包括的主要是一些對(duì)數(shù)據(jù)庫(kù)操作的接口及實(shí)現(xiàn); action層通過(guò)實(shí)現(xiàn)調(diào)用業(yè)務(wù)邏輯方法從而來(lái)處理用戶請(qǐng)求;service層是實(shí)現(xiàn)一些業(yè)務(wù)邏輯,業(yè)務(wù)邏輯實(shí)現(xiàn)也是使用dao層提供的對(duì)數(shù)據(jù)庫(kù)操作的接口和實(shí)現(xiàn)。三者互相調(diào)用, dao中的方法被service調(diào)用,service的方法被action調(diào)用,如3-1-1圖和3-1-2圖所示:
圖3-1-1
圖3-1-2
4.2 系統(tǒng)功能
(1)普通用戶登錄功能。
(2)普通用戶注銷功能。
(3)分類查看商品功能。
(4)查看商品詳細(xì)功能。
(5)秒殺功能。
(6)競(jìng)拍功能。
(7)購(gòu)物車功能。
(8)用戶注冊(cè)信息功能。
(9)購(gòu)買功能。
(10)修改用戶信息功能。
(11)添加用戶留言,刪除用戶留言,查看用戶留言。
(12)管理員登錄驗(yàn)證功能。
(13)管理員注銷功能。
第5章 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
5.1 系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)
5.1.1 系統(tǒng)E-R圖
圖1-1 系統(tǒng)E-R圖
5.1.2 數(shù)據(jù)庫(kù)表設(shè)計(jì)
5.1.2.1 用戶表use
作為一個(gè)網(wǎng)上拍賣系統(tǒng),首先客戶是第一位,那么為了更方便客戶管理,以及對(duì)用戶信息的采集,我們對(duì)創(chuàng)建用戶信息表,包括6個(gè)字段,分別是用戶名,密碼、性別、郵箱以及登錄賬號(hào)和密碼如表1-2-1所示:
表1-2-1 用戶表
列名 | 中文名稱 | 數(shù)據(jù)類型 | 長(zhǎng)度 | 允許空 |
---|
Username | 用戶名 | varchar | 50 | null |
Password | 用戶密碼 | varchar | 50 | null |
Sex | 性別 | Int | 50 | null |
Email | 郵箱 | varchar | 50 | null |
Admin | 是否管理員 | Int | 50 | null |
Id | 序號(hào) | Int | | PK |
5.1.2.2 商品表product
第二張表也就是我們的商品信息表,包括商品的序號(hào)、名稱、價(jià)格、圖片等,如表1-2-2所示
表1-2-2 商品表信息
列名 | 中文名稱 | 數(shù)據(jù)類型 | 長(zhǎng)度 | 允許空 |
---|
Id | 序號(hào) | Int | 50 | PK |
Name | 商品名 | varchar | 50 | null |
Img | 商品圖片 | varchar | 50 | null |
Content | 商品簡(jiǎn)介 | varchar | 50 | null |
Price | 價(jià)格 | varchar | 50 | null |
Sfcx | 是否促銷 | Int | 2 | null |
Newprice | 促銷價(jià)格 | varchar | 50 | null |
Sfms | 是否秒殺 | int | 2 | null |
Msprice | 秒殺價(jià)格 | varchar | 50 | null |
Msdate | 秒殺開始時(shí)間 | varchar | 50 | null |
Mscount | 秒殺數(shù)量 | int | 5 | null |
Sfjp | 是否競(jìng)拍 | int | 2 | null |
Qpprice | 起拍價(jià) | varchar | 50 | null |
Jpprice | 競(jìng)拍價(jià) | varchar | 50 | null |
Jpperson | 競(jìng)拍人 | int | 2 | null |
Jpdate | 競(jìng)拍結(jié)束時(shí)間 | varchar | 50 | null |
5.1.2.3 訂單表order
訂單表order是商城與客戶交互后的產(chǎn)物,包括商品序號(hào)、商品名、價(jià)格、以及派送方式和聯(lián)系方式等如表1-2-3所示
表1-2-3 訂單信息表
列名 | 中文名稱 | 數(shù)據(jù)類型 | 長(zhǎng)度 | 允許空 |
---|
Id | 序號(hào) | Int | 10 | PK |
Proid | 商品序號(hào) | Int | 2 | null |
Count | 購(gòu)買數(shù)量 | varchar | 50 | null |
singleprice | 單價(jià) | varchar | 50 | null |
Price | 價(jià)格 | varchar | 50 | null |
Userid | 購(gòu)買者序號(hào) | int | 2 | null |
Sffk | 是否付款 | int | 2 | null |
Tel | 電話 | varchar | 50 | null |
address | 地址 | varchar | 50 | null |
Date | 購(gòu)買日期 | varchar | 50 | null |
senddept | 送貨地址 | varchar | 50 | null |
visible | 是否可見 | int | 2 | null |
5.1.2.4 留言信息表message
留言信息表也是購(gòu)買商城必不可少的,不僅有利于客戶了解商家信譽(yù)度,同時(shí)還能更好地了解商品,使商城拍賣更透明,留言信息表包括客戶的用戶名,郵箱,以及留言內(nèi)容和留言序號(hào),如表1-2-4所示:
表1-2-4留言信息表
列名 | 中文名稱 | 數(shù)據(jù)類型 | 長(zhǎng)度 | 允許空 |
---|
Name | 用戶名 | varchar | 50 | null |
Email | 郵箱 | varchar | 50 | null |
message | 留言內(nèi)容 | varchar | 250 | null |
Id | 留言序號(hào) | int | 4 | PK |
5.2 前臺(tái)頁(yè)面管理
打開chrome瀏覽器,在瀏覽器輸入url:http://localhost/sale/index/toindex;跳轉(zhuǎn)到商城首頁(yè),商品首頁(yè)將為您展示上市的新品以及在促銷中的商品,然后游客可以查看商品詳細(xì)信息,如果想要購(gòu)買商品,則需要登錄用戶名和密碼,若沒(méi)有注冊(cè),則需要進(jìn)行注冊(cè)。該系統(tǒng)首頁(yè)如圖5-1所示:
圖5-1
5.2.1 注冊(cè)與登錄
游客無(wú)法進(jìn)行商品的交易,如果想要進(jìn)行商品交易,我們需要進(jìn)行登錄,那么點(diǎn)擊右上角的,跳轉(zhuǎn)到登錄注冊(cè)頁(yè)面,登錄注冊(cè)界面則可供消費(fèi)者進(jìn)行登錄或者注冊(cè),登陸需要提交正確的已注冊(cè)過(guò)的用戶名以及密碼,如果之前從未進(jìn)行注冊(cè),那么首次操作請(qǐng)點(diǎn)擊繼續(xù)按鈕,進(jìn)行注冊(cè),注冊(cè)時(shí)需要用戶名、密碼以及郵箱,然后選擇注冊(cè),則注冊(cè)成功,返回登陸界面。如果已經(jīng)注冊(cè),則直接登陸,登陸后頁(yè)面跳轉(zhuǎn)到首頁(yè),用戶由此頁(yè)面開始挑選心儀的產(chǎn)品開始購(gòu)物,如圖5-2-1所示:
圖5-2-1
5.2.1.1 注冊(cè)
點(diǎn)擊繼續(xù),跳轉(zhuǎn)到如下圖4-1-2界面所示:
圖5-2-2
后臺(tái)代碼:
public View register(HttpServletRequest request){
String username=request.getParameter("username");
String password=request.getParameter("password");
String email=request.getParameter("email");
User user =
new User();
user.setUsername(username);
user.setPassword(password);
user.setEmail(email);
user = userService.addUser(user);
輸入相應(yīng)的用戶名、密碼和郵箱,點(diǎn)擊注冊(cè),提示注冊(cè)成功,完成注冊(cè)。
5.2.1.2 登錄
輸入用戶名密碼,點(diǎn)擊登錄,提示登錄成功,完成登錄。登錄后如圖5-1-3所示:
圖5-2-3
后臺(tái)代碼:
public View login(HttpServletRequest request){
String username = request.getParameter("username");
String password = request.getParameter("password");
List<User> list = userService.findUserByNameAndPsd(username, password);
//新品上市
List<Product> newlist = productService.findNewProduct();
request.setAttribute("newlist", newlist);
//促銷
List<Product> cxlist = productService.findCxProduct();
request.setAttribute("cxlist", cxlist);
5.2.2 選擇物品加入購(gòu)物車
5.2.2.1 普通商品與促銷商品
每一個(gè)商品由商品圖片、商品名稱、商品介紹、以及價(jià)格組成,全方面介紹商品的各個(gè)屬性。點(diǎn)擊商品下方的加入購(gòu)物車,即可將商品加入購(gòu)物車,也可以點(diǎn)擊收藏按鈕將商品加入個(gè)人的收藏夾,方便日后進(jìn)行購(gòu)買。
5.2.2.2 秒殺商品
點(diǎn)擊,進(jìn)入秒殺列表,如圖5-2-4所示:
圖5-2-4
選擇要秒殺的商品,查看秒殺商品詳細(xì),秒殺商品除商品的基本屬性外還包括商品的原價(jià)格和秒殺價(jià)格以及秒殺時(shí)間,如圖5-2-5、5-2-6以及5-2-7所示:
圖5-2-5(未到秒殺時(shí)間的商品)
圖5-2-6(正在秒殺的商品)
圖5-2-7(秒殺結(jié)束的商品)
選擇正在秒殺的產(chǎn)品,點(diǎn)擊加入購(gòu)物車,并付款成功,完成秒殺。
5.2.2.3 競(jìng)拍商品
進(jìn)入競(jìng)拍商品詳細(xì),如圖5-2-8與5-2-9所示:
圖5-2-8(競(jìng)拍中的商品)
圖5-2-9(競(jìng)拍結(jié)束的商品)
輸入加價(jià),點(diǎn)擊確定,完成競(jìng)拍,每一次加價(jià)都將刷新頁(yè)面上商品的價(jià)格,競(jìng)拍結(jié)束后,商品將自動(dòng)加入出價(jià)最高者的購(gòu)物車內(nèi)。
競(jìng)拍后臺(tái)代碼:
public View addprice(HttpServletRequest request)
5.2.2.4 購(gòu)物車、訂單和結(jié)算
用戶登錄后,可查看購(gòu)物車和訂單。
點(diǎn)擊我的購(gòu)物車,進(jìn)入購(gòu)物車界面,如圖5-2-10所示:
圖5-2-10
點(diǎn)擊結(jié)算,跳轉(zhuǎn)到填寫收貨信息界面,如圖5-2-11所示:
圖5-2-11
填寫用戶的電話收貨地址以及選擇快遞公司之后后點(diǎn)擊確定,出現(xiàn)如下圖5-2-12界面:
圖5-2-12
選擇銀行后點(diǎn)擊確定,提示支付成功。
點(diǎn)擊我的訂單,查看已購(gòu)物品,如圖5-2-13所示
圖5-2-13
5.3 后臺(tái)管理
在瀏覽器輸入url: http://localhost:8080/sale/index/toAdmin;跳轉(zhuǎn)到后代登錄頁(yè),如圖5-3所示:
圖5-3
后臺(tái)管理員默認(rèn)賬號(hào)admin,密碼111111
輸入用戶名和密碼,點(diǎn)擊登錄,進(jìn)入后臺(tái)系統(tǒng)。如圖5-3-1所以:
圖5-3-1
5.3.1 修改密碼
點(diǎn)擊修改密碼,依次輸入原密碼、新密碼、重復(fù)密碼,點(diǎn)擊確定,提示修改成功。如圖5-3-2所示:
圖5-3-2
后臺(tái)代碼:
public View changePsd(HttpServletRequest request){
User user = (User)request.getSession().getAttribute("user");
5.3.2 商品管理
5.3.2.1 商品維護(hù)
點(diǎn)擊商品管理,展示商品列表,如圖5-3-3所示:
圖5-3-3
后臺(tái)代碼:
public View list(HttpServletRequest request){
點(diǎn)擊左上角添加,跳轉(zhuǎn)到商品添加頁(yè)面,如圖5-3-4:
圖5-3-4
輸入商品名稱、商品價(jià)格、簡(jiǎn)介并上傳商品圖片后,點(diǎn)擊提交,提示保存成功;商品添加完成。
后臺(tái)代碼:
public View add(HttpServletRequest request,@Param("file")TempFile file,
@Param("name")String name,
@Param("price")String price,
@Param("content")String content)
throws IOException{
修改操作:點(diǎn)擊操作欄修改,跳轉(zhuǎn)到修改商品信息,填寫相應(yīng)信息后,點(diǎn)擊提交,提示修改成功。
后臺(tái)代碼:
public View update(HttpServletRequest request,@Param("file")TempFile file,
@Param("name")String name,
@Param("price")String price,
@Param("content")String content,
@Param("id")String id)
throws IOException{
設(shè)置促銷:點(diǎn)擊操作欄設(shè)置促銷,填寫促銷價(jià)格,點(diǎn)擊提交,提示修改成功,設(shè)置促銷成功。
后臺(tái)代碼:
public View szcx(HttpServletRequest request){
String id = request.getParameter("id");
String newprice = request.getParameter("newprice");
Product product = productService.findProductById(Integer.
parseInt(id));
product.setNewprice(newprice);
product.setSfcx(1);
取消促銷:點(diǎn)擊操作欄取消促銷,提示修改成功,取消已促銷的商品。
后臺(tái)代碼:
public View qxcx(HttpServletRequest request){
String id = request.getParameter("id");
Product product = productService.findProductById(Integer.
parseInt(id));
product.setSfcx(0);
product.setNewprice(
null);
刪除商品:點(diǎn)擊操作欄刪除,提示刪除成功,刪除商品。
后代代碼:
public View delete(HttpServletRequest request){
5.3.2.2 秒殺管理
點(diǎn)擊秒殺商品節(jié)點(diǎn),跳轉(zhuǎn)到秒殺商品頁(yè)面如圖5-3-5:
圖5-3-5
列表中有可供設(shè)置秒殺的商品列表,點(diǎn)擊操作欄設(shè)置秒殺,跳轉(zhuǎn)到設(shè)置秒殺界面:
如圖5-3-6所示:
圖5-3-6
添加秒殺價(jià)格、秒殺數(shù)量和秒殺時(shí)間后,點(diǎn)擊提交,設(shè)置秒殺完成;
后臺(tái)代碼:
public View szms(HttpServletRequest request){
String id = request.getParameter("id");
Product product = productService.findProductById(Integer.
parseInt(id));
String price = request.getParameter("price");
String count = request.getParameter("count");
String time = request.getParameter("time");
取消秒殺:點(diǎn)擊操作欄取消秒殺,提示修改成功,取消該商品的秒殺;
后臺(tái)代碼:
public View qxms(HttpServletRequest request){
String id = request.getParameter("id");
Product product = productService.findProductById(Integer.
parseInt(id));
product.setSfms(0);
product.setNewprice(
null);
product.setMscount(0);
product.setMsprice(
null);
product.setMsdate(
null);
當(dāng)秒殺商品數(shù)量為0時(shí),秒殺結(jié)束。
5.3.2.3 競(jìng)拍商品
點(diǎn)擊競(jìng)拍商品節(jié)點(diǎn),跳轉(zhuǎn)到競(jìng)拍商品頁(yè)面,如圖5-3-7所示:
圖5-3-7
設(shè)置競(jìng)拍:點(diǎn)擊操作欄設(shè)置競(jìng)拍,跳轉(zhuǎn)到設(shè)置競(jìng)拍頁(yè)面,如圖5-3-8所示:
圖5-3-8
填寫起拍價(jià)、競(jìng)拍結(jié)束時(shí)間,點(diǎn)擊提交,提示修改成功。
后臺(tái)代碼:
public View szjp(HttpServletRequest request){
String id = request.getParameter("id");
Product product = productService.findProductById(Integer.
parseInt(id));
String price = request.getParameter("price");
String time = request.getParameter("time");
product.setSfjp(1);
product.setJpprice(price);
product.setJpdate(time);
取消競(jìng)拍:點(diǎn)擊操作欄取消競(jìng)拍,提示修改成功,取消競(jìng)拍。
后臺(tái)代碼:
public View qxjp(HttpServletRequest request){
String id = request.getParameter("id");
Product product = productService.findProductById(Integer.
parseInt(id));
product.setSfjp(0);
product.setQpprice(
null);
product.setJpdate(
null);
product.setJpprice(
null);
5.3.3 訂單管理
點(diǎn)擊訂單節(jié)點(diǎn),查看用戶用購(gòu)買商品訂單,訂單只提供查看功能如圖5-2-9:
圖5-3-9
5.3.4 留言管理
點(diǎn)擊留言管理節(jié)點(diǎn),查看留言管理,如圖5-3-10:
圖5-3-10
留言刪除:點(diǎn)擊刪除,提示留言刪除成功。
后臺(tái)代碼:
public View delete(HttpServletRequest request){
String id = request.getParameter("id");
第6章 系統(tǒng)測(cè)試與分析
6.1 程序調(diào)試
在整個(gè)程序開發(fā)的過(guò)程中,一定會(huì)存在一些錯(cuò)誤。當(dāng)程序運(yùn)行時(shí)出現(xiàn)語(yǔ)句的語(yǔ)法錯(cuò)誤時(shí),會(huì)有自動(dòng)提示,會(huì)得到及時(shí)的糾正,所以這類錯(cuò)誤更簡(jiǎn)單的得到發(fā)現(xiàn)和糾正。然而在程序執(zhí)行的過(guò)程中,由于錯(cuò)誤的操作或者對(duì)一些數(shù)據(jù)計(jì)算公式的邏輯錯(cuò)誤從而導(dǎo)致錯(cuò)誤的結(jié)果。這一類錯(cuò)誤很難被發(fā)現(xiàn),時(shí)而出現(xiàn),又時(shí)而不出現(xiàn),所以,對(duì)于這些動(dòng)態(tài)發(fā)生的錯(cuò)誤進(jìn)行排查的過(guò)程是十分的耗時(shí)費(fèi)力的。
6.2 程序的測(cè)試
網(wǎng)站測(cè)試是軟件設(shè)計(jì)的最后一道工序,也是非常重要的一步。用于檢查軟件的質(zhì)量、性能、可靠性等是否符合用戶需求。一套嚴(yán)謹(jǐn)?shù)?、?guī)范的、完善的測(cè)試過(guò)程將大大提高軟件的質(zhì)量、可信度、可靠性,降低軟件的出錯(cuò)率,降低用戶風(fēng)險(xiǎn)系數(shù)。通常網(wǎng)站測(cè)試包括:功能測(cè)試,安全測(cè)試,可用性測(cè)試,性能測(cè)試、兼容性測(cè)試等方面。
6.2.1 測(cè)試的重要性及目的
(1)測(cè)試的重要性
在軟件生命周期中對(duì)軟件的測(cè)試是非常重要的一個(gè)部分,在過(guò)去常使用的瀑布模型中,在運(yùn)行維護(hù)階段之前才會(huì)使用到軟件測(cè)試學(xué),軟件產(chǎn)品交付用戶使用之前進(jìn)行軟件測(cè)試是保證軟件質(zhì)量的一項(xiàng)非常重要手段。近年來(lái),為了檢驗(yàn)本階段的工作成果能否接近預(yù)期的目標(biāo),使盡早的發(fā)現(xiàn)錯(cuò)誤并加以修改更正,軟件工程界開始傾向于一種新的觀念,即軟件生命周期中的各個(gè)階段里都需要進(jìn)行測(cè)試,倘若沒(méi)能在前期階段就開始測(cè)試,錯(cuò)誤的在后面階段的擴(kuò)散往往會(huì)致使最后成品測(cè)試的更大問(wèn)題。
然而在實(shí)際情況中,某種程度上對(duì)于軟件來(lái)講,不管使用怎樣的技術(shù)和采用怎樣的方法,在軟件中仍舊會(huì)出現(xiàn)錯(cuò)誤。為了減少錯(cuò)誤的引入我們通常會(huì)使用新的語(yǔ)言、更完善的開發(fā)過(guò)程、更先進(jìn)的開發(fā)方式,然而仍舊不可能完全避免軟件中的錯(cuò)誤,所以這些引入的錯(cuò)誤需要通過(guò)測(cè)試來(lái)找出,需要測(cè)試來(lái)對(duì)軟件中錯(cuò)誤的密度進(jìn)行估計(jì)。一切工程學(xué)科的基礎(chǔ)組成單元都是測(cè)試,測(cè)試是軟件開發(fā)中的重要組成。自從程序設(shè)計(jì)存在的那天起就與測(cè)試密不可分。據(jù)有關(guān)統(tǒng)計(jì)表明,在一般軟件開發(fā)項(xiàng)目中,軟件測(cè)試的工作量常常會(huì)超出軟件開發(fā)所有工作量的40%。而且用在測(cè)試上的開銷要占在軟件開發(fā)的全部成本中的30%到50%。倘若把維護(hù)階段的開銷成本也考慮在內(nèi)的話,測(cè)試的成本占整個(gè)軟件生存期中的比例也許會(huì)相應(yīng)降低,然而事實(shí)上維護(hù)工作幾近于進(jìn)行二次開發(fā),甚至多次開發(fā),必定許多測(cè)試工作還包含其中。
在實(shí)際操作中,人們往往因軟件測(cè)試操作困難枯燥等原因而不愿從事相關(guān)工作,這其實(shí)是因?yàn)閷?duì)測(cè)試工作存在著一些不正確的看法和理解的誤區(qū),包括以下幾點(diǎn):
1、覺(jué)得測(cè)試工作不像設(shè)計(jì)和編碼工作那樣易于取得顯著的進(jìn)展,無(wú)法給測(cè)試人員帶
來(lái)一定的成就感;
2、以找到軟件漏洞為目的而進(jìn)行測(cè)試是不具有建設(shè)性的,乃至可能是破壞性的,測(cè)試中發(fā)現(xiàn)錯(cuò)位是對(duì)責(zé)任者工作的一種否定;
3、測(cè)試工作乏味枯燥,不能夠使人感興趣;
4、測(cè)試工作是很有難度而且關(guān)注細(xì)節(jié)的困難的工作;
5、對(duì)自己編寫的程序代碼無(wú)端自信,被找到錯(cuò)誤后,擔(dān)心他人對(duì)自己的編程能力的評(píng)價(jià)。
倘若擁有以上的想法對(duì)于從事軟件測(cè)試工作是錯(cuò)誤的,應(yīng)該糾正自己的想法、擁有正確的觀念,才有機(jī)會(huì)真正提高自己的動(dòng)作水準(zhǔn),使產(chǎn)品真正的為用戶接受。
(2)測(cè)試的目的
倘若測(cè)試是以為了更多地找出程序錯(cuò)誤為目的的話,那么測(cè)試就應(yīng)該直接針對(duì)程序以往出錯(cuò)比較多的地方或是代碼比較復(fù)雜的部分。
1、軟件測(cè)試的過(guò)程就是不斷找到程序缺陷然后運(yùn)行程序的過(guò)程;
2、測(cè)試不是為了證明程序無(wú)錯(cuò)誤而是為了證明程序有錯(cuò);
3、測(cè)試用例能發(fā)現(xiàn)至今未發(fā)現(xiàn)的錯(cuò)誤就是一個(gè)好的測(cè)試用例;
4、能發(fā)現(xiàn)以往從來(lái)沒(méi)有發(fā)現(xiàn)過(guò)的錯(cuò)誤的測(cè)試就是一個(gè)成功的測(cè)試。
這些觀點(diǎn)是為了告知人們進(jìn)行測(cè)試時(shí)要以能夠查找到錯(cuò)誤為測(cè)試的中心,而不單單是為了操作軟件的相關(guān)功能。然而如果只是憑字面意思理解這一觀點(diǎn)的話測(cè)試人員可能會(huì)對(duì)測(cè)試產(chǎn)生一些誤導(dǎo),會(huì)認(rèn)為測(cè)試的唯一目的就是為了查找錯(cuò)誤,發(fā)現(xiàn)不了錯(cuò)誤的測(cè)試就沒(méi)有任何價(jià)值,然而事實(shí)并不是這樣的。
查找漏洞并不是測(cè)試工作的唯一目的。測(cè)試人員可以通過(guò)分析錯(cuò)誤的分布特征和錯(cuò)誤產(chǎn)生的原因來(lái)幫助項(xiàng)目管理者盡快發(fā)現(xiàn)當(dāng)前軟件過(guò)程的缺陷,方便進(jìn)行下一步的改進(jìn)。而且我們通過(guò)這樣的測(cè)試可以由此設(shè)計(jì)出對(duì)相關(guān)軟件更有效便捷地檢測(cè)方法,提高測(cè)試的性能。而且有價(jià)值的測(cè)試不一定非要找到程序的缺陷錯(cuò)誤,能夠完整的測(cè)試是一種評(píng)判測(cè)量好壞的方式。
6.2.2 測(cè)試的步驟
和軟件開發(fā)的過(guò)程相類似,軟件測(cè)試也必須分步驟有序進(jìn)行,一步一步有序的進(jìn)行,每一步都前后銜接。若干個(gè)模塊組成一個(gè)個(gè)的子系統(tǒng),再有一個(gè)個(gè)子系統(tǒng)組成大型的軟件模塊。所以倘若在大型軟件系統(tǒng)上測(cè)試基本要進(jìn)行以下幾個(gè)步驟:
(1)在模塊測(cè)試過(guò)程中發(fā)現(xiàn)的常常是在編碼和詳細(xì)設(shè)計(jì)方面的錯(cuò)誤。
(2)在系統(tǒng)測(cè)試步驟中發(fā)現(xiàn)的常常是軟件設(shè)計(jì)方面的錯(cuò)誤,也有時(shí)會(huì)發(fā)現(xiàn)需求說(shuō)明方面的錯(cuò)誤。
(3)在驗(yàn)收測(cè)試的過(guò)程中經(jīng)常發(fā)現(xiàn)的是系統(tǒng)需求說(shuō)明書中的錯(cuò)誤。
6.2.3 測(cè)試的主要內(nèi)容
測(cè)試的過(guò)程分為5個(gè)階段,即:代碼審查、單元測(cè)試、集成測(cè)試、確認(rèn)測(cè)試和系統(tǒng)測(cè)試。 通過(guò)這5個(gè)階段性的測(cè)試來(lái)保證測(cè)試的高質(zhì)量。
(1)單元測(cè)試
單元測(cè)試主要是對(duì)軟件設(shè)計(jì)模塊的最小單元進(jìn)行檢查,測(cè)試發(fā)現(xiàn)模塊的實(shí)際功能和模塊的功能定義不匹配的情況,以及編碼錯(cuò)誤
(2)集成測(cè)試
將把模塊依據(jù)設(shè)計(jì)的需求組起來(lái)而且進(jìn)行測(cè)試的叫做集成測(cè)試,能發(fā)現(xiàn)接口有關(guān)的問(wèn)題。譬如兩個(gè)模塊有時(shí)會(huì)由于粗心的問(wèn)題會(huì)造成有害問(wèn)題;子功能拼裝起來(lái)有時(shí)卻不能出現(xiàn)目標(biāo)的主功能;一些貌似可以被接受的誤差卻不能積累到受接受的程度;全程數(shù)據(jù)結(jié)構(gòu)有時(shí)會(huì)出現(xiàn)錯(cuò)誤等。
(3)確認(rèn)測(cè)試
把向?qū)?lái)的用戶證明系統(tǒng)會(huì)像預(yù)期工作為目的的測(cè)試叫做確認(rèn)測(cè)試。通過(guò)集成測(cè)試按照之前的設(shè)計(jì)將全部模塊拼裝成完整的軟件系統(tǒng),也已經(jīng)基本上排除了接口的錯(cuò)誤,接下來(lái)應(yīng)該再一步對(duì)軟件的有效性進(jìn)行驗(yàn)證,也就是確認(rèn)測(cè)試任務(wù),就如用戶正所期待的那樣的軟件應(yīng)有性能和功能。
(4)系統(tǒng)測(cè)試
最終在軟件開發(fā)完成之后還是要與系統(tǒng)中其他部分進(jìn)行相配套的運(yùn)行,系統(tǒng)測(cè)試。包括性能測(cè)試、恢復(fù)測(cè)試、強(qiáng)度測(cè)試和安全測(cè)試等等。
對(duì)系統(tǒng)進(jìn)行單獨(dú)的測(cè)試主要從這樣幾個(gè)方面進(jìn)行入手:
對(duì)功能進(jìn)行測(cè)試,是對(duì)能否滿足開發(fā)要求進(jìn)行的測(cè)試,能否提供設(shè)計(jì)描述出的功
能和用戶真正的需求都是否都得到了滿足。該測(cè)試是最常使用和最需要進(jìn)行的一項(xiàng)系統(tǒng)測(cè)試,通常情況下還會(huì)用正式的軟件說(shuō)明書作為測(cè)試的標(biāo)準(zhǔn)。
② 對(duì)強(qiáng)度測(cè)試以及對(duì)性能的測(cè)試,這是測(cè)試系統(tǒng)能力最高的實(shí)際限度,也就是軟件在某些超過(guò)負(fù)荷的情況下功能實(shí)現(xiàn)的情況。
③ 對(duì)安全性的測(cè)試,這項(xiàng)測(cè)試是來(lái)證實(shí)位在系統(tǒng)內(nèi)的對(duì)系統(tǒng)進(jìn)行保護(hù)的保護(hù)機(jī)構(gòu)的實(shí)用性,使其不受到各種干擾。主要是對(duì)權(quán)限系統(tǒng)測(cè)試和對(duì)無(wú)效的數(shù)據(jù)、錯(cuò)誤的數(shù)據(jù)、以及不合法的數(shù)據(jù)進(jìn)行干擾的能力而進(jìn)行的測(cè)試。
通過(guò)以上的測(cè)試過(guò)程對(duì)該系統(tǒng)完整的測(cè)試過(guò)后,系統(tǒng)也基本上符合開發(fā)要求,全部測(cè)試完成。
系統(tǒng)中的不同組成模塊經(jīng)過(guò)設(shè)計(jì)完成以后,然后要對(duì)該系統(tǒng)進(jìn)行進(jìn)一步整個(gè)進(jìn)行測(cè)試。這是為了讓整個(gè)系統(tǒng)可以流暢、穩(wěn)固、安全的進(jìn)行運(yùn)行。進(jìn)行系統(tǒng)的測(cè)試的過(guò)程當(dāng)中的以下九種情況:
(1)空指針會(huì)異常捕捉頁(yè)面提交過(guò)來(lái)的數(shù)據(jù)。只要是發(fā)現(xiàn)無(wú)效的或者是空的值和數(shù)據(jù)都需要靠程序操作處理。
(2)第一時(shí)間對(duì)數(shù)據(jù)庫(kù)連接和關(guān)閉異常進(jìn)行捕捉。避免數(shù)據(jù)庫(kù)連接資源及時(shí)的被釋放,用來(lái)下一次的請(qǐng)求調(diào)用。
(3)捕捉數(shù)據(jù)庫(kù)查詢操作異常。
(4)捕捉數(shù)據(jù)庫(kù)查詢操作異常。
(5)捕捉數(shù)據(jù)庫(kù)更新操作異常。
(6)捕捉數(shù)據(jù)庫(kù)添加操作異常。
(7)捕捉數(shù)據(jù)庫(kù)刪除操作異常。
(8)用session會(huì)話變量來(lái)對(duì)用戶以及管理員權(quán)限來(lái)進(jìn)行操控。
(9)不一樣的頁(yè)面編碼方式,對(duì)字符串進(jìn)行需要的轉(zhuǎn)碼的操作。
6.2.3.1 客戶端異常類結(jié)構(gòu)圖(如圖6-2)
圖6-2
6.2.3.2 服務(wù)端異常類結(jié)構(gòu)圖(如圖6-2-1所示)
圖6-2-1
第7章 安全性問(wèn)題
安全性能是否良好是web開發(fā)中一定要密切關(guān)注的一個(gè)命題,特別是在這樣的一個(gè)網(wǎng)絡(luò)購(gòu)物系統(tǒng)中安全性能的良好更為重要,在涉及到用戶的個(gè)人信息的部分以及在交易中資金流動(dòng)的過(guò)程中尤其需要特別注意,在安全性設(shè)計(jì)的這一模塊需要投入更多的精力,這也是在后期的開發(fā)過(guò)程中需要重視的一個(gè)方面?,F(xiàn)在針對(duì)安全性方面的解決方案以及技術(shù)進(jìn)行研究,為解決安全性的問(wèn)題有以下兩點(diǎn):
- 為阻止來(lái)自Internet 上對(duì)數(shù)據(jù)的攻擊可以通過(guò)安裝防火墻來(lái)屏蔽數(shù)據(jù)庫(kù)端口來(lái)進(jìn)行防護(hù)。
- 通過(guò)輸入檢查以及輸出過(guò)濾從而防止用戶在發(fā)送請(qǐng)求中嵌入惡意HTML標(biāo)記來(lái)進(jìn)行的攻擊破壞,而且這類檢查必須在服務(wù)器端進(jìn)行,倘若校驗(yàn)代碼發(fā)現(xiàn)有可疑的請(qǐng)求信息,就將那些可能錯(cuò)誤代碼替換并將其過(guò)濾掉。
結(jié)論
經(jīng)過(guò)對(duì)本系統(tǒng)的設(shè)計(jì)以及開發(fā),我得出了以下幾點(diǎn)結(jié)論:
(1)掌握一項(xiàng)新的技能,最需要的是能夠親身親歷的實(shí)踐,敢于動(dòng)手操作才能真正學(xué)到實(shí)實(shí)在在的東西。
(2)在對(duì)一個(gè)系統(tǒng)進(jìn)行開發(fā)的過(guò)程中能夠不斷增長(zhǎng)經(jīng)驗(yàn),只有擁有足夠的經(jīng)驗(yàn)才會(huì)考慮周全,不斷的完善一個(gè)項(xiàng)目從中汲取經(jīng)驗(yàn)是一個(gè)你必須經(jīng)歷的一個(gè)過(guò)程。
(3)系統(tǒng)的界面直接影響了用戶的體驗(yàn)以及用戶對(duì)本系統(tǒng)的第一映像,好的系統(tǒng)界面應(yīng)該是美觀、有個(gè)性特色、有親和力,并且滿足用戶對(duì)功能的需求,才能夠吸引大量的用戶群。在設(shè)計(jì)開過(guò)程中由于經(jīng)驗(yàn)的缺乏,本項(xiàng)目的圖形界面相對(duì)比較簡(jiǎn)單,但功能齊全使用便捷,在未來(lái)的學(xué)習(xí)中我會(huì)加強(qiáng)這一短板。
(4)在該項(xiàng)目的開發(fā)過(guò)程中,我通過(guò)大量的查詢資料看過(guò)了大量類似該系統(tǒng)的項(xiàng)目,對(duì)那些優(yōu)秀的系統(tǒng)有許多的借鑒之處,以彌補(bǔ)自己經(jīng)驗(yàn)的不足,對(duì)完成整個(gè)項(xiàng)目的過(guò)程指明了方向,提供了巨大的幫助,在未來(lái)的學(xué)習(xí)中我會(huì)進(jìn)一步的學(xué)習(xí)。
(5)新的技術(shù)核心的理念在不斷的涌現(xiàn),要不斷的進(jìn)行學(xué)習(xí)才能跟上時(shí)代的腳步,要有強(qiáng)烈的獨(dú)立學(xué)習(xí)的愿望和行動(dòng),不斷的充實(shí)自己,使自己的專業(yè)能力進(jìn)一步的提高,專業(yè)知識(shí)更為豐富,并且不斷運(yùn)用到項(xiàng)目的開發(fā)過(guò)程中,才能開發(fā)出先進(jìn)的系統(tǒng)。
經(jīng)過(guò)實(shí)際操作和體驗(yàn),我制作的網(wǎng)絡(luò)商城系統(tǒng)有著非常好的未來(lái)前景,經(jīng)過(guò)的完整的測(cè)試之后。我所制作的該系統(tǒng)系統(tǒng)界面美觀、使用方便、功能齊全、操作簡(jiǎn)單、并且富有特色,可以算得上一個(gè)成熟的系統(tǒng)。
因?yàn)闀r(shí)間上的部分因素,能夠一步一步完成一個(gè)完整的系統(tǒng)設(shè)計(jì),對(duì)于一個(gè)我這樣的新手來(lái)說(shuō)一定還有許多模塊制作的不夠完美。數(shù)據(jù)庫(kù)也設(shè)計(jì)的相對(duì)簡(jiǎn)單。有許多JSP的技術(shù)運(yùn)用得不夠熟練,許多代碼設(shè)計(jì)的不夠完美簡(jiǎn)練。但通過(guò)本次項(xiàng)目的設(shè)計(jì),能夠?qū)⒃趯W(xué)校學(xué)習(xí)到的知識(shí)學(xué)以致用,并通過(guò)這樣一個(gè)實(shí)踐的機(jī)會(huì)將所有的知識(shí)交融在一起,對(duì)于我來(lái)說(shuō)是一項(xiàng)挑戰(zhàn),但更是一個(gè)提高自己的機(jī)會(huì),在這期間我實(shí)實(shí)在在的增長(zhǎng)了經(jīng)驗(yàn),學(xué)到了許多。當(dāng)然在這期間我也注意到了自己的許多短板,對(duì)JSP技術(shù)掌握得不夠全面,導(dǎo)致在整個(gè)系統(tǒng)設(shè)計(jì)制作的過(guò)程中磕磕絆絆,一度進(jìn)展緩慢,對(duì)界面的設(shè)計(jì)見解不夠深刻,雖然通過(guò)借鑒與學(xué)習(xí)順利完成但并不盡如人意,沒(méi)能達(dá)到理想中的界面效果,這都是我接下來(lái)需要學(xué)習(xí)和彌補(bǔ)的方面。在整個(gè)項(xiàng)目的開發(fā)過(guò)程中,受到了許多老師同學(xué)的幫助,他們的幫助是我克服了許多期間的困難,是我深刻的認(rèn)識(shí)到了團(tuán)隊(duì)的重要性。
同時(shí)由于經(jīng)驗(yàn)不足,寫代碼時(shí)出現(xiàn)了一些考慮不周的系統(tǒng)缺陷,寫代碼的時(shí)候會(huì)出現(xiàn)與設(shè)想不一致,比如說(shuō)代碼不規(guī)范導(dǎo)致接口與接口之間出現(xiàn)問(wèn)題,功能與客戶的要求不符合,這樣導(dǎo)致產(chǎn)品不能過(guò)關(guān),無(wú)法交付。所以產(chǎn)品在上線前必須反復(fù)測(cè)試,經(jīng)過(guò)反復(fù)測(cè)試,修改,再測(cè)試,再修改,產(chǎn)品才能夠不斷完善。在整個(gè)系統(tǒng)測(cè)試中,根據(jù)需求文檔和設(shè)計(jì)文檔,逐一對(duì)功能進(jìn)行檢測(cè)并寫好測(cè)試用例,有效避免殘片缺陷,因?yàn)楫a(chǎn)品出現(xiàn)缺陷不僅影響功能,而且可以導(dǎo)致數(shù)據(jù)的不準(zhǔn)確,導(dǎo)致產(chǎn)品質(zhì)量的降低,經(jīng)過(guò)測(cè)試,才能使得產(chǎn)品的穩(wěn)定性和成熟度得到極大的提升,產(chǎn)品質(zhì)量也才有保證。
隨著這篇論文的即將完成,也意味著我四年的大學(xué)生活也即將走向尾聲,這次的畢業(yè)設(shè)計(jì)以及這篇論文,是大學(xué)學(xué)業(yè)順利完成的一張通行證,也是我豐富的大學(xué)生活即將交出的最后的一張答卷,我相信著這是一張令人滿意的答卷,是我未來(lái)走向社會(huì)的一個(gè)非常好的開端。
參考文獻(xiàn)
[1]曹建.電子商務(wù)與網(wǎng)上經(jīng)營(yíng)[M].電子科技大學(xué)出版社,2003.
[2]耿祥義,張躍平.Java2實(shí)習(xí)教程[M] . 杭州:清華大學(xué)出版社, 2001.
[3]李剛.瘋狂java講義[M]. 杭州:電子工業(yè)出版社,
[4]王曰芬.電子商務(wù)網(wǎng)站設(shè)計(jì)與管理[M].杭州:杭州大學(xué)出版社,2002.
[5]陶國(guó)榮. jQuery權(quán)威指南[M]. 機(jī)械工業(yè)出版社, 2011.
[6]肖暉,張玉清. Nessus插件開發(fā)及實(shí)例[J]. 計(jì)算機(jī)工程, 2007,(02).
[7]劉曉華,張健,周慧貞.JSP應(yīng)用開發(fā)詳解[M].電子工業(yè)出版社,2007.
[8]Bob Reselman. Visual Basic 6.0 使用指南.電子工業(yè)出版社,2006.
[9]Craig Eddy. 中文Access 2000 24學(xué)時(shí)建設(shè).機(jī)械工業(yè)出版社,2001.
[10]耿祥義,張躍平. JSP實(shí)用教程[M].杭州:清華大學(xué)出版社,2007.
[11]林金霖.ASP實(shí)物經(jīng)典[M].杭州:中國(guó)鐵道出版社,1999,12.
[12]美Walter Savitch Absolute java[M],杭州:電子工業(yè)出版社,2005.
[13]美Abrahan Silberschat, Henry F. Korth,S. Sudarshah. 數(shù)據(jù)庫(kù)系統(tǒng)概念[M].機(jī)械工業(yè)出版社,2000.2
[14]Abraham Silberschatz.Database system Concepts (Fourth Edition) [M] .
Beijing:China Machine Press,2003.
致謝
本文是在的熱情關(guān)心和指導(dǎo)下完成的,兩位老師學(xué)識(shí)淵博、治學(xué)嚴(yán)謹(jǐn),待人平易近人,在兩位老師的悉心指導(dǎo)中,我不僅學(xué)到了扎實(shí)的專業(yè)知識(shí),也在怎樣處人處事等方面收益很多;同時(shí)他們對(duì)工作的積極熱情、認(rèn)真負(fù)責(zé)、有條不紊、實(shí)事求是的態(tài)度,給我留下了深刻的印象,使我受益非淺。在此我謹(jǐn)向兩位指導(dǎo)老師表示衷心的感謝和深深的敬意!
在論文完成過(guò)程中,本人還得到了授課的各位老師和同窗同學(xué)的熱心幫助,本人向他們表示深深的謝意!我也要感謝我的母校,是它提供了良好的學(xué)習(xí)環(huán)境和生活環(huán)境,讓我的大學(xué)生活豐富多姿,為我的人生留下精彩的一筆。
感謝等在畢業(yè)設(shè)計(jì)工作中給予的幫助。
感謝我的學(xué)友和朋友對(duì)我的關(guān)心和幫助。
最后向在百忙之中評(píng)審本文的各位專家、老師表示衷心的感謝!
附錄一:英文文獻(xiàn)原文
An Overview of Servlet and JSP Technology
Abstract: Servlet program running in the server-side, dynamically generated Web page with the traditional CGI and many other similar compared to CGI technology, Java Servlet with a more efficient, easier to use, more powerful and has better portability, more savings to invest .
Key words: JSP Technology, Servlet, HTTP server
1.1 A Servlet's Job
Servlets are Java programs that run on Web or application servers, acting as a middle layer between requests coming from Web browsers or other HTTP clients and databases or applications on the HTTP server. Their job is to perform the
following tasks, as illustrated in Figure 1-1.
Figure 1-1
1.Read the explicit data sent by the client.
The end user normally enters this data in an HTML form on a Web page. However, the data could also come from an applet or a custom HTTP client program.
2.Read the implicit HTTP request data sent by the browser.
Figure 1-1 shows a single arrow going from the client to the Web server (the layer where servlets and JSP execute), but there are really two varieties of data: the explicit data that the end user enters in a form and the behind-the-scenes HTTP information. Both varieties are critical. The HTTP information includes cookies, information about media types and compression schemes the browser understands, and so on.
3.Generate the results.
This process may require talking to a database, executing an RMI or EJB call, invoking a Web service, or computing the response directly. Your real data may be in a relational database. Fine. But your database probably doesn't speak HTTP or return results in HTML, so the Web browser can't talk directly to the database. Even if it could, for security reasons, you probably would not want it to. The same argument applies to most other applications.You need the Web middle layer to extract the results
inside a document.
4.Send the explicit data (i.e., the document) to the client.
This document can be sent in a variety of formats, including text (HTML or XML), binary (GIF images), or even a compressed format like gzip that is layered on top of some other underlying format. But, HTML is by far the most common format, so an important servlet/JSP task is to wrap the results inside of HTML.
5.Send the implicit HTTP response data.
Figure 1-1 shows a single arrow going from the Web middle layer (the servlet or JSP page) to the client. But, there are really two varieties of data sent: the document itself and the behind-the-scenes HTTP information. Again, both varieties are critical to effective development. Sending HTTP response data involves telling the browser or other client what type of document is being returned (e.g., HTML), setting cookies and caching parameters, and other such tasks.
1.2 Why Build Web Pages Dynamically?
many client requests can be satisfied by prebuilt documents, and the server would handle these requests without invoking servlets. In many cases, however, a static result is not sufficient, and a page needs to be generated for each request. There are a number of reasons why Web pages need to be built on-the-fly:
1. The Web page is based on data sent by the client.
For instance, the results page from search engines and order-confirmation pages at online stores are specific to particular user requests. You don't know what to display until you read the data that the user submits. Just remember that the user submits two kinds of data: explicit (i.e., HTML form data) and implicit (i.e., HTTP request headers). Either kind of input can be used to build the output page. In particular, it is quite common to build a user-specific page based on a cookie value.
2.The Web page is derived from data that changes frequently.
If the page changes for every request, then you certainly need to build the response at request time. If it changes only periodically, however, you could do it two ways: you could periodically build a new Web page on the server (independently of client requests), or you could wait and only build the page when the user requests it. The right approach depends on the situation, but sometimes it is more convenient to do the latter: wait for the user request. For example, a weather report or news headlines site might build the pages dynamically, perhaps returning a previously built page if that page is still up to date.
3.The Web page uses information from corporate databases or other server-side sources.
If the information is in a database, you need server-side processing even if the client is using dynamic Web content such as an applet. Imagine using an applet by itself for a search engine site:
"Downloading 50 terabyte applet, please wait!" Obviously, that is silly; you need to talk to the database. Going from the client to the Web tier to the database (a three-tier approach) instead of from an applet directly to a database (a two-tier approach) provides increased flexibility and security with little or no performance penalty. After all, the database call is usually the rate-limiting step, so going through the Web server does not slow things down. In fact, a three-tier approach is often faster because the middle tier can perform caching and connection pooling.
In principle, servlets are not restricted to Web or application servers that handle HTTP requests but can be used for other types of servers as well. For example, servlets could be embedded in FTP or mail servers to extend their functionality. And, a servlet API for SIP (Session Initiation Protocol) servers was recently standardized (see
http://jcp.org/en/jsr/detail?id=116). In practice, however, this use of servlets has not caught on, and we'll only be discussing HTTP servlets.
1.3 The Advantages of Servlets Over "Traditional" CGI
Java servlets are more efficient, easier to use, more powerful, more portable, safer, and cheaper than traditional CGI and many alternative CGI-like technologies.
1.Efficient
With traditional CGI, a new process is started for each HTTP request. If the CGI program itself is relatively short, the overhead of starting the process can dominate the execution time. With servlets, the Java virtual machine stays running and handles each request with a lightweight Java thread, not a heavyweight operating system process. Similarly, in traditional CGI, if there are N requests to the same CGI program, the code for the CGI program is loaded into memory N times. With servlets, however, there would be N threads, but only a single copy of the servlet class would be loaded. This approach reduces server memory requirements and saves time by instantiating fewer objects. Finally, when a CGI program finishes handling a request, the program terminates. This approach makes it difficult to cache computations, keep database connections open, and perform other optimizations that rely on persistent data. Servlets, however, remain in memory even after they complete a response, so it is straightforward to store arbitrarily complex data between client requests.
2.Convenient
Servlets have an extensive infrastructure for automatically parsing and decoding HTML form data, reading and setting HTTP headers, handling cookies, tracking sessions, and many other such high-level utilities. In CGI, you have to do much of this yourself. Besides, if you already know the Java programming language, why learn Perl too? You're already convinced that Java technology makes for more reliable and reusable code than does Visual Basic, VBScript, or C++. Why go back to those languages for server-side programming?
3.Powerful
Servlets support several capabilities that are difficult or impossible to accomplish with regular CGI. Servlets can talk directly to the Web server, whereas regular CGI programs cannot, at least not without using a server-specific API. Communicating with the Web server makes it easier to translate relative URLs into concrete path names, for instance. Multiple servlets can also share data, making it easy to implement database connection pooling and similar resource-sharing optimizations. Servlets can also maintain information from request to request, simplifying techniques like session tracking and caching of previous computations.
4.Portable
Servlets are written in the Java programming language and follow a standard API. Servlets are supported directly or by a plugin on virtually every major Web server. Consequently, servlets written for, say, Macromedia JRun can run virtually unchanged on Apache Tomcat, Microsoft Internet Information Server (with a separate plugin), IBM WebSphere, iPlanet Enterprise Server, Oracle9i AS, or StarNine WebStar. They are part of the Java 2 Platform, Enterprise Edition (J2EE; see
http://java.sun.com/j2ee/), so industry support for servlets is becoming even more pervasive.
5.Inexpensive
A number of free or very inexpensive Web servers are good for development use or deployment of low- or medium-volume Web sites. Thus, with servlets and JSP you can start with a free or inexpensive server and migrate to more expensive servers with high-performance capabilities or advanced administration utilities only after your project meets initial success. This is in contrast to many of the other CGI alternatives, which require a significant initial investment for he purchase of a proprietary package.
Price and portability are somewhat connected. For example, Marty tries to keep track of the countries of readers that send him questions by email. India was near the top of the list, probably #2 behind the U.S. Marty also taught one of his JSP and servlet training courses (see
http://courses.coreservlets.com/) in Manila, and there was great interest in servlet and JSP technology there.
Now, why are India and the Philippines both so interested? We surmise that the answer is twofold. First, both countries have large pools of well-educated software developers. Second, both countries have (or had, at that time) highly unfavorable currency exchange rates against the U.S. dollar. So, buying a special-purpose Web server from a U.S. company consumed a large part of early project funds.
But, with servlets and JSP, they could start with a free server: Apache Tomcat (either standalone, embedded in the regular Apache Web server, or embedded in Microsoft IIS). Once the project starts to become successful, they could move to a server like Caucho Resin that had higher performance and easier administration but that is not free. But none of their servlets or JSP pages have to be rewritten. If their project becomes even larger, they might want to move to a distributed (clustered) environment. No problem: they could move to Macromedia JRun Professional, which supports distributed applications (Web farms). Again, none of their servlets or JSP pages have to be rewritten. If the project becomes quite large and complex, they might want to use Enterprise JavaBeans (EJB) to encapsulate their business logic. So, they might switch to BEA WebLogic or Oracle9i AS. Again, none of their servlets or JSP pages have to be rewritten. Finally, if their project becomes even bigger, they might move it off of their Linux box and onto an IBM mainframe running IBM WebSphere. But once again, none of their servlets or JSP pages have to be rewritten.
6.Secure
One of the main sources of vulnerabilities in traditional CGI stems from the fact that the programs are often executed by general-purpose operating system shells. So, the CGI programmer must be careful to filter out characters such as backquotes and semicolons that are treated specially by the shell. Implementing this precaution is harder than one might think, and weaknesses stemming from this problem are constantly being uncovered in widely used CGI libraries.
A second source of problems is the fact that some CGI programs are processed by languages that do not automatically check array or string bounds. For example, in C and C++ it is perfectly legal to allocate a 100-element array and then write into the 999th "element," which is really some random part of program memory. So, programmers who forget to perform this check open up their system to deliberate or accidental buffer overflow attacks.
Servlets suffer from neither of these problems. Even if a servlet executes a system call (e.g., with Runtime.exec or JNI) to invoke a program on the local operating system, it does not use a shell to do so. And, of course, array bounds checking and other memory protection features are a central part of the Java programming language.
7.Mainstream
There are a lot of good technologies out there. But if vendors don't support them and developers don't know how to use them, what good are they? Servlet and JSP technology is supported by servers from Apache, Oracle, IBM, Sybase, BEA, Macromedia, Caucho, Sun/iPlanet, New Atlanta, ATG, Fujitsu, Lutris, Silverstream, the World Wide Web Consortium (W3C), and many others. Several low-cost plugins add support to Microsoft IIS and Zeus as well. They run on Windows, Unix/Linux, MacOS, VMS, and IBM mainframe operating systems. They are the single most popular application of the Java programming language. They are arguably the most popular choice for developing medium to large Web applications. They are used by the airline industry (most United Airlines and Delta Airlines Web sites), e-commerce (
http://ofoto.com), online banking (First USA Bank, Banco Popular de Puerto Rico), Web search engines/portals (
http://excite.com), large financial sites (American Century Investments), and hundreds of other sites that you visit every day.
Of course, popularity alone is no proof of good technology. Numerous counter-examples abound. But our point is that you are not experimenting with a new and unproven technology when you work with server-side Java.
附錄二:中文譯文
1.1Servlet的功能
Servlets是運(yùn)行在Web或應(yīng)用服務(wù)器上的Java程序,它是一個(gè)中間層,負(fù)責(zé)連接來(lái)自Web瀏覽器或其他HTTP客戶程序的請(qǐng)求和HTTP服務(wù)器上的數(shù)據(jù)庫(kù)或應(yīng)用程序。Servlet的工作是執(zhí)行西門的任務(wù),如圖1.1所示 。
圖1.1Web中間件的作用
(1) 讀取客戶發(fā)送的顯式數(shù)據(jù)。
最終用戶一般在頁(yè)面的HTML表單中輸入這些數(shù)據(jù)。然而,數(shù)據(jù)還有可能來(lái)自applet或定制的HTTP客戶程序。
(2) 讀取由瀏覽器發(fā)送的隱式請(qǐng)求數(shù)據(jù)。
圖1.1中顯示了一條從客戶端到Web服務(wù)器的單箭頭,但實(shí)際上從客戶端傳送到Web服務(wù)器的數(shù)據(jù)有兩種,它們分別為用戶在表單中輸入的顯式數(shù)據(jù),以及后臺(tái)的HTTP信息。兩種數(shù)據(jù)都很重要。HTTP信息包括cookie、瀏覽器所能識(shí)別的媒體類型和壓縮模式等。
圖1.1
(3) 生成結(jié)果。
這個(gè)過(guò)程可能需要訪問(wèn)數(shù)據(jù)庫(kù)、執(zhí)行RMI或EJB調(diào)用、調(diào)用Web服務(wù),或者直接計(jì)算得出對(duì)應(yīng)的響應(yīng)。實(shí)際的數(shù)據(jù)可能存儲(chǔ)在關(guān)系型數(shù)據(jù)庫(kù)中。該數(shù)據(jù)庫(kù)可能不理解HTTP,或者不能返回HTML形式的結(jié)果,所有Web瀏覽器不能直接與數(shù)據(jù)庫(kù)進(jìn)行會(huì)話。即使它能夠做到這一點(diǎn),為了安全上的考慮,我們也不希望讓它這么做。對(duì)應(yīng)大多數(shù)其他應(yīng)用
程序,也存在類似的問(wèn)題。因此,我們需要Web中間層從HTTP流中提取輸入數(shù)據(jù),與應(yīng)用程序會(huì)話,并將結(jié)果嵌入到文檔中。
(4) 向客戶發(fā)送顯式數(shù)據(jù)(即文檔)。
這個(gè)文檔可以用各種格式發(fā)送,包括文本(HTML或XML),二進(jìn)制(GIF圖),甚至可以式建立在其他底層格式之上的壓縮格式,如gzip。但是,到目前為止,HTML式最常用的格式,故而servlet和JSP的重要任務(wù)之一就式將結(jié)果包裝到HTML中。
(5) 發(fā)送隱式的HTTP響應(yīng)數(shù)據(jù)。
圖1.1中顯示了一條從Web中間層到客戶端的單箭頭。但是,實(shí)際發(fā)送的數(shù)據(jù)有兩種:文檔本身,以及后臺(tái)的HTTP信息。同樣,兩種數(shù)據(jù)對(duì)開發(fā)來(lái)說(shuō)都式至關(guān)重要的。HTTP響應(yīng)數(shù)據(jù)的發(fā)送過(guò)程涉及告知瀏覽器或其他客戶程序所返回文檔的類型(如HTML),設(shè)置cookie和緩存參數(shù),以及其他類似的任務(wù)。
1.2動(dòng)態(tài)構(gòu)建網(wǎng)頁(yè)的原因
預(yù)先建立的文檔可以滿足客戶的許多請(qǐng)求,服務(wù)器無(wú)需調(diào)用servlet就可以處理這些請(qǐng)求。然而,許多情況下靜態(tài)的結(jié)果不能滿足要求,我們需要針對(duì)每個(gè)請(qǐng)求生成一個(gè)頁(yè)面。實(shí)時(shí)構(gòu)建頁(yè)面的理由有很多種:
1、網(wǎng)頁(yè)基于客戶發(fā)送的數(shù)據(jù)。
例如,搜索引擎生成的頁(yè)面,以及在線商店的訂單確認(rèn)頁(yè)面,都要針對(duì)特定的用戶請(qǐng)求而產(chǎn)生。在沒(méi)有讀取到用戶提交的數(shù)據(jù)之前,我們不知道應(yīng)該顯示什么。要記住,用戶提交兩種類型的數(shù)據(jù):顯示(即HTML表單的數(shù)據(jù))和隱式(即HTTP請(qǐng)求的報(bào)頭)。兩種輸入都可用來(lái)構(gòu)建輸出頁(yè)面?;赾ookie值針對(duì)具體用戶構(gòu)建頁(yè)面的情況尤其普遍。
2、頁(yè)面由頻繁改變的數(shù)據(jù)導(dǎo)出。
如果頁(yè)面需要根據(jù)每個(gè)具體的請(qǐng)求做出相應(yīng)的改變,當(dāng)然需要在請(qǐng)求發(fā)生時(shí)構(gòu)建響應(yīng)。但是,如果頁(yè)面周期性地改變,我們可以用兩種方式來(lái)處理它:周期性地在服務(wù)器上構(gòu)建新的頁(yè)面(和客戶請(qǐng)求無(wú)關(guān)),或者僅僅在用戶請(qǐng)求該頁(yè)面時(shí)再構(gòu)建。具體應(yīng)該采用哪種方式要根據(jù)具體情況而定,但后一種方式常常更為方便,因?yàn)樗恍韬?jiǎn)單地等待用戶的請(qǐng)求。例如,天氣預(yù)報(bào)或新聞網(wǎng)站可能會(huì)動(dòng)態(tài)地構(gòu)建頁(yè)面,也有可能會(huì)返回之前構(gòu)建的頁(yè)面(如果它還是最新的話)。
3、頁(yè)面中使用了來(lái)自公司數(shù)據(jù)庫(kù)或其他數(shù)據(jù)庫(kù)斷數(shù)據(jù)源的信息。
如果數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中,那么,即使客戶端使用動(dòng)態(tài)Web內(nèi)容,比如applet,我們依舊需要執(zhí)行服務(wù)器端處理。想象以下,如果一個(gè)搜索引擎網(wǎng)站完全使用applet,那么用戶將會(huì)看到:“正在下載50TB的applet,請(qǐng)等待!”。顯然,這樣很愚蠢;這種情況下,我們需要與數(shù)據(jù)庫(kù)進(jìn)行會(huì)話。從客戶端到Web層再到數(shù)據(jù)庫(kù)(三層結(jié)構(gòu)),要比從applet直接到數(shù)據(jù)庫(kù)(二層結(jié)構(gòu))更靈活,也更安全,而性能上的損失很少甚至沒(méi)有。畢竟數(shù)據(jù)庫(kù)調(diào)用通常是對(duì)速度影響最大的步驟,因而,經(jīng)過(guò)中間層可以執(zhí)行高速緩存和連接共享。
理論上講,servlet并非只用于處理HTTP請(qǐng)求的Web服務(wù)器或應(yīng)用服務(wù)器,它同樣可以用于其他類型的服務(wù)器。例如,servlet能夠嵌入到FTP或郵件服務(wù)器中,擴(kuò)展他們的功能。而且,用于會(huì)話啟動(dòng)協(xié)議服務(wù)器的servlet API最近已經(jīng)被標(biāo)準(zhǔn)化(參見
http://jcp.org/en/jsr/detail?id=116)。但在實(shí)踐中,servlet的這種用法尚不流行,在此,我們只論述HTTP Servlet。
1.3 Servlet相對(duì)于“傳統(tǒng)”CGI的優(yōu)點(diǎn)
和傳統(tǒng)CGI及許多類CGI技術(shù)相比,Java servlet效率更高、更易用、更強(qiáng)大、更容易移植、更安全、也更廉價(jià)。
1、效率
應(yīng)用傳統(tǒng)的CGI,針對(duì)每個(gè)HTTP請(qǐng)求都用啟動(dòng)一個(gè)新的進(jìn)程。如果CGI程序自身相對(duì)比較簡(jiǎn)短,那么啟動(dòng)進(jìn)程的開銷會(huì)占用大部分執(zhí)行時(shí)間。而使用servlet,Java虛擬機(jī)會(huì)一直運(yùn)行,并用輕量級(jí)的Java線程處理每個(gè)請(qǐng)求,而非重量級(jí)的操作系統(tǒng)進(jìn)程。類似地,應(yīng)用傳統(tǒng)的CGI技術(shù),如果存在對(duì)同一CGI程序的N個(gè)請(qǐng)求,那么CGI程序的代碼會(huì)載入內(nèi)存N次。同樣的情況,如果使用servlet則啟動(dòng)N個(gè)線程,單僅僅載入servlet類的單一副本。這種方式減少了服務(wù)器的內(nèi)存需求,通過(guò)實(shí)例化更少的對(duì)象從而節(jié)省了時(shí)間。最后,當(dāng)CGI程序結(jié)束對(duì)請(qǐng)求的處理之后,程序結(jié)束。這種方式難以緩存計(jì)算結(jié)果,保持?jǐn)?shù)據(jù)庫(kù)連接打開,或是執(zhí)行依靠持續(xù)性數(shù)據(jù)的其他優(yōu)化。然而,servlet會(huì)一直停留在內(nèi)存中(即使請(qǐng)求處理完畢),因而可以直接存儲(chǔ)客戶請(qǐng)求之間的任意復(fù)雜數(shù)據(jù)。
2、便利
Servlet提供大量的基礎(chǔ)構(gòu)造,可以自動(dòng)分析和解碼HTML的表單數(shù)據(jù),讀取和設(shè)置
HTTP報(bào)頭,處理cookie,跟蹤會(huì)話,以及其他次類高級(jí)功能。而在CGI中,大部分工作都需要我們資金完成。另外,如果您已經(jīng)了解了Java編程語(yǔ)言,為什么還有學(xué)校Perl呢?您已經(jīng)承認(rèn)應(yīng)用Java技術(shù)編寫的代碼要比Visual Basic,VBScript或C++編寫的代碼更可靠,且更易重用,為什么還有倒退回去選擇那些語(yǔ)言來(lái)開發(fā)服務(wù)器端的程序呢?
3、強(qiáng)大
Servlet支持常規(guī)CGI難以實(shí)現(xiàn)或根本不能實(shí)現(xiàn)的幾項(xiàng)功能。Servlet能夠直接于Web服務(wù)器對(duì)話,而常規(guī)的CGI程序做不到這一點(diǎn),至少在不使用服務(wù)器專有API的情況下是這樣。例如,與Web服務(wù)器的通信使得講相對(duì)URL轉(zhuǎn)換成具體的路徑名變得更為容易。多個(gè)servlet還可以共享數(shù)據(jù),從而易于實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接共享和類似的資源共享優(yōu)化。Servlet還能維護(hù)請(qǐng)求之間的信息,使得諸如會(huì)話跟蹤和計(jì)算結(jié)果緩存等技術(shù)變得更為簡(jiǎn)單。
4、可移植性
Servlet使用Java編程語(yǔ)言,并且遵循標(biāo)準(zhǔn)的API。所有主要的Web服務(wù)器。實(shí)際上都直接或通過(guò)插件支持servlet。因此。為Macromedia JRun編寫的servlet,可以不經(jīng)過(guò)任何修改地在Apache Tomcat,Microsoft Internet Information Server,IBM WebSphere 。iPlanet Enterprise Server。Oracle9i AS 或者StrNine WebStar上運(yùn)行。他們是java2平臺(tái)企業(yè)版的一部分,所以對(duì)servlet的支持越來(lái)越普遍。
5、廉價(jià)
對(duì)于開發(fā)用的網(wǎng)站、低容量或中等容量網(wǎng)站的部署,有大量免費(fèi)或極為廉價(jià)的Web服務(wù)器可供選擇。因此,通過(guò)使用servlet和jsp,我們可以從免費(fèi)或廉價(jià)的服務(wù)器開始,在項(xiàng)目獲得初步成功后,在移植到更高性能或高級(jí)管理工具的昂貴的服務(wù)器上。這與其他CGI方案形成鮮明的對(duì)比,這些CGI方案在初期都需要為購(gòu)買專利軟件包投入大量的資金。
價(jià)格和可移植性在某種程度上是相互關(guān)聯(lián)的。例如,Marty記錄了所有通過(guò)電子郵件向他發(fā)送問(wèn)題的讀者的所在國(guó)。印度接近列表的頂端,可能僅次于美國(guó)。Marty曾在馬尼拉講授過(guò)jsp和servlet培訓(xùn)課程,那兒對(duì)servlet和jsp技術(shù)抱很大的興趣。
那么,為什么印度和菲律賓都對(duì)這項(xiàng)技術(shù)著呢感興趣呢?我們推測(cè)答案可能分兩部分。首先,這兩個(gè)國(guó)家都擁有大量訓(xùn)練有素的軟件開發(fā)人員。其次,這兩個(gè)國(guó)家的貨幣
對(duì)美元的匯率都極為不利。因此,從美國(guó)公司那里購(gòu)買專用Web服務(wù)器會(huì)消耗掉項(xiàng)目的大部分前期資金。
但是,使用servlet 和JSP,他們能夠從免費(fèi)的服務(wù)器開始:Apache Tomcat。項(xiàng)目取得成功之后,他們可以轉(zhuǎn)移到性能更高、管理更容易,但需要付費(fèi)的服務(wù)器。他們的servlet和jsp不需要重寫編寫。如果他們的項(xiàng)目變得更龐大,他們或許希望轉(zhuǎn)移到分布式環(huán)境。沒(méi)有問(wèn)題:他們可以轉(zhuǎn)而使用Macromedia JRun Professional,該服務(wù)器支持分布式應(yīng)用。同樣,他們的servlet和jsp沒(méi)有任何部分需要重寫。如果項(xiàng)目變得極為龐大,錯(cuò)綜復(fù)雜,他們或許希望使用Enterprise JavaBeans來(lái)封裝他們的商業(yè)邏輯。因此,他們可以切換到BEA WebLogic或Oracle9i AS。同樣,不需要對(duì)servlet和jsp做出更改。最后,如果他們的項(xiàng)目變得更龐大,他們或許將他從Linux轉(zhuǎn)移到運(yùn)行IBM WebSphere的IBM大型機(jī)上。他們還是不需要做出任何更改。
6、安全
傳統(tǒng)CGI程序中主要的漏洞來(lái)源之一就是,CGI程序常常由通過(guò)的操作系統(tǒng)外殼來(lái)執(zhí)行。因此,CGI程序必須仔細(xì)地過(guò)濾掉那些可能被外殼特殊處理的字符,如反引導(dǎo)和分號(hào)。實(shí)現(xiàn)這項(xiàng)預(yù)防措施的難度可能超出我們的想象,在廣泛應(yīng)用的CGI庫(kù)中,不斷發(fā)現(xiàn)由這類問(wèn)題引發(fā)的弱點(diǎn)。
問(wèn)題的第二個(gè)來(lái)源是,一些CGI程序用不自動(dòng)檢查數(shù)組和字符串邊界的語(yǔ)言編寫而成。例如,在C和C++中,可以分配一個(gè)100個(gè)元素的數(shù)組,然后向第999個(gè)“元素“寫入數(shù)據(jù)——實(shí)際上是程序內(nèi)存的隨機(jī)部分,這完全合法。因而,如果程序員忘記執(zhí)行這項(xiàng)檢查,就會(huì)將系統(tǒng)暴露在蓄意或偶然的緩沖區(qū)溢出攻擊之下。
Servlet不存在這些問(wèn)題。即使servlet執(zhí)行系統(tǒng)調(diào)用激活本地操作系統(tǒng)上的程序,它也不會(huì)用到外殼來(lái)完成這項(xiàng)任務(wù)。當(dāng)然,數(shù)組邊界的檢查以及其他內(nèi)存包含特性是java編程語(yǔ)言的核心部分。
7、主流
雖然存在許多很好的技術(shù),但是,如果提供商助支持他們,或開發(fā)人員不知道如何使用這些技術(shù),那么它們的優(yōu)點(diǎn)又如何體現(xiàn)呢?servlet和jsp技術(shù)得到服務(wù)器提供商的廣泛支持,包括Apache,Oracle,IBM,Sybase,BEA,Maromedia,Causho,Sun/iPlanet,New Atlanta,ATG,F(xiàn)ujitsu,Lutris,Silverstream,World Wide Web Consortinrm ,以及其他服務(wù)器。存在幾種低廉的插件,通過(guò)應(yīng)用這些插件,Microsoft IIS和Zeus 5也同樣支持servlet和jsp技術(shù),它們運(yùn)行在Windows,Unix/Linus,MacOS,VMS,和IBM大型機(jī)操作系統(tǒng)之上。它們用在航空業(yè)、電子商務(wù)、在線銀行、web搜索引擎、門戶、大型金融網(wǎng)站、以及成百上千您日常光顧的其他網(wǎng)站。
當(dāng)然,僅僅是流行并不能證明技術(shù)的優(yōu)越性。很多泛美的例子。但我們的立場(chǎng)是:服務(wù)器端Java本非一項(xiàng)新的、為經(jīng)證實(shí)的技術(shù)。