MVC模式中購物車業(yè)務(wù)類JavaBean的設(shè)計(jì)_第1頁
MVC模式中購物車業(yè)務(wù)類JavaBean的設(shè)計(jì)_第2頁
MVC模式中購物車業(yè)務(wù)類JavaBean的設(shè)計(jì)_第3頁
MVC模式中購物車業(yè)務(wù)類JavaBean的設(shè)計(jì)_第4頁
MVC模式中購物車業(yè)務(wù)類JavaBean的設(shè)計(jì)_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、模塊模塊3 MVC3 MVC模式中購物車業(yè)務(wù)類模式中購物車業(yè)務(wù)類JavaBeanJavaBean的設(shè)計(jì)的設(shè)計(jì)項(xiàng)目四 使用Servlet實(shí)現(xiàn)網(wǎng)上商城商品的管理2工作任務(wù)任務(wù)一 創(chuàng)建商品表的JAVABEAN;任務(wù)二 用普通方法在JSP中對商品表的JAVABEAN進(jìn)寫讀寫操作;任務(wù)三 用JSP標(biāo)準(zhǔn)動(dòng)作在JSP中對商品表的JAVABEAN進(jìn)寫讀寫操作任務(wù)四 實(shí)現(xiàn)網(wǎng)上商店用戶JAVABEAN與html登陸界面的數(shù)據(jù)交互;任務(wù)五 用JAVABEAN與內(nèi)置對象實(shí)現(xiàn)網(wǎng)上商店購物車;課堂演示課堂演示3任務(wù)一任務(wù)一創(chuàng)建商品表的創(chuàng)建商品表的JAVABEANJAVABEAN 學(xué)習(xí)目標(biāo)學(xué)習(xí)目標(biāo)Java bean的使用重

2、點(diǎn)難點(diǎn)重點(diǎn)難點(diǎn)創(chuàng)建javabean4組件開發(fā)請求請求ServletJavaBeanJSP頁面頁面執(zhí)行執(zhí)行調(diào)用調(diào)用轉(zhuǎn)向轉(zhuǎn)向響應(yīng)響應(yīng)JSTL使用使用訪問訪問返回?cái)?shù)據(jù)返回?cái)?shù)據(jù)客戶端客戶端5為什么需要JAVABEANpublic int saveOrder(String username,String zipcode,String phone, String creditcard,double total) try con = ConnectionManager.getConnction(); String strSql = insert into BookOrder(username,zipcode

3、,phone, + creditcard,total) values(?,?,?,?,?); pStatement = con.prepareStatement(strSql); pStatement.setString(1, username); /設(shè)置其它參數(shù)值設(shè)置其它參數(shù)值 result = pStatement.executeUpdate(); catch (SQLException sqlE) sqlE.printStackTrace(); return result;參數(shù)過多參數(shù)過多,且為對象屬性且為對象屬性如何按照如何按照OO設(shè)計(jì)參數(shù)?設(shè)計(jì)參數(shù)?使用使用JavaBean進(jìn)行參數(shù)的

4、傳遞進(jìn)行參數(shù)的傳遞參數(shù)的使用6JAVABEAN介紹qJavaBean的來源qBean:豆子qJavaBean是應(yīng)用程序的組成部分public class SecondLevelTitle public SecondLevelTitle() private int id; private String titleName; private int parentTitleId; private String creator; public int getId() return this.id; public void setId(int id) this.id=id; /其它其它setter、ge

5、tter方法方法7封裝數(shù)據(jù)的JAVABEANpublic class Order private String userName;/ 用戶名用戶名 private String zipcode;/ 郵編郵編 private String phone;/ 電話電話 private String creditcard;/ 信用卡信用卡 private double total;/ 總額總額 public Order() public void setUserName(String userName) this. userName = userName; public String getUserN

