




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
./摘要JAVA語言是目前Internet上大型的WEB應(yīng)用程序開發(fā)時使用得最熱門的編程語言,本文描述了JAVA和JSP技術(shù)的特點(diǎn)以及在互聯(lián)網(wǎng)上的使用情況,介紹這兩種技術(shù)的重要編程方法和兩者之關(guān)的聯(lián)系,并完成一個基于這種技術(shù)的網(wǎng)上書店系統(tǒng)。[關(guān)鍵字]JAVA,JavaBeans,Servlet,JSP,網(wǎng)絡(luò)編程,電子商務(wù),網(wǎng)上書店目錄前言3第1章概述41.1JSP簡介和運(yùn)行原理41.2開發(fā)背景5第2章需求分析62.1系統(tǒng)組成:62.2系統(tǒng)要求配置6第3章系統(tǒng)設(shè)計73.1數(shù)據(jù)庫設(shè)計73.1.1數(shù)據(jù)庫需求分析73.1.2數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計10第4章詳細(xì)設(shè)計124.1系統(tǒng)概述124.1.1用戶界面部分124.1.2管理界面部分124.2詳細(xì)代碼及說明124.2.1實(shí)現(xiàn)bookshop.run包124.2.2客戶界面設(shè)計與實(shí)現(xiàn)20第5章系統(tǒng)測試275.1數(shù)據(jù)庫連接275.2檢測運(yùn)行速度27第6章總結(jié)30參考文獻(xiàn)31致32前言隨著計算機(jī)、網(wǎng)絡(luò)、通信技術(shù)的發(fā)展和日益融合,以及Internet的普及應(yīng)用,包括電子商務(wù)〔EC、視頻會議、網(wǎng)上書店等在的一些應(yīng)用已開始引起社會的關(guān)注,并逐步走進(jìn)人們的日常生活。JSP是Sun公司推出的一種開發(fā)技術(shù),Sun公司借助自己在Java上的不凡造詣,又把人們引進(jìn)JSP時代,JSP即JavaServerPage,它可以在Servlet和JavaBean的支持下,完成功能強(qiáng)大的Web應(yīng)用程序。所以,在我的畢業(yè)設(shè)計中,我采用了JSP作為開發(fā)工具,構(gòu)建了一個能實(shí)現(xiàn)簡單的電子商務(wù)的小型動態(tài)商務(wù)——網(wǎng)上書店銷售系統(tǒng)。通過這次的畢業(yè)設(shè)計,我了解了目前流行的動態(tài)商務(wù)的構(gòu)成和運(yùn)作原理,掌握了用JSP構(gòu)建動態(tài)的相關(guān)知識和技術(shù)原理,鍛煉了自己的動手實(shí)踐能力。在這次畢業(yè)設(shè)計過程中,我得到了指導(dǎo)老師杜雪平老師的悉心指導(dǎo)。在此,我對你表示衷心的感!第1章概述1-1JAVA語言簡介Java是一種簡單易用、完全面向?qū)ο?、具有平臺無關(guān)性且安全可靠的主要面向Internet的開發(fā)工具。自從1995年正式問世以來,Java的快速發(fā)展已經(jīng)讓整個Web世界發(fā)生了翻天覆地的變化。在早期,Java比較多的用在瀏覽器上,插入到網(wǎng)頁中<即是JavaApplet程序>,成為最靈活、最強(qiáng)大的網(wǎng)頁多媒體的載體,但由于Java虛擬機(jī)相對于個人電腦而言,有占用資源大,安全性相對較差等缺點(diǎn),Applet逐漸的被后起之秀Flash所替代,但隨著JavaServlet的推出,Java在電子商務(wù)方面開始嶄露頭角,最新的JSP<JavaServerPage>技術(shù)的推出,更是讓Java成為基于Web的應(yīng)用程序的首選開發(fā)工具,目前的Java技術(shù)已成為所有大型電子商務(wù)項目的必然選擇。1-2開發(fā)背景我國的網(wǎng)上書店雖然從數(shù)量上取得了一定的進(jìn)展,但從售量而言卻不盡人意,目前,國尚無一家在網(wǎng)上零售領(lǐng)域形成絕對領(lǐng)先優(yōu)勢的網(wǎng)上書店。發(fā)展比較好的寥寥無幾,比較成功的有當(dāng)當(dāng)書店〔.dangdang.。伴隨著電子商務(wù)技術(shù)的不斷成熟,電子商務(wù)的功能也越來越強(qiáng)大,注冊用戶可以在網(wǎng)上搜索購買到自己想要的各種商品,初步讓人們體會到了足不出戶,便可隨意購物的快感。我的畢業(yè)設(shè)計也就正是一個電子商務(wù)系統(tǒng)的開發(fā)網(wǎng)上商品銷售系統(tǒng)。JAVA技術(shù)簡介2-1在Windows平臺下配置JSP運(yùn)行環(huán)境為了使系統(tǒng)能夠正常運(yùn)行JSP和相關(guān)程序,必須先配置好能夠使用JSP的WEB服務(wù)器。各種能使用Servlet技術(shù)的WEB服務(wù)器中,運(yùn)用得最多的是Tomcat服務(wù)器,如果僅是為了用于測試程序,Tomcat的配置則顯得太復(fù)雜了,本文推薦使用Resin服務(wù)器,Resin據(jù)稱是最快的Servlet運(yùn)行平臺,不過限于單站點(diǎn),對傳統(tǒng)的一些網(wǎng)關(guān)支持不是很好,因此對于商業(yè)而言,不是最好的選擇,不過如果僅是為了測試Servlet,這個Resin的安裝可謂有點(diǎn)傻瓜化。Resin比較新的版本是3.x,但目前實(shí)際用的2.x版本的比較多,Resin可到官方站點(diǎn)下載:.caucho./download/本文使用的是版本,文件位置:如果你的電腦上已裝好JDK,直接把下載的resin包解壓到D:盤根目錄解壓后即為服務(wù)器的目錄,把本文的源程序jspweb文件夾也放在D:盤根目錄,即是D:\jspweb為根目錄,打開D:\resin-2.1.13\conf\resin.conf〔是一份XML形式的配置文件,找到doc這里改為D:\jspweb,然后運(yùn)行D:\resin-2.1.13\bin\httpd.exe,在瀏覽器輸入localhost:8080/j1.jsp,看到了"我是JSP!"的字樣了吧,你的Servlet服務(wù)器就這樣配置成功了,為了能編譯Servlet類,還需要做的事情是:把D:\resin-2.1.13\lib加入到windows的CLASSPATH的環(huán)境變量中。2-2JSP、ASP和PHP技術(shù)之比較JSP與ASP、PHP技術(shù)都是目前網(wǎng)上最流行的在服務(wù)器端運(yùn)行的腳本技術(shù),JSP能用JavaBeans技術(shù)封裝,達(dá)到商業(yè)邏輯的目的,ASP對應(yīng)之的是COM組件,因此兩者都能用于開發(fā)商業(yè)邏輯,PHP則更像于一個純腳本,僅適合于普通的開發(fā),而不能用作商業(yè)邏輯而被冠以"PersonHomePage"的名稱,這是最貼切不過的了。JSP與ASP相比,JSP具有跨平臺、安全、強(qiáng)大的可伸縮性的特點(diǎn),而果硬要挑一些毛病,JSP相對別的腳本更加難掌握,因?yàn)榫↗SP必須精通Java語言,對于中小型項目,我們要考慮開發(fā)人員、開發(fā)速度、開發(fā)成本等問題,在這方面ASP和PHP會比JSP更容易勝出。值得一提的是,ASP的最新版本ASP.NET與原來的ASP性質(zhì)完全是不同的,它和JSP一樣,都是一種編譯性的腳本,本身完全與強(qiáng)大的Net框架結(jié)合,完美的支持Xml的各種應(yīng)用,與昔日的ASP不可同日而語,但是無論是ASP還是ASP.NET,它都擺脫不了Windows平臺本身,這是ASP一個致命的缺點(diǎn)。2-3JSP語法基礎(chǔ)2-3-1嵌入了JAVA語言的HTML文件把下面網(wǎng)頁保存為:j1.jsp這就成了一個最簡單的JSP頁面了,其中是聲明輸出的文件類型為text/html,字符編碼是gb2312,在JSP中里的容表示的是JSP編譯時的一些選項或向客戶端發(fā)送的頭信息的JSP指令,里的容就是Java語言,如果有必要,更改適當(dāng)設(shè)定,還可以使用javascript作為腳本,不過實(shí)際應(yīng)用中很少有人這樣做。2-3-2request、out&response--與訪問者的交互接收客戶端的請求和向客戶端返回信息是動態(tài)網(wǎng)頁最常做的事情,在JSP中,主要通過request、response、out三大對象實(shí)現(xiàn)這些功能。request對象的作用是接收用戶通過URL或通過表單向發(fā)服務(wù)器發(fā)送請求信息和與用戶計算機(jī)相關(guān)的一些信息。response對象用于網(wǎng)頁傳回用戶端的回應(yīng)。out用于傳送回應(yīng)的輸出,即向客戶端返回信息。把上面的例子稍作修改:保存為j2.jsp在瀏覽器上輸入:"localhost:8080/j1.jps?msg=我是JSP"看一下效果,這和j1.jsp的結(jié)果一樣吧?但它輸出的是客戶端返回的信息,這在意義上完全不同于前者。2-3-3session--保持訪問者的會話狀態(tài)會話狀態(tài)維持是Web應(yīng)用開發(fā)者必須面對的問題。有多種方法可以用來解決這個問題,如使用Cookies、隱藏的表單輸入域,或直接將狀態(tài)信息附加到URL中。JavaServlet提供了一個在多個請求之間持續(xù)有效的會話對象,該對象允許用戶存儲和提取會話狀態(tài)信息,JSP也置了這個對象。Session最基本的用法是:創(chuàng)建一個會話session.putValue<"名稱","值">;獲得一個會話的值session.getValue<"名稱">;2-3-4JSP其它基本置對象JSP有九大置對象,除了上述四種以外,還包括:pageContext網(wǎng)頁的屬性是在這里管理applicationServlet正在執(zhí)行的容configServlet的構(gòu)架部件pageJSP網(wǎng)頁本身exception針對錯誤網(wǎng)頁,未捕捉的例外這些基本的置對象是構(gòu)成JSP頁面的重要因子。第3章系統(tǒng)設(shè)計本系統(tǒng)采用三層架構(gòu)設(shè)計,它的工作原理如圖3-1所示。圖3-1三層架構(gòu)模型采用三層構(gòu)架以后,用戶界面層通過統(tǒng)一的接口向業(yè)務(wù)層發(fā)送請求,業(yè)務(wù)層按自己的邏輯規(guī)則將請求處理之后進(jìn)行數(shù)據(jù)庫操作,然后將數(shù)據(jù)庫返回的數(shù)據(jù)封裝成類的形式返回給用戶界面層。3.1數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫在一個信息管理系統(tǒng)中占有非常重要的地位,數(shù)據(jù)庫結(jié)構(gòu)設(shè)計的好壞將直接對應(yīng)用系統(tǒng)的效率,以及實(shí)現(xiàn)的效果產(chǎn)生影響。合理的數(shù)據(jù)庫結(jié)構(gòu)設(shè)計可以提高數(shù)據(jù)存儲的效率,保證數(shù)據(jù)的完整和一致。3.1.1數(shù)據(jù)庫需求分析針對一般在線書店的需求,得出如下需求信息。用戶分為游客和已注冊用戶。訂單分為單詳細(xì)訂單和總訂單。一個用戶可以購買多本圖書。一個用戶對應(yīng)一訂單。一個列表對應(yīng)多訂單。針對本系統(tǒng)功能分析,總結(jié)出如下的需求信息。用戶,包括數(shù)據(jù)項:用戶ID、用戶名、密碼。圖書,包括數(shù)據(jù)項:圖書編號、圖書名、價格、圖書介紹。訂單列表,包括數(shù)據(jù)項:訂單編號、圖書編號、購書數(shù)量。訂單,包括數(shù)據(jù)項:訂單編號、用戶編號、下單時間。從本系統(tǒng)中規(guī)劃出的實(shí)體有:用戶實(shí)體、圖書實(shí)體、訂單實(shí)體、訂單列表實(shí)體。訂購用戶訂購用戶訂單列表訂單圖書11 NN圖3-5實(shí)體關(guān)系E-R圖用戶信息實(shí)體的E-R圖如圖3-6所示。圖書實(shí)體的E-R圖如圖3-7所示。訂單實(shí)體的E-R圖如圖3-8所示。訂單列表實(shí)體的E-R圖如圖3-9所示。圖書圖書圖書編號圖書名稱分類編號封面圖3-6圖書實(shí)體E-R圖用戶用戶用戶名密碼用戶編號E-mail圖3-7用戶實(shí)體E-R圖訂單訂單訂單編號用戶編號圖書編號訂購數(shù)量圖3-8訂單實(shí)體E-R圖訂單列表訂單列表訂單號用戶編號圖書編號是否付款圖3-9訂單列表實(shí)體E-R圖3.1.2數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計在線書店數(shù)據(jù)庫中各個表的設(shè)計結(jié)果如下面的標(biāo)和所示。表3.1為圖書信息列表book。表3.1圖書信息表book字段名數(shù)據(jù)類型長度允許空說明IDint4自動編號,主鍵booknameint4書名bookclassvarchar255圖書類別authorvarchar100yes圖書作者publishfloat8yesbookNovarchar100yes書號Contenttext16yes容介紹pricetinyint1yes價格Amountint4yes總數(shù)量Leav_numberint4yes庫存量pictureint4yes封面reg_timedatetime8yes入庫時間表3.2為用戶信息列表shop_user。表3.2用戶信息表shop_user字段名數(shù)據(jù)類型長度允許空說明IDint4自動編號,會員編號usernamevarchar4no用戶名passwordvarchar100no密碼Namesint4yes會員級別Sexvarchar50yes名字Addrvarchar50yes地址Phonevarchar25yesPostvarchar25yes郵編Emailvarchar25yesRetimedatetime8yes注冊時間RegIpAddrvarchar20yes注冊ip表3.3為訂單表,記錄訂單信息orders。表3.3訂單信息表orders字段名數(shù)據(jù)類型長度允許空說明IDint4yes自動編號,訂單編號order_idint4yes會員編號user_idint4yes圖書編號quantityint4yes訂購數(shù)量submit_timedatetime8yes提交訂單時間consignmentTimedatetime8yes交貨時間totalpricefloat8yes總價contentvarchar20yes備注ipAddrvarchar20yes用戶ipisPayoffint11yes是否付款isSaleint11yes是否發(fā)貨表3.4為訂單列表,記錄訂單列表信息allorder。表3.4訂單列表allorder字段名數(shù)據(jù)類型長度允許空說明IDint4自動編號,卡類型編號orderIDint11yes訂單號BookNoint11yes書號Amountint11yes數(shù)量表3.5書店管理員信息表,記錄管理員信息bookadmin。表3.5管理員信息表bookadmin字段名數(shù)據(jù)類型長度允許空說明AdminUservarchar20管理員用戶名AdminPassvarchar50yes管理員密碼表3.6圖書分類信息表,記錄圖書分類信息bookclass。表3.6圖書分類表bookclass字段名數(shù)據(jù)類型長度允許空說明IDint4自動編號,卡類型編號Classnamevarchar30yes圖書類別第4章詳細(xì)設(shè)計4.1系統(tǒng)概述4.1.1用戶界面部分圖書選購〔可按分類查找圖書,或者通過關(guān)鍵字進(jìn)行查詢。購物車功能。查看圖書詳細(xì)信息。用戶注冊。用戶登錄。查看用戶的訂單信息。修改用戶個人信息。4.1.2管理界面部分現(xiàn)有圖書管理:修改,刪除,查看。用戶管理:查看,修改,刪除。訂單管理:查看訂單清單,更新訂單付款,出貨狀態(tài),刪除訂單。添加新圖書。添加圖書分類。4.2詳細(xì)代碼及說明4.2.1實(shí)現(xiàn)bookshop.run包1:login.java這是一個以客戶為中心的交易平臺,只有成為了系統(tǒng)的合法用戶才能夠使用這個系統(tǒng),因此需要檢驗(yàn)每個用戶的合法性,管理用戶登錄的login.java正是要完成這樣的功能。類中定義了個private屬性和他們對應(yīng)的setX<>/getX<>方法和默認(rèn)構(gòu)造函數(shù)和execute<>getSql<>操作。private屬性分別是:privateStringusername; //登錄用戶名privateStringpasswd; //登錄密碼privatebooleanisadmin; //是否管理員登錄privatelonguserid=0; //用戶ID號重要操作:主要介紹execute〔execute<>操作功能:從數(shù)據(jù)庫中查詢用戶信息。返回值:boolean型,如果取值成功返回true,否則,返回false。設(shè)計思路:獲得數(shù)據(jù)庫連接對象Connection對象,ResultSet對象和Statement對象――》調(diào)用getSql<>方法獲得sql語句――》執(zhí)行sql語句。程序主干部分代碼:publicbooleanexecute<>throwsException{………try{con=DataBase.getConnection<>;stmt=con.createStatement<>;rs=stmt.executeQuery<getSql<>>;}catch<Exceptione>{e.printStackTrace<>;}while<rs.next<>>{if<!isadmin>{userid=rs.getLong<"id">;}flag=true;}………}2:op_book.java該類主要負(fù)責(zé)圖書的管理,包括圖書的修改,查詢,刪除和添加等。op_book類有以下屬性:privatebookabooks=newbook<>; //新的圖書類privatejavax.servlet.http.HttpServletRequestrequest;//建立頁面請求privatebooleansqlflag=true; //對接收到的數(shù)據(jù)是否正確privateVectorbooklist; //顯示圖書列表向量數(shù)組privateintpage=1; //顯示的頁碼privateintpageSize=5; //每頁顯示的圖書數(shù)privateintpageCount=0; //頁面總數(shù)privatelongrecordCount=0; //查詢的記錄總數(shù)publicStringsqlStr="";op_book類有以下方法<省去了屬性對應(yīng)的getX<>/setX<>方法>:book_search<>;完成圖書查詢,包括分類,關(guān)鍵字查詢。delete<>;負(fù)責(zé)圖書的刪除。getOnebook<>;主要完成圖書的單本查詢,用于支持頁面的"查看詳細(xì)信息"。insert<>;負(fù)責(zé)圖書的添加。to_String<>;把字符串以"ISO8859-1"編碼形式輸出,使頁面正常顯示。update<>;負(fù)責(zé)修改圖書信息。getRequest<>;負(fù)責(zé)接受頁面?zhèn)鬟f過來的參數(shù),分解并將參數(shù)存放到abooks對象中。重要操作:主要介紹getRequest<>getRequest<>方法功能:負(fù)責(zé)從頁面接受表單數(shù)據(jù)并分解,設(shè)置abooks對象相應(yīng)屬性。參數(shù)設(shè)計:頁面?zhèn)鬟f的Request對象,其中包括表單數(shù)據(jù)。返回值:boolean型,true表示成功,否則返回false。設(shè)計思想:獲取頁面?zhèn)鬟f的Request對象—》分解Request對象—》獲取表單參數(shù)值—》把參數(shù)值設(shè)置成圖書對象abooks相對應(yīng)的屬性值。程序主干代碼:publicbooleangetRequest<javax.servlet.http.HttpServletRequestnewrequest>{………request=newrequest;StringBookName=request.getParameter<"BookName">;abooks.setBookName<to_String<BookName>>;Stringauthor=request.getParameter<"author">;abooks.setAuthor<to_String<author>>;Stringpublish=request.getParameter<"publish">;;abooks.setPublish<to_String<publish>>;Stringbookclass=request.getParameter<"bookclass">;abooks.setBookClass<bc>;Stringbookno=request.getParameter<"bookno">;abooks.setBookNo<to_String<bookno>>;Stringpicture=request.getParameter<"picture">;abooks.setPicture<to_String<picture>>;price=newFloat<request.getParameter<"price">>.floatValue<>;abooks.setPrice<price>;amount=newInteger<request.getParameter<"amount">>.intValue<>;abooks.setAmount<amount>;StringContent=request.getParameter<"Content">;abooks.setContent<to_String<Content>>;……..}3:op_user.java: 為了使用上的方便,我們把對用戶的管理,包括用戶的添加,刪除,修改,查詢等集合成一個管理類。該類具有以下屬性:privateuseruser=newuser<>; //新的用戶對象privatejavax.servlet.http.HttpServletRequestrequest;//建立頁面請求privateVectoruserlist; //顯示用戶列表向量數(shù)組privateintpage=1; //顯示的頁碼privateintpageSize=8; //每頁顯示的圖書數(shù)privateintpageCount=0; //頁面總數(shù)privatelongrecordCount=0; //查詢的記錄總數(shù)privateStringmessage=""; //出錯信息提示privateStringusername=""; //注冊后返回的用戶名privatelonguserid=0; //注冊后返回的用戶ID該類具有的主要方法〔省去了屬性相關(guān)的getX<>/setX<>操作:add<>:負(fù)責(zé)用戶的添加。delete<>:負(fù)責(zé)刪除指定ID的用戶。get_alluser<>:取出書店所有用戶的信息。getGbk<>:返回指定字符串的GBK編碼。getUserinfo<>:負(fù)責(zé)取得用戶的詳細(xì)信息。update<>:負(fù)責(zé)修改用戶資料。getRequest<>:獲取表單數(shù)據(jù),并分解存儲。4:op_buy.java我們把業(yè)務(wù)邏輯和對訂單以及和訂單列表的管理集成到了該類當(dāng)中。該類具有以下屬性:privatejavax.servlet.http.HttpServletRequestrequest;//建立頁面請求privateHttpSessionsession;//頁面的session;privatebooleansqlflag=true;//對接收到的數(shù)據(jù)是否正確privateVectorpurchaselist;//顯示圖書列表向量數(shù)組privateVectorallorder;//訂購單列表privateVectororder_list;//訂單清單列表privateintbooknumber=0;//購書總數(shù)量privatefloatall_price=0;//購書總價錢privatebooleanisEmpty=false;//庫中的書數(shù)量是否夠購買的數(shù)privateintleaveBook=0;//庫存數(shù)量privateStringorderId="";//用戶訂單號privatebooleanisLogin=true;//用戶是否登錄!privateintpage=1;//顯示的頁碼privateintpageSize=15;//每頁顯示的訂單數(shù)privateintpageCount=0;//頁面總數(shù)privatelongrecordCount=0;//查詢的記錄總數(shù)該類的主要操作〔省去了屬性相關(guān)的getX<>/setX<>操作addnew<>:負(fù)責(zé)向購物車中添加新購買的圖書。delete<>:負(fù)責(zé)從數(shù)據(jù)庫中刪除指定ID的訂單。modiShoper<>:負(fù)責(zé)修改購物車中已選的圖書。delShoper<>:負(fù)責(zé)刪除購物車中的物品。getAllorder<>:負(fù)責(zé)從數(shù)據(jù)庫中的訂單列表中查詢指定用戶的訂單列表。getGbk<>:獲得指定字符串的GBK編碼。getOrder<>:獲得單個訂單對象。payout<>:提交購物車,把訂單插入到數(shù)據(jù)庫中。update<>:該方法負(fù)責(zé)當(dāng)用戶付款后,把數(shù)據(jù)中對應(yīng)訂單的是否付款標(biāo)記修改成已付狀態(tài)。重要操作:主要介紹addnew<>addnew<>方法功能:負(fù)責(zé)向購物車中添加一條新記錄。參數(shù)設(shè)計:頁面?zhèn)鬟f的request對象。返回值:boolean類型,成功返回true,否則返回false。設(shè)計思路:從頁面獲得表單數(shù)據(jù)〔request對象中》獲得圖書編號等參數(shù)值—》判斷購買數(shù)量是否合法—》如果是可以操作,否則不能操作—》判斷是否第一次購買—》如果是第一次購買,按第一次購買操作—》否則查詢購買列表,找是否有相應(yīng)項,有則直接修改數(shù)量—》否則添加新記錄。函數(shù)代碼:publicbooleanaddnew<HttpServletRequestnewrequest>throwsException{…………request=newrequest;StringID=request.getParameter<"bookid">;StringAmount=request.getParameter<"amount">;longbookid=0;intamount=0;try{bookid=Long.parseLong<ID>;amount=Integer.parseInt<Amount>;}catch<Exceptione>{returnfalse;}if<amount<1>returnfalse;session=request.getSession<false>;if<session==null>{returnfalse;}purchaselist=<Vector>session.getAttribute<"shopcar">;StringsqlStr="selectleav_numberfrombookwhereid="+bookid;try{con=DataBase.getConnection<>;stmt=con.createStatement<>;rs=stmt.executeQuery<sqlStr>;if<rs.next<>>{if<amount>rs.getInt<1>>{leaveBook=rs.getInt<1>;isEmpty=true;returnfalse;}}DataBase.closeResultSet<rs>;DataBase.closeStatement<stmt>;DataBase.closeConnection<con>;}catch<SQLExceptione>{returnfalse;}allorderiList=newallorder<>;iList.setBookNo<bookid>;iList.setAmount<amount>;booleanmatch=false;//是否購買過該圖書if<purchaselist==null>{//第一次購買purchaselist=newVector<>;purchaselist.addElement<iList>;}else{//不是第一次購買for<inti=0;i<purchaselist.size<>;i++>{allorderitList=<allorder>purchaselist.elementAt<i>;if<iList.getBookNo<>==itList.getBookNo<>>{itList.setAmount<itList.getAmount<>+iList.getAmount<>>;purchaselist.setElementAt<itList,i>;match=true;break;}//ifnamematches結(jié)束}//for循環(huán)結(jié)束if<!match>purchaselist.addElement<iList>;}session.setAttribute<"shopcar",purchaselist>;returntrue;}4.2.2客戶界面設(shè)計與實(shí)現(xiàn)1:界面頭和界面尾設(shè)計。為了提高代碼的重用性,我把客戶界面部分相同的頭和尾作成兩個獨(dú)立的塊,分別命名為head.inc和tail.inc。這兩個文件是單純的html代碼,在jsp頁面中只要通過以下語句就可以實(shí)現(xiàn)對兩個文件的調(diào)用:<%includefile=’’/bookshop/inc/head.inc"%><%includefile=’’/bookshop/inc/head.inc"%>他們的效果如下圖4-1:圖4-1界面頭和尾部分顯示效果用戶登錄界面login.jsp代碼如下:<%pagecontentType="text/html;charset=gb2312"%><%pagesession="true"%><linkrel="stylesheet"href="css.css"type="text/css"><jsp:useBeanid="login"scope="page"class="bookshop.run.login"/><%Stringmesg="";if<request.getParameter<"username">!=null&&!request.getParameter<"username">.equals<"">>{ Stringusername=request.getParameter<"username">; Stringpasswd=request.getParameter<"passwd">; username=newString<username.getBytes<"ISO8859-1">>; passwd=newString<passwd.getBytes<"ISO8859-1">>; login.setUsername<username>; login.setPasswd<passwd>; //out.print<username+passwd>; if<login.execute<>>{ session.setAttribute<"username",username>; Stringuserid=Long.toString<login.getUserid<>>; session.setAttribute<"userid",userid>; response.sendRedirect<"booklist.jsp">;%><% }else{ mesg="登錄出錯!" ; }}%>2:用戶登錄模塊的設(shè)計。為了檢驗(yàn)用戶是否合法,所以需要輸入用戶名和密碼來驗(yàn)證用戶的合法性,用戶登錄模塊剛好完成這樣的一個功能。該模塊需要用到login.java<見4.4.31>這個bean。需要設(shè)計一個表單讓用戶輸入信息。效果圖如下:圖4-2圖4-2用戶登錄界面3.在線購書功能模塊設(shè)計。 在該模塊用戶可以看見書店現(xiàn)有的樣子,用戶可以查找書通過分類,關(guān)鍵字查找。戶可以購買圖書,頁可以查看圖書的詳細(xì)資料,還可以跳轉(zhuǎn)到其他的模塊,例如查看購物車,查看訂單信息等。在這個模塊中我們要用到JavaBean有,,三個JavaBean。對于他們的介紹我已經(jīng)在前面介紹了這里就不在一一羅列了。詳情見4.2和4.3 其中我把導(dǎo)航條抽出來單獨(dú)作為一個模塊:sub.inc左邊的查找框也單獨(dú)設(shè)計成一個模塊:left.inc兩個純粹的html代碼部分,在jsp頁面中直接調(diào)用。效果如下圖4-3所示:圖4-3在線購書模塊效果顯示在線購書頁面模塊booklist.jsp代碼如下:<%pagecontentType="text/html;charset=gb2312"%><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><%pageimport="java.util.*"%><%pageimport="bookshop.book.bookclass"%><%pagesession="true"%><%pageimport="bookshop.book.book"%><jsp:useBeanid="book"scope="page"class="bookshop.book.book"/><jsp:useBeanid="book_list"scope="page"class="bookshop.run.op_book"/><jsp:useBeanid="classlist"scope="page"class="bookshop.run.op_bookclass"/><%intpages=1;Stringmesg="";if<request.getParameter<"page">!=null&&!request.getParameter<"page">.equals<"">>{Stringrequestpage=request.getParameter<"page">; try{pages=Integer.parseInt<requestpage>; }catch<Exceptione>{ mesg="你要找的頁碼錯誤!"; } book_list.setPage<pages>;}%>4:購物車模塊頁面設(shè)計。在購物車這個模塊當(dāng)中用戶可以修改購買數(shù)量,可以刪除已選圖書,可以提交購物車,也可以清空購物車,同時也可以繼續(xù)購書。在這個模塊中我們用到了,,三個JavaBean.關(guān)于他們的介紹在前面已經(jīng)羅列出來了這里就不在一一說明了。該模塊運(yùn)行時效果如圖4-4所示:圖4-4購物車模塊顯示效果頁面核心代碼如下shopcar.jsp:<%pagecontentType="text/html;charset=gb2312"%><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><%pageimport="java.util.*"%><%pagesession="true"%><%pageimport="bookshop.book.*"%><%pageimport="bookshop.run.op_book"%><%pageimport="bookshop.run.op_buy"%><jsp:useBeanid="book_list"scope="page"class="bookshop.run.op_book"/><jsp:useBeanid="classlist"scope="page"class="bookshop.run.op_bookclass"/><jsp:useBeanid="shop"scope="page"class="bookshop.run.op_buy"/><%Stringuserid=<String>session.getAttribute<"userid">;if<userid==null> userid="";Stringmodi=request.getParameter<"modi">;Stringdel=request.getParameter<"del">;StringpayoutCar=request.getParameter<"payout">;StringclearCar=request.getParameter<"clear">;Stringmesg="";if<modi!=null&&!modi.equals<"">>{ if<!shop.modiShoper<request>>{ if<shop.getIsEmpty<>> mesg="你要的修改購買的圖書數(shù)量不足你的購買數(shù)量!"; else mesg="修改購買數(shù)量出錯!"; }else{ mesg="修改成功"; }}elseif<del!=null&&!del.equals<"">>{ if<!shop.delShoper<request>>{ mesg="刪除清單中的圖書時出錯!"; }}elseif<payoutCar!=null&&!payoutCar.equals<"">>{ if<shop.payout<request>>{ mesg="你的購物車中的物品已提交給本店,你的訂單號為"+shop.getOrderId<>+"<br>請及時付款,以便我們發(fā)貨!"; session.removeAttribute<"shopcar">; }else{ if<!shop.getIsLogin<>> mesg="你還沒有登錄,請先<ahref=login.jsp>登錄</a>后再提交"; elsemesg="對不起,提交出錯,請稍后重試,shop.payout出錯!"; } }elseif<clearCar!=null&&!clearCar.equals<"">>{ session.removeAttribute<"shopcar">; mesg="購物車中的物品清單已清空";}%>5.其他頁面顯示效果圖。圖4-5訂單頁面顯示效果訂單頁面我們可以看到自己已經(jīng)提交的所有訂單,可以查看訂單的狀態(tài)和詳細(xì)情況。并色環(huán)境以彈出窗口的形式顯示訂單信息。這種功能主要是通過javascript腳本語言實(shí)現(xiàn)的。如:<scriptlanguage="javascript">functionopenScript<url,name,width,height>{ varWin=window.open<url,name,'width='+width+',height='+height+',resizable=1,scrollbars=yes,menubar=no,status=yes'>;}functionchecklogin<>{ if<document.payout.userid.value==""> {alert<"你還沒有登錄,請登錄后再提交購物清單。">; returnfalse; } returntrue;}functioncheck<>{ if<document.change.amount.value<1>{ alert<"你的購買數(shù)量有問題">; document.change.amount.focus<>; returnfalse; } returntrue;}</script>第5章系統(tǒng)測試5.1數(shù)據(jù)庫連接在系統(tǒng)的整個開發(fā)工程中,我們最容易碰到的難題是數(shù)據(jù)庫連接這個模塊。在JavaBean中連接數(shù)據(jù)庫注意的一些事項有:1首先要下載MicrosoftSQLServer2000DriverforJDBC這個包,并安裝。2把MicrosoftSQLServer2000DriverforJDBC的lib文件夾下的:msbase.jar,mssqlserver.jar,msutil.jar三個文件拷貝到Tomcat安裝目錄下的commen/lib文件夾下。3把msbase.jar,mssqlserver.jar,msutil.jar三個文件的路徑添加到CLASSPATH中。4如果使用的操作系統(tǒng)是Windowsxp在安裝SQLServer2000后必須下載SP3補(bǔ)丁并安裝,否則打不開1433端口號。在數(shù)據(jù)庫連接中出現(xiàn)問題將會出現(xiàn)異常提示信息: org.apache.jasper.servlet.JspServletWrapper.service<JspServletWrapper.java:372> org.apache.jasper.servlet.JspServlet.serviceJspFile<JspServlet.java:292> org.apache.jasper.servlet.JspServlet.service<JspServlet.java:236> javax.servlet.http.HttpServlet.service<HttpServlet.java:802>rootcause bookshop.run.login.execute<login.java:83> org.apache.jsp.bookshop.admin.adm_005flogin_jsp._jspService<adm_005flogin_jsp.java:72> org.apache.jasper.runtime.HttpJspBase.service<HttpJspBase.java:94> javax.servlet.http.HttpServlet.service<HttpServlet.java:802> org.apache.jasper.servlet.JspServletWrapper.service<JspServletWrapper.java:324> org.apache.jasper.servlet.JspServlet.serviceJspFile<JspServlet.java:292> org.apache.jasper.servlet.JspServlet.service<JspServlet.java:236> javax.servlet.http.HttpServlet.service<HttpServlet.java:802>如圖5-1所示:圖5-1數(shù)據(jù)庫連接異常這個時候可能出現(xiàn)的問題是數(shù)據(jù)庫服務(wù)器沒有開啟,或者是沒有安裝MicrosoftSQLServer2000DriverforJDBC這個包。5.2檢測運(yùn)行速度一、用Ajax提高用戶體驗(yàn)由于我的上字體的大小是根據(jù)點(diǎn)擊次數(shù)決定,所以每次點(diǎn)擊都要提交到服務(wù)器端并記錄次數(shù),再在客戶端打開。這在localhost測試的時候沒有發(fā)現(xiàn)問題,但是部署到服務(wù)器上,會感到明顯的等待。解決辦法就是用Ajax。用戶點(diǎn)擊后就直接打開,再通過Ajax將點(diǎn)擊的事件提交到服務(wù)器端記錄。這樣用戶感覺不到任何延時。
二、將邏輯移到客戶端的javascript中在開始的時候,"標(biāo)簽高亮"和"手氣不錯"的功能都是提交到服務(wù)器端操作,然后返回結(jié)果的。后來,我發(fā)現(xiàn)其實(shí)很多邏輯是可以移到客戶端,由javascript來實(shí)現(xiàn)的。Javascript非常強(qiáng)大,可以完成很多復(fù)雜的邏輯。將邏輯移到客戶端的javascript中,可
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廚房裝潢施工合同范本
- 醫(yī)學(xué)檢驗(yàn)課題申報書
- 合作返款合同范本
- 農(nóng)藥訂貨合同范本
- 合資種植桉樹合同范本
- 廚房電梯采購合同范本
- 單位窗簾定制合同范本
- 勞務(wù)合同范本培訓(xùn)學(xué)校
- 住房公積金優(yōu)化調(diào)整實(shí)施方案
- 口罩機(jī)合同范本
- 1-5《鳳仙花開花了》課件
- 自學(xué)考試英語(二)教材
- 煤礦掘進(jìn)巷道施工工程質(zhì)量管理辦法1
- 全國2022年10月自學(xué)考試00040法學(xué)概論試題答案
- 5.實(shí)驗(yàn)設(shè)計的基本原則和常用方法
- 實(shí)用新型專利說明書
- 新產(chǎn)品開發(fā)進(jìn)度表
- GB/T 17888.2-2020機(jī)械安全接近機(jī)械的固定設(shè)施第2部分:工作平臺與通道
- 國際班成立方案1
- 小學(xué)語文一年級下冊 快樂讀書吧 課件(共13張PPT)
- 第1課古代的農(nóng)耕文化課件
評論
0/150
提交評論