99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

JavaWeb超市管理系統(tǒng)畢業(yè)設(shè)計:基于JSP+Servlet+MySQL的完整實現(xiàn)方案

JavaWeb超市管理系統(tǒng)畢業(yè)設(shè)計:基于JSP+Servlet+MySQL的完整實現(xiàn)方案 簡介基于 Java Web 的超市管理系統(tǒng)畢業(yè)設(shè)計項目內(nèi)含完整源碼、數(shù)據(jù)庫腳本和運行配置面向計算機、通信、人工智能、自動化等專業(yè)的學(xué)生、老師及從業(yè)者。項目經(jīng)過調(diào)試與測試答辯評審分達 98 分整體可作為期末課程設(shè)計、課程大作業(yè)或畢業(yè)設(shè)計的直接參考。壓縮包共 386 個文件大小 10.36MB其中 49 個 Java 源文件和 56 個 JSP 頁面構(gòu)成主要業(yè)務(wù)邏輯與頁面層98 個 class 文件為編譯后字節(jié)碼可直接部署運行SQL 腳本可快速導(dǎo)入建庫另有 XML 配置、CSS/LESS/SCSS 樣式、JavaScript 腳本及圖片等資源覆蓋前端展示與后端處理所需內(nèi)容。項目中控制器、DAO 實現(xiàn)類與 JSP 頁面分層明確可快速定位商品、會員、供應(yīng)商、結(jié)賬等核心功能入口。已有 156 人學(xué)習(xí)使用適合作為入門到進階的實踐素材基礎(chǔ)較好的讀者可在現(xiàn)有功能模塊上繼續(xù)擴展也可以按自身需求調(diào)整業(yè)務(wù)邏輯具有較強的二次開發(fā)價值。1. 這個 javaweb 超市管理系統(tǒng)到底在做什么值不值得選每年畢業(yè)季總有人從各種渠道下載到基于 javaweb 的超市管理系統(tǒng)這類項目解壓后對著十幾個文件夾和一坨 XML 配置發(fā)呆要么數(shù)據(jù)庫連不上要么頁面 404最后一邊罵怎么跑不起來一邊又找下一個源碼包。實際上這個題目是 javaweb 方向最穩(wěn)妥的畢業(yè)設(shè)計選題之一它不追求新框架而是把 JSP、Servlet、MySQL、JDBC 這一套經(jīng)典技術(shù)棧完整串起來做成一個業(yè)務(wù)閉環(huán)完整的系統(tǒng)。你做完它既能在答辯時把每一行代碼講明白又能在簡歷上寫?yīng)毩⑼瓿蛇M銷存核心模塊設(shè)計與實現(xiàn)。如果你正在糾結(jié)選題或者已經(jīng)在做但卡在某個環(huán)節(jié)這篇文章把從建庫到部署的完整方案拆開講。這個系統(tǒng)的價值不在于超市這個業(yè)務(wù)本身而在于它覆蓋了 javaweb 項目最常見的三類核心需求登錄權(quán)限控制、商品進銷存數(shù)據(jù)流轉(zhuǎn)、報表統(tǒng)計。這些能力換個殼放到圖書管理、藥店管理、倉庫管理系統(tǒng)里完全通用。它的技術(shù)棧舊但不過時——你去看很多公司的老舊維護項目還在用 JSPServlet 的并不少見。適合的人群很明確JavaWeb 剛學(xué)完、需要鞏固綜合能力的學(xué)生以及想快速搭建一個能演示、能答辯、能寫進簡歷的項目的人。2. 選型與數(shù)據(jù)庫設(shè)計為什么用 JSPServlet 而不是 Spring Boot2.1 技術(shù)選型畢業(yè)設(shè)計場景下 jspservlet 依舊是穩(wěn)妥方案很多人會問現(xiàn)在企業(yè)里都用 Spring Boot為什么畢業(yè)設(shè)計還選 Servlet這不是技術(shù)落后而是答辯邏輯決定的。畢業(yè)設(shè)計評委會問你連接池怎么做請求怎么分發(fā)事務(wù)怎么控制如果你用 Spring Boot這些都被框架封住了你說不出底層實現(xiàn)只能答框架幫我處理了這在本科答辯里很吃虧。而 JSPServlet 這套組合你能明確說出瀏覽器發(fā)請求到 TomcatServlet 接收請求調(diào)用業(yè)務(wù)層業(yè)務(wù)層通過 JDBC 操作 MySQL數(shù)據(jù)渲染到 JSP 頁面返回。這條鏈路每一個環(huán)節(jié)都是你自己的代碼評委看得見你的工作量。常見做法是三層的 MVC 結(jié)構(gòu)JSP 負責頁面展示Servlet 負責接收請求和控制跳轉(zhuǎn)ServiceDAO 負責業(yè)務(wù)邏輯和數(shù)據(jù)庫操作。有些同學(xué)會把業(yè)務(wù)全寫在 Servlet 里頁面里嵌大量 Java 代碼系統(tǒng)照樣能跑但數(shù)據(jù)庫連接不關(guān)、SQL 拼字符串這些問題會在答辯時被追問得很痛苦。我一般建議用 Druid 連接池配合 JdbcTemplate 或者原生 JDBC 封裝既避免手寫連接管理的低級錯誤又保留了 SQL 的可見性。2.2 建庫建表八張表拆解超市業(yè)務(wù)的最小閉環(huán)數(shù)據(jù)庫是標題里含數(shù)據(jù)庫的分量所在表結(jié)構(gòu)設(shè)計得好不好答辯時一眼就能看出來。超市管理系統(tǒng)最少需要八張表用戶表、商品分類表、商品表、供應(yīng)商表、進貨單表、進貨明細表、銷售單表、銷售明細表。用戶表管登錄分類表管商品的層級歸類商品表是核心進貨和銷售通過單據(jù)表加明細表的方式記錄這樣每一筆業(yè)務(wù)都有據(jù)可查。先創(chuàng)建數(shù)據(jù)庫再按依賴順序建表以下是核心建表腳本MySQL 5.7 及以上均可運行CREATE DATABASE IF NOT EXISTS supermarket_db DEFAULT CHARACTER SET utf8mb4; USE supermarket_db; -- 用戶表區(qū)分管理員、收銀員、倉管員 CREATE TABLE t_user ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(32) NOT NULL UNIQUE COMMENT 登錄名, password VARCHAR(64) NOT NULL COMMENT 存儲MD5加密后密文, real_name VARCHAR(32) COMMENT 姓名, role TINYINT NOT NULL DEFAULT 1 COMMENT 1管理員 2收銀員 3倉管員, create_time DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINEInnoDB COMMENT用戶表; -- 商品表中庫存字段承擔關(guān)鍵預(yù)警職責 CREATE TABLE t_product ( id INT PRIMARY KEY AUTO_INCREMENT, category_id INT NOT NULL COMMENT 關(guān)聯(lián)分類表, product_code VARCHAR(32) NOT NULL UNIQUE COMMENT 商品編碼掃碼槍掃的就是它, product_name VARCHAR(64) NOT NULL, spec VARCHAR(64) COMMENT 規(guī)格如500ml/瓶, unit VARCHAR(8) NOT NULL COMMENT 單位瓶/包/盒, purchase_price DECIMAL(10,2) NOT NULL COMMENT 進價成本計算依據(jù), sale_price DECIMAL(10,2) NOT NULL COMMENT 售價, stock INT NOT NULL DEFAULT 0 COMMENT 當前庫存, stock_min INT NOT NULL DEFAULT 10 COMMENT 庫存預(yù)警下限, status TINYINT DEFAULT 1 COMMENT 1上架 0下架, create_time DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINEInnoDB COMMENT商品表;這段 SQL 里最值得注意的設(shè)計決策是庫存字段直接冗余在商品表里。有些教程會把庫存設(shè)計成每次進貨和銷售時去單據(jù)明細表里 SUM 計算得到理論上更規(guī)范但實際業(yè)務(wù)里每次查詢商品都要掃描所有明細數(shù)據(jù)庫壓力和代碼復(fù)雜度都不合算。在超市這種高頻讀商品的場景下冗余一個 stock 字段讓查詢變成一次主鍵讀取配合事務(wù)控制來保證不超賣是工程上更務(wù)實的做法。商品編碼 product_code 建議用純數(shù)字條碼格式后面對接掃碼槍輸入時不需要改代碼。供應(yīng)商表、進貨單表和明細表的結(jié)構(gòu)同樣要注意關(guān)聯(lián)方式。進貨單主表只存供應(yīng)商、操作員、總金額、進貨時間每一條商品進入進庫明細表。這種主表明細表的設(shè)計在銷售單上同樣適用是進銷存系統(tǒng)的通用范式。下面把這三張表的建表語句補全CREATE TABLE t_supplier ( id INT PRIMARY KEY AUTO_INCREMENT, supplier_name VARCHAR(64) NOT NULL, contact VARCHAR(32) COMMENT 聯(lián)系人, phone VARCHAR(20), address VARCHAR(128) ) ENGINEInnoDB COMMENT供應(yīng)商表; -- 進貨單主表一筆進貨對應(yīng)一條記錄 CREATE TABLE t_stock_in ( id INT PRIMARY KEY AUTO_INCREMENT, supplier_id INT NOT NULL, user_id INT NOT NULL COMMENT 操作員, total_amount DECIMAL(10,2) NOT NULL COMMENT 進貨總金額冗余存儲便于統(tǒng)計, stock_in_time DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINEInnoDB COMMENT進貨單主表; -- 進貨明細一條主表記錄對應(yīng)多行商品 CREATE TABLE t_stock_in_item ( id INT PRIMARY KEY AUTO_INCREMENT, stock_in_id INT NOT NULL, product_id INT NOT NULL, quantity INT NOT NULL COMMENT 進貨數(shù)量, price DECIMAL(10,2) NOT NULL COMMENT 當時進價商品改價不影響歷史單據(jù) ) ENGINEInnoDB COMMENT進貨明細表;明細表里冗余 price 字段是一個關(guān)鍵設(shè)計如果商品進價變動歷史單據(jù)里的價格仍然保持錄入時的值不會跟著商品表一起變。這在做利潤統(tǒng)計和審計時非常重要。另一個關(guān)鍵點是金額的冗余存儲進貨單主表里的 total_amount 是通過明細算完后寫進去的統(tǒng)計某月進貨總額直接 SUM 主表即可不用再 JOIN 明細表這是典型的以空間換時間的做法。2.3 把 SQL 導(dǎo)入數(shù)據(jù)庫并驗證表結(jié)構(gòu)建表語句準備好后啟動 MySQL 服務(wù)在命令行或者 Navicat 里執(zhí)行腳本。如果你用的是 MySQL 8.0 以上版本要注意驅(qū)動和連接串的差異這在后面連接池配置時會詳細講。導(dǎo)入后執(zhí)行SHOW TABLES;應(yīng)該能看到全部八張表再執(zhí)行DESC t_product;檢查字段類型確認utf8mb4字符集沒有亂碼風(fēng)險。創(chuàng)建一個測試用戶并插入一條商品數(shù)據(jù)方便后面聯(lián)調(diào)登錄和商品查詢功能INSERT INTO t_user(username, password, real_name, role) VALUES(admin, MD5(123456), 系統(tǒng)管理員, 1); INSERT INTO t_product(category_id, product_code, product_name, unit, purchase_price, sale_price, stock, stock_min) VALUES(1, 6901234567890, 農(nóng)夫山泉550ml, 瓶, 1.20, 2.00, 100, 20);這里插入的是 MD5 加密后的密碼實際開發(fā)中更好的做法是 MD5 加鹽但畢業(yè)設(shè)計用 MD5 已經(jīng)足夠描述清楚你的加密方案。注意建表順序——先建用戶表和分類表再建商品表因為商品表的外鍵依賴分類表如果順序反過來會報 1215 錯誤無法添加外鍵約束。3. 搭建 javaweb 項目骨架Maven 結(jié)構(gòu)、連接池和第一個 Servlet3.1 用 IDEA 新建項目并引入依賴現(xiàn)在開始建工程。這里以 IDEA 2022 及以上版本為例新建項目時選擇 Maven 的 webapp 模板或者直接建一個普通 Maven 項目再右鍵添加框架支持—Web兩種方式都可以。項目結(jié)構(gòu)上src/main/java放 Java 代碼src/main/resources放配置文件和 SQL 腳本src/main/webapp放 JSP 頁面和靜態(tài)資源。這里要提醒一下很多畢業(yè)設(shè)計源碼包是從 Eclipse 導(dǎo)出的目錄結(jié)構(gòu)是 src/webroot拿到 IDEA 里要手動調(diào)整否則部署時找不到 JSP 文件。我見過太多人卡在這步。在pom.xml里引入關(guān)鍵依賴版本要匹配你本機的環(huán)境和 Tomcat 版本。下面是核心依賴配置dependencies !-- Servlet APITomcat 9 對應(yīng) javax.servlet-api 4.0.1 -- dependency groupIdjavax.servlet/groupId artifactIdjavax.servlet-api/artifactId version4.0.1/version scopeprovided/scope /dependency !-- JSP API -- dependency groupIdjavax.servlet.jsp/groupId artifactIdjavax.servlet.jsp-api/artifactId version2.3.3/version scopeprovided/scope /dependency !-- JSTL 標簽庫 -- dependency groupIdjstl/groupId artifactIdjstl/artifactId version1.2/version /dependency !-- MySQL 驅(qū)動按本地數(shù)據(jù)庫版本選擇8.0.33 兼容 5.7 和 8.0 -- dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version8.0.33/version /dependency !-- Druid 連接池 -- dependency groupIdcom.alibaba/groupId artifactIddruid/artifactId version1.2.20/version /dependency /dependenciesscope為 provided 的依賴在打包時不會打進去因為 Tomcat 自帶 Servl et 和 JSP 的 API 實現(xiàn)重復(fù)打入反而會報沖突。如果本地 MySQL 是 5.6 或 5.7也可以把連接驅(qū)動換成mysql-connector-java 5.1.49對應(yīng)的driverClassName也要同步調(diào)整。Druid 是目前國內(nèi)中小項目里最常用的連接池提供監(jiān)控頁面和 SQL 防注入功能答辯時可以多講它它不只是連接復(fù)用還能幫你看到每個 SQL 的執(zhí)行耗時。3.2 編寫 db.properties 和 Druid 工具類連接配置單獨放在src/main/resources/db.properties里方便切換環(huán)境。這里有一個高頻踩坑點MySQL 8.0 的連接驅(qū)動類名是com.mysql.cj.jdbc.Driver而 5.7 時代是com.mysql.jdbc.Driver抄舊源碼的人經(jīng)常在這里翻車。另外連接串里要顯式指定useUnicodetruecharacterEncodingutf8和serverTimezone否則插入中文數(shù)據(jù)會亂碼高版本 MySQL 還會直接報時區(qū)錯誤。driverClassNamecom.mysql.cj.jdbc.Driver urljdbc:mysql://127.0.0.1:3306/supermarket_db?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/Shanghai usernameroot password你自己的密碼 # 初始連接數(shù)、最大連接數(shù)、最大等待時間 initialSize5 maxActive20 maxWait60000在java目錄下建com.supermarket.util.DBUtil類。這個工具類全局只創(chuàng)建一個 DruidDataSource 實例所有 DAO 層代碼都通過它拿連接和釋放資源。注意這里必須用靜態(tài)代碼塊保證只初始化一次否則每次請求都新建連接池會被系統(tǒng)資源直接拖垮package com.supermarket.util; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.InputStream; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.util.Properties; public class DBUtil { private static DataSource dataSource; static { try { InputStream in DBUtil.class.getClassLoader().getResourceAsStream(db.properties); Properties props new Properties(); props.load(in); dataSource DruidDataSourceFactory.createDataSource(props); } catch (Exception e) { throw new ExceptionInInitializerError(數(shù)據(jù)庫連接池初始化失敗 e.getMessage()); } } public static Connection getConnection() throws Exception { return dataSource.getConnection(); } /** 數(shù)據(jù)庫連接池中拿到的連接調(diào)用 close() 只是歸還連接 */ public static void close(Connection conn, Statement stmt, ResultSet rs) { try { if (rs ! null) rs.close(); } catch (Exception ignored) {} try { if (stmt ! null) stmt.close(); } catch (Exception ignored) {} try { if (conn ! null) conn.close(); } catch (Exception ignored) {} } }代碼邏輯上這類工具類是整個系統(tǒng)的地基。任何 DAO 里都通過DBUtil.getConnection()拿連接用完必須調(diào)用close()歸還。Druid 的close()行為不是真正關(guān)閉連接而是歸還到池里這一點要在答辯時說清楚——你并不是放棄了連接而是在做連接復(fù)用。參數(shù)方面maxActive設(shè) 20 對畢業(yè)設(shè)計足夠并發(fā)量不大的情況下 20 個連接已經(jīng)富余maxWait設(shè) 60000 表示如果池里沒有空閑連接最多等待 60 秒超時則拋出異常避免請求無限阻塞。3.3 用 BaseServlet 統(tǒng)一請求分發(fā)告別 Servlet 類爆炸如果按傳統(tǒng)方式做商品模塊要寫商品列表 Servlet、添加商品 Servlet、刪除商品 Servlet……一個模塊三四張 Servlet 類整個系統(tǒng)會膨脹到二十多個類維護起來非常痛苦。這里換一種思路寫一個 BaseServlet 子類利用反射根據(jù)請求參數(shù)里的action值來路由到子類的具體方法。這是一個 show 代碼功力明顯的設(shè)計答辯時講出來能加分不少。BaseServlet 代碼如下package com.supermarket.servlet; import com.supermarket.util.DBUtil; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.lang.reflect.Method; /** * 所有業(yè)務(wù) Servlet 的父類 * 子類通過繼承它自動獲得按 action 參數(shù)分發(fā)請求的能力 */ public class BaseServlet extends HttpServlet { Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding(UTF-8); String action req.getParameter(action); if (action null || action.isEmpty()) { resp.sendError(400, 缺少 action 參數(shù)); return; } try { // 反射調(diào)用子類中與 action 同名的方法 Method method this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class); method.setAccessible(true); method.invoke(this, req, resp); } catch (Exception e) { throw new ServletException(請求分發(fā)失敗 action, e); } } }邏輯上所有的業(yè)務(wù) Servlet 都繼承這個 BaseServlet新增加一個功能只需要在當前 Servlet 里多寫一個 public 方法方法名就是 action 的值。例如ProductServlet里有l(wèi)ist方法和add方法前端請求product?actionlist就會自己走到 list 方法。到了 Servlet 3.0 以后映射關(guān)系用 WebServlet 注解寫在子類上不用再改 web.xml代碼能少寫一大截。反射調(diào)用的性能損耗可以忽略不計Tomcat 會復(fù)用 Servlet 實例。對應(yīng)的寫一個 LoginServlet 演示登錄邏輯和 Session 控制WebServlet(/login) public class LoginServlet extends BaseServlet { /** 渲染登錄頁面 */ public void toLogin(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.getRequestDispatcher(/login.jsp).forward(req, resp); } /** 校驗登錄 */ public void doLogin(HttpServletRequest req, HttpServletResponse resp) throws Exception { String username req.getParameter(username); String password MD5Util.md5(req.getParameter(password)); UserDao userDao new UserDao(); User user userDao.findByUsernameAndPassword(username, password); if (user ! null) { // 存入 Session后續(xù)用過濾器判斷是否已登錄 req.getSession().setAttribute(loginUser, user); resp.sendRedirect(req.getContextPath() /product?actionlist); } else { req.setAttribute(errorMsg, 用戶名或密碼錯誤); req.getRequestDispatcher(/login.jsp).forward(req, resp); } } }MD5Util 是一個自己封裝的工具類對MessageDigest做包裝把密碼摘要成十六進制字符串。注意這里有個安全習(xí)慣數(shù)據(jù)庫里存的是 MD5 密文用戶輸入密碼后要在 Java 端先加密再比較絕不能WHERE password$password直接拼接明文。登錄成功后用重定向而不是轉(zhuǎn)發(fā)這樣可以防止用戶刷新頁面時重復(fù)提交表單。Session 里的 loginUser 會被后面的登錄過濾器讀取這是 javaweb 項目做權(quán)限控制的標準姿勢。3.4 登錄過濾器和 web.xml 配置讓未登錄用戶無法訪問敏感頁面登錄校驗做完必須配上過濾器攔住那些不登錄就輸入 URL 訪問頁面的請求。創(chuàng)建一個 LoginFilter 實現(xiàn)javax.servlet.Filter接口在doFilter方法里判斷 Session 是否存在用戶存在就放行不存在直接重定向到登錄頁。要注意放行靜態(tài)資源和登錄相關(guān)的 URL否則模板引擎一加載 CSS 圖片就被攔住了頁面會變成純文本裸奔。filter filter-nameloginFilter/filter-name filter-classcom.supermarket.filter.LoginFilter/filter-class /filter filter-mapping filter-nameloginFilter/filter-name !-- 攔所有請求但靜態(tài)資源和登錄頁需要手動放行 -- url-pattern/*/url-pattern /filter-mapping如果項目用的是純注解方式也可以用WebFilter(/*)但是要注意dispatcher配置在 web.xml 和注解混用時代很容易出現(xiàn)過濾器重復(fù)執(zhí)行。配置完成后啟動 Tomcat瀏覽器訪問http://localhost:8080/supermarket/login能看到登錄頁面說明環(huán)境已經(jīng)通了一半——接下來用測試賬號登錄并跳到商品列表頁這一條鏈路跑通后面所有模塊的排查思路就清晰了。4. 核心業(yè)務(wù)實現(xiàn)進貨入庫和 POS 收銀的事務(wù)與庫存聯(lián)動4.1 進貨入庫主表明細表的寫入邏輯超市系統(tǒng)最核心的閉環(huán)是進貨 → 入庫 → 上架 → 銷售 → 庫存扣減。進貨這一步頁面是選擇供應(yīng)商 動態(tài)添加商品行提交到后端時請求里會攜帶一個供應(yīng)商 ID、多個商品 ID 和數(shù)量。這里故意設(shè)計成單個 Servlet 的單個方法一次性接收所有參數(shù)不能再走常見的逐條保存。具體邏輯拆解如下WebServlet(/stockIn) public class StockInServlet extends BaseServlet { public void add(HttpServletRequest req, HttpServletResponse resp) throws Exception { int supplierId Integer.parseInt(req.getParameter(supplierId)); int userId ((User) req.getSession().getAttribute(loginUser)).getId(); String[] productIds req.getParameterValues(productId); String[] quantities req.getParameterValues(quantity); String[] prices req.getParameterValues(price); // 內(nèi)部累加總金額同時生成主表記錄 double totalAmount 0; for (int i 0; i productIds.length; i) { totalAmount Double.parseDouble(prices[i]) * Integer.parseInt(quantities[i]); } Connection conn null; try { conn DBUtil.getConnection(); // 開啟事務(wù)之后任何一步失敗進庫主表都不會留下殘缺數(shù)據(jù) conn.setAutoCommit(false); StockInDao stockInDao new StockInDao(); StockInItemDao itemDao new StockInItemDao(); ProductDao productDao new ProductDao(); // 1. 插入進貨單主表拿到自增 ID int stockInId stockInDao.insert(conn, supplierId, userId, totalAmount); // 2. 逐條插入明細表 for (int i 0; i productIds.length; i) { int productId Integer.parseInt(productIds[i]); int quantity Integer.parseInt(quantities[i]); double price Double.parseDouble(prices[i]); itemDao.insert(conn, stockInId, productId, quantity, price); // 3. 同步累加商品庫存 productDao.increaseStock(conn, productId, quantity); } // 全部成功才提交 conn.commit(); resp.sendRedirect(req.getContextPath() /stockIn?actionlist); } catch (Exception e) { // 異常則整體回滾保證數(shù)據(jù)一致 conn.rollback(); throw new ServletException(進貨失敗已回滾 e.getMessage(), e); } finally { conn.setAutoCommit(true); DBUtil.close(conn, null, null); } } }這段代碼有兩個關(guān)鍵點必須講給讀者。第一是conn.setAutoCommit(false)開啟手動事務(wù)把插主表 插明細 更新庫存變成一個原子操作任何一步拋異常所有已執(zhí)行的操作全部回滾。如果沒有事務(wù)極容易出現(xiàn)主表寫了一條進貨單但庫存沒加上的臟數(shù)據(jù)。第二是 DAO 方法全部接受Connection參數(shù)——這是為了保證它們參與同一個事務(wù)而每個方法內(nèi)部不能再自己DBUtil.getConnection()拿新連接否則事務(wù)就斷開了。這是很多不成熟的源碼最常見的錯誤把事務(wù)相關(guān)的代碼寫得看似有但實際無效。參數(shù)說明上productIds使用getParameterValues接收同名參數(shù)數(shù)組這要求前端表單里每個商品行的name屬性都叫productId。如果實際運行時只拿到一條數(shù)據(jù)先去看瀏覽器 Network 面板再決定是改前端還是改后端。totalAmount在 Java 端累加后寫入主表避免數(shù)據(jù)庫里多次 SUM 帶來的性能浪費。庫存更新用的increaseStock是 PreparedStatement 的UPDATE t_product SET stock stock ? WHERE id ?這比先 SELECT 再 UPDATE 的讀改寫方式更安全不會因為并發(fā)讀取舊值而覆蓋掉中間的變動。4.2 收銀出庫同時扣庫存和生成銷售單收銀臺是另一個高頻操作。顧客選完商品后收銀員在頁面逐個掃描條碼系統(tǒng)累加購物車最后點擊結(jié)算后端一次性處理生成銷售單主表、寫入銷售明細、扣減庫存??蹘齑娴?SQL 非常關(guān)鍵——把它設(shè)計成條件更新只有stock 購買數(shù)量時才執(zhí)行成功這正是解決超賣的方法UPDATE t_product SET stock stock - ? WHERE id ? AND stock ?前端收銀頁的核心邏輯是輸入框監(jiān)聽回車事件條碼匹配后通過 AJAX 查詢商品信息把名稱價格追加到購物車列表。這個效果聽起來復(fù)雜但可以用 jQuery 加少量 JavaScript 在 JSP 頁面里實現(xiàn)。關(guān)鍵代碼邏輯是每掃描一個條碼就向product?actionfindByCode發(fā)一個請求成功后往表格里追加一行。結(jié)算時把購物車數(shù)據(jù)依次填到隱藏表單字段里一次性提交全部數(shù)據(jù)。這種設(shè)計要說明的是數(shù)據(jù)量在單次幾十件以內(nèi)時完全沒有性能壓力不需要把購物車放到 Session 里每次結(jié)算都攜帶完整商品數(shù)組即可結(jié)構(gòu)簡單也不容易出錯。4.3 庫存預(yù)警讓項目看起來會思考進銷存之外一個加分模塊是庫存預(yù)警。商品表里的stock_min字段此刻派上用場商品列表頁加載時對所有stock stock_min的商品打上紅色標記首頁再用一個 SQL 查出需要補貨的商品數(shù)量。這個功能實現(xiàn)難度低、可視性強答辯時評委一般都會看上兩眼。典型實現(xiàn)是商品列表 DAO 里加一個方法public ListProduct findLowStockList(Connection conn) { String sql SELECT * FROM t_product WHERE stock stock_min ORDER BY (stock_min - stock) DESC; return queryList(conn, sql); }把低庫存列表放到后臺首頁登錄后第一眼就能看到哪些商品需要補貨這就是整個系統(tǒng)里最有業(yè)務(wù)價值的功能之一。從能用到好用庫存預(yù)警是一個性價比很高的功能點。對比維度上它和銷售時段統(tǒng)計報表一樣可以讓項目在功能列表里多出決策輔助這一分類而后者可以基于銷售單據(jù)表按小時分組聚合SQL 復(fù)雜一點但同樣可控。5. 部署和測試避坑5 個你能遇到的痛苦時刻和對應(yīng)解法5.1 現(xiàn)象Druid 啟動直接拋 ClassNotFoundException項目根本起不來這個報錯是驅(qū)動 JAR 沒有真正進入 Tomcat 的 classpath 造成的。原因一般是 Maven 依賴沒導(dǎo)入全或者是 IDEA 的 Artifacts 配置里沒有把 mysql-connector 這個 jar 加入WEB-INF/lib。很多人只在 pom.xml 里寫了依賴就以為萬事大吉實際上 IDEA 要把依賴打進去還需要重新構(gòu)建 Artifact。解決方法是打開File → Project Structure → Artifacts在 Output Layout 里右鍵Put into Output Root把mysql-connector-java和druid的 jar 加入WEB-INF/lib然后Build → Rebuild Project。如果還是報錯用壓縮軟件打開生成的 war 包檢查WEB-INF/lib下有沒有這兩個 jar這個土辦法最直觀。5.2 現(xiàn)象插入數(shù)據(jù)庫的中文全是問號或者變成 ?23? 這類亂碼原因通常是三層字符集不一致數(shù)據(jù)庫表字符集、JDBC 連接串字符集、JSP 頁面字符集。建庫時已經(jīng)用了utf8mb4連接串里也寫入characterEncodingutf8那亂碼多半出在 JSP 或者請求編碼上。檢查所有 JSP 頁面開頭是否有% page languagejava contentTypetext/html; charsetUTF-8 pageEncodingUTF-8%以及 Tomcat 是否設(shè)置了 URI 編碼在conf/server.xml的 Connector 節(jié)點上加URIEncodingUTF-8。GET 請求的參數(shù)默認按 ISO-8859-1 解碼這是鄙視鏈最頂端一個隱藏很深的坑POST 請求則靠req.setCharacterEncoding(UTF-8)解決。如果你每一步都對還是亂碼用數(shù)據(jù)庫客戶端直接執(zhí)行 SQL 插入一條中文數(shù)據(jù)能正常顯示的話說明問題確實在應(yīng)用層。5.3 現(xiàn)象登錄后跳轉(zhuǎn)商品列表 404控制臺找不到任何錯誤這種情況大概率不是代碼錯了而是訪問路徑不對。Servlet 配置的映射是/product但請求里寫成了/productServlet或者 JSP 頁面里表單 action 寫的路徑?jīng)]有帶req.getContextPath()。在 IDEA 內(nèi)置 Tomcat 中運行時應(yīng)用上下文路徑就是部署時設(shè)置的名稱比如http://localhost:8080/supermarket_war_exploded/后面這串又臭又長的路徑是 IDEA 默認生成的應(yīng)該手動改成/supermarket。修改方式Edit Configurations → Deployment → Application context改成/supermarket以后所有鏈接統(tǒng)一以${pageContext.request.contextPath}開頭。這一步是新手花時間最多的地方不是代碼邏輯問題而是工程配置問題要一步步排查。5.4 現(xiàn)象服務(wù)器啟動后訪問報 500堆棧里提示 Client does not support authentication protocol requested by server這是 MySQL 8.0 特有的坑默認密碼加密方式是caching_sha2_password而老版本的 MySQL 驅(qū)動 JDBC 不支持。解決方法是把驅(qū)動升級到 8.0 以上或者把用戶密碼認證方式改成mysql_native_password。在數(shù)據(jù)庫里執(zhí)行ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 你的密碼; FLUSH PRIVILEGES;如果改了還是報錯檢查連接串里是否漏加了serverTimezoneAsia/Shanghai高版本 MySQL 驅(qū)動要求必須顯式指定時區(qū)否則連接時會拋 SQLException。這些其實都不是復(fù)雜原理就是每個做 javaweb 的人都會走一遍的路說出來是為了讓你遇到時不用問人也能自己判斷。5.5 現(xiàn)象兩個用戶同時買同一個商品庫存變成負數(shù)這屬于典型的并發(fā)超賣問題。原因在于用先 SELECT stock 再 UPDATE stock stock - 1兩步操作兩個請求同時讀到舊庫存就會互相覆蓋。解決方案就是前面收銀出庫部分寫的條件更新 SQLUPDATE t_product SET stock stock - ? WHERE id ? AND stock ?讓數(shù)據(jù)庫自己去判斷扣減條件而不是靠 Java 代碼先查后設(shè)。這個 SQL 保證了只有當前庫存大于等于本次購買數(shù)量時才會真正執(zhí)行更新JDBC 返回的影響行數(shù)為 0則說明庫存不足本次結(jié)算直接提示用戶。這種處理在數(shù)據(jù)庫層面保證了原子性也是進銷存系統(tǒng)最常被考察的點。6. 答辯前做這兩件事數(shù)據(jù)驗證和報表之星系統(tǒng)功能做完別急著寫論文先用數(shù)據(jù)驗證證明系統(tǒng)的可靠性。準備一個十行左右的 SQL 腳本模擬多次進貨和多次銷售然后核對商品表庫存是否等于進貨總量減銷售總量。如果一致說明事務(wù)控制正確如果不一致回頭檢查 4.1 節(jié)里的事務(wù)邊界是否有 Service 層繞過 Connection 參數(shù)的問題。這一步的驗證結(jié)論可以直接寫進畢業(yè)論文的系統(tǒng)測試章節(jié)比你隨便寫幾行測試用例有說服力得多。第二個加分項是做一個簡單的近 30 天銷售趨勢報表頁面。SQL 用DATE_FORMAT(sale_time, %Y-%m-%d)做分組COUNT 算單量SUM 算銷售額每天一條記錄返回。頁面放一個表格或者用 ECharts 畫個折線圖展示波峰波谷日期。這個功能實現(xiàn)的絕對難度不大但它讓項目從增刪改查進階到了數(shù)據(jù)可視化分析答辯時把亮點落在這里評委對工作量的認可度會明顯不一樣。以前帶過的一個學(xué)生技術(shù)棧完全一樣就是多了這個報表答辯成績從良變成了優(yōu)。畢業(yè)設(shè)計項目的價值不完全在于功能數(shù)量而是在于你能把每個功能的設(shè)計緣由和工程權(quán)衡說清楚。希望這些經(jīng)驗?zāi)軒湍阍诖疝q前把系統(tǒng)打磨得又穩(wěn)又亮眼如果一路照著搭下來遇到什么反常識的報錯多半是環(huán)境問題而不是代碼問題別急著刪代碼重來先從配置上找原因。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日日夜夜小色哥| 亚洲成人在线播放| 五月丁香婷婷啪啪网| 久久婷婷东京热大香樵| 激情综合网五月婷婷| 青青草原爱爱网| 天天综合网站| 人妻AV在线| 一本色道久久综合狠狠躁小说| 亚洲成人网站在线观看| 日产精品一线二线三线芒果| 99热97| 中文字幕网站在线观看| www色五月| 激情美女五月天| 日产精品一线二线三线芒果| 五月婷婷六月丁香综合| 色情五月婷婷| 亚洲精品白浆高清久久久久久| 日逼免费视频 | 丁乡久久| 99视频在线| 亚洲日比视频| 六月色播| 国产熟女日日骚五月丁香爱| 五月丁香欧美综合| 九九热这里只有精品556| 色色婷婷五月天| 99久久www| 夜丁香综合| 91精品熟女| 51成人| 狠狠色中色| 天天日天天干天天操| 五月丁香影院| 噜噜狠狠色综合久| 成人短视频在线| 成人综合视频网址| 丁香五月综合| 99热热热99精品丁香| 亭亭玉月丁香| 色999亚洲人成色| 色色色99| 99操逼| 婷婷99视频精品| www.婷婷五月天.com| 五月婷婷激情刺激| 亚洲丁香五月综合| 中文字幕性爱丰满| 亚洲激情.com| 日本色久| 五月丁香六月色| 色色五月婷| 婷婷综合五月| 婷婷在线日韩综合| 亚洲无码99| 亚洲色爱综合| 亚洲午夜av| 久久人人超| 久久99激情| 色噜噜狠狠色综无码久久合欧美| 日韩人妻在线观看| 大香蕉五月天| 亚洲va久久久噜噜噜久久天堂| 激情性爱五月天网页| 99精彩视频网站在线| 中文幕无线码中文字蜜桃| 免费无码毛片一区二区A片| 色五月天电影| 狠狠爱丁香婷| 99久久66| 91天堂网综合| 播五月丁香六月| 久久9视频欧美| 丁香五月婷婷色综合| 亚洲激情四谢| 久久中国毛毛片爱久久| 丁香影院五月综合| 91久久精品无码一区二区三区| 99在线观看精品| 久九色| 久久综合九九| 婷婷五月天男人影院色色网| 久久艹99| 激情内射人妻1区2区3区| 五月开心播播网| 日本WwW色偷偷丁香花久久久京东热| 综合狠久久| 丁香五月激情五月色综合| 色色图五月天| 亚洲AV免费在线| 色综合播放| 婷婷五月天另类网站| 久久er99| 婷婷俺去也| 亚洲乱码日产精品BD| 黄色激情网站在线观看| 天天久久人人| 激情六月综合| 99无码视频| 99热综合在线观看| 亚洲综合字幕色色| 久热免费视频| 久久男人网婷婷| 性生活视频98791| 婷婷丁香77777| 五月色天五月色| 久久五月丁香| 五月激情丁香啪啪| 色五月xxx| 五月天深爱激情网| 婷婷丁香社区| 99热偷拍| 婷婷丁香18| 五月天激情视频| 丁香五月天大香蕉啪啪| 深爱五月激情综合| 99人人操人人操人人精| 在线五月色播| 五月天社区| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | 婷婷综合视频| 婷婷五月天丁香综合网| 国产视频久色| 久久99网| 色婷婷av在线| 人人操人人干AV| 天天干,天天日| 9超碰在线| 婷婷六月丁香激情综合| 五月天婷婷综合网| 日日噜狠狠| 2025年最新亚洲在线欧美| 日本99久久| 狠狠色噜噜狠狠狠777奇米| 网色99| 2025年最新亚洲在线欧美| 色激情五月| 九九色情网五月天| 五月婷婷综合潮喷| 婷婷五月天天aV| 欧美乱码国产一级A片| JAPANRCEP老熟妇乱子伦视频 | 91狠狠色丁香婷婷综合久久精品| 黄久久久| 婷婷五月在线观看| 色一情一乱一乱一区9| 91婷婷五月天综合视频| 国产成人精品亚洲线观看| www.久久爱.com| 99免费视频网| 日韩野外 无套| 婷婷综合另类小说| 97人人干人人操| 九九re精品视频在线观看| 久久婷婷五月综合啪| 99自拍视频| 色五月成人| 成人在线99| 日本色超碰| 中文不卡一二三区| 午夜不卡久久精品无码免费| 思思热久久久久思思热| 一级视频网址| 五月天天视频| 久9热视频在线观看| 97色色色色色| 丁香五月开心亚洲| 五月丁香啪啪婷婷| 丁香五月婷婷在线| 噜噜噜噜噜在线| 激情久久五月天| 色婷婷啪啪啪啪啪啪| 99热在线只有精品| 色婷婷国产精品综合在线观看| 久机视频这只有精品| 色99欧洲色19| 丁香 亚洲 久久| 1024你懂的欧美曰韩| 婷婷色激情五月天| 91九色 婷婷| AV性爱在线| 日韩五月婷婷| 色噜噜狠狠色综合日日| 五月丁香六月婷婷综合免| 久草热在线视频| 婷婷五月丁香五月| 2018夜夜草| 日日做夜夜爱| 色色色色色五月| 极品人妻VideOssS人妻| 7超碰自拍| 深爱婷婷网| 99热久只有精品首页| 桃色成人网| 亚洲婷婷六月天| 97一区二区| 婷婷激情5月| 亚洲黄网在线| 亚洲啪啪视频| 婷婷四色五月| 亚洲色夜| 五月婷婷五月天| 国外亚洲成AV人片在线观看| 婷婷五月天论坛| 超碰天堂网| 五月天婷婷影院影院观看| 五月天停停日日| 91Chinese在线| aaaaaa片| 国产91九色| 色九月| 天天拍夜夜爽| 1024手机在线观看看片_日韩精品| 国产精产国品一二三在观看| 色婷婷色99国产综合精品| 激情婷婷久久| 超碰在线观看三级片| WWW,婷婷,COM| 九九热精品| 电影91久久久| 超碰av在线| 亚洲五月婷天天操| 丁香五月另类色婷婷麻豆| 五月婷婷六月激情| 婷婷色在线视频| 天天综合亚洲综合网天天αⅴ| 色婷婷综合久久| 噜噜噜久久| 被男人添B超爽视频| 热久久99热欧美国产亚洲| 色婷另类| 欧美A A A A A| 婷婷人人操| 天天日狠狠| 久久九⑨| 91男同视频| AV在线大香蕉| 天天干夜晚夜操| 五月网激情| 久久丁香社| 久热无码| 91狠狠综合久久久| 国产毛片精品一区二区色欲黄A片| 国产精品久久久99视频| 日韩在线观看亚洲| 琪琪色网址| 五月色婷婷综合| 五月天婷婷人妻| 超碰在线91| 在线免费观看激情视频| 亚洲中文乱字字幕线在永久| 大香蕉精品视频| 热久免费视频9| 激情综合久久| 五月丁香狠狠爱| 九九视频在线观看| 婷婷五月天偷拍| 99这里只有精品视频免费| 免费操超碰| 五月开心播播网| 大香蕉av在线| 六月婷婷综合| 婷婷激情九月| 亚洲综合无码| 色情五月天丁香社区| 999热成人在线综合网| 色色五月婷婷| 久久婷五月婷| 噜噜噜狠狠色综合| www.超碰在线| 五月丁香激情综合网| 在线不卡中文字幕| 天天综合久久| 色你久久| 成人五月丁香社区| 丁香婷婷网| 人妻AV在线观看| 亚洲成人AV在线| 五月天激情啪啪| 五月丁香婷婷国产精品综合| 97丁香花五月天激情小说| 色碰碰| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 亚洲av成人一区二区电影在线| av大香蕉| 色婷婷成人做爰A片免费看网站| 色播五月丁香| 色五月首页| 欧美日韩99| 五月激情啪啪啪| 丁香五月欧美色综合| 五月丁香婷婷综合视频| 日本美女五月天| 五月天婷婷乱论小说| 五月丁香六月婷婷久久| 色五月婷婷九月| 五月丁香婷婷欧美| 久热 91| 综合大香蕉| 久久久久亚洲AV无码网影音先锋| 久久综合激情| 开心激情站| 国产精品99久久久久久久女警| 人妻少妇色综合| 99热8| 欧美色色色| 五月丁香啪啪| 超碰在线资源| 激情视频91| 成人片在线播放| 人人干人人干骚美女| 婷婷五月丁香五月丁香| 色欲资源网| www激情五月天| 直接看的av| 婷婷成人五月天成人文学| 婷婷五月天AV| 婷婷久久综合| 97成人在线视频| 五月五月婷婷| 亚洲午夜精品久久久久久人妖| 亚洲丁香婷婷五月天综合色| 激情综合色| 欧美色性色好| 99热综合网| 亚洲综合另类| 玖玖爱导航| 国産精品| 第四色婷婷五月| 欧美成人色婷婷| 婷婷午夜综合| 欧美精品中文字幕亚洲专区| 五月亭大香蕉| 丁香婷婷激情五月| 夜夜操狠狠操| 曰韩少妇内射免费播放| 久久狠婷婷| 丁香五月色情| 婷婷色基地| 免费黄色片子| 香港九九六区八区99| 综合性爱网| 蜜乳9188| 香蕉人在线香蕉人在线 | 天天做天天爽| 久久色五月| 精品人妻伦| 99热这里只| 丁香五月成人| 五月天婷婷激情在线色图| 九九色综合| 天天干天天操天天爱| 99在线免费视频| 国产亚洲精品久久久久久郑州| 五月天婷婷激情网| 丁香婷婷啪啪啪| www.久久99热地址发布| 色婷婷在线电影| 99啪99| 97婷婷丁香五月天激情图片| 丁香五月中文字幕| 丁香五月婷婷激情中文| 日日婷婷不卡| 午夜五月天| 婷婷五月丁香国产| 丁香六月色情| 深爱五月婷婷| www.99久| 六月婷婷久久| 丁香天堂夜| 亚洲avjiujiur91| 久久99精品久久久久久噜噜| www。五月,com| 99这里有精品久久97| 色五月婷婷五月| 免费看欧美成人A片无码| 99黄色在线视频精品熟女| 色婷亚洲| 婷婷五月花.97| 五月天色图| 99这里只有| 四川女人毛多水多A片| 亚洲精品99| 色色色热| xxxx五月天色色| 狠狠999| 涩涩五月天| 五月婷婷,狠狠操| 亚洲激情免费视频| 五月天丁香婷婷视频网址| 欧美va精品va老师va| 色噜噜97视频在线观看| 永久免费一区二区三区| 能看的av网站| 五月婷婷九九热| 五月激情综合深爱| 91婷婷视频| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 综合久久久| 婷婷色情五月| 五月婷在线观看| 丁香婷婷五月综合欧美另类| 丁香五月亚洲天堂| 色综合99色| 日日懆天天懆| 久久丁香婷婷色情综合| 婷婷射丁香| 97婷婷五月| 色久免费| 国产三级在线播放| 激情五月天网| 日本一级一片免费视频| 九九久久综合| 婷婷激情五月天综合| 色欲天天综合网| 亚洲免费99| 人人妻人人澡| 亚洲精品乱码久久久久久按摩观| www.狠狠| 色高清无码视频| 久久99最新地址| 五月婷婷视频ab| 九九99精品免费播放| 天天开心AV色综合婷婷五月天| 色欲一区二区三区精品A片| 婷婷AV丁香| 丰满少妇猛烈A片免费看观看| 色天天狠狠干| 韩国不卡AC视频| 凹凸操Av| 色哟哟www| 啪啪综合| 激情五月天在线| 青青草青青草五月天| 337午夜福利| 色站9/| 色噜噜狠狠色综合网| 色综合久久88色综合天天99| 亚洲人妻AV| 这里只有国产精品在线| 热久久色| 色婷婷在线视频| 五月丁香狠狠爱婷婷综合| 日碰日| 九九这里只有精品| 五月天婷婷基地丁香| BBWCUCKOLD精品熟妇| 五月香六月婷| 亚洲精品成人| 丁香色婷婷色手机免费在线| 99超级碰碰| 欧美激情丁香五月| 99A片| www热久久yy9| 情婷婷五月天在线| 国产激情在线观看| 免费AV播放| 五月天婷婷激情春色小说| 亚洲成人AV在线| 97人人草| 丁香狠狠色婷婷久久无码视频| 国产ava| 少妇做爰免费视看片| 午夜国产精品AV在线播放| 久久婷婷夜| 丁香婷婷久久| 国产美女视频久| 噜一噜免费视频| 色五月在线综合| 九月激情网| 开心五月深爱五月婷| av第一二区| www色色com| 草综合14| 五月亭亭激情综合| 婷婷丁香成人| 超碰京东热av男人的天堂| 久久久精品人妻| 天天噜噜| 色五月丁香激情| 色欲久久久久久综合网综合网| 五月丁香色婷婷| AA丁香综合激情| 五月婷无码| 玖玖在线| 月丁香久久久| 天天日天天久久青青| 无码啪啪| 久久这里只有精品热在99| 激情精品久久| 成片免费观看视频大全| 男人天堂 久久| 久久在线视频免费观看| 色色亚洲五月天| 婷婷深爱五月天| 五月色丁香国产在线视频| 狠狠狠狠狠狠色| 婷婷色狠狠| 久热9| 色哟哟精品| 婷婷丁香色无五月 | 色婷婷99| 婷婷午夜精品久久久| 日日操天天| 五月丁香少妇网| 五月丁香婷婷色色| 国产日批视频免费播放| 五月丁香六月激情在线| 996精品热视频| 婷婷五月天午夜激情影院| 激情综合五月色在线| 玖玖99婷婷| 日本九九九九| 91久久久久久久久| 亚洲人妻Av| 可以看的AV| 这里只有精品视频一区| 五月婷婷六月激情网| 久久婷婷五月国产色综合激情| 天天综合五月| 国产精品视频| 熟女网站久久| 久久久性爱视频| 香蕉乱插| 都市激情亚洲| 九九99热| 色婷婷五月色| 日韩999| 日韩啪| 97性视频| 色婷婷丁香| 91丨九色丨白浆秘| 9 1超碰九色| 欧美三级黄色片久久| 综合伊人久久| 情色五月天网站| 久久99热这里只有精品| 丁香五月激情五月| 狠狠色噜噜狠狠| 色五月婷婷网| 久久xxxx| 中文字幕成人| 黄网在线免费| 久久密臀婷婷| 99综合成人视频在线观看| 综合久久十| 一片AV片免费播放| 99色日本| 九九av| 亚洲人人96@| 秋霞电影理论| 五月激情久久| 亚州操操| www.色综合| 国产精产国品一二三在观看| 亚洲色图欧美色图日本视频| 婷婷六月久久| www.五月婷婷.com| 色久播播| 人妻精品久久久久久久| 婷婷亚洲综合| 亚洲色频| 久久久久久久久月丁| 婷婷综合玖玖五月| 天天综合五月| 色五月久久成人婷婷| 婷婷涩五月天综合| 99这里有精品视频| 青青草五月天| 婷久久久| 亚洲九区| 五月天激情图| 婷婷婷久久久| EEUSS鲁片一区二区三区| 亚洲AV成人在线观看| 日本WWW九九九| 亚洲综合在线伊人婷| 人妻五月天激情开心网| 成年人丁香五月| 开心激情网在线| 婷婷99狠狠躁天天久久久九九九| 精品九九网| 婷婷色亚洲| 丁香五月天啪啪激情综和网| 97色在线视频| 婷婷五月激情四射手| 婷婷丁香五月色偷偷| 综合久久婷婷五月丁香| 色导航色婷婷五月天在线观看| 99热国产精品| 丁香五月激情啪啪综合| 亚洲色频| 久久99网| 日韩砖区| 色九九九九| 97人人干| 久综合| 五月婷婷开心六月激情小说| 婷婷色中文字幕| www,99视频| 丁香五月婷婷色| 欧美美美女性色视频| 老司机日日夜夜青草| www.亚洲激情.com| 久久一热免费视频| 日本色99| 日本久久极品| 思思99re这里只有| 五月天婷婷激情小说电影| 97婷婷五月| 99热久久这里只有精品| 欧美人人操| Www.se.久久| 96人人操人人操人人| 开心五月激情网| 99热网精品| 99色激| 激情丁香五月婷婷| 丁香五月天大香蕉啪啪| 九九精品这里只有| 婷婷色网| 日本久久婷婷| 色色色热| 操b视频在线观看一区二区| 国产精产国品一二三在观看 | 99这里只有精品视频免费| 激情五月婷婷综合| 丁香婷婷五月份| 五月天天天综合| 97香蕉久久超级碰碰高清版| 九九re视频在线视频| 色婷五月天网站| www.色综合| 婷婷五月天综合网| 丁香六月婷| 超碰啪啪网| 五月丁香久久激情网| 丁香六月激情综合| 丁香婷婷人妻| 六月丁香婷| 日本色久| 久艹大香蕉| 色九综合| 五月天婷婷色| 亚洲色色五月天| 亚洲另类视频| 九九综合图片网| 中文乱子伦视频| 97涩婷婷婷婷基地| 激情五月婷婷丁香综合网| 久久se 综合网| 色青青视频| 嫩草AV久久伊人妇女超级A| 亚洲色色图片| 日本乱子人伦在线视频| 色小说婷婷五月天天天| 六月丁香网| 怡红院院在线导航网 | 一区二区三区视频| 久久这里只有精品热在99| 91狠狠综合久久久| 色欧洲| 婷婷色女| 午夜天堂一区人妻| 久久性爰视频这里只有精品| 国产女人十八水真多1| 午夜做爱影院| 91互操| 九九久久五月天| 九九色影视| 久久久噜噜噜久久人妻| 免费看欧美成人A片无码| 欧美婷婷六月丁香综合色连续高潮抽搐| 天天色综网| 婷婷基地成人五月天| 日本精品人妻无码77777| 婷婷中文字幕版| 中文字幕操比影片| 欧美丁香五月| 色亚洲无码| 99无码| 日韩色情亚洲五月天婷婷| 婷婷婷久久| 啪啪色区| 天天人人综合| 成人丁香婷婷| 美欧成人视频| 五月天天天操天天爽夜夜操| 中文字幕婷婷9月天| 这里只有精品1| 99热e| www.天天干| 99热在线观看免费| 婷婷五月大香蕉| 亚洲另类在线观看| 自拍盗摄 另类| 99热青青草| 韩国真做片在线观看| 欧美激情-区二区三区| 激情综合在线播放| 色播播五月天| 热久久99热欧美国产亚洲| 婷色五月天| 熟女人妻一区二区三区免费看| 开心婷婷五月天激情网| 天天色天天射天天日| 五月天婷婷永久免费视频| 啪啪操网| 久久这里只有精品热在99| 开心五月激情五月丁香五月婷婷| 偷偷操99| 精品香蕉99久久久久网站 | www.久久| 超级久久久| 五月色影院| 天天天天爽爽天干| 91五月天| 日本在线观看91| 九九热视频在线观看| 黄色AAAAA| 色很很96| 久久精品系列| 深夜婷婷 丁香| 97超碰人人操| 自拍盗摄 另类| 欧美群妇大交乱婬网| 9 1 A v久久久| 开心激情婷婷| 99热综合网| 人人人人人人人草| 丁香婷婷五月天亚洲| 美国不卡视频| 五月综合激情久久| 久久婷婷色| 99成人| 国产另类综合| 五月亚洲激情| 亚洲天堂99| 欧美熟妇一区二区三区| 欧美日本日韩| 开心深爱激情网| 天天综合精品| 色色色.COM| 天天人人天天爽| 五月丁香啪啪激情| 99热丁香五月| 伊人青涩网| 五月丁香网中文字幕| 日本熟妇精品99| 丁香视频| 激情超碰网| www.超碰97| 五月丁香色色网| 日日噜狠狠| 久久精品这里只有精品免费首页| 亚洲婷婷五月天激情综合| 婷婷激情五月天网站| 中美日韩成人在线| 色婷婷色九月| 91视频久久久| 色五月婷婷天堂| 亚洲成AV人片在线观看| 日本强伦片中文字幕免费看| 亚洲高清在线| 中文字幕 中文字幕明步| 久婷| 九九精品自拍| 亚洲视频五区| 久久9精品| 欧美久久网| 午夜婷婷久久 | 97香蕉久久超级碰碰高清版| 五月丁香六月| 久草a片| 欧美激情VA永久在线播放| 免费观看的婷婷五月视频在线| 婷婷涩五月天综合| 26uuu亚洲欧美| 五月婷婷丁香色吧网| 丁香五月天五码婷婷| 6080av| 色色婷婷综合网| 99热777| 久久久精品人妻录| 日日综合网| 99成人在线观看| 色五月亚洲| 99九九玖玖| 啪啪激情网| 天天骑天天操| 五月开心网| 亚洲乱码日产精品BD| 欧美三级A做爰在线观看| 成人无码髙潮喷水A片| 中文中文在线| 国产精品24r| 婷婷丁香视频| 午夜亚洲国产精品av一区二区| 91综合国免费久入| 婷激情五月天视频导航| 成人欧美一区二区三区在线观看| 密乳视频| 99网| 久操婷婷| 思思久久99热只有频精品66| 五月婷婷丁香日韩在线| 日日噜噜久久婷婷五月天| 婷婷99狠狠躁天天躁中文| 色欲色天天香综合| 五月婷婷内射网| 开心综合激情综合| 另类激情首页| 九九热精品| 国产精品久久久久久久久久| 91人人妻人人操人人爽| 久久综合影院| 六月婷婷六月天天在线免费| 久色中文| www.色九月| 五月丁香六月婷综合成人综合| 亚洲第一成人无码A片| 丁香五月成人自拍| 久热大香蕉| 亚洲六月婷| 夜夜操狠狠操| 婷婷五月丁香五月| 激情文学 综合 九月| 亚洲第一黄网| 九九婷婷五月天影视| 婷婷五月天激情小说| 九九99在线免费在线观看视频| 亚洲精品又粗又大又爽A片| AV大片在线观看| 无码激情| 亚洲欧州色情在线观看| 婷婷久月| 久久丁香综合香蕉| 国产精品久久..4399| 色五月开心开心五月激情五月| 激情五月丁香婷婷| 国产乱子轮XXX农村| 97碰碰人人视频| 色婷婷99| 婷婷射丁香| 亚洲AV成人在线| 在线免费观看激情视频| 色性综合| 99亚州综合精品成人网| 久久99网站| 激情婷| 天天色天天爱天天舔| 九九热在线精品| 亚洲乱码日产精品BD| 99热只有精品在线| 极品人妻videosss人妻| 99热日韩| 久久久久五月丁香| 天天在线久久综合| PORNY九色9l自拍视频成人| 婷婷丁香91综合| 99热r| 婷婷五月天电影网| 中文字幕无码AV| 日本色色图| 婷婷五月草| 亚洲精品久久久久久久久久飞鱼| 久久久ww| 99爱视频在线播放| 98国产精品综合一区二区三区 | 五月色在线| 五月丁香婷婷爱| 91色五月在线观看| 日本人妻丁香婷婷久久寝取熟女五月| 国产精品美女| 超碰在线资源| 精品色色网| www.婷婷| 99re热在线视频| www.99热| 日本久碰| 欧美亚洲婷婷五月| 八戒青柠影视剧在线观看| 激情AV| 伊人婷婷综合| 啪啪东京热| 色色网五月激情| 日韩成人中文| 成人欧美一区二区三区在线观看 | 久久草大香蕉| 一级片sese片.COM| 翔田千里 50岁 无码| 丁香六月激情综合网| 久久激情五月天| 色婷青青| 婷婷免费无视频| 香蕉久久国产AV一区二区| 婷婷九月| 99热精品在线播放| 丁香大香蕉| 久99久精品视频| 亚洲AV无码成人精品区电影网| 久久视频这里99| 丁香五月婷婷图片综合| 这里只有国产精品在线| 国产成人精品一区二三区熟女在线| 天天久久66xxx| 日本综合色图| 99小视频在线| 九九在线精品| 久鲁鲁色网| 激情六月天| 亚洲综合新99视频| 久草热久草在线视频| 色婷婷视频| 日本欧美成人片AAAA| 日日操,日日爽| 国产精品成人AV在线观看春天| 五月色欧洲| 韩国中文字幕91| 99精品在线下载| 大香蕉福利导航| 热婷婷在线视频| 色性五月天| 亚洲国产黄色电影| 色五月激情| 99ri视频在线播放| 日韩人妻在线观看| 九九色热| 五月天婷婷小说| wwccc久久久| 五月婷婷丁香日韩在线| 久久免费婷婷视频| 91岛国片| 久色网址| 99在线观看免费精品视频| 国产亚洲精品久久久久久久久动漫| 天天摸日日舔狠狠添婷婷婷| 97色五月丁香婷婷| 天天色天天日| 中文字幕在线日亚州9| 亚洲综合婷婷| 人人看人人草人人摸| 久热伊人在91| 99色综合网| 久久婷婷丁香五月一二三| 97在线观视频免费观看| 99免费视频网| 天天射天天干天插色综合| 天天日天天摸| 亚洲日韩26uuu| 日本天堂久久| 久/久精品99看9| 就爱啪啪婷婷| 综合激情九月婷婷,激情综合婷婷中文字| 丁香五月欧美午夜视频| 婷婷导航| 丁香五月婷婷啪啪视频| 五月婷婷丁香| renrencaoni| WWW色色色COM| 超碰在线成人| 天天操天天日天天爽| 伊人久热91| 涩五月婷婷| 五月丁香花婷婷玉莉AV| 日韩综合久久| 六月成人网| 99精品网| renrencaoni| 97偷拍在线视频| 激情婷婷六月天| 久8色色| 99re热在线视频| 七月丁香婷婷 色色| 色色狼人综合| 99热这里精| 九九精品综合| 丁香婷婷激情网站| 精品五月视频婷婷在线观看| 欧美久久一级内射wwwwww.| 狠狠搞狠狠操| 狠狠婷婷爱| 4399在线观看免费高清黄色视频| 性做爰1一7伦| 人人九色| 人妻 性久久久久久| 91超碰在线观看| 区欧美日韩成人| 五月丁香在线观看| 99热首页| 天天天天天色| 亚洲天堂爱爱| 日本久碰| 极品人妻VIDEOSSS人妻| 日本九九视频| 人人草人人爱手机视频看看| 66精品国产成人| 日本在线视频看se99| 精品一二三区久久AAA片| 亚洲色五月| 丁香五月网在线观看| 丁香五月网站| 4399伦理午夜| 国内熟女黄色系列| 五月丁香综合| 秋霞A V毛片| 思思国产99| 五月色情婷婷开心五月色情| 丁香九九九九| 日韩AV中文字幕在线| 无码 av电影| 亚洲综合色网| 女同激情久久av久久| 第四色婷婷丁香五月| 五月天婷婷丁香花| 久久婷婷五月天激情新地址| 人妻激情视频| 成人 AV播放| 麻豆观看夏晴子| 九九色逼| 丁香婷婷色五月| 操日视频| 亚洲va欧美va天堂v国产综合| 婷婷六月天激情影院| 丁香五月图片| 67194国产| 久久大香蕉同僚| 99热久97| 月色色综合婷婷网| 色综合播放| 久久婷婷五月天丁香| 三人荫蒂添的好舒服A片| 六月色婷婷| 国产成人99久久亚洲综合精品| 色久影院| 五月天婷婷色色网| 五月婷婷五月| 五月天婷婷在线视频| 涩五月色婷婷| 色婷婷AV久久久久久久| 丁香五月六月欧美| 深爱激情av| www.minyis.com【JT】国内CDN落地页保证转化QQ2101460746 | 9久精品| 亚洲热久久| 丁香婷婷色五月| 午夜丁香| 日韩AAAAA| 天天操天天干天天日| 中文AV网站| 天天操天天操天天操天天操天天操| 成人AV在线电影| 四色永久成人网站| 五月天啪啪| 天天干天天干天天干天天干天| 婷婷视频网| 天天日天天爽夜夜爽| 色屌丝中文字幕| www.色综合| 国产一区二区三区影院| 国产真人做爰视频免费| 中国女人做爰A片| 玖玖色综合色| 9久热视频| 18久久| 激情五月,激情综合网| 在线观看av网站| 久操人妻| 99爱在线| 就去涩涩丁香五月天| 日韩在线aaa| 亚洲操操操| 婷婷久久亚洲| 五月婷婷六月色| 国产3p露脸普通话对白| 香蕉久日夜| 亚洲欧美国产A片免费观看| 国产肏屄大片| 婷婷激情五月| 天天色综合色| 五月天久久综合婷婷丁香| 人人草开心五月天| 99热在线观看精品| 婷婷五月天伊人| 中文字幕有多少字| 俺去婷婷 丁香| 国产1区2区3区| 性色播| 中文字幕性爱丰满| www.天天干| 天天操天天曰| 青青久在线视频免费观看| 六月婷婷日| 玖玖色综合网| 无码天天操| 婷婷丁香人妻天天| 亚洲综合久| 亚洲亚洲人成综合网络| 九九视频在线观看视频在线播放69| 日本成人综合| 亚洲精99| 狠狠干在线| 丁香在线视频| 亲子乱AV-区二区三区| 大香蕉99| 亚洲无码成人性爰网| 可以免费观看的av| 婷婷色播婷婷| 六月婷婷日| 婷婷激情小说网| 五月婷婷丁香狠狠撸久久| 大香蕉五月婷婷| 国产做爰视频免费播放| 91久久色| 插插插色综合网| 99激情| 777精品久无码人妻蜜桃| 五月天丁香综合在线| 丁香女人五月天| 99这里只有精品视频| 99在线精品视频| 婷婷五月欧美| 亚洲va日| 成人精品亚洲性爱| 激情五月天色色| 91性人人| www。五月天。com| 99在线精品视频| 伊人久久丁香狠狠婷婷综合香蕉 | 9热在线观看| 色天堂婷婷| 五月婷婷五月天| 久99热| 综合五月婷婷| www.婷婷,com| 俺去也在线www色官网| 亚洲色五月| 丁香香蕉婷婷| 狠狠狠狠狠狠狠狠草| 激情久久综合| 国产操逼视频网站| 在线视频99| 色婷婷偷拍| 综合六月激情婷婷| 99爱视频免费| 色五月婷婷激情基地| 丁香伊人综合| 欧洲亚洲精品| 婷婷丁香五月激情密臀av| 成人欧美Va| 99视频只有精品| 成人网在线视频| 婷婷五月天偷拍| 99精品国产在热久久| 中文字幕在线日亚洲9| 丁香五月天色婷婷| 丁香五月婷婷综合啪啪| 丁香五月天激情网址| 五月婷婷六月丁香玖玖玫瑰91| 春色激情| 狠狠 婷婷| 久机视频这只有精品| 久久综合首页| 99热国产这里只有精品| 岛国在线观看91| 操操操av| 色五月天综合网| 99网址在线看| 久热只有精品| 五月丁香A片| 五月天婷婷成人资源站| 五月天开心网| 伊人五月天综合网| 黄色AV日韩| 另类 在线| 狠狠摸狠狠摸| 99久久高清视频| www.五月天社区| 丁香婷婷老熟女综合网| 色九月激情综合网| 99精品视频在线观看| 色婷婷五月天激情| 狠狠色综合网站久久久久| 99精品人人| 国产免费一区二区三区三州老师F1F1.CC| 婷婷五月乱交换| 996日日爱| 婷婷五月丁香色色| 九九精品视频在线6| 黄色网址五月婷婷| 色播丁香婷婷五月激情| 欧美A级成人婬片免费看理论| 丁香六月激情综合网| 午夜69成人做爰视频| 欧美激情丁香五月天久久婷婷一区| 丁香五月成人| 婷婷五月色花丁香社区| 思思热在线| www.av视频xx999.com| 日本99热| 婷婷五月俺要去| 免费无码毛片一区二区A片| 狠狠色丁香婷婷基地| 国产偷人爽久久久久久老妇APP| 五月情婷婷五月| 97很鲁在线视频| 五月天婷婷黄色| 狠狠爱婷婷五月天| 婷婷五月丁香五月综合网| 丁香玖玖视频大全| 久久久ww| 99久久婷婷国产综合精品草原| 天天天干夜夜夜操| 精品九九在线观看| 午夜无码熟熟妇丰满人妻 | 开心五月婷婷| 激情五月综合色婷婷| 色色色九九九五月婷婷| 婷婷五月丁香伊人| 婷婷色偷拍| 99噜噜| 噜噜色天天开心| 国产美女无遮挡裸体毛片A片| 久久久久99精品成人片| 99热色综合| 香蕉人在线香蕉人在线 | 色婷丁香| 激情99| 涩婷婷五月天| 国产精品视频免费看| 激情五月丁香五月| 丁香婷婷六月激情| 男人的天堂99| 五月丁香琪琪| 色狠狠999综合网| 99热在线中出| 久9热视频| 久热这里这里有精品| 久久婷婷免费| 操逼六区| 思思视频这里是精品| 182tv992tv人之初午夜免费观看| 日本色综合| 五月丁香久人妻中文| 色色色色色色综合网| 99视频只有精品| 亚洲小视频免费观看| 色五月丁香com| 夜色综合网| 99 色色吧| 欧美婷婷综合网| 色欲一区二区三区精品A片| 九九热思思热| 欧美日韩国产一区二区| 色婷婷激情| 激情婷婷网| 久9热| 精品久9| 九九色精品| 艾小青av| AV在线大香蕉| 五月婷视频| 亚洲AV网站| 天天情色综合网| 五月婷视频久久|