6、ame() return username; /其它屬性的其它屬性的setter、getter方法方法JavaBean - Order.java將屬性聲明為私有屬性將屬性聲明為私有屬性無參的公有構(gòu)造方法無參的公有構(gòu)造方法公有的設(shè)置屬性值方法公有的設(shè)置屬性值方法setXxx( )公有的獲取屬性值方法公有的獲取屬性值方法getXxx( )8創(chuàng)建JAVABEANq 使用Eclipse工具自動(dòng)生成getter/setter方法9課堂實(shí)踐課堂實(shí)踐創(chuàng)建商品表數(shù)據(jù)封裝的創(chuàng)建商品表數(shù)據(jù)封裝的javabeanjavabean改錯(cuò)與調(diào)試? 課堂實(shí)踐課堂實(shí)踐10拓展提高封裝業(yè)務(wù)的封裝業(yè)務(wù)的JavaBean - Or

7、derOperation.javapublic class OrderOperation public int saveOrder(Order order) int result = 0; try Connection con = ConnectionManager.getConnction(); String strSql = insert into BookOrder(username,zipcode,phone, + creditcard,total) values(?,?,?,?,?); PreparedStatement pStatement = con.prepareStateme

8、nt(strSql); pStatement.setString(1, order.getUserName(); /設(shè)置其它的參數(shù)值設(shè)置其它的參數(shù)值 result = pStatement.executeUpdate(); catch (SQLException sqlE) sqlE.printStackTrace(); return result; 把封裝好數(shù)據(jù)的對象作為參數(shù)把封裝好數(shù)據(jù)的對象作為參數(shù)從對象中取數(shù)據(jù)從對象中取數(shù)據(jù)演示示例演示示例1: OrderOperation.java11任務(wù)小結(jié)使用JavaBean封裝數(shù)據(jù)的方法使用javabean封裝業(yè)務(wù)的方法學(xué)生自評、互評學(xué)生自評、互

9、評 教師抽查小組驗(yàn)收教師抽查小組驗(yàn)收 12任務(wù)二任務(wù)二在在JSPJSP中對中對JAVABEANJAVABEAN進(jìn)寫讀寫操作進(jìn)寫讀寫操作 學(xué)習(xí)目標(biāo)學(xué)習(xí)目標(biāo)Java bean的使用重點(diǎn)難點(diǎn)重點(diǎn)難點(diǎn)Jsp中使用javabean13JAVABEAN與JSPq廣義講,符合規(guī)范的Java類都是JavaBeanqJavaBean的作用q封裝數(shù)據(jù)q處理業(yè)務(wù)邏輯qJSP與JavaBean如何結(jié)合使用呢?qScriptletqJSP標(biāo)準(zhǔn)動(dòng)作14課堂實(shí)踐 q用Scriptlet訪問javabeanq改錯(cuò)與調(diào)試q? 課堂演示與實(shí)踐課堂演示與實(shí)踐15任務(wù)三任務(wù)三用用J JSPSP標(biāo)準(zhǔn)動(dòng)作讀寫標(biāo)準(zhǔn)動(dòng)作讀寫JAVABEAN

10、JAVABEAN 學(xué)習(xí)目標(biāo)學(xué)習(xí)目標(biāo)掌握J(rèn)ava bean的使用重點(diǎn)難點(diǎn)重點(diǎn)難點(diǎn)標(biāo)準(zhǔn)動(dòng)作讀寫javabean16為什么需要JSP標(biāo)準(zhǔn)動(dòng)作q通過Java 腳本使用后臺(tái)JavaBeanq美工難以維護(hù)q使用JSP標(biāo)準(zhǔn)動(dòng)作qJSP標(biāo)準(zhǔn)動(dòng)作包括:JSP 標(biāo)準(zhǔn)動(dòng)作標(biāo)準(zhǔn)動(dòng)作17USEBEAN 動(dòng)作.quseBean動(dòng)作創(chuàng)建或者獲得一個(gè)對象qJavaBean 的scope設(shè)置 :創(chuàng)建對象的名稱創(chuàng)建對象的名稱創(chuàng)建對象的類型創(chuàng)建對象的類型指定對象的范圍指定對象的范圍范圍范圍說明說明pageBean 對象只能在當(dāng)前頁面使用,當(dāng)加載新頁面時(shí)就會(huì)被銷毀requestBean對象在一個(gè)請求過程中存在sessionBean對

11、象在一個(gè)會(huì)話中存在,直至?xí)捚浣K止或被刪除為止applicationBean對象在整個(gè)應(yīng)用程序中均可使用18SETPROPERTY和GETPROPERTY動(dòng)作. .value設(shè)置設(shè)置 JavaBean 的該屬性值的該屬性值property指定指定 JavaBean 的屬性名稱的屬性名稱q 設(shè)置JavaBean的屬性值q 獲取JavaBean中屬性的值.name 屬性指定對屬性指定對 JavaBean 類類的引用,與的引用,與useBean中的中的id一致一致property指定指定 JavaBean 的屬性名稱的屬性名稱name 屬性指定對屬性指定對 JavaBean 類的引用類的引用19JS

