免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

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

JSP+Servlet+JDBC銀行預(yù)約管理系統(tǒng)畢設(shè)全解析

JSP+Servlet+JDBC銀行預(yù)約管理系統(tǒng)畢設(shè)全解析 簡(jiǎn)介面向畢業(yè)設(shè)計(jì)場(chǎng)景的Java Web銀行預(yù)約管理系統(tǒng)完整項(xiàng)目包覆蓋用戶在線預(yù)約、排隊(duì)叫號(hào)、業(yè)務(wù)登記、后臺(tái)管理等典型功能模塊適合需要完成類似選題的計(jì)算機(jī)專業(yè)學(xué)生參考也適用于希望熟悉JSPServlet分層結(jié)構(gòu)的入門開發(fā)者。壓縮包共499個(gè)文件其中包含92個(gè)JSP頁面、31個(gè)HTML頁面與19個(gè)CSS樣式文件構(gòu)成前端展示與控制層210個(gè)GIF文件和少量SWF輔助素材用于操作演示16個(gè)JAR包與9個(gè)Java源文件支撐核心業(yè)務(wù)另附數(shù)據(jù)庫SQL腳本、項(xiàng)目配置文件和配套報(bào)告整體約9.07MB結(jié)構(gòu)緊湊便于本地導(dǎo)入調(diào)試。資源已獲得179人學(xué)習(xí)瀏覽說明在同類畢業(yè)設(shè)計(jì)資料中具有一定參考價(jià)值。借助完整源碼、數(shù)據(jù)庫腳本及報(bào)告文檔可快速還原系統(tǒng)運(yùn)行流程理解預(yù)約模塊與權(quán)限控制實(shí)現(xiàn)思路對(duì)初涉JSP項(xiàng)目者而言也是分析工程目錄、配置文件與類調(diào)用關(guān)系的合適樣例。1. 銀行預(yù)約管理系統(tǒng)畢設(shè)選題里那條最穩(wěn)的路用 JSP 做的銀行預(yù)約管理系統(tǒng)本質(zhì)上就是把線下網(wǎng)點(diǎn)那套取號(hào)排隊(duì)搬到瀏覽器里用戶注冊(cè)登錄、選業(yè)務(wù)類型、約窗口時(shí)段、拿排隊(duì)號(hào)柜員在后臺(tái)叫號(hào)辦業(yè)務(wù)。作為畢業(yè)設(shè)計(jì)它的價(jià)值恰好落在「功能完整但邊界清晰」上——有登錄會(huì)話、有數(shù)據(jù)庫讀寫、有狀態(tài)流轉(zhuǎn)、有頁面交互每一層都能在答辯時(shí)講清楚又不需要你去碰支付、風(fēng)控這類說不清的黑匣子。和那些直接套 Spring Boot 模板的同學(xué)比你手里是一套自己能逐行解釋的 JSP Servlet 方案。這篇筆記把技術(shù)選型、數(shù)據(jù)庫設(shè)計(jì)、預(yù)約主流程、常見翻車點(diǎn)一次講透適合正在開題或者已經(jīng)寫了一半卡住的人。2. 技術(shù)選型與項(xiàng)目骨架JSP Servlet JDBC 這套畢設(shè)組合怎么搭才不塌2.1 為什么不用 Spring Boot畢設(shè)答辯更需要的是「能說清」很多同學(xué)一上來就想用 Spring Boot理由是以后找工作用得上。但冷靜想一下畢業(yè)設(shè)計(jì)的驗(yàn)收標(biāo)準(zhǔn)老師問的是「你項(xiàng)目里每個(gè)請(qǐng)求從瀏覽器到數(shù)據(jù)庫經(jīng)歷了什么」而不是「你用了哪個(gè)版本的自動(dòng)配置」。Spring Boot 的自動(dòng)裝配和內(nèi)嵌容器對(duì)你是個(gè)黑匣子一旦被追問你大概率只能答「框架幫我處理了」。而 JSP Servlet JavaBean JDBC 這套組合請(qǐng)求生命周期是透明的瀏覽器發(fā) HTTP 請(qǐng)求 → web.xml 映射到 Servlet → Servlet 調(diào) DAO → DAO 拿 JDBC 連數(shù)據(jù)庫 → 結(jié)果回填到 JSP 渲染。每一步都能指著代碼說清楚這是它在畢設(shè)場(chǎng)景里最大的優(yōu)勢(shì)。我一般會(huì)建議選 JDK 1.8 Tomcat 8.5/9.0 MySQL 5.7/8.0 這套經(jīng)典組合。Tomcat 8.5 之后對(duì) JSP 2.3 和 EL 3.0 支持很穩(wěn)不會(huì)出現(xiàn)老版本那種解析報(bào)錯(cuò)。MySQL 選 8.0 的話注意驅(qū)動(dòng)類名要寫com.mysql.cj.jdbc.Driver這是這幾年最容易踩的坑下面專門講。2.2 目錄結(jié)構(gòu)與包劃分讓答辯老師一眼看到分層JSP 項(xiàng)目最怕把所有東西堆在 WebContent 根目錄下頁面、Servlet、工具類混成一鍋粥。常見做法是按 MVC 分三層包既方便自己維護(hù)答辯時(shí)畫架構(gòu)圖也好看。我習(xí)慣的結(jié)構(gòu)是這樣BankAppoint/ ├── src/ │ ├── com.bank.entity/ # 實(shí)體類User、Appointment、Window │ ├── com.bank.dao/ # 數(shù)據(jù)訪問UserDao、AppointmentDao │ ├── com.bank.service/ # 業(yè)務(wù)邏輯預(yù)約防重、叫號(hào)狀態(tài)流轉(zhuǎn) │ ├── com.bank.servlet/ # 控制器LoginServlet、AppointServlet │ ├── com.bank.util/ # DBUtil、MD5Util、分頁工具 │ └── com.bank.filter/ # 登錄攔截、編碼過濾器 ├── WebContent/ │ ├── WEB-INF/ │ │ ├── web.xml # 核心配置Servlet映射、歡迎頁 │ │ └── view/ # JSP頁面放WEB-INF下禁止直接URL訪問 │ │ ├── login.jsp │ │ ├── register.jsp │ │ ├── appoint.jsp │ │ └── admin/queue.jsp │ ├── static/css/ main.css │ ├── static/js/ appoint.js │ └── static/img/關(guān)鍵點(diǎn)是 JSP 頁面放在WEB-INF下面用戶只能通過 Servlet 內(nèi)部轉(zhuǎn)發(fā)訪問直接敲 URL 會(huì) 404。這既是安全習(xí)慣也是答辯時(shí)能拿出來講的「訪問控制」設(shè)計(jì)。另外實(shí)際項(xiàng)目中需要在web.xml里配置welcome-file指向登錄頁不然部署后訪問根路徑會(huì)報(bào) 404。2.3 運(yùn)行環(huán)境與關(guān)鍵參數(shù)Tomcat、JDK、連接串環(huán)境搭好后先別急著寫代碼把配置項(xiàng)統(tǒng)一確認(rèn)一遍能省后面大量排錯(cuò)時(shí)間。Tomcat 的連接池參數(shù)按畢設(shè)的并發(fā)量來就夠了不用刻意壓很大但要知道每個(gè)參數(shù)是干什么的。一般來說我習(xí)慣在server.xml的 Connector 里這樣配Connector port8080 protocolHTTP/1.1 maxThreads200 minSpareThreads25 acceptCount100 connectionTimeout20000 redirectPort8443 /邏輯說明maxThreads200表示 Tomcat 最多同時(shí)處理 200 個(gè)請(qǐng)求超出后進(jìn)入等待隊(duì)列。畢設(shè)演示的并發(fā)量根本到不了這個(gè)數(shù)但如果預(yù)約頁面在同學(xué)間集中點(diǎn)開時(shí) 500往往是這個(gè)值被默認(rèn)的 150 卡住調(diào)大后立刻緩解。minSpareThreads25是常駐空閑線程數(shù)保證請(qǐng)求來了不用頻繁創(chuàng)建線程。acceptCount100是等待隊(duì)列長(zhǎng)度超過這個(gè)值會(huì)直接拒絕連接。數(shù)據(jù)庫連接串這里必須強(qiáng)調(diào)一下MySQL 8.0 和 5.7 的寫法不一樣同一個(gè)項(xiàng)目從 5.7 遷到 8.0只改驅(qū)動(dòng)類名是不夠的版本驅(qū)動(dòng)類名連接串關(guān)鍵參數(shù)MySQL 5.7com.mysql.jdbc.DriveruseUnicodetruecharacterEncodingutf8MySQL 8.0com.mysql.cj.jdbc.DriveruseUnicodetruecharacterEncodingutf8serverTimezoneAsia/ShanghaiMySQL 8.0 必須加serverTimezone否則會(huì)報(bào)The server time zone value異常。useSSLfalse在本地開發(fā)可以關(guān)掉省得控制臺(tái)刷證書警告。驅(qū)動(dòng) jar 包放在WEB-INF/lib下別用 Maven 的同學(xué)記得 Build Path 里手動(dòng)添加這是新手最常見的問題。3. 數(shù)據(jù)模型與注冊(cè)登錄從三張表到第一個(gè)能跑的 JSP 頁面3.1 三張核心表字段設(shè)計(jì)決定業(yè)務(wù)做起來順不順手銀行預(yù)約的核心實(shí)體只有三個(gè)用戶、預(yù)約單、窗口/時(shí)段。很多畢設(shè)把表設(shè)計(jì)成七八張弄得自己后面寫 JOIN 寫到崩潰。我傾向于先建這三張表看業(yè)務(wù)擴(kuò)展再追加。用戶表承載登錄和身份信息預(yù)約單是系統(tǒng)的心臟窗口表則是叫號(hào)的基礎(chǔ)。用戶表t_user字段類型說明idINT AUTO_INCREMENT主鍵usernameVARCHAR(30) UNIQUE登錄名注冊(cè)時(shí)查重passwordVARCHAR(64)存 MD5 加鹽后的密文real_nameVARCHAR(20)真實(shí)姓名id_cardVARCHAR(18)身份證號(hào)預(yù)約時(shí)展示用phoneVARCHAR(11)短信通知預(yù)留字段create_timeDATETIME注冊(cè)時(shí)間預(yù)約單表t_appointment字段類型說明idINT AUTO_INCREMENT主鍵user_idINT關(guān)聯(lián) t_user.idwindow_idINT關(guān)聯(lián) t_window.idapp_dateDATE預(yù)約日期time_slotVARCHAR(10)時(shí)段09:00-10:00 等queue_noINT排隊(duì)號(hào)同一天同一窗口自增statusTINYINT0待叫號(hào) 1已叫號(hào) 2已完成 3已過號(hào) 4已取消create_timeDATETIME下單時(shí)間窗口表t_window字段類型說明idINT AUTO_INCREMENT主鍵window_nameVARCHAR(50)如「綜合業(yè)務(wù)1號(hào)窗」service_typeVARCHAR(30)對(duì)公/個(gè)人/理財(cái)max_numINT該窗口每日最大預(yù)約數(shù)start_timeTIME開始營(yíng)業(yè)end_timeTIME結(jié)束營(yíng)業(yè)日志表字段設(shè)計(jì)時(shí)容易犯的錯(cuò)是把status存成字符串比如「已預(yù)約」「已完成」。這樣做查詢統(tǒng)計(jì)時(shí)非常痛苦你得寫WHERE status已預(yù)約一旦頁面文案改了全部報(bào)錯(cuò)。正確做法是存數(shù)字頁面展示時(shí)再做映射。這一點(diǎn)在答辯時(shí)老師說「為什么用數(shù)字不用字符串」時(shí)你可以理直氣壯地回答狀態(tài)機(jī)可枚舉數(shù)字存儲(chǔ)節(jié)省空間且避免文案變動(dòng)引發(fā)臟數(shù)據(jù)。建表 SQL 可以直接在 Navicat 或命令行執(zhí)行注意表名前綴t_是個(gè)人習(xí)慣避免和 MySQL 保留字沖突CREATE TABLE t_user ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(30) NOT NULL UNIQUE, password VARCHAR(64) NOT NULL, real_name VARCHAR(20), id_card VARCHAR(18), phone VARCHAR(11), create_time DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;邏輯說明UNIQUE約束在數(shù)據(jù)庫層面保證用戶名唯一這是注冊(cè)功能的第一道防線。ENGINEInnoDB必須指定因?yàn)楹竺骖A(yù)約防重要靠事務(wù)和行鎖MyISAM 不支持。CHARSETutf8mb4比utf8多支持生僻字和 Emoji 符號(hào)銀行客戶名字里萬一有生僻字用utf8會(huì)插入失敗。DEFAULT CURRENT_TIMESTAMP是 MySQL 的常用簡(jiǎn)化寫法免得 Java 端手動(dòng)塞當(dāng)前時(shí)間。3.2 DBUtil 與 try-with-resources不會(huì)寫工具類的 JSP 項(xiàng)目必翻車數(shù)據(jù)庫連接工具類是整個(gè)項(xiàng)目的基石這塊寫不好后面所有 DAO 都會(huì)出問題。新手最常見的錯(cuò)是每寫一個(gè)查詢就new一個(gè)連接用完不關(guān)最后數(shù)據(jù)庫連接數(shù)耗盡頁面直接報(bào) 500。常見做法是寫一個(gè)簡(jiǎn)單的 DBUtil用靜態(tài)代碼塊加載驅(qū)動(dòng)用ThreadLocal保證一個(gè)請(qǐng)求一個(gè)事務(wù)這里給出基本版本public class DBUtil { private static final String URL jdbc:mysql://localhost:3306/bank_appoint? useUnicodetruecharacterEncodingutf8 serverTimezoneAsia/ShanghaiuseSSLfalse; private static final String USER root; private static final String PASSWORD 123456; static { try { Class.forName(com.mysql.cj.jdbc.Driver); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static Connection getConnection() throws SQLException { return DriverManager.getConnection(URL, USER, PASSWORD); } public static void close(Connection conn, PreparedStatement ps, ResultSet rs) { try { if (rs ! null) rs.close(); } catch (SQLException e) { } try { if (ps ! null) ps.close(); } catch (SQLException e) { } try { if (conn ! null) conn.close(); } catch (SQLException e) { } } }邏輯說明Class.forName加載驅(qū)動(dòng)后后面DriverManager才能識(shí)別連接串。close方法按ResultSet → PreparedStatement → Connection的順序關(guān)閉順序反了會(huì)出SQLException。這個(gè)類的關(guān)鍵不是代碼本身而是所有 DAO 查詢都必須走同一個(gè)getConnection()并且在 finally 塊里調(diào)用close。我見過最嚴(yán)重的翻車現(xiàn)場(chǎng)是查詢成功后忘記關(guān)連接演示時(shí)前三次正常第四次開始全部卡死重啟 Tomcat 又好了這就是典型的連接泄漏。3.3 注冊(cè)登錄的 Servlet 實(shí)現(xiàn)密碼加鹽與 Session 會(huì)話注冊(cè)和登錄是整個(gè)系統(tǒng)的入口也是面試官最愛問的模塊。密碼不能明文存數(shù)據(jù)庫這是安全紅線。畢業(yè)設(shè)計(jì)不用上 BCrypt用最簡(jiǎn)單的 MD5 加鹽就夠講清楚原理。加鹽的意思是用戶在密碼后面拼上一段隨機(jī)字符串再哈希避免兩個(gè)密碼相同的用戶得到一樣的密文。注冊(cè)邏輯的代碼看這一段WebServlet(/register) public class RegisterServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username request.getParameter(username); String rawPassword request.getParameter(password); String salt generateSalt(); // 隨機(jī)6位字符串 String hashed MD5Util.md5(rawPassword salt); User user new User(); user.setUsername(username); user.setPassword(hashed); user.setSalt(salt); UserDao dao new UserDao(); if (dao.findByUsername(username) ! null) { request.setAttribute(errorMsg, 用戶名已被占用); request.getRequestDispatcher(/WEB-INF/view/register.jsp) .forward(request, response); return; } if (dao.register(user) 0) { response.sendRedirect(login.jsp); } } }邏輯說明request.setAttribute配合forward是 JSP 項(xiàng)目里回顯錯(cuò)誤信息的標(biāo)準(zhǔn)做法錯(cuò)誤提示能顯示在注冊(cè)頁面上而 URL 不變。sendRedirect用在注冊(cè)成功后讓瀏覽器重新請(qǐng)求登錄頁而不是直接forward這樣可以防止用戶刷新時(shí)重復(fù)提交注冊(cè)表單。這是「登錄后跳轉(zhuǎn)用重定向、傳參用轉(zhuǎn)發(fā)」的基本規(guī)則答辯時(shí)被問「為什么這里用 Redirect 不用 Forward」就能答上來。登錄之后把用戶對(duì)象放進(jìn) Sessionrequest.getSession().setAttribute(loginUser, user);后面所有 JSP 頁面都從 Session 里取當(dāng)前用戶前端頁面用EL表達(dá)式直接展示對(duì)象屬性這就引出了「jsp 個(gè)人信息展示頁面」的核心寫法。用戶中心的 JSP 片段如下div classuser-info 歡迎您${sessionScope.loginUser.realName} p身份證${sessionScope.loginUser.idCard}/p p手機(jī)號(hào)${sessionScope.loginUser.phone}/p /div${sessionScope.loginUser.realName}是 EL 表達(dá)式它做的事情等價(jià)于session.getAttribute(loginUser).getRealName()但省掉了類型轉(zhuǎn)換和空指針判空。注意如果 Session 里沒有l(wèi)oginUser這里會(huì)顯示空白而不會(huì)報(bào)錯(cuò)這是 EL 表達(dá)式的特性新手經(jīng)常誤以為是數(shù)據(jù)丟了。4. 預(yù)約主流程落地叫號(hào)狀態(tài)機(jī)與防重復(fù)提交的實(shí)現(xiàn)細(xì)節(jié)4.1 預(yù)約鏈路拆解從按鈕到排隊(duì)號(hào)經(jīng)歷了什么預(yù)約功能是系統(tǒng)的業(yè)務(wù)核心流程說起來不復(fù)雜用戶選擇日期、業(yè)務(wù)類型、窗口時(shí)段 → 提交預(yù)約 → 系統(tǒng)校驗(yàn)合法性 → 生成排隊(duì)號(hào) → 落在數(shù)據(jù)庫。難點(diǎn)在并發(fā)場(chǎng)景下的數(shù)據(jù)一致性同一時(shí)段、同一窗口兩個(gè)人同時(shí)搶最后一個(gè)名額憑什么一個(gè)成功一個(gè)失敗整個(gè)鏈路在 Servlet 層是這樣的順序。先接收參數(shù)再做業(yè)務(wù)校驗(yàn)最后寫庫WebServlet(/appoint) public class AppointServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { User loginUser (User) request.getSession().getAttribute(loginUser); if (loginUser null) { response.sendRedirect(login.jsp); return; } String date request.getParameter(appDate); String windowIdStr request.getParameter(windowId); String timeSlot request.getParameter(timeSlot); AppointmentService service new AppointmentService(); try { Appointment app service.createAppointment( loginUser.getId(), Integer.parseInt(windowIdStr), date, timeSlot); request.setAttribute(queueNo, app.getQueueNo()); request.setAttribute(windowName, app.getWindowName()); request.getRequestDispatcher(/WEB-INF/view/appointSuccess.jsp) .forward(request, response); } catch (DuplicateAppointmentException e) { request.setAttribute(errorMsg, 您當(dāng)天在此窗口已有有效預(yù)約); request.getRequestDispatcher(/WEB-INF/view/appoint.jsp) .forward(request, response); } } }邏輯說明第一層校驗(yàn)是 Session 是否登錄這個(gè)能擋住大部分未授權(quán)訪問但不能依賴它后面還要加 Filter。第二層是業(yè)務(wù)校驗(yàn)createAppointment返回的Appointment對(duì)象里帶上了queueNo這是真正的排隊(duì)號(hào)。注意這里把排隊(duì)號(hào)生成放在 Service 層而不是 Servlet 層因?yàn)樯商?hào)需要同步查詢當(dāng)前最大值再自增這屬于業(yè)務(wù)邏輯。Servlet 只負(fù)責(zé)參數(shù)解析、調(diào)用服務(wù)、分發(fā)視圖保持薄控制器的狀態(tài)。4.2 防重復(fù)提交數(shù)據(jù)庫唯一約束和前置狀態(tài)檢查雙重保險(xiǎn)銀行預(yù)約最怕兩件事同一個(gè)人對(duì)同一個(gè)時(shí)段約了兩次或者兩個(gè)人同時(shí)搶最后一個(gè)號(hào)。單機(jī)畢設(shè)場(chǎng)景里用「數(shù)據(jù)庫唯一約束 Service 層前置狀態(tài)檢查」雙保險(xiǎn)足夠。先看數(shù)據(jù)庫層怎么兜底ALTER TABLE t_appointment ADD UNIQUE KEY uk_user_window_time (user_id, window_id, app_date, time_slot);邏輯說明這組唯一鍵意味著同一個(gè)用戶對(duì)同一個(gè)窗口、同一天、同一個(gè)時(shí)段只能有一條記錄。只要數(shù)據(jù)庫層面擋住重復(fù)就算 Service 層代碼寫漏了也不會(huì)產(chǎn)生臟數(shù)據(jù)。這是防御性設(shè)計(jì)代碼防君子約束防小人。app_date和time_slot合起來代表一個(gè)具體的時(shí)間段單獨(dú)一個(gè)app_date太粗單獨(dú)一個(gè)time_slot太細(xì)必須組合才精確。Service 層的關(guān)鍵代碼是「先查再插」的事務(wù)控制。這里有一個(gè)必須避開的坑兩段式「先 SELECT 再 INSERT」在并發(fā)下有空窗期兩個(gè)人同時(shí) SELECT 都看到名額充足一起 INSERT 就超售了。常見做法是 Java 層用同步塊鎖住關(guān)鍵操作數(shù)據(jù)庫層用唯一索引兜底public Appointment createAppointment(int userId, int windowId, String date, String timeSlot) throws DuplicateAppointmentException { synchronized (AppointmentService.class) { if (appDao.existsValidAppointment(userId, windowId, date, timeSlot)) { throw new DuplicateAppointmentException(該時(shí)段已有預(yù)約); } int currentMax appDao.getCurrentQueueNo(windowId, date); Appointment app new Appointment(); app.setUserId(userId); app.setWindowId(windowId); app.setAppDate(date); app.setTimeSlot(timeSlot); app.setQueueNo(currentMax 1); app.setStatus(0); appDao.insert(app); return app; } }邏輯說明synchronized (AppointmentService.class)在單機(jī)部署下相當(dāng)于把所有預(yù)約請(qǐng)求串行化雖然犧牲了一點(diǎn)吞吐量但換來了絕對(duì)的排隊(duì)號(hào)唯一性。這句代碼在答辯時(shí)能引出一個(gè)關(guān)鍵討論點(diǎn)如果部署到多臺(tái)服務(wù)器synchronized就失效了需要引入 Redis 分布式鎖或者數(shù)據(jù)庫悲觀鎖。你可以順著這個(gè)話題把分布式鎖的原理講一遍會(huì)顯得技術(shù)深度很好但畢設(shè)只需做到單機(jī)鎖 唯一索引就夠了——這也是「先能在單機(jī)跑對(duì)再談分布式」的工程原則。getCurrentQueueNo的 SQL 要留意一個(gè)細(xì)節(jié)MAX(queue_no)如果是 NULL 說明當(dāng)天還沒人約需要默認(rèn)返回 0否則currentMax 1會(huì)算出 NULL。這個(gè)坑很多人沒見過因?yàn)閿?shù)據(jù)量小的時(shí)候總是有數(shù)據(jù)的一旦沒人約過就翻車。4.3 叫號(hào)狀態(tài)流轉(zhuǎn)讓「待叫號(hào)、已叫號(hào)、已過號(hào)」轉(zhuǎn)起來預(yù)約單的status字段就是一臺(tái)小型狀態(tài)機(jī)。設(shè)計(jì)狀態(tài)機(jī)的好處是業(yè)務(wù)流程清晰代碼里不會(huì)出現(xiàn)一堆if嵌套判斷。核心是明確誰有權(quán)限讓狀態(tài)從 A 變成 B只有窗口柜員角色能叫號(hào)只有系統(tǒng)能判定超時(shí)過號(hào)用戶只能取消自己「待叫號(hào)」?fàn)顟B(tài)下的預(yù)約。我叫號(hào)功能的 DAO 層更新語句寫成這樣public int callNext(int windowId, String date) { String sql UPDATE t_appointment SET status 1 WHERE window_id ? AND app_date ? AND status 0 ORDER BY queue_no ASC LIMIT 1; // 執(zhí)行后返回受影響行數(shù)0表示當(dāng)前沒有待叫號(hào)客戶 }這里有一個(gè)值得注意的執(zhí)行順序問題MySQL 的UPDATE ... ORDER BY ... LIMIT 1會(huì)自動(dòng)鎖定第一條匹配的行在單表操作下不會(huì)出現(xiàn)兩個(gè)人同時(shí)叫到同一個(gè)號(hào)。但如果你先SELECT找出最小的queue_no再UPDATE中間就有時(shí)間窗口可能在多線程演示時(shí)叫到同一個(gè)人兩次。所以一句話給新手能一條 SQL 做完的狀態(tài)流轉(zhuǎn)就不要拆成兩條。這樣既快又安全。狀態(tài)流轉(zhuǎn)規(guī)則看起來復(fù)雜落到表格里就非常直觀status含義可觸發(fā)的動(dòng)作目標(biāo)狀態(tài)0待叫號(hào)柜員點(diǎn)擊「呼叫下一個(gè)」1 已叫號(hào)0待叫號(hào)用戶點(diǎn)擊「取消預(yù)約」4 已取消1已叫號(hào)柜員點(diǎn)擊「完成辦理」2 已完成1已叫號(hào)超過 2 分鐘未辦理3 已過號(hào)過號(hào)判斷我一般不在數(shù)據(jù)庫里做定時(shí)任務(wù)而是放到「柜員叫號(hào)前檢查」叫號(hào)時(shí)先把所有status1且update_time超過兩分鐘的記錄批量置為 3再查下一個(gè)待叫號(hào)。這種懶加載式的狀態(tài)檢查代碼簡(jiǎn)單不依賴額外組件也符合叫號(hào)大屏的實(shí)際業(yè)務(wù)節(jié)奏。答辯時(shí)可以提一句真實(shí)銀行系統(tǒng)用的是延時(shí)消息或定時(shí)掃描畢設(shè)用懶檢查即可。5. JSP 頁面細(xì)節(jié)與常見問題排查亂碼、驅(qū)動(dòng)、JSTL 這幾個(gè)坑一次說清5.1 中文亂碼三處 UTF-8 設(shè)置缺一不可中文亂碼是 JSP 項(xiàng)目里出現(xiàn)頻率最高的玄學(xué)問題幾乎每個(gè)人都被折騰過。它不像代碼報(bào)錯(cuò)那樣給你明確的堆棧而是頁面出現(xiàn)「???」或者「?±èˉ」看起來毫無頭緒。根據(jù)血淚經(jīng)驗(yàn)亂碼只會(huì)在三個(gè)地方產(chǎn)生請(qǐng)求參數(shù)、JSP 頁面渲染、數(shù)據(jù)庫存取。這三處必須全部設(shè)成 UTF-8少一處都會(huì)出詭異現(xiàn)象。JSP 頁面第一行必須寫% page contentTypetext/html; charsetUTF-8 pageEncodingUTF-8 %注意這里有兩個(gè)屬性contentType是告訴瀏覽器怎么解析pageEncoding是告訴 JSP 編譯器怎么讀這個(gè)文件。如果文件本身是 UTF-8 編碼但pageEncoding寫成 ISO-8859-1中文全變成亂碼。這個(gè)錯(cuò)很難排查因?yàn)槟愦蜷_代碼文件看是正常的運(yùn)行出來就是亂。然后是請(qǐng)求亂碼。POST 請(qǐng)求的參數(shù)Tomcat 8 之后默認(rèn)按 UTF-8 解碼但穩(wěn)妥起見還是在 Servlet 里加一句request.setCharacterEncoding(UTF-8);最好是通過 Filter 統(tǒng)一處理不用每個(gè) Servlet 里重復(fù)寫。寫一個(gè)簡(jiǎn)單的 EncodingFilter 就能解決WebFilter(/*) public class EncodingFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding(UTF-8); response.setCharacterEncoding(UTF-8); chain.doFilter(request, response); } }最后是數(shù)據(jù)庫連接串確保characterEncodingutf8參數(shù)加上見前面 DBUtil 的 URL。這三處檢查完亂碼問題基本絕跡。很多人的亂碼其實(shí)是三處之二所以每次都「改一下好了過兩天又亂」因?yàn)橹唤鉀Q了其中一個(gè)來源另一個(gè)偶發(fā)冒出來。5.2 JSTL 與 EL 的兼容問題個(gè)人信息展示頁面為何顯示空白jsp 個(gè)人信息展示頁面在剛寫完時(shí)最容易出鬼頁面不報(bào)錯(cuò)但用戶信息那一塊死活是空白。用 EL 表達(dá)式${sessionScope.loginUser.realName}取不到值控制臺(tái)也沒有異常看起來就像數(shù)據(jù)丟了。這個(gè)問題有三個(gè)常見原因。第一JSTL 標(biāo)簽庫的 jar 包沒放進(jìn)去。JSP 頁面里如果寫了c:forEach這種 JSTL 標(biāo)簽而WEB-INF/lib下沒有jstl-1.2.jar頁面會(huì)報(bào) 500 錯(cuò)誤而不是空白。但有些環(huán)境下 Tomcat 自帶部分實(shí)現(xiàn)頁面能渲染但標(biāo)簽不生效。解決辦法是把jstl-1.2.jar和standard.jar都放進(jìn) lib 目錄版本必須匹配否則會(huì)出現(xiàn)「標(biāo)簽庫無法解析」的異常。第二Session 里的對(duì)象類型不對(duì)。比如登錄時(shí)存的是User對(duì)象但你在 JSP 里拼錯(cuò)了屬性名EL 表達(dá)式找不到屬性時(shí)會(huì)安靜地返回空字符串不拋異常。這種情況最容易誤導(dǎo)人讓人一直查數(shù)據(jù)庫而不是查頁面代碼。確認(rèn)屬性名的方法很簡(jiǎn)單在 JSP 臨時(shí)放一段% session.getAttribute(loginUser) %直接輸出對(duì)象看有沒有值有值就說明是屬性拼錯(cuò)。第三isELIgnored被設(shè)置成了 true。web.xml 或page指令里如果寫了% page isELIgnoredtrue %EL 表達(dá)式會(huì)全部變成普通字符串原樣輸出。通常是無意中從老項(xiàng)目復(fù)制配置時(shí)帶過來的。日常排查順序先看對(duì)象有沒有值 → 再看屬性名對(duì)不對(duì) → 最后看 EL 開關(guān)和 jar 包。按這個(gè)順序基本十分鐘內(nèi)解決。5.3 高頻異常排查對(duì)照表從空白頁到找不到符號(hào)把最常見的問題按「現(xiàn)象 → 原因 → 解決」整理出來比泛泛說理論有用得多。這里列幾條我實(shí)際排查過程中遇到的高頻異常。第一條ClassNotFoundException: com.mysql.jdbc.Driver?,F(xiàn)象是運(yùn)行項(xiàng)目時(shí)啟動(dòng)報(bào)驅(qū)動(dòng)找不到。原因是 MySQL 8.0 的驅(qū)動(dòng)類名改成了com.mysql.cj.jdbc.Driver或者驅(qū)動(dòng) jar 沒放進(jìn)WEB-INF/lib。解決方法是確認(rèn) MySQL 版本8.0 用cj.jdbc5.7 用舊類名然后檢查 jar 是否真的在發(fā)布目錄下注意 Build Path 加入的 jar 不等于部署到 Tomcat 的 jar。第二條HTTP Status 500 - Unable to compile class for JSP后面跟著The method ... is undefined for the type ...。現(xiàn)象是 JSP 頁面無法編譯。原因通常是導(dǎo)入了錯(cuò)誤的包比如對(duì)List用 EL 直接訪問方法或者 JSTL 標(biāo)簽的var屬性名寫錯(cuò)。解決方法是檢查 JSP 里的標(biāo)簽和屬性拼寫特別是items${list}這種寫法確保list屬性是通過request.setAttribute放進(jìn)去的。第三條頁面能打開但所有靜態(tài)資源樣式全丟了?,F(xiàn)象是 CSS 和圖片全部失效F12 看全是 404。原因是 Servlet 的 URL 映射把*.css或*.js也攔截了WebServlet(/)這種泛匹配路徑會(huì)影響靜態(tài)文件。解決方法是把靜態(tài)資源放到獨(dú)立的static目錄并在 web.xml 中對(duì)靜態(tài)資源路徑配置defaultServlet 映射。第四條java.lang.NullPointerException出現(xiàn)在調(diào)用request.getSession().getAttribute(loginUser).getId()時(shí)。原因是 Session 里沒有登錄用戶就訪問了屬性。解決方式是在 Servlet 入口統(tǒng)一做登錄校驗(yàn)不通過的直接重定向到登錄頁而不是在業(yè)務(wù)代碼里到處判空。這個(gè)用 Filter 解決下面這段代碼是關(guān)鍵WebFilter(/appoint) public class LoginFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpSession session ((HttpServletRequest) req).getSession(false); if (session null || session.getAttribute(loginUser) null) { ((HttpServletResponse) resp).sendRedirect(login.jsp); return; } chain.doFilter(req, resp); } }邏輯說明getSession(false)表示如果當(dāng)前沒有 Session 就返回 null而不是創(chuàng)建一個(gè)新的空 Session。這樣既能判斷登錄狀態(tài)又不會(huì)因?yàn)樵L問login頁面時(shí)白白創(chuàng)建一個(gè)無意義的 Session。Filter 攔截了/appoint路徑下的所有請(qǐng)求只要未登錄先重定向去登錄頁業(yè)務(wù)代碼里就不用每處都寫判空邏輯了。6. 讓排隊(duì)大屏活起來自動(dòng)刷新、坐標(biāo)定位與圖標(biāo)引入的技巧6.1 叫號(hào)大屏的自動(dòng)刷新只刷新內(nèi)容區(qū)不整頁跳銀行網(wǎng)點(diǎn)的叫號(hào)大屏就是排隊(duì)狀態(tài)的展示頁。畢設(shè)里如果做這個(gè)頁面最容易寫錯(cuò)的是用meta http-equivrefresh content30整頁刷新這個(gè)做法在只讀展示頁勉強(qiáng)能用但會(huì)把頁面狀態(tài)全部清空比如滾動(dòng)位置、選中標(biāo)簽看起來很生硬。更常見的做法是用 JavaScript 定時(shí)輪詢接口只更新數(shù)據(jù)部分的 DOM 節(jié)點(diǎn)對(duì)應(yīng)網(wǎng)上搜到的「jsp 頁面讓加載完后刷新一次」的真正訴求——頁面加載完以后更新的是數(shù)據(jù)不是整個(gè)頁面。setInterval(function () { fetch(queueStatus?windowId1) .then(function (resp) { return resp.json(); }) .then(function (data) { document.getElementById(currentNo).textContent data.currentNo; document.getElementById(waitCount).textContent data.waitCount; }); }, 5000);邏輯說明setInterval每 5 秒請(qǐng)求一次queueStatus接口接口返回當(dāng)前叫到的號(hào)碼和等待人數(shù)前端只更新這兩個(gè)文本節(jié)點(diǎn)。這種局部刷新比整頁刷新省流量、無閃爍也更接近真實(shí)系統(tǒng)。輪詢間隔 5 秒是經(jīng)驗(yàn)值太短對(duì)數(shù)據(jù)庫壓力大太長(zhǎng)會(huì)讓客戶覺得大屏「卡住了」。注意這里的接口可以用一個(gè)簡(jiǎn)單的 Servlet 返回 JSON而不是返回 JSP 頁面——展示數(shù)據(jù)用 JSON頁面渲染交給前端 JS。6.2 窗口分布圖上的坐標(biāo)定位不寫死像素值網(wǎng)點(diǎn)大廳的窗口分布示意圖經(jīng)常需要在圖上標(biāo)出每個(gè)窗口的位置對(duì)應(yīng)搜索里「jsp 圖片如何對(duì)坐標(biāo)定位」的場(chǎng)景。新手直接在 JS 里寫死left: 320px; top: 180px換一臺(tái)分辨率不同的電腦就完全錯(cuò)位。正確做法是相對(duì)坐標(biāo) 百分比定位讓標(biāo)記位置隨著圖片容器等比縮放。div idwindowMap classmap-container span classwindow-marker style="width:16px;margin-left:4px;vertical-align:text-bottom;cursor:text;" />
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
婷婷五月天黄色小说| 颜射 精品性爱av| 五月丁香操婷逼| 大香蕉五月丁香| 中字幕视频在线永久在线观看免费| 天天色综合图片| 日本一级特黄大片AAAAA级| 婷婷丁香六月| 九九碰九九爱97超| 色五月综合资源推荐| 蜜臀丁香黄色婷婷五月天| 色婷网站| 国产精产国品一二三在观看| 欧美色色色色色| 天天谢天天操| 亚洲亚洲人成综合网络| 欧美三级欧美一级| 色天堂在线| 99热这里只有精品1998| 色。 日日日| 超碰免费99| 99视频在线9| 久久五月网| 天天爽综合网| 国产三级秋霞| 99色亚洲| 天天婷婷色六月| 思思久ren热| 五月丁香婷婷综合视频| 久久伊人9| 婷婷9月天| 综合激情五月丁香| 99亚洲精品| 婷婷五月情| 婷婷开心激情五月激情网| 综合丁香婷婷五月天| 综合玖玖偷拍| 久碰久操| 亚洲精品va| 色五月婷婷在线| 99色视频免费在线规看| 天天夜夜爽| 夜夜操夜夜姧| 久热这里只有精品99re| 天天色色天天| 五月婷婷五月天| 五月婷婷在线观看黄| 天天精品视频在线观看视频| 亚洲欧美999| 五月天激情中文字幕| 久热这里只精品| 五月婷精品| 婷婷情色五月天| 美腿丝袜AV天堂网| www.久久久久久久| 五月天婷a在线| 狠狠色婷婷777| 中文字幕AV网址| 99久久五月丁香野外| 日本三级第一页| 香蕉久久五月| 久热超碰91| 啪精品| 久久婷婷丁香视频网| 五月天激情亚洲| 狠狠干五月丁香综合网| 影视av久久久噜噜噜噜噜三级| 天天插天天插| 激情五月婷婷| 国产综合丁香五月天| 丁香六月综合| www色色色com| 夜夜骑福利资源| 天天天天爽爽天干| 中文字幕成人| 超碰免费人人肏| wwww.色婷婷| 欧美色色干| 久久总和99| 五月丁香啪啪| 精品亚洲VA网站| 性色天| 五月天婷婷久久视频| www久久久| 亚洲日本韩国| 射区导航| 五月天另类小说久久小说网| 亚洲综合1024| 92久久久| 这里只有在线精品| 天天爱天天狠天天透| 五月婷婷啪啪啪| 99精品偷自拍| 欧美色色色色色色色色色色| 亚洲99视频| 婷婷射丁香| 这里只有精品视频99| 大香蕉久| 97色婷婷五月天| 天天干天天插| 色噜噜夜夜夜综合网| 26UUU成人网| 99日这里只有精品| 99精品国产在热久久| 大香人妻| 婷婷五月精品中文字幕| 婷婷综合| 亚洲久久日| 熟女激情网| 丁香五月婷婷激情中文| 性爱综合网| 色婷婷影视99| 五月天婷婷丁香蜜桃91| 五月婷婷激情综合网| 久热99视频在线观看| 综合久久五月天| 久久黄色免费视频| 超碰在线精品| 玖玖爱伊人| 思思热再线视频| 99啪啪| 人操人| 婷五月丁香俺| 性一交一乱一交A片久久四色| 伊人网色婷婷五月天| 五月丁香久久综合| 伊人碰碰碰| 色97综合婷婷天天色| 五月花在线观看视频| 另类在线| 第六色在线| 激情av| 五月天婷婷色色首页| 美女天天久久| 久99| www·五月天| 丁香五月婷婷五月| 少妇激情基地| 丁香六月婷婷综合| 婷婷激情五月天在线视频| 99热最新精品| 九九黄色网| 激情五月婷婷综合| 97碰碰在线观看视频| 久久精彩视频99| 婷婷丁香五月综合| 丁香五月在线伊人| 婷婷色色五月天| 成人 在线 日韩| 亚洲综合五月| 色碰碰视频| 99九九在线视频| 伊人久久大香天蕉亚洲特级| 中文在线成人| 久久久激情视频| 免费人人操| 婷婷五月天开心激情网| 碰碰操91| 婷婷激情五月天天天开心| 亚洲日日操| 狠狠香蕉| 天天久综合网永久入口18| 欧美色骚婷婷五月天| 色婷久久| 日日狠夜夜狠| 久久久久久久久久久44| 爱射综合| 69er小视频| 久久小说| 色色色99| 色久播播| 91主播在线| 天天舔天天摸| 26uuu四色| 欧美顶级少妇做爰HD| 五月丁香婷婷激情| 成人在线视频男人的天堂4399| 99久热这里只有精品| 久久一伦| 91一起操| 五月草视频| 丁香五月影院| 五月丁香爱婷婷深深| 五月激情综合网| va中文资源在线观看| 亚洲欧美日韩VIP| 婷婷五月天激情影片| 强奸幻女毛片| 九色PORNY9l原创自拍| 人妻videos人妻高清| 狠狠插.com| 噜噜色婷婷| 182TV大香蕉| 九九这里有精品| 色。 日日日| 99久久国产综合精品五月天喷水\| 五月丁香六月婷婷综合| 五月丁香亚洲校园欧美| 99欧美热| 亚州美女| 大香蕉综合在线| 女人天堂av| 人人超碰99| 久久久久亚洲AV成人无码电影| 99re在线观看视频| 色999;丁香五月| 无码碰碰| 国产精品涩涩涩视频网站| 久99久视频精品| 五月婷婷在线免费观看| 青草久久五月婷伊人| 婷久久综合| 五月色网| 伊人久久婷| 中文不卡一二三区| aⅤ79成人片| 亚洲99一级无嗎特制在线| 色一情一乱一乱一区91Av| 五月婷婷久久网| 操久久精| 丁香五月ⅤA久久久| 五月丁香婷婷色色| 热久久这里只有精品| 六月伊人婷婷| 停停色综合伊人| 婷婷丁香色情| 视频一二区| 99在线精品免费视频| 大香蕉中文| 欧美激情2025| 少妇久久诱惑视频| 热久久思思热思思| 色五月天天在线观看资源站| 婷婷五月丁香av网站| 激情婷婷。| 激情久久久| 99精品人人| 国产精产国品一二三在观看| 99久操视频| 丁香六月婷月91婷月| 色综合久久88色综合天天99| 久久99网| 五月婷婷亚洲色视频| www.日日日.com| 丁香五月天黄色片| 91人人爽狠狠狠| 欧美三级视频下载| 99碰视频| PORNY九色9l自拍视频成人| 玖玖婷婷五月天毛片| 大陆极品少妇内射AAAAAA| 超碰在线成人| 免费看欧美成人A片无码| 丁香五月天色婷婷| 久久婷婷六月综合综合| 丰满少妇猛烈A片免费看观看| 99在线视频精品| 天天视频亚洲| 激情欧美五月丁香| 亚洲五月丁香六月婷婷| 国产婷婷综合| 久久久久久欧美精品se一二三四| 激情五月五月婷婷| 欧美在线视频99| 日日噜噜夜夜狠狠久久丁香五月| 色色五月天婷婷| 99只有精品| 思思99热| 五月婷婷久久网| www.久操| 欧美激情综合色综合啪啪五月| 丁香五月天婷婷91| 色噜噜狠狠色综合无码久久欧美| 婷婷伊人无码| 99视频这里只有久久精品| 亚洲综合婷婷| 婷婷五月天伊人| 丁香蜜臀黄色婷婷五月天| 色五月天激情| 丁香五月花影院| 九热视频在线伦| 一区二区你懂的| 国产成人在线不卡AV| 99精品久久久| 欧美熟女乱又伦| 亚洲欧美999| 久久99热免费最新版| 琪琪色五月天| 懂色av粉嫩av蜜臀av| 色综合色香蕉网| 综合日本婷婷| 五月丁香综合啪啪啪啪啪| 色97综合婷婷天天色| 亚洲色色精品| 人妻激情综合| 婷婷五月丁香亚洲| 激情综合五月天| www色婷婷久久综合久色| 美女主播野战视步页| 丁香六月激情综合啪啪| 久久综合爱| 做爰丰满少妇1313| 五月丁香啪啪综合网| 久久久婷| 婷婷五月天成人| 天天婷婷综合亚洲亚洲| 99资源人人| 91爱啪啪| 久久国产色| www.五月天婷婷| 91九色PORNY大屁股| 97丁香五月| 青青草搞屄视频网站| 婷婷五月天综合色| 色丁香久久| 久久婷婷电影| 九九婷婷五月天影视| 色五月综合| 久操操| 综合伊人久久| 天天草比天天爽| 99热超碰在线| 欧美日韩99| 狠色色狠网| 99视频只有精品| 九月丁香欧美综合| 欧美精品熟女一区二区| 国产美女无遮挡裸体毛片A片 | 日韩人妻无码精品| 99热国产这里只有精品| 婷婷情色开心五月天99| 深爱 五月天| 婷婷五月天激情开心网| 在线综合啪| 涩涩五月天综合| 9九色首页| 色五月婷婷在线观看第一页舔| 五月丁香激情四射综合| 婷婷激情六月综合| 九九色之九九色之88| 久久久久久丁香五月| 日本三级日本三级99| 欧美日韩五月婷婷| 久久国产色| 国产在线网址1| 婷婷五月天无码视频| 99re在线精品视频| 4399亚洲视频| 六月婷婷色综合| 丁香六月婷婷色播| 一区二区乱码视频| 在线看片av| 五月丁香激情综合啪啪| 大香蕉人在线65| 5月婷婷激情在线| 狠狠色综合图片| 九九一综合精品| 性爱久久| 久久久月丁香| 伊人免费视频9| 狠狠干狠狠干狠狠干狠狠干| 一本色道久久88加勒比| 韩国久久少妇视屏| 色五月开心久久网| 熟女网站久久| 久久激情视频99| 狠狠操综合| 亚洲九九夜夜| 少妇高潮A片无套内谢麻豆传| 国产精品久久99| 久久久久er热| 欧美色骚婷婷五月天| 精品人妻伦九区久久AAA片| 久久亚洲婷婷综合色五月| 91热爆在线| 五月丁色AV| 激情网五月天| 夜夜做夜夜愛| www.91婷婷| 99干视频| 欧美成人无码高清一区二区三区| 五月天婷久久| 思思99热| 五月丁香啪啪啪免费看| 色色亚洲99com| 色导航色婷婷五月天在线观看| 色欧美日| 丁香六月啪| 五月天婷婷影院影院| 99视频在线观看地址| 99这里只有精品在线观看| 九色在线五月婷婷网址| 狼人婷婷久久| 97婷婷丁香五月天激情图片| 婷婷久久图片| 色五月大香蕉| 激情五月婷黄版| 五月丁香婷婷福利| ou洲色吧| 国产亚洲成AV人片在线观黄桃| 久久99成人性爱高清视频| 五月婷天堂视频| 久久婷婷色色| 色综合天天天天做夜夜| 狠狠爱综合网| 久草丁香婷婷五月天婷| 俺去也婷婷| 丁香六月成人| 九九这里只这里只有精品| 青吴乐视频| 色色色色色色色色网站| 六月丁香久久| 人妻操逼| 天天色播| 99久久色| 99ER热精品视频| 五月天色综合| 丁香5月婷婷| 97在线视频人妻九色| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 国产avapp 网| 九九色婷婷Av| 成人美女网| 人人人操| 日本在线va| 99热99日…..| 激情综合网丁香| 色丁香五月婷婷综合久久| 激情五月久久| 色999五月色| 亚洲天码视频www蛋播视频| 亚洲国产婷婷色五月| 激情文学 综合 九月| 五月婷婷丁香六月| 老妇操B| 久久久久久久人妻| 五月丁香啪啪激情| 深爱综合网| 人人干人人操人人摸人人做| 亚洲综合激情五月久久| 91色噜噜狠狠狠狠色综合| 色九九中文字幕| 色丁香五月婷婷| 五月婷婷深深爱| 五月激情综合美女久久| 五月天六月婷| 激情综合六月| 欧美综合五月丁香六月婷| 大香蕉AV在线| 中文字幕永久在线| 久久综合爱| 99亚洲精美视频在线观看| 亚洲图片 丁香婷婷| 香蕉AV福利精品导航| 成人精品在线| 色啪网| 色爽九九| 五月丁香婷婷在线| 超碰九色| 五月天另类视频| 五月丁香亭亭操逼| 超碰91在线| 亚洲无码成人| 91九九| 亚洲五月婷| 情色五月天网站| 日本天堂爱爱| 五月天色婷婷综合| 五月丁香久久| 4399无码视频| 九九色黄色| 91a片爽| 在线sebiav精品视频| 欧美综合五月天婷婷tin| 人与禽A片啪啪| 99精品视频免费观看近期发布| 国产又爽又猛又粗的视频A片| 色婷婷久久| AV中文在线| 亚洲成人在线播放| 草草色情综合网| 天天爱天天天射AV| 影音先锋91资源站| 玖玖爱伊人| 亚洲五月婷婷| 天天模,夜夜模夜夜爽| 99色热视频| 99日这里只有精品| 美女激情综合| 少妇大叫太大太粗太爽了A片| 99国产精品久久久久久久久久久| 大香蕉久久伊人网| 六月婷婷av| 中文字幕在线观看视频www| 色婷婷狠狠干| 99热亚洲精品| 激情六月综合| 热日韩欧美| 青996青| 就要爱综合| 人色五月天婷婷| 久久久www| 狠色狠色狠狠色综合网| 丁香五月无码| 99亚洲视频| 麻豆WWWCOM内射软件| 日本三级99人妇网站| 综合激情sV| 欧美五月婷婷| 青青草日本亚洲| 五月天激情网图片| 狠狠操狠狠爱| 国产免费一区二区三州老师F1F1……| 五月丁香日本一抹本| 色婷婷婷婷成人网| 激情婷婷六月天| 26uuu在线观看| 九九婷婷五月天| 色九九九九| 婷婷天天舔| 色色色色五月| 天天干,夜夜爽| 日韩成人电泉AV| 中文字幕在线资源| 五月天精品视频| 99精品综合| 婷婷干| 秋霞性爱AV| 日操夜撸| 夜精品无码A片一区二区蜜桃| 热久91| 99re思思| 日韩淑女人妻luan伦激情精品一区二| 桃色成人网| Www.狠狠| 六月丁香社区| 风流少妇A片一区二区蜜桃| 婷婷激情四射五月天| 国产 A片 自拍| 色五月婷婷综合在线| 99热国品| 婷婷亚洲综合| 久久久久婷| 伊人六月丁香婷婷| 久热9| 五月丁香毛片| 色99网| 99在线精品免费视频| 九热视频在线精品15| 夜夜操激情| 色婷婷丁香五月| 丁香婷婷五月综合影院| 日本成人噜噜噜| 九九操屄| 五月丁香在线国产| 欧美性猛交99久久久久99按摩| 日本99在线视频| 日韩99色99| 国产精品激情AV久久久青桔| 欧美激情丁香五月| 久久9精品| 激情五月婷婷视频一区二区三区| 深爱激情网综合| 欧美精品在线观看| 秋霞影音91人妻久久| 婷婷五月天福利| 丁香婷婷综合激情五月色,开心五月丁香花综合网,激情综合五月亚洲婷婷,五月天 | 亚洲综合九九| 美女黄频aⅴ视频| 久久99性爱| 99操九九网| 久色中文| 亚洲中文AV网站| 欧美日韩一区二区三区四区| 天天色2017| 婷婷涩涩网| 无码激情AAAAA片-区区| 五月激情婷婷播播网| 五月丁久久| 性爱电影科技贸易有限公司| 中文字幕在线免费看线人| 99热这里只有精品10| 亚洲色网址| WWW,激情五月天,COM| 久久女婷| 九九九成人在线视频| 欧美丰满熟妇BBB久久久| 国产va在线视频| 丁香网站| 99热 在线观看| 亚洲妇女熟BBW| 亚洲开心激情网| 日韩野外 无套| 婷婷激情六月天视频| 日本综合99| 天天草天天摸| 26UUU欧美激情一区二区| 99九九玖玖| 色色精品色| 久久性爱视频| 激情网战码亚洲A| 久久久国产精品黄毛片| 日韩操| 97热久久| 综合网色| 26uuu欧美激情另类| www狠狠com| 成人片在线播放| 这里只有精品视频在线观看免费| av免费在线看不卡无毒| 人人摸人人摸| 美女五月激情| 国产高潮白浆一区二区| 亚州色色色| 久一这里有精品国产| 色色色五月天婷婷| 色色色婷| 婷婷激情蜜桃玖玖丁香| 日都一级A片| 日韩1区2区| 色五月婷婷开心| 97成人在线视频精品| 色久天| 婷婷五月天亚洲图片| 国产日韩av片| 黄急一级视频| 丁香婷婷啪啪| 五月天久久综合婷婷丁香| 亚洲免费观看高清完整版AV线| 国产精品扒开腿做爽爽爽A片唱戏| 五月激情五月婷婷五月天在线| 丁J香六月首页| 天天插天天爱| 99色精品| 1995年关宝慧版蜘蛛女| 丁香花五月天激情| 热久91| 99热这里只有精| 99热这里只有精品免费| 五月婷婷视频ab| 久久九区| 欧美日韩国产一区二区| 亚洲欧美综合7777色亭亭| 五月婷六月丁| 99er这里只有精品视频| 成人啪啪色婷婷久| a毛片二逼wwwwwwwwww| 色五月在线播放| 六月丁香啪啪啪| 丁香六月 人妻| 亚洲色图五月丁香| 久久超级碰视频| αv中文字幕在线观| 中文字幕黄色片| 久久视频婷婷| 色久天| 婷婷色色播五月天| 婷婷丁香社区网| 人人综合久| 九九九午夜视频| 九色在线五月婷婷网址| 超碰成人公开| 国产精品第一国产精品| 色色色色热| www.91操| 人妻九九九九| 99热这里都是精品| 精品久久这里热66| 97婷婷五月天| 99精品综合| 丁香六月天堂| 婷婷免费视频| 丁香五月婷老师| 激情网五月婷婷| 97超级操操| 99精品视频网| 婷婷六月丁| 婷婷九月色| 日本狠狠色| 激情五月丁香六月综合AVXXXX| 99re在线视频精品,这里只有精品18,| 9精品在线| 丁香大香蕉| 日本色99| 一起草无码视频| 大香蕉久久伊人婷婷五月丁香| 色综合婷婷| 性爱先锋AV| 狠狠色噜噜狠狠色噜噜噜999| 丁香五月综合高清在线| 色久在| 欧美色骚婷婷五月天| 婷婷五月永远18免费久久久| 久久狠狠色| yazhouzonghesese| 91午夜激情| 成人短视频在线免费观看| 14色综合婷婷| 99亚洲精品视频| 国产露脸150部国语对白| 丁香网五月天| 91综合在线观看| 人妻激情综合| 国产色丁香| 色五月成人在线| 99亚洲色色| 色综合九九| www.五月天婷婷| 久久精品99国产精品日本| 午夜天堂一区人妻| 久久日本wwww色| 伊人五月婷婷| 丁香九月激情| 丁香花大香蕉婷婷综合| 伊人五月婷婷国产视频| 丁香五月激情六月欧亚激情综合导航 | 97久久五月丁香婷婷| 五月丁香狠狠爱婷婷综合| 久久玖玖综合| 天天日天天插天天操| 五月婷婷六月奇米网丁香| 深爱激情网五月天| 亚洲操逼网| 在线看AV| av久热| 久久成人天| 99色在线| 三年高清大片免费观看国语| 亚州第一A片| 丁香六月天AV| 天天日天天干天天操| 狠狠穞A片一區二區三區| 大香蕉久久伊人网| 一起草无码视频| 很很干天天干| 欧美在线视频99| 老妇操B| 秋霞网在线观看理论91| 欧美色99| 北条麻妃伊人 | 91免费在线视频6| 殴美综合激情五月天免费视频| 97干视频在线| 午夜成人av在线| 久久婷五月婷| 成人在线综合| 久热A片| 六月婷婷视频| 成人AV在线电影| 亚州激情九月| 26UUU精品一区二区Com| 日韩久久视频| 婷婷综合日本| 五月丁香久久丝袜啪啪| 久久性爱视频| 激情婷婷色色| 五月婷婷,狠狠操| 婷婷丁香五月在线观看91| 草美女在线观看视频在线播放| 婷婷丁香五月婷婷| 婷婷欠久少妇| 九九99九九精品免费 | www...com黄在线观看| 丁香六月综合激情| 九热免费视频| 婷婷五月天首页激情| 日韩精品无码99| 日产精品一线二线三线芒果| 丁香综合婷婷开心激情网| 俺去也婷婷| 亚洲av无码影院| 婷婷伊人五月| 亚洲99综合| 日本色图综合| 久久九精品| 亚洲av无码精品色午夜| 丁香九月婷婷色| 欧美天堂婷婷日韩| 婷婷久久免费看| 深爱五月天| 99在线观看视频免费| 99热这里只有精品2| 久久久久99精品成人网站| 天天精品视频免费观看| 五月亭亭色| 五月天婷久精视频| 9热在线观看| 亚洲人成色A777777在线观看 | 亚洲成人一区| 丁香六月狠狠干| 亚洲人妻电影| 色综合日日| 超碰cap| renrencaoav| 日韩成人无码| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 中文网AV| 色婷婷视频在线| 久去色色| 操人无码| 日韩色情亚洲五月天婷婷| 日本一级黄色片。| 综合久久人妻| 亚洲精品大片| 玖色色综合| 色婷婷婷av| 色婷婷成人做爰A片免费看网站| 天天日夜夜B久久| 少妇性按摩无码中文A片| 天天爽日日搞| 六月丁花香啪啪激情欧美| 狠狠色综合五月| 91综合视频丁香| 激情深爱综合网| 黄色一极大片| 色噜噜综合网| 米奇激情婷婷| 丁香五月九九| www.99热精品| 综合久| 国产乱妇无乱码大黄AA片| 亚洲mm色| 丁香婷婷五月人体| 五月天停婷基地| 婷婷伊人綜合中文字幕| 五月丁香啪啪| 亚洲欧美国产高清vA在线播放| 婷婷丁香中文字幕| 日日操天天操| 草综合网| 天天综合网色欲香| www.9797国产| 狠狠狠狠狠狠狠狠草| 久草嫩草在线观看| 丁香色五月 97干| 欧洲激情五月天| 五月婷婷精品视频| 丁香久久| 欧美亚洲婷婷五月| 97视频.干com| 另类少妇人与禽zOZZ0性伦| 五月丁香花婷婷玉莉AV| 久青操| 曰韩少妇内射免费播放| 国产午夜精品一区二区| 天天色天天爱天天爱天天爱y| 色五月大| 婷婷五月丁香图片人人操| 超碰97免费在线| 婷婷欧美色| 97人妻人人| 激情综合婷婷| 深夜激情网| 色五月天影视| 97在线/日本| 大香蕉伊人久久| 日本色五月婷婷| 91精品在线看| 亚洲区1| 欧美经典片免费观看大全| 婷婷五月天久久| 内射激情在线| caop在线| 中文字幕激情综合| 四虎国产精品永久在线国在线| 婷婷五月天堂| 九九热亚洲中文在线观看免费| av在线不卡播放| 777影视理论片大全在线观看| www.俺去也com| 五月丁香六月久久| 99人妻碰碰碰久久久久视| 91九色PORNY肉丝在线| 久久五月天综合| 亚洲成人综合在线| www激情网站| 婷婷五月综合免费在线| 九九色婷婷| 亚洲成人五月天| 亚洲欧洲自拍图片专区五月天| 色色九九五月天| 色综合婷婷99| 成人无码精品1区2区3区免费看| 日本久热| 91色色色| www.日本91| 91九色中文字幕女在线观看| 久久色五月天综合网| 丁香五月丁香伊人| 99热这是里只有精品| 激情小说婷婷小说| 综合99在线| 五月丁香久久久| 99久久国产宗和精品1上映| 婷婷亚洲色| 狠狠色97| 99热这里只有精品8| 思思国产99| 五月色俺婷婷| 人人操人av| 99re思思久久| www,99热| 99操免费视频| 久久玖玖综合| 91日韩在线| 久久亚洲色导航| 色五月天天| 五月天基地| 人人干Av| 激情五月丁香五月| 播五月丁香六月| 五月丁香六月婷婷色日| 丁香五月天激情视频| 日本色色色| 狠狠的日| 五月婷婷草| 超碰成人在线观看| 欧美va在线观看| 五月婷丁香| 99热在线精品观看| 婷婷五月丁香香蕉| 欧美顶级少妇做爰HD| 日韩一区二区A片免费观看| 丁香五月玖玖| 丁香六月青青草| 色婷婷玖玖影院| 五月婷婷七月丁香| 丁香婷婷色情| 色五月丁香五月| 5月婷婷性视频| 婷婷综合网站| 日韩成人中文字幕| 夜夜操夜夜操| 五月丁香激情综合网| 日韩色色一区| 91精品久久久久久77777| 国产无人区大片| 99热综合在线| 综合视频久久| 综合亚洲六月婷婷在线| 俺去也在线www色官网| 99久久玖玖| 久久玖玖综合| 91丨九色丨大屁股| 激情久久伊人| 91 原创 在线 九色| 久久久久久9热不雅视频| 五月天伊人久久| WWW五月婷婷| 五月丁香婷在线| 亚洲操人| 五月天激情国产综合婷婷婷| 黄色激情网站在线观看| 综合色网站| 九九视频精品这里只有| 99乱视频| 丁香五月综合| 99久久久久| 日91高清无玛| 人妻射精AV| 婷婷色五月天在线观看| 午夜色色色极品视频| 五月丁香六月婷婷免费视频| 久婷| 免费无码毛片一区二区A片| 国产1区2区3区| 狠狠干在线| 日韩免费乱轮网站| 丁香六月婷婷综合欧美| 亚洲色啪| 丁香五月天社区婷婷| 久久五月婷综合网| 免费看成人747474九号视频在线观看| www久久久久久久久久久| 大地资源色婷婷视频在线| 久久亚洲无码| 精品婷婷五月天| 日本色五月婷婷| 天天日日| 婷婷五月色播网| 天天爽天天摸天天爱| 婷婷五月花| www.99操| 婷婷五月天日逼| 婷婷五月天第四色| 国内外色色色色色成人视频| 日韩人妻在线观看| 色婷五月| 五月天婷婷影院| 日韩999| 激情五月天小说|五月天开心激情网|亚洲精品国产自在现线|黄色五月天 | 青草激情综合| 日韩免费视频| 久久性爱视频| 五月天另类激情在线| 六月婷婷五月丁香| 黄色精品五月婷婷| 九九性视频| 538在线精品| 国产日产成人亚洲欧美国产VA| 久久久久久人妻| 欧美A级成人婬片免费看理论| 91AV婷婷| 久热免费| 久久婷婷五月天激情| 日本www五月婷婷| 五月婷婷av| 成人AV免费观看| 九九色播五月丁香| 人人操人人妻| 开心五月婷婷激情网| 99这里只有精品视频| 天天色图| 玖玖婷婷色五月| 99热10在线高清播放| 婷婷无码视频| 五月激情综合网| 五月丁香婷婷啪啪| 色婷婷五月综合| AV免费在线网站| 亚洲A色| 播丁香五月婷婷欧美| 天天婷婷天天| 夜夜嗨一区二区三区直播内容| 婷婷成人综合免费视频| 激情综合网五月婷婷| 久久五月天网| 婷婷激情视频欧美视频自拍视频欧美剧| 五月婷婷电影院| 激情五月六月丁香| 亚洲愉拍99热成人精品| 丁香五月激情月| 国产成人精品一区二三区熟女在线| 久久五月天婷婷视频 | 五月丁香啪啪网| 九月色婷婷| 色情成人五月天| 久久综合中文字幕| 婷婷婷婷婷婷婷五月丁香| 日本色频| 五月婷婷激情网| 亚洲激情在线| 狠狠干综合| 激情综合网,婷婷五月天| 91色性感五月婷婷丁香| 日韩啊啊啊| 久久一级片| 色婷婷电影网| 这里只有精彩亚洲视频推荐| 影院久久久| 亚洲人妻av| 99热20| 一级AV片| 日本九九视频| 亚洲日本激情| 欧美性生交XXXXX无码小说 | 99re6久热只有精品6在线直播| 九热免费视频| 色情综合网| 婷婷四色成人综合色视| 久久全色| 99九九久久| 久草xx性爱视频| 久久宗合影| 亚洲综合婷婷六月丁香五月| 国产色色色色色| 九九色图| 亚洲网站在线鸭子av| 色五月婷婷五月天| 婷婷五月天激情网站| 影音先锋综合网| 五月开心色| 99啪啪视频| 无码激情AAAAA片-区区| 可以直接看的AV网站| 极品另类| 国产毛片精品一区二区色欲黄A片| 五月天另类视频| 久热久色| 99视频日韩| 香蕉综合网| 婷婷狠狠操| 欧美日韩国产伦精品日韩人妻一| 亚洲热热视频| 中文国产五月天| 五月丁香激情四射| 欧美性生交XXXXX无码小说| 婷婷深爱五月天| 影音先锋xfplay资源男人网| 色吧99| a网站免费观看| 婷婷伊人五月天| 婷婷五月天亚洲天堂| 激情婷婷综合网| 中文字幕按摩做爰| 九九综合| 逼里香不卡| 午夜丁香丁香婷婷| 超碰在线观看9| 五月丁香亭亭电影久久| 大香蕉五月婷婷| 婷婷网五月天| 中文网AV| 欧美熟妇一区二区三区| 丰满少妇猛烈A片免费看观看| 丁香五月性| 久99热| 丁香伊人激情| www.夜夜操.con| 91丨九色丨国产打屁股网站| 中文字幕在线免费看线人| 色播丁香| 日日干五月天婷婷| 久热爱大香蕉在线蜜臀悦色| 欧美婷婷丁香社区在线播放| 五月婷婷影| 玖玖热视频| 激情五月丁香在线观看直播| 丁香五月婷婷婷婷欧美综合| 婷色视频| 91丨九色丨国产打屁股网站| 五月天丁香婷婷网| 五月激情啪啪啪| 激情伊人| 婷婷激情综合网| 五月婷在线视频免费看| 色色色色色色色色色999| 男人综合网| 成人在线综合| 丁香熟女乱| 美国不卡视频| 色色热日| 成人av在线网| 国产午夜成人免费看片无遮挡| 欧美电影在线播放| 99性视频| 久婷五月| 婷婷五月天小说| 丁香五月婷婷欧美成人色图| 求可以看的AV网址| 开心五月丁香啪| 婷婷激情丁香六月| 综合性视频99| 能看的AV网站| 五月丁香色五月| 六月色婷婷欧美| 5月婷婷综合| 噜噜综合网| www,99色| 9一精品视频观看| 色婷婷丁香AV综合| 婷婷丁香五月天色区| 9 1在线视频| www.激情com| 4399在线日本A片| 狠狠干最新地址| 无人区码一码二码三码医生系列| 久久丁香综合香蕉| 亚洲AV成人在线观看| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 大香蕉五月婷婷丁香| 成人丁香婷婷| 99热99草97| 99噜噜噜| 五月丁香大相交| 日韩 欧美 国产 一区 二区| 4438成人电影| 91婷婷色五月| 亚洲色色图片| 色婷婷丁香五月天| 99亚洲日韩| 色五月播五月| 激情五月色播五月| 伊人玖玖婷婷| 超碰人人色| 亚洲色婷婷| 日韩性爱无码| 成人在线视频一区| 激情久久久久| 婷婷五月综合在线视频| 婷婷五月天激情五月天| 婷婷色导航| 久久xxxx| 伊人高清无码| 性爱五月婷婷| 一区二区传媒视频| 久久永久网址| 国产丁香五月天婷婷| 欧美色性色好| 大香蕉人妻| 少妇水多A片太爽了| 国产探花一片区| 久久婷婷五月国产色综合激情| 五月婷在线色视频| 狠狠人人婷婷| 99久久国产宗和精品1上映| 激情色五月天| 啪啪 综合网| 欧美久草在线日本一级特黄大片做受9在线观看韩国电影《两个女人》未删减-毛片 | 丁香六月啪啪啪| 99啪啪视频| 亚洲丁香五冃97色| 丁香五月婷婷狠狠色| 99热在线观看精品免费| 五月婷婷人妻| 亚卅毛片| 日操熟女| 亚洲综人色综网| 五月婷婷与六月丁香图片激情| 日韩狠狠色婷婷| 色婷婷六月| 九九婷婷激情综合网| 六月婷色| 少妇婷婷五月天| 婷婷精品| 99啪啪网| 天天拍久久| 六月婷婷激情图片| 99久久高清视频| 丁香五月激情婷婷激情| 婷婷久久精品| 99久久婷婷综合| 色综合久久伊伊婷婷五月| 91日视频| 大香蕉九九| AV网站免费在线| 一本综合丁香日日狠狠色| 日本三级中国三级99人妇网站| 一本色综合色| 色婷婷丁香五月| 六月久久婷婷| 色色五月丁香婷婷综合| 99五月婷| 国产,欧美,日韩,性爱| 成人午夜视频精品一区| 丁香六月婷婷综合啪啪| 大香蕉综合网| 五月天婷婷丁香导航| 色播色丁香五月| 丁香六月婷婷高清| 玖玖爱综合网| 婷婷狠狠青青| RenRenSe在线视频网站| 亚洲操B| 国产做爰视频免费播放| 99色色热热| 色综合色综合网| 丁香九月色| 偷拍91九色| 天天天综合网| 亚洲无码九九九| 天天干天天干天天操| 综合色色五月| 大香蕉伊在| 99热色在线精品| 亚洲欧洲中文日韩久久AV乱码| 五月婷婷六月丁香激情深爱| 91干视频| 色播五月综合网| 日本狠狠网| 丁香六月婷婷色播| 91婷婷色 | 久久全意婷婷| 亚州综合色| 色播五月| 涩综合网|