欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

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

JSP+Servlet+JDBC實(shí)戰(zhàn):大學(xué)生兼職家教網(wǎng)項(xiàng)目全解析與部署指南

JSP+Servlet+JDBC實(shí)戰(zhàn):大學(xué)生兼職家教網(wǎng)項(xiàng)目全解析與部署指南 簡(jiǎn)介這是一份基于JSP技術(shù)的大學(xué)生兼職家教網(wǎng)站項(xiàng)目源碼包面向初學(xué)Java Web的開(kāi)發(fā)者或需要完成課程設(shè)計(jì)的學(xué)生定位于展示從零搭建信息發(fā)布、查詢、申請(qǐng)與后臺(tái)管理平臺(tái)的完整流程。壓縮包共包含79個(gè)文件體積僅4.24MB主要由19個(gè)JSP頁(yè)面、22個(gè)class編譯文件、3個(gè)Java源文件、4個(gè)jar庫(kù)、gif/jpg圖像素材以及js/css等前端素材組成可快速導(dǎo)入IDE進(jìn)行二次學(xué)習(xí)與部署。項(xiàng)目完整覆蓋JSP基本語(yǔ)法、Servlet控制器、MVC分層、JDBC數(shù)據(jù)庫(kù)操作、AJAX異步交互及Session會(huì)話保持等關(guān)鍵知識(shí)點(diǎn)并提供登錄注冊(cè)、家教信息管理等常見(jiàn)業(yè)務(wù)模塊有助于理解前后端數(shù)據(jù)流轉(zhuǎn)與數(shù)據(jù)庫(kù)表設(shè)計(jì)。目前已有140人學(xué)習(xí)下載適合用于畢業(yè)設(shè)計(jì)參考或Web開(kāi)發(fā)初級(jí)項(xiàng)目實(shí)戰(zhàn)按包內(nèi)目錄即可梳理頁(yè)面、類與資源文件的對(duì)應(yīng)關(guān)系便于對(duì)照調(diào)試。總體而言這份源碼包結(jié)構(gòu)緊湊適合快速上手并深入體會(huì)Java Web項(xiàng)目的完整開(kāi)發(fā)鏈路。1. 從信息登記表到管理后臺(tái)JSP-324 大學(xué)生兼職家教網(wǎng)能解決什么一到寒暑假高校附近的家教需求就成倍增長(zhǎng)。JSP-324 大學(xué)生兼職家教網(wǎng)這類項(xiàng)目最初就是為了解決這種場(chǎng)景出現(xiàn)的某社團(tuán)負(fù)責(zé)人手里的紙質(zhì)登記表沒(méi)幾天就攢成一沓想找初三數(shù)學(xué)一對(duì)一的家長(zhǎng)、能帶小學(xué)英語(yǔ)的大二學(xué)生、談好的課時(shí)費(fèi)和上課地點(diǎn)全擠在同一張表上改一處就亂三處。它把家教信息的發(fā)布、查詢、申請(qǐng)和狀態(tài)管理搬進(jìn)了瀏覽器學(xué)生注冊(cè)后發(fā)布可授課科目家長(zhǎng)發(fā)布需求雙方在系統(tǒng)里完成匹配并一路流轉(zhuǎn)到成交。整個(gè)項(xiàng)目按 JSP Servlet JDBC MySQL 的技術(shù)棧組織服務(wù)端用 JSP 動(dòng)態(tài)輸出頁(yè)面用 Servlet 接收前端請(qǐng)求并把業(yè)務(wù)結(jié)果轉(zhuǎn)發(fā)回視圖數(shù)據(jù)庫(kù)操作走 JDBC 標(biāo)準(zhǔn)接口。涉及的模塊包括用戶注冊(cè)登錄、家教信息發(fā)布與多條件查詢、預(yù)約申請(qǐng)、接單與完成狀態(tài)管理。相比現(xiàn)在流行的前后端分離架構(gòu)這套玩法重一些、渲染在服務(wù)端完成但正因?yàn)檫@樣它把 Java Web 開(kāi)發(fā)最核心的鏈路完整展現(xiàn)了一遍。適合誰(shuí)剛學(xué)完 JSP 和 Servlet 語(yǔ)法、想用完整項(xiàng)目把知識(shí)點(diǎn)串起來(lái)的人在做課程設(shè)計(jì)選題、需要一套能跑通全流程參考代碼的人以及想快速了解 MVC 分層在實(shí)際項(xiàng)目里怎么落地的開(kāi)發(fā)者。下面按從環(huán)境到運(yùn)行、從功能到坑位的順序把它拆開(kāi)講。2. 工程技術(shù)棧與部署環(huán)境MVC 三層分工與本地跑通的前提2.1 為什么是 JSP Servlet JDBC選型邏輯與適用邊界先回答一個(gè)很多人會(huì)問(wèn)的問(wèn)題都什么年代了為什么還要做一個(gè) JSP 項(xiàng)目這個(gè)問(wèn)題的答案藏在項(xiàng)目的業(yè)務(wù)形態(tài)里。大學(xué)生兼職家教網(wǎng)的核心操作是信息流的增刪改查——發(fā)布一條家教信息、瀏覽列表、提交申請(qǐng)、更新接單狀態(tài)。它的頁(yè)面數(shù)量不大、交互不復(fù)雜、并發(fā)量也不高用 JSP 在服務(wù)端直接渲染頁(yè)面反而比前后端分離少一層接口約定部署方式也簡(jiǎn)單打一個(gè) WAR 包丟進(jìn)容器就能跑。從學(xué)習(xí)角度看JSP 項(xiàng)目迫使你在同一套代碼里同時(shí)處理視圖、控制、數(shù)據(jù)三個(gè)層次理解請(qǐng)求在瀏覽器與服務(wù)器之間怎么走。這個(gè)項(xiàng)目的分層方式很典型JSP 頁(yè)面只負(fù)責(zé)展示和收集參數(shù)Servlet 負(fù)責(zé)把請(qǐng)求轉(zhuǎn)給業(yè)務(wù)邏輯并決定跳轉(zhuǎn)到哪個(gè)頁(yè)面DAO 類負(fù)責(zé)數(shù)據(jù)庫(kù)讀寫中間的 service 包放業(yè)務(wù)規(guī)則。視圖層拿到的所有數(shù)據(jù)都來(lái)自控制器塞進(jìn) request 或 session 的屬性不直接訪問(wèn)數(shù)據(jù)庫(kù)。適用邊界也要說(shuō)清楚。如果業(yè)務(wù)再?gòu)?fù)雜一點(diǎn)比如加了實(shí)時(shí)聊天、復(fù)雜權(quán)限矩陣JSP 這套就會(huì)因?yàn)轫?yè)面與 Java 代碼耦合而變得難維護(hù)。它的優(yōu)勢(shì)區(qū)間是中小型信息管理類應(yīng)用。將來(lái)做畢業(yè)設(shè)計(jì)或者接小型外包項(xiàng)目這個(gè)技術(shù)組合依然夠用這也是我建議把項(xiàng)目跑通的原因——它的每個(gè)模塊都能遷移到其他管理系統(tǒng)中去。2.2 環(huán)境準(zhǔn)備清單JDK、Tomcat、MySQL 的版本匹配在導(dǎo)入項(xiàng)目之前先把環(huán)境對(duì)齊。這個(gè)項(xiàng)目基于 JSP/Servlet 傳統(tǒng)架構(gòu)對(duì)版本的要求不算苛刻但版本差太多會(huì)出很隱蔽的問(wèn)題。建議按下面這張表準(zhǔn)備組件建議版本說(shuō)明JDK8 或 118 最穩(wěn)11 也能跑注意 IDE 編譯級(jí)別要與之一致Tomcat8.5 / 9.x支持 Servlet 3.1/4.0匹配常見(jiàn) JSP 版本MySQL5.7 或 8.05.7 配 connector 5.1.x8.0 必須換 8.x 驅(qū)動(dòng)IDE任意支持 Java Web 的 IDE導(dǎo)入時(shí)選擇 Dynamic Web Project 結(jié)構(gòu)準(zhǔn)備完成后先在命令行確認(rèn)基礎(chǔ)環(huán)境正常java -version mysql --version看到版本號(hào)輸出后再確認(rèn) Tomcat 的 CATALINA_HOME 環(huán)境變量或者 IDE 里的 Server Runtime 配置。這里有一個(gè)常見(jiàn)坑IDE 里配置的 Tomcat 和命令行啟動(dòng)的 Tomcat 不是同一個(gè)實(shí)例。如果你在 IDE 外手工把項(xiàng)目丟進(jìn) webapps 啟動(dòng)過(guò)一次項(xiàng)目的編譯產(chǎn)物可能殘留在 work 目錄里后面在 IDE 里啟動(dòng)會(huì)加載到過(guò)期內(nèi)容。所以我一般會(huì)讓 IDE 管理一個(gè)獨(dú)立的 Tomcat 運(yùn)行時(shí)避免混用。2.3 數(shù)據(jù)庫(kù)初始化三張核心表與角色設(shè)計(jì)家教平臺(tái)的數(shù)據(jù)量不大但表之間的關(guān)系值得認(rèn)真設(shè)計(jì)。項(xiàng)目里最基本的有三張表用戶表、家教信息表、申請(qǐng)記錄表。用下面的 SQL 初始化數(shù)據(jù)庫(kù)CREATE DATABASE IF NOT EXISTS tutor_db DEFAULT CHARACTER SET utf8mb4; CREATE TABLE sys_user ( user_id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(100) NOT NULL, real_name VARCHAR(30), phone VARCHAR(20), role TINYINT DEFAULT 0 COMMENT 0-學(xué)生 1-家長(zhǎng), create_time DATETIME DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE job_info ( job_id INT PRIMARY KEY AUTO_INCREMENT, publisher_id INT NOT NULL, title VARCHAR(100) NOT NULL, subject VARCHAR(30) COMMENT 科目, grade VARCHAR(20) COMMENT 年級(jí), teach_type TINYINT DEFAULT 0 COMMENT 0-線上 1-線下, price DECIMAL(6,2) COMMENT 課時(shí)費(fèi), address VARCHAR(200), detail TEXT, status TINYINT DEFAULT 0 COMMENT 0-待接單 1-已接單 2-已完成 3-已關(guān)閉, create_time DATETIME DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE apply_record ( apply_id INT PRIMARY KEY AUTO_INCREMENT, job_id INT NOT NULL, apply_user_id INT NOT NULL, message VARCHAR(200), status TINYINT DEFAULT 0 COMMENT 0-待處理 1-已同意 2-已拒絕, create_time DATETIME DEFAULT CURRENT_TIMESTAMP );注意幾個(gè)設(shè)計(jì)意圖。第一role 用整數(shù)而不是字符串避免數(shù)據(jù)庫(kù)里出現(xiàn)學(xué)生家長(zhǎng)studentparent等多種寫法導(dǎo)致查詢條件對(duì)不上。第二status 采用從 0 開(kāi)始的數(shù)字枚舉每個(gè)值在代碼里用常量或注釋明確對(duì)應(yīng)關(guān)系后面做狀態(tài)流轉(zhuǎn)時(shí)只需要比較數(shù)值不用解析字符串。第三字符字段都用 utf8mb4 而不是 utf8否則 emoji 或生僻姓名寫入時(shí)會(huì)報(bào) Incorrect string value 錯(cuò)誤。這三張表是項(xiàng)目跑起來(lái)的最小集合實(shí)際項(xiàng)目可能還會(huì)加管理員表但核心鏈路依賴的就是它們。2.4 導(dǎo)入項(xiàng)目后的目錄閱讀順序拿到項(xiàng)目壓縮包后解壓導(dǎo)入 IDE先不要急著點(diǎn)運(yùn)行花十分鐘把目錄結(jié)構(gòu)讀一遍。典型目錄長(zhǎng)這樣src/ ├── com/tutor/controller/ # Servlet 控制器 ├── com/tutor/service/ # 業(yè)務(wù)邏輯層 ├── com/tutor/dao/ # JDBC 數(shù)據(jù)訪問(wèn)層 ├── com/tutor/entity/ # 實(shí)體類對(duì)應(yīng)數(shù)據(jù)表 └── com/tutor/util/ # 工具類DBUtil、MD5Util 等 WebContent/ ├── index.jsp # 入口頁(yè)/首頁(yè) ├── page/ │ ├── login.jsp │ ├── register.jsp │ ├── release.jsp # 發(fā)布家教信息 │ └── list.jsp # 家教信息列表 └── WEB-INF/ ├── web.xml # Servlet 映射與過(guò)濾器注冊(cè) └── lib/ # mysql 驅(qū)動(dòng)等 JAR 包我推薦的閱讀順序是先看 WEB-INF/web.xml它告訴你請(qǐng)求路徑與 Servlet 的對(duì)應(yīng)關(guān)系是整個(gè)應(yīng)用的路由表再看 util/DBUtil.java了解數(shù)據(jù)庫(kù)連接怎么建立和關(guān)閉然后挑一個(gè)完整鏈路看比如從 list.jsp 往下追到對(duì)應(yīng) Servlet 再到 DAO。順著 controller → service → dao 的順序追代碼比從首頁(yè) F5 開(kāi)始點(diǎn)速度快得多原因是視圖層 JSP 語(yǔ)法對(duì)新手干擾大而控制層和數(shù)據(jù)層更接近純 Java邏輯更清楚。提示這個(gè)項(xiàng)目解壓后如果打算用 Git 管理記得把 .settings、build、target 這類 IDE 與編譯產(chǎn)物目錄加進(jìn) .gitignore否則倉(cāng)庫(kù)會(huì)被無(wú)意義文件撐大隊(duì)友拉下來(lái)還容易因?yàn)楸镜嘏渲貌煌a(chǎn)生一堆沖突。3. 家教信息發(fā)布與管理從表單到數(shù)據(jù)庫(kù)的閉環(huán)實(shí)現(xiàn)3.1 發(fā)布表單JSP 頁(yè)面的字段設(shè)計(jì)與參數(shù)對(duì)應(yīng)關(guān)系家教信息發(fā)布頁(yè)面是項(xiàng)目的核心入口。它的職責(zé)只有一個(gè)把用戶在瀏覽器里填寫的表單數(shù)據(jù)收集起來(lái)交給后端 Servlet 處理。先看頁(yè)面片段form action${pageContext.request.contextPath}/job methodpost input typehidden nameaction valuerelease/ label標(biāo)題/label input typetext nametitle required maxlength100/ label科目/label select namesubject option value數(shù)學(xué)數(shù)學(xué)/option option value英語(yǔ)英語(yǔ)/option option value物理物理/option /select label年級(jí)/label input typetext namegrade placeholder如初三/ label課時(shí)費(fèi)元/小時(shí)/label input typenumber nameprice min0 step0.01/ label授課方式/label input typeradio nameteachType value0 checked/線上 input typeradio nameteachType value1/線下 label詳細(xì)描述/label textarea namedetail rows5/textarea button typesubmit發(fā)布/button /form表單里每個(gè)控件的 name 屬性就是后端 Servlet 用 getParameter 取參數(shù)時(shí)的鍵名前后端必須嚴(yán)格一致這是最常見(jiàn)也最難排查的 bug 來(lái)源之一。action 用 ${pageContext.request.contextPath}/job 而不是寫死路徑是因?yàn)轫?xiàng)目部署時(shí)上下文路徑可能變化寫死會(huì)導(dǎo)致 404。隱藏字段 actionrelease 是讓同一個(gè) Servlet 處理多種操作時(shí)的分發(fā)標(biāo)記——發(fā)布、修改、刪除都走 /job 這個(gè) URL靠 action 區(qū)分。3.2 實(shí)體類與 DAO 層PreparedStatement 的參數(shù)化寫法后端的第一個(gè)落點(diǎn)是實(shí)體類和 DAO。實(shí)體類 JobInfo 的字段與 job_info 表一一對(duì)應(yīng)這里不再貼全部 getter/setter重點(diǎn)看 DAO 的插入方法public int insert(JobInfo job) throws SQLException { String sql INSERT INTO job_info (publisher_id, title, subject, grade, teach_type, price, detail) VALUES (?, ?, ?, ?, ?, ?, ?); try (Connection conn DBUtil.getConnection(); PreparedStatement ps conn.prepareStatement(sql)) { ps.setInt(1, job.getPublisherId()); ps.setString(2, job.getTitle()); ps.setString(3, job.getSubject()); ps.setString(4, job.getGrade()); ps.setInt(5, job.getTeachType()); ps.setBigDecimal(6, job.getPrice()); ps.setString(7, job.getDetail()); return ps.executeUpdate(); } }這里用 PreparedStatement 而不是 Statement是 JDBC 編程里一條不能破的規(guī)矩。第一參數(shù)通過(guò) ? 占位符傳遞數(shù)據(jù)庫(kù)驅(qū)動(dòng)會(huì)把它們當(dāng)作純數(shù)據(jù)而不是 SQL 片段從源頭堵住 SQL 注入第二PreparedStatement 有預(yù)編譯緩存同一條 SQL 執(zhí)行多次時(shí)性能更好。代碼里的 try-with-resources 是 Java 7 引入的寫法Connection、PreparedStatement 實(shí)現(xiàn)了 AutoCloseable會(huì)在 try 塊結(jié)束后自動(dòng)關(guān)閉不必再手寫 finally 里的一堆 close()。參數(shù)類型需要注意price 在 MySQL 里是 DECIMAL(6,2)在 Java 側(cè)對(duì)應(yīng) BigDecimal用 setBigDecimal 傳入而不是 setDouble否則小數(shù)精度可能出問(wèn)題teach_type 是 TINYINT對(duì)應(yīng) setInt。如果某個(gè) DAO 方法里看到 setString 傳整數(shù)那多半會(huì)觸發(fā)隱式轉(zhuǎn)換MySQL 能接收但存在隱患。3.3 Servlet 控制器接收參數(shù)、設(shè)置編碼、決定跳轉(zhuǎn)Servlet 是 MVC 里的 C 層負(fù)責(zé)把請(qǐng)求參數(shù)整理成實(shí)體類調(diào)用 service/DAO最后決定返回哪個(gè)視圖。看核心處理邏輯protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding(UTF-8); String action request.getParameter(action); if (release.equals(action)) { JobInfo job new JobInfo(); job.setPublisherId((Integer) request.getSession() .getAttribute(userId)); job.setTitle(request.getParameter(title)); job.setSubject(request.getParameter(subject)); job.setGrade(request.getParameter(grade)); job.setTeachType(Integer.parseInt(request.getParameter(teachType))); job.setPrice(new BigDecimal(request.getParameter(price))); boolean ok jobService.addJob(job); if (ok) { response.sendRedirect(request.getContextPath() /job?actionlist); } else { request.setAttribute(error, 發(fā)布失敗); request.getRequestDispatcher(/page/release.jsp) .forward(request, response); } } }第一行 setCharacterEncoding(UTF-8) 必須放在讀取任何參數(shù)之前因?yàn)?POST 請(qǐng)求體的解碼在第一次 getParameter 時(shí)已完成之后再設(shè)置就無(wú)效了。userId 從 session 取而不是信任前端傳值這是防止越權(quán)的關(guān)鍵設(shè)計(jì)——發(fā)布者身份必須由服務(wù)端會(huì)話決定。成功后用 sendRedirect 走一次新的 GET 請(qǐng)求到列表頁(yè)符合POST 后重定向的習(xí)慣避免刷新頁(yè)面時(shí)重復(fù)提交失敗則用 forward 回到發(fā)布頁(yè)并攜帶 error 信息此時(shí)瀏覽器地址欄不變用戶可以馬上修改重試。注意sendRedirect 會(huì)丟 request 里的屬性所以錯(cuò)誤提示必須換成 session 或者在重定向 URL 后面帶參數(shù)而 forward 保留 request 作用域適合表單校驗(yàn)失敗回顯的場(chǎng)景。兩者別混用。3.4 列表查詢與分頁(yè)條件組合和 LIMIT 偏移量家教信息列表需要支持按科目、年級(jí)和授課方式篩選同時(shí)做分頁(yè)。查詢 SQL 是動(dòng)態(tài)拼裝的但拼的是條件骨架值仍然用占位符StringBuilder sql new StringBuilder( SELECT * FROM job_info WHERE status 0 ); if (subject ! null !subject.isEmpty()) { sql.append(AND subject ? ); } if (grade ! null !grade.isEmpty()) { sql.append(AND grade LIKE ? ); } sql.append(ORDER BY create_time DESC LIMIT ?, ?);對(duì)應(yīng)參數(shù)設(shè)置要注意順序先設(shè)置前面條件里的 subject、grade最后再設(shè)置 LIMIT 的兩個(gè)參數(shù)。LIMIT 第一個(gè)參數(shù)是偏移量 offset第二個(gè)是每頁(yè)條數(shù) pageSize計(jì)算公式是 offset (pageNum - 1) * pageSize。比如每頁(yè) 10 條第三頁(yè)的 offset 就是 20。很多人在這個(gè)計(jì)算上翻車把 pageNum 直接當(dāng) offset 傳進(jìn)去結(jié)果第二頁(yè)開(kāi)始數(shù)據(jù)錯(cuò)位。分頁(yè)還要向前端返回總頁(yè)數(shù)一般先 COUNT(*) 查總記錄數(shù)再除以 pageSize 向上取整。這個(gè) COUNT 查詢和列表查詢條件必須完全一致否則會(huì)出現(xiàn)列表顯示 3 頁(yè)但分頁(yè)條只有 2 頁(yè)的尷尬。我一般會(huì)把條件拼裝抽成一個(gè)公共方法兩個(gè)查詢共用從根上避免條件不一致。4. 登錄認(rèn)證與申請(qǐng)流程Session 管理與狀態(tài)機(jī)的實(shí)現(xiàn)4.1 登錄成功后的會(huì)話設(shè)計(jì)服務(wù)端存什么、過(guò)期時(shí)間設(shè)多少登錄是整個(gè)應(yīng)用的身份基礎(chǔ)。用戶提交用戶名和密碼后Servlet 用用戶名查庫(kù)、比對(duì)密碼成功后把用戶標(biāo)識(shí)存進(jìn) Session而不是把整個(gè)用戶對(duì)象隨便亂放。推薦的做法是只存 userId、realName、role 三個(gè)字段夠用且減少 session 體積。代碼示意public User login(String username, String password) { // 先按用戶名查用戶再比對(duì)密碼 User user userDao.findByUsername(username); if (user ! null user.getPassword().equals(MD5Util.md5(password))) { return user; } return null; }登錄成功后控制器里這樣存會(huì)話HttpSession session request.getSession(); session.setAttribute(userId, user.getUserId()); session.setAttribute(realName, user.getRealName()); session.setAttribute(role, user.getRole()); session.setMaxInactiveInterval(30 * 60);setMaxInactiveInterval(30 * 60) 把會(huì)話閑置超時(shí)設(shè)為 30 分鐘單位是秒超過(guò)這個(gè)時(shí)間用戶再操作就要重新登錄。這個(gè)值需要根據(jù)使用場(chǎng)景調(diào)整——家教平臺(tái)的用戶不會(huì)一直盯著頁(yè)面20~30 分鐘是合理區(qū)間設(shè)太短會(huì)被頻繁踢下線設(shè)太長(zhǎng)又有會(huì)話被劫持的風(fēng)險(xiǎn)。這里還要理解 Session 和 Cookie 的關(guān)系Session 數(shù)據(jù)在服務(wù)端瀏覽器端只保存一個(gè) JSESSIONID 的 CookieCookie 失效或清除后服務(wù)端就找不到對(duì)應(yīng)的用戶數(shù)據(jù)。所以 Session 里存狀態(tài)Cookie 只是拿鑰匙鑰匙丟了狀態(tài)就找不回來(lái)。4.2 登錄過(guò)濾器統(tǒng)一攔截未登錄請(qǐng)求與靜態(tài)資源放行頁(yè)面一多如果每個(gè) Servlet 都手動(dòng)判斷 session 是否有效代碼會(huì)非常啰嗦而且容易漏。項(xiàng)目里正確的做法是寫一個(gè) Filter在 web.xml 里注冊(cè)為 /*對(duì)所有請(qǐng)求先做身份檢查。核心邏輯public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request (HttpServletRequest) req; HttpServletResponse response (HttpServletResponse) resp; HttpSession session request.getSession(false); String uri request.getRequestURI(); if (uri.endsWith(.css) || uri.endsWith(.js) || uri.endsWith(.png) || uri.contains(/page/login.jsp)) { chain.doFilter(req, resp); return; } if (session ! null session.getAttribute(userId) ! null) { chain.doFilter(req, resp); } else { response.sendRedirect(request.getContextPath() /page/login.jsp); } }注意兩點(diǎn)。第一request.getSession(false) 傳 false 表示不新建 Session——如果用戶本來(lái)沒(méi)有會(huì)話這里會(huì)返回 null而不是自動(dòng)創(chuàng)建一個(gè)空的避免每個(gè)未登錄請(qǐng)求都白白產(chǎn)生 Session 對(duì)象。第二靜態(tài)資源和登錄頁(yè)本身必須放行否則會(huì)出現(xiàn)登錄頁(yè)加載不出 CSS、jQuery 全被攔的問(wèn)題。放行規(guī)則用 URI 后綴判斷比較直觀也可以用前綴匹配如 /static/、/assets/。如果項(xiàng)目里用了驗(yàn)證碼圖片同樣要放進(jìn)放行清單。4.3 申請(qǐng)接單的狀態(tài)流轉(zhuǎn)四個(gè)狀態(tài)的權(quán)限邊界家教信息發(fā)布之后核心業(yè)務(wù)就是申請(qǐng)與接單。一個(gè)家教訂單在系統(tǒng)里經(jīng)歷的狀態(tài)序列如下?tīng)顟B(tài)值狀態(tài)名觸發(fā)動(dòng)作誰(shuí)可以操作0待接單發(fā)布成功學(xué)生申請(qǐng)1已接單家長(zhǎng)同意申請(qǐng)家長(zhǎng)2已完成雙方確認(rèn)學(xué)生/家長(zhǎng)3已關(guān)閉發(fā)布者撤銷發(fā)布者狀態(tài)機(jī)的實(shí)現(xiàn)并不復(fù)雜關(guān)鍵在于每個(gè)狀態(tài)變更操作開(kāi)始時(shí)都要校驗(yàn)當(dāng)前狀態(tài)和操作者身份。以家長(zhǎng)同意申請(qǐng)為例Servlet 里需要先查出 job 的 publisher_id跟 session 里的 userId 比較不一致直接拒絕再檢查 job.status 必須是 0否則提示該家教信息已接單。這兩步校驗(yàn)缺一不可只校驗(yàn)狀態(tài)不校驗(yàn)身份就會(huì)出現(xiàn) A 用戶能操作 B 用戶信息的越權(quán)漏洞。對(duì)應(yīng)的一條更新 SQL 涉及兩張表UPDATE apply_record SET status 1 WHERE apply_id ? AND status 0; UPDATE job_info SET status 1 WHERE job_id ? AND status 0;這兩條 UPDATE 都帶有 status 0 的條件既是狀態(tài)校驗(yàn)也起到樂(lè)觀鎖的作用如果記錄已經(jīng)被別人改過(guò)執(zhí)行影響行數(shù)為 0程序就能感知到并發(fā)沖突并提示用戶而不是盲目覆蓋。4.4 密碼存儲(chǔ)MD5 加鹽與防拖庫(kù)思路用戶表里的 password 字段不能存明文這是 Java Web 項(xiàng)目的底線。項(xiàng)目里一般會(huì)用 MD5 做摘要但裸 MD5 對(duì)彩虹表幾乎沒(méi)抵抗力所以必須加鹽。思路是生成一個(gè)隨機(jī)鹽值拼到密碼后面再算摘要鹽值隨用戶記錄一起存儲(chǔ)。實(shí)現(xiàn)通常收斂在一個(gè)工具類里public static String md5WithSalt(String rawPassword, String salt) { String input rawPassword salt; return md5(input); }注冊(cè)時(shí)生成鹽值String salt UUID.randomUUID().toString().substring(0, 8); 登錄時(shí)從庫(kù)里取出該用戶的鹽值重新拼接計(jì)算再比對(duì)。這樣即使數(shù)據(jù)庫(kù)泄露攻擊者拿到的也是加鹽摘要想反推原文需要為每個(gè)用戶單獨(dú)跑字典成本高很多。MD5 在這個(gè)項(xiàng)目階段夠用如果做生產(chǎn)系統(tǒng)建議直接換 BCrypt算法自帶隨機(jī)鹽而且計(jì)算慢更抗暴力破解。5. 部署與運(yùn)行避坑最常見(jiàn)五個(gè)異常及排查路徑這個(gè)項(xiàng)目從導(dǎo)入到跑通最容易踩的坑集中在五組問(wèn)題里。每條按現(xiàn)象、原因、解決三個(gè)步驟寫照著排查能省下大量時(shí)間。5.1 Tomcat 啟動(dòng)失敗8080 端口被占用現(xiàn)象啟動(dòng) Tomcat 時(shí)控制臺(tái)報(bào) Port 8080 required by Tomcat v9.0 Server at localhost is already in use服務(wù)起不來(lái)或者起來(lái)后訪問(wèn)不到頁(yè)面。原因本機(jī)有其他程序占用了 8080。最常見(jiàn)的是之前手工啟動(dòng)的 Tomcat 實(shí)例沒(méi)關(guān)干凈或者其他開(kāi)發(fā)工具的調(diào)試端口恰好落在 8080。解決先查占用進(jìn)程Windows 用 netstat -ano | findstr 8080看到 PID 后在任務(wù)管理器里結(jié)束對(duì)應(yīng)進(jìn)程或者直接改端口在 conf/server.xml 里把 Connector 的 port 改成 8081同時(shí)注意項(xiàng)目里所有 contextPath 相關(guān)路徑不受影響因?yàn)楦牡氖欠?wù)器監(jiān)聽(tīng)端口而不是上下文路徑。改完端口別忘了 IDE 里的 server 配置也要同步更新。5.2 啟動(dòng)即 ClassNotFoundExceptionMySQL 驅(qū)動(dòng)缺失或版本不匹配現(xiàn)象訪問(wèn)任意需要操作數(shù)據(jù)庫(kù)的頁(yè)面拋 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver或者啟動(dòng)時(shí)就報(bào)驅(qū)動(dòng)類加載失敗。原因mysql-connector-java 的 JAR 沒(méi)有放進(jìn) WEB-INF/lib。很多人把驅(qū)動(dòng) JAR 加到了 IDE 的 Classpath 里但部署時(shí) IDE 沒(méi)有把它打包進(jìn) WEB-INF/libTomcat 運(yùn)行時(shí)自然找不到。驅(qū)動(dòng)版本不匹配導(dǎo)致的啟動(dòng)翻車十次里有八次是這類原因。解決把 mysql-connector-java-x.x.x.jar 直接復(fù)制到 WebContent/WEB-INF/lib 目錄下然后右鍵項(xiàng)目刷新確認(rèn)構(gòu)建路徑里能看到它。另外注意驅(qū)動(dòng)類名變了MySQL 8.x 驅(qū)動(dòng)是 com.mysql.cj.jdbc.Driver老代碼里寫 com.mysql.jdbc.Driver 會(huì)報(bào)錯(cuò)需要同步改掉。5.3 數(shù)據(jù)庫(kù)中文亂碼連接 URL 和頁(yè)面編碼不一致現(xiàn)象從數(shù)據(jù)庫(kù)查出來(lái)的中文顯示為問(wèn)號(hào)或者往庫(kù)里寫中文后讀出來(lái)是亂碼。原因問(wèn)題往往不是單點(diǎn)而是鏈路里多個(gè)環(huán)節(jié)的編碼不一致。常見(jiàn)組合是連接 URL 少了 characterEncoding 參數(shù)而數(shù)據(jù)庫(kù)、表、JSP 頁(yè)面各自用了不同編碼。解決在 JDBC URL 上顯式聲明編碼URL 形如 jdbc:mysql://localhost:3306/tutor_db?useUnicodetruecharacterEncodingUTF-8serverTimezoneAsia/Shanghai。同時(shí)把建庫(kù)語(yǔ)句的 DEFAULT CHARACTER SET utf8mb4 手動(dòng)執(zhí)行一次確認(rèn)表也是 utf8mb4。JSP 頁(yè)面頂部加上 % page contentTypetext/html;charsetUTF-8 pageEncodingUTF-8 %三處對(duì)齊后亂碼基本絕跡。注意MySQL 8.x 不加 serverTimezone 會(huì)直接報(bào)時(shí)區(qū)錯(cuò)誤這個(gè)參數(shù)不是可選項(xiàng)連接 URL 里必須帶上。5.4 修改 JSP 后頁(yè)面不更新Tomcat 工作目錄緩存舊編譯結(jié)果現(xiàn)象改了 JSP 里的標(biāo)題或樣式刷新瀏覽器還是舊頁(yè)面清瀏覽器緩存也沒(méi)用。原因JSP 第一次被訪問(wèn)時(shí) Tomcat 會(huì)把它編譯成 Servlet class 存到 work 目錄之后每次請(qǐng)求默認(rèn)先檢查 JSP 文件是否有改動(dòng)。但在 IDE 的增量部署場(chǎng)景下有時(shí)候文件時(shí)間戳沒(méi)有變化或者修改發(fā)生在 IDE 外部Tomcat 沒(méi)感知到更新一直用緩存里的舊 class。解決先停掉 Tomcat找到 Tomcat 安裝目錄下的 work/Catalina 目錄或者 IDE 里配置的 catalina.base 對(duì)應(yīng) work 目錄整體刪除再重新啟動(dòng)也可以在 IDE 的 Server 面板里右鍵 Clean。從那以后我只要改了 JSP 或 web.xml都會(huì)順手 Clean 一次再啟動(dòng)二十秒的事但能省掉改了沒(méi)反應(yīng)的半小時(shí)排查。5.5 登錄頁(yè)樣式全丟過(guò)濾器把 CSS/JS 誤傷現(xiàn)象進(jìn)入 login.jsp 頁(yè)面HTML 結(jié)構(gòu)正常但所有樣式和腳本都沒(méi)生效F12 看到 .css 請(qǐng)求返回 302 跳轉(zhuǎn)到了登錄頁(yè)。原因過(guò)濾器注冊(cè)為 /* 對(duì)所有請(qǐng)求做登錄校驗(yàn)靜態(tài)資源路徑也被攔截未登錄狀態(tài)下 CSS/JS 請(qǐng)求被重定向走頁(yè)面自然裸奔。解決在過(guò)濾器里放行靜態(tài)資源前面 4.2 的代碼已經(jīng)寫了按后綴放行的方式更規(guī)范的做法是把靜態(tài)資源統(tǒng)一放在 /static、/assets 目錄下過(guò)濾器按路徑前綴放行。還要注意一個(gè)隱藏點(diǎn)放行條件里如果用了 contains(/page/login.jsp)那么登錄頁(yè)里的 CSS 是放行了但 CSS 本身請(qǐng)求的 URL 是 /css/style.css必須同時(shí)有后綴判斷否則依然拿不到。6. 上線前的最后兩步SQL 審計(jì)與操作日志6.1 全面檢查 SQL 拼裝點(diǎn)在項(xiàng)目收尾演示之前我會(huì)全局搜索所有 DAO 類里是否還有 Statement 或字符串拼接 SQL 的地方。搜索特征是 String sql SELECT ... 變量只要出現(xiàn)一律改成 PreparedStatement 的參數(shù)化寫法。判斷標(biāo)準(zhǔn)很簡(jiǎn)單任何來(lái)自 request.getParameter 的值都不允許直接拼進(jìn) SQL。用 IDE 的全局搜索把范圍限定在 dao 包和 service 包逐條過(guò)一遍這個(gè)動(dòng)作花不了十分鐘但能堵住最危險(xiǎn)的注入口。6.2 給關(guān)鍵操作補(bǔ)一行日志發(fā)布信息、申請(qǐng)接單、修改狀態(tài)這三類操作是業(yè)務(wù)里最容易出糾紛的地方。我會(huì)在 Servlet 處理完成后加一行日志輸出記錄操作人、操作對(duì)象和結(jié)果。用最樸素的 java.util.logging 或者 Log4j 都行關(guān)鍵是日志里要有 userId、jobId 和操作類型格式類似 release|user12|job78|success。這樣演示或者測(cè)試時(shí)一旦出問(wèn)題可以直接從日志里還原操作鏈路不需要再去數(shù)據(jù)庫(kù)里猜是誰(shuí)改的數(shù)據(jù)。最后說(shuō)一個(gè)自己的習(xí)慣每次部署前我都會(huì)拿兩個(gè)瀏覽器賬號(hào)把完整流程走一遍——學(xué)生賬號(hào)注冊(cè)、發(fā)布家教信息、退出家長(zhǎng)賬號(hào)登錄、搜索到目標(biāo)信息、提交申請(qǐng)切回學(xué)生賬號(hào)同意申請(qǐng)狀態(tài)從待接單變成已接單。這個(gè)流程能跑通項(xiàng)目就達(dá)到了可驗(yàn)收的狀態(tài)。JSESSIONID 跨瀏覽器互不影響這點(diǎn)正好是 Session 機(jī)制可靠性的實(shí)際驗(yàn)證。希望這組拆解能幫你在導(dǎo)入這個(gè)項(xiàng)目時(shí)少走幾步彎路順利把它跑起來(lái)。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日韩AC在线免费观看| 丁香五月天婷婷激情| 婷婷五月丁香激情图片| 天天摸天天透天天舔| 五月婷婷综合视频| 五月丁香五月综合欧美| 99热这里只有精品23| 久久的爱大香蕉| 日韩欧美颜射| 日本狠狠干| 五月婷婷伦理| 成人短视频免费| 91九色在线视频| 日本色婷婷| 九九九激情网| 久热免费视频| 五月婷婷av| 中文字幕婷婷五月天在线观看| 婷婷五月色情天| 五月色亭丁香| 超碰成人影视| 大地资源色婷婷视频在线| 婷婷五月天黄色小说| 超碰在线成人| 婷婷五月天奸女| 五月婷婷色在线| 99精在线| 五月婷婷无码| 99人人干人人| 99热色综合| 91精品久久久久久77777| 深爱激情五月网| 深爱丁香激情| 久久综合色五月| 日韩黄色中文字幕| 亚洲亚洲人成综合网络| 国产精品久久久久久妇女6080| 色婷婷综合网站| 色五月av伊人| 日本熟妇人妻在线| 五月婷色色| 久啪欧美| yazhochengrenavwang| 欧美综合激情| 五月草影视| 色色热99| 国产成人精品一区二三区熟女在线 | 欧美综合五月丁香六月婷| 丁香九月激情| 久婷婷久草| 亚洲熟妇AV乱码在线观看| 五月亭亭六月天| caopeng97日韩| 五月婷婷之综合激情在线| 亚洲综合激情五月久久| 99欧美| 99这里有精品| 狠狠人妻色综合| 五月丁香六月综合激情无码软件亮点| 久久伊人五月天| 六月丁香社区| 啪色综合| 激情五月天丁香| 婷婷五月激情的图片| 五月天色综合| 六月丁香综合| 99er久久| 日本丁香五月| 91久久婷婷| 色婷婷五月在线| 欧美婷婷综合| 69久久99精品久久久久| 91seav| 91精品综合久久婷婷九色| 97操资源婷婷| 日韩精品超碰在线观看| 成人丁香五月| 婷婷丁香五月久久| 五月丁香六月婷婷国产视频| 99热这里只有精品搜| 爱婷婷五月| 色大综合| 思思热高清在线观看| 婷婷婷婷色| 久久九九一區| 99热最新精品| 9热视频在线观看| 丁香婷婷色色| 亚洲色欲欧美一区二区三区| 激情丁香五月婷婷| 九九热免费视频| 六月丁香五月婷婷| 国内在线99视频| 超碰色女| 77799热| 热久久视频99| www久久99| 日韩1区2区| 色色婷婷五月| 超碰97久久| 久热婷婷| 五月天久久网站| 色爽九九| 91久久精品国产91性色TV| 六六久久黄色| 久久久18| 五月丁香色婷婷基地| 五月丁香婷婷三级| 99国产在线| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 久久综合图片| 成人五月丁香社区| 亚洲综合色色| 欧美日韩91| 丁香五月婷婷高清| 99热综合在线| 黄网在线观看免费| A短视频免费在线观看| 色婷婷久久7777| 亚洲成人免费在线| 狠狠草狠狠草| 激情综合网五月激情网| 极品少妇高潮啪啪AV无码| 涩涩网五月天| 五月丁香花开综合网| 丁香五月中文字幕久色| 成人婷婷| 国产亚洲精品AAAA片APP| 91亚洲天堂| 国产在线6| 婷婷开心激情五月激情网| 色综合激情| 丁香婷婷AV| 久久免费试看120秒| 婷婷综合色图| 色婷婷丁香花五月天| 色五月婷婷在线观看| 日日干夜夜撸夜夜骑| 色视频五月天| 天天久综合网永久入口18| 嫩草国产| 五月天婷a| 久久机热/这里只有精品| 天天躁日日躁狠狠躁日日躁2022年5月9日| 色www.con| 五月综亚洲| 99热在线精品播放| 亚洲婷婷久久综合| 五月婷婷啪啪| 综合网精品99| 丁香涩涩五月天| 国产亚洲色婷婷久久99精品91| 欧美丰满熟妇BBB久久久| 综合视频久久| 日韩一级网站| 操久久精| 九九亚洲| 大香蕉视频婷婷| 国产在线aaa片一区二区99| 婷婷五月六月丁香| 久久久久久久久久久44| 色七色九九| 天天搞天天色综合| 六月丁香啪啪啪| 色婷婷在线电影| 思思热久在线观看视频| 五月婷婷色| 亚洲国产婷婷色五月| 五月激情影院| 久久44| sisi热国产| 成人看片网站| 五月婷婷之综合激情在线| 天天干夜夜b| 91久久久久久| 日本va欧美va精品发布视频| 久久婷婷视频| 欧美丁香五月97色| 这里只有精品免费| 噜噜吧天天爱| www激情| 高清国产AV| 婷婷六月啪啪| 久久五月网| 激情五月综合网最新| 色综合视频| 日日噜噜夜夜狠狠久久丁香六月| 日韩无码亚欧无码| 色色色综合网| 日韩人妻无码专区| 成人精品视频99在线观看免费| 激情网五夜婷婷| 99热新网址| 9色免费网| 玖玖资源站中文| 婷婷综合国产| 久久综合首页| 天天日综合网射| 99久热| 天天日夜夜B久久| 欧美激情性做爰免费视频| 五月婷婷伦理| 日韩aⅴ视频| 精品A√| 人妻五月天激情开心网| 色五月婷婷操逼| 婷婷久久久| 天天爽天天爽| 久久久久久五月天| 碰碰操91| 日本色色图| 啪啪啪大香蕉| 丁香六月激情综合| 丁香五月a| 日韩色色一区| 色综合激情| 天堂久久婷婷| 欧美日韩成人在线| 久久婷婷色五月| 99色免费在线观看| 婷婷五月成人| 色色色色色色色色综合网| 伊人九九综合| 国产精品99久久久久久久女警| 婷婷涩五月天综合| AA久久| 九月婷婷久久| 精品无吗va视频免费观看| 超碰99热精品| 日韩久久成人| 另类激情综合| 综合精品啪啪| 激情五月丁香六月综合AVXXXX| 狠狠色五月| 99这里有精品| 久久婷婷丁香六月天| 日本色色网站| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 天天日天天插| 999久久久国产精品| 中文字幕丰满乱孑伦无码专区| 九九热123| 婷婷五月天综合网| 久8色色| 99热综合在线| 天堂久热| 开心激情站| 狠狠干在线| 激情综合女人网五月播播| 日本三级日本黄色| 婷婷五月丁香婷婷| 免费AV播放| 国产精品成av人在线视午夜片| 婷婷五月天堂| 五月丁香六月在线| 一本伊人色婷| 99在线观看这里都是精品| 操操日韩| 狠狠色噜噜色狠狠狠综合色| 三级片AAA久久久AAA久久久AAA| 色五月婷婷91| 激情五月天婷婷在线网址发给我| 爱婷婷五月| 超碰亚洲天堂| 在线天堂9| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 深爱激情网五月天| 亚洲五月丁香综合网| www.色九月| 欧洲精品欧洲情| 91人碰| 99精品偷自拍| 国产婷婷色综合AV蜜臀AV| 欧美日韩成人在线观看| 色五月天成人| 日韩九九| 26uuu亚洲欧美| 久久视频66| 亚洲色人妻| 色五月色开心开心五月| 久久久精品婷婷五月天| 日韩人妻AV在线| 国产色色网址网站| 欧美在线视频99| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 人妻久久久久久久久久久| WWW丁香五月| 大香蕉五月天婷婷| 色情五月综合婷婷| 亚洲另类电影| 操逼国产91| 拍真实国产伦偷精品| 超碰97人人操| 大香蕉久艹| 丁香五月中文字幕色播| 91超级碰在线| 久久精品99| 黄色成人网站在线播放| 色玖玖综合网| 九九热精品| 丁香六月五月天| 色婷婷丁香五月| 国产精品日日躁夜夜躁| 色玖玖玖| 五月天婷婷情色| 岛国午夜视频| av在线免费网站 | 欧美婷婷五月丁香| 这里只有精彩视频| 亚洲激情四射| 亚洲综合九九| 欧美成人一区二区三区在线视频 | 色婷婷网| 五月丁香av在线| 涩涩网五月天| 色情五月婷| 99自拍视频| 国内外色色色色色成人视频| WWW,五月| 色综合久久88色综合天天看| 久热婷婷| 另类视频在线| 成人无码精品1区2区3区免费看| 大战熟女丰满人妻AV| 亚洲精品又粗又大又爽A片 | 91丨九色丨老熟女激情| 激情婷婷五月少妇| 色综合夜夜| 亚洲成色综合网站免费观看| 五月天婷婷婷| 久久久婷婷婷| 亚洲中字AV电影在线网站| 五月天丁香久久综合 | 99欧美| 欧美噜噜久久久XXX| 91chinese在线| 丁香五月六月久久综合 | 在线中文字幕视频| 日韩精品无码一区二区| 亭亭玉月丁香| 97色婷| 久色成人| 精品99视频| 亚洲色婷婷| www.操.com| www.色五月| 99热一本| 五月综合婷婷开心网| 中文字幕性爱丰满| 91午夜激情| 丁香六月综合激情| 一区二区无码视频| 97操在线视频| 五月天影院| 91色综合| 日本eVa一区=区视频| 中文AV在线观看| site:minyis.com| 69激情小说| 五月天成人在线播放| 综合网亚洲| 在线不卡AC| 色色五月天婷婷| 综合五月天完整| www.五月天| 日本毛片内射| 一本综合丁香日日狠狠色| 91九色在线| 亚洲成人AV一区在线观看| 久久最新色色色| 几激情五月婷婷色五月色天堂| 丰满少妇猛烈A片免费看观看| 丁香五月综合激情啪啪| 精品久久66| 国产乱妇无乱码大黄AA片| 99操久久| 超碰五月婷婷五月天| 丁香婷婷激情五月色| www.91在线观看| www.cao.com久久| 丁香五月激情综合在线观看| 五月丁香啪啪啪| 国产97色在线 | 日韩| 激情综合亚洲色婷婷五月| 婷婷丁香18| 亚洲免费av在线| 丁香五月亚洲| 日本丰满久久| 伊人久久五月天综合| 超pen个人视频97| 中文网AV| 欧美激情综合色综合啪啪五月| 91精品婷婷国产综合| 色婷婷www| 欧美婷婷色| 99精彩视频网站在线| 伊人丁香在线| 色99色| 激情五月天综合网| 亚洲1区| 可以看的av网站| 这里只有精品99视频| 韩国中文字幕91| 五月丁香六月婷婷姐| av高清无码| 日本成人噜噜噜| 中文字幕有多少字| 超碰91在线| 久久丁香综合精品综合| 色五月大香蕉| 五月婷在线| 最新日本A片| 热热99爱爱| 婷婷五点亚洲| 丁香五月婷在线观看| 九九热精品| 日本91在线| 五月婷婷啪啪| 六月丁香天堂| 婷婷欧美激情综合| 狠狠综合| 伊人色综合网| 俺也去综合| 香蕉曰比| 91综合色| www.国产亚洲69ty.久久久久久久久久久久| 天天做天天爱天天爽| 开心五月天私房婷婷| 99无码精品| 婷婷色五月亚洲| 99色爱| 99热成人在线| 久99久热| 国精产品一区一区三区免费视频| 99热99热不卡| 一区视频网站| 亚洲精品字幕在线观看| 日韩久久视频| www.第四色99| 日韩啪啪视频| 第四色婷婷五月| 色综合99色| 五月天久久综合婷婷| 日韩一级片| 五月天婷婷开心| 熟女激情网| 五月婷婷三级| 综合色色网| 婷婷五月色色| av在线激情| 秋霞av不能| 色99久草在线| 九热av| 老师高潮流白浆喷水的A片| 欧美久热| 人妻丰满精品一区二区A片| 久久免费精彩视频| 最近中文字幕大全免费版在线| 色婷婷免费观看| 欧美大道不卡| 色色色999| 99热免费精品| 天天操综合网| 成人午夜天| 人妻丰满精品一区二区A片| 丁香五月欧美| 欧美大片免费观看| 国产免费一区二区三州老师F1……| 亚洲V国产V欧美V久久久久久| 色吧综合网| 无码99| 中国女人做爰A片| 青草视频在线观看视频| 婷婷五月性感| 成人资源在线| 色五月婷婷激情综合网| 久色五月婷婷综合| 丁婷婷五月天在线播放| 91干| 午夜精品人妻无码一区二区三区| 日韩丁香涩| 美女视频图片久久91| 九月丁香八月婷婷久久综合久97| 欧美综合123区| 日本人妻A片成人免费看片| 五月丁香网视频| 五月婷婷丁香深深爱| 天天日人人| 五月丁香婷婷中文网| 夜丁香五月婷婷| 免费观看大片视频 丁香婷婷 六月欧美| 五月婷婷色综图片| 欧美成人精品A片免费一区99| 最近中文字幕大全免费版在线| 欧美激情综合五月色丁香| avh片在线观看| 91日韩美女被插视频| 五月婷婷久久综合| 五月婷婷六月奇米网丁香| 丁香六月五月天| www.婷婷亚洲基地| 亚洲网站观看视频| 久久性操| 五月丁香婷婷潮喷中文字幕| 五月天综合久久| 欧美交换配乱吟粗大25P| 国产乱轮一区二区三区| 色婷五月天| 激情五月天小说视频| 五月婷婷深深爱| 大地资源色婷婷视频在线 | 久久99日本精品视频免费观看| 黄色片精品| 婷婷综合网在线| 天天综合精品| 熟女强人妻一区二区三区四区无| 大香蕉九九| 国产精产国品一二三在观看| 色狠狠综合网| 亚洲99热| 被强行糟蹋的女人A片| 百度4399有码精品V在线观看 | 亚洲男人的天堂婷婷色五月| 91九色国产在线| 影音先锋五月婷婷| 视频综合网| 免费视频99| 操操操97| 国产中文亚洲欧美日韩性交| 婷婷色五月激情强奸四射| 9精品久久999| 99小精品| 久色资源| 丁香五月天网站| 激情五月天综合婷婷网| Aaa久久| 婷婷欧美激情综合| 五月天久久婷婷| 久久久久视剧HD| 五月激情综合婷婷| 9久久精品| 久艹大香蕉| 狠狠色综合精品视频在线| 国产精品扒开腿做爽爽爽A片唱戏 亚洲爆乳无码精品AAA片蜜桃 | 国产97色在线 | 日韩| 日本在线99| 秋霞成人毛片一级A片| 超碰人人艹| 丁香五月欧美| 丁香婷婷天堂| 五月天激情综合网| 色色免费网站| 亚洲天天免费| 六月丁香社区| 在线天堂9| 色五月激情综合网| 精品亚洲国产成AV人片传媒| 色婷婷激情Av久久久| 97sese婷婷| 久久五月天色婷婷| 99热99思午夜精品| 99热这里只要精品免费| 婷婷久久99| 五月天婷婷久久| se色婷婷视频| 97资源碰碰在线| 久久天天天| 六月婷婷狠狠做| 九九热99热| 久9免费视频| www.久久99| 人人操人人妻| 狼人久草| www.av骚货| 久热超碰91| AV中文在线| 亚洲韩国日产综合AV| 97性视频| 亚洲天堂AAA| 俺去也五月天| 久久日曰| 久久久久人妻| 婷婷五月激情网站| 欧美精品在线观看| 久久九九免费视频| 99热精品在线播放| 成人做爰高潮A片免费视频 | 看久久性爱99视频| 91精品婷婷国产综合久久| 九九热这里| www.狠狠狠.com| 91黄色五月天视频| 婷婷色情网| Se.婷婷五月天| 五月开心播播网| www.国产色| 99热99干| 99热在线观看成人| 欧美激情综合色综合啪啪五月| 婷婷久久五月| 国产乱轮一区二区三区| 色99在线视频| 99re这里只有精品首页| 9月色婷婷| 午夜少妇在线观看视频| 五月天偷拍| 思思热在线视频观看精品| 一本久久婷婷| 色色性爱视频| 五月五婷婷| 草草视频91| 91色色色| 日本波多野结衣视频| 琪琪理论片| 大香久久伊人网| 青青草a在线| 婷婷月综合| 国产高清视频91九九九久久久| 99乱视频| 婷婷五月中文在线| 99男人的天堂| 久热9热| 丁香五月激情六月综合| 婷婷亚洲综合| 激情久久综合| 丁香五月综合激情性爱 | 日本精品99网站| 五月丁香淫淫婷婷婷| 狠狠精品干练久久久无码中文字幕| 色玖玖综合网| 欧美啪啪9| 中文字幕在线不卡视频| 99色在线观看视频| 大香蕉久久视频久久视频| 亚洲国产精品五月天| 狠狠色婷婷7777久| 久久免费9| 色五月婷婷五月天| 五月婷婷激情日本| 色五月婷婷一二| 黄色成人AV在线| 夜夜撸日日骑| 免费在线观看av网站| 狠狠操天天日| 91性交在线播放| 五月婷婷亚洲综合网| 五月天社区| 婷婷五月丁香六月伊人网| 色婷婷99| 成人操呦av| 久久这里只有精品热在99| 色综合久久久久| 日本片日本片祼观看网站在线看中文版网页在线看| www.婷婷五月天| 99久久精品亚洲综合| 婷婷综合激情| 另类视屏| 91成人视频| 色播六月| 99热在线只有精品| www。狠狠干。com| 无码人妻AV久久久一区二区三区| 69午夜成人影片| 日韩精品视频中文字幕| 激情五月丁香综合网站 | 久久婷五月| 伍月婷婷免费视频| 日日影院 | 99热这里只是精品| 九九热青青草| 开心五月综合激情网| 日本三级日本三级99| av狠狠操| 激情亚洲五月| 丁香五月婷婷综合激情啪啪啪啪啪啪啪| 激情五月天伊人影院| 激情五月婷婷啪啪| 婷婷色在线| 欧美久久五月婷婷| 色99xx| 激情五月婷黄版| 久99视频| www.丁香六月婷婷久久天堂影院.con| 91精品综合久久久久久五月丁香 | 日韩AV片| 婷婷9月天| 婷婷 色 丁香 夜| 丁香五月婷婷影院| 69午夜成人影片| 国产av第一专区| 天天爱天天狠天天透| 久久婷婷综合五月| 91wwmm导航| 久久久激情| 五月激情婷婷开心五月| 天天操天天插天天射| 操逼巨乳91| 人妻性爱av网站| 91操人人操| 伊人色综合网| 激情五月天综合图片小说网站| 色青青电影色五月| 秋霞A V毛片| 五月婷婷香蕉| 草榴视频网| 久久伊人大香蕉| 天堂草在线观看| 99热99在线| 色色色com| 日韩性视频| 99爱免费视频在线观看| 婷婷九月激情| 超碰免费人人肏| 97人人干人人操| 99热精品9| 婷婷永久在线| 香蕉五月婷婷| 日本99视频| 五月丁香婷婷爱| 人人添人人| 久久精品99久久久久久| 色婷婷六月| 停停五月色宗合| 欧美婷婷综合| 激情99| 久久综合影院| 丁香婷婷综合激情五月色| 99色网站| 秋霞网在线免费基地五月婷婷丁香| 亚洲激情久久| 操日视频| 丁香五月婷综合网| 中文字幕+乱码+中文字幕在线观看| 狠狠九九婷婷韩| 国产AV熟妇人震精品一品二区| 香蕉狠狠爱视频| 96五月丁香熟女| 久久视频这里都是精品| 五月丁香琪琪| www. 五月. com| 密着浓厚中出乚交尾GvG935| 欧美婷婷综合| 亚洲色图五月丁香| av狠狠操| 人人视频人人干人人做| 国产在线网址1| 丁香婷婷五月色成人网站| 中文字幕婷婷9月天| 99热91| 五月丁香激情综合网| 五月综合六月丁| 色欲婷婷夜夜| 好好干Av| 大香蕉啪啪啪| 97操在线视频| 亚洲欧洲国产精品| 九九综合网色全集 | 色婷婷亚洲六月婷婷中文字幕| 午夜爱爱爱成人| 开心婷婷五| 九九碰九九爱97| 婷婷五月丁香综合激情| 超碰99资源站| 狠狠色五月| 丁香五月综合久久综合| 婷婷综合九月| 九九视频在线观看视频6 | enecarbon-materials.com污K127封锁请涟系@wip1688 | 久久久宗合视频88| 九九99九九精品免费| 综合激情五月丁香| 99视频精品| 99操视频| 99色视频| 中文字幕乱码亚洲精品一区 | 婷婷丁香社区网| 五月婷婷色色| 色综合色综合婷婷热| 激情丁香五月天综合| 99热精品在线| 色婷婷中文字母五月丁香| 无码九九| 天天粽合合合合| 五月丁香婷婷激情久久| caopeng97日韩| 天天日婷婷| 久久综合激情婷婷激情| 丁香五月激情五月开心五月| 五月婷婷激情综合网 | 婷婷五月天,影院| 开心五月深爱五月婷| 婷婷五月天亚洲图片| 久热播这里只有精品| 五月天涩涩| 狠狠爱婷婷丁香| 婷婷综合激情| 拍真实国产伦偷精品| 国产XXXX搡XXXXX搡麻豆| 丁香五月-激情综合| 久超免费视频| 吊色AV男人的天堂| 亚洲精品成人| 激情五月丁香色婷婷| 久久99久久99精品免观看软件| 亚洲小视频| 五月婷婷五月天| 色五月婷婷av| 最近中文字幕大全免费版在线| 日木WWW视频| 亚洲久艹| 国产激情久久| 五月丁香 啪啪啪| 99热精品中文字幕| 91九色精品熟女内射| 狠狠色丁香| 丁香婷婷影院| 欧美 日韩 成人在线| 午夜色色色极品视频| 情涩婷婷五月天| 噜噜狠狠色综合久| 26UUU精品一区二区c〇m| 丁香色综合| 色综合色五月| 大伊香蕉精品视频在线| 国内在线99视频| 色情综合| 玖玖资源天天无码| 丁香六月狠狠干| 99精品久久| 东京热人妻一区二区三区在线| 欧美久久网| 亚州精品色情在线观看| 五月婷婷开心激情六月蜜桃| 99自拍视频网站| 另类小说五月天综合| 国产婷婷五月在线视频| 色综合天天综合成人网| 一起操最新网址| 99热播放| 四月婷婷丁香| 久机视频这只有精品| 日韩av免费版| 久er免费视频| 亚洲综合色色色| 欧美一级色| 激情婷婷视频在线| 国产精品在线视频| 久re热视频| 丁香网五月天| 色丁香五月婷婷| 色丁香影院| 日本丁香五月| 玖玖99精品视频| 久久婷出差欧美色两性综合网| 日本99色| 九九九干精品| 丁香五月AV在线| 久9热视频| 超碰在线免费观看3 9| 婷婷色婷婷亚洲成人| 丁香五月激情在线| 亚洲精品V天堂中文字幕| 亚洲色图五月丁香| 天天干狠狠艹| 一本大道熟女人妻中文字幕在线| 182TV亚洲| 99热这里只有精品最新| 九九热精品| 日本不卡中文字幕| 五月婷婷中文| 九九色网专区| 日韩免费视频| 国产一区18| 99热99ai| 密桃激情五月天综合网| 97伊人综合婷婷| 思思久久99热| 密臀久久| 婷婷五月丁香综合激情| 久久五月综合| 乱码操操| 激情五月天视频| 色呦呦美女| 色婷婷狠狠18| 久久XX日本综合| 五月婷婷色播网| 五月婷婷成人| 中文精品在| 久久精品人妻| 91久草五月天婷婷| 丁香五月激情视频| 另类五月激情| 免费试看小视频 99| 99久久久久| 亭亭五月丁香综合欧美| 网色99| 91在线日本| 五月婷激情| 97碰操| 五月成人天| 啪啪操网| 99久久6| 四色五月婷婷| 激情综合色婷婷啪啪六月天| 激情人妻蜜夜系列区| 天天 日综合| XX久久| caop在线视频| 日本久久婷婷| 日本久久精品18| 五月婷婷成人| 九月婷婷激情| 日本久久超碰| 99久久婷| 亚洲操操| 九九色影院| 久久狠色噜噜狠狠狠狠97| 99色色网| 国产五月婷| 色五月综合激情网| 色婷婷丁香五月天| 婷婷丁香五月天熟女丝袜| 久久丁香五月天| 91精品婷婷国产综合| 生活片五区| 99久久亚洲精品视频| 天天做夜夜爽| 五月婷成人网| 影音先锋 萱萱| 这里精品| 综合久久高清| 99国产在线| 婷婷另类开心| 99热最新国内| 久久五月丁香| av色婷婷| 色色五月婷| 婷婷五月综合在线视频| 天天肏视奸| 九九成人| 丁香五月婷婷色| 欧美成人AAA片一区国产精品| 六月色国内综合| 99伊人婷婷在线| 91超碰人人操| 日韩一区二区三区无码| 色色综合网。| 婷婷五月大香蕉| 丁香五月天信号| 婷婷五月天VI| 丁香六月婷婷色播| 亚洲另类婷婷五月丁香在线播放| 亚洲精品又粗又大又爽A片| 色丁香六月| 91碰| 嫩草极品| 亚洲人成色A777777在线观看| 欧亚洲在线高清视频| 91中文狠狠综合| 色婷婷丁香五月| 激情五月开心五月在线视频| 亚洲无码影片| 超碰色综合| 五月婷婷视频啪啪美女| 激情五月天色色色| 色婷婷亚洲| 欧美韩日AAA网站| 久久91久久91色欲精品| 操一区| 五月婷婷婷婷网| 丁香六月婷婷久久综合| av在线婷婷| 婷婷五月综激情| 天天操夜夜夜拍拍拍| 五月天丁香婷| 久色激情| 色狠狠色噜噜AV天堂五区| 婷婷综合视频| 思思久久99热只有频精品66| 思思久久精品| 五月婷六月综合在线观看| 婷婷丁香综合在线| 99热亚洲| 色婷久久| 日批在线看| 色伊人婷婷| 丁香婷婷五月综合欧美另类| 九九热免费| 六月丁香VA| 欧美美女国产日韩一区二区久| 久久精品女人天堂AAA| 国产美女无遮挡裸体毛片A片 | 日本在线wwww| www.色五月| 玖玖99免费视频| 日日操,夜夜撸| 婷婷五月激情的图片| 色九月综合网| 黄桃AV无码免费一区二区三区 | enecarbon-materials.com污K127封锁请涟系@wip1688 | 五月色婷婷夜色| 噼里啪啦在线观看免费完整版视频| 99亚洲精品| 天天做 天天爱| 婷婷欧美色| 中文字幕AV网址| 日韩久久日| 欧美大肥婆大肥BBBBB| av色婷婷| 五月天激情丁香| 五月婷婷开心六月激情小说| 日本a片网址| 97操碰在线视频| 国成人网| 免费视频在线观看的网站| 91精品综合久久久久久五月丁香| 久久激情五月| 秋霞三及片| www.五月婷婷久久.com| 婷婷激情五月吧| 婷婷五月香蕉| 亚洲激情av| 久久停停超碰| 人妻内射视频| 亚洲狠9| 婷婷伊人激情婷婷| 丁香五月天大香蕉啪啪| 日韩成人av在线| 激情五月四色| 亚洲成人AV电影网| www.操.com| 在线观看国产高清视频免费网站| 生活片五区| 九九婷婷五月天影视| 中文字幕成人| av五月丁香婷婷网| 五月丁香综合啪啪対白| 国产一级片| 婷婷五月花丁香| 色婷婷香蕉丁丁网| 99精品综合在线| 色色五月天 亚洲| 婷婷色五月综合| 少妇搡BBBB搡BBB搡毛茸茸| 人人摸人人干| 五月婷婷啪啪| 亚洲色五月天| 另类视频五月天| 日日夜夜狠狠| 亚洲高清在线| 婷婷久久综合| 97碰碰碰免费公开在线视频| 国产做爰视频免费播放| 丁香网站| 校花娇喘呻吟校长陈若雪视频 | 五月丁香A∨在线| 亚洲激情六月丁香| 亚洲激情五月| 91九色小视频| 五月婷婷丁香综合| 亚洲激情在线| 乱女乱妇熟女熟妇综合网站| 天天爱天天做天天舔| 五月丁香久久综合精品| 九九热短视频在线观看| 亚洲天堂制| 影音先锋一区二区资源站| 欧美成综合在线观看| 久久精品五月| 日韩成人电影在线播放| 久久98| 亚洲色婷婷色| 激情五月丁香激情综合网 | 激情综合色婷婷啪啪六月天| 九色91视频| 这里只有精彩视频| 成人综合网站| 97伦乱| 六月色激情| 91超级碰碰| 美女要搞搞天天搞搞搞网站| 欧美久久婷婷| 五月丁香六月激情在线| 国产成人av在线| 日日操天天操| 人妻视频一区而且二区| 操碰久| 激情五月天在线观看婷婷| 九九婷婷五月天影视| 婷婷性色| 色色综合网站| 精品一二三区久久AAA片| 色播色丁香五月| 五月婷婷熟女| 综合狠狠五月婷婷| 丁香五月Av| 99热九九热| 五月激情综合网婷婷| 五月丁香综合中文| 色五月婷婷狠狠撸| 日本 @ va 免费| 激情五月天色网站| 97精品人人A片免费看| 五月丿香啪啪| 久热这里只有精品性色AV| 久久九九在线视频| 99色中文| 久99999热视频在线观看免费| 狠狠色狠狠爱| 国产xxxxx在线观看| 四色AVwww| 久久大香蕉| av操B网站| 亚州色婷婷| 婷婷五月天在婷| 人妻人人操| 亚洲美女裸体被操在线观看| 激情伊人| 天天摸天天日天天舔| 激情四射五月天| 日本44久久在线| 丁香婷婷五月综合色情| av人人操| 玖玖资源在线视频| 色护士综合| 亚洲激情网站无码| www.99热在线| 国产成人AV不卡| 丁香九月久久| 久久这里只| 97人人操人人干| 国产超碰人人| 亚洲激情区| 能直接看的av网站| 99ri视频在线观看| 五月天激情小说电影| 欧美激情综合色综合啪啪五月| 日韩无码AV电影网站| 日欧一片内射VA在线影院| 97色综合| 五月色亭丁香| 超碰三级片| 六月丁香婷婷爱| 另类的婷婷| 激情五月天综合网| 亚洲天堂青草| 激情婷婷五月天伊人在线观看| 99毛片| 色约约视频一区二区三区四区五区| 九热免费视频| 五月丁香婷婷伊人| 成人做爰A片免费看网站找不到了| 五月婷婷开心综合| 婷婷五月天福利| 91丨九色丨高潮丰满日本| 五月天六月婷婷| 九九日伊人| 久久只有这里精品免费| 激情性爱五月| 青青艹b| 激情婷婷另类| 日本一级黄色电影| 五月婷色色| 久久色9| 婷婷性爱综合| 激情九九这里只有精品| 国产欧美日韩综合精品一区二区| 91色综合| 99久久99久久| 丁香五月天婷婷91| 天天撸天天干天天插| 人人色人人弄人人操| av在线超清中文| 精品久久久人妻| 色停停香蕉视频| 六月婷婷综合激情| 亚洲一区二区无遮挡A片| 五月色丁香视频精品| 九九热123| 欧美综合丁香网| 久久人妻精品| 伍月婷婷免费视频| 五月婷婷啪啪| 99久久精| 26uuu成人网| 久久这里只有精品久久| 丁香五月电影| www.丁香五月| 99色热| 激情五月天婷婷图| AV人人操| 思思热久久阴99| 99热| 亚洲视频色色| 青青草免费公开视频| 五月天开心婷婷久久| 国产亚洲精品AAAAAAA片| 一个色的综合| 日本欧美成人片AAAA| 秋霞电影理论| 亚洲丁香五月在线观看| 天天操天天干天天射| 深爱激情五月天婷婷网| 激情婷婷狠狠干综合| 性色99| 色婷婷色和| 欧美色性色好| 九热久| 五月丁香婷婷综合网| 思思热视频| 丁香月五月天婷婷久久| 国产又色又爽又黄又免费| 严洲天天插| 日韩精品无码AV| 久色激情| 激情五月丁香五月| 久久综合99| 五月天激情小说婷婷基地| 丁香影院五月综合| 婷婷五月激情图片| 五月婷婷激情性爱| 天天艹夜夜艹| 99久久思思| 婷婷婷五月香蕉| 超碰99资源站| 婷婷丁香人妻天久久| 情欲禁地| 五月丁香六月综合激情无码软件亮点 | 97热久久五月婷婷| 五月停亭六月,六月停亭的英语| 国产乱码久久| 伊人久久丁香狠狠婷婷综合香蕉 | 色婷婷最爱五月| 爱操天堂| 色五月偷偷| 久青青久| 91碰免费视频| 国产精品色婷婷久久久精品| 五月丁香久人妻中文| 日曰躁夜夜躁2026| 深爱综合网| 久久久精品99亚洲综合| 五月婷三级片| 婷婷五月天小说| 国产乱码久久| 免费在线观看av网站| 棕合影院色色| WWW五月天| 99热在线看| 久久久精品人妻| 五月天成人在线播放丁香| 婷婷九月综合| 大伊久久| 天天搽天天射| 国产精品久久久久久白浆色欲| av婷婷丁香| 久色精品| 日本五月视频| 婷婷五月天奸女| 中文字幕日本最新乱码视频| 天天摸天天做天天爱天天爽| 五月丁香婷婷爱激情综合网| 丁香五月天91| 99热.com| 99精色| 丁香五月婷婷综合视频|