day04-功能實現03

来源:https://www.cnblogs.com/liyuelian/archive/2022/12/17/16989805.html
-Advertisement-
Play Games

家居網購項目實現03 8.功能07-後臺管理 顯示家居 8.1需求分析/圖解 給後臺管理提供獨立登錄頁面,管理員登錄地址不對外公開 管理員登錄成功後,顯示管理菜單頁面 管理員點擊家居管理,顯示所有家居信息 8.2思路分析 ps:實現管理員登錄功能,方案一是將管理員視為member,添加到member ...


家居網購項目實現03

8.功能07-後臺管理 顯示家居

8.1需求分析/圖解

image-20221217170317222 image-20221217170426758
  1. 給後臺管理提供獨立登錄頁面,管理員登錄地址不對外公開
  2. 管理員登錄成功後,顯示管理菜單頁面
  3. 管理員點擊家居管理,顯示所有家居信息

8.2思路分析

ps:實現管理員登錄功能,方案一是將管理員視為member,添加到member表中,為了區別管理員和用戶的許可權,添加一個欄位即可;方案二是重新創建一張admin表,單獨存儲admin信息。

這裡採用方案二。

8.3代碼實現

8.3.1admin表和furn表

admin表:

-- 創建admin表
CREATE TABLE `admin`(
`id` INT PRIMARY KEY AUTO_INCREMENT,
`username` VARCHAR(32) NOT NULL UNIQUE,
`password` VARCHAR(32) NOT NULL,
`email` VARCHAR(64) 
)CHARSET utf8 ENGINE INNODB;

-- 插入測試數據
INSERT INTO admin (`username`,`password`,`email`)
VALUES('admin',MD5('admin'),'[email protected]');

SELECT * FROM admin;

furn表:

-- 設計家居表furn
-- 根據 需求-文檔-界面 設計欄位
-- 註意:id int(11), 11為顯示的寬度,配合零填充(zerofill)
-- 		int(2), 2表示的也是顯示寬度
-- 也就是說, int(11)和int(2)存儲的範圍是一樣的,兩者存放的數據範圍只和int相關
-- 例如,67890使用int(11)來存儲,顯示為 00000067890
-- 	    67890使用int(2)來存儲,顯示為 67890
-- 也就是說,當存儲的數據位數不夠時,使用0來填充剩下的寬度(零填充)
CREATE TABLE `furn`(
`id` INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, #id-使用無符號
`name` VARCHAR(64) NOT NULL, #家居名
`maker` VARCHAR(64) NOT NULL, #製造商
`price` DECIMAL(11,2) NOT NULL, #價格 建議用DECIMAL定點數
`sales` INT UNSIGNED NOT NULL, #銷量
`stock` INT UNSIGNED NOT NULL, #庫存
`img_path` VARCHAR(256) NOT NULL #存放圖片的路徑即可,不建議直接存放圖片到資料庫中
)CHARSET utf8 ENGINE INNODB;

-- 增加測試數據
INSERT INTO furn(`id`,`name`,`maker`,`price`,`sales`,`stock`,`img_path`) 
VALUES(NULL,'北歐風格小桌子','熊貓家居',180,666,7,'assets/images/product-image/6.jpg');
 
INSERT INTO furn(`id`,`name`,`maker`,`price`,`sales`,`stock`,`img_path`) 
VALUES(NULL,'簡約風格小椅子','熊貓家居',180,666,7,'assets/images/product-image/4.jpg');
 
INSERT INTO furn(`id`,`name`,`maker`,`price`,`sales`,`stock`,`img_path`) 
VALUES(NULL,'典雅風格小臺燈','螞蟻家居',180,666,7,'assets/images/product-image/14.jpg');
 
INSERT INTO furn(`id`,`name`,`maker`,`price`,`sales`,`stock`,`img_path`) 
VALUES(NULL,'溫馨風格盆景架','螞蟻家居',180,666,7,'assets/images/product-image/16.jpg');

SELECT * FROM `furn`;
image-20221217203226606

8.3.2管理員登錄功能

管理員登錄功能實現參考:功能04-會員登錄

詳細代碼請看 https://github.com/liyuelian/furniture_mall.git

  1. entity層增加Admin實體,進行admin表映射。

  2. dao層增加AdminDAO介面,,由AdminDAOImpl實現該介面方法,同時AdminDAOImpl繼承BasicDAO,用於查詢資料庫中有無對應Admin用戶返回對應信息

  3. utils包創建AdminDAOImplTest類並測試

  4. Service層創建AdminService介面,AdminServiceImpl實現該介面

  5. utils包中創建AdminServiceImplTest類並測試

  6. web層創建AdminServlet並配置,該Servlet對接前端頁面。根據功能06-web層Servlet減肥中的方法,AdminServlet直接繼承BasicServlet,只需要在AdminServlet編寫業務代碼即可,不需要實現doPost方法。doPost由抽象父類BasicServlet使用反射+動態綁定回調

    AdminServlet:

    package com.li.furns.web;
    
    import com.li.furns.entity.Admin;
    import com.li.furns.service.AdminService;
    import com.li.furns.service.impl.AdminServiceImpl;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /**
     * @author 李
     * @version 1.0
     */
    public class AdminServlet extends BasicServlet {
        private AdminService adminService = new AdminServiceImpl();
    
        public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //獲取用戶輸入的賬號密碼
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            //構建一個Admin對象
            Admin admin = new Admin(null, username, password, null);
            if (adminService.login(admin) == null) {
                //登錄失敗,返回管理員登錄頁面並提示錯誤信息
                request.setAttribute("errInfo", "登錄失敗,賬號信息有誤");
                request.getRequestDispatcher("/views/manage/manage_login.jsp")
                        .forward(request, response);
            } else {
                //登錄成功,跳轉到manage_menu.jsp
                request.getRequestDispatcher("/views/manage/manage_menu.jsp")
                        .forward(request, response);
            }
        }
    }
    
  7. 修改前端頁面manage_login.jsp(登錄表單提交註意添加隱藏域)