12、P標(biāo)準(zhǔn)動(dòng)作示例使用使用JSP標(biāo)準(zhǔn)動(dòng)作顯示數(shù)據(jù)標(biāo)準(zhǔn)動(dòng)作顯示數(shù)據(jù) - processorder.jsp jsp:setProperty name=order property=userName value=/ /設(shè)置其它屬性值設(shè)置其它屬性值 用戶名:用戶名: . 郵編:郵編: . 電電 話:話: . 信用卡:信用卡: . 總價(jià):總價(jià): . 獲得屬性值,并顯示在頁面上獲得屬性值,并顯示在頁面上獲得用戶提交數(shù)據(jù),并為屬性賦值獲得用戶提交數(shù)據(jù),并為屬性賦值20PARAM的使用使用使用param顯示數(shù)據(jù)顯示數(shù)據(jù) - processorder.jsp /設(shè)置其它屬性值設(shè)置其它屬性值用戶名:用戶名: . /顯

13、示顯示order對象其它屬性值對象其它屬性值姓姓 名名: .總總 價(jià)價(jià): . 獲得用戶提交數(shù)據(jù)獲得用戶提交數(shù)據(jù)獲得屬性值,并顯示在頁面上獲得屬性值,并顯示在頁面上自動(dòng)轉(zhuǎn)換數(shù)據(jù)類型自動(dòng)轉(zhuǎn)換數(shù)據(jù)類型21JSP標(biāo)準(zhǔn)動(dòng)作調(diào)用JAVABEANq JSP標(biāo)準(zhǔn)動(dòng)作與JavaBean的getter、setter方法public class Simplebean private String name; private int age; public Simplebean() /無參的構(gòu)造函數(shù)無參的構(gòu)造函數(shù)System.out.println(調(diào)用無參構(gòu)造方法,創(chuàng)建實(shí)例調(diào)用無參構(gòu)造方法,創(chuàng)建實(shí)例!); publ

14、ic String getName() /屬性的屬性的getter方法方法System.out.println(調(diào)用了調(diào)用了getName()方法,獲取方法,獲取name值值);return name; public void setName(String username) /屬性的屬性的setter方法方法name = username;System.out.println(調(diào)用了調(diào)用了setName()方法,設(shè)置方法,設(shè)置name值值); SimpleBean.java方法是誰調(diào)用的?方法是誰調(diào)用的?在在 JSP 中使用中使用 JavaBean 姓名:姓名: 年齡:年齡:setPrope

15、rty動(dòng)作調(diào)用動(dòng)作調(diào)用JavaBean的的setter方法方法getProperty動(dòng)作調(diào)用動(dòng)作調(diào)用JavaBean的的getter方法方法22課堂實(shí)踐q請使用JSP標(biāo)準(zhǔn)動(dòng)作創(chuàng)建和使用商品表數(shù)據(jù)封裝JavaBean對象,對該對象的屬性進(jìn)行賦值課堂實(shí)踐課堂實(shí)踐23常見錯(cuò)誤 要與表單元素名稱對應(yīng)要與表單元素名稱對應(yīng)數(shù)據(jù)顯示為數(shù)據(jù)顯示為null24常見錯(cuò)誤 應(yīng)該是應(yīng)該是userName這是什么錯(cuò)誤?這是什么錯(cuò)誤?在在Order中沒有找到屬性中沒有找到屬性userName2屬性名稱錯(cuò)誤屬性名稱錯(cuò)誤25常見錯(cuò)誤 應(yīng)該是應(yīng)該是“order”,要與,要與useBean中的中的id一致一致引用名稱錯(cuò)誤引用名稱

