日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

Java學(xué)生火車票訂票系統(tǒng):JSP+Servlet+JDBC實現(xiàn)與并發(fā)控制

Java學(xué)生火車票訂票系統(tǒng):JSP+Servlet+JDBC實現(xiàn)與并發(fā)控制 簡介面向?qū)W生群體的火車票訂票系統(tǒng)完整項目基于企業(yè)級開發(fā)技術(shù)構(gòu)建集后臺管理與前臺購票于一體涵蓋車次維護、學(xué)生寒暑假半價優(yōu)惠、團體購票等典型業(yè)務(wù)場景適合Java學(xué)習者作為課程設(shè)計或畢業(yè)設(shè)計參考。資源共三百一十八個文件以依賴庫、源碼、頁面及編譯產(chǎn)物為主另含數(shù)據(jù)庫腳本、前端樣式腳本、工程配置文件壓縮包約二十四兆目錄結(jié)構(gòu)清晰完整可直接導(dǎo)入集成環(huán)境運行與學(xué)習。當前已有三千二百四十八人學(xué)習下載具有較好參考熱度。通過項目可系統(tǒng)掌握分層架構(gòu)設(shè)計、服務(wù)器頁面技術(shù)、數(shù)據(jù)庫連接與操作、業(yè)務(wù)邏輯封裝等實際技能理解用戶管理、訂單處理、車次信息維護、優(yōu)惠策略實現(xiàn)等完整流程同時學(xué)習如何整合常見開源框架、優(yōu)化前后端交互對從零完成一個可用系統(tǒng)很有助益。1. JAVA學(xué)生火車票訂票系統(tǒng)為什么它是課程設(shè)計里的“常青樹”如果你在 Java 課程設(shè)計、畢業(yè)設(shè)計或者簡歷項目里見過“學(xué)生火車票訂票系統(tǒng)”這個名字不用懷疑它被選中的頻率高得驚人。原因不在于它要處理多么復(fù)雜的業(yè)務(wù)而在于它用最少的實體把“學(xué)生、車次、訂單、余票”四個核心概念串成了一條完整的業(yè)務(wù)閉環(huán)——登錄、查票、下單、支付、退票、后臺管理——這幾乎覆蓋了 Java 后端開發(fā)從 Servlet 到 JDBC 再到前端頁面的全部基本功。這套系統(tǒng)真正能解決的是如何用 Java Web 里的“老三樣”JSP Servlet MySQL 做出一個能跑、能講、能答辯的完整項目。它適合兩類人——正被課程設(shè)計逼著交代碼的學(xué)生以及準備 Java 面試想找個業(yè)務(wù)場景把八股文落到代碼里的求職者。很多熱詞里提到 java 課程設(shè)計案例源碼、java 面試題這類系統(tǒng)恰恰是把它們串起來的最好載體。2. 從選題到技術(shù)棧選型為什么用 JSP Servlet 而不是 Spring Boot做學(xué)生火車票訂票系統(tǒng)首先要想清楚一個實際問題你是在做課程設(shè)計不是在做鐵路 12306。這意味著你不需要分布式架構(gòu)、不需要消息隊列、不需要 Redis 緩存機票余量你要的是在一個兩周到一個月的時間周期內(nèi)把業(yè)務(wù)邏輯完整實現(xiàn)并能在答辯現(xiàn)場講清楚。2.1 需求先立住學(xué)生端的“查票—鎖定—出票”閉環(huán)把標題里提到的“訂票”二字拆開看學(xué)生視角下有四個核心頁面登錄/注冊頁學(xué)生學(xué)號作為賬號密碼存數(shù)據(jù)庫可加一個 student 字段標識身份車次查詢頁按出發(fā)地、目的地、日期篩選車次展示余票數(shù)和坐席信息訂票頁選擇車次、坐席等級提交訂票請求訂單頁查看已訂訂單、退票管理員視角再補兩個車次信息管理、訂單狀況查看。整個系統(tǒng)就兩張角色表加兩個業(yè)務(wù)對象數(shù)據(jù)模型不超過 5 張表。這也是我建議課程設(shè)計別隨意加需求的理由——表建得越多后面的聯(lián)查和事務(wù)處理越容易出現(xiàn)答辯時講不清的坑。2.2 技術(shù)棧取舍Spring Boot 不一定適合所有課程設(shè)計現(xiàn)在的 Java 課程設(shè)計里很多同學(xué)一上來就用 Spring Boot MyBatis Plus。這個選擇本身沒有錯但有一個很現(xiàn)實的問題框架幫你把建立連接、關(guān)閉連接、事務(wù)處理全都封裝掉了出了問題反而看不到底層的邏輯。我一般會建議學(xué)生火車票訂票系統(tǒng)這類業(yè)務(wù)閉環(huán)清楚的項目用 JSP Servlet JDBC 更劃算。原因有三面試時無論問 Java 基礎(chǔ)還是 Java 八股文從 Servlet 生命周期到 JDBC 的 Connection 管理都能直接對應(yīng)到代碼里項目體積小一個 Tomcat 加一個 MySQL 就夠不依賴 Maven 拉一大堆間接依賴出錯了可以自己調(diào)試斷點直接打在 doGet/doPost 方法里不需要在 Spring 容器初始化里翻黑匣子當然如果你的課程設(shè)計明確要求用框架那改成 Spring Boot 也無妨核心表結(jié)構(gòu)和訂票事務(wù)邏輯是完全一致的只是把 JDBC 換成 MyBatis 的 Update 注解。2.3 部署視圖JDK、Tomcat、MySQL 三者的配合關(guān)系在寫代碼之前先把運行環(huán)境理順。我見過太多同學(xué)代碼寫完了結(jié)果卡在 java 環(huán)境變量配置上javac 命令找不到Tomcat 啟動一閃而過——這都屬于環(huán)境問題不屬于業(yè)務(wù)問題。這套系統(tǒng)的典型部署結(jié)構(gòu)是JDK 8編譯和運行 Java 代碼Tomcat 8.5/9.xServlet 容器負責接收 HTTP 請求并轉(zhuǎn)給 ServletMySQL 5.7/8.0存儲學(xué)生、車次、訂單數(shù)據(jù)Maven可選管理依賴和打包 war提示JDK 和 Tomcat 的版本要對齊。JDK 8 可以配 Tomcat 9但 JDK 17 直接配老版本 Tomcat 會出現(xiàn)反射訪問報錯這是課程設(shè)計階段最常見的翻車點。3. 用工程方式跑通“學(xué)生火車票訂票系統(tǒng)”建表、建工程、調(diào)通這個階段的目標只有一個——讓系統(tǒng)能在本地跑起來。我按通常的做法分三步建庫建表、建 Maven 工程、寫 JDBC 工具類。每一步都有目的地不是為寫代碼而寫代碼。3.1 建庫建表學(xué)生表、車次表、訂單表一次到位的數(shù)據(jù)結(jié)構(gòu)火車票訂票系統(tǒng)的表結(jié)構(gòu)比一般的學(xué)生管理系統(tǒng)多一張車次表而且這張表是整個項目的核心。因為訂票動作的本質(zhì)是“檢查余票、生成訂單、扣減余票”車次表就是那根串起所有業(yè)務(wù)的線。CREATE DATABASE train_ticket DEFAULT CHARACTER SET utf8mb4; USE train_ticket; CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, student_no VARCHAR(20) UNIQUE NOT NULL COMMENT 學(xué)號登錄賬號, password VARCHAR(64) NOT NULL COMMENT 建議 MD5 后存入, real_name VARCHAR(50) NOT NULL COMMENT 乘車人姓名, student_type TINYINT NOT NULL DEFAULT 1 COMMENT 1 本科2 研究生用于票價打折判斷, create_time DATETIME DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE train ( id INT PRIMARY KEY AUTO_INCREMENT, train_no VARCHAR(10) UNIQUE NOT NULL COMMENT 車次編號如 G1024, departure VARCHAR(50) NOT NULL COMMENT 出發(fā)地, arrival VARCHAR(50) NOT NULL COMMENT 到達地, depart_date DATE NOT NULL COMMENT 發(fā)車日期, depart_time TIME NOT NULL, arrive_time TIME NOT NULL, hard_seat INT NOT NULL DEFAULT 0 COMMENT 硬座余票, soft_seat INT NOT NULL DEFAULT 0 COMMENT 軟座余票, price DECIMAL(10,2) NOT NULL COMMENT 硬座票價 ); CREATE TABLE ticket_order ( id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(32) UNIQUE NOT NULL COMMENT 訂單號可用時間戳隨機數(shù)生成, student_id INT NOT NULL, train_id INT NOT NULL, seat_type TINYINT NOT NULL COMMENT 1 硬座2 軟座, seat_count INT NOT NULL DEFAULT 1 COMMENT 購票張數(shù), total_price DECIMAL(10,2) NOT NULL, status TINYINT NOT NULL DEFAULT 0 COMMENT 0 已出票1 已退票2 已過期, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, CONSTRAINT fk_order_student FOREIGN KEY (student_id) REFERENCES student(id), CONSTRAINT fk_order_train FOREIGN KEY (train_id) REFERENCES train(id) ) COMMENT 訂單表退貨即改 status;建表時有三個點值得注意。第一訂單表里不冗余存車次號而是用 train_id 外鍵關(guān)聯(lián)這樣改車次信息不會影響歷史訂單。第二硬座和軟座余票分兩列存是為了在訂票時對不同的席別執(zhí)行對應(yīng)的更新語句。第三student_type 這個字段很多同學(xué)會忽略但學(xué)生票是打折票評論票價時它會派上用場。3.2 用 Maven 起一個 war 工程pom.xml 的關(guān)鍵依賴很多課程設(shè)計項目不用 Maven直接手動導(dǎo)入 jar 包也能跑。但我還是建議用 Maven好處是依賴傳遞不用自己管打包成 war 丟給 Tomcat 就能部署。新建一個名為 train-ticket 的 Maven 工程packaging 設(shè)為 war。project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdcom.course/groupId artifactIdtrain-ticket/artifactId version1.0.0/version packagingwar/packaging dependencies dependency groupIdjavax.servlet/groupId artifactIdjavax.servlet-api/artifactId version4.0.1/version scopeprovided/scope /dependency dependency groupIdjavax.servlet.jsp/groupId artifactIdjavax.servlet.jsp-api/artifactId version2.3.3/version scopeprovided/scope /dependency dependency groupIdjavax.servlet/groupId artifactIdjstl/artifactId version1.2/version /dependency dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version8.0.29/version /dependency /dependencies build finalNametrain-ticket/finalName plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-compiler-plugin/artifactId version3.8.1/version configuration source1.8/source target1.8/target /configuration /plugin /plugins /build /project這里注意兩個關(guān)鍵字。scope 為 provided 的 servlet-api 和 jsp-api 在編譯時需要但 Tomcat 里已經(jīng)有這兩套類庫打包進 war 反而容易引發(fā)類沖突。mysql-connector-java 的版本要跟你本地的 MySQL 對應(yīng)——MySQL 8.x 就用 8.0.x 的驅(qū)動MySQL 5.7 則建議用 5.1.49混用會出現(xiàn)連接失敗。3.3 連接數(shù)據(jù)庫JDBC 工具類與連接參數(shù)工程建好后第一步先做數(shù)據(jù)庫連接。我習慣把連接參數(shù)放在 db.properties 文件里方便不同機器上改配置而不是硬編碼在 Java 類中。這是 java 開發(fā) api 接口與部署時最常見的規(guī)范化習慣。jdbc.drivercom.mysql.cj.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/train_ticket?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/Shanghai jdbc.usernameroot jdbc.password123456然后寫一個 DBUtil 類用靜態(tài)代碼塊加載驅(qū)動對外提供獲取連接和關(guān)閉資源的靜態(tài)方法。package com.course.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.io.InputStream; import java.util.Properties; public class DBUtil { private static String url; private static String username; private static String password; private static String driver; static { try (InputStream in DBUtil.class.getClassLoader() .getResourceAsStream(db.properties)) { Properties props new Properties(); props.load(in); driver props.getProperty(jdbc.driver); url props.getProperty(jdbc.url); username props.getProperty(jdbc.username); password props.getProperty(jdbc.password); Class.forName(driver); } catch (Exception e) { throw new ExceptionInInitializerError(數(shù)據(jù)庫配置加載失敗: e.getMessage()); } } public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url, username, password); } public static void close(ResultSet rs, Statement stmt, Connection conn) { try { if (rs ! null) rs.close(); } catch (SQLException e) { } try { if (stmt ! null) stmt.close(); } catch (SQLException e) { } try { if (conn ! null) conn.close(); } catch (SQLException e) { } } }關(guān)于這段工具類有三個參數(shù)值得細說。getResourceAsStream 里寫的是“db.properties”這意味著文件必須放在 src/main/resources 目錄下否則運行時會報空指針。Class.forName(driver) 在 MySQL 8.x 驅(qū)動中可以省略因為 SPI 機制會自動注冊但保留它對理解 java 反射機制有好處。close 資源的順序必須從里到外——先 ResultSet再 Statement最后 Connection順序反了連接可能不會被正常釋放。4. 訂票與退票的核心動作事務(wù)邊界、條件更新與余票鎖定查個車次、看個余票這些頁面寫起來不難真正讓這個項目有技術(shù)含量的是訂票那一步。這也是面試官最愛問、答辯時老師最愛追問的地方兩個學(xué)生同時買同一趟車次最后一張票你的余票數(shù)會不會變成負數(shù)4.1 查余票到扣余票的事務(wù)邊界不能拆開訂票動作從用戶點下“購買”按鈕開始到訂單落庫結(jié)束中間包含三步查詢車次余票是否充足、往訂單表插入記錄、扣減車次余票。這三步必須在一個事務(wù)里完成任何一個失敗都要回滾。如果你把查余票放在一個 Servlet 里扣余票再放到另一個方法里中間隔了一次網(wǎng)絡(luò)往返那么在高并發(fā)下就會有問題——第一次查詢看到余票 1 張另一個請求搶先扣掉了你后面的扣減就變成負數(shù)。這里的關(guān)鍵是把三步操作放進同一個數(shù)據(jù)庫事務(wù)里。用原生的 JDBC 寫法核心就是把 setAutoCommit(false)、commit、rollback 放在正確的位置。package com.course.service; import com.course.util.DBUtil; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class TicketService { /** * 訂票查詢余票 - 插入訂單 - 扣減余票三步作為一個事務(wù) */ public boolean bookTicket(int studentId, int trainId, int seatType, int count) { Connection conn null; PreparedStatement queryTrain null; PreparedStatement insertOrder null; PreparedStatement updateSeat null; ResultSet rs null; try { conn DBUtil.getConnection(); conn.setAutoCommit(false); // 關(guān)閉自動提交手動控制事務(wù) long price 0; int leftSeat 0; queryTrain conn.prepareStatement( SELECT hard_seat, soft_seat, price FROM train WHERE id ? FOR UPDATE); queryTrain.setInt(1, trainId); rs queryTrain.executeQuery(); if (rs.next()) { leftSeat (seatType 1) ? rs.getInt(hard_seat) : rs.getInt(soft_seat); price rs.getLong(price); } else { conn.rollback(); return false; } if (leftSeat count) { conn.rollback(); // 余票不足回滾直接返回 return false; } String orderNo System.currentTimeMillis() (int)(Math.random() * 1000); insertOrder conn.prepareStatement( INSERT INTO ticket_order(order_no, student_id, train_id, seat_type, seat_count, total_price, status) VALUES(?,?,?,?,?,?,0)); insertOrder.setString(1, orderNo); insertOrder.setInt(2, studentId); insertOrder.setInt(3, trainId); insertOrder.setInt(4, seatType); insertOrder.setInt(5, count); insertOrder.setLong(6, price * count); insertOrder.executeUpdate(); String seatCol (seatType 1) ? hard_seat : soft_seat; updateSeat conn.prepareStatement( UPDATE train SET seatCol seatCol - ? WHERE id ? AND seatCol ?); updateSeat.setInt(1, count); updateSeat.setInt(2, trainId); updateSeat.setInt(3, count); int rows updateSeat.executeUpdate(); if (rows 0) { conn.rollback(); // 扣減失敗說明余票又被別人搶了回滾 return false; } conn.commit(); return true; } catch (SQLException e) { try { conn.rollback(); } catch (SQLException ex) { } e.printStackTrace(); return false; } finally { DBUtil.close(rs, queryTrain, null); DBUtil.close(null, insertOrder, null); DBUtil.close(null, updateSeat, conn); } } }這段代碼里有兩個容易被忽視的細節(jié)。查詢語句加了FOR UPDATE意味著查到的車次行會被鎖定直到事務(wù)提交或回滾其他事務(wù)修改這一行的操作會被阻塞。這是用 MySQL 實現(xiàn)行鎖最簡單的方式。另一個細節(jié)是 UPDATE 語句在 SET 后面把 X X - ? 和條件X ?寫在了一起這不僅是業(yè)務(wù)判斷也是一個防負數(shù)的“保險栓”——如果余票已經(jīng)不夠UPDATE 影響行數(shù)是 0程序就知道要回滾了。4.2 簡單的 UPDATE 條件更新就能控制并發(fā)有的同學(xué)會問我能在 UPDATE 之前先 SELECT 一次判斷余票嗎能但會有競態(tài)條件。SELECT 和 UPDATE 中間的那幾十毫秒里另一個事務(wù)可能已經(jīng)扣掉了余票。正確做法是把判斷放進 UPDATE 的條件里用受影響行數(shù)來判定。上面的代碼把WHERE id ? AND hard_seat ?作為條件數(shù)據(jù)庫在更新時會自動加鎖同一時刻只有一個事務(wù)能修改這一行后面的事務(wù)要么等前面的提交后重新判斷余票要么看到影響行數(shù)為 0 直接失敗。這種做法適合課程設(shè)計里的絕大多數(shù)場景。Redis 分布式鎖、ZooKeeper 分布式鎖在這些業(yè)務(wù)量面前屬于過度設(shè)計——你寫出來了答辯老師反而會問“你為什么要用分布式鎖”你解釋不清楚那就是給自己挖坑。4.3 學(xué)生票的身份校驗與退票的狀態(tài)流轉(zhuǎn)學(xué)生票和普通票的核心差異在身份校驗。訂票時要驗證登錄用戶是學(xué)生身份也就是 student 表里必須有對應(yīng)記錄并且 student_type 是有效值。同時一張學(xué)生票通常有乘車次數(shù)或折扣限制簡單的做法是在下單前查一次該學(xué)生本月的有效訂單數(shù)。退票邏輯恰好是訂票的逆向操作先把訂單狀態(tài)從 0 改為 1再把對應(yīng)車次的余票加回來。這里也要注意事務(wù)一致性——如果出現(xiàn)狀態(tài)改為已退票、余票卻沒加回去那這個 bug 線上能查瘋。public boolean refundTicket(int orderId, int studentId) { Connection conn null; PreparedStatement queryOrder null; PreparedStatement updateOrder null; PreparedStatement updateSeat null; ResultSet rs null; try { conn DBUtil.getConnection(); conn.setAutoCommit(false); // 1. 查詢訂單校驗歸屬和狀態(tài) queryOrder conn.prepareStatement( SELECT * FROM ticket_order WHERE id ? AND student_id ? FOR UPDATE); queryOrder.setInt(1, orderId); queryOrder.setInt(2, studentId); rs queryOrder.executeQuery(); if (!rs.next()) { conn.rollback(); return false; } if (rs.getInt(status) ! 0) { conn.rollback(); return false; } int trainId rs.getInt(train_id); int seatType rs.getInt(seat_type); int seatCount rs.getInt(seat_count); // 2. 改訂單狀態(tài) updateOrder conn.prepareStatement( UPDATE ticket_order SET status 1 WHERE id ?); updateOrder.setInt(1, orderId); updateOrder.executeUpdate(); // 3. 回補余票 String seatCol (seatType 1) ? hard_seat : soft_seat; updateSeat conn.prepareStatement( UPDATE train SET seatCol seatCol ? WHERE id ?); updateSeat.setInt(1, seatCount); updateSeat.setInt(2, trainId); updateSeat.executeUpdate(); conn.commit(); return true; } catch (SQLException e) { try { conn.rollback(); } catch (SQLException ex) { } e.printStackTrace(); return false; } finally { DBUtil.close(rs, queryOrder, null); DBUtil.close(null, updateOrder, null); DBUtil.close(null, updateSeat, conn); } }退票的查詢也加了 FOR UPDATE因為要先鎖定訂單行再判斷狀態(tài)否則可能出現(xiàn)一個訂單被同時退兩次的情況——兩個請求都讀到 status0然后都執(zhí)行退票。加了行鎖后第二個請求會等待第一個請求提交再讀到的狀態(tài)就是 1 了。5. Java 課程設(shè)計的避坑清單環(huán)境變量、JDBC連接、重復(fù)下單寫項目的過程往往不是被業(yè)務(wù)邏輯難倒而是被環(huán)境、部署和細節(jié)問題磨得不耐煩。這一章集中整理我在類似系統(tǒng)里踩過的坑按“現(xiàn)象 → 原因 → 解決”來寫遇到同樣問題時可以直接對照排錯。5.1 javac 不是內(nèi)部或外部命令現(xiàn)象在 cmd 窗口運行javac -version報錯但 java -version 有輸出。原因這是最典型的 java 環(huán)境變量配置不全問題。java 命令能運行是因為系統(tǒng)找到了 JDK 里的 java.exe但 javac 需要 JAVA_HOME 和 PATH 同時配置。解決新建系統(tǒng)變量 JAVA_HOME值指向 JDK 安裝根目錄例如 C:\Program Files\Java\jdk-8u202Path 變量里新增%JAVA_HOME%\binCLASSPATH 可以配為.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar。配置完成后重開一個 cmd 窗口再驗證。注意 Path 里不要忘記最前面的點號它表示當前目錄否則類文件在默認包下可能加載不到。5.2 啟動 Tomcat 但瀏覽器訪問 8080 無響應(yīng)現(xiàn)象Tomcat 啟動日志顯示 Server startup但瀏覽器能打開 localhost:8080 卻打不開你的項目頁面或者端口已被占用。原因端口沖突是最常見的。另一個 Java 進程或別的服務(wù)占用了 8080。解決在 Tomcat 的 conf/server.xml 里把 Connector 的 port 屬性改成 8081 或 9090改后重啟。如果不知道誰占用了端口Windows 下運行netstat -ano | findstr 8080把最后一位 PID 在任務(wù)管理器里結(jié)束掉。另外war 包沒成功部署也會出現(xiàn)這個現(xiàn)象去 Tomcat 的 webapps 目錄看一眼你的 war 包是否還在、是否多解壓出一個同名文件夾。5.3 JDBC 連接報 ClassNotFoundException現(xiàn)象控制臺輸出java.lang.ClassNotFoundException: com.mysql.jdbc.Driver或者com.mysql.cj.jdbc.Driver找不到。原因MySQL 驅(qū)動 jar 沒有包含在 WEB-INF/lib 下。非 Maven 工程常見手動復(fù)制 jar 時放錯了位置。解決Maven 工程就先mvn clean install重新打包然后看 war 包里是否包含 mysql-connector 的 jar手動工程就確認 jar 文件在WEB-INF/lib/目錄下不是放在src目錄就了事。順便檢查一下驅(qū)動類名——MySQL 8.0 連接時用的是com.mysql.cj.jdbc.Driver老驅(qū)動com.mysql.jdbc.Driver在 8.x 版本已被標記廢棄會出現(xiàn)警告但不影響運行。5.4 查詢出的中文數(shù)據(jù)在頁面上變成問號現(xiàn)象頁面顯示“???”但數(shù)據(jù)庫里存的漢字正常。原因字符集沒有統(tǒng)一。數(shù)據(jù)庫創(chuàng)建時用了 utf8mb4但 JDBC 連接串里沒有指定 characterEncoding或者 JSP 頁面沒有聲明 pageEncoding。解決把 db.properties 連接串改為jdbc:mysql://localhost:3306/train_ticket?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/Shanghai。JSP 文件頭部加% page languagejava contentTypetext/html; charsetUTF-8 pageEncodingUTF-8%。另外Tomcat 8 以后默認 URI 編碼是 UTF-8如果項目部署在老版本 Tomcat還需要在 server.xml 的 Connector 上補一句URIEncodingUTF-8。5.5 瀏覽器刷新導(dǎo)致訂單重復(fù)提交現(xiàn)象用戶點一次“訂票”按鈕跳轉(zhuǎn)到訂單頁按 F5 刷新之后數(shù)據(jù)庫里出現(xiàn)兩條一模一樣的訂單。原因刷新動作重新發(fā)送了上一次的 POST 請求。這是 Servlet 開發(fā)里最經(jīng)典的重復(fù)提交問題屬于“基本功但一不留神就翻車”的典型。解決第一種方式是訂票成功后立刻重定向也就是用resp.sendRedirect(/train-ticket/orderList)而不是request.getRequestDispatcher(...).forward(...)刷新只刷新訂單列表頁不會重發(fā) POST。第二種方式是在表單里埋一個一次性 token提交前從 session 取出來比對用完立刻刪除。第二種更嚴密但第一種足夠應(yīng)付課程設(shè)計而且代碼簡單得多。提示這段避坑清單幾乎可以原樣復(fù)用在任何 JSP Servlet 的課程設(shè)計項目上不只是火車票訂票系統(tǒng)。遇到問題先確認是環(huán)境層、連接層還是業(yè)務(wù)層——按照這個順序排查一般不會卡死。6. 演示與答辯用一個可講的技術(shù)點讓“老項目”看起來專業(yè)系統(tǒng)能跑通只是第一步“能講清楚”才是課程設(shè)計的得分關(guān)鍵。你不需要在答辯時背完整個項目的每一行代碼但必須能針對幾個核心點展開讓對方看出你真的動手寫了而不是從哪份 java 課程設(shè)計源碼里原封不動抄來的。6.1 給訂票操作加一條“可觀察”的審計日志很多同學(xué)的項目做完了連一條日志都沒有。答辯時老師問“你這個系統(tǒng)怎么定位問題”答不上來。我建議在訂票和退票的關(guān)鍵節(jié)點輸出日志字體上用 System.out.println 或 java.util.logging 都行關(guān)鍵是要有。// 在 TicketService.bookTicket 方法的 commit 之前 System.out.println([訂票成功] orderNo orderNo , studentId studentId , trainId trainId , seatType seatType , count count , time new java.util.Date());這段日志不是給自己看的是給答辯老師演示用的。當你在現(xiàn)場買一張票控制臺窗口里滾出一條清晰的“訂票成功”記錄這一下就把你的系統(tǒng)從“死代碼”變成了“活系統(tǒng)”。6.2 寫一個本地冒煙腳本證明業(yè)務(wù)鏈路是通的比日志更進一步的做法是寫一個簡單的測試類不依賴瀏覽器直接調(diào)用 TicketService 驗證訂票和退票的邏輯。這樣你可以在答辯前確認代碼沒被改壞也可以在講并發(fā)控制的時候現(xiàn)場跑給老師看。package com.course.test; import com.course.service.TicketService; public class SmokeTest { public static void main(String[] args) { TicketService service new TicketService(); // 參數(shù)依次是 studentId, trainId, seatType(1硬座 2軟座), 購買數(shù)量 boolean success service.bookTicket(1, 1, 1, 1); System.out.println(訂票結(jié)果: (success ? 成功 : 失敗)); // 注意訂單ID需要根據(jù)實際插入結(jié)果修改 boolean refund service.refundTicket(1, 1); System.out.println(退票結(jié)果: (refund ? 成功 : 失敗)); } }冒煙腳本不需要做成單元測試那么正規(guī)它的作用是驗證三個關(guān)鍵點tomcat 里的類路徑?jīng)]問題、數(shù)據(jù)庫連接串沒寫錯、訂票和退票的鏈路是通的。你在答辯前跑一遍如果某一步失敗那就是環(huán)境有問題而不是到現(xiàn)場才發(fā)現(xiàn)頁面打不開。6.3 應(yīng)對“你這個項目有什么亮點”的標準答案答辯時最怕被問“和別人的課程設(shè)計有什么不同”。不要回答“我用了 Maven”或者“我的界面比較好看”這些都不構(gòu)成技術(shù)亮點。你可以從下面三個方向里選一個講事務(wù)與并發(fā)控制講清訂票時 FOR UPDATE 和條件更新為什么能防超賣 技術(shù)含量高幾句話就能讓聽懂的人知道你認真做過訂單狀態(tài)流轉(zhuǎn)講清訂票、退票、過期三種狀態(tài)的邊界條件和切換邏輯 體現(xiàn)你對業(yè)務(wù)的理解而不是只會在 Servlet 里增刪改查數(shù)據(jù)表設(shè)計合理性講清為什么車次表要分開存硬座余量和軟座余量、為什么不直接冗余車次名到訂單表 體現(xiàn)你有建模意識這是許多初級開發(fā)都不具備的這三個點正好對應(yīng)了這篇項目的三個核心模塊。把它們講透勝過大而全地復(fù)述一遍項目是干什么的。我自己的習慣是堅持項目里的每一行關(guān)鍵 SQL 都能手寫出來。因為面試官和老師都清楚課程設(shè)計要求不高項目用得再花哨也不如你自己能解釋得清楚來得實在。把這個學(xué)生火車票訂票系統(tǒng)做成一個能跑、能講、能回答追問的完整閉環(huán)其實就是一次很好的基礎(chǔ)功訓(xùn)練。希望這個方向能幫到你少走一點我在課程設(shè)計時期走過的彎路。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧亚性爱在线视频| 日日夜夜精品| 日本激情免费大片| 久久久91| 国产日韩中文字幕欧美| 国产肏屁眼视频| 久久欧美性爱视频| 手机看片日韩人妻| 日韩精品人妻一| 天天日天天干天天操| 欧美曰韩国产精品| 无码99| 日本国产欧美高清在线| 二男一女成人A片| 亚洲在线| 日韩一级欧美一级国产一级台湾| 国产日本顶级一区二区三区| 亚州综合图片| 久久久久ab| 亚洲春色激情小说| 日本大片日本一区二区免费高清| 婷婷五月天伊人| 久久91精品国产9丨久久分亭| 噜噜噜噜久久久精品免费| 99re6国产精品99re| 夜夜爽妓女| 91老司机在线视频免费观看| 大香樵伊人网| 亚洲色图大香| 91老熟女逼| 久久乐| 伊人黄色视频免费观看| 日本狂喷奶水在线播放212| 一区二区三| 欧亚日韩中文在线| 国产高清自拍| 九九综合久久| 大香蕉九九| 日本精品成人无码| 欧亚在线视频| 色婷婷久久| 在线视频日韩欧美国产| 337p大胆噜噜噜噜噜91Av| 艹比视频国产精品| 黄色欧美性爱视频| 五月丁香在线| 日韩一999精品| 婷婷激情一区二区三区俺也去| 又黄又爽在线观看视频| 夜夜操老骚逼视频网站| 国产亚洲色婷婷99精品91| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 91亚洲欧美综合高清在线| 男插女青青影院| 毛片视频白嫩| 99青青草国产视频| 久久人妇| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 爱我干综合| 色色色999| 懂色综合久久久| 国产精品一区二区在钱播放| 亚洲国产综合久久久性感熟妇| 日韩在线视频1234| 久久精品一区一起草| 麻豆精品.欧美精品.日韩精品.| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 亚洲美女高潮喷水视频| 亚洲激情片| 操屄日韩| 久久99人妖视频国产| www.久久99| 国产精品 亚洲情色| 久偷拍| 色哟哟AV| 欧美AAAA黄片| 9久久9综合| 九9热伊人| 校园春色 亚洲| 国产60页| 99久久99九九99九九九| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 夜夜爽爽夜夜精品视频| 巨乳特殊服务按摩| 黄片免费久久久久久久| 精精夜夜| 无马一区二区| 久久性爱城| 久久久999网站| 欧美乱妇狂野欧美在线视频| 99re免费| 丁香五月激情综合国产| 久久久不卡区一区二区三区久久久| 无码九九| 免费1级a做爰片观看| 丁香婷婷大香蕉| 免费看污网站| 人人操人人操人妻人| 成全动漫视频观看免费下载| 亚洲色综合| 大香蕉在线视频重口味毛片在线| 亚洲性高潮| 日韩欧美aⅴ综合网站发布| 婷婷激情啪啪| 国产一区二区精品久久久不卡蜜臀| 欧美精品精品一区二区| www.99热| 啊啊啊想要| 国产精品亚洲免费| 好舒服视频| 久久精品熟女亚洲AV麻豆软件| 国产亚州精品美女久久久免费| 国内操逼视频二区| 精品久久久av无码免费| 伊人AAA| 91精品国产日韩欧美综合| 熟女性视频| 天天综合网亚洲综合网| 黄色一区二区秘书性感| 人人综合| 亚洲欧洲自拍图片专区满春格| 日韩有码一区三区| 男人的天堂1024| 欧美亚洲日本视频久久久| 青青草在线视频人人想人人上 | 伦理片秋霞免费影院| 亚洲熟久久| 亚洲av无码国产精品字幕| 午夜激情床戏激情| 热99这里有精品综合久久 | 国产精品久久久蜜臀| 视频不卡中文字幕| 超碰性爱97| 无码人妻精品一区二区三区99不卡| 九九热男人天堂| 91天天| 久操B网| 黄色成人网久久久久久| 97视频900| 欧美日韩操操操| 97久久精品不卡| 久久亚洲AV成人精品无码| 日韩不卡网操逼中文字幕日韩| 女欧美一区二三区| 亚洲综合色在线| 热热色中文无码| 91麻豆va国产精品| 2018天天日天天日| 97视频在线视频| 美国一区二区免费视频| 亚洲高清欧美总合| 亚洲高清色综合| 九九热精品| 2021国产成人精品久久| 色噜噜人妻丝袜AV资源| 久久久久九九九| 999熟女精品| 日韩欧美国产高清视频| 国产二区三区免费视频| 天天插天天操天天摸天天射天天看| 强奸乱伦资源| 久久久久亚洲熟妇熟女| 91久久久久| 99热色精品| 国产乱伦亚洲| 欧美精品97| 91美女在线视频| 国产精品无码av| 91女日逼| 蜜屁Av| 久久精品国产亚洲AV无码电影| 97色亚洲| 情色五月天就去干| 久久只有精品一区二区三区| 97干在线| 自拍鲍鱼一区在线高清观看免费| 成人线上超碰| 伊人在线大香蕉视频久久| 美女久久久久久久久久久| 久久久久久91香蕉国产| 操久久久久久| 激情综合五月婷婷| 黄色av一区二区在线| 久久一区二区三区四区五区| 欧美97免费| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 久久久久元码视频| 91女在线观看| 亚洲无码色| 小情侣高清国产在线视频| 日本一道在线播放高清| 神马午夜久久| 91N综合网| 国产乱弄免费在线视频。 | 91精品人妻一品二品三品| 九九九精品一区二区无码| 欧美精品在线观看| 国产成人综合网| 美国人人操人人操| 日韩欧美成人午夜福利| 26uuu国产日韩综合在线观看| 国产毛片毛片4p懂色| 国产乱码久久久| 午夜精品久久久久久久| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场| 欧美成人综合| 精品中文日韩字幕视频| 十八禁电影伊人网| 粉嫩久久久极品| 亚洲揄拍网| 国产精品欧美激在线| 蜜色网色哟哟| 青青草日逼视频| 久久9精品视频| 长长久久88视频| 色狠狠综合| 人妻在线视频| 色色色色电影网| 国产亚洲综合欧美一区| 狠狠色婷婷7777久| 亚洲日韩一区电影| AV天天综合| 99国产精品人妻人伦| 亚洲AV小说| 人妻熟女字幕一区二区| 九久久九精品视频| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 激情一区二区三区在线观看| 日韩乱码Av| 婷婷成人久久久精品| 99热亚洲天堂| 后入式999| 黑人干亚洲| 四虎精品永久在线观看| 成人羞羞视频国产| 91搞逼视频| 国产精品视频麻豆入口| 久久精品性| 中文字幕在线观看视频www| 激情婷婷丁香| 久久精品视频28| 东北女人操比视频| 97超级久久| 乱欲视频| 国产麻豆福利av在线播放| 亚洲色 国产 欧美 日韩| 在线观看精品国产免费| 欧美综合站| 亚洲精品一二三四区| 久久久久久久久久黄色网 | 久久亚州精品成人Av无| 色999亚洲人成色| 黄色大片一区二区密桃丝袜| 天堂资源站| 91免费看中出视频| 国产精品高清2021在线| 久久艹逼视频| 欧美日韩97在线| 凹凸视频在线一区二区| 国产小u女在线观看| 欧美日韩国产在线| 中文字幕精品专区搜索结果91| 伊人网高清| 国产精品一二三在线看| 亚洲一区二区三区麻豆传媒| 日本不卡免费二区| 手机看片1024你懂的国产| 亚洲一区深夜| 5252色欧美在线男人的天堂| 亚洲一欧洲中文字幕在线| 日韩三级视频一区二区三区| 久久久久久久久国产| 精品人妻一区二区三区四区不卡在| 91丨九色丨国产丨人妻在线| 大香樵伊人网| 青青操日韩| 岛国黄| 亚洲色堂免费视频| 本道综合精品| 丁香五月天视频| 校园春色亚洲无码| 性饥渴少妇av无码毛片| 红桃视频高潮| 思思热国产高清| 成人性爱电影一区二区| 亚av顶级裸体一区二区三区四区五区 | 欧美精品人妻视频| 精品无码久久久久久久久果冻糖心 | 欧美视频边做饭边橾| 久久綜合很很很| 97超碰香蕉| 色999;丁香五月| 亚洲s色图| 乱伦av麻豆| 99久热精品99re6热| 鸥美精品一区二区久久婷婷| 成人性爱免费播放| 亚洲AV无码天美传媒一区| 老色鬼成人精品视频下载大在线观看| 国产精品区在线12p| 极品色社| 夜夜骑夜夜操| 99啪啪视频| 国产乱伦搜索结果91P| 99爱精品| 人人操人人摸超碰| 67914亚洲精品| 玖玖久久久| 亚洲国产成人高清在线| 夜夜无码| 亚洲图片 91| 人妻丝袜日本| 久久国产精品,久久国产| 日韩熟女无码| 操淫穴亚洲五月丁香| 狠狠操夜夜| 欧美精品三区| 国产成人精品日本亚洲语言| 亚洲欧洲日韩中文字幕一区| 97久精品| 北约熟女超碰| 风月影院男女十八禁| 韩国三级理论在线| 97超碰欧美精品| 欧美后进式| 国产操逼网站亚洲一级黄色| 久久久性爱视频| 黄片aaaaa一区| 国内毛片四区| 四虎 精品 WWW| 国产成人亚洲精品无码最新在线| av72网| a在线视频免费观看| 亚洲成人ab| 精品射1999| 成人a级高清视频在线观看| 欧色性第一页| 日本狠狠干| 日本人妻伦在线中文字幕| 亚洲色图加勒比| 大香网站| 高清国产精品福利网站| 青青草久草AV| 97爱爱影院| 99热这里只有精品地址| 国产精品精品系列在线观看| 另类图片五月天| 日本熟妇熟色97一本在线观看| 国产成人亚洲精品无码古代早漏男| 久久精品国产亚洲粉嫩| 色九九九综合| 九久9热| 久久久久久AV无码免费网站| 国产一级高跟丝袜| 国产h小视频在线观看免费| 是还免费视频1727我| 九九久久综合| 日韩欧美tv一区二区在线观看| 99999国产| 大肉棒导航| 综合网,亚洲,欧美| 久久 国产精品 一区| 大香蕉乱级| 大粗鳼巴久久久久| 一级黄碟| 色 亚洲 91| 97视频在线免费看| 啊啊啊啊嗯嗯嗯用力好爽 | 欧美精品人妻视频| 午夜天堂啪啪| 影音先锋中文字幕日本好一区二区| 色汉综合| 亚洲不卡三级手机播放| 激情小说亚洲| 欧美色图 色综合图| 97超色| 9精品久久| 欧美视频第二页| 天天操女人| 久久九九综合| 久久久久9| 26uuu国产免费观看| 国模不卡| 美女国产一区二区久久| 手机看片1025| 国产无马av| 日本在线视频导航| 久久艹逼视频| 国产按摩一区二区三区| 92福利社视频| 日本精品人妻少妇一区二区| 97国产精品国| 高树玛利亚无码流出| 天天操女人| 台欧久久精品视频| 人妻无码久久一区二区三区免费| 裸体1区| 裸体1区| 中文字幕文字幕无码一区二区三区电影99 | 狠狠夜色午夜久久综合在线| 五月天伊人| 一道本东京热加勒比一区二区三区| 香蕉在线一区二区三区| 亚洲高清内射| 国产精品一二三| 2020中文字幕在线| 男人天堂新在线| 9丨久久九九九| 84YTCOM性无码| 无码一区免费在线不卡| 日韩色| 高清无码国产亚洲| 天天综合AV| 中出789在线视频| 欧美午夜视频| 91亚洲人| 正在播放国产精品一区| 韩日无码在线观看| 久久久久13| 亚洲自拍另类丝袜综合| 东京热AV男人的天堂| 亚洲黄色电影| 精品欧美А∨无码黑人大荫蒂| 操高情无码| 国产在线视频午夜精华在| 大香蕉操久久| 99热亚洲| 久久久不卡区一区二区三区久久久| 国产第二页| 日韩本不卡视频在线观看 | 欧美成人精品一区二区男人蜜臀| juliaann丝袜| 加勒比在线视频一区二区三区| 婷婷色综合| 五月天久久婷婷亚洲| 久久九九精品一区二区| 1769一区| 婷婷激情五月| 中文久久96| 久久久不卡| 最新三级网址| 日韩伦理久 久久 清纯 | 大香蕉丝袜一级片| 久久久久921| 97免费视频在线| 国产大学生口爆吞精合集| 男人的天堂2010| 久久久久久久9最新免费视频观看| 欧美激情专区| HEYZO高无码国产精品227| 2025亚洲男人天堂| 人人操人人肉久久精品| 性爱乱伦一区| 天天操天天日天天干| 射综合网| 97电影院超碰| 东京热毛片调教| 欧美顶级黄色大片免费| 99热在线不卡| 操操操五月天婷婷丁香影院| 四虎AV在线观看| 蜜区区视频79| 亚洲精品三| 五月天亚洲网| 免费观看的黄色的网站| 久久久久亚洲精品| 国产精品白领在线观看| 91色艳| 极品少妇久久久| 国产精品老师| 香蕉国产97| 强奸乱伦大香蕉| 狠狠干精品一二三四五六2022| 91在线欧美| 9久综合网| 中文字幕一区二区三区人妻不卡| 丰满人妻大屁一区二区| 小电影欧美91| 五月婷婷啪啪| 亚洲深夜福利| 人妻精品综合中文字幕在线 | 中文字幕乱亚洲美女精品一区| 婷婷六月色开| 亚洲综合在线91| 五月天激情四射| 大香蕉中文201| 五月丁香啪啪| 精品一级毛片在线观看| 欧美一区二区在线资源| 在线观看不卡一区二区三区| 香蕉免费一区二区三区不读| 可以免费观看的日韩av毛片| 亚洲情色 自拍| 日韩人妻少妇 一区二区三区| 中文字幕黄色一起草| 啊啊啊好爽快点啊啊啊嗯嗯| 中文字幕精品探花视频| 六月丁操逼| 日本东京热加勒比久久| 中文字幕乱妇免费视频| 亚洲男人天堂2019| 一区二区精品日韩欧美在线观看 | 久久性爱精品一区| 99色在线| 啊啊啊com| 日韩成人在线性爱视频| 女上位精品在线| 热久久这里只有精品| 欧美性爱第1 页| 国产美女精品| 欧美疯狂做爰xxxx| 91久久九九精品国产综合| 日韩欧美中文字| 婷婷色网| 午夜超爽| 大香蕉一级黄色片久久| 欧美在线第五页| 亚洲国产一区二区三区在线 | 图色综合网| 99久久久久久久久| 在线日韩日本亚洲国产| 茄子社区国产精品| 国产13区| 婷婷久久五月天| 岛国片在线播放| 欧美人妖内射| 2017大香蕉国产精品久久| 操91| 欧美日韩性爱无码| 91狠狠综| 91人妻人人澡人人爽人人精品| 久偷拍欧美日韩三区| 久久五月份| 久久亚洲AV无码专区国产精品| 精品九九九九| 亚洲深夜福利| 嫩草91| 啊啊啊啊啊啊好湿好爽视频| 亚洲 综合 欧美| 无码乱人伦中文视频| 亚洲网站一区二区在线| 性91| 麻豆91熟妇人妻中文字幕茄子| 日韩精品大香蕉伊人在线| 久久的网站啊啊啊啊啊| 99色在线| 丁香五月色| 日韩性爱再线视频| 日韩一性一交一A片俄罗斯 | 亚洲偷拍欧美激情| av天天在线| 亚洲日本男人天堂网| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 欧美日日操| 日韩熟女操逼| 亚洲国产精品无码AV久久久| 婷婷婷婷婷婷久久久久| 97视频免费播放| 99少妇| 欧美少妇高潮| 伊人宅男大香蕉| 偷拍99| 人妻人久久精品中文字幕| 欧美亚洲成人在线一区二区三区| 亚洲情色在线| 亚洲网污污污污| 日韩欧亚中文在线| 久草线上视频免费看| 中出后入| 亚洲情色无码一区二区三区| 欧美草草高清日韩视频| 中文字幕AV中出| 熟妇色99| 婷婷色色五月天福利| 老熟女乱伦一区| 伊人精品久久网站| 国产欧美一级在线观看| 97摸视频| 婷婷五月花| 日本有码久久| 人人操天天爽| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 亚洲欧美天| AV色女综合| 99999re| 欧洲黄色网| 亚洲自拍天堂| 亚洲最大无码中文字幕网站| 精品国产乱码久久久久久影片| 热天堂一区二区| 欧美日本天堂| 九t超碰| 乱性AV| 夜色AV无码手机在线影院| 欧美一级黄片免费播放| 日韩偷拍色图| 呦女网站| 色99999| 在线观看岛国有码| 男人夜色天堂ss| 啊啊啊好舒服好爽啊啊啊视频| 久久久精品中文字幕麻豆| 日本一二三免费久久| 91天天综合| av网页一区二区三区| av九九| 久久、1234| 亚洲精品91| 日韩操逼HD| 97色色婷婷| 极品粉嫩少妇视频| 久久久亚洲精品中文字幕人妻| 蜜乳中文字幕a在线| 国产精品免费美女视频| 嗯~啊~快点 死我视频| 国产三级中文字幕粉嫩 | 久久av色| 屁股久久久久久| 国产精品久久久无码AV网站| 亚洲综合在线高清| 国产一线二线三线av| 影音先锋日本一区二区| 婷婷月色| 久久精品综合| 人人看欧美性爱| 国产欧美一区二区| 色图四区| 人妻精品视频一区二区| 色娱乐色呦呦夜夜夜夜av| 神马麻豆福利院| 久久‘黄片视频| 久久久18禁| 色激情综合网站| 亚洲综合色网| 99热在线只有精品| 久久99午夜精品一区人妻| 久久超碰、| 丁香色狠狠色综合久久小说| 婷婷中文字幕| 天天夜夜rb| 日韩精品一区二区三区色欲| 精品无码产区一区二| 国产家庭乱伦性爱视频| 少妇天堂网络| 先锋影音av先锋一区| 青青国产精品在线| 999精品久久久久久久| 九月丁香| 校园春色亚洲色图| 91校园春色长篇| 国产AV中文| 国产丝袜视频| 97在线免费观看| 青青青操| 国产JDAV无码视频在线观看| 吉田爱美AV在线| 中文字幕美女91| 亚洲 欧美 另类 日韩 人妻一区 | 极品粉嫩少妇视频| 午夜视频久久久久一区| 日韩78m视频| 无码WWW免费视频网站| 国产精品天干天干综合网麻豆| 精品中文字幕一区二区| 亚拍在线| 成人丁香五月| 蜜臀久久99精品久久久久| 美女诱惑1区2区| 久久性爱视频免费看| 蜜臀亚洲中文| 国产av又色又爽又黄| 亚洲图片在线| 婷色五月天| 亚州综合网| 日韩9999| 亚洲精品a人片在线观看视| 蜜臀在线看片| 色婷婷五月天| 久久的免费性爱视频| 九九热五区| 国产一级作爱毛片| 97资源亚洲| 亚洲精品欧洲精品| 69精品久久久久中文字幕| 久操国产在线| 四虎免费看黄| 色五月婷婷久久| 国产偷拍网站| 操少妞在线视频| 国产 日韩 欧美 人妻 熟女 中文| 天天干天天操天天操夜夜操天天操| 日韩78m视频| 高清在线偷拍自拍视频| 久96热在线观看视频| 大屁股国产在线视频| 青青操青娱乐| 国产久久av| 日日夜夜免费| 粉嫩av一区二区三区四季| 夂久色| 精品亚洲国产成人精品| 成人久久久| 九九九九97| 熟妇人妻一区二区三区| 91强奸乱轮| 国产亚洲深夜激情| 欧美情色亚洲| 97免费视频在线观看视频| 精品精品精品| 国产伦乱91| 亚洲黄色视频在线观看视频| 久久男人| 久久精品高清无码一区| 久久人人爽爽爽人久久久| 色综合尤物| av最新免费中文字幕| 97干在线| 亚洲精品欧洲色| 国内外毛片在线观看| 国产传媒美日韩av| 五月丁香六月婷| 丰满少妇乱子伦精品无| 免费αV在线视频| 久久 精品| 97伊人超碰| 蜜桃狠狠色伊人亚洲综合 | 手机在线中文字幕国产 | 热久久九九热| 黑丝少妇麻豆| 男人的天堂2010| 久久精彩免费视频| 1769精品一区二区三区| 国产亚洲中文不卡二区| 香伊人在线| 精品欧美不卡在线播放| 天天做天天爱| 天天网综合| 超碰97 线线 在现| 96麻豆精品一区二区三区| 99热这里只有精品1| 97精品97久久| 日韩欧美资源| 美女91色黄18| 亚洲日本天堂| 99re在线视频这里只有精品| 蜜桃精品一区二区三区久在线| 亚州色图欧美| 欧美性天天影院| 日韩电影天堂视频一区二区| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 美女91AV| 亚洲日韩国产精品| 天天干人人看综合| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 国产日韩色综合| 黄色激情电影在线观看| 亚洲国产精品9999在线观看| 又粗又长又爽在线观看| 无码精品人妻一区二区三区妖精| 日操粉逼逼| 99久久久无码国产精品性男| 97最新在线播放视频| 色五月综合| 人妻夜夜爽天天爽麻豆三区网站 | 亚洲欧美色图| 国产精品蜜臀久久久久无码AV| 17c在线成人免费A片观看| 一区二区三区探花在线观看| 狠狠操狠狠爱| 欧美色图中文字幕| 日韩精品.久久精品.AV女优.天美传媒| 五月丁香激情综合| 91九久| 99啪啪| 欧美激情黑人| 嗯嗯啊啊操我| 午夜操逼不卡| 717影院理论午夜伦八戒| 志村玲子视频一区二区| 六月丁操逼| 久久精品无码熟妇一区二区三区视频导航| 久久久日本电影| 国产无吗在线播放| 亚洲一区二区中文字幕| 水澄无码AV| 伦理弟一页| 日本欧美不卡| 免费一级黄色录像影片| 综合婷婷| 日本精品性生活久久久| 91欧美网| 啪啪免费| 97精品一二区| 国产亚热在线久久| 国产 日韩 欧美一区| 国产A v无码专区| 国产九月婷婷| 99国内熟女露脸视频| 丁香九月婷婷| 欧美性爱系列| 欧亚久久偷拍视频| 国产精品一区二区密臀| 国产一区二区三区视频在线看| 乱老女人一区二区视频| 九九拍拍精品视频在线播放| 97这里有精品| 熟女字幕| 久久久久亚洲精品| 探花精品 一区二区| 色爱三区| 性性欧美| 色牛aV| 色五月婷婷网| 尤物视频网 刘玥| 日本熟女不卡视频| 男人的天堂亚洲| 97超级色碰碰| 成人免费看吃奶视频网站| renqi久久久久久久久久久久| 99热18这里只有精品| 黄色成人网久久久久久| 天天做天天爱天天高潮| 骚熟女AV网| 成人三一级一片aaa| 综合亚洲情色| 立川理惠被中出无码| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 智利AV在线网| 国产成人综合在线播放| 麻豆九九九| 欧美精品三区| 久草久热| 91无码西班牙视频在线| 操狠狠| 99999亚洲| 日韩人妻精品久久久久| 欧美性爱超碰97| 国产精品青草综合久久| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 亚洲色图8| 日本操BAV| 人妻精品一区一区三区蜜桃91| 亚洲天堂7777| 2019男人的天堂| 在线国产探花| 久久九九97| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 骚货| 五月丁香黄色网| 久久伊人网视频一区二区三区| 亚洲中字幕日本一区二区三区| 亚洲情色五月天 | 国产精品夜夜夜| 日本免费亚洲欧美| 78精品| 欧美亚洲激情小说| 涩综合导航| 淫骚熟女一区二区三区| 男女激情黄色网址| 久久成人东京热人妻| 六月天婷婷| 少妇综合| 性性久久| 91|九色|国产熟女| 91熟女在线| 宗合情欲网| 日韩亚洲国产视频| 99在线观看视频在线高清| 99热这里是精品| 无码精品久久久久久亚洲| 夜夜国产一区| 中文字幕精品区先锋资源| 国产精选视频| 亚洲综合在线高清| 久久夜黄色无码A级大片| 久久久久久久久9| 96久久科窝| 欧美αv.com| 超碰导航97| 黑人中出21连凳花野真衣| 成人八戒网站| 亚洲91色| 丰满丝袜少妇AV| 丝袜AV一二三区| 日本黄色大片一级视频免费麻豆| 啊啊啊轻点在线观看| 男人的天堂2018东京热啪啪啪| 亚洲精品国产无码高清| 久久久久久99999国产精品| 欧美.亚洲.另类.丝袜.制服.诱惑| 国产亚洲精品久久久久小| 国产97在线播放| 久久久久久九九九九-美女久久久久久久-成人AV | 7777奇米影视久久| 老司机香蕉| 人妻爽爽啪视频| 中文字幕在线观看丝袜| 国产免a费看黄片在线| 97免费视频在线| 亚洲欧美在线综合| 欧美黑人性猛交91| 秋霞欧美性爰视频| 久热影视| 久草加勒比一区在线| 91激情国产| 久久久久ab| 白丝1区2区3区| 午夜一区| 色牛牛AV| 一本一道波多野毛片中文在线| 97av在线观看| 国内精品久9| 国产白领连续中出在线播放| 玖玖综合.com| 激情五月综合| 最新国产亚洲精品精品国产亚洲综合| 日韩av免费一级电影| 欧美劲爆第一页| 天堂网亚洲区手机版| 日韩精品国模| 久久久婷| 亚洲AV乱码专区国产噜噜亚洲| 亚洲精品亚洲人成人网| 亚洲αv一区二区三区| 亚洲精品性爱片| 操操操五月天婷婷丁香影院| 麻豆天美传媒毛片| 久久免费9| 大香蕉99re| 997色在线| 肉丝中文无码高清| 操老熟女AV| 97超碰这里只有精品| 少妇500双飞99| 伊人五月天| 日本精品五区| 天美91| 97av在线观看| 亚洲情色综合| 男人天堂2017| 中文字幕欧美丝袜07资源| 97精品久久久久中文字幕| 加勒比综合九九99视频在线播放| 97这里都是精品| 蜜桃精品一区二区三区ww| 白嫩嫩一区| 蜜桃视频精品一区二区| 97色色视频| 久久精品人体| 97爱爱爱综合| 无码日韩网站| 曰韩成人免费视频| 99热色精品| 色婷五月天| 奸色色 男人天堂 天天射| 天天看片天天爽| 五月久久HDAV| 躁躁日曰躁2020| 日韩丝袜高跟制服在线观看| 日本淫穴在线| 亚洲美腿丝袜香蕉影视欧美成人| 男人天堂导航| 日本女人久久久| 无码精品久久久久久亚洲| 亚洲最新Av| 亚洲天堂五月天国产| 超碰国产精品久| 强被迫伦姧在线观看无码网站| 91东京热男人的天堂| 国产精品免费日韩| 国产精品欧美日韩久久| 性爱精品一区| 日韩欧美女优电影| 欧美 亚洲 制服 精品| 亚洲视频一二区| 天天操熟妇| 欧美碰碰综合色| 青娱乐999| 爆操无码| 992这里有精品| 性色高清在线| 精彩久久中文| 久久精品国产亚洲粉嫩| 国产精品久久久久久久久久梁医生| 超碰欧美| 国产精品呦一区二区三区| 色色五月婷| 91女人的网站| 亚洲欧美啪啪| 亚洲中文字幕精品一区| 免费无码国产精品v片在线观看| 国产精品岛国片在线观看| 啊啊啊啊嗯嗯嗯用力好爽 | 2020国产精品| 激情图片亚洲色图| 国产亚热在线久久| 精品国产Av无码久久久亚洲| 人人操人人大香蕉| 99丝袜福利在线播放| 免费成人在线熟妇网| 丰满人妻-区二区三区| 五十路六十路七十路熟婆| 91啪啪视频| 亚洲欧美日韩电影网站一区 | www.激情| 欧美日韩222| 97超碰精品图片| 中国zzijzzijzzwww精品| 家庭乱伦网站国产| 欧美老妇综合网| 九九九九AV| 欧美操人视频| 清柠毛片| 天天影视91看看| 国内伊人久久久久久网站视频| 淫荡少妇免费| 熟女色图在线| 91女优在线观看| 九月激情婷婷| 啊啊啊啊啊操我视频| 久男人久久| 性爱视频免费网址| 久久色人体| 亚洲老司机123专区| 亚洲无码精品AV久久久| 丁香激情网| 亚洲综合有码| 欧美强奸乱| 麻豆国产成人精品| 成人免费看吃奶视频网站| 天天狠| 91中出视频| 丁香五月天视频| 亚洲情色综合网| 欧美成人性爱视频免费观看 | 高清国产精品福利网站| 精品女人999| 加勒比海人人操超碰在线| 亚洲成a人在线观看久| 一二三四视频在线社区中文字幕| 日韩av电影成人在线| 亚洲情色电影网| 91五十路| 色香色香欲天天天影视综合网| 欧美啪啪天堂| 国产免费一区在线观看| 欧美综合亚洲| 亚洲夜夜欢无码一区二区| 男人天堂2019| 夜夜操2028| 搡老熟女免费视频| 色婷婷综合久久久久中文一区二区| 国产精品一区二区密臀| 久草免费在线一区二区| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 你懂的在线观看区国产| 久热精品在线| 欧美激情综合网| 激情文学88| 日韩有码中文字幕女同性恋| 欧美色图综合| 婷婷五月天激情网| 天美91| 丁香五月天婷婷姐| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 九九九九九九九九九九九蜜桃| 欧美黄色片在线播放| 亚洲97资源| 国产精品久久久久久久久久久久久久久久久久| 国产精品久久久亚洲第一牛牛_在线观看| 亚洲少妇激情视频| 欧美日韩精品国产91| 亚洲情色五月天| 91久久久久久久| 日本性爱欧美性爱| 欧美精品黑人猛交高潮| 欧美中文字幕一区| 91久操| 91深夜夜| 亚洲激情在线观看一区| 国产熟妇 码视频户外直播 | 狠狠干狠狠色| 久久综合激情| 91总综合网| 亚洲、日韩、综合、另类| 色五月婷婷网| 久久久久久中文版| 欧美中日韩XXXX| 蜜乳AV一区| 免费啪啪一级视频| 老熟女阿 国产91| 国产suv精品一区二区四| 99精品视频在线观看免费| 亚洲第一男人天堂| 四虎影库国产精品免费| 脫衣舞一区二区三区| 熟女高潮精品一区二区| 97二区四区| 亚欧Av| 超碰99re| 国产第二页| 大香蕉伊人色偷偷在线| 天天色天天干天天射| 极品出轨视频网站| 久久超碰免费的| 婷婷大香蕉| 国产一区免费午夜视频| 日韩久射综合| 蜜臀久久久国产| 97人肏| 欧美日韩国产中文精品字幕自在自线| 96精品久久| 亚洲色棕合| 99国产天美| 丁香五月婷婷基地| 最新中文字幕在线亚洲| 亚洲天堂久久久久久粉红视频| 久久色一区二区| 九九热九九热| 探花精品视频| www.亚洲成人一区| 亚洲一区二区三区婷婷| 超碰在线1234区| 欧美72网页| 67914亚洲精品| 久久精品色欧美aⅴ一区二区| 五十路六十路七十路熟婆| 绑缚麻绳人妻寝取完整版| 人妻少妇蜜桃视频欧美一区| 欧美成人性爱视频大全| 日本操逼二区| 亚洲麻豆av一区二区| 丝袜AV一区二区三区| 久草色在线观看| 超碰一区二区| 亚洲色图美腿丝袜| 欧美18禁91| 无码一区二区三区四区五区六区七区八区九区十区视频 | 婷婷色播婷婷| 极品美女福利在线观看| 亚洲伊人久久综合97| 无码人妻精品酒店| 91成人无码| 日韩天天本| 中文字幕人乱码中文字的预防方法 | 啊啊啊想要| 一区二区精品更新提醒| 色色五月天婷婷| 91美女小视频| 91超碰在线播放| 久草福利在线资源站| 久久性生大片免费观看性| 午夜男人天堂| 黄色大片视频在线免费看| 美日韩在线不卡人妻| 欧美精品成人在线播放| 天天在线91| 午夜久久一区二区无码中出| 国产女同视频在线播放| 欧美日韩黄色片一区二区三区四区人与兽做爱|