目? 錄
一、實驗目的和要求
二、實驗實現思路及步驟
1、實驗思路
2、實驗步驟
3、實驗方案
三、主要開發工具
四、實驗效果及實現代碼
1、購物車數據庫構建實現
(1)建立javaee-project數據庫
(2)建立t_cart數據表
(3)建立t_cartdetail數據表
(4)建立t_goods數據表
(5)建立t_goodstype數據表
(6)建立t_order數據表
(7)建立t_orderdetail數據表
(8)建立t_user數據表
(9)建立t_useraddress數據表
2、購物車注冊模塊功能實現
(1)購物車注冊驗證
(2)購物車注冊重置
(3)購物車注冊成功
(4)購物車注冊激活
3、購物車登錄模塊功能實現
(1)購物車賬號登錄
(2)購物車登錄信息重置
4、購物車前臺商品展示模塊功能實現
(1)購物車數據信息呈現
(2)購物車商品記錄查詢
(3)購物車酒水飲料信息查看
(4)購物車餅干糕點信息查看
(5)購物車休閑零食信息查看
5、購物車后臺商品維護模塊功能實現
(1)購物車購物信息查看
(2)購物車購物信息清空
(3)購物車訂單信息查看
6、購物車購物模塊功能實現
(1)購物車商品購買
(2)送貨地址填寫
五、遇到的問題和解決方法
六、心得體會
一、實驗目的和要求
????????(1) 掌握SpringBoot框架的使用。
????????(2) 購物車系統的需求分析和設計。
????????(3) 實現購物車系統的功能,包括:商城前臺商品展示、商城后臺商品維護、購物車模塊等功能。
二、實驗實現思路及步驟
1、實驗思路
? ? ? ? (1)設計一個包括購物車數據表(t_cart)、購物車細節數據表(t_cartdetail)、商品信息數據表(t_goods)、商品類型數據表(t_goodstype)、規則數據表(t_order)、規則描述數據表(t_orderdetail)、用戶信息數據表(t_user)、用戶地址數據表(t_useraddress)的數據庫(javaee-project)來存儲購物車數據信息。
? ? ? ? (2)創建SpringBoot項目并在Java中創建相關的包以及在包中創建對應的類文件,在entity包中創建商品實體類,定義需要展示的商品信息,如商品名稱、價格、庫存量、圖片等。
? ? ? ? (3)在dao包中創建商品數據訪問接口,定義與商品數據訪問相關的方法,如獲取商品列表、添加商品等。
? ? ? ? (4)在service包中創建商品服務類,實現商品維護和購物車管理等業務邏輯。
? ? ? ? (5)在controller包中創建商品控制器,處理前端請求,調用商品服務類的方法來處理請求,并返回相應的響應結果。
? ? ? ? (6)在utils包中創建工具類,封裝常用的工具方法,如字符串處理、日期處理等。
? ? ? ? (7)創建Controller層:Controller層負責處理用戶請求并調用服務層的業務邏輯,處理HTTP請求,將請求參數轉化為entity對象,并調用service層的方法。
2、實驗步驟
? ? ? ? (1)確定購物車數據表(t_cart)、購物車細節數據表(t_cartdetail)、商品信息數據表(t_goods)、商品類型數據表(t_goodstype)、規則數據表(t_order)、規則描述數據表(t_orderdetail)、用戶信息數據表(t_user)、用戶地址數據表(t_useraddress)的屬性信息。
????????(2)在entity包中實現商品實體類,定義需要展示的商品信息,如商品名稱、價格、庫存量、圖片等。
? ? ? ? (3)在dao包中實現商品數據訪問接口,定義與商品數據訪問相關的方法,如獲取商品列表、添加商品等,使用注解的方式進行數據庫操作。
? ? ? ? (4)在service包中實現商品服務類,實現商品維護和購物車管理等業務邏輯,調用商品數據訪問接口的方法來獲取數據,處理業務邏輯,并返回結果。
? ? ? ? (5)在controller包中實現商品控制器,處理前端請求,調用商品服務類的方法來處理請求,并返回相應的響應結果。使用@RequestMapping注解或請求處理方法將請求映射到相應的處理方法。
? ? ? ? (6)在utils包中實現工具類,封裝常用的工具方法,如字符串處理、日期處理等。
? ? ? ? (7)在SpringBoot應用程序的配置文件(application.yml)中配置數據庫連接信息、緩存配置、消息隊列配置等。
????????(8)配置SpringBoot應用程序的啟動類(Application),添加@SpringBootApplication注解,并啟動應用程序。
3、實驗方案
? ? ? ? (1)使用MySQL建立基于SpringBoot框架的購物車需要使用的數據庫(javaee-project)以及數據表(t_cart、t_cartdetail、t_goods、t_goodstype、t_order、t_orderdetail、t_user、t_useraddress),并通過調用數據庫中的購物車數據信息數據實現商城前臺商品展示、商城后臺商品維護、購物車模塊等功能。
? ? ? ? (2)根據課本、PPT和老師課堂中講解的內容,使用IDEA-Java編譯軟件制作基于Spring Boot框架的購物車。
? ? ? ? (3)將代碼編寫過程中遇到的問題及時的進行記錄并在課后向老師進行提問,將遇到的問題進行及時的處理和解答,并將所有的問題和解決方法進行匯總歸納。
? ? ? ? (4)完成最終的項目以及基于SpringBoot框架的購物車的實驗報告,最后進行實驗報告排版的檢查并提交。
三、主要開發工具
????????IDEA-Java開發工具、Navicat-MySQL開發工具
四、實驗效果及實現代碼
1、購物車數據庫構建實現
(1)建立javaee-project數據庫
????????打開SQLYog進行數據庫的創建,數據庫創建完畢以后再在數據庫中添加購物車數據表(t_cart)、購物車細節數據表(t_cartdetail)、商品信息數據表(t_goods)、商品類型數據表(t_goodstype)、規則數據表(t_order)、規則描述數據表(t_orderdetail)、用戶信息數據表(t_user)、用戶地址數據表(t_useraddress),對應的數據庫構建界面如圖1-1所示:
圖1-1?數據庫構建界面
????????核心代碼:
CREATE DATABASE javaee-project;USE javaee-project;
(2)建立t_cart數據表
? ? ? ? a、t_cart數據表屬性設置
????????購物車數據信息數據表(t_cart)包括商品ID(id)、關聯ID(uid)、商品價格(money),對應的t_cart屬性設置界面如圖1-2所示:
圖1-2?t_cart屬性設置界面
????????核心代碼:
CREATE?TABLE?`t_cart`?(`id`?int?NOT?NULL?AUTO_INCREMENT,`uid`?int?DEFAULT?NULL,`money`?bigint?DEFAULT?NULL,PRIMARY?KEY?(`id`)
)?ENGINE=InnoDB?AUTO_INCREMENT=5?DEFAULT?CHARSET=utf8mb3
? ? ? ? b、t_cart數據表信息
????????通過Sql語句進行購物車數據信息數據表(t_cart)的創建并在數據表中添加一部分購物數據信息記錄,對應的t_cart數據信息界面如圖1-3所示:
圖1-3?t_cart數據表信息界面
(3)建立t_cartdetail數據表
? ? ? ? a、t_cartdetail數據表屬性設置
????????購物車描述信息數據表(t_cartdetail)包括ID(id)、購物車ID(cid)、購物ID(gid)、數量(num)和價格(money),對應的t_cartdetail屬性設置界面如圖1-4所示:
圖1-4?t_cartdetail屬性設置界面
????????核心代碼:
CREATE?TABLE?`t_cartdetail`?(`id`?int?NOT?NULL?AUTO_INCREMENT,`cid`?int?DEFAULT?NULL,`gid`?int?DEFAULT?NULL,`num`?int?DEFAULT?NULL,`money`?bigint?DEFAULT?NULL,PRIMARY?KEY?(`id`)
)?ENGINE=InnoDB?AUTO_INCREMENT=3?DEFAULT?CHARSET=utf8mb3
? ? ? ? b、t_cartdetail數據表信息
????????通過Sql語句進行購物車描述信息數據表(t_cartdetail)的創建并在數據表中添加一部分購物數據信息記錄,對應的t_cartdetail數據信息界面如圖1-5所示:
圖1-5?t_cartdetail數據表信息界面
(4)建立t_goods數據表
? ? ? ? a、t_goods數據表屬性設置
????????商品信息數據表(t_goods)包括商品ID(id)、商品名稱(name)、價格(price)、公共數據(pubdate)、商品類型(typeName)、信息值(intro)、圖片(picture)、標記(flag)和標識(star),對應的t_goods屬性設置界面如圖1-6所示:
圖1-6?t_goods屬性設置界面
????????核心代碼:
CREATE?TABLE?`t_goods`?(`id`?int?NOT?NULL?AUTO_INCREMENT,`name`?varchar(50)?DEFAULT?NULL,`price`?bigint?DEFAULT?NULL,`pubdate`?date?DEFAULT?NULL,`typeName`?varchar(20)?DEFAULT?NULL,`intro`?varchar(200)?DEFAULT?NULL,`picture`?varchar(150)?DEFAULT?NULL,`flag`?int?DEFAULT?NULL?COMMENT?'1上架?2下架',`star`?int?DEFAULT?NULL,PRIMARY?KEY?(`id`)
)?ENGINE=InnoDB?AUTO_INCREMENT=16?DEFAULT?CHARSET=utf8mb3
? ? ? ? b、t_goods數據表信息
????????通過Sql語句進行商品信息數據表(t_goods)的創建并在數據表中添加一部分商品數據信息記錄,對應的t_goods數據信息界面如圖1-7所示:
圖1-7?t_goods數據表信息界面
(5)建立t_goodstype數據表
? ? ? ? a、t_goodstype數據表屬性設置
????????商品類型信息數據表(t_goodstype)包括ID(id)、商品名稱(name)、等級(level)、大類名稱(parentName)和標志(flag),對應的t_goodstype屬性設置界面如圖1-8所示:
圖1-8?t_goodstype屬性設置界面
????????核心代碼:
CREATE?TABLE?`t_goodstype`?(`id`?int?NOT?NULL?AUTO_INCREMENT,`name`?varchar(20)?DEFAULT?NULL,`level`?int?DEFAULT?NULL?COMMENT?'1或2',`parentName`?varchar(20)?DEFAULT?NULL,`flag`?int?DEFAULT?NULL?COMMENT?'1有效?2無效',PRIMARY?KEY?(`id`)
)?ENGINE=InnoDB?AUTO_INCREMENT=7?DEFAULT?CHARSET=utf8mb3
? ? ? ? b、t_goodstype數據表信息
????????通過Sql語句進行商品類型信息數據表(t_goodstype)的創建并在數據表中添加一部分商品類型數據信息記錄,對應的t_goodstype數據信息界面如圖1-9所示:
圖1-9?t_goodstype數據表信息界面
(6)建立t_order數據表
? ? ? ? a、t_order數據表屬性設置
????????規則信息數據表(t_order)包括ID(id)、用戶ID(uaid)、商品ID(uid)、商品價格(money)、標志(flag)和創建時間(createtime),對應的t_order屬性設置界面如圖1-10所示:
圖1-10?t_order屬性設置界面
????????核心代碼:
CREATE?TABLE?`t_order`?(`id`?varchar(100)?NOT?NULL,`uaid`?int?DEFAULT?NULL,`uid`?int?DEFAULT?NULL,`createtime`?datetime?DEFAULT?NULL,`money`?bigint?DEFAULT?NULL,`flag`?int?DEFAULT?NULL,PRIMARY?KEY?(`id`)
)?ENGINE=InnoDB?DEFAULT?CHARSET=utf8mb3
? ? ? ? b、t_order數據表信息
????????通過Sql語句進行規則信息數據表(t_order)的創建并在數據表中添加一部分規則數據信息記錄,對應的t_order數據信息界面如圖1-11所示:
圖1-11?t_order數據表信息界面
(7)建立t_orderdetail數據表
? ? ? ? a、t_orderdetail數據表屬性設置
????????規則描述信息數據表(t_orderdetail)包括ID(id)、商品ID(gid)、規則ID(oid)、商品價格(money)和商品數量(num),對應的t_orderdetail屬性設置界面如圖1-12所示:
圖1-12?t_orderdetail屬性設置界面
????????核心代碼:
CREATE?TABLE?`t_orderdetail`?(`id`?int?NOT?NULL?AUTO_INCREMENT,`gid`?int?DEFAULT?NULL,`oid`?varchar(100)?DEFAULT?NULL,`money`?bigint?DEFAULT?NULL,`num`?int?DEFAULT?NULL,PRIMARY?KEY?(`id`)
)?ENGINE=InnoDB?AUTO_INCREMENT=7?DEFAULT?CHARSET=utf8mb3
? ? ? ? b、t_orderdetail數據表信息
????????通過Sql語句進行規則描述信息數據表(t_orderdetail)的創建并在數據表中添加一部分規則描述數據信息記錄,對應的t_orderdetail數據信息界面如圖1-13所示:
圖1-13?t_orderdetail數據表信息界面
(8)建立t_user數據表
? ? ? ? a、t_user數據表屬性設置
????????用戶信息數據表(t_user)包括ID(id)、角色(role)、用戶名(username)、密碼(password)、等級(gender)、創建時間(createtime)、標志(flag)和活動號(activatecode),對應的t_user屬性設置界面如圖1-14所示:
圖1-14?t_user屬性設置界面
????????核心代碼:
CREATE?TABLE?`t_user`?(`id`?int?NOT?NULL?AUTO_INCREMENT,`role`?int?DEFAULT?NULL?COMMENT?'角色類型?0管理員?1會員',`username`?varchar(50)?DEFAULT?NULL,`password`?varchar(50)?DEFAULT?NULL,`email`?varchar(30)?DEFAULT?NULL,`gender`?varchar(2)?DEFAULT?NULL,`createtime`?datetime?DEFAULT?NULL,`flag`?int?DEFAULT?NULL?COMMENT,`activatecode`?varchar(50)?DEFAULT?NULL,PRIMARY?KEY?(`id`)
)?ENGINE=InnoDB?AUTO_INCREMENT=11?DEFAULT?CHARSET=utf8mb3
? ? ? ? b、t_user數據表信息
????????通過Sql語句進行用戶信息數據表(t_user)的創建并在數據表中添加一部分用戶數據信息記錄,對應的t_user數據信息界面如圖1-15所示:
圖1-15?t_user數據表信息界面
(9)建立t_useraddress數據表
? ? ? ? a、t_useraddress數據表屬性設置
????????用戶地址信息數據表(t_useraddress)包括ID(id)、用戶名(name)、手機號(phone)、細節(detail)、用戶ID(uid)和標識(flag),對應的t_useraddress屬性設置界面如圖1-16所示:
圖1-16?t_useraddress屬性設置界面
????????核心代碼:
CREATE?TABLE?`t_useraddress`?(`id`?int?NOT?NULL?AUTO_INCREMENT,`name`?varchar(50)?DEFAULT?NULL,`phone`?varchar(20)?DEFAULT?NULL,`detail`?varchar(150)?DEFAULT?NULL,`uid`?int?DEFAULT?NULL,`flag`?int?DEFAULT?n m ?NULL,PRIMARY?KEY?(`id`)
)?ENGINE=InnoDB?AUTO_INCREMENT=3?DEFAULT?CHARSET=utf8mb3
? ? ? ? b、t_useraddress數據表信息
????????通過Sql語句進行用戶地址信息數據表(t_useraddress)的創建并在數據表中添加一部分用戶地址數據信息記錄,對應的t_useraddress數據信息界面如圖1-17所示:
圖1-17?t_useraddress數據表信息界面
2、購物車注冊模塊功能實現
(1)購物車注冊驗證
????????在用戶進行購物車注冊的時候,直接點擊購物車頁面右上角的注冊按鈕即可進行相關信息的注冊,對應的用戶注冊界面如圖2-1所示:
圖2-1?用戶注冊界面
????????核心代碼:
@RequestMapping("userregister")public String register(User user, Model model, HttpSession session) {// 創建激活碼String acode = RandomUtils.createActive();user.setActivatecode(acode);if (userService.save(user)) {// 新增成功session.setAttribute("acode", acode);// 發送激活碼EmailUtils.sendEmail(user);return "registerSuccess";} else {model.addAttribute("registerMsg", "服務器開小差,請稍后再來");return "register";}}@RequestMapping("goodstypejson")@ResponseBodypublic List<GoodsType> showjson() {return service.queryByLevel();}
(2)購物車注冊重置
????????注冊內容全部輸入完成后如果需要改變大量的數據信息則點擊重置按鈕進行填寫信息的重置清空,對應的購物車注冊重置界面如圖2-2所示:
圖2-2?購物車注冊重置界面
????????核心代碼:
@RequestMapping("userloginout")public String loginout(String t, HttpSession session) {if (t != null) {session.removeAttribute("adminuser");return "admin/login";} else {session.removeAttribute("user");return "index";}}
(3)購物車注冊成功
????????注冊內容全部輸入成功后即可進行對應賬號的注冊操作,對應的購物車注冊成功界面如圖2-3所示:
圖2-3?購物車注冊成功界面
????????核心代碼:
@RequestMapping("usercheckname")@ResponseBodypublic ResultBean checkname(String name) {// 創建激活碼if (userService.checkName(name)) {return ResultBean.setSuccess("OK");} else {return ResultBean.setError("ERROR");}}
(4)購物車注冊激活
? ? ? ? a、購物車注冊激活界面
????????用戶注冊完畢購物車后需要對自己的賬號進行激活處理,只有激活后才可以正常登錄,點擊現在激活按鈕進行賬號激活,如果不想激活則可以點擊返回主頁進入到主頁界面,對應的購物車注冊激活界面如圖2-4所示:
圖2-4?購物車注冊激活界面
????????核心代碼:
@RequestMapping("/activate")public String checkCode(String e, String c, HttpSession session) {if (userService.activateUser(e, c)) {// 激活成功return "login";} else {return "index";}}
? ? ? ? b、QQ郵箱跳轉界面
????????進入到注冊頁面后選擇使用QQ郵箱進行賬號注冊后頁面會跳轉到對應的QQ郵箱界面,對應的QQ郵箱界面如圖2-5所示:
圖2-5?QQ郵箱界面
????????核心代碼:
@RequestMapping("usercheckemail")@ResponseBodypublic ResultBean chakeemail(String email) {// 創建激活碼if (userService.checkEmail(email)) {return ResultBean.setSuccess("OK");} else {return ResultBean.setError("ERROR");}}
? ? ? ? c、QQ郵箱鏈接激活界面
????????進入到QQ郵箱界面后點擊收件箱進行激活鏈接的查看,然后點擊對應的鏈接即可完成賬號的激活操作,對應的QQ郵箱鏈接激活界面如圖2-6所示:
圖2-6?QQ郵箱鏈接激活界面
????????核心代碼:
@RequestMapping("userregister")public String register(User user, Model model, HttpSession session) {// 創建激活碼String acode = RandomUtils.createActive();user.setActivatecode(acode);if (userService.save(user)) {// 新增成功session.setAttribute("acode", acode);// 發送激活碼EmailUtils.sendEmail(user);return "registerSuccess";} else {model.addAttribute("registerMsg", "服務器開小差,請稍后再來");return "register";}}
3、購物車登錄模塊功能實現
(1)購物車賬號登錄
? ? ? ? a、賬號密碼信息填寫
????????點擊購物車右上角的登錄按鈕進行對應賬號的登錄操作,在對應的輸入框中輸入對應的內容信息即可,對應的賬號密碼信息填寫界面如圖2-1所示:
圖2-1?賬號密碼信息填寫界面
????????核心代碼:
@RequestMapping("/userlogin")public String login(String username, String password, Model model, HttpSession session,String code) {String code1 = (String) session.getAttribute("code");if(StrUtils.empty(code1,code)||code1.compareTo(code)!=0){model.addAttribute("loginMsg", "驗證碼錯誤");return "login";}if (!StrUtils.empty(username, password)) {User user = userService.getUserByName(username);if (user != null) {// 校驗密碼if (user.getPassword().equals(MD5Utils.md5(password))) {// 正確// 記錄登錄信息到會話中session.setAttribute("user", user);Cart cart = cartService.queryByUid(user.getId());session.setAttribute("cart", cartService.queryByUid(user.getId()));// 頁面跳轉return "index";}}}model.addAttribute("loginMsg", "用戶名或密碼錯誤");return "login";}
? ? ? ? b、賬號登錄成功
????????自己的賬號、密碼以及驗證碼填寫完畢并且無誤后點擊對應的登錄按鈕即可完成對應的登錄操作,對應的賬號登錄成功界面如圖2-2所示:
圖2-2?賬號登錄成功界面
????????核心代碼:
@RequestMapping("adminLogin")public String adminLogin(String username, String password, HttpServletRequest request) {if (!StrUtils.empty(username, password)) {User user = userService.getUserByName(username);if (user != null) {// 校驗密碼if (user.getPassword().equals(MD5Utils.md5(password))) {// 正確// 記錄登錄信息到會話中request.getSession().setAttribute("adminuser", user);// 頁面跳轉return "admin/admin";}}}request.setAttribute("loginMsg", "用戶名或密碼錯誤");return "admin/login";}
(2)購物車登錄信息重置
????????登錄的相關信息填寫完畢后如果需要修改的內容比較多的話可以點擊對應的重置按鈕進行輸入內容的重置清空操作,對應的購物車登錄信息重置界面如圖3-3所示:
圖3-3?購物車登錄信息重置界面
????????核心代碼:
@RequestMapping("userdel")@ResponseBodypublic int checkname(int id) {return userService.deleteByid(id);}
4、購物車前臺商品展示模塊功能實現
(1)購物車數據信息呈現
????????項目創建完畢后啟動項目,在購物車的首頁可以看到所有商家發布的商品以及商品的數據信息,并會將購物數據按4條為一行進行分行劃分處理操作,為購物車添加了色彩渲染,對應的購物車信息呈現界面如圖4-1所示:
圖4-1?購物車信息呈現界面
????????核心代碼:
@RequestMapping("getGoodsListByTn")public String goodsbytn(String tn, Model model) {model.addAttribute("glist", goodsService.queryByType(tn));return "goodsList";}
(2)購物車商品記錄查詢
? ? ? ? a、鍵入查詢信息
????????當需要查看指定商品數據信息時,可以在購物車最上方的搜索框中輸入自己想要查詢的數據記錄,此處采用了模糊查詢的方式,對應的鍵入查詢界面如圖4-2所示:
圖4-2?鍵入查詢界面
????????核心代碼:
@RequestMapping("addGoods")public String save(MultipartFile file, Goods goods, HttpServletRequest request)throws IllegalStateException, IOException {File dir = FileUtils.createDir("D:\\eclipse-workspace\\chapter16\\WebContent\\fmwimages");File desFile = new File(dir, FileUtils.createFileName(file.getOriginalFilename()));file.transferTo(desFile);goods.setPicture(dir.getName() + "/" + desFile.getName());goods.setFlag(1);//上架if (goodsService.save(goods)) {return "addGoods";} else {request.setAttribute("msg", "添加失敗,重新再來");return "addGoods";}}
? ? ? ? b、查看查詢結果
????????在搜索框中輸入自己想要查詢的內容后點擊回車鍵即可完成查詢操作,對應的查詢結果會顯示輸出到頁面中,對應的查詢結果界面如圖4-3所示:
圖4-3?查詢結果界面
????????核心代碼:
@RequestMapping("getGoodsIndex")@ResponseBodypublic List<List<Goods>> goodsindex(HttpServletResponse response) throws IOException {return goodsService.queryIndex();}
(3)購物車酒水飲料信息查看
????????在購物車頁面的最上方點擊酒水飲料模塊后即可進入到對應的酒水飲料模塊,對應的酒水飲料結果界面如圖4-4所示:
圖4-4?酒水飲料結果界面
????????核心代碼:
@RequestMapping("getGoodsById")public String goodsbyid(int id, Model model) {model.addAttribute("goods", goodsService.querySingle(id));return "goodsDetail";}
(4)購物車餅干糕點信息查看
????????在購物車頁面的最上方點擊餅干糕點模塊后即可進入到對應的餅干糕點模塊,對應的餅干糕點查看結果界面如圖4-5所示:
圖4-5?餅干糕點結果界面
????????核心代碼:
@RequestMapping("getGoodsList")public String goodslist(Model model) {model.addAttribute("goodsList", goodsService.queryAll());return "admin/showGoods";}@RequestMapping("deleteGoodsType")@ResponseBodypublic String deleteGoodsType(HttpServletRequest req, int count) {service.deleteType(count);return "success";}
(5)購物車休閑零食信息查看
????????在購物車頁面的最上方點擊休閑零食模塊后即可進入到對應的休閑零食模塊,對應的休閑零食結果界面如圖4-6所示:
圖4-6?休閑零食結果界面
????????核心代碼:
@RequestMapping("selectByNameAndPub")public String queryNameAndPub(String name, String pubdate, Model model) {List<Goods> goods = goodsService.queryNameAndPub(name, pubdate);model.addAttribute("goodsList", goods);return "admin/showGoods";}
5、購物車后臺商品維護模塊功能實現
(1)購物車購物信息查看
????????用戶將商品添加到自己的購物車后可以通過點擊頁面右上角的購物車進行購物車購物信息的查看操作,對應的購物車購物信息查看界面如圖5-1所示:
圖5-1?購物車購物信息查看界面
????????核心代碼:
@RequestMapping("selectOrderByNameAndFlag")public String selectByNameAndFlag(String username, Integer status, Model model) {model.addAttribute("orderList", service.selectByNameAndFlag(username, status));return "admin/showAllOrder";}
(2)購物車購物信息清空
????????如果需要清空自己的購物車購物信息的話可以直接點擊清空購物車按鈕進行相關數據信息的清空操作,對應的購物車購物信息清空界面如圖5-2所示:
圖5-2?購物車購物信息清空界面
????????核心代碼:
@RequestMapping("deleteOrder")public String deleteById(int id, Model model) {model.addAttribute("od", service.deleteById(id));return "orderDetail";}
(3)購物車訂單信息查看
????????用戶將商品訂單提交到自己的購物車后可以通過點擊頁面右上角的我的訂單進行商品訂單信息的查看操作,對應的購物車訂單信息查看界面如圖5-3所示:
圖5-3?購物車訂單信息查看界面
????????核心代碼:
@RequestMapping("getOrderDetail")public String list(String oid, HttpSession session, Model model) {model.addAttribute("od", service.queryOrderDetailById(oid));return "orderDetail";}@RequestMapping("goodstypeshowadd")public String showadd(HttpServletRequest request, Model model) {model.addAttribute("gtlist", service.queryByLevel());return "addGoodsType";}
6、購物車購物模塊功能實現
(1)購物車商品購買
? ? ? ? a、購物車商品信息查看
????????通過賬號進入到購物車后點擊自己喜歡的商品后即可進入到對應的商品信息界面,對應的購物車商品信息界面如圖6-1所示:
圖6-1?購物車商品信息界面
????????核心代碼:
@RequestMapping("addOrder")public String add(int t, int aid, HttpSession session, Model model) {User user = (User) session.getAttribute("user");String oid = RandomUtils.createOrderId();boolean res = false;if (t == 1) {// 直接下單res = service.insertDirect(user.getId(), oid, aid, (CartDetail) session.getAttribute("direct"));} else {// 購物車下單res = service.save(oid, user.getId(), aid);}}
? ? ? ? b、商品加入購物車
????????選擇商品后如果還需要購買其他的商品則可以點擊加入購物車按鈕將商品加入到購物車中,對應的商品加入購物車成功界面如圖6-2所示:
圖6-2?商品加入購物車成功界面
????????核心代碼:
@RequestMapping("getAllOrder")public String all(Integer t, Integer aid, Model model) {model.addAttribute("orderList", service.queryAll());return "admin/showAllOrder";}
? ? ? ? c、商品直接購買
????????選擇商品后如果直接購買選中的商品則可以點擊直接購買按鈕即可進行直接購買,對應的商品直接購買界面如圖6-3所示:
圖6-3?商品直接購買界面
????????核心代碼:
@RequestMapping("getDirectOrder")public String direct(Goods gs, Model model, HttpSession session) {User user = (User) session.getAttribute("user");List<ViewCart> cds = new ArrayList<>();ViewCart cd = new ViewCart();cd.setGid(gs.getId());cd.setMoney(gs.getPrice());cd.setPrice(gs.getPrice());cd.setNum(1);cd.setName(gs.getName());cds.add(cd);CartDetail detail = new CartDetail();model.addAttribute("cartList", cds);model.addAttribute("addList", uaSrervice.queryByUid(user.getId()));model.addAttribute("type", 1);// 轉發return "order";}
? ? ? ? d、商品訂單提交
????????進入頁面后選擇自己的收貨地址并進行訂單的提交即可完成對應的購買工作,對應的商品訂單提交界面如圖6-4所示:
圖6-4?商品訂單提交界面
????????核心代碼:
@RequestMapping("getOrderList")public String olist(HttpSession session, Model model) {User user = (User) session.getAttribute("user");model.addAttribute("orderList", service.queryByUid(user.getId()));return "orderList";}
? ? ? ? e、商品訂單支付
????????完成訂單提交后進入到對應的支付界面,在支付界面可以選擇自己的支付方式進行相關商品的支付,對應的商品訂單支付界面如圖6-5所示:
圖6-5?商品訂單支付界面
????????核心代碼:
@RequestMapping("selectOrderByNameAndFlag")public String selectByNameAndFlag(String username, Integer status, Model model) {model.addAttribute("orderList", service.selectByNameAndFlag(username, status));return "admin/showAllOrder";}
(2)送貨地址填寫
? ? ? ? a、收貨地址信息填寫
????????進入到收獲信息界面后在對應的輸入框中輸入對應的個人數據信息,對應的收貨地址信息填寫界面如圖6-6所示:
圖6-6?收貨地址信息填寫界面
????????核心代碼:
@RequestMapping("goodstypeadd")public String add(GoodsType goodsType, HttpServletRequest request, Model model) {if ("1".equals(goodsType.getParentName())) {goodsType.setLevel(1);goodsType.setParentName(null);} else {goodsType.setLevel(2);}goodsType.setFlag(1);if (service.save(goodsType)) {return "redirect:getGoodsType";} else {model.addAttribute("msg", "服務器異常,請稍后再來");return "redirect:goodstypeshowadd";}}
? ? ? ? b、收貨地址信息添加
????????收獲信息填寫完畢后檢查無誤即可對自己的數據信息進行添加處理,對應的收貨地址信息添加界面如圖6-7所示:
圖6-7?收貨地址信息添加界面
????????核心代碼:
@RequestMapping("selectByNameAndFlag")public String queryNameAndFlag(String name, int flag, Model model) {model.addAttribute("gtlist", service.queryNameAndFlag(name, flag));return "/admin/showGoodsType";}
? ? ? ? c、收貨地址信息設置
????????收貨地址信息添加完畢后即可對相應的數據信息進行設置操作,可以將其中的數據信息設置為默認收貨地址,對應的收貨地址信息設置界面如圖6-8所示:
圖6-8?收貨地址信息設置界面
????????核心代碼:
@RequestMapping("getOrderView")public String viewlist(HttpServletRequest request, Model model) {Cart cart = (Cart) request.getSession().getAttribute("cart");User user = (User) request.getSession().getAttribute("user");model.addAttribute("type", 2);request.setAttribute("cartList", cartService.queryCart(cart.getId()));request.setAttribute("addList", uaSrervice.queryByUid(user.getId()));return "order";}
五、遇到的問題和解決方法
????????1、運行問題:啟動Tomcat的過程中,出現端口被占用的情況。
解決方法:對服務器進行配置,將服務器運行的端口號改為別的端口即可(找到Tomcat安裝目錄下的文件“/conf/server.xml”->使用記事本或寫字板打開文件,在文件中找到“Connector port=8080”->將“8080”改為“8888”,然后保存配置文件->重啟Tomcat服務器)。
????????2、運行問題:無法成功引入Spring Boot Starter Web依賴。
解決方法:檢查項目配置文件(如pom.xml)確保正確添加了Spring Boot Starter Web的依賴項,并且與Spring Boot版本兼容,如果問題仍然存在,嘗試更新Maven或Gradle插件。
????????3、項目問題:JSP頁面中遇到編碼問題。
解決方法:可以先檢查JSP頁面、JavaBean以及數據庫的編碼設置是否一致,可以手動在代碼中設置編碼格式,也可以在web.xml文件中配置全局的編碼過濾器。
????????4、項目問題:JSP頁面無法正確地顯示數據。
解決方法:檢查JSP頁面中是否包含錯誤的HTML標簽、CSS樣式或JavaScript代碼,這些代碼可能會干擾數據的顯示,也可以檢查JavaBean中的數據是否被正確地存儲、處理和輸出。
????????5、項目問題:JSP頁面無法獲取到JavaBean中的數據。
解決方法:確保JavaBean中需要獲取的數據已經被正確地賦值,可以在JSP頁面中使用EL表達式或者使用Java代碼片段的方式獲取數據。
????????6、項目問題:JSP頁面中的表單無法提交。
解決方法:檢查表單中的請求方法是否正確,是否存在未填寫的必填項,是否存在重復的表單參數等錯誤,同時也可以檢查網絡連接是否正常。
????????7、項目問題:頁面跳轉異常。
解決方法:檢查代碼實現,確保頁面跳轉的 URL 是否正確,是否遺漏了必要的轉發或者重定向操作;另外還可以通過在瀏覽器中查看控制臺日志來定位問題。
????????8、項目問題:請求參數獲取失敗。
解決方法:檢查代碼實現,確保請求參數的名稱、類型和格式都與服務器端代碼中一致,還可以通過在瀏覽器中查看網絡請求信息來定位問題。
????????9、項目問題:項目運行后頁面出現了404錯誤。
解決方法:由于在連接數據庫的配置文件中數據庫名錯誤導致的,將數據庫的名字修改為自己的數據庫名稱后再次啟動錯誤消息。
????????10、項目問題:項目運行后頁面出現了500錯誤。
解決方法:由于沒有把類名寫到配置文件的中,所以Tomcat就找不該類,此時我們把類名加入進去就可以正常訪問了。
????????11、項目問題:無法創建Spring Boot項目。
解決方法:檢查開發工具是否已經正確配置了Spring Boot的模板和插件,確保按照官方文檔的步驟來創建項目。
????????12、項目問題:無法正確顯示商品信息。
解決方法:檢查數據模型和數據訪問層是否正確設計,并且商品信息的獲取和展示邏輯是否正確實現。可以使用debug模式進行排查,查看是否有數據返回以及返回的數據是否正確。
????????13、項目問題:無法實現商品的分類展示和熱門推薦。
解決方法:是由于數據模型設計不合理或者算法實現有問題,需要重新審視數據結構和算法設計并考慮使用合適的算法來計算商品的分類和熱門程度。
????????14、項目問題:購物車模塊無法正常工作。
解決方法:檢查購物車模型和數據訪問層的設計是否合理,購物車的增刪改查操作是否正確實現,同時需要檢查訂單生成和支付邏輯是否有問題。可以使用debug模式進行排查,查看是否有數據被正確修改或者新的訂單被正確生成。
????????15、項目問題:用戶無法登錄或注冊。
解決方法:檢查身份驗證和注冊邏輯是否正確實現,同時需要確保應用已經正確配置了合適的認證服務和密碼哈希算法。如果問題仍然存在,可以檢查網絡連接和服務器狀態。
????????16、項目問題:管理員無法登錄后臺頁面。
解決方法:確認管理員的賬戶和密碼是否正確,如果問題依然存在檢查Spring Security配置是否正確,包括認證方式、角色權限等。
????????17、項目問題:商城前臺頁面樣式混亂。
解決方法:是由于CSS樣式沖突或者缺失導致的,需要檢查CSS文件和HTML結構,確保樣式的優先級和覆蓋規則被正確使用,還需要確保前端資源(如CSS、JS文件)已經被正確引入和加載。
????????18、項目問題:商品圖片無法加載。
解決方法:確認圖片資源路徑是否正確,并且圖片文件已經存在,檢查服務器配置確保圖片資源可以被正確訪問和加載,還需要考慮圖片格式的兼容性和文件大小的問題。
????????19、項目問題:購物車結算金額計算錯誤。
解決方法:是由于商品價格或數量在購物車中存儲或計算時出錯導致的,需要檢查購物車模型和結算邏輯,確保商品的價格和數量被正確處理,可以使用單元測試來驗證購物車結算功能的正確性。
????????20、項目問題:訂單生成失敗或重復生成。
解決方法:確認訂單生成邏輯是否正確實現,并且訂單的唯一性被保證,檢查數據庫操作是否正確處理事務和并發請求,可以考慮使用樂觀鎖或悲觀鎖來避免并發問題。
六、心得體會
? ? ? ? 1、通過這次實驗我更加深入地理解了SpringBoot框架的使用和價值,從項目創建、依賴管理到具體的業務邏輯實現,SpringBoot都為我提供了一個快速、穩定的開發環境。特別是在解決一些常見問題時,如數據庫連接、安全問題等,SpringBoot的自動配置和約定大于配置的理念使得問題迅速得到解決。
? ? ? ? 2、在進行購物車系統的需求分析和設計時,我深深體會到了系統設計的重要性,一個好的系統設計不僅能提高開發效率,更能確保系統的穩定性和擴展性。而在這個過程中,我也學到了如何根據業務需求進行合理的數據模型設計、模塊劃分以及接口定義。
? ? ? ? 3、在這次實驗中我實踐了前后端分離的開發模式,通過使用API進行前后端的數據交互,我更加清晰地認識到了前后端分離的優勢,如提高開發效率、增強系統擴展性等。同時也學到了如何設計合理的API接口和使用合適的數據傳輸格式。
? ? ? ? 4、在開發過程中我體驗到了測試的重要性,無論是單元測試、集成測試還是性能測試,都為確保系統的質量和穩定性提供了有力的保障。通過這次實驗,我學到了如何編寫有效的測試用例,如何進行性能測試和安全測試,以及如何根據測試結果進行針對性的優化。
? ? ? ? 5、在實驗過程中我遇到了各種各樣的問題,從環境配置、框架使用到具體的業務邏輯實現。通過查閱文檔、搜索資料和不斷嘗試,我逐漸解決了這些問題,這個過程不僅鍛煉了我的問題解決能力,更讓我體會到了不斷學習和探索的重要性。