網(wǎng)上書店系統(tǒng)設(shè)計-JSP實現(xiàn)_第1頁
網(wǎng)上書店系統(tǒng)設(shè)計-JSP實現(xiàn)_第2頁
網(wǎng)上書店系統(tǒng)設(shè)計-JSP實現(xiàn)_第3頁
網(wǎng)上書店系統(tǒng)設(shè)計-JSP實現(xiàn)_第4頁
網(wǎng)上書店系統(tǒng)設(shè)計-JSP實現(xiàn)_第5頁
已閱讀5頁,還剩66頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、網(wǎng)上書店系統(tǒng)設(shè)計JSP實現(xiàn) 摘要:本課題主要闡述網(wǎng)上書店的設(shè)計與實現(xiàn)過程。具體通過JSP(JAVA SERVER PAGES)技術(shù)來建立動態(tài)網(wǎng)頁,結(jié)合MS SQL Server 2000作為后臺數(shù)據(jù)庫實現(xiàn)。課題將以網(wǎng)上書店系統(tǒng)的模塊為主線展開論述,詳細(xì)介紹該系統(tǒng)的JSP頁面與數(shù)據(jù)庫通信方法以及動態(tài)網(wǎng)頁的有關(guān)理論知識。關(guān)鍵詞: JSP. SQL. 一 前言隨著Internet和電子商務(wù)等應(yīng)用的出現(xiàn),動態(tài)網(wǎng)頁技術(shù)也隨著它們的出現(xiàn)誕生了。所謂“動態(tài)”,就應(yīng)該具有“交互性”、“自動更新”、“因時因人而變”幾個特點(diǎn)。除了早期的CGI外,目前主流的動態(tài)網(wǎng)頁技術(shù)有JSP、ASP、PHP。這些技術(shù)都有各自的強(qiáng)

2、勢和弱勢。JSP頁面由HTML代碼和嵌入其中的Java代碼組成。服務(wù)器在頁面被客戶端請求以后對這些Java代碼進(jìn)行處理,然后將生成的HTML頁面返回給客戶端的瀏覽器。JSP具備了Java技術(shù)的簡單易用、完全面向?qū)ο?、具有平臺無關(guān)性且安全可靠、主要面向Internet的所有特點(diǎn)。(一)選題背景21世紀(jì)是網(wǎng)絡(luò)時代。網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,極大地影響了商業(yè)交易中傳統(tǒng)的交易方式和流通方式。傳統(tǒng)的大型書店,隨著業(yè)務(wù)的不斷擴(kuò)大,書店的規(guī)模也不斷擴(kuò)大,迫切需要建立相應(yīng)的網(wǎng)上書店。利用電子商務(wù)的優(yōu)勢同現(xiàn)有銷售模式和流通渠道相結(jié)合,擴(kuò)大消費(fèi)市場,為書店的再發(fā)展帶來新的商機(jī),也為各地消費(fèi)者提供便利,而且降低商業(yè)成本。

3、目前國內(nèi)的這種商務(wù)網(wǎng)站大多是用ASP來編寫,但ASP有它的局限性。它是解釋運(yùn)行的,在多個客戶訪問的情況下會變得非常慢,而且網(wǎng)站服務(wù)器的負(fù)荷也很重,且只能運(yùn)行在微軟的操作系統(tǒng)和服務(wù)器上。另外不安全性也是需要注意的問題。而JSP的編譯操作僅在第一次對頁面請求時發(fā)生,速度遠(yuǎn)遠(yuǎn)大于ASP,而且可以跨操作系統(tǒng),安全機(jī)制和性能均大于ASP。綜合各方面的考慮,決定采用JSP+JavaBean/Servlet來開發(fā)本網(wǎng)上書店系統(tǒng),充分利用Java技術(shù)的優(yōu)勢,系統(tǒng)穩(wěn)定高效,而且管理人員通過后臺管理能及時地發(fā)布新的書訊動態(tài),加強(qiáng)了書店與消費(fèi)者之間的聯(lián)系,極大地提高了書店的銷售額,取得了顯著的效果。(二)方案論證本