16、錯(cuò)誤這是什么錯(cuò)誤?這是什么錯(cuò)誤?26任務(wù)小結(jié)標(biāo)準(zhǔn)動(dòng)作讀寫javabean學(xué)生自評、互評學(xué)生自評、互評 教師抽查小組驗(yàn)收教師抽查小組驗(yàn)收 27任務(wù)四任務(wù)四實(shí)現(xiàn)網(wǎng)上商店用戶實(shí)現(xiàn)網(wǎng)上商店用戶JAVABEANJAVABEAN與與HTMLHTML登陸界面的數(shù)登陸界面的數(shù)據(jù)交互據(jù)交互 學(xué)習(xí)目標(biāo)學(xué)習(xí)目標(biāo)掌握J(rèn)ava bean的使用重點(diǎn)難點(diǎn)重點(diǎn)難點(diǎn)JAVABEAN與html登陸界面的交互 28(1)編寫實(shí)現(xiàn)特定功能的JavaBean;(2)應(yīng)用在JSP頁面中聲明并初始化JavaBean,這個(gè)JavaBean有一個(gè)唯一的id標(biāo)志,還有一個(gè)生存范圍scope(根據(jù)具體的需要進(jìn)行指定),同時(shí)還要指定JavaBean

17、的class來源(如mybean.LoginBeanr);(3)調(diào)用JavaBean提供的public方法或者直接使用標(biāo)簽來得到JavaBean中屬性的值。 (4)調(diào)用JavaBean中的特定方法完成指定的功能。 任務(wù)實(shí)施步驟29上機(jī)實(shí)訓(xùn)JavaBean與HTML表單的交互:在Web程序中,客戶端通常是通過HTML表單與應(yīng)用程序交互,HTML表單中提交的信息存放在request對象中,并且是名稱-值對的形式進(jìn)行傳遞,應(yīng)用JavaBean可以實(shí)現(xiàn)HTML表單元素與JavaBean屬性的映射,從而實(shí)現(xiàn)JavaBean屬性與HTML表單的輸入?yún)?shù)之間的交互。課堂演示與實(shí)踐課堂演示與實(shí)踐30拓展提高p