8.3.3顯示家居功能

詳細代碼請看 https://github.com/liyuelian/furniture_mall.git

  1. entity層增加Furn實體

    這裡如果Furn實體的屬性名和對應表的欄位不一致,可以通過給查詢的欄位起別名的方法解決

  2. dao層增加FurnDAO介面,由FurnDAOImpl實現該介面,同時繼承BasicDAO,用於查詢資料庫furn表中的所有信息

  3. utils包創建FurnDAOImplTest類並測試

  4. service層添加FurnService介面,由FurnServiceImpl實現該介面

  5. utils包創建FurnServiceImplTest類並測試

  6. web層創建FurnServlet並配置(配置的url為/manage/furnServlet,目的是為了之後使用過濾器可以更好地限制訪問許可權),該Servlet對接前端頁面。直接繼承BasicServlet,只需要在Servlet中編寫業務代碼即可。

    package com.li.furns.web;
    
    import com.li.furns.entity.Furn;
    import com.li.furns.service.FurnService;
    import com.li.furns.service.impl.FurnServiceImpl;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.util.List;
    
    public class FurnServlet extends BasicServlet {
    
        private FurnService furnService = new FurnServiceImpl();
        
        protected void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            List<Furn> furns = furnService.queryFurns();
            //將furns集合放入到request域中
            req.setAttribute("furns", furns);
            //請求轉發
            req.getRequestDispatcher("/views/manage/furn_manage.jsp")
                    .forward(req, resp);
        }
    }
    
  7. 在對接的前端頁面furn_manage.jsp,使用jstl將接收到的家居集合顯示出來

8.3.4整合管理員登錄和顯示家居功能

image-20221217222810650

上述兩個功能的流程為,管理員登錄後由AdminServlet請求轉發到manage_menu.jsp頁面,點擊頁面上的“家居管理”,FurnServlet請求轉發到furn_manage.jsp頁面,該頁面顯示所有家居信息。

8.4完成測試

image-20221217194751739 image-20221217224154740 image-20221217224313664
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 概念 1. 鏡像 包含文件系統的面向Docker引擎的只讀模板,給應用程式提供運行環境。CentOS、Ubuntu鏡像指裝載有該操作系統的模板,也可以在這之上裝一些軟體,例如Nginx鏡像,Flask鏡像等。 2. 容器 容器是指鏡像創建的實例,相當於一個輕量級的虛擬機,Docker利用容器來 ...
  • 1、引言 說到預編譯,大家立刻就能想到#define、#if、#ifdef和#ifndef等熟悉的預編譯命令。其實#include,我們通常放在源文件用來包含頭文件,它也是預編譯命令。當然這不是這篇文章的重點。 這篇文章主要講解下#error預編譯命令,對於什麼是預編譯,預編譯的作用等基礎知識點不再 ...
  • 1、引言 先聊聊分享這篇文章的原因,在使用STM32時,我發現對於GPIO輸出操作,可以使用GPIOx_ODR寄存器,也可以使用GPIOx_BSRR寄存器。 對應的標準外設庫API介面有 void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t PortV ...
  • 最近在編寫前端界面,硬是一人一周時間加班加點寫完了一個項目的前端界面(一級菜單有12個頁面+一個控制臺大屏,二三級界面有N個),之前預估前端界面的編寫需要一個月,我是自己把自己捲死了(沒有辦法,項目經理說項目要1周寫界面,2周發版,我這個項目前端只我1個人,後端有3個人...).......我只想說 ...
  • 最近行程碼下線了,核酸檢測也取消了,但是新冠病毒仍然存在,加上也是流感爆發時期,大家註意防護!!! 陽性無癥狀,你可能並沒有真的感染新冠,新冠病毒是比普通流感病毒要厲害的,會導致發燒的,而且傳染性極強。 新冠病毒一旦入侵你的免疫系統,會瘋狂繁殖,免疫系統會殺不過來的,那咋辦?擺爛,啟動終極保護系統( ...
  • 前言 通過該篇學習了嵌入式的任務調度(即時間片論法)後,瞭解到通過以1ms為調度時間單位輪詢判斷是否需要執行函數任務,那麼下麵介紹如何基於時間片論法的任務調度模式充分利用MCU的資源,姑且先稱這種方式為時間片差分調度法。 充分利用MCU的資源指的是在不影響原有的函數調度情況下合理進行分配,避免MCU ...
  • Kotlin + SpringBoot + JPA 服務端開發 本篇主要介紹一下 kotlin + springboot的服務端開發環境搭建 1.概述 Kotlin 是一個基於JVM的編程語言, 是IDEA開發工具 jetbrains 公司開發的語言,也被google選為android開發的首選語言 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...