久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

JSP+Servlet+MySQL學生管理系統(tǒng):從三層架構到答辯驗收全攻略

JSP+Servlet+MySQL學生管理系統(tǒng):從三層架構到答辯驗收全攻略 簡介這是一份面向Java Web初學者的課程設計資源基于JSPServletMysql實現(xiàn)一套簡單的學生信息管理系統(tǒng)學生可自行注冊登記、維護個人信息教師登錄后可對學生信息進行增刪改查與統(tǒng)一管理功能覆蓋常見課設要求適用于高校Java Web課程設計、畢業(yè)設計前的入門練手。項目集成Layui與jQuery搭建交互界面代碼分層清晰運行環(huán)境為JDK7Tomcat8MySQL并支持IntelliJ IDEA直接導入數(shù)據(jù)庫腳本及jar包配套齊全。資源包共2個文件包含1個ZIP源碼壓縮包和1個HTM說明文檔總大小僅2.13MB其中ZIP內(nèi)附完整項目代碼、lib目錄下的所需jar包數(shù)據(jù)庫文件則通過文內(nèi)百度網(wǎng)盤鏈接另行提供整體結(jié)構緊湊、無冗余內(nèi)容。目前已有6435人學習下載對于需要快速搭建小型Web管理系統(tǒng)的同學而言這份可直接運行、便于二次開發(fā)的源碼值得參考。1. 能在答辯現(xiàn)場講明白的JSPServlet學生管理系統(tǒng)到底該怎么搭期末周在某個高校實驗室A同學攥著一份課程設計任務書發(fā)呆要求做一個基于Java Web的學生信息管理系統(tǒng)技術棧限定JSPServletMySQL。他沒有急著寫代碼而是先問了自己一個問題——這東西就算做出來了答辯的時候老師問“你用了什么設計思想”“為什么用連接池”“分頁是怎么做的”我能接得住嗎帶著這個疑問他把這個“簡單學生信息管理系統(tǒng)”拆成了需求、設計、實現(xiàn)、驗收四段來推進最終交出了一份既能跑通、又能講清楚的設計方案。這篇博文就是把這套完整方案整理出來給正在做JSPServlet課程設計、畢業(yè)設計的同學做參考。無論你是零基礎起步還是已經(jīng)能跑通增刪改查但總感覺哪里“不成體系”這篇都能幫你把項目從“能跑”提升到“能答辯”。方案默認讀者會一點Java語法、會裝IDEA和MySQL不會的地方我也會把操作細節(jié)寫到命令和配置級別。2. 技術選型與總體架構設計為什么2023年還要用JSPServlet以及三層結(jié)構怎么落地2.1 技術棧選型這個“簡單”系統(tǒng)該用什么框架技術上很容易頭腦發(fā)熱明明學過Spring Boot為什么作業(yè)非要限定JSPServlet先別急著抱怨這門課的教學目標其實是讓你理解Web最底層的請求-響應模型。JSP負責視圖渲染Servlet負責控制邏輯JDBC負責數(shù)據(jù)庫交互——這正是Java Web最原始的MVC形態(tài)。你把它做扎實了后面學Spring MVC時會有一種“原來框架幫我干的就是這些事”的頓悟感。因此這套方案的技術棧定為JDK版本JDK 8最穩(wěn)妥也能兼容后續(xù)的JSP語法Web容器Tomcat 9Java EE規(guī)范里的Servlet 4.0JSP 2.3版本數(shù)據(jù)庫MySQL 5.7InnoDB引擎字符集utf8mb4前端JSP JSTL EL表達式少量CSS不引入前端框架連接管理C3P0連接池避免每次請求都用DriverManager創(chuàng)建新連接實際動手前先做一件事在IDEA里建一個Maven項目。別用Dynamic Web Project因為手動拷jar包、手動配web.xml的體驗堪稱“鍛煉耐心”Maven能自動拉取依賴以后你們會遇到的前人踩坑帖基本也都基于Maven結(jié)構。2.2 三層架構劃分Servlet不在這個層面里是誰的責任很多同學做的管理系統(tǒng)會把JDBC代碼直接寫在Servlet里頁面一多就變成一片混亂。這個項目里我采用了經(jīng)典的三層架構加控制層總共四個包com.example.entity // 實體類Student, Course, Score, User com.example.dao // 數(shù)據(jù)訪問層StudentDao, UserDao, ScoreDao com.example.service // 業(yè)務層StudentService, UserService com.example.servlet // 控制層各個Servlet BaseServlet復用 com.example.util // 工具類DBUtil, PageBean三層架構的意義是分離職責但題目要求了“JSPServlet”所以控制層的Servlet單獨一個包JSP放在webapp目錄下。請求流程是瀏覽器發(fā)起HTTP請求Servlet接收并解析調(diào)用Service層處理業(yè)務邏輯Service層調(diào)用DAO層做數(shù)據(jù)庫操作最后Servlet把結(jié)果setAttribute后轉(zhuǎn)發(fā)或重定向到JSPJSP再用EL表達式和JSTL把數(shù)據(jù)渲染出來。我把這張圖直接畫給過A同學看JSP頁面 → Servlet控制層 → Service業(yè)務層 → DAO數(shù)據(jù)訪問層 → MySQL數(shù)據(jù)庫 ↑ | | | └──────────┴──────────────┴───────────────┘ 最終結(jié)果返回到JSP渲染這是一種單方向的依賴關系每一層的修改原則上不影響上層。Service層存在的意義在這次的課程設計中可能體現(xiàn)得不夠充分因為邏輯簡單但它為后續(xù)擴展保留了位置這也是答辯時可以主動講的“設計冗余”。2.3 數(shù)據(jù)庫設計與建表SQL四張表和一個外鍵約束數(shù)據(jù)庫設計是答辯時最容易考察“你有沒有真正理解”的一環(huán)。這次系統(tǒng)的業(yè)務場景是一個學生信息管理者要維護學生、課程和成績同時必須有一個用戶表支撐登錄功能。所以設計四張表student學生表學號是自然主鍵自帶業(yè)務含義無需自增IDcourse課程表課程編號為主鍵來自教學計劃的唯一編碼score成績表用自增ID作為邏輯主鍵(student_id, course_id)做唯一索引防止同一學生同一課程重復錄入user用戶表存儲登錄賬號密碼密碼用MD5加固定鹽存儲杜絕明文建表SQL如下直接復制到Navicat或命令行執(zhí)行即可CREATE DATABASE IF NOT EXISTS student_ms DEFAULT CHARSET utf8mb4; USE student_ms; CREATE TABLE student ( student_id VARCHAR(20) PRIMARY KEY COMMENT 學號, name VARCHAR(50) NOT NULL COMMENT 姓名, gender CHAR(1) DEFAULT 男 COMMENT 性別, class_name VARCHAR(50) COMMENT 班級, phone VARCHAR(11) COMMENT 手機號, email VARCHAR(100) COMMENT 郵箱, create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 創(chuàng)建時間 ) ENGINEInnoDB COMMENT 學生表; CREATE TABLE course ( course_id VARCHAR(20) PRIMARY KEY COMMENT 課程編號, course_name VARCHAR(100) NOT NULL COMMENT 課程名稱, credit DECIMAL(3,1) DEFAULT 2.0 COMMENT 學分, teacher VARCHAR(50) COMMENT 授課教師 ) ENGINEInnoDB COMMENT 課程表; CREATE TABLE score ( id INT AUTO_INCREMENT PRIMARY KEY, student_id VARCHAR(20) NOT NULL, course_id VARCHAR(20) NOT NULL, score DECIMAL(5,2) COMMENT 成績, UNIQUE KEY uk_stu_course (student_id, course_id), CONSTRAINT fk_score_student FOREIGN KEY (student_id) REFERENCES student(student_id), CONSTRAINT fk_score_course FOREIGN KEY (course_id) REFERENCES course(course_id) ) ENGINEInnoDB COMMENT 成績表; CREATE TABLE user ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) UNIQUE NOT NULL, password VARCHAR(64) NOT NULL COMMENT MD5加鹽后密文, real_name VARCHAR(50) COMMENT 操作員姓名 ) ENGINEInnoDB COMMENT 登錄用戶表;設計說明為什么學號不用自增ID因為教務系統(tǒng)里的學號本身就是穩(wěn)定的自然鍵用它做關聯(lián)查詢可以少一次JOIN。成績表里的UNIQUE合并索引是很妙的一筆它能防止一條骯臟的數(shù)據(jù)破壞統(tǒng)計結(jié)果外鍵雖然有時影響性能但在這種小規(guī)模管理系統(tǒng)中它換來的數(shù)據(jù)完整性對驗收很有幫助。此外密碼別用明文MD5加鹽雖然不算強加密但足以表明你具備“不能存明文”的安全意識這在答辯中是個加分項。2.4 包結(jié)構與關鍵工具類DBUtil和統(tǒng)一Servlet的寫法在寫具體功能之前先把地基打好。第一塊地基是數(shù)據(jù)庫連接工具類使用C3P0連接池。連接池為什么會是這套系統(tǒng)的關鍵優(yōu)化點因為傳統(tǒng)的DriverManager寫法是一次請求、一次連接、一次關閉高并發(fā)下數(shù)據(jù)庫會很快被拖垮而連接池能讓連接重復使用。C3P0的配置寫在src/main/resources/c3p0-config.xml中?xml version1.0 encodingUTF-8? c3p0-config default-config property namedriverClasscom.mysql.jdbc.Driver/property property namejdbcUrljdbc:mysql://localhost:3306/student_ms?useSSLfalseamp;characterEncodingutf8/property property nameuserroot/property property namepassword123456/property property nameinitialPoolSize5/property property nameminPoolSize5/property property namemaxPoolSize20/property property namemaxIdleTime60/property /default-config /c3p0-config配套的DBUtil工具類package com.example.util; import com.mchange.v2.c3p0.ComboPooledDataSource; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; public class DBUtil { // 私有靜態(tài)連接池進程內(nèi)復用不會每次new private static final DataSource dataSource new ComboPooledDataSource(); public static Connection getConnection() throws SQLException { return dataSource.getConnection(); } }這里說明兩個重點參數(shù)initialPoolSize是系統(tǒng)啟動時預先創(chuàng)建的連接數(shù)設為5意味著第一個請求進來不用等待建立連接maxPoolSize是池子上限超過就排隊等待。生產(chǎn)價值的體現(xiàn)集中在釋放連接的地方——你的DAO層用完連接后必須在finally塊里調(diào)用close()Connection對象調(diào)close()在連接池模式下實際上是把連接歸還給池子不是真正關閉。這一點踩坑率極高稍后避坑章節(jié)會展開講。第二塊地基是BaseServlet的設計。原始Servlet開發(fā)里一個功能一個Servlet類動不動建十幾個類。更優(yōu)雅的做法是一個模塊一個Servlet前端用action參數(shù)區(qū)分操作。定義一個BaseServlet繼承HttpServlet重寫service方法根據(jù)參數(shù)反射調(diào)用對應方法package com.example.servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.lang.reflect.Method; public class BaseServlet extends HttpServlet { Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String action req.getParameter(action); if (action null || action.trim().isEmpty()) { resp.sendError(400, 缺少action參數(shù)); return; } try { Method method this.getClass().getMethod(action, HttpServletRequest.class, HttpServletResponse.class); String result (String) method.invoke(this, req, resp); if (result ! null) { if (result.startsWith(redirect:)) { resp.sendRedirect(req.getContextPath() result.substring(9)); } else { req.getRequestDispatcher(result).forward(req, resp); } } } catch (NoSuchMethodException e) { resp.sendError(404, 未知的action: action); } catch (Exception e) { throw new ServletException(調(diào)用方法異常: action, e); } } }這個設計帶來的好處在后面寫StudentServlet時就能體會——刪改查都集中在同一個類里URL統(tǒng)一為student?actionlist這種形式既整潔又方便權限控制Filter統(tǒng)一攔截。你完全可以把這個BaseServlet的說明寫進設計文檔作為“可擴展性”論點的論據(jù)。3. 核心功能模塊實現(xiàn)登錄攔截、學生信息CRUD、分頁查詢與模糊搜索的完整落地3.1 登錄模塊與攔截器Session會話和Filter過濾器怎么配合登錄是所有管理系統(tǒng)的入口也是最檢驗細節(jié)的部分。登錄流程由LoginServlet和UserDao共同完成步驟是用戶提交JSP表單中的username與passwordServlet從請求中取出參數(shù)對密碼做MD5加鹽哈希處理調(diào)用UserDao的findByUsernameAndPassword方法查詢數(shù)據(jù)庫查到則setAttribute存入Session重定向到主頁面查不到則轉(zhuǎn)發(fā)回登錄頁并顯示錯誤核心代碼如下WebServlet(/login) public class LoginServlet extends BaseServlet { private UserDao userDao new UserDao(); public String doLogin(HttpServletRequest req, HttpServletResponse resp) throws Exception { String username req.getParameter(username); String password req.getParameter(password); if (username null || password null || username.trim().isEmpty() || password.trim().isEmpty()) { req.setAttribute(errorMsg, 用戶名和密碼不能為空); return /login.jsp; } String salted MD5Util.md5(password SALT); User user userDao.findByUsernameAndPassword(username, salted); if (user null) { req.setAttribute(errorMsg, 用戶名或密碼錯誤); return /login.jsp; } req.getSession().setAttribute(loginUser, user); return redirect:/index.jsp; } public String logout(HttpServletRequest req, HttpServletResponse resp) throws Exception { req.getSession().invalidate(); return redirect:/login.jsp; } }注意一個細節(jié)UserDao.findByUsernameAndPassword里用的SQL要寫成SELECT id, username, password, real_name FROM user WHERE username ? AND password ?為什么用PreparedStatement而不直接拼接字符串最直接的理由是SQL注入防護。比如用戶在用戶名字段輸入 OR 11字符串拼接直接改變SQL邏輯而PreparedStatement會把整個輸入當作一個字符串參數(shù)對待。驗證方法很簡單你可以在登錄頁試一次用戶名填 OR 11密碼隨便填拼接SQL的系統(tǒng)會直接癱瘓而PreparedStatement的方案會提示“用戶名或密碼錯誤”。接下來是Filter。登錄后會訪問所有頁面如果只靠每個頁面檢查Session代碼會重復倒數(shù)。一個登錄攔截過濾器解決所有問題LoginFilter檢查請求路徑下的Session狀態(tài)WebFilter(/*) public class LoginFilter implements Filter { Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req (HttpServletRequest) request; HttpServletResponse resp (HttpServletResponse) response; String path req.getRequestURI(); if (path.endsWith(/login) || path.endsWith(/login.jsp) || path.contains(static)) { chain.doFilter(request, response); return; } if (req.getSession().getAttribute(loginUser) null) { resp.sendRedirect(req.getContextPath() /login.jsp); return; } chain.doFilter(request, response); } }這里有一個隱藏細節(jié)Filter配置用/*而JSP里有訪問CSS和圖片的需求一旦攔截了靜態(tài)資源頁面會瞬間“裸奔”。解決方式是放行含有static關鍵字的路徑所以我在webapp目錄里建了一個static文件夾放CSS和JS文件。代碼里我寫的path.contains(static)邏輯在真實項目中更嚴謹?shù)淖龇ㄊ菍iT給靜態(tài)目錄起獨立前綴。另外重定向時要帶req.getContextPath()這是容器部署路徑的前綴不加的話假設你部署在/sms下重定向到/login.jsp會直接404這是血淚經(jīng)驗。3.2 學生信息管理CRUD操作從界面到數(shù)據(jù)庫的完整鏈路學生模塊是管理系統(tǒng)的老大哥功能包括學生列表、新增學生、修改學生、刪除學生、條件查詢。由于使用了BaseServletStudentServlet只需要專注于業(yè)務方法WebServlet(/student) public class StudentServlet extends BaseServlet { private StudentService studentService new StudentService(); // 列表 分頁 模糊查詢 public String list(HttpServletRequest req, HttpServletResponse resp) throws Exception { String pageNumStr req.getParameter(pageNum); String keyword req.getParameter(keyword); if (keyword null) keyword ; int pageNum 1; try { pageNum Integer.parseInt(pageNumStr); } catch (NumberFormatException e) { /* 保持默認值 */ } PageBeanStudent pageBean studentService.queryPage(pageNum, keyword); req.setAttribute(pageBean, pageBean); req.setAttribute(keyword, keyword); return /student/list.jsp; } public String toAdd(HttpServletRequest req, HttpServletResponse resp) { return /student/add.jsp; } public String add(HttpServletRequest req, HttpServletResponse resp) throws Exception { Student student assembleStudent(req); if (studentService.addStudent(student)) { return redirect:/student?actionlist; } req.setAttribute(errorMsg, 學號已存在或參數(shù)不合法); return /student/add.jsp; } private Student assembleStudent(HttpServletRequest req) { Student s new Student(); s.setStudentId(req.getParameter(studentId)); s.setName(req.getParameter(name)); s.setGender(req.getParameter(gender)); s.setClassName(req.getParameter(className)); s.setPhone(req.getParameter(phone)); s.setEmail(req.getParameter(email)); return s; } }純粹的數(shù)據(jù)表單向Servlet提交的“新增”有玄學學生的學號來自用戶輸入而不是自增如果數(shù)據(jù)庫里已經(jīng)有這個學號插入會拋主鍵沖突異常。最穩(wěn)妥是在Service層先通過findById做一次預查詢存在就返回false前端提示“重復”。這個預查詢放在DAO層的實現(xiàn)也很簡單Override public boolean addStudent(Student student) throws SQLException { String checkSql SELECT COUNT(*) FROM student WHERE student_id ?; String insertSql INSERT INTO student (student_id, name, gender, class_name, phone, email) VALUES (?,?,?,?,?,?); try (Connection conn DBUtil.getConnection()) { conn.setAutoCommit(false); // 開啟事務 try (PreparedStatement ps conn.prepareStatement(checkSql)) { ps.setString(1, student.getStudentId()); ResultSet rs ps.executeQuery(); if (rs.next() rs.getInt(1) 0) { return false; } } try (PreparedStatement ps conn.prepareStatement(insertSql)) { ps.setString(1, student.getStudentId()); ps.setString(2, student.getName()); ps.setString(3, student.getGender()); ps.setString(4, student.getClassName()); ps.setString(5, student.getPhone()); ps.setString(6, student.getEmail()); ps.executeUpdate(); } conn.commit(); return true; } catch (SQLException e) { e.printStackTrace(); // 這里應該回滾 return false; } }注意conn.setAutoCommit(false)這一步它把檢查學號是否重復和插入學生這兩步操作放進了一個事務保證要么都執(zhí)行要么都不執(zhí)行。防止并發(fā)請求下多個重復學號在同一瞬間都被插入這種黑匣子問題在課設答辯時講出來老師會覺得你對“事務隔離性”有概念。界面上JSP列表頁核心代碼是這樣一個表格配合EL表達式和JSTL標簽遍歷table classtable table-bordered thead tr th學號/thth姓名/thth性別/thth班級/th th手機/thth郵箱/thth操作/th /tr /thead tbody c:forEach items${pageBean.list} varstu tr td${stu.studentId}/td td${stu.name}/td td${stu.gender}/td td${stu.className}/td td${stu.phone}/td td${stu.email}/td td a hrefstudent?actiontoEditstudentId${stu.studentId}編輯/a button classbtn-del>document.querySelectorAll(.btn-del).forEach(btn { btn.addEventListener(click, function () { if (confirm(確定刪除該學生嗎刪除后不可恢復)) { fetch(student?actiondeletestudentId this.dataset.id, { method: POST }) .then(() location.reload()); } }); });3.3 分頁查詢與模糊搜索PageBean的設計和SQL的LIMIT參數(shù)列表數(shù)據(jù)隨著測試數(shù)據(jù)變多會無限膨脹所以分頁是每個管理系統(tǒng)的標配。這套系統(tǒng)的分頁絕對值不能漏不然一次把幾百行全部渲染出來JSP頁面會明顯卡頓。我的設計是PageBean通用分頁類package com.example.util; import java.util.List; public class PageBeanT { private int pageNum; // 當前頁碼 private int pageSize 10; // 每頁條數(shù) private int totalCount; // 總記錄數(shù) private int totalPages; // 總頁數(shù) private ListT list; // 當前頁數(shù)據(jù) private int startRow; // 起始行偏移量SQL限制用 // 構造時自動計算startRow和totalPages }在DAO層的查詢方法里模糊查詢和分頁是緊耦合的。很多同學死記硬背LIMIT offset, pageSize但總淘神在offset該從0開始還是從1開始。正確邏輯是SELECT * FROM student WHERE name LIKE ? OR student_id LIKE ? OR class_name LIKE ? ORDER BY create_time DESC LIMIT ?, ?第一條?傳keyword包裝成的%關鍵詞%值可以在Java里拼好String likePattern % keyword %;第二條?傳startRow值為(pageNum-1) * pageSize第三條傳pageSize。因為SQL中LIMIT的偏移量從0開始第一頁的startRow就是0第二頁就是10由此推導出(pageNum-1)*pageSize。查詢總條數(shù)與查詢當前頁數(shù)據(jù)的SQL可以拆成兩次獨立查詢在計算總頁數(shù)時加一點防御邏輯totalPages (totalCount pageSize - 1) / pageSize; if (totalPages 1) totalPages 1;這個公式比totalCount / pageSize的向上取整寫法更直接totalCount0時也能兜底。在做demo階段你也許會想“不裝分頁了”但沖刺答辯時老師大概率會問“數(shù)據(jù)量上來了怎么辦”到那時再補分頁重構成本遠超現(xiàn)在。3.4 成績與課程模塊多表關聯(lián)查詢時JDBC怎么封裝ResultSet成績模塊的業(yè)務是某個學生選修了某門課程獲得一個分數(shù)。頁面上的成績列表往往是多表查詢的結(jié)果顯示學生姓名、課程名稱而不是裸ID。這時DAO層的SQL就變成JOINpublic ListScoreVO findScorePage(int offset, int pageSize, String keyword) throws SQLException { String sql SELECT s.student_id, s.name AS student_name, c.course_id, c.course_name, sc.score FROM score sc JOIN student s ON sc.student_id s.student_id JOIN course c ON sc.course_id c.course_id WHERE s.name LIKE ? OR c.course_name LIKE ? ORDER BY sc.id DESC LIMIT ?, ?; ListScoreVO list new ArrayList(); try (Connection conn DBUtil.getConnection(); PreparedStatement ps conn.prepareStatement(sql)) { String keywordPattern % keyword %; ps.setString(1, keywordPattern); ps.setString(2, keywordPattern); ps.setInt(3, offset); ps.setInt(4, pageSize); try (ResultSet rs ps.executeQuery()) { while (rs.next()) { ScoreVO vo new ScoreVO(); vo.setStudentId(rs.getString(student_id)); vo.setStudentName(rs.getString(student_name)); vo.setCourseId(rs.getString(course_id)); vo.setCourseName(rs.getString(course_name)); vo.setScore(rs.getDouble(score)); list.add(vo); } } } return list; }這里取別名是必須規(guī)范的點。student.name和c.course_name如果不取別名在ResultSet編碼返回值時你拿到的是同一列名取值只會取到第一個匹配列成績列表就會“學生名和課程名永遠一樣”這個翻車案例非常適合拿到避坑章節(jié)。規(guī)范的寫法是先給列起別名再以別名getString(student_name)取值。成績錄入的頁面核心是三個下拉框。學生和課程的選項從數(shù)據(jù)庫動態(tài)加載這樣錄入的人沒法選到不存在的選項數(shù)據(jù)的臟率大幅降低select namestudentId c:forEach items${studentList} varstu option value${stu.studentId}${stu.studentId} - ${stu.name}/option /c:forEach /select3.5 項目工程化數(shù)據(jù)庫連接配置、日志與SQL防注入的規(guī)范建議除了功能代碼工程化的細節(jié)分為三個方面第一所有SQL參數(shù)一律使用PreparedStatement。只要看到字符串拼接SQL的地方就是需要審查的漏洞點。你可以做一個簡單的代碼搜索把Statement挑出來全部改掉同時把這個防止SQL注入的考量寫進設計文檔的“安全性”段落。第二配置外置。數(shù)據(jù)庫密碼不要寫在DAO類里而是放到c3p0-config.xml中將來部署到別的環(huán)境運維只需要修改配置而不動Java源碼。這是一個“你懂實踐”的信號答辯中可以提一句。第三統(tǒng)一異常處理。Servlet中不應當catch所有異常然后吞掉至少把printStackTrace()和日志框架結(jié)合。僅做課程設計的話拿System.err輸出也能跑但更好的一個習慣是集中跳轉(zhuǎn)到一個錯誤頁面而不是讓默認的堆棧信息直接裸露在瀏覽器里觀感很差。4. 高頻翻車點排查JSPServlet項目最容易踩的五個坑及修復方法4.1 頁面中文亂碼設置編碼的地方有一處疏忽全文動態(tài)顯示都會出問題現(xiàn)象頁面上的中文、寫入MySQL的中文顯示為“???”或者JSP頁面頭部正常但Servlet寫入的數(shù)據(jù)亂碼。原因鏈路中至少需要兩級編碼一致。第一級JSP頁面本身要聲明UTF-8第二級Servlet讀取參數(shù)和寫回響應要UTF-8第三級數(shù)據(jù)庫表和JDBC連接URL要UTF-8。很多同學只設置了pageEncoding卻漏了request.setCharacterEncoding和數(shù)據(jù)庫connector的characterEncodingutf8。解決在代碼里用一個全局的CharacterEncodingFilter在web.xml中配置為第一個Filter保證每個請求在進入業(yè)務邏輯之前就被設置為UTF-8WebFilter(/*) public class CharacterEncodingFilter implements Filter { Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { req.setCharacterEncoding(UTF-8); resp.setCharacterEncoding(UTF-8); resp.setContentType(text/html;charsetUTF-8); chain.doFilter(req, resp); } }4.2 同一用戶對同一課程錄了兩次成績統(tǒng)計報表直接翻車現(xiàn)象成績表里出現(xiàn)兩行student_id和course_id完全相同的數(shù)據(jù)總分和平均分都算不對像是鬧了鬼。原因錄入界面的學生、課程兩個下拉框全部可選用戶手一滑同一學生選了兩次同一門課數(shù)據(jù)庫沒有業(yè)務約束攔下重復插入。解決建表階段就該在score表上加聯(lián)合唯一約束UNIQUE KEY uk_stu_course(student_id, course_id)。如果表已建好可以后補執(zhí)行ALTER TABLE score ADD UNIQUE KEY uk_stu_course(student_id, course_id);4.3 部署到Tomcat后頁面點擊“刪除”直接暴露錯誤堆?,F(xiàn)象本地IDEA運行得好好的打包成war包放進某個實驗室的Tomcat后刪除按鈕一點頁面直接顯現(xiàn)一個500或405后臺顯示MethodNotAllowed。原因多半是列表頁的刪除操作用了a標簽或普通form的GET分支。我用Java Web的一個常識來解釋HTTP的GET請求對應用戶可見還可能被瀏覽器的預加載機制提取DELETE這種冪等操作本來不該由GET觸發(fā)。Tomcat默認的JspServlet會攔截對JSP的POST請求但如果是“鏈接GET”就相對更容易因為參數(shù)不合規(guī)而拋出異常。合理的方式是用form表單模擬POST例如在列表頁把每一個按鈕包在一個表單里form actionstudent methodPOST styledisplay:inline input typehidden nameaction valuedelete input typehidden namestudentId value${stu.studentId} button typesubmit onclickreturn confirm(確定刪除)刪除/button /form4.4 登錄攔截Filter把靜態(tài)資源攔死整個頁面只有文字沒有樣式現(xiàn)象用戶登錄成功后首頁所有CSS、JS、圖片全部失效瀏覽器F12的控制臺看到大量靜態(tài)資源“blocked”或404。原因Filter路徑寫的是/*后端把樣式表、圖片等靜態(tài)文件也當成受保護資源攔截了Session驗證不過的全被重定向到登錄頁。解決建立約定的目錄結(jié)構把所有資源放在/static/下并在Filter的放行邏輯中加上這一條if (path.contains(/static/) || path.endsWith(.css) || path.endsWith(.js) || path.endsWith(.png)) { chain.doFilter(request, response); return; }4.5 密碼明文入庫或SQL拼接導致注入簡單的系統(tǒng)也要有安全意識現(xiàn)象數(shù)據(jù)庫表中user的password字段顯示為123456寫PPT時被其他同學看到臉面掛不住或者搜索框輸入一個特殊字符服務端輸出SQL報錯。原因一是怕麻煩沒用哈希二是圖省事用了Statement拼接。解決即使只是個簡單的學生管理系統(tǒng)也一律用MD5加鹽。MD5Util工具可以自己寫很簡單public class MD5Util { public static String md5(String text) { try { MessageDigest md MessageDigest.getInstance(MD5); byte[] digest md.digest(text.getBytes(UTF-8)); StringBuilder sb new StringBuilder(); for (byte b : digest) { sb.append(String.format(%02x, b)); } return sb.toString(); } catch (Exception e) { throw new RuntimeException(e); } } }對所有查詢一律換成PreparedStatement。這兩件事做完你再在項目文檔里寫“本項目避免了SQL注入風險”就是真話而不是口號。5. 方案驗收與答辯技巧項目能不能拿優(yōu)秀就看這幾個環(huán)節(jié)5.1 自測驗收的標準清單每次新功能寫完就手動測一遍。這里給一份可以直接照用的驗收清單我建議你按這個順序走一遍流程比最后期末突擊強無數(shù)倍。如果所有項都通過這份方案就已經(jīng)具備提交條件驗收項測試動作預期結(jié)果登錄頁訪問啟動Tomcat訪問登錄URL頁面完整顯示無500錯誤正常登錄輸入正確賬號密碼跳轉(zhuǎn)到首頁右上角顯示當前用戶姓名錯誤登錄輸入錯誤密碼停留在登錄頁顯示錯誤提示越權訪問未登錄狀態(tài)下直接訪問/student頁面自動跳轉(zhuǎn)到登錄頁新增學生錄入合法數(shù)據(jù)列表出現(xiàn)新記錄無報錯重復學號新增加已存在學號頁面提示“學號已存在”模糊查詢姓名輸入“張”只顯示姓張的學生分頁跳轉(zhuǎn)造15條數(shù)據(jù)翻到第二頁URL攜帶pageNum變化列表顯示5條刪除確認點擊刪除按鈕彈確認框確認后記錄消失中文顯示檢查所有頁面的中文無亂碼成績錄入選擇學生課程輸入分數(shù)列表多一條JOIN后的完整數(shù)據(jù)重復成績再次錄入同一學生同一課程數(shù)據(jù)庫層報錯頁面被捕獲攔截5.2 答辯陳述路徑從“我會增刪改查”到“我做了完整設計”答辯最常見的翻車現(xiàn)場是老師問“為什么用三層架構”答“別人都這么用”問“分頁怎么做”答“寫了limit”。通常的應對策略是把項目的陳述節(jié)奏安排成“問題→設計→驗證”這樣讓老師的提問始終順著你的思路走。第一分鐘講核心問題管理系統(tǒng)面對的核心問題是數(shù)據(jù)的快速維護與準確統(tǒng)計。用一句話還原業(yè)務場景然后引到技術選型。第二分鐘講架構展示工程包結(jié)構截圖說明控制層、Service層、DAO層的分層帶出BaseServlet和統(tǒng)一Filter的設計強調(diào)為什么從控制到數(shù)據(jù)訪問都是單一依賴方向。第三分鐘講亮點兩個亮點二選一——連接池的使用與原因防止重復成績的數(shù)據(jù)庫唯一約束。挑你最有把握的講深講透。第四分鐘留出時間給老師提問主動問“老師要不要看一下數(shù)據(jù)庫結(jié)構”或者“我這里做了一個防止重復錄成績的約束我可以演示一下”。演示總是比紙上談兵更信服。5.3 幾個被問概率極高的難點問題最好提前準備答案問題一為什么不直接用JDBC連接要引連接池標準回答數(shù)據(jù)庫連接的創(chuàng)建和銷毀都比較耗時在高并發(fā)的場景下每次請求都新建連接會產(chǎn)生明顯延遲嚴重時可能耗盡數(shù)據(jù)庫連接數(shù)。連接池在系統(tǒng)啟動時預創(chuàng)建一批連接復用用完歸還。我配置了initialPoolSize5、maxPoolSize20既滿足并發(fā)需求也能防止連接耗盡。問題二filter和interceptor有什么區(qū)別標準回答Filter是Servlet規(guī)范里的作用于Web容器層攔截所有請求無法調(diào)用Spring管理的方法Interceptor是框架層概念可以對Controller內(nèi)部的方法做橫切。我這個項目不用Spring所以用Filter實現(xiàn)登錄校驗與編碼處理更符合Servlet規(guī)范遷移到Spring MVC后則可以平滑替換成攔截器。問題三分頁為什么不用PageHelper這類插件標準回答課設的核心目標是驗證基礎原理PageHelper自動生成的count查詢與分頁SQL隱藏了實現(xiàn)過程。手寫LIMIT參數(shù)并配合PageBean封裝能夠自己掌控查詢過程在內(nèi)容量大的情況下也能通過修改pageSize適配不同場景。三句話講完這些問題你的理論分就拿到了。5.4 交付物整理與復盤最后整理提交材料時通常的做法是從這幾個維度打包方便自己和別人雙層驗收源碼工程Maven目錄完整包含src、pom.xml、.idea可選數(shù)據(jù)庫腳本文檔建庫建表語句、初始化測試數(shù)據(jù)語句運行說明JDK/Tomcat/MySQL的版本啟動步驟默認賬號密碼設計文檔包括需求分析、數(shù)據(jù)庫設計、系統(tǒng)架構圖和核心流程說明答辯PPT控制在10頁展示頁面截圖、核心技術、總結(jié)亮點即可從那以后我每做完一個課設級別的小系統(tǒng)都強制自己走一遍“驗收清單→答辯問題預演→材料打包”不把“跑通”當成終點。這套習慣后來在準備更正式的項目評審時也幫我節(jié)省了大量臨時補文檔的時間。希望這份方案能幫你把JSPServlet的學生信息管理系統(tǒng)做得既完整又好講交出一份能讓自己滿意的課程設計。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
午夜天堂精品久久| 久久久精品无码亚免费| 亚洲精品成人激情在线| 中文字幕视频免费| 伊人五月天激情| 丝袜综合色图| 国产高清26uuu| 亚洲大色堂| 免费AV中文网在线观看| 十八禁网站在线| 狠狠操狠狠燥| 久久夜夜夜| www.色综合| 不卡啪啪视频| 欧美激情亚洲色图| 射丝袜大香蕉| 午夜福利区| 欧美大片天天看| 久久亚码| 色97干| 97久久久久| 精品人妻丰满熟妇一区二区三| 91制服丝袜| 丰满熟女一区二区三区在线播放| 日韩成人私密一级精品av| 中文字幕熟女人妻丝袜| 精品国产人成在线| 天天看综合网| 97国产精品久久久久| 在线天堂资源亚洲| 91爆操视频| 亚洲 日本 一 二 三| 中文字幕在线2| 亚洲狼狼干综合1| 欧美超碰人妻97| 日韩人妻丝袜中文字幕| 岛国片国产成人亚洲播放| 天天天天天干夜夜夜夜夜操| 久久久999国产精品| 青青草导航在线视频| 97精品视频| 333kkkk·亚洲com久久| 久热精品色情| 欧美成熟性爱精品| 色婷婷久久| 97一本大道亚洲一区| 天天久久久久久| 人妻干天天| 久热91| 99黄页网站| 日韩欧美~中文字| 极品销魂美女一区二区| 天美麻花大全视频| 欧美 日韩 另类 亚洲| 深爱五月婷婷| 亚洲高清在线se| 人人看人人爰人人操| 人妻中文在线| 综合久久六月久久婷婷| PMv在线观看| 特级毛片特黄久久免费看| 欧美A√综合网| 欧美精品久久久久久久久88| 欧美日韩性爱无码| 免费a v| 国产一区在线播放| 屌逼麻豆| 久久久78| 9999亚洲电影| 蜜桃久久一区二区| 曰本特级特黄特色黄色A级网站高清在线免费看 | 偷拍综合网| 91色拍| 欧美性爱第一区| 中日韩熟女| 国产女主播视频在线观看| 亚州操操穴网| 大香蕉一级黄色片久久| 91综合天天看| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 免费毛片在线播放| 成人午夜小视频手机在线看| 九九成人精品| 亚欧成人中文字幕一区| 久久这里只精品| 人妻嗯啊啊在线播放| 91欧美亚洲| 久久AV无码1区2区3区| 国产野战露脸在线播放| 亚洲第一视频 欧美风情 日韩| 嗯嗯嗯啊啊啊操的我好爽| 亚洲丝袜综合| 成人精品一区二区三区| 日本天天色| 性色AV网站| 蜜桃精品一区二区三区ww| 91伊人久| 亚洲欧美另类图片| AV色五月天| 婷婷五月天丁香花| 亚洲国产ⅴ高清在线观看| 久久超碰天天| 久偷拍欧美日韩三区| 欧美色图天堂在线| 日本www操操操| 97色色色| 国产精品丝袜在线| 超碰4A| 欧美天堂亚洲电影院一区在线播放| 六月激情网| 婷婷五月天激情网| 无套内射性感少妇视频| 人妻人人做人人澡人人爽欧美一区| 午夜毛片亚洲精品片国产久久久| 久夜操| 欲色综合| 大香蕉78| 超碰在线人妻中文字幕| 中国农村熟妇毛片视频| 91被操| 在线一道啪| 亚洲天堂色图| 久久久久九九九| 久久久久骚| 国产精品视频麻豆入口| 91老熟女老女人国产老太| 99自拍B亚洲| 国产精品女同| 亚洲限制级| 日韩电影天堂视频一区二区| 偷拍亚洲视频一区二区三区四区| 婷婷10月天青娱乐| 神马麻豆福利院| 91美女视频| 为用户提供免费看黄网址在线观看| 欧美中文字幕日韩在线| 成人三一级一片aaa| 大香蕉一线视频| 综合婷婷| 啊啊啊啊啊啊啊网址在线观看| 亚欧美综合网。| 欧美精品黑人猛交高潮| 911av网站免费观看| 在线观看日韩av不卡| 97人肏| 欧美少妇性乱| 97爱| 无码免费一区二区三区啪啪| 亚洲精品 欧美精品| 97超碰大| 亚洲人码13| 欧美日韩亚洲少妇寂寞影院正在播放| 国产亚洲福利第一页丝袜| 成人aⅴ一区二区三区| 免费观看的av| 欧美线天码中字| WWW操逼| 国产一区二区在线播放量| 国产辣妈在线视频福利| 午夜天堂精品久久久久91| 久久av网| 激情小说亚洲| 亚洲图片欧美日韩| 亚洲在饯| 91在线综合网| 亚欧无码线免费观看视频| 久操不卡视频| 亚洲,欧美,综合网| 综合婷婷| 百度百度日本操逼| 富二代亚洲精品99| 久久草草亚洲蜜桃臀| 欧美精品成人亚洲| 麻豆国产97在线| 精品国产自在在线99| 91色交| 国产剧情一区在线观看| 中文字幕久久婷婷丁香五月天| 激情丁香五月婷婷| 97无码视频在线播放| 日本不卡码黄色| 欧美日韩国产成人高清| 九九九精品美女| 91丨熟女丨丰满熟女| 欧美另类天堂| 欧美大香蕉卡久久| 午夜视频久久久久一区| 骚鸭AV| 免费夜夜爱黄色视频毛片| 久久国产乱子伦精品免费女,网站| 色噜噜综合在线| 人人爱人人乐人人操| 综合干干干av久久久综合网| 国产极品美女高潮无套在线观看| 欧美亚州综合网图片| 欧美男女午夜啪啪| 日韩性爱再线视频| 一级做受视频免费是看美女| 九九九九九九九| av天天在线观看| 日韩精品在线观看观看| 91n欧美| 欧美熟女妇同| 狠狠中文字幕| 国产91久久九九免费精品无码| 国产欧美另类久久久精品课程| 99热在线不卡| 超碰久久中文| 亚洲天堂区| 日本操大逼| 91亚洲网站| 欧美高潮| 精品人妻视频一区二区在线播放| 亚洲视频中文一区| 人看人人摸人人操| 人人 操人人 操人人| 嗯啊不要啊啊在线观看视频| 九九在线视频| www.激情| 丁香五月天激情综合| 国产欧美日韩一区二区三区| 欧美岛国精品在线观看| 国产精品久久久久久久久久久久久久| 久久久久久久六六| 欧美少妇高潮久久91| 青青久操| B049AV在线播放| 999综合色| 在线 亚洲 网爆 自拍| 中日无幕一二三四区| 99999精品成人| 国产日韩精品一区二区三区| 江都AV在线| 婷婷九月色| 五月婷婷丁香| 蜜臀久久久久久999| 色香阁在线| 久久国产精品91| 九九九九九九九九九九九免费国产| 国内外色色色色色成人视频| 日本免费一区二| 久久综合精品一区二区三区| 久久久专区| 亚州图片第一页| 97欧美色| 成年人黄色视频免费| 日逼97| 操逼逼中文字幕| 欧美精品日韩久久久九| 俺去俺来也在线www| 亚洲一区日韩| 亚洲 欧美 另类 日韩 人妻一区 | 日本男人插女人的逼黄色| 伊人四虎综合| 欧洲在线性爱视频| 国人欧美精品一区二区| 97玖玖人妻| 精品美女人人干| 精品人妻一区二区三区在| 久久性生大片免费观看性| 爽极品影院| av婷婷色网| 黄色激情电影在线观看| 超碰97COm中文| 欧美1区二区三区公司| 成人八戒网站| 动漫区日韩区欧美区| 色爱亚洲| www激情| 久久亚洲人妻| 国产JDAV无码视频在线观看| 九九黄色网| 一本大道综合伊人精品热热| 超碰95| www.婷婷六月天| 人妻无码视频一区二区三区久久| 91精品无码久久久久久久| 99久久久久| 操老熟女AV| 九九综合久久中文字幕| 亚洲影视第一页| 亚洲自拍一区夜夜操| 欧美激情高清性猛交| 国产 日韩 欧美高清| 婷婷成人久久久精品| 熟人人妻少妇精品久久| 免费观看啪视频| 欧美 亚洲 另类 综合| 中文字幕熟女人妻丝袜| 美中韩AV综合网| 97精品一区| 户外裸露刺激视频第一区| 日日干夜夜操视频h| 天天综合网网欲色| 中文一区二区婷婷视频| 国产精品白丝| 亚洲色图 欧美热图 清纯唯美 另类自拍| 国产黑白丝在线| 五月婷婷色色| 91爆操视频| 久偷拍欧美日韩三区| 国产9 9在线 | 亚洲| 久久久久精| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 98人妻精品一区二区色欲| 久7色| 欧美超碰在线| 青青草乱入乱欲视频在线观看| 亚洲第一页第二页激情| 久久久久久久久久久久黄色| 精品高清一区二区三区三州| 91激情综合| 亚洲精品视频在线| 亚洲天堂一区二区久久| 黑人精品成人一区二区三区| 日本布卡一区二三区| 极品欧美一区二区三区| 丰满搜索结果 -第18页- 久久高清无码 | 欧美日日操| 久久亚洲天堂| 久久久一级| 丁香六月激情| 97久久久网站| 二三四区精品| 亚洲日韩AV视色| 精品偷拍13p欧美dodk视频| nuu12国产麻豆精品| 日本三级小说中文字幕| 玖玖爱免费观看视频| 色吧 综合| 天天热精品| 天美精品av| 久久无码电影| 国产精品午夜AV完会免费| 欧美一二级| 超碰97精品| wuyechaopeng| 日本人妻一区二区| 久久一二三四五六七八九区区区| 国产成人欧美一区二区三区的国产| 啊啊在线| 日夜尻逼网| 91麻豆天美传媒HD| 成人女人国产| 一区久久久二区| 婷婷激情四射| 色婷婷综合网| 色九月婷婷| 在线国产一区二区av| 精品少妇人妻av久久免费| 国产精品白丝| 看免费一级在线播放毛片| 久久三区四区| 国产97在线视频| 亚洲色交| 亚洲性网| 亚洲无码一区二区三区三州| 视频国产成人精品日本亚洲18| 欧美在线大香蕉| 欧亚乱色熟一区二区三四区| 超碰97精品在线| 校园春色综合| 先锋音影AV| 人妻免费观看| 国产91av在线播放| 97天堂| 思思热一热婷婷热一热| 欲色综合| 伊香蕉综合久久久久久久噜噜噜| 久热这里只有精品9| 黑人综合网| 久草尤物| 国产精品久久久久久久久AV大片| 长长久久免费视频| a人片中文字幕一区二区| 亚洲国产一级黄色视频| 哑洲在线| 欧美少妇色图| 一区二区三区免费岛国片| 欧亚成人| 乳欲人妻办公室奶水| 中文字幕国产精品1区| 亚洲色婷婷久久91| 久操网无码在线| 色播五月丁香| 亚洲九九视频在线观看| 久久久亚洲熟妇熟女| 欧美日韩国产高清在线一二三区 | 婷婷五月天影院| www.高清无码诱惑一区.com| 亚洲无码 国产无码| 免费中文在线| julia高潮后不停追击中出| 精爱久久| 亚洲阿v天堂在线| 日本一级二级三级网站| 亚洲熟女综合| 成人小说视频在线精品欧美| 国产无码久久高清| 啪一啪免费视频| 国产成人亚洲精品自产在线| 全球成人中文在线| 艳尻美人妻| 黑丝制服中文字幕| 黄色网址在线免费观看| 91在线丝袜视频| 亚洲乱色熟女一区| 久久一二三四五六七八九区区| 91老熟女| 亚洲丝袜色图| 丁香九月 婷婷| 国产亚洲精品美女| 激情久久日韩精品中文字幕麻豆| 日韩一级特黄av毛片| 天天情欲宗合网| 嗯嗯嗯啊啊啊操的我好爽| 亚洲在线a| 国产一级内射无挡观看| 欧美 传媒 麻豆 日韩 偷拍| 999久久久免费精品国产牛牛| 国产不卡片| 男女做爰猛烈动高潮A片免费应用 少妇厨房愉情理伦片bd在线观看 不卡中文字幕aⅴ在线 | 色情亚洲日本成人| 人人人摸人人| 人妻在线大香蕉| 久久在线观看免费视频| 操逼A∨| 9999伦理视频| 天堂蜜桃无码视频一区二区| 欧美日韩人妻精品系列一区二区三区| 99热思思| 在线色导航| 久热精品在线| 日韩在线人妻网站| 三级三级三级a级全黄三| 国产99999| 国产丝袜啪啪| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 99久久9| 伊人骚琪琪亚洲天堂网站| 亚洲天堂性爱| 欧美专区日本专区| 国产精品人妻无码久久久互動交流 | 欧美婷婷五月天| 高潮精品| 九九九九热只有精品| 啊啊啊啊二区好大| 爆乳免费黄网站| 桃花色涩综合影院| 人人操人人搞人人草| 丝袜亚洲综合| 亚洲第一页色网| 色网综合网| 欧美色图亚洲特色| 影音综合网| 少妇一线天久久久久久| 日韩9999| 北条麻妃99精品青青久久| 九九热免费视频| 久久久免费懂色| 欧美性爱第一页久久| 国产精品另类一区大香蕉| 97一本大道亚洲一区| 日韩av色图综合| 国产一级久久久| 高潮内射在线| 999久久久久久久精| 亚洲 图片 综合91| 伊人色综合超碰| 欧美少妇第一页| 校园春色亚洲欧洲| 麻豆伊人网| 天天看高清麻豆| 综合91网| 96精品久久久| 26UUU欧美日本| 先锋激情∨在线视频播放| 国产精品亚洲无码| 亚州免费啪啪视频| 97人人射| 牛牛操视频逼| 在线一道啪| 欧美 亚洲 偷拍自拍| 亚洲综人| 色在线69堂| 欧美色日本| 青青草啪啪网| 亚洲色图综合网| 久久一二三四不卡 | 99色色网| 色色无码| 日韩美女久久一区二区三区| 江都AV在线| 亚洲国产剧情少妇激情| 99re8超碰| 绑缚麻绳人妻寝取完整版| 一道本东京热加勒比一区二区三区| 夂久色| 欧美成人9797| 欧美操逼视频二区| 欧美国产有色电影| 蜜臀网址在线| 东京热一区二区中文字幕| 中欧人妻丝袜中文字幕| 国产1024在线播放| 国产精品嫩草影院免费| 秋霞一级视频在线观看免费| 色婷婷激情| 蜜色网色哟哟| 九九国产热| 亚洲极品| 欧美色999| 久久91视频| 国产亚洲国产超碰| 黄色高清久久无码依人| 欧美综合狠| 懂色aV一区二区天美传媒| 1769国内精品视频| 欧美精品1区2区3区| 3571色综合一区二区二区| 亚洲一二三精品久久网| 欧美综合777| 色婷婷一区二区三区久久| 欧洲综合无码| 久99久视频| 久插综合| 97操碰| 日韩精品区二区三区不卡| 日韩 人妻 精品| 欧美传媒一区| 好爽视频在线观看视频| 欧美人妻精品一区二区| 91久精品| 99re99在线视频| 欧美黄业| 久久久久婷婷| 亚洲牲交| 亚洲色图一区二区三区| 99re99视频在线免费观看| 欧美亚男人的天堂| 女人的天堂大香蕉网| 精品人妻av在线播放| 99综合免费视频| 天天综合精品| 99re在线视频国产| 日韩三级在线观看网站| 婷婷五月天成人网| 99国产精品自在自在| 久久久久久网址| 九九色精品| 330dv亚洲成年视频网| 97亚洲欧美| 一区二区三区 日韩欧美| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 欧美日本一区二区a人| 欧美综合骚| 日韩本不卡视频在线观看 | 色爱亚洲| 日本中文字幕在线视频| 麻豆天美在线喷水AV| 日韩成人无码| 手机av天堂久久久久| 啊啊啊男女| 天天综合网日韩7799| 91红杏| 99re免费| 嗯啊啊啊轻点视频 | 97ai亚洲| 成视频在线观看免费看| 在线播放中文字幕| 久久av成人无码免费| 亚洲网自拍| 精品视频一区二区| 亚洲另类久操网| 亚洲图片欧美色| 九九综合久久| 欧综合网| 久久精品人体| 国产强奸无码乱伦| 九九久久首页| 久久国产AⅤ| 天天综合有色网| 国产区日韩区在线观看| 男人天堂站| 国产日韩精品suv| 日韩欧美成人大香蕉| 26uuu最新| 久久国产精品,久久国产| 偷拍偷窥与盗摄视频专区| 久久久久性熟视频| 91被操| 午夜毛片高清免费不卡| 秋霞蝌科网日本一区| 天操天操夜操夜月月年年操操| 午夜影美女日鸡鸡天天视频国产| 中文字幕无码不卡啪啪| 五月丁香综合| 久久久久久九九九九| 成人老鸭窝人人在线视频| 色综合V| 久操影视| 五月天婷婷久久| 97欧美超碰| 蜜臀久久99精品久久久久久-DVD原版全| 亚洲人精品久久久喷水| 亚洲国产精品无码AV久久久| 老女人老91妇女老热女| 熟女乱伦二区| 日韩性爱长视频免费| 免费人人搞97| 久久久久国产精品片区无码直播| 精品亚洲天堂| 欧美五区| 激情五月天社区| 免费国产视频| 偷拍综合亚洲| 无码又爽又硬又激情免费视频| 韩国免费播放一级毛片| 精彩久久中文| 99热97| 俺去俺来也在线www| 色欧洲| 久草精品一区| 69人妻人人揉人人躁人人精品| 免费一级性爱久久| 国语精品对白| 干B| 日本三级中国三级99人妇网站| 嫩呦国产一区二区三区AV| 无码高清专| 偷拍 亚洲 欧美| 久久综合超碰| 无码欧美有限公司| 日本国产欧美高清在线| 黄片免费日韩| 蜜桃臀av一区二区| 99色婷婷中文字幕乱色| 懂色AV一区二区三区| 国产成人一级av88| 日韩欧美性爱电影在线观看| 国产精品色| 精品乱子一区二区三区99| 丁香九月激情啪| 欧美性生活免费网| 久久久97| 91人妻人人澡人人爽人人精品| 9999亚洲精品| 国精品一区二区三| www.夜夜操| 色官网在线| 曰韩操B| 国产精品黑人一区二区三区| 欧美亚洲手机在线| 啊啊啊啊,啊啊好多水| 欧美日韩婷婷中文| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 大香蕉久久| 亚洲情色中文字幕一区| 黄色电影在线播放综合网站 | 久久九九97| 碰人碰碰人人开房人肉| 999 久久久| 99啪啪| 色婷婷综合久久久久中文一区二区| 亚洲激情综合| 欧美色五月| 激情五月婷婷| 久久色情| 婷婷五月天福利| 五月丁香激情啪啪| 久久综合激情| 色婷婷丁香五月天| 久久久久久久人妻| 俺去也婷婷| 天天日天天舔| 91视频国品一二三区| 午夜人妻精品综合在线| 99精品在线观看| 九九热精品视频在线观看| 久热婷婷| 蜜臀国产AV中文字幕| 国产精品麻豆成人AV艾秋| 丁香五月AV| 91N欧美| 亚洲情色1区| 99热导航| 一区二区三区成人| 亚洲影视高清第一页| 欧美色图自拍| ?亚洲伊人伊成久久人综合网| 多毛小伙内射老太婆| caoni国产亚洲av| 被体育老师抱着c到高潮| 亚洲综合婷婷| 婷婷五月天影院| 日韩人妻少妇中文字幕| 亚洲图片欧美制度| 日日干男人的天堂| 热热色青青草| 国产60页| 91香蕉视频在线观看免费| 国产女人高潮嗷嗷嗷叫小说| 亚洲第一黄色av网站| 免费啪啪啪网站18岁| 狠狠综合| 爱爱动态试试看6 0秒| 欧美 熟女 日韩| 久草色在线观看| 亚洲欧洲激情卡通另类文学四射小说网站 | 美欧色综合| 国产丝袜欧美在线视频| 综合操逼| 国产刺激视频| 国产精品丝袜久久亚洲不卡| 日日玩天天干| 永久免费观看的毛片的网站| www..com操老师| 少妇人妻在线| 操操逼操操逼操操逼逼| www狠狠| 熟女一区二区| 一区二区播放| 亚洲成人一二三区| 国产成人网站在线观看| 91丝袜在线观看视频在线观看| 1204金沙人妻懂旧版免费| 色婷婷日韩精品一区二区三区| 精品人妻一区二区三区日产| 亚洲最新av无码成人精品区 | 国产一区二区三区免费视频在性观看 | 亚洲国产精品9999在线观看| 4399成人黄A片| 欧美白嫩在线放| 日韩人妻无码不卡网站| 69少妇一区二区| 99色视频| 精品欧美日韩在线观看| 亚洲网站一区二区在线| 国产精品青草综合久久| 9久久美女首页| 久久99国产精品| 亚洲精品一区二区三区在线播放| 精品国产网站| 午夜啊啊| 天天躁日日躁AAA片李宗瑞| 怡红院怡春院| 日韩猛交| 一区二区娱乐网站| 2019午夜福利视频| 另类TS人妖一区二区三区| 韩日精品四区| 97精品一区| 大香网站| 91爱看| 都市久久精品激情亚洲| 亚洲另类久操网| 久久高潮妇女视频| 亚洲色啪| 亚洲AV永久无码精品成人调教| av网站在线观看了| 伊人网青青| 国产白丝在线| 啪啪啪东京| 欧美97网| 久久中文色图| 蜜桃无码AV一区二区| 亚洲最新中文字幕免费| 国产综合久| 婷婷人妻激情| 偷拍自拍在线视频观看| 日韩精品怡红院| 中国一级特黄大片护士| 亚洲图片欧美制度| 国产精品久久aV| 亚洲AV乱码专区国产噜噜亚洲| 玖玖综合网| 天天插天天干| 美女啊啊啊啊啊| av中文在线| 特级毛片特黄久久免费看| 伊人久久蜜月| 亚洲图片欧洲图片aⅴ| 亚洲宗合网| 熟女人妻一区二区三区| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 婷婷五月天无码 | 欧美色就是色| 久久手机视直播| 翔田千里A片一区二区| 欧美精品丝袜久久久中文字幕| 乱性AV| 亚洲免费97免费| 91人妻做a观看视频| 亚州Av天美传媒| 丁香五月性爱| 欧美激情综合| 欧美 日韩 国产传媒| 国产99精品一区二区三区免费| 婷婷15月天青娱乐| 韩国一级婬片A片AAAAA| 欧美亚洲首页| 日韩三级网址| 少妇3P性爱自拍| 自拍第一页| 插入综合网| 免费国产电影一区二区| 精品无码久久久久| 久操精品网| 啊啊啊草死我| 伊人991| 99热伊人| 亚洲人体视频在线观看| 97国产伦理| 丁香六月天| 日韩免费福利在线观看| 91精品久久久久久久久久| 久色网| 岛国黄片网站| 国产AV天美传媒一区二区三区| 欧美日韩国产在线| 在线观看高清AV| 久热这里只有精品9| 夜夜高潮夜夜爽| 久久肏大逼| 黑人免费福利视频| 日本精品一区二区三| 亚洲国产精品乱码在线观看| 男女性感激情网站| 香蕉99秘 一区精品蜜桃臀| 久久久久久久久久黄色网| 日韩久久激情精品| 呦呦影院| 精品在线78| 午夜福利区| 丁香六月天| 国产www色在线观看| 超碰免费97| 曰本道人妻久久久在线不卡色视频| 日韩女优中文字幕| 亚洲四虎熟女精品| 强奸乱伦AV网址| 一本久道久久综合狠狠爱一密臀精| 老熟妇综合| 久久精品人体AV| 性爱乱伦网址| 人人摸.人人色| 福利视频网站| 四虎884| 九九九九九九九九九九九九九九九女| 91狠婷| 国产99 中文字幕日韩小视频| AV一起草在线| 亚洲欧美成人网站AAA| 色香网| 91艹| 97精品综合久久网| 日韩紧密久久| 密乳AV免费观看| 国产高清自拍| 天天综合亚在线| 97色97干| 欧洲Au麻豆| 伊人青青草久久| 亚洲成?V人片在线观看福利| 丁香五月成人| 色www精品视频在线观看| 婷婷激情五月| 成人免费福利在线观看| 天天躁日日躁xxxxx| 亚洲 小说 欧美 激情 另类| 中出欧美| 不卡视频一区蜜桃视频| 蜜区区视频79 | 欧美性暴力猛交XXXX| 一区二区三区 丝袜 高跟 美腿| 日本黄 R色 成 人网站| 日本亚洲熟女视频| 在线可观看的黄色网址| 欧美强奸乱能| www.久久最新地址| 国产探花精品在线| 欧美日韩性爱无码| 丝袜剧情| 日韩成人性爱电影在线播放| 久久久久久国产无码精品| 狼狼色丁香久久婷婷综合五月| 超碰无码加勒比| 亚洲 自拍偷拍 欧美| 新久久AV| 国产高清成人mv在线观看| 国产av强奸美女| 在线a v| 1禁看欧美黄片免费看| 国产熟女免费观看久久| 另类小色呦| 色香蕉影院| 97天天摸天天碰| 国产久久久9999| 亚洲综合99999| 久久啊啊啊视频| 亚洲国产中文字幕| 超碰97久| 91少妇人妻| 激情黄色片在线观看| 奇米四色网| 国模不卡| 久热婷婷| 中文字幕一二三区| 亚洲视频二区 | 中文字幕一区二区三区字幕| 日逼视频日本| 欧美婷婷五月天| 日本三级久| 国产熟女| 另类老少妇| 人人妻人人玩人人澡人人爽| 国产精品懂色tv影视免费观看| 欧美性爱91| 日韩免费性爱视频在线观看| 校园春色制服丝袜中文字亚洲| 久久女人视频| 91人妻久久久久久久久久久久久| 91日韩网站| 黄色成人网久久久久久| 中文字幕一区二区韩| www.99热| 麻豆 亚洲 97| 91四海无码日韩欧美| 亚洲本色精品一区二区久久| 中文字幕久热视频在线| 色吧五月| 97精品97| 啊啊啊爽爽| 欧美综合娱乐久久| 亚洲激情久久| 97国产色图 | 亚欧美色图| 99热| 岛园激情| 午夜福利在线视频1000| 暴力av在线| .精品人妻一区二区三| 蜜乳av首页| 日日骚 av| 夜夜欢天天干| 性在久久久久久| 大鸡吧尹人在线| 亚洲精品久久久久久| 国产家庭乱伦表演| 婷婷激情综合网| 狠综合网| 中文字幕国产在线天堂| 在线不卡视频| 老熟女中文字幕高清| 日韩97| 91麻豆va国产精品| 青青青艹在线视频| 亚洲乱码精品一区二区| av一区二区三区 中文| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 九九国产| 1000部熟女视频在线观看| 亚洲少妇喷视频看| 久久精品一区一起草| 亚洲三区视频| 一区麻豆 高清中文字幕| 欧美色网络| 国产美女高潮叫床视频| 欧洲精品网| 激情熟女12P| 加勒比在线视频| 深喉吞精| 色综合色综合网| 欧美精品,四区。五区| 欧美伊人久久综合网| 台湾佬激情综合| 97手机日韩| 丁香六月婷婷综合| 久久久久久加勒比| 一块操欧美| 欧美97av| 91干熟女| 午夜九九| 欧美黄片视频在线观看免费| 激情啪啪视频| 亚洲高清无码在线桃色| 久久久久9999精品九九九| 秋霞一级鲁丝片A片| 中文字幕丝袜美腿| 日本视频在线中文字幕| 国产欧美一区二区| 91综合网| 精品久久久久黄少妇| 秋霞 色色| 少妇与黑人高潮在线| 欧美性爽xyxOOOO| 色老汉色| 日本操逼视频不卡直接放| 超碰 av 女人天堂| 激情 欧美 亚洲 小说| 狠综合网| 人人插人人摸人人| 破处bbq| 色婷婷狠狠18禁| 亚洲视频精选| 日本不卡卡一区| 香伊人在线| 天天舔天天日天天射| 亚洲精品天堂久久A∨51成人漫| 亚州男人的天堂| 国产精品久久成人免费| 蜜臀久久99精品久久久久电影| 夜夜草网站| 亚洲图片欧美色| AV天堂电影网| se01国产在线视频| 国产女主播视频在线观看| 激情九月婷婷| 加勒比伊人| 天天摸夜夜操视频| 爽 好舒服 无码刺激久久| 成人青青草原伊人| 国产精品一区二区在钱播放| 操逼视频国产无套| 天天日熟妇| 91久久久老司机| 中文字幕激情小说| 欧美日韩丝袜| 自拍偷拍第26| 蜜臀av中文字幕| 五月丁香久久| 中文字幕五月婷婷免费| 肉丝无码中文高清| 亚洲精品丝袜-不卡成人免费…… 久久久久成人蜜桃精品 | 色五月婷婷麻豆在| 伊人五月天婷婷| 丰满人妻一区二区中文| 久热超碰| 精品久久久久久无码| 日韩欧美中文字亚洲慕| 爱爱动态120秒| 操逼1区| 91超碰在线| 精品一区二区久久| 后入 亚洲 美女 射| 日日操丁香五月天| 1区2区3区视频| 亚洲男人综合网| AV色天香在线| 粉嫩不卡一区二区性爱| 97欧美| 麻豆a'v电影| 亚洲天堂另类小说男人| 日韩精品一区二区三区色欲| 精品国产av一区二区三区四区入口| 蜜臀一二三| 精品国产自在在线99| 伊人女女资源在线观看| 任你艹| 欧美自拍网| 日本一片一区| 亚洲天堂,男人| 性色av蜜臀av色欲aV| 91天天| 天天影视91看看| 麻豆 亚洲 97| WWW4虎| 99热成人| 日韩成人大片在线观看| 欧美精品久久久久久久丰满| 亚洲黄色电影| 亚洲伊人久久精品影院| 这里是精品| 婷婷久草一区二区三区| 亚洲制服欧美另类内射| av在线播放国产一区| 97超碰香蕉| 国产在线激情| 亚洲偷91色| 国产精品天干天干综合网麻豆| 91久久精品国产| www五月| 日韩精品中文字幕二区| 人妻少妇被猛烈进入中| 久久99草| 亚州操操穴网| 欧美少妇性爱网站| 亚洲av国产av综合av卡| 91春色| 大奶的诱惑| 中国熟妇| 久久亚洲日韩熟女精品| 男人天堂网手机版婷婷| 亚洲色入欧美| 国产成人主播| 91黑丝美女| 久久九七| 亚州色站 日韩电影| 在线天堂999| 日本淫色网| 欧美一区二区情色| 青娱乐亚洲热| 伊人青青一区成人视频在线观看区| 日本超碰在线国产一区| 99这里有精品视频| 五月天婷婷色| 久久99操天天日| 蜜臀av在线播放一区二区三区| 97干在线| 夜夜嗨AV一区天天| www鬼畜国产男人的天堂| 麻豆久久视频在线地址| www.狠狠干.coom | 色香色欲天天综合网天天来吧| 综合影视国产无码| 日韩av影片在线观看| 婷婷深爱五月| 丁香色婷婷| 国产精品一二三免费网站| 国产欧美伊人| 9 7超碰在线免费观看| 欧美在线啊啊啊| 午夜精品人妻二区三区| 四虎免费视频| 欧美春色| 亚洲无码com| 国产精品视频自拍在线| 日本操大逼| 日韩在线观看中文字幕视频| 一起草AV| 欧美一区二区日韩传媒搭讪精品| 一区二区 电影 亚洲| 97超碰免费生活| 毛片99-全集电影手机免费观看完整-B029AV| 99精品无码| 亚洲欧美综合| 日日噜噜夜夜狠狠视频无| hd成人一区二区在线| 免费视频无码| 熟女自慰久久久| 91网站18+| 黄页av| 国产高清精品一区二区三区毛片| 精品v日韩欧美国产| 婷婷五月天丁香| 久久97资源 网| 干美女人妻| 一区在线精品中文字幕| 91在线超高颜值国产| 色综合色欲色综合色综合色综合| 亚洲午夜免费狠狠干| 亚洲AV不卡在线观看尤物| 亚洲 中文 欧美 日韩 在线| 少妇久久久久久久| 国产亚洲精品农村妇女 | 日本天天操| 920日本午夜免费| 97伪v| 91另类| 92午夜免费福利视频|