18、ublic boolean getValid() Connection con = ConnectionManager.getConnection(); PreparedStatement pStatement = null; String sql = select * from userinfo where loginname = ?; try pStatement = con.prepareStatement(sql); pStatement.setString(1, getName(); ResultSet rs = pStatement.executeQuery(); if (rs.n

19、ext() & rs.getString(password).equals(getPassword() valid = true; else valid = false; catch (Exception ex) ex.printStackTrace(); return valid;UserManager.java判斷是否存在該用戶判斷是否存在該用戶演示示例演示示例2: UserManager.javaq使用標(biāo)準(zhǔn)動(dòng)作實(shí)現(xiàn)登錄驗(yàn)證31拓展提高q使用JSP標(biāo)準(zhǔn)動(dòng)作和JavaBean進(jìn)行數(shù)據(jù)驗(yàn)證 創(chuàng)建創(chuàng)建UserManager對象,并為屬性賦值對象,并為屬性賦值調(diào)用驗(yàn)證方法,判斷用戶是否存在

20、調(diào)用驗(yàn)證方法,判斷用戶是否存在JSP標(biāo)準(zhǔn)動(dòng)作,轉(zhuǎn)發(fā)到標(biāo)準(zhǔn)動(dòng)作,轉(zhuǎn)發(fā)到page屬性指定的頁面,等價(jià)屬性指定的頁面,等價(jià)與與RequestDispatcher對象的對象的forward(req,res)方法方法根據(jù)結(jié)果,轉(zhuǎn)發(fā)到相應(yīng)頁面根據(jù)結(jié)果,轉(zhuǎn)發(fā)到相應(yīng)頁面register.jsp32任務(wù)小結(jié)Html與javabean的交互學(xué)生自評、互評學(xué)生自評、互評 教師抽查小組驗(yàn)收教師抽查小組驗(yàn)收 33任務(wù)五任務(wù)五用用JAVABEANJAVABEAN與內(nèi)置對象實(shí)現(xiàn)網(wǎng)上商店購物與內(nèi)置對象實(shí)現(xiàn)網(wǎng)上商店購物車車 學(xué)習(xí)目標(biāo)學(xué)習(xí)目標(biāo)Java bean的使用Session的使用重點(diǎn)難點(diǎn)重點(diǎn)難點(diǎn)javabean與sessi

21、on綜合應(yīng)用34提出任務(wù)問題q實(shí)現(xiàn)電子商城的購物車需求描述 查看所有商品查看所有商品選擇商品選擇商品放入購物車放入購物車?yán)^繼續(xù)購物續(xù)購物結(jié)賬結(jié)賬滿載而歸滿載而歸35HTTP協(xié)議1、HTTP協(xié)議有什么特點(diǎn)?q無狀態(tài)訪問訪問訪問訪問我剛剛被訪問了兩次,但是我我剛剛被訪問了兩次,但是我不知道,是一個(gè)人訪問了兩次?不知道,是一個(gè)人訪問了兩次?還是兩個(gè)人各訪問一次還是兩個(gè)人各訪問一次HTTP協(xié)議不記錄用戶的信息協(xié)議不記錄用戶的信息2、 什么是無狀態(tài) ?36HTTP是無狀態(tài)協(xié)議 3、如何顯示張三和李四分別訪問某一網(wǎng)頁多少次?請求請求請求請求響應(yīng)響應(yīng)響應(yīng)響應(yīng)張三張三李四李四為了區(qū)分用戶,需要為了區(qū)分用戶,需

22、要為不同用戶作登記為不同用戶作登記37HTTP是無狀態(tài)協(xié)議購買購買2個(gè)商品個(gè)商品張三張三李四李四4、在線購物系統(tǒng)中如何對用戶進(jìn)行區(qū)分?購買購買3個(gè)商品個(gè)商品一共購買了一共購買了5個(gè)商品,個(gè)商品,錢應(yīng)該從誰的帳戶上扣呢?錢應(yīng)該從誰的帳戶上扣呢?38HTTP是無狀態(tài)協(xié)議Web程序能不能程序能不能像銀行卡號那樣,根據(jù)像銀行卡號那樣,根據(jù)卡號鎖定一個(gè)用戶呢?卡號鎖定一個(gè)用戶呢?請求請求響應(yīng)響應(yīng)響應(yīng)的時(shí)候,由服務(wù)器響應(yīng)的時(shí)候,由服務(wù)器給我分配一個(gè)唯一給我分配一個(gè)唯一ID號,號,這樣就能區(qū)別不同的用戶了這樣就能區(qū)別不同的用戶了再次請求的時(shí)候,再次請求的時(shí)候,我?guī)е規(guī)е鳬D號,號,告訴服務(wù)器告訴服務(wù)器“我

23、是誰我是誰”如何標(biāo)識用戶?39會(huì)話跟蹤qHttpSession對象q服務(wù)器為每個(gè)會(huì)話創(chuàng)建一個(gè)HttpSession對象q每個(gè)會(huì)話對象都有一個(gè)唯一的IDq把用戶的數(shù)據(jù)保存在相應(yīng)的HttpSession對象內(nèi)第一次請求第一次請求響應(yīng)響應(yīng)服務(wù)器創(chuàng)建一個(gè)服務(wù)器創(chuàng)建一個(gè)HttpSession對象對象并把該對象的并把該對象的ID返回給用戶返回給用戶同時(shí),服務(wù)器在內(nèi)存中開辟同時(shí),服務(wù)器在內(nèi)存中開辟一空間,用來保存該對象數(shù)據(jù)一空間,用來保存該對象數(shù)據(jù)把把ID發(fā)送給客戶端發(fā)送給客戶端第二次請求把第二次請求把ID一一起發(fā)送給服務(wù)器起發(fā)送給服務(wù)器根據(jù)根據(jù)ID號服務(wù)器尋找號服務(wù)器尋找內(nèi)存中相應(yīng)的數(shù)據(jù)內(nèi)存中相應(yīng)的數(shù)據(jù)4

24、0會(huì)話跟蹤請求請求 1請求請求 2請求請求 n.q什么是會(huì)話q當(dāng)前瀏覽器與服務(wù)器間多次的請求、響應(yīng)關(guān)系,被稱作一個(gè)會(huì)話41使用會(huì)話的事例public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException HttpSession session = request.getSession(true); Object count = session.getAttribute(COUNTER);int counter = 0;if (count

25、= null) counter = 1; /將第一次計(jì)數(shù)存入將第一次計(jì)數(shù)存入session session.setAttribute(COUNTER, new Integer(1); else counter = (Integer) count).intValue(); counter+;/計(jì)數(shù)加一計(jì)數(shù)加一/將計(jì)數(shù)存入將計(jì)數(shù)存入sessionsession.setAttribute(COUNTER, new Integer(counter); 取出取出session對對象內(nèi)存儲(chǔ)的值象內(nèi)存儲(chǔ)的值把數(shù)據(jù)存儲(chǔ)在把數(shù)據(jù)存儲(chǔ)在session對象內(nèi)對象內(nèi)記錄不同用戶的訪問次數(shù) 演示示例演示示例1:網(wǎng)頁計(jì)算

26、網(wǎng)頁計(jì)算Counter.java獲得獲得session對象對象42會(huì)話的創(chuàng)建和使用 public HttpSession getSession(); public HttpSession getSession( boolean value);q 會(huì)話的創(chuàng)建q使用HttpServletRequest 的 getSession() 方法創(chuàng)建會(huì)話, 語法如下:q 會(huì)話的使用q使用HttpSession接口的方法,進(jìn)行q保存數(shù)據(jù):q取出數(shù)據(jù):public void setAttribute(String param,Object value);public Object getAttribute(St

27、ring param);獲取獲取session對象的方法對象的方法getSession( )getSession(boolean bool )getSession( true )truefalse返回與當(dāng)前關(guān)聯(lián)的返回與當(dāng)前關(guān)聯(lián)的會(huì)話,如果沒有就會(huì)話,如果沒有就創(chuàng)建后將其返回創(chuàng)建后將其返回返回與當(dāng)前關(guān)聯(lián)返回與當(dāng)前關(guān)聯(lián)的會(huì)話,如果沒的會(huì)話,如果沒有返回有返回null使用時(shí),將其轉(zhuǎn)換成原來數(shù)據(jù)類型使用時(shí),將其轉(zhuǎn)換成原來數(shù)據(jù)類型43SESSION對象的存在周期q session對象的存在周期qsession的創(chuàng)建q瀏覽器訪問服務(wù)器時(shí),服務(wù)器為每個(gè)瀏覽器創(chuàng)建不同的session對象qsession的關(guān)閉

28、q調(diào)用session. invalidate()方法,使session對象失效q訪問時(shí)間間隔大于非活動(dòng)時(shí)間間隔, session對象失效q關(guān)閉瀏覽器時(shí),session對象失效請求請求在內(nèi)存開辟空間在內(nèi)存開辟空間保存數(shù)據(jù)信息保存數(shù)據(jù)信息清空內(nèi)存內(nèi)當(dāng)前瀏清空內(nèi)存內(nèi)當(dāng)前瀏覽器相關(guān)數(shù)據(jù)信息覽器相關(guān)數(shù)據(jù)信息44課堂實(shí)踐 在登錄頁面用戶已錄入用戶名,現(xiàn)編寫一個(gè)在登錄頁面用戶已錄入用戶名,現(xiàn)編寫一個(gè)Servlet接接 收該數(shù)據(jù),并把用戶名值保存在收該數(shù)據(jù),并把用戶名值保存在HttpSession對象內(nèi)對象內(nèi)public void doGet(HttpServletRequest request, HttpS

29、ervletResponse response) throws ServletException, IOException String userName=request.getParameter(userName);HttpSession session=request.getSession();if (userName!=null & .equals(userName)session.setAttribute(userName, userName);elseresponse.sendRedirect(index.html);.45購物車的設(shè)計(jì)分析q設(shè)計(jì)分析q購物車中對象的設(shè)計(jì)q使用

30、Servlet實(shí)現(xiàn)添加書籍到購物車q使用JSP實(shí)現(xiàn)查看購物車的書籍列表選擇商品選擇商品放入購物車放入購物車?yán)^繼續(xù)購物續(xù)購物結(jié)賬結(jié)賬滿載而歸滿載而歸本章要完成內(nèi)容本章要完成內(nèi)容購物車如何設(shè)計(jì)呢?購物車如何設(shè)計(jì)呢?46購物車中對象的設(shè)計(jì)q 對象的設(shè)計(jì)書籍本身信息書籍本身信息書籍購買數(shù)量書籍購買數(shù)量書籍名稱書籍名稱書籍編號書籍編號書籍價(jià)格書籍價(jià)格書籍版本號書籍版本號BookBean購買書籍的數(shù)量購買書籍的數(shù)量public class CartItemBean implements Serializable private BookBean book; /當(dāng)前商品當(dāng)前商品 private int qu

31、antity; /購物車中的數(shù)量購物車中的數(shù)量 public CartItemBean( BookBean bookToAdd, int number ) book = bookToAdd; quantity = number; public void setQuantity( int number ) quantity = number; public int getQuantity() return quantity; /其他的其他的setter、getter方法方法對象屬性對象屬性構(gòu)造方法構(gòu)造方法屬性的屬性的getter、setter方法方法演示示例演示示例1:購物車商品信息類購物車商品

32、信息類CartItemBean.java47購物車的實(shí)現(xiàn)q使用購物車存放商品裝入購物車裝入購物車方便存取商品方便存取商品48購物車的實(shí)現(xiàn)q使用Map實(shí)現(xiàn)購物車BookBeanHashMapsessionkeyvalue存放到存放到存放到存放到書籍?dāng)?shù)量書籍?dāng)?shù)量CartItemBeanisbncart49MAP回顧什么是什么是Map?Map的特點(diǎn)是什么?的特點(diǎn)是什么?Map的對象如何創(chuàng)建?的對象如何創(chuàng)建?如何向如何向Map中添加數(shù)據(jù)?中添加數(shù)據(jù)?如何從如何從Map中取數(shù)據(jù)?中取數(shù)據(jù)?50實(shí)現(xiàn)添加商品到購物車q添加書籍到購物車 q獲得session對象q從session中取出BookBean對象q創(chuàng)