4、系統(tǒng)是基于Internet的結(jié)構(gòu),采用如下圖所示的三層架構(gòu)模型。第一層采用瀏覽器,操作者通過界面向Web提交服務(wù)請求。第二層的Web服務(wù)器專門用來進(jìn)行請求中的邏輯處理,根據(jù)請求與第三層的數(shù)據(jù)庫服務(wù)器進(jìn)行數(shù)據(jù)交易,然后返回瀏覽者所需要的結(jié)果,顯示在第一層的瀏覽器界面上,從而達(dá)到遠(yuǎn)程操作的目的。采用這樣的架構(gòu)改進(jìn)了傳統(tǒng)Client/Server結(jié)構(gòu)的缺點(diǎn),除降低了Client端程序邏輯的復(fù)雜度,更減輕了后端數(shù)據(jù)庫存取的負(fù)載,也平衡了整個網(wǎng)絡(luò)流量。二 網(wǎng)上書店的總體構(gòu)建(一)網(wǎng)上書店功能分析網(wǎng)上書店的建設(shè)總體上分為后臺的管理部分和前臺用戶兩大部分。后臺的主要功能是增加、刪除圖書信息,查詢圖書信息、設(shè)

5、定用戶的等級,對圖書的類別和對出版商進(jìn)行管理,查詢統(tǒng)計圖書銷售信息。前臺主要完成的功能是針對消費(fèi)者的,包括書店圖書分類、查詢、排行、推薦、讀者反饋和讀者購書等。在現(xiàn)實的超市里每個消費(fèi)者都有一個購物車,在這里也為用戶建立一個購物車,只是這里的購物車是虛擬的,但是它卻具有現(xiàn)實購物車的功能。(二)數(shù)據(jù)庫分析 表“books”:保存圖書的基本信息。 表“customers”:保存會員的基本信息。 表“category”:保存圖書類別信息。 表“feedback”:保存圖書評比票數(shù)信息。 表“supplier”:保存圖書出版商信息。 表“salebook”:保存圖書銷售信息。 表“vouch”:保存讀者

6、推薦的圖書信息。 表“visit”:保存圖書出版商信息。 表“distinction”:保存會員登記制度信息。(三)總體頁面構(gòu)架網(wǎng)上書店的主體框架由3個頁面組成,如圖(2-3)所示??蚣艿淖髠?cè)是圖書的類別列表頁面,用于滿足用戶按類別查看圖書的需求。框架的頭部比較繁雜,用于書店的功能導(dǎo)航??蚣艿闹黧w部分主要用于用戶對圖書信息的查看和操作。 圖(2-3)三 網(wǎng)上書店的系統(tǒng)實現(xiàn)(一)預(yù)備知識1. JSP編程語言介紹 JSP環(huán)境的搭配JSP開發(fā)環(huán)境需要安裝:JSDK(包括JVM虛擬機(jī))、Tomcat。 數(shù)據(jù)庫的設(shè)計需要安裝SQL Server 2000 JSP語法簡介JSP主要由模版元素、指令元素、動

7、作元素、腳本元素和JSP內(nèi)建對象組成。模版元素是指JSP文件中靜態(tài)HTML或者XML內(nèi)容。指令是用于從JSP發(fā)送到容器上的一個信息,JSP中有四種指令元素,它們是:頁面指令、include指令、taglib指令、表達(dá)式語言。與指令元素不同,動作元素在請求處理階段起作用。JSP規(guī)范定義了一系列的標(biāo)準(zhǔn)動作,它們用jsp作為前綴,、等都是動作元素。腳本元素包含任意的java腳本代碼,主要有聲明(Declaration)、表達(dá)式(Expression)、Scriptlet。JSP為簡化頁面的開發(fā)提供了一些內(nèi)部對象主要包括:request、response、out、session、pageContext

8、、application、config、page、exception。 JavaBean的技術(shù)簡介什么是JavaBean?它是種Java類,通過封裝屬性和方法成為具有獨(dú)立功能、可重復(fù)使用的并且可以與其他控件通訊的組件對象。JavaBean被組織成為數(shù)據(jù)包(Package)以便進(jìn)行管理。JavaBean的結(jié)構(gòu)必須滿足一定的命名約定。這些約定Sun和其他幾個大公司制定,稱為JavaBean API。只要遵守JavaBean API的命名約定,就可以開發(fā)出可重用且獨(dú)立的Java組件。在JSP中,使用bean標(biāo)簽集合,內(nèi)容開發(fā)者不需要編寫任何代碼就能利用Java強(qiáng)大的功能為頁面添加動態(tài)元素。在JSP的

