日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

JavaWeb图书管理系统day03

發(fā)布時(shí)間:2024/9/30 windows 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaWeb图书管理系统day03 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
  • 視頻+資料+筆記【鏈接:https://pan.baidu.com/s/127I2oA8zvhTECCmC6wMSmQ? ?提取碼:zjxs】
  • JavaWeb圖書(shū)管理系統(tǒng)【bookEstore文檔】
  • JavaWeb圖書(shū)管理系統(tǒng)【源碼 + 效果展示】
  • JavaWeb圖書(shū)管理系統(tǒng)day01【2014.09.27】
  • JavaWeb圖書(shū)管理系統(tǒng)day02【2014.09.28】
  • JavaWeb圖書(shū)管理系統(tǒng)day03【2014.09.29】
  • 目錄

    一、生成訂單

    二、查看訂單

    三、訂單的取消與支付

    四、權(quán)限控制


    一、生成訂單

    1.生成訂單
    ?? ?1.showCart.jsp頁(yè)面,點(diǎn)擊結(jié)算會(huì)生成訂單
    ?? ?2.會(huì)跳轉(zhuǎn)到order.jsp頁(yè)面,在頁(yè)面展示我們訂單中的信息
    ?? ? ?需要輸入一上訂單的收貨地址
    ?? ?生成訂單的代碼實(shí)現(xiàn):
    ?? ??? ?1.在order.jsp頁(yè)面表單會(huì)向 ${pageContext.request.contextPath}/order提交
    ?? ??? ? ?表單中有一個(gè)隱藏域 <input type="hidden" name="method" value="add">
    ?? ??? ?2.在 OrderServlet中有一個(gè)add方法,它是訂單添加操作
    ?? ??? ??? ?
    ?? ??? ??? ?訂單的添加注意事項(xiàng):
    ?? ??? ??? ??? ?當(dāng)訂單生成后,需要對(duì)以下的表進(jìn)行操作
    ?? ??? ??? ??? ?1.訂單表中要插入數(shù)據(jù)
    ?? ??? ??? ??? ?2.商品表中的商品數(shù)量要進(jìn)行修改(修改商品的庫(kù)存)
    ?? ??? ??? ??? ?3.訂單與用戶(hù)之間也存在關(guān)系,添加訂單時(shí),也需要得到當(dāng)前用戶(hù)的id
    ?? ??? ??? ??? ?
    ?? ??? ??? ?以上操作需要進(jìn)行事務(wù)控制。
    ?? ??? ??? ??? ?1.獲取Connection時(shí),要使用同一個(gè),需要在DataSourceUtils中
    ?? ??? ??? ??? ? 對(duì)獲取Connection對(duì)象操作進(jìn)行修改,將其放入到ThreadLocale中
    ?? ??? ??? ??? ?2.Dbutils
    ?? ??? ??? ??? ??? ?QueryRunner 直接使用帶參數(shù)的,參數(shù)類(lèi)型是DataSource類(lèi)型。
    ?? ??? ??? ??? ??? ?new QueryRunner(DataSource ds);這個(gè)操作,在調(diào)用update,query方法,
    ?? ??? ??? ??? ??? ?一般不會(huì)帶Connection參數(shù),這樣,它就是一條sql一個(gè)事務(wù)。
    ?? ??? ??? ??? ??? ?
    ?? ??? ??? ??? ??? ?而現(xiàn)在,我們需要事務(wù)管理,所以我們?cè)谑褂肣ueryRunner時(shí),就會(huì)
    ?? ??? ??? ??? ??? ?不帶參數(shù) ?new QueryRunner(),而使用帶Connection參數(shù)的update、query方法。
    ?? ??? ??? ??? ??? ?
    ?? ??? ??? ?---------------------------------
    ?? ??? ??? ?要注意:訂單要包含商品信息,這時(shí)就需要從session中獲取購(gòu)物車(chē),將購(gòu)物車(chē)中的信息封裝Order對(duì)象中。

    ?? ??? ??? ?現(xiàn)在,我們需要事務(wù)控制,所以我們?cè)趕ervice層進(jìn)行了事務(wù)的開(kāi)啟。

    添加訂單操作

    ? ? ? ? ? ? 在添加訂單項(xiàng)時(shí),使用了批處理,因?yàn)橛唵闻c商品之間存在多對(duì)多關(guān)系,
    ?? ??? ??? ?那么,我們的中間表orderItem,它就有可能有多條數(shù)據(jù),所以我們使用了QueryRuner的batch方法完成添加訂單項(xiàng)操作。
    ?? ??? ??? ?
    ?? ??? ??? ?注意:當(dāng)我們操作完成后,一定要將Connection對(duì)象從ThreadLocale中remove掉。

    二、查看訂單

    2.查看訂單

    ?? ?查看訂單,會(huì)根據(jù)用戶(hù)的role去顯示出不同的訂單。
    ?? ?如果role=admin,它查詢(xún)出所有的訂單
    ?? ?如果role=user,它只查詢(xún)出當(dāng)前用戶(hù)的訂單
    ?? ?
    ?? ?代碼實(shí)現(xiàn):
    ?? ??? ?查看訂單的入口:
    ?? ??? ??? ?1.在首頁(yè),提供了查看訂單連接
    ?? ??? ??? ?2.當(dāng)用戶(hù)添加完成訂單成功后,會(huì)顯示查看訂單操作
    ?? ??? ??? ?<a href="${pageContext.request.contextPath}/order?method=search">
    ?? ??? ??? ?
    ?? ??? ?1.當(dāng)點(diǎn)擊連接后會(huì)訪(fǎng)問(wèn)OrderServlet,并提交一個(gè)參數(shù) method=search;
    ?? ??? ?2.在OrderServlet會(huì)首先得到當(dāng)前用戶(hù) ? request.getSession().getAttribute("user");?? ?
    ?? ??? ? ?如果用戶(hù)沒(méi)有登錄,會(huì)讓它登錄,如果用戶(hù)登錄了,會(huì)查看訂單信息。
    ?? ??? ? ?
    ?? ??? ?3.當(dāng)調(diào)用dao中查詢(xún)訂單操作時(shí),會(huì)根據(jù)當(dāng)前用戶(hù)的role進(jìn)行不同的sql語(yǔ)句操作。
    ? ? ? ? ? 查詢(xún)出訂單后,訂單中不包含商品信息,所以要根據(jù)訂單的信息,在orderItem表與products表中查詢(xún)出商品信息。

    ?? ??? ?4.查詢(xún)出所有訂單后,會(huì)得到一個(gè)List<Order>,將集合存儲(chǔ)到request域中,
    ?? ??? ? ?最后請(qǐng)求轉(zhuǎn)發(fā)到showOrder.jsp頁(yè)面,在頁(yè)面上顯示出所有查詢(xún)出的訂單。

    三、訂單的取消與支付

    3.訂單的取消與支付
    ?? ?1.支付操作
    ?? ??? ?使用了在線(xiàn)支付操作 ? epay第三方支付平臺(tái).
    ?? ??? ?
    ?? ??? ?在顯示訂單頁(yè)面上showOrder.jsp頁(yè)面,顯示訂單信息中,包含了當(dāng)前支付狀態(tài)。
    ?? ??? ?會(huì)顯示 ?"已支付" ?"未支付",如果是未支付,會(huì)有一個(gè)連接訪(fǎng)問(wèn)pay.jsp頁(yè)面,
    ?? ??? ?并將當(dāng)前訂單的id,以及當(dāng)前訂單的金額傳遞到pay.jsp頁(yè)面。
    ?? ??? ?
    ?? ??? ?1.在pay.jsp頁(yè)面上可以選擇銀行,表單提交時(shí),將訂單編號(hào),金額,以及銀行,提交到OnlinepayServlet中。
    ?? ??? ?2.在OnlinePayServlet中完成請(qǐng)求參數(shù)封裝
    ?? ??? ?3.第三方支付,會(huì)根據(jù)你提交的請(qǐng)求參數(shù) ? p8_Url 向這個(gè)路徑發(fā)送信息,
    ?? ??? ?4.可以指定p8_url為CallbackServlet,那么我們?cè)趕ervlet中就可以得到支付結(jié)果信息
    ?? ??? ?5.通過(guò)判斷信息是否正確,以及r9_BType=1 ?r9_BType=2 可以知道,是否支付成功
    ?? ??? ?6.當(dāng)判斷支付成功后,我們要修改訂單的狀態(tài)。
    ?? ??? ??? ?1.在orders表中有一個(gè)字段,paystate=0 代表未支付,我們支付成功后,要修改訂單的狀態(tài)。
    ?? ??? ??? ??? ?paystat=1,這個(gè)代表訂單已對(duì)付。
    ?? ??? ??? ??? ?
    ?? ??? ??? ?2.修改訂單狀態(tài)要根據(jù)訂單編號(hào)修改,在返回的支付結(jié)果信息中r6_Order,它就代表了我們的訂單編號(hào)。?? ??? ??? ??? ?
    ?? ?---------------------------------------------
    ?? ?2.訂單取消
    ?? ??? ?在顯示訂單的頁(yè)面上,會(huì)提供一個(gè)刪除訂單的鏈接。
    ?? ??? ?
    ?? ??? ?1.錄取消訂單時(shí),這個(gè)超連接會(huì)攜帶當(dāng)前訂單的編號(hào)傳遞到服務(wù)器端。
    ?? ??? ??? ?<a href="${pageContext.request.contextPath}/order?method=del&id=${order.id}">取消訂單</a>
    ?? ??? ?2.這個(gè)鏈接會(huì)訪(fǎng)問(wèn)OrderServlet,并且 method=del ?id=訂單編號(hào)
    ?? ??? ??? ?
    ?? ??? ?3.OrderServlet中會(huì)根據(jù)傳遞method 判斷 執(zhí)行 取消訂單操作,會(huì)根據(jù)id知道要?jiǎng)h除哪一個(gè)訂單。
    ?? ??? ??? ?
    ?? ??? ?4.刪除訂單注意事項(xiàng)
    ?? ??? ??? ?1.刪除訂單要將orders表中數(shù)據(jù)刪除---根據(jù)id刪除。
    ?? ??? ??? ?2.需要?jiǎng)h除orderItem表中數(shù)據(jù)。
    ?? ??? ??? ?3.需要修改商品的數(shù)量,也就是說(shuō)需要對(duì)products表進(jìn)行update操作。
    ?? ??? ??? ?
    ?? ??? ??? ?代碼:
    ?? ??? ??? ??? ?1.根據(jù)訂單id在orderitem表中查詢(xún)出相關(guān)的商品信息.
    ?? ??? ??? ??? ?2.修改商品信息
    ?? ??? ??? ??? ?3.刪除訂單項(xiàng)信息
    ?? ??? ??? ??? ?4.刪除訂單.
    ?? ??? ??? ?以上操作,也需要進(jìn)行事務(wù)控制。

    四、權(quán)限控制

    4.權(quán)限控制
    ?? ?
    ?? ?當(dāng)前系統(tǒng)有三種用戶(hù):
    ?? ??? ?1.游客? ?----? 查看商品
    ?? ??? ?2.user? ? ----? 查看商品 ?生成訂單 ?查看訂單 ?
    ?? ??? ?3.admin ----- 下載榜單 ?添加商品.
    ?? ??? ?
    ?? ?權(quán)限控制---使用annotation ?+ 動(dòng)態(tài)代理完成操作.

    ? ? 對(duì)數(shù)據(jù)庫(kù)進(jìn)行修改
    ?? ??? ?users表中的role字段作為一個(gè)外鍵
    ?? ??? ?添加一個(gè)role表,這個(gè)表中有相關(guān)用戶(hù)角色信息
    ?? ??? ?
    ?? ??? ?create table role(
    ?? ??? ??? ?role varchar(100) primary key
    ?? ??? ?)
    ?? ??? ?users表中的role字段是一個(gè)外鍵,依賴(lài)于role表中的role字段.
    ?? ??? ?
    ?? ??? ?
    ?? ??? ?create table privileges(
    ?? ??? ??? ?id int primary key auto_increment, ?
    ?? ??? ??? ?name varchar(20) ?權(quán)限名稱(chēng)
    ?? ??? ?)
    ?? ??? ?
    ?? ??? ?角色與權(quán)限之間存在多對(duì)多對(duì)象
    ?? ??? ?有一個(gè)中間表
    ?? ??? ?
    ?? ??? ?
    ?? ??? ?create table userprivilege(
    ?? ??? ??? ?privilege_id int,
    ?? ??? ??? ?role varchar(100),
    ?? ??? ??? ?primary key(privilege_id,role),
    ?? ??? ??? ?foreign key userprivilege(privilege_id) references privileges(id),
    ?? ??? ??? ?foreign key userprivilege(role) references role(role)
    ?? ??? ?)
    ?? ??? ?-----------------------------------------
    ?? ??? ?1.做一個(gè)注解
    ?? ??? ??? ?@Retention(RetentionPolicy.RUNTIME) ?//說(shuō)明當(dāng)前注解在runtime階段有效果
    ?? ??? ??? ?@Target(ElementType.METHOD) //當(dāng)前注解是在方法上使用的
    ?? ??? ??? ?@Inherited ?//當(dāng)前注解具有繼承性
    ?? ??? ??? ?public @interface PrivilegeInfo {

    ?? ??? ??? ??? ?String value(); //權(quán)限名稱(chēng)
    ?? ??? ??? ?}
    ?? ??? ?
    ?? ??? ?2.對(duì)所有的service層的類(lèi)進(jìn)行提取接口操作.
    ?? ??? ??? ?ProductServiceImpl 類(lèi)---------->ProductService 接口
    ?? ??? ??? ?OrderServieImple類(lèi) ------------>OrderService接口.
    ?? ??? ??? ?
    ?? ??? ??? ?在接口的方法上添加注解,注解中的value值,就是當(dāng)前方法要執(zhí)行,所需要的權(quán)限名稱(chēng)。
    ?? ??? ??? ?
    ?? ??? ?3.在servlet中得到的service對(duì)象,我們不直接new出來(lái),可以針對(duì)每一個(gè)Service提供一個(gè)工廠(chǎng),
    ? ? ? ? ?在工廠(chǎng)中生產(chǎn)對(duì)應(yīng)的service對(duì)象,并且,返回的是代理對(duì)象。

    ?? ??? ??? ?OrderServiceFactory
    ?? ??? ??? ?ProductServiceFactory
    ?? ??? ??? ?
    ?? ??? ??? ?它們用于生產(chǎn)不同的service對(duì)象
    ?? ??? ??? ?
    ?? ??? ??? ?在工廠(chǎng)中創(chuàng)建出對(duì)應(yīng)的service對(duì)象,在提供的getInstance()方法中,返回其代理對(duì)象。
    ?? ??? ??? ?
    ?? ??? ??? ?這樣我們?cè)趕ervlet中,就通過(guò)工廠(chǎng)獲取service對(duì)象,得到的其實(shí)是代理對(duì)象。
    ?? ??? ??? ?
    ?? ??? ?4.在動(dòng)態(tài)代理的InvocationHandler的invoke方法中進(jìn)行權(quán)限控制。
    ?? ??? ??? ?
    ?? ??? ??? ?1.得到當(dāng)前方法上的注解
    ?? ??? ??? ??? ?1.判斷當(dāng)前方法上是否有指定的注解
    ?? ??? ??? ??? ?2.如果沒(méi)有,代表這個(gè)操作不需要權(quán)限控制。
    ? ? ? ? ? ? ? ? ? ?如果有,就會(huì)存在我們的注解。
    ?? ??? ??? ??? ?3.得到方法上的注解,通過(guò)注解對(duì)象得到當(dāng)前方法要執(zhí)行時(shí) 所需要的權(quán)限名稱(chēng)。
    ?? ??? ??? ??? ?
    ?? ??? ??? ??? ?4.得到注解后,還需要得到當(dāng)前用戶(hù),好么我們?cè)谒刑砑幼⒔獾姆椒ㄉ?br /> ?? ??? ??? ??? ? ?添加了一個(gè)參數(shù) ?User.
    ?? ??? ??? ??? ? ?
    ?? ??? ??? ??? ? ?可以在invoke方法中通過(guò)args參數(shù)獲取User對(duì)象.
    ?? ??? ??? ??? ? ?
    ?? ??? ??? ??? ?5.可以判斷當(dāng)前用戶(hù)是否存在,知道是否有權(quán)限操作。
    ?? ??? ??? ??? ??? ?1.如果用戶(hù)不存在,throw new PrivilegeException();權(quán)限不足。
    ?? ??? ??? ??? ??? ?2.如果用戶(hù)存在
    ?? ??? ??? ??? ??? ??? ?1.根據(jù)user的role,在數(shù)據(jù)庫(kù)中查詢(xún)出用戶(hù)所具有的所有的權(quán)限名稱(chēng),
    ?? ??? ??? ??? ??? ??? ? ?與注解上提供的權(quán)限名稱(chēng)對(duì)比。如果包含,那么具有權(quán)限;如果不包含,沒(méi)有權(quán)限。
    ?? ??? ??? ??? ??? ??? ? ?
    ?? ??? ??? ??? ??? ??? ?2.不包含 throw new PrivilegeException();權(quán)限不足。
    ?? ??? ??? ??? ??? ??? ? ? 包含 method.invoke();

    總結(jié)

    以上是生活随笔為你收集整理的JavaWeb图书管理系统day03的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。