33、建HashMap對象,并添加一個(gè)條目到Map中public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException HttpSession session = request.getSession(false); BookBean book = (BookBean)session.getAttribute(bookToAdd); Map cart = new HashMap(); cart.put(book.getISBN(), new

34、CartItemBean(book, 1); session.setAttribute(cart, cart);獲得獲得session對象對象從從session中取出書籍信息中取出書籍信息把數(shù)據(jù)存入到把數(shù)據(jù)存入到session中中51實(shí)現(xiàn)添加商品到購物車q判斷購物車中是否存在該書籍q存在:數(shù)量加一q不存在:添加條目到Map中 HttpSession session = request.getSession(false); Map cart = (Map) session.getAttribute(cart); if (cart = null) cart = new HashMap(); ses

35、sion.setAttribute(cart, cart); BookBean book = (BookBean) session.getAttribute(bookToAdd); CartItemBean cartItem = (CartItemBean) cart.get(book.getISBN(); if (cartItem != null) cartItem.setQuantity(cartItem.getQuantity() + 1); else cart.put(book.getISBN(), new CartItemBean(book, 1); 如果如果session中存在該書

36、籍,數(shù)量加中存在該書籍,數(shù)量加1如果如果session中不存在該書籍,添加條目數(shù)量為中不存在該書籍,添加條目數(shù)量為1判斷判斷session中是否存在中是否存在cart對象對象演示示例演示示例2:向購物車中添加商品向購物車中添加商品AddBookToCart.java52查看購物車的商品列表q轉(zhuǎn)向viewCart.jspq從session中取出Mapq從Map中取出CartItemBean數(shù)據(jù)Map cart = (Map) session.getAttribute(cart);Set cartItems = cart.keySet();Object isbn = cartItems.toArr

37、ay();BookBean book;int i = 0;while (i isbn.length) cartItem = (CartItemBean) cart.get(String)isbni); book = cartItem.getBook(); /在頁面上顯示在頁面上顯示book數(shù)據(jù),如數(shù)據(jù),如:book.getTitle(); i+;viewCart.jsp從從session中取出中取出Map得到得到Map中中key值的值的Set集合,再轉(zhuǎn)換成數(shù)組,集合,再轉(zhuǎn)換成數(shù)組,以便使用循環(huán)進(jìn)行遍歷以便使用循環(huán)進(jìn)行遍歷通過通過key值取值取value演示示例演示示例3:顯示購物車內(nèi)商品顯示購

38、物車內(nèi)商品viewCart.jsp53SET介紹Set接口繼承關(guān)系和常用方法接口繼承關(guān)系和常用方法Collection接口接口Set接口接口HashSet類類TreeSet類類int size( )boolean isEmpty() Object toArray() boolean add(Object o) 繼承繼承實(shí)現(xiàn)實(shí)現(xiàn)實(shí)現(xiàn)實(shí)現(xiàn)返回返回Set集合元素?cái)?shù)集合元素?cái)?shù)返回一個(gè)包含返回一個(gè)包含 Set 中所有元素的數(shù)組中所有元素的數(shù)組 向向Set中添加元素中添加元素判斷判斷Set中是否包含元素,不包含返回中是否包含元素,不包含返回true54集合接口和類(2-1)q 集合接口、類關(guān)系圖Colle