9、開發(fā)中往往把大段代碼放在腳本段(Scriplet)內(nèi),但是絕大多數(shù)的Java代碼屬于可重復(fù)使用的(如數(shù)據(jù)庫的鏈接),因此可以把這些重復(fù)的代碼做成JavaBean組件。JavaBean是一種組件技術(shù),所以JavaBean將內(nèi)部的動作封裝起來,我們看不到它的運(yùn)行機(jī)制,它直提供最小限度的屬性接口供外殼控制應(yīng)用。JavaBean為了提供組件的功能,必須滿足以下三種條件。 必須擁有沒有參數(shù)的構(gòu)造函數(shù) 體現(xiàn) Serializable Interface 擁有屬性接口 Servlet技術(shù)Servlet指服務(wù)器端小程序,是一種很成熟的技術(shù)。從本質(zhì)上講Servlet是 一個Java類,Java語言能夠?qū)崿F(xiàn)的功能

10、,Servlet基本都能實現(xiàn)(除了圖形界面外)。Servlet主要用于處理Http請求,通常所手的Servlet就是指HttpServlet,用于處理Http請求,能夠處理的請求有:Get、Post、Head等。在開發(fā)Servlet時,可以直接繼承javax.servlet.http.HttpServlet。Servlet需要在web.xml中進(jìn)行描述,在描述時,主要是執(zhí)行Servlet的名字、Servlet類、初始參數(shù)、安全配置、URL映射、啟動的優(yōu)先權(quán)等。Servlet不僅可以生存HTML腳本輸出,也可以生產(chǎn)二進(jìn)制輸出。 JSP數(shù)據(jù)庫技術(shù)JSP開發(fā)離不開數(shù)據(jù)庫編程,幾乎所有的JSP項目都使

11、用到數(shù)據(jù)庫。JDBC是一種用于執(zhí)行SQL的Java API。它為數(shù)據(jù)庫開發(fā)人員提供了一系列標(biāo)準(zhǔn)的API函數(shù),使其可以使用純Java API來開發(fā)數(shù)據(jù)庫應(yīng)用程序。JDBC API為Java開發(fā)者使用數(shù)據(jù)庫提供了統(tǒng)一的編程接口,它由一組Java類和接口組成。JDBC API使得開發(fā)人員可以使用純Java的方式來連接數(shù)據(jù)庫,并進(jìn)行操作。2 SQL結(jié)構(gòu)化查詢SQL是英文Structured Query Language的縮寫,意思為結(jié)構(gòu)化查詢語言。SQL語言的主要功能就是同各種數(shù)據(jù)庫建立聯(lián)系,進(jìn)行溝通。按照ANSI(美國國家標(biāo)準(zhǔn)協(xié)會)的規(guī)定,SQL被作為關(guān)系型數(shù)據(jù)庫管理系統(tǒng)的標(biāo)準(zhǔn)語言。SQL語句可以用

12、來執(zhí)行各種各樣的操作,例如更新數(shù)據(jù)庫中的數(shù)據(jù),從數(shù)據(jù)庫中提取數(shù)據(jù)等。目前,絕大多數(shù)流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),如Oracle, Sybase, Microsoft SQL Server, Access等都采用了SQL語言標(biāo)準(zhǔn)。雖然很多數(shù)據(jù)庫都對SQL語句進(jìn)行了再開發(fā)和擴(kuò)展,但是包括Select, Insert, Update, Delete, Create, 以及Drop在內(nèi)的標(biāo)準(zhǔn)的SQL命令仍然可以被用來完成幾乎所有的數(shù)據(jù)庫操作。3. 網(wǎng)上書店的公用組建在網(wǎng)上書店的公用組件中主要介紹JavaBean。圖書是最基本的信息,應(yīng)用的地方也有很多,有必要把它做成一個單獨(dú)的類:package Book

13、Shop;public class Wareprivate String id;private String name;private int quantity;private float price;private float countprice;public Ware()id=;price=0;quantity=0;countprice=0;public void setId (String id)this.id=id;public String getId()return id;public void setName (String name)=name;public

