JavaWeb图书管理系统day02
- 視頻+資料+筆記【鏈接:https://pan.baidu.com/s/127I2oA8zvhTECCmC6wMSmQ? ?提取碼:zjxs】
- JavaWeb圖書管理系統(tǒng)【bookEstore文檔】
- JavaWeb圖書管理系統(tǒng)【源碼 + 效果展示】
目錄
day01復(fù)習(xí)
一、查看商品詳細(xì)信息
二、添加商品到購(gòu)物車
三、顯示購(gòu)物車商品
四、購(gòu)物車刪除與修改操作
第二天內(nèi)容:
?? ?1.查看商品詳細(xì)信息
?? ?2.添加商品到購(gòu)物車
?? ?3.顯示購(gòu)物車商品
?? ?4.購(gòu)物車刪除與修改操作
day01復(fù)習(xí)
1.注冊(cè)操作
?? ??? ?用戶注冊(cè)成功后,需要進(jìn)行郵件激活
2.登錄操作
?? ??? ?使用Cookie。
?? ??? ?記住用戶名
?? ??? ??? ?當(dāng)用戶登錄成功后,將用戶名存儲(chǔ)到cookie中(持久化存儲(chǔ))
?? ??? ??? ?當(dāng)下一次再訪問(wèn)時(shí),就會(huì)從請(qǐng)求中得到指定cookie信息,從cookie中
?? ??? ??? ?獲取用戶名,顯示在文本框中
?? ??? ??? ?
?? ??? ??? ?注意:cookie中不能存儲(chǔ)中文
?? ??? ?自動(dòng)登錄操作
?? ??? ??? ?當(dāng)用戶登錄成功后,將用戶名與密碼存儲(chǔ)到cookie中(持久化存儲(chǔ))。
?? ??? ??? ?當(dāng)下一次再訪問(wèn)時(shí),我們會(huì)通過(guò)一個(gè)Filter進(jìn)行信息攔截,得到指定的cookie信息,完成自動(dòng)登錄操作。
3.顯示所有商品操作
?? ??? ?www.bookEstore.com
?? ??? ?會(huì)訪問(wèn)index.jsp頁(yè)面,在這個(gè)頁(yè)面中 請(qǐng)求轉(zhuǎn)發(fā)到了ProductSerlvet中,并且 完成了查詢所有商品的操作,
?? ??? ?得到一個(gè)List<Product>,存儲(chǔ)到request域中,跳轉(zhuǎn)到page.jsp頁(yè)面
?? ??? ?在頁(yè)面上顯示出所有商品信息。
?? ??? ?
4.添加商品操作
?? ?本質(zhì)上是一個(gè)文件上傳操作。因?yàn)槲覀冊(cè)谔砑由唐窌r(shí),需要指定一個(gè)商品的圖片。
?? ?
?? ?我們使用commons-fileupload 完成文件上傳
?? ?在AddProductServlet中完成了兩個(gè)操作:
?? ??? ?1.文件上傳操作
?? ??? ?2.書籍信息收集,添加到數(shù)據(jù)庫(kù)操作。
一、查看商品詳細(xì)信息
1.查詢商品詳細(xì)信息
?? ??? ??? ?
?? ??? ?在page.jsp頁(yè)面會(huì)顯示所以商品信息,它提供一個(gè)鏈接,可以 點(diǎn)擊 查看當(dāng)前書籍的詳細(xì)信息。
?? ??? ?
?? ??? ?<a href='${pageContext.request.contextPath}/product?method=findById&id=${p.id}'>速速搶購(gòu)</a>
?? ?
?? ??? ?會(huì)訪問(wèn)一個(gè)servlet(ProductServlet)并且傳遞了method=findById,id=xxxx.
?? ??? ?
?? ??? ?在servlet中根據(jù)傳遞的method值,判斷要執(zhí)行的是findById方法,也就根據(jù)id查找書籍信息。
?? ??? ?會(huì)調(diào)用ProductService中查找操作的方法,在ProductService中調(diào)用ProductDao中查找書籍方法,
?? ??? ?最后得到一個(gè)Product對(duì)象,也就是商品信息封裝對(duì)象。
?? ??? ?將查找到的Product對(duì)象封裝到request域中,請(qǐng)求轉(zhuǎn)發(fā)到productInfo.jsp頁(yè)面,
?? ??? ?在頁(yè)面上展示書籍詳細(xì)信息。
二、添加商品到購(gòu)物車
2.添加商品到購(gòu)物車操作
?? ? ?聲明:購(gòu)物車,沒(méi)有數(shù)據(jù)庫(kù),直接使用session存儲(chǔ)信息.
?? ? ?
?? ? ?當(dāng)productInfo.jsp頁(yè)面,點(diǎn)擊添加商品到購(gòu)物車時(shí),會(huì)將商品的id傳遞到服務(wù)器端
?? ? ?
?? ? ?在頁(yè)面上點(diǎn)擊添加商品到購(gòu)物車會(huì)調(diào)用一個(gè)js函數(shù)
?? ? ?function addProductToCart(id) {
?? ??? ?location.href = "${pageContext.request.contextPath}/cart?method=add&id=" + id;
?? ? ?}
?? ?
?? ? ?在服務(wù)器端會(huì)有CartServlet,它就是用于處理我們購(gòu)物車操作的。
?? ??? ?1.得到商品id ?request.getParameter("id");
?? ??? ?2.根據(jù)id查找出商品 ? Product對(duì)象.
?? ??? ?3.關(guān)于購(gòu)物車的數(shù)據(jù)結(jié)構(gòu)
?? ??? ??? ?Map<Product,Integer> 它就是我們的購(gòu)物車,最終Map集合會(huì)存儲(chǔ)到session中。
?? ??? ??? ?
?? ??? ?4.第一次添加商品到購(gòu)物車時(shí),在服務(wù)器端,根據(jù)就沒(méi)有購(gòu)物車,也就是沒(méi)有map集合。
?? ??? ? ?得到的是null值,就可以知道是第一次購(gòu)物,就可以將購(gòu)物車創(chuàng)建出來(lái),并且,將商品添加到Map集合中。?? ?
?? ??? ?5.如果不是第一次購(gòu)物,查詢后得到的map集合就不為null,就說(shuō)明購(gòu)物車中可能已經(jīng)存在了商品,
? ? ? ? ? 就需要考慮一個(gè)事情,就需要考慮一個(gè)事情,購(gòu)物車中存在了當(dāng)前要購(gòu)買的商品。
?? ??? ??? ?Map集合特點(diǎn):
?? ??? ??? ??? ?key是唯一的,如果使用put方法存儲(chǔ),那么,當(dāng)key重復(fù)時(shí),put方法 返回的就是原來(lái)的value值。
?? ??? ??? ??? ?
?? ??? ??? ??? ?可以根據(jù)put方法返回值,來(lái)判斷商品在購(gòu)物車中是否存在,
?? ??? ??? ??? ?如果存在了,也就是說(shuō),put方法返回值不為null,這時(shí)就可以將返回值+1,
? ? ? ? ? ? ? ? 再重新存儲(chǔ)到map集合中。
三、顯示購(gòu)物車商品
3.查看購(gòu)物車中商品
?? ?當(dāng)點(diǎn)擊查看購(gòu)物車中商品時(shí),會(huì)跳轉(zhuǎn)到一個(gè)jsp頁(yè)面,購(gòu)物車是存儲(chǔ)在session中的,
?? ?那么在jsp頁(yè)面上就可以直接得到session中的商品信息.
?? ?
?? ?<a href="${pageContext.request.contextPath}/showCart.jsp">
?? ??? ?
?? ? ??? ?使用jstl的forEach遍歷Map集合.
?? ??? ?<c:forEach items=${cart} ?var="entry">
?? ??? ??? ?
?? ??? ??? ?${entry.key}? ? --- 對(duì)于cart中的key,它就是一個(gè)Product對(duì)象
?? ??? ??? ?${entry.value} --- 對(duì)于caft中的value,它是一個(gè)Integer對(duì)象,其實(shí)就是商品數(shù)量
?? ??? ??? ?
?? ??? ?</c:forEach>
?? ??? ?
?? ??? ?通過(guò)<c:set> 來(lái) 完成 商品的總價(jià)計(jì)算操作。
四、購(gòu)物車刪除與修改操作
關(guān)于購(gòu)物車中商品的數(shù)量修改購(gòu)物車中商品刪除操作
?? ?1.關(guān)于數(shù)據(jù)修改問(wèn)題
?? ??? ?
?? ??? ?1.關(guān)于點(diǎn)擊+ -按鈕完成商品數(shù)量修改操作
?? ??? ??? ?當(dāng)點(diǎn)擊按鈕時(shí)會(huì)調(diào)用函數(shù)changeCount(商品的id,商品修改數(shù)量,商品的庫(kù)存)
?? ??? ??? ?οnclick="changeCount('${entry.key.id }','${entry.value-1}','${entry.key.pnum}')"
?? ??? ?
?? ??? ??? ?在js中它是沒(méi)數(shù)據(jù)類型的,那么當(dāng)傳遞參數(shù)時(shí),在函數(shù)中,可能認(rèn)為它是一個(gè)字符串,
?? ??? ??? ?那么就會(huì)引起問(wèn)題。通過(guò)parseInt()函數(shù)將數(shù)值轉(zhuǎn)換成數(shù)字.
?? ??? ?
?? ??? ??? ?在函數(shù)中處理數(shù)據(jù)后,會(huì)將數(shù)據(jù)傳遞到服務(wù)器端
?? ??? ? ? ?location.href = "${pageContext.request.contextPath}/cart?method=update&id=" + id
?? ??? ??? ??? ?+ "&count=" + count;
?? ??? ??? ??? ?
?? ??? ??? ?在CartServlet中通過(guò)判斷method=update完成操作.
?? ??? ??? ??? ?1.得到要修改商品的id,在得到要修改的商品數(shù)量值count.
?? ??? ??? ??? ?2.直接對(duì)購(gòu)物車中的商品進(jìn)行操作.
?? ??? ??? ??? ?3.為什么直接創(chuàng)建一個(gè)Product對(duì)象,將id值賦值給它,就可以
?? ??? ??? ??? ? ?直接修改商品數(shù)量.
?? ??? ??? ??? ? ?
?? ??? ??? ??? ? ?原因:對(duì)Product類中的equals方法進(jìn)行了重寫,只比較商品的id.
?? ??? ??? ??? ? ? ? ? 在重寫equalse方法時(shí),也將hashCode方法重寫了.
?? ??? ??? ??? ??? ? ??
?? ??? ?2.關(guān)于+號(hào)操作
?? ??? ??? ?以后面的原理一樣
?? ??? ??? ?
?? ??? ??? ?οnclick="changeCount('${entry.key.id}','${entry.value+1}','${entry.key.pnum }')"
?? ??? ?
?? ??? ??? ?區(qū)別:-號(hào)操作,是將商品的數(shù)量進(jìn)行-1操作
?? ??? ??? ? ? ? +號(hào)操作,是將商品的數(shù)量進(jìn)行+1操作
?? ??? ??? ??? ??
?? ??? ?3.文本框失去焦點(diǎn)時(shí),也調(diào)用?? ??? ??
?? ??? ??? ?οnblur="changeCount('${entry.key.id}',this.value,'${entry.key.pnum}')
?? ??? ??? ?注意:傳遞了this.value,它代表的是文本框中的值
?? ??? ??? ?
?? ??? ?4.數(shù)字文本框
?? ??? ??? ?通過(guò)對(duì)文本添加onkeydown事件操作,當(dāng)鍵盤按下時(shí),會(huì)調(diào)用一個(gè)函數(shù).numbText(event)
?? ??? ??? ?在函數(shù)中通過(guò)判斷按下鍵的keyCode值,就是鍵碼值,來(lái)判斷當(dāng)前是否按下的是指定的
?? ??? ??? ?按鈕。
?? ??? ??? ?
?? ??? ??? ?注意:對(duì)于firefox或ie瀏覽器,它們獲取事件對(duì)象event有區(qū)別。
?? ??? ??? ?code = e.which; 判斷firefox瀏覽器 ?得到鍵碼值.
?? ??? ??? ?code = window.event.keyCode; 判斷是ie瀏覽器,得到鍵碼值.
?? ??? ??? ?
?? ??? ??? ?
?? ??? ??? ?if (!(code >= 48 && code <= 57 || code == 8 || code == 46))?
?? ??? ??? ?這是判斷當(dāng)前按下的不是0-9 ?delete ?backspace
?? ??? ??? ?這時(shí)就要阻止事件的默認(rèn)行為.
?? ??? ??? ?
?? ??? ??? ?e.preventDefault(); ?firefox阻止默認(rèn)行為執(zhí)行
?? ??? ??? ?window.event.returnValue = false; ie瀏覽器阻止默認(rèn)行為執(zhí)行.
?? ??? ??? ?
?? ??? ?5.關(guān)于刪除操作
?? ??? ??? ?<a href="${pageContext.request.contextPath}/cart?method=remove&id=${entry.key.id}" οnclick="delConfirm(event)">刪除</a>
?? ??? ??? ?
?? ??? ??? ?這個(gè)超鏈接會(huì)訪問(wèn)服務(wù)器的一個(gè)CartServlet,method=remove代表要執(zhí)行的是刪除操作。
?? ??? ??? ?并且將商品的id傳遞到服務(wù)器端
?? ??? ??? ?
?? ??? ??? ?得到id后,new Product(),這個(gè)對(duì)象的id值就是傳遞過(guò)去的。
?? ??? ??? ?對(duì)于Product類來(lái)說(shuō),它已經(jīng)重寫了equals方法,它比較的就是id。
?? ??? ??? ?在map集合中,就可以直接根據(jù)我們創(chuàng)建的Product對(duì)象,將商品刪除。
?? ??? ??? ?
?? ??? ??? ?最后會(huì)判斷當(dāng)前購(gòu)物車中是否有商品,如果沒(méi)有,直接將購(gòu)物車刪除。
?? ??? ??? ?
?? ??? ??? ?確認(rèn)刪除操作?
?? ??? ??? ??? ?
?? ??? ??? ??? ?function delConfirm(e) {
?? ??? ??? ??? ??? ?var flag=window.confirm("確認(rèn)刪除商品嗎");
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ?if(!flag){
?? ??? ??? ??? ??? ??? ?//不刪除商品?? ??? ?
?? ??? ??? ??? ??? ??? ?//要想不刪除商品,要阻止事件的默認(rèn)行為執(zhí)行.
?? ??? ??? ??? ??? ??? ?if(e&&e.preventDefault){
?? ??? ??? ??? ??? ??? ??? ?// e對(duì)象存在,preventDefault方法存在 ---- 火狐瀏覽器
?? ??? ??? ??? ??? ??? ??? ?e.preventDefault();
?? ??? ??? ??? ??? ??? ?}else{
?? ??? ??? ??? ??? ??? ??? ?// 不支持e對(duì)象,或者沒(méi)有preventDefault方法 ---- IE
?? ??? ??? ??? ??? ??? ??? ?window.event.returnValue = false;
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?}?? ??? ??? ??? ??? ?
?? ??? ??? ??? ?}
?? ??? ??? ??? ?我們阻止超鏈接的默認(rèn)事件執(zhí)行,這樣超鏈接就不會(huì)向href指定的路徑發(fā)送請(qǐng)求。
總結(jié)
以上是生活随笔為你收集整理的JavaWeb图书管理系统day02的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JavaWeb图书管理系统day01
- 下一篇: JavaWeb图书管理系统day03