39、ction接口接口 List接口接口Set接口接口ArrayList類類LinkedList類類HashSet類類TreeSet類類繼承繼承 繼承繼承 實(shí)現(xiàn)實(shí)現(xiàn) 實(shí)現(xiàn)實(shí)現(xiàn) List及實(shí)現(xiàn)類是可變及實(shí)現(xiàn)類是可變大小的列表大小的列表 ,適用于,適用于按數(shù)值索引訪問元素按數(shù)值索引訪問元素 Set集合中不允許集合中不允許有重復(fù)的數(shù)據(jù)有重復(fù)的數(shù)據(jù) 55集合接口和類(2-2)q 集合接口、類關(guān)系圖Map接口接口 HashMap類類 Properties類類Map中以鍵中以鍵-值對值對形式存儲(chǔ)數(shù)據(jù)形式存儲(chǔ)數(shù)據(jù) 實(shí)現(xiàn)實(shí)現(xiàn) 56現(xiàn)場編程添加商品到購物車的實(shí)現(xiàn)步驟是什么?并寫出相關(guān)代碼。q首先從session中取

40、出Map對象q判斷Map中是否存在該數(shù)據(jù)q存在:數(shù)量加一q不存在:添加,數(shù)量為一57顯示購物車數(shù)據(jù)q如何顯示購物車內(nèi)Map中所有數(shù)據(jù)q可不可以使用Map的size()進(jìn)行循環(huán)獲得key、value值qMap 不具有整數(shù)索引,不能利用size()進(jìn)行循環(huán)q使用Set接口qSet接口繼承了Collection接口,但是它不允許集合中存在重復(fù)項(xiàng) qSet接口在Map中的使用Map cart = (Map) session.getAttribute(cart);for(int i=0;icart.size();i+) CartItemBean cartItem =(CartItemBean)cart.get(i); Map沒有整數(shù)索引,參數(shù)應(yīng)該是沒有整數(shù)索引,參數(shù)應(yīng)該是key值值Map cart = (Map) session.getAttribute(cart);Set cartItem

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論