14、 String getName()return name;public void setCountprice(float countprice)this.countprice=countprice;public float getCountprice()return countprice;public void setPrice(float price)this.price=price;public float getPrice()return price;public void setQuantity (int quantity)this.quantity=quantity;public i

15、nt getQuantity()return quantity;與數(shù)據(jù)庫的連接也需要做成JavaBean,方便以后使用:package BookShop;import java.sql.*;import javax.sql.*;import javax.naming.*;public class MyDbprivate Context ctx=null;private DataSource ds=null;private static Connection conn=null;private Statement stmt=null;private ResultSet rs=null;priva

16、te static int COUNT=0;public MyDb()/*函數(shù)功能:關(guān)閉數(shù)據(jù)庫連接*/public void close()tryif (rs !=null) rs.close();catch(Exception e)e.printStackTrace(System.err);tryif(stmt!=null) stmt.close();catch(Exception e)e.printStackTrace(System.err);tryif(conn!=null) conn.close();/System.err.println(count - +(-COUNT); catc

17、h(Exception e)e.printStackTrace(System.err);/*函數(shù)功能:查詢數(shù)據(jù)庫*/public int select(String sql)int k=-10;tryk=0;rs=this.getstmtread().executeQuery(sql);while(rs.next()k+;catch(Exception e)k=-1;e.printStackTrace(System.err);finallythis.close();return k;/*函數(shù)功能:連接數(shù)據(jù)庫*/public Connection getCon()tryctx = new Ini

18、tialContext();ds = (DataSource)ctx.lookup(java:comp/env/jdbc/BookShop);conn = ds.getConnection();/System.err.println(count + +(+COUNT);catch(Exception e)e.printStackTrace(System.err);return conn;/*函數(shù)功能:更新、刪除、插入數(shù)據(jù)*/public int update(String sql)int k=-10;tryk=0;k=this.getstmt().executeUpdate(sql);catc

19、h(Exception e)k=-1;e.printStackTrace(System.err);finallythis.close();return k;/*函數(shù)功能:創(chuàng)建數(shù)據(jù)庫集合*/public Statement getstmtread()tryconn=getCon();stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);catch(Exception e)e.printStackTrace(System.err);return stmt;/*函數(shù)功能:創(chuàng)建數(shù)據(jù)

20、庫集合*/public Statement getstmt()tryconn=getCon();stmt=conn.createStatement();catch(Exception e)e.printStackTrace(System.err);return stmt;/*函數(shù)功能:做編碼轉(zhuǎn)換入庫*/public String inStr(String str)if(str=null)str=;elsetrystr=(new String(str.getBytes(iso-8859-1),GB2312).trim();str=str.replace(,(char)1);catch(Excep

21、tion e)e.printStackTrace(System.err);return str;/*函數(shù)功能:做編碼轉(zhuǎn)換出庫*/public String outStr(String str)if(str=null)str=;elsetrystr=str.replace(char)1,);catch(Exception e)e.printStackTrace(System.err);return str;/*函數(shù)功能:用于查詢處理*/public String selectStr(String str)if(str.equals()str= LIKE % ;elsestr=( LIKE %+s

22、tr+% );return str;(二)前臺用戶操作進(jìn)入這個書店的主體框架要從index.htm頁跳轉(zhuǎn)過去。如下圖所示:點(diǎn)擊“陽光書店”4個字就可以進(jìn)入書店了,如圖(2-3)所示。下面對書店的主要功能模塊進(jìn)行實現(xiàn)、講解。1. 購物車通過“top.jsp”頁面的“查看購物車”可以進(jìn)入購物車相關(guān)的代碼是:查看購物車購物車的建立方便了用戶網(wǎng)上購物,這在每個購物網(wǎng)站都很常見。在網(wǎng)上書店中是不可缺少的,在查看的每一本書中都會有購物車的影子,使用戶隨時都可以把想要購買的圖書加入購物車。購物車如下圖:在查看購物車中,“收銀臺結(jié)帳”與“繼續(xù)購物”都只是普通的鏈接,退書按鈕可以看成是對提交表單事件的觸發(fā)。“修

23、改數(shù)量”比較特別他只是一個靜態(tài)輸出的字符,那么數(shù)量是如何修改的呢?讓我們來看下面的代碼: (trade.jsp)session.setAttribute(shoppingcart,buylist);/顯示功能if(buylist!=null&buylist.size()0)for(j=0;j     form name= method=post action=trade.jsp input type=hidden name= value=input name= type=text size=5 value= onBlur=javascript:submit()  

24、 input type=hidden name=delj value= 總金額: 收銀臺結(jié)賬 修改數(shù)量 =(stock-sale)session.setAttribute(error,圖書已經(jīng)購?fù)?;response.sendRedirect(./error/errorpage.jsp);elsematch3=true;rs.beforeFirst();if(rs.next()&match3=true)newbook.setQuantity(1);newbook.setPrice(Float.parseFloat(rs.getString(1);newbook.setName(rs.getSt

25、ring(2);newbook.setCountprice(newbook.getPrice()*newbook.getQuantity();buylist.addElement(newbook);trade.close();/更改圖書列表elsefor(i=0;i=(stock-sale-book.getQuantity()session.setAttribute(error,圖書數(shù)量不足);response.sendRedirect(./error/errorpage.jsp);elsenewbook.setQuantity(book.getQuantity()+1);buylist.se

26、tElementAt(newbook,i);match=true;trade.close();/新建立圖書類型sqls=SELECT price,bookname,stock,sale FROM books WHERE idbook=+newbook.getId()+;Statement stmt=trade.getstmtread();ResultSet rs=stmt.executeQuery(sqls);/控制圖書是否賣完if(rs.next()stock=rs.getInt(stock);sale=rs.getInt(sale);if(0=(stock-sale)session.set

27、Attribute(error,圖書數(shù)量不足);response.sendRedirect(./error/errorpage.jsp);rs.beforeFirst();if(rs.next()newbook.setPrice(Float.parseFloat(rs.getString(1);newbook.setName(rs.getString(2);newbook.setCountprice(newbook.getPrice()*newbook.getQuantity();trade.close();/forif(!match)sqls=SELECT price,bookname,st

28、ock,sale FROM books WHERE idbook=+newbook.getId()+;Statement stmt=trade.getstmtread();ResultSet rs=stmt.executeQuery(sqls);/控制圖書是否賣完boolean match2=false;if(rs.next()stock=rs.getInt(stock);sale=rs.getInt(sale);if(0=(stock-sale)session.setAttribute(error,圖書已經(jīng)購?fù)?;response.sendRedirect(./error/errorpage

29、.jsp);elsematch2=true;rs.beforeFirst();if(rs.next()&match2=true)newbook.setPrice(Float.parseFloat(rs.getString(1);newbook.setName(rs.getString(2);newbook.setQuantity(1);newbook.setCountprice(newbook.getPrice()*newbook.getQuantity();buylist.addElement(newbook);trade.close();/!match/buylist!=null通過源程序

30、可以看出在對圖書的增加中有兩種情況: 當(dāng)新用戶來是buylist為空,要新建一個buylist,然后查詢數(shù)據(jù)庫,如果庫存能夠滿足用戶的消費(fèi),則向buylist里面增加數(shù)據(jù),否則向用戶發(fā)出提示。 如果buylist不為空,說明用戶之間已經(jīng)買過書,就不需要新建buylist,之間向加入消費(fèi)信息即可。如圖書重復(fù),只需修復(fù)buylist中的圖書數(shù)量。下面來看購物車中對書籍的刪除操作: (trade.jsp)if(action.equals(del)trydel=(String)request.getParameter(delj);d=(new Integer(del).intValue();buyli

31、st.removeElementAt(d);catch(Exception e)刪除操作很簡單,從buylist中刪除此書籍的信息。這是由退書按鈕觸發(fā)的。更新操作其實是在購物車中對圖書數(shù)量的修改,先獲取圖書的各種信息,再驗證庫存數(shù)據(jù)是否滿足,不滿足是給予用戶提示,滿足則更新buylist的信息: (trade.jsp)if(action.equals(update)boolean match1=false;for(k=0;k(stock-sale-quantityadd)session.setAttribute(error,圖書數(shù)量不足);response.sendRedirect(./error/errorpage.jsp);elsematch1=true;trade.close();/修改數(shù)量if(book.getId().equals(bookadd)&match1=true)book.setQuantity(quantityadd);book.setCountprice(book.getPrice()*book.getQuantity

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論