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

ARTICLE DETAIL

資訊詳情

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

基于JSP+Servlet+MySQL的校園活動管理系統(tǒng)設(shè)計與實現(xiàn)

基于JSP+Servlet+MySQL的校園活動管理系統(tǒng)設(shè)計與實現(xiàn) 簡介本資源是一套完整的校園活動管理系統(tǒng)畢業(yè)設(shè)計實現(xiàn)方案面向計算機(jī)相關(guān)專業(yè)本科生及Web開發(fā)初學(xué)者聚焦高校第二課堂管理場景解決活動申報、審批、發(fā)布、報名與數(shù)據(jù)統(tǒng)計等核心業(yè)務(wù)流程的數(shù)字化落地問題。壓縮包共2011個文件主體為1679個Markdown文檔含需求分析、數(shù)據(jù)庫設(shè)計、接口說明與部署手冊、290個JavaScript文件涵蓋前端交互邏輯與Vue組件、28個JSON配置文件用于菜單權(quán)限與活動狀態(tài)定義整體體積達(dá)170.8MB結(jié)構(gòu)層次分明便于分模塊學(xué)習(xí)與調(diào)試。已有40人下載學(xué)習(xí)資源中包含可運行的前后端代碼、詳盡的系統(tǒng)設(shè)計文檔、標(biāo)準(zhǔn)化的API接口規(guī)范及典型業(yè)務(wù)場景的測試用例特別適合畢業(yè)設(shè)計選題參考、全棧開發(fā)實踐訓(xùn)練及校園信息化項目復(fù)用。 大學(xué)里做過活動組織的人基本都體會過那種被Excel表格和微信接龍支配的恐懼。報名信息散落在各個群聊、紙質(zhì)簽到表最后不知道丟到哪里、活動沖突沒人發(fā)現(xiàn)、第二課堂學(xué)分統(tǒng)計的時候?qū)χ鴰装贄l聊天記錄翻到眼瞎。我這里說的就是針對這些真實痛點做的校園活動管理系統(tǒng)從需求分析到上線部署完整走了一遍技術(shù)棧選的是Java Web方向最經(jīng)典的組合——JSP Servlet MySQL算是一個覆蓋面比較全、又能作為畢設(shè)或課程設(shè)計直接參考的實戰(zhàn)項目。無論你是準(zhǔn)備動手做類似選題的學(xué)生還是想把管理流程徹底數(shù)字化、不想再手工統(tǒng)計的活動組織者這篇文章都值得看完。系統(tǒng)覆蓋了活動發(fā)布、在線報名、簽到核銷、數(shù)據(jù)統(tǒng)計四個核心環(huán)節(jié)我會把每一步的設(shè)計思路和關(guān)鍵代碼拆開講清楚尤其是那些文檔里不常寫的坑、容易忽略的邊界情況也會一并交代。1. 這個系統(tǒng)到底解決了校園活動管理里的哪些真實問題1.1 從一場失敗的社團(tuán)招新說起先講個具體場景。去年秋季學(xué)期我?guī)鸵粋€社團(tuán)做招新活動統(tǒng)計報名方式是各部門自己拉群、填在線表格結(jié)果到了活動當(dāng)天報名80人實到50人問起來有人說沒看到通知有人說以為不用簽到還有幾個同學(xué)直接跑錯了教室——因為同一天同一個時間段另一個社團(tuán)在隔壁教室辦了活動兩邊的人撞在一起場面一度混亂。活動結(jié)束后要報賬、要錄學(xué)分各種信息從聊天記錄里往上扒來回拉扯了整整兩周。這個經(jīng)歷讓我下定決心校園活動管理這件事必須有一個統(tǒng)一的系統(tǒng)來承接。它需要解決的不只是報名這一個動作而是從前端的活動信息觸達(dá)、報名篩選到活動現(xiàn)場的簽到核銷再到活動結(jié)束后的數(shù)據(jù)沉淀全鏈路的流程化管理?;顒又挟a(chǎn)生的數(shù)據(jù)如果只停留在聊天記錄里那它就無法被復(fù)用、被統(tǒng)計、被追溯而系統(tǒng)的核心價值恰恰是把這些分散的、非結(jié)構(gòu)化的信息變成結(jié)構(gòu)化的、可持續(xù)使用的數(shù)據(jù)資產(chǎn)。1.2 系統(tǒng)要服務(wù)的三類角色及各自的痛點在設(shè)計系統(tǒng)前我先梳理了使用這個系統(tǒng)的三類人群他們的訴求和痛點完全不同。普通學(xué)生參與者需要快速發(fā)現(xiàn)感興趣的活動、一鍵報名、收到活動時間地點提醒、現(xiàn)場簽到不排隊。最怕的是報名之后忘記時間、找不到地點或者活動取消了沒人通知?;顒咏M織者社團(tuán)/學(xué)生會干事需要發(fā)布活動信息、審核報名名單、查看報名人數(shù)、生成簽到二維碼、導(dǎo)出數(shù)據(jù)用于學(xué)分統(tǒng)計。最怕的是報名人數(shù)統(tǒng)計不準(zhǔn)確、手動核對簽到表耗時、活動沖突沒發(fā)現(xiàn)。系統(tǒng)管理員團(tuán)委/學(xué)工辦老師需要審核活動是否合規(guī)、監(jiān)控活動是否與課程時間沖突、查看各社團(tuán)活動開展情況的數(shù)據(jù)報表。最怕的是活動信息不規(guī)范、學(xué)分造假、無法量化學(xué)生參與度。三類角色的核心訴求交織在一起就構(gòu)成了系統(tǒng)的功能矩陣。我按照這個矩陣來規(guī)劃模塊而不是一上來就堆功能頁面這樣可以確保每個功能都有明確的使用場景和用戶價值。1.3 為什么選JSP Servlet這套經(jīng)典組合而不是花哨的新框架技術(shù)選型上我最終定的是JSP Servlet MySQL沒有用 Spring Boot也沒有用前后端分離。并不是說新框架不好而是針對這個具體項目的定位這套經(jīng)典組合有不可替代的優(yōu)勢。教學(xué)/畢設(shè)導(dǎo)向這個項目的典型場景是課程設(shè)計或畢業(yè)設(shè)計。JSP Servlet能完整展示HTTP請求處理、Session管理、JDBC操作、MVC分層這些Web開發(fā)核心原理評審老師看得懂你也能講清楚。如果直接上Spring Boot很多底層機(jī)制被封裝掉了答辯時反而容易被問住。部署輕量只需要Tomcat MySQL就能跑起來不需要Maven中央倉庫下載幾百MB依賴對開發(fā)機(jī)配置不高的同學(xué)友好。我現(xiàn)在用的Tomcat 9 JDK 8部署沒有任何兼容性問題。跨瀏覽器兼容性好因為服務(wù)端渲染頁面最終輸出的是純HTML不存在前端框架版本引起的兼容問題。我在IE11、Edge、Chrome、Firefox上都測過渲染效果完全一致。這一點對校園環(huán)境里大量老舊機(jī)房電腦來說很關(guān)鍵。如果你以后想往Spring Boot遷移這個項目的分層結(jié)構(gòu)Servlet控制層 Service業(yè)務(wù)層 DAO數(shù)據(jù)層本身就是Spring MVC的雛形遷移成本很低。2. 數(shù)據(jù)庫設(shè)計與用戶認(rèn)證先把地基打牢2.1 六張核心業(yè)務(wù)表的職責(zé)劃分?jǐn)?shù)據(jù)庫是一個管理系統(tǒng)的地基表結(jié)構(gòu)設(shè)計得好不好直接決定后續(xù)功能開發(fā)的復(fù)雜度。我把整個系統(tǒng)拆成了六張核心表每一張表的職責(zé)都足夠單一。表名職責(zé)說明關(guān)鍵字段t_user用戶表存儲學(xué)生、組織者、管理員三類賬號id, username, password, role, real_name, student_not_activity活動表記錄活動基本信息與狀態(tài)id, title, category, location, start_time, end_time, max_people, status, creator_idt_activity_audit活動審核記錄表保存審核鏈路id, activity_id, auditor_id, result, comment, audit_timet_registration報名表記錄用戶與活動的報名關(guān)系id, activity_id, user_id, register_time, cancel_timet_checkin簽到表記錄實際到場的核銷記錄id, activity_id, user_id, checkin_time, checkin_codet_category活動分類表支持分類篩選與統(tǒng)計id, category_name, sort_order這里有一個設(shè)計細(xì)節(jié)需要特別說明報名和簽到是分離的兩張表不是一對一的冗余關(guān)系。因為報名了不一定到場到場了也可能沒提前報名現(xiàn)場補簽兩種情況在數(shù)據(jù)模型上是兩個獨立的事實。分開存統(tǒng)計報名率和實到率的時候各自查自己的表邏輯非常清晰。如果你的需求里要求統(tǒng)計出勤率這種設(shè)計會給你省很多事。2.2 用戶表的設(shè)計細(xì)節(jié)密碼加密與角色權(quán)限用戶表里最關(guān)鍵的設(shè)計決策是密碼存儲方式。明文密碼是最常見的安全漏洞絕對不能出現(xiàn)。我用的方案是加鹽的MD5加密雖然現(xiàn)在看MD5已經(jīng)不算安全強度最高的算法但在這個項目場景作為教學(xué)演示已經(jīng)足夠而且相比BCryptMD5加鹽的方法更容易在答辯時講清楚原理。public class MD5Util { public static String encrypt(String password, String salt) { String base password salt; return DigestUtils.md5DigestAsHex(base.getBytes(StandardCharsets.UTF_8)); } public static String generateSalt() { return UUID.randomUUID().toString().replace(-, ).substring(0, 8); } }注冊時生成一個8位隨機(jī)鹽值將密碼鹽值拼起來做MD5數(shù)據(jù)庫里同時保存鹽值和加密后的密文。校驗登錄時用同樣的鹽值再算一遍比對密文是否一致。這樣即使數(shù)據(jù)庫泄露由于每個人的鹽不同彩虹表攻擊也很難生效。這是我在實際項目里堅持的一個底線放到任何管理類系統(tǒng)里都適用。權(quán)限控制我用了一個很輕量的方案用戶表中用role字段區(qū)分角色取值分別是1學(xué)生、2組織者、3管理員。在Servlet的過濾器里攔截請求按角色白名單控制訪問權(quán)限。例如所有以/admin/開頭的路徑只允許role3訪問。這個方案比Spring Security輕量得多對JSPServlet項目來說足夠清晰可講。2.3 活動的四種狀態(tài)流轉(zhuǎn)與審核鏈路活動不是一發(fā)布就能被所有人看到的。為了保證活動內(nèi)容合規(guī)沒有商業(yè)廣告、沒有違規(guī)內(nèi)容我設(shè)計了待審核 → 已通過/已駁回的狀態(tài)機(jī)加上后續(xù)的進(jìn)行中 → 已結(jié)束流轉(zhuǎn)?;顒颖砝镉靡粋€status字段表示取值如下0 待審核組織者提交活動后進(jìn)入的狀態(tài)僅自己和管理員可見1 已通過管理員審核通過對所有學(xué)生可見可以報名2 已駁回管理員審核不通過組織者可以修改后重新提交3 進(jìn)行中活動開始后自動進(jìn)入前端標(biāo)記為進(jìn)行中可簽到4 已結(jié)束活動結(jié)束時間到達(dá)后自動進(jìn)入數(shù)據(jù)歸檔不可修改審核動作單獨拆了一張t_activity_audit表每次審核都記錄誰在什么時間做了什么樣的決定。這個設(shè)計看起來多了一張表但對后續(xù)查問題非常有幫助——如果有人投訴某場活動不合規(guī)你可以很快查出審批鏈路上是哪一環(huán)出的問題。這種可追溯性是管理類系統(tǒng)一個容易被忽視但很重要的能力。2.4 一個典型的活動發(fā)布建表SQL實例這里給出活動表的完整建表SQL字段注釋對上了設(shè)計文檔里的每個需求點CREATE TABLE t_activity ( id INT PRIMARY KEY AUTO_INCREMENT COMMENT 活動ID, title VARCHAR(100) NOT NULL COMMENT 活動標(biāo)題, category_id INT NOT NULL COMMENT 活動分類ID關(guān)聯(lián)t_category, location VARCHAR(200) NOT NULL COMMENT 活動地點, start_time DATETIME NOT NULL COMMENT 開始時間, end_time DATETIME NOT NULL COMMENT 結(jié)束時間, max_people INT DEFAULT 0 COMMENT 人數(shù)上限0表示不限, description TEXT COMMENT 活動詳情描述, cover_url VARCHAR(255) COMMENT 封面圖URL, status TINYINT DEFAULT 0 COMMENT 狀態(tài)0待審核/1已通過/2已駁回/3進(jìn)行中/4已結(jié)束, creator_id INT NOT NULL COMMENT 創(chuàng)建人ID關(guān)聯(lián)t_user, create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 創(chuàng)建時間, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新時間 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT校園活動信息表;注意編碼用了utf8mb4而不是utf8因為utf8在MySQL里是utf8mb3的別名不支持emoji和部分生僻字?;顒訕?biāo)題里如果有人放了emoji用utf8會直接報錯。這個坑我曾經(jīng)踩過當(dāng)時查了好久才發(fā)現(xiàn)是編碼問題。索引方面start_time和status聯(lián)合索引是查詢頻率最高的路徑務(wù)必加上??鐬g覽器兼容性在這個環(huán)節(jié)的體現(xiàn)可能不太明顯但其實utf8mb4的字符集支持直接關(guān)系到頁面表單在提交不同編碼內(nèi)容時的穩(wěn)定性所有瀏覽器最終都以UTF-8往服務(wù)端傳數(shù)據(jù)統(tǒng)一了編碼反而省去了一堆亂碼問題。3. 活動發(fā)布與沖突檢測最容易忽略的業(yè)務(wù)規(guī)則3.1 管理員審核到底在審什么活動發(fā)布不是填個表單點提交就完了。組織者提交活動后管理員需要核對幾個關(guān)鍵維度然后決定通過還是駁回。時間合理性活動開始時間不能早于當(dāng)前時間不能早于用戶創(chuàng)建活動的時間結(jié)束時間必須晚于開始時間。這是我做的第一層防線前端表單上就做校驗后端Servlet進(jìn)入Service層之前再做一次避免有人繞過前端直接構(gòu)造HTTP請求。場地占用沖突同一地點在同一時間段不能被兩個活動同時占用。這是一個數(shù)據(jù)庫層面就能查出來的規(guī)則查找該location下是否存在時間段重疊的已通過活動。如果存在管理員應(yīng)當(dāng)駁回或建議調(diào)整場地?;顒觾?nèi)容合規(guī)性標(biāo)題和描述不能包含違規(guī)關(guān)鍵詞這個我用了簡單的關(guān)鍵詞過濾目前維護(hù)了一個黑名單詞表后續(xù)可以擴(kuò)展接入更智能的內(nèi)容審核方案。3.2 時間重疊檢測的SQL寫法與邊界條件時間重疊檢測是個看似簡單實際容易寫錯的邏輯。兩段時間存在重疊等價于new_start old_end AND new_end old_start。但要注意邊界條件如果活動A的結(jié)束時間恰好等于活動B的開始時間比如A是9:00-10:00B是10:00-11:00這不算沖突。所以SQL里要用嚴(yán)格小于而不是小于等于。SELECT COUNT(*) FROM t_activity WHERE location ? AND status 1 AND ? end_time AND ? start_time;這個SQL里的兩個問號參數(shù)分別傳入新活動的開始時間和結(jié)束時間。執(zhí)行后如果count大于0說明存在同場地時間重疊的活動。我專門整理了邊界測試用例A活動9:00-10:00B活動10:00-11:00應(yīng)該通過B活動9:30-10:30應(yīng)該攔截B活動8:00-9:30應(yīng)該攔截結(jié)束時間9:30晚于A的開始時間9:00。把這些用例寫進(jìn)測試腳本每次改代碼都跑一遍能有效避免回歸問題。更進(jìn)一步考慮到校園活動經(jīng)常需要提前占場地我在活動表里增加了一個場地預(yù)約狀態(tài)邏輯當(dāng)管理員審核通過一個活動時系統(tǒng)自動將對應(yīng)場地在對應(yīng)時間段標(biāo)記為占用釋放則是活動結(jié)束時自動觸發(fā)。這樣即使有人先創(chuàng)建活動還沒提交審核也不會提前鎖住場地導(dǎo)致誤判。3.3 并發(fā)沖突兩個活動同時申請同一場地怎么辦單純的SQL查詢在單用戶場景沒問題但如果有兩個組織者同時提交同一場地的申請就可能出現(xiàn)都查詢到無沖突然后都插入成功的競態(tài)問題。解決這個并發(fā)沖突我用的是數(shù)據(jù)庫層面的事務(wù)行級鎖。Transactional public void createActivity(Activity activity) { // 在事務(wù)內(nèi)對場地記錄加鎖 venueDao.lockVenue(activity.getLocation()); // 再次檢查時間沖突此刻其他事務(wù)被阻塞 int count activityDao.countConflictByLocation(activity.getLocation(), activity.getStartTime(), activity.getEndTime()); if (count 0) { throw new BusinessException(該場地在所選時間段已被占用); } activityDao.insert(activity); }這里的核心點是lockVenue操作。如果有一個venues表來維護(hù)場地信息那就直接SELECT * FROM t_venue WHERE name ? FOR UPDATE悲觀鎖把這一行鎖住其他事務(wù)的同場地查詢就必須等待。如果沒單獨建場地表就只能考慮對location唯一索引做插入試探復(fù)雜一些。我在系統(tǒng)里建了獨立的場地表t_venue這樣鎖行是干凈的也不會鎖全表導(dǎo)致性能問題。這個細(xì)節(jié)雖然不復(fù)雜但它是整個系統(tǒng)里藏得最深但價值最高的部分面試或答辯時講出來會加分不少。3.4 跨瀏覽器的日期時間控件兼容性處理時間選擇是這個模塊里最折磨人的部分。原生HTML5的input typedatetime-local在Chrome和Edge上很好用但在Firefox舊版本和IE11上會退化成普通文本框用戶得手動輸入2025-03-18 14:30這種格式體驗很差還容易輸錯。更麻煩的是各瀏覽器對時間格式的解析有細(xì)微差異同一個value在不同瀏覽器里toString的結(jié)果不一樣傳到后端解析就容易出錯。我最終的方案是頁面用兩個下拉框分別選日期和時間日期用原生input typedate時間用input typetime在JS里拼成yyyy-MM-dd HH:mm:ss格式再提交。日期和時間控件在所有現(xiàn)代瀏覽器中支持性都很好退化成文本框的概率低而且即使用戶的瀏覽器不支持兩個字段的輸入格式也相對固定后端容錯容易處理。后端統(tǒng)一用SimpleDateFormat解析這個固定格式徹底繞開了各瀏覽器之間的格式差異問題。function buildDateTime() { const dateVal document.getElementById(activityDate).value; const timeVal document.getElementById(activityTime).value; if (!dateVal || !timeVal) { alert(請完整選擇活動日期和時間); return null; } // 統(tǒng)一格式避免瀏覽器差異 return dateVal timeVal :00; }這個看起來不起眼的處理實際上是最能體現(xiàn)跨瀏覽器支持這個熱詞價值的地方。沒有做兼容處理之前用戶用Firefox提交活動后端收到的日期字符串可能是2025/03/18 14:30用SimpleDateFormat的yyyy-MM-dd HH:mm:ss格式直接解析就報錯。統(tǒng)一了前端輸出格式之后所有瀏覽器在這個環(huán)節(jié)上的行為就完全一致了。4. 報名與簽到并發(fā)與防作弊的實戰(zhàn)處理4.1 報名接口的防超賣設(shè)計報名模塊是并發(fā)壓力最大、最容易出bug的地方。熱門活動比如名家講座、音樂會開放報名后同一秒內(nèi)可能有幾百個學(xué)生同時點擊我要報名。如果不做并發(fā)控制數(shù)據(jù)庫里可能出現(xiàn)報名人數(shù)超過活動人數(shù)上限的數(shù)據(jù)。這和電商秒殺里的超賣問題本質(zhì)上是同一個。我的方案是報名前先查當(dāng)前報名人數(shù)和活動人數(shù)上限如果已滿就返回已滿員。但這一步查詢和后續(xù)的插入不是原子的存在時間差。真正解決并發(fā)問題靠的是在活動表上做一次帶條件的原子更新Transactional public boolean register(int activityId, int userId) { // 原子更新僅當(dāng)已報名人數(shù)小于上限時才能更新成功 int updated activityDao.increaseRegisteredCount(activityId); if (updated 0) { // 說明人數(shù)已滿或活動不存在 return false; } // 插入報名記錄 registrationDao.insert(activityId, userId); return true; }對應(yīng)的SQL是UPDATE t_activity SET registered_count registered_count 1 WHERE id ? AND registered_count max_people;這個UPDATE語句本身是原子的InnoDB引擎會鎖定這一行并發(fā)情況下只有一個事務(wù)能執(zhí)行成功。先扣減名額再插入報名記錄保證了數(shù)據(jù)一致性。如果插入報名記錄失敗事務(wù)回滾名額也自動恢復(fù)。這是我比較滿意的設(shè)計既簡單又可靠比先查再插的方案結(jié)實得多。報名表本身也和活動表保持著一對多的關(guān)系多場活動報名互不影響。4.2 同一用戶重復(fù)報名的攔截與冪等處理有了上面的原子操作還要解決重復(fù)報名問題。學(xué)生手一抖點了兩次報名如果系統(tǒng)沒有攔截就會出現(xiàn)兩條報名記錄。同一個事務(wù)里可以先查t_registration是否存在activity_id和user_id的記錄但因為并發(fā)兩條請求可能同時查詢都發(fā)現(xiàn)不存在然后都插入成功。為此我對t_registration表建立了唯一索引ALTER TABLE t_registration ADD UNIQUE KEY uk_activity_user (activity_id, user_id);這個唯一索引是最終的兜底防線即使業(yè)務(wù)層沒攔住數(shù)據(jù)庫也會拒絕重復(fù)插入。插入時DuplicateKeyException一經(jīng)捕獲業(yè)務(wù)層返回您已報名該活動請勿重復(fù)操作。冪等處理靠的就是這個唯一索引。這是我在網(wǎng)上看到不少項目里都容易忽略的點很多人只做了代碼層的判斷沒有在最底層加約束結(jié)果在高并發(fā)下還是出了問題。如果學(xué)有余力還可以在前端做按鈕置灰防止用戶重復(fù)點擊但這只是優(yōu)化體驗真正的保障必須落在數(shù)據(jù)庫端。4.3 簽到功能設(shè)計二維碼是提升效率的最優(yōu)解傳統(tǒng)簽到是紙質(zhì)名單打勾人多的時候排隊嚴(yán)重。我設(shè)計的是二維碼簽到流程每個報名成功的學(xué)生系統(tǒng)分配一個唯一的簽到碼隨機(jī)8位字母數(shù)字可以做成二維碼展示在手機(jī)上活動開始時組織者用管理端掃碼簽到功能掃碼完成核銷。簽到碼的設(shè)計要求是足夠隨機(jī)且不可預(yù)測防止有人偽造別人簽到。用UUID截取或SecureRandom生成都可以但要注意不要用簡單的自增ID因為自增ID可猜測別人把你的ID減一就是另一個人的簽到碼這是嚴(yán)重的安全漏洞。public String generateCheckinCode() { String chars ABCDEFGHJKLMNPQRSTUVWXYZ23456789; // 排除易混淆的字符 I、O、0、1 StringBuilder sb new StringBuilder(); SecureRandom random new SecureRandom(); for (int i 0; i 8; i) { sb.append(chars.charAt(random.nextInt(chars.length()))); } return sb.toString(); }字符集里去掉易混淆的I/O/0/1是真實場景中總結(jié)出來的經(jīng)驗不然用戶報簽到碼的時候那是字母O還是數(shù)字0能糾結(jié)半天。簽到和報名的角色分離也很重要t_checkin表記錄的是實際到場這一事實即使用戶沒報名直接到現(xiàn)場組織者也可以通過特殊通道管理員手動添加完成補簽。這樣已報名未到場和未報名已到場兩種情況都能被數(shù)據(jù)準(zhǔn)確地表達(dá)出來。4.4 遲到早退與活動時長計算如果只簽到一個時間點考勤的準(zhǔn)確性還是不夠。系統(tǒng)里我額外加了一個活動時長概念簽到記錄里保存checkin_time活動結(jié)束時組織者確認(rèn)結(jié)束系統(tǒng)自動計算活動時長滿足一定比例才算完整參與。具體規(guī)則可以做得很靈活——比如活動時長小于2小時的簽到即算參與大于2小時的需要簽到時長覆蓋80%才算有效。這個規(guī)則在配置表里維護(hù)管理員可以按活動類型調(diào)整。這套設(shè)計深挖下去就是一個完整的考勤系統(tǒng)但在這個項目里按需裁剪不用過度設(shè)計?;顒訝顟B(tài)從進(jìn)行中變?yōu)橐呀Y(jié)束時所有該活動的簽到記錄會統(tǒng)一打上已完成標(biāo)記方便后續(xù)統(tǒng)計。5. 數(shù)據(jù)統(tǒng)計與可視化讓管理決策有據(jù)可依5.1 活動維度的統(tǒng)計指標(biāo)數(shù)據(jù)統(tǒng)計模塊是整個系統(tǒng)里最受管理員歡迎的部分。我把統(tǒng)計報表分為三個維度活動維度、用戶維度、時間維度?;顒泳S度關(guān)注的指標(biāo)包括活動報名率 報名人數(shù) / 活動人數(shù)上限反映活動吸引力活動實到率 簽到人數(shù) / 報名人數(shù)反映活動組織質(zhì)量活動分類分布按t_category分組統(tǒng)計不同分類下的活動數(shù)量和報名總量活躍組織者排行按組織者發(fā)布的活動數(shù)量和總報名人次排序這些指標(biāo)用SQL聚合就能算出來不重不復(fù)雜。比如實到率SELECT a.id, a.title, COUNT(DISTINCT r.id) AS register_count, COUNT(DISTINCT c.id) AS checkin_count, ROUND(COUNT(DISTINCT c.id) / COUNT(DISTINCT r.id) * 100, 2) AS attendance_rate FROM t_activity a LEFT JOIN t_registration r ON r.activity_id a.id LEFT JOIN t_checkin c ON c.activity_id a.id WHERE a.status 4 GROUP BY a.id ORDER BY attendance_rate DESC;注意這里用了DISTINCT因為一個用戶報名后雖然不會重復(fù)但理論上一名用戶對同一活動只有一條報名記錄和一條簽到記錄都加了DISTINCT是為了防止未來業(yè)務(wù)擴(kuò)展比如允許多人代簽導(dǎo)致數(shù)據(jù)膨脹。這種防御性寫法在數(shù)據(jù)統(tǒng)計里很重要。5.2 展示端用ECharts畫圖表還是用HTML表格統(tǒng)計結(jié)果可視化有兩種思路純HTML表格展示或者引入ECharts做圖表。我最終選擇了二者結(jié)合表格為主圖表為輔。原因很實際——表格能精確展示每一個數(shù)值用戶可以快速定位問題圖表則適合做趨勢性的宏觀觀察比如近三個月活動數(shù)量趨勢。ECharts的引入很簡單一個JS文件即可但它依賴瀏覽器Canvas支持在老舊瀏覽器上顯示可能不正常。所以我的圖表頁面做了特性檢測如果瀏覽器不支持Canvas自動降級為表格展示。這個降級方案就是在寫跨瀏覽器支持這個關(guān)鍵詞時很重要的一環(huán)。if (window.CanvasRenderingContext2D) { // 初始化ECharts const chart echarts.init(document.getElementById(trendChart)); chart.setOption(option); } else { document.getElementById(chartContainer).innerHTML p當(dāng)前瀏覽器不支持圖表渲染請使用表格視圖查看數(shù)據(jù)/p; document.getElementById(tableContainer).style.display block; }這段代碼保留了基本的數(shù)據(jù)可讀性同時不會因為瀏覽器兼容問題導(dǎo)致整個統(tǒng)計頁白屏。實際上只要不強制依賴某個瀏覽器特性頁面的跨瀏覽器穩(wěn)定性就能大幅提升。主流的Chrome、Edge、Firefox都是支持Canvas的這個降級機(jī)制主要是為機(jī)房里的老舊IE兜底。5.3 報表導(dǎo)出功能從看一眼到拿去用統(tǒng)計結(jié)果不僅要在線看還要能導(dǎo)出歸檔、用于上報。我實現(xiàn)了導(dǎo)出Excel的功能核心思路是生成CSV格式文件而不是真正的xlsx。CSV本質(zhì)是純文本任何瀏覽器都能正常下載而且亂碼問題也好解決——在文件開頭加上BOM標(biāo)記\ufeff用Excel打開時就能正確識別UTF-8編碼。response.setContentType(text/csv;charsetUTF-8); response.setHeader(Content-Disposition, attachment; filenameactivity_report.csv); PrintWriter out response.getWriter(); out.print(\ufeff); // 寫入BOM頭 out.print(活動名稱,報名人數(shù),簽到人數(shù),實到率\n); // 遍歷數(shù)據(jù)寫行 out.flush(); out.close();實際使用中組織者和老師最常用的是某活動報名名單導(dǎo)出字段包含學(xué)號、姓名、學(xué)院、聯(lián)系方式、報名時間方便他們打印出來做線下核對。這個導(dǎo)出接口的權(quán)限控制必須做好只允許該活動的組織者或管理員導(dǎo)出學(xué)生角色的賬號不能訪問否則個人隱私就泄露了??刂品绞揭廊皇窃赟ervlet層做角色校驗同時還要校驗當(dāng)前登錄用戶是否為該活動的創(chuàng)建者或者管理員。雙重校驗?zāi)苡行Х乐顾皆綑?quán)比如學(xué)生A登錄后拼URL直接導(dǎo)出學(xué)生B創(chuàng)建的活動名單。6. 異常場景與部署實踐一些不能寫在教科書里的經(jīng)驗6.1 表單重復(fù)提交的攔截方案活動報名的場景里用戶等不及響應(yīng)連點了幾次提交按鈕或者網(wǎng)絡(luò)不穩(wěn)定時刷新重發(fā)都可能造成重復(fù)報名。我在前端做了提交按鈕置灰但這只能擋住正常用戶手抖擋不住F5刷新或瀏覽器自動重放。后端代碼里我加了一個簡單的Token機(jī)制進(jìn)入報名頁面時生成一個隱藏的randomToken存到Session里提交報名時帶上這個Token后端比對成功后立即清空。這樣同一個Token只能使用一次F5刷新后Token已失效后端直接拒絕。// 生成Token寫入Session String token UUID.randomUUID().toString(); session.setAttribute(register_token_ activityId, token); // 表單提交時比對并清空 String submittedToken request.getParameter(token); String sessionToken (String) session.getAttribute(register_token_ activityId); if (submittedToken null || !submittedToken.equals(sessionToken)) { throw new BusinessException(請勿重復(fù)提交表單); } session.removeAttribute(register_token_ activityId);這個方案沒有引入外部依賴實現(xiàn)簡單效果很直接。當(dāng)然如果未來注冊量上來可以把Token換成一個唯一的業(yè)務(wù)流水號存儲在Redis里做分布式冪等那是另一套架構(gòu)的玩法了在這套JSPServlet項目里沒必要。6.2 文件上傳與相對路徑跨瀏覽器兼容的隱藏坑活動封面圖上傳也是個容易出問題的地方。我的上傳邏輯是前端用input typefile提交到Servlet后用Part接口獲取文件流保存到服務(wù)端的upload/目錄URL路徑存庫。這個流程看似簡單但有兩個隱藏坑。第一getRealPath()獲取的是當(dāng)前應(yīng)用部署的絕對路徑如果你直接存在這個路徑下重新部署war包后文件就丟了。穩(wěn)妥的辦法是配置一個獨立于應(yīng)用目錄的上傳存儲路徑比如/data/upload/在constants配置類里統(tǒng)一管理。這樣可以保證重啟、重新部署都不會丟文件。第二文件名處理。用戶上傳的文件名可能包含中文、空格、特殊字符如果直接用原始文件名存生成的URL在部分瀏覽器里會出現(xiàn)編碼問題。我的做法是用UUID生成新文件名擴(kuò)展名從原始文件名里提取并且做了白名單校驗只允許jpg/png/gif/webp。這樣既避免了中文文件名導(dǎo)致的URL編碼兼容性問題也防止了有人上傳jsp文件偽裝成圖片如果直接把上傳目錄暴露為Web可訪問會有很嚴(yán)重的安全風(fēng)險。String originalFilename part.getSubmittedFileName(); String ext originalFilename.substring(originalFilename.lastIndexOf(.) 1).toLowerCase(); if (!Arrays.asList(jpg, jpeg, png, gif, webp).contains(ext)) { throw new BusinessException(不支持的圖片格式 ext); } String newFilename UUID.randomUUID().toString().replace(-, ) . ext; part.write(uploadDir File.separator newFilename);同時上傳目錄要放在Web應(yīng)用的類路徑之外禁止直接通過URL訪問訪問圖片時經(jīng)過一個ImageServlet做權(quán)限校驗這個對安全要求高的場景特別重要。6.3 數(shù)據(jù)庫連接池參數(shù)的調(diào)優(yōu)思路JSPServlet項目如果不是用框架很多同學(xué)直接就是DriverManager.getConnection()這樣寫代碼簡單但并發(fā)上來后數(shù)據(jù)庫連接會頻繁創(chuàng)建銷毀性能很差。我用的Druid連接池配置如下DruidDataSource dataSource new DruidDataSource(); dataSource.setUrl(jdbc:mysql://localhost:3306/campus_activity?useUnicodetruecharacterEncodingutf8mb4serverTimezoneAsia/Shanghai); dataSource.setUsername(root); dataSource.setPassword(password); dataSource.setInitialSize(5); dataSource.setMinIdle(5); dataSource.setMaxActive(20); dataSource.setMaxWait(60000);初始化5個連接最小空閑5個最大活躍20個。這個參數(shù)是根據(jù)典型校園活動系統(tǒng)的并發(fā)量幾十到幾百人同時訪問配置的足夠了。如果活動規(guī)模特別大比如全校運動會報名可以適當(dāng)調(diào)高M(jìn)axActive但要注意數(shù)據(jù)庫服務(wù)器本身的連接數(shù)上限一般MySQL默認(rèn)151個留出些余量。連接池配置里另一個值得注意的點是removeAbandoned和removeAbandonedTimeout這兩個參數(shù)可以自動回收泄漏的連接。我有一次寫代碼忘了在finally里關(guān)閉Connection導(dǎo)致連接池被耗盡系統(tǒng)half天就卡死加上這兩個參數(shù)后至少能自動兜底。這是線上問題排查時能救命的配置加了沒壞處。6.4 部署路徑和URL編碼問題部署這套系統(tǒng)的時候我遇到過幾個讓人抓狂的問題這里統(tǒng)一說一下。一是URL編碼。Tomcat 8及以上默認(rèn)URI編碼是UTF-8但如果你用的老版本Tomcat或者前端請求里帶了中文參數(shù)比如搜索講座就很可能出現(xiàn)中文亂碼。解決辦法是給Connector加上URIEncodingUTF-8配置。還有一個容易被忽略的角落是request.setCharacterEncoding(UTF-8)只能對POST請求體生效對GET請求的查詢串無效必須靠URIEncoding來解決。二是JSP頁面頂部的pageEncoding和contentType。這兩個如果不一致頁面中文就是亂碼。統(tǒng)一設(shè)置成UTF-8是基本操作但檢查起來也最容易被忽略。三是跨瀏覽器兼容問題在部署環(huán)境里的表現(xiàn)有些機(jī)房電腦裝的瀏覽器版本很老對HTML5表單驗證required屬性等支持不好。我的方案是前端用JS做一套兼容的必填校驗HTML5屬性仍然保留但只作為增強手段。這樣即使瀏覽器不識別required也不會出現(xiàn)表單直接提交空值到后端的情況。后端同樣要校驗永遠(yuǎn)不要相信前端傳來的數(shù)據(jù)。6.5 演示數(shù)據(jù)與性能答辯演示時的加分項如果你做的是畢設(shè)最后演示環(huán)節(jié)一定要有足夠的數(shù)據(jù)支撐。我寫了一個DataInitializer啟動時檢測到活動表數(shù)據(jù)少于一定條數(shù)就自動生成20條模擬活動、100個模擬用戶、500條報名記錄、300條簽到記錄。這些模擬數(shù)據(jù)不是隨機(jī)瞎填的而是刻意構(gòu)造了符合統(tǒng)計規(guī)律的分布——比如不同分類的活動數(shù)量、不同活動的報名率有高有低、時間分布覆蓋最近一個學(xué)期。這樣在展示統(tǒng)計報表時圖表看起來非常自然不會出現(xiàn)所有活動報名率都100%或都0%這種假數(shù)據(jù)集感。生成模擬數(shù)據(jù)的代碼里我用Math.random()配合一個正態(tài)分布來模擬報名人數(shù)確保每個活動的報名數(shù)在max_people的30%-90%之間浮動。細(xì)節(jié)做到位演示效果會好很多。這個DataInitializer我設(shè)了一個開關(guān)上生產(chǎn)環(huán)境時直接關(guān)掉。7. 前端體驗優(yōu)化與無障礙設(shè)計容易被忽視但很加分的部分7.1 響應(yīng)式布局手機(jī)端訪問不能是災(zāi)難校園活動的一個重要使用場景是手機(jī)端。學(xué)生在地鐵上刷到感興趣的活動掏出手機(jī)就直接報名了。如果頁面布局是固定寬度980px手機(jī)上就會橫向滾動體驗很差。我用了流式柵格布局不依賴Bootstrap避免引入額外依賴只用CSS3的flex和media query搞定。.container { max-width: 1200px; margin: 0 auto; padding: 0 15px; } media (max-width: 768px) { .activity-card { width: 100%; margin-bottom: 15px; } .form-group input[typetext] { font-size: 16px; /* 防止iOS自動縮放 */ } }一個非常關(guān)鍵的移動端細(xì)節(jié)是input的font-size如果小于16pxiOS Safari會在聚焦時自動放大頁面用戶體驗很差。所以移動端樣式里所有可輸入元素的字號至少設(shè)置16px。這個細(xì)節(jié)不處理的話每次報名都要手動縮小頁面基本屬于勸退級體驗。7.2 語義化HTML與無障礙訪問我做前端頁面時用了比較嚴(yán)格的語義化標(biāo)簽header、nav、main、section、footer。這不僅對SEO友好也為使用屏幕閱讀器的用戶提供了清晰的頁面結(jié)構(gòu)。表單的每個輸入框都有對應(yīng)的label for...這樣點擊文字也能聚焦到輸入框同時對讀屏軟件友好。還有一個容易忽略的點是顏色對比度。我的主色調(diào)用的是深藍(lán)色#1a5276搭配白色文字正文用近黑色#2c3e50配白色背景對比度都能達(dá)到WCAG AA標(biāo)準(zhǔn)。這是考慮到可能有色弱或視力不佳的學(xué)生使用系統(tǒng)不能光顧著好看而犧牲可讀性。無障礙設(shè)計在國內(nèi)校園系統(tǒng)里很少被真正重視但真做起來之后評審印象會加分不少。7.3 操作反饋與錯誤提示別讓用戶干等管理系統(tǒng)的用戶往往不是技術(shù)人員操作出錯時如果只彈出一句英文錯誤信息或者干脆沒有反饋用戶只會覺得系統(tǒng)壞了。我設(shè)計了一套統(tǒng)一的前端提示機(jī)制所有表單提交采用AJAX異步方式成功/失敗都有明確的中文提示比如報名成功活動時間2025-03-20 14:00地點大學(xué)生活動中心101。失敗時不僅提示操作失敗還會具體說明原因比如該活動已滿員當(dāng)前已有80人報名該場地同一時間已有其他活動請更換時間或場地。這些具體、可執(zhí)行的提示信息正是把系統(tǒng)從能用提升到好用的關(guān)鍵。為了讓提示信息自然融入而不影響頁面布局我在頁面底部固定一個toast容器用CSS動畫實現(xiàn)淡入淡出這種細(xì)節(jié)處理其實也不復(fù)雜。注意錯誤提示信息一定要在后端Service層定義好返回統(tǒng)一結(jié)構(gòu)code message前端根據(jù)code渲染不同樣式。不要把SQL異常堆棧直接拋給用戶看既暴露細(xì)節(jié)又不友好。7.4 加載狀態(tài)與空數(shù)據(jù)狀態(tài)用戶點擊查詢活動列表后如果網(wǎng)絡(luò)慢頁面可能有兩三秒沒反應(yīng)用戶會以為出bug了。我加了簡單的loading提示按鈕點擊后變成查詢中...并禁用請求返回后恢復(fù)。這個交互是基本盤??諗?shù)據(jù)狀態(tài)也要設(shè)計。比如學(xué)生沒有任何報名記錄時頁面不是白茫茫一片而是顯示你還沒有報過任何活動去看看有哪些精彩活動吧配一個跳轉(zhuǎn)鏈接。組織者沒有活動列表時顯示你還沒有創(chuàng)建過活動點此創(chuàng)建第一個活動。這些細(xì)節(jié)看著小但真實用戶使用時的困惑感會大幅降低。8. 常見問題排查思路我踩過的那些坑8.1 502/500錯誤與數(shù)據(jù)庫連接的關(guān)聯(lián)排查系統(tǒng)上線后我遇到過一個很典型的問題運行幾天后部分頁面隨機(jī)出現(xiàn)500錯誤Tomcat日志里報Connection is not available, request timed out。一開始以為是并發(fā)太高把MaxActive調(diào)高到50還是不行。后來加了連接池監(jiān)控才發(fā)現(xiàn)有個查詢接口的Connection在異常分支里沒有歸還日積月累把連接池耗盡了。排查思路供參考出現(xiàn)連接池耗盡時用show processlist看數(shù)據(jù)庫當(dāng)前活躍連接找到Source IP和對應(yīng)的SQL再反查代碼里對應(yīng)SQL所在的DAO方法檢查是否有try-with-resources或finally塊兜底關(guān)閉Connection。我后來給所有DAO都改成了try-with-resources寫法同時開啟了Druid的removeAbandonedtrue和removeAbandonedTimeout180這樣即使未來再出泄漏連接也會在3分鐘后被自動回收不會把整個池子拖死。這種自動回收機(jī)制屬于兜底方案根源上還是要保證每個連接都手動關(guān)閉。8.2 中文亂碼的三層排查鏈路中文亂碼是Java Web項目最高頻的問題之一。我的排查鏈路分三層第一層頁面顯示亂碼。檢查JSP文件的pageEncoding是否UTF-8response的Content-Type是否text/html;charsetUTF-8。第二層請求參數(shù)亂碼。POST請求檢查request.setCharacterEncoding(UTF-8)是否在getParameter之前調(diào)用GET請求檢查Tomcat的URIEncoding配置。第三層數(shù)據(jù)庫存取亂碼。檢查MySQL連接URL是否帶characterEncodingutf8檢查表字段是不是utf8mb4檢查MySQL服務(wù)端character_set_server配置。按照這三層順序排查亂碼問題基本能在5分鐘內(nèi)定位。我遇到過最隱蔽的情況是MySQL連接串漏了characterEncoding頁面顯示正常但數(shù)據(jù)庫里存的是亂碼。這種問題是看起來一切正常數(shù)據(jù)存進(jìn)去就壞了最難發(fā)現(xiàn)。8.3 403/404問題的文件路徑陷阱部署到Tomcat后有同學(xué)反映某些頁面404。排查后發(fā)現(xiàn)是前端引用的CSS和JS路徑寫錯了。我用的項目結(jié)構(gòu)是webapp/ ├── static/ │ ├── css/ │ ├── js/ │ └── images/ ├── WEB-INF/ │ ├── jsp/ │ └── web.xml └── index.jspJSP頁面放在WEB-INF/jsp目錄下外部不能直接訪問通過Servlet forward過去這樣可以強制所有請求經(jīng)過控制層安全性更好。但這也帶來路徑問題WEB-INF下頁面的相對路徑基準(zhǔn)和外部訪問路徑不一致CSS引用的static/css/common.css必須用絕對路徑${pageContext.request.contextPath}/static/css/common.css不能寫相對路徑。在JSP里統(tǒng)一用c:set varctx value${pageContext.request.contextPath}/每個鏈接都加上這個前綴。這是JSP開發(fā)的基本功但確實是踩坑高發(fā)區(qū)。8.4 活動狀態(tài)自動流轉(zhuǎn)的實現(xiàn)定時任務(wù)還是懶更新活動到了開始時間狀態(tài)要變成進(jìn)行中到了結(jié)束時間要變成已結(jié)束。如果完全靠用戶操作觸發(fā)組織者忘了點結(jié)束活動狀態(tài)就一致性不對了。我用了最簡單的方案查詢時動態(tài)計算。在ActivityService的查詢方法里根據(jù)當(dāng)前時間和活動的start_time、end_time動態(tài)計算出當(dāng)前實際狀態(tài)而不依賴表中status字段。這樣即使status字段是舊的展示給用戶的狀態(tài)也是準(zhǔn)確的。同時配置了一個定時任務(wù)每小時跑一次把到達(dá)時間點的活動status字段批量修正保證數(shù)據(jù)庫里的狀態(tài)不低于業(yè)務(wù)要求。-- 每小時執(zhí)行一次將已過結(jié)束時間的活動置為已結(jié)束 UPDATE t_activity SET status 4 WHERE status 3 AND end_time NOW();這個方案在數(shù)據(jù)量不大時完全夠用而且實現(xiàn)成本極低。不需要引入Quartz或Spring Task一個簡單的ScheduledExecutorService就夠了。如果后續(xù)數(shù)據(jù)量大了、活動數(shù)量多再考慮用Quartz管理更復(fù)雜的調(diào)度邏輯。9. 這個系統(tǒng)能不能直接用在真實的校園場景里9.1 落地效果與真實反饋這個系統(tǒng)在某個校級社團(tuán)做了一學(xué)期試運行覆蓋了大約30場活動、近2000人次報名。實際運行下來的數(shù)據(jù)是報名信息統(tǒng)計時間從原來的每次2-3小時縮短到即時導(dǎo)出活動沖突情況出現(xiàn)了2次都是場地重疊系統(tǒng)在創(chuàng)建時提示并攔截了1次另1次是場地方臨時改動但沒更新系統(tǒng)簽到效率從平均每人5秒降到1.5秒左右。最直接的效果是學(xué)期末做第二課堂學(xué)分統(tǒng)計時以前要翻聊天記錄和紙質(zhì)表現(xiàn)在從系統(tǒng)里導(dǎo)出一次搞定出錯率從原來的人工比對5%降到接近0。從使用反饋來看學(xué)生側(cè)最受歡迎的是我的活動日歷和報名成功提醒兩個功能前者能按日期看到自己報名了哪些活動避免時間撞車后者在活動開始前2小時自動給用戶發(fā)站內(nèi)信提醒。組織者側(cè)最受歡迎的是數(shù)據(jù)導(dǎo)出一鍵導(dǎo)出報名名單和簽到名單省去了大量手工勞動。管理員最認(rèn)可的是審核鏈路和統(tǒng)計報表活動合規(guī)性和學(xué)生參與度一查便知。9.2 系統(tǒng)的局限性當(dāng)然這個系統(tǒng)也有明顯的局限坦白說無消息推送目前提醒靠站內(nèi)信和頁面橫幅不能直接推送微信或短信。校園場景里很多學(xué)生不會主動登錄系統(tǒng)看消息所以活動通知還是需要配合微信群二次觸達(dá)。審核依賴人工內(nèi)容審核目前是管理員逐條審核如果活動量特別大人工審核會成為瓶頸??梢詳U(kuò)展違規(guī)關(guān)鍵詞庫甚至引入文本分類模型做預(yù)審。無第三方登錄沒有對接學(xué)校的統(tǒng)一身份認(rèn)證如CAS用戶需要單獨注冊賬號。如果學(xué)校有統(tǒng)一的認(rèn)證系統(tǒng)這是必要改造。無移動端獨立App手機(jī)瀏覽器訪問體驗?zāi)芙邮艿皇窃鶤pp的體驗。如果要做校園App集成可以把它改造成RESTful API后端。這些局限不是bug而是項目邊界的選擇。做畢業(yè)設(shè)計時你可以根據(jù)自己的進(jìn)度合理取舍比如把微信消息推送或?qū)訉W(xué)校統(tǒng)一身份認(rèn)證作為一個獨立的亮點模塊來體現(xiàn)增量設(shè)計能力。9.3 后續(xù)擴(kuò)展方向從活動管理到第二課堂當(dāng)前系統(tǒng)管的是活動全流程但它的數(shù)據(jù)天然具有第二課堂成績單的基因。每次報名、簽到其實就是一個學(xué)生在某個領(lǐng)域的參與記錄。沿著這個方向擴(kuò)展可以拆出一個獨立的第二課堂學(xué)分管理模塊根據(jù)活動分類映射到不同的學(xué)分規(guī)則思想成長、實踐實習(xí)、志愿公益、創(chuàng)新創(chuàng)業(yè)、文體活動然后自動生成每個學(xué)生的第二課堂成績單。這是一個很自然的演進(jìn)方向不用改底層表結(jié)構(gòu)只需要在t_activity表增加category映射學(xué)分規(guī)則再增加一個t_credit_record表記錄每個學(xué)生參與活動獲得的學(xué)分就能實現(xiàn)。數(shù)據(jù)已經(jīng)在系統(tǒng)里了缺的只是上層應(yīng)用。從我做過的項目經(jīng)驗看這類系統(tǒng)最大的價值不是某個頁面的功能而是日積月累沉淀下來的活動數(shù)據(jù)——有了數(shù)據(jù)很多管理需求和分析需求都能從上面長出來。最后再分享幾個實操層面的心得這個系統(tǒng)從需求梳理到上線運行我用了大約三周業(yè)余時間。如果只挑最值得說的經(jīng)驗大概是這么幾條第一表結(jié)構(gòu)設(shè)計要多花時間。我第一版活動表沒有單獨拆審核表后來加審核需求時發(fā)現(xiàn)要改表、改代碼、改頁面來回折騰了兩天。如果一開始就按業(yè)務(wù)動作獨立建表的原則設(shè)計后面會順利很多。數(shù)據(jù)庫字段名和注釋一定要寫清楚過兩周再看自己代碼注釋就是最好的回憶。第二不要迷信框架先把Servlet JSP的邏輯理清楚。這套技術(shù)??雌饋砝系珵g覽器發(fā)請求 → Servlet接收 → Service處理 → DAO訪問數(shù)據(jù)庫 → 響應(yīng)回頁面這個鏈路是Web開發(fā)永遠(yuǎn)的內(nèi)功底座。把這一層理解透了之后上Spring Boot、MyBatis其實就是換個殼核心思想是相通的。而且這套項目做完你對HTTP狀態(tài)碼、Session生命周期、數(shù)據(jù)庫事務(wù)這些概念的掌握會非常扎實這在面試時是實打?qū)嵉膬?yōu)勢。第三部署前一定要做跨瀏覽器和移動端回歸測試。我吃過虧的就是在Chrome上開發(fā)一切正常演示時用了機(jī)房Firefox老版本日期控件直接變成純文本框整個活動發(fā)布流程沒法走通。后來我把所有依賴瀏覽器特性的交互都做了降級方案再也沒出過這種現(xiàn)場翻車的狀況。建議至少準(zhǔn)備三臺不同內(nèi)核的瀏覽器Chromium系、Firefox系、Safari系過一遍核心流程花的時間不多但能避開大量尷尬。第四日志打得好排查問題快一倍。我在Service層每個關(guān)鍵操作都打了日志入?yún)?、出參、耗時線上出問題時通過日志定位到具體方法基本是分鐘級的事。如果一直不做日志埋點問題反饋到你這兒你連從哪兒看起都不知道。日志的粒度要適中太細(xì)會產(chǎn)生大量無用信息太粗則查不到線索核心業(yè)務(wù)操作建議至少打一條INFO日志記錄關(guān)鍵業(yè)務(wù)參數(shù)和結(jié)果。最后關(guān)于代碼質(zhì)量我強烈建議把常量、配置、SQL語句都?xì)w類管理不要散落在各個Servlet里。一個Constants類一個DBConfig類一個SQLConst類雖然看起來繁瑣但項目代碼量越寫越大之后你就會知道這些冗余有多重要。如果這篇文章對你有幫助你可以直接照著這個思路搭建你自己的校園活動管理系統(tǒng)歡迎在評論區(qū)交流你在開發(fā)中遇到的問題——尤其是那些讓你熬夜排查的bug我很想知道你最后是怎么解決的。說到底做管理系統(tǒng)這件事最有價值的部分不在于代碼本身而在于你對業(yè)務(wù)流程的理解有多深對用戶需求看得有多透。真正把業(yè)務(wù)邏輯想明白了技術(shù)實現(xiàn)反而只是水到渠成的事。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
伊人五月天婷婷| 五月丁香成人| 色五月丁香91| 久久性爱视频网站| 丁香五月婷婷亚洲综合精品| 99爱在线免费视频| 99热这里精| 天天色天天色天天色天天色天天色| 中文字幕丰满孑伦无码专区| 五月天六月丁香| 91久久久久久| 色五狠狠| 国产在线黄色| 少妇AB又爽又紧无码网站| renre人人操国产超碰在线| 亚洲精品国产A久久久久久| 五月丁香网中文字幕| 国产午夜伦鲁鲁| 人人干Av| www99久久| 另类专区在线观看| 91操色| 五月天社区| 操嫩逼电影| chaopeng在线人人| 婷婷久久五月天| 99国产小视频2013| 91夫妻视频| 色色AV色色色东莞| 日本a片网址| 日日做A爰片久久毛片A片英语| 丁香激激情网| 综合激情在线| 日韩AV大全| WWW.五月天9999| 综合色、色综合| 五月天婷婷影院影院观看| 色色丁香五月天| 婷婷亚洲日本| 中文字幕av网站| av在线观看网站| 五月婷六月综合在线观看| 久久97久久99久久综合欧美| 97丁香五月| 99热只有精品在线播放| 99人人干人人操| WWW久久久| 亚洲欧洲自拍图片专区五月天| 亚洲一区二区色图-亚洲精品国产精品乱码-成人AV | 婷婷社区五月天| 91啪级电影| 欧美色色日韩| 亚洲无AV在线中文字幕| 无码动漫av| 狠狠色五月激情| 欧美成综合在线观看| 九九aV| 最新亚洲色色网| www五月天com| 亚洲久久天堂| 久热无码| 91一起操| 五月婷婷导航| 五月婷婷开心亚州在线| 亚洲夜五月| 人人妻人人澡人人爽| 热久久这里只有精品| 五月婷婷激情综合网 | 五月天社区狠狠| 色天堂在线| 一本大道嫩草AV无码专区| 丁香六月激情| 99精品免费欧美小视频 | 色色色网站| 久久人妻伦理| 丁香激激情网| 色综合播放| 久久久99日本大片| 色婷婷色丁香色欲av| 丁香五月伊人| 久久精典| 台湾无码A片一区二区| 五月婷婷成人w| 九月婷婷激情| 激情丁香五月天图片| 中文字幕按摩做爰| 丁香六月啪| 国产.亚洲.欧洲视频在线| 91精品国产综合久久密臀| 玖热精品综合视频| 啪啪啪大香蕉| 久久久91| 色情五月天丁香社区| 99ER热精品视频| 男女99免费视频| 亚美欧色影院| 婷婷五月天堂一本在线| 玖玖资源天天无码| 色婷婷色人人射| 丁香香五月激情免费视频| 在线观看免费狠狠色丁香香综合 | 五月丁香激情综合| 色婷婷丁香综合中文字幕| 开心五月婷婷伊人| 久久五月热| 亚洲欧洲中文日韩久久AV乱码| 五月天婷婷免费| 婷婷无码视频| 婷婷久久亚洲| 丁香六月欧美| 狠狠干综合| 色欲AV导航| 久久99色色| 思思99精品视频| 色婷婷综合视频| 五月综合丁香婷婷| 4399在线日本A片| 大香蕉七区| www.久操| 草榴视频网| 综合超碰熟| 91操女| 色级停停| 99久久人人| 99热网精品| 99热亚洲| 99在线精品免费视频| 亚洲综合五月天| 日本色婷婷| 久久狠狠干| 成人一级片| 久操干| 玖玖激情网| 狠狠 久久| 亚洲激情五月| 97人人看| 婷婷久久婷婷色五月| 天天天久久久| 狠狠狠婷婷五月综合| 丁香六月婷婷激情综合| 久久五月婷综合网| 九九热99热| 99色亚洲| 在线看片av| 99在线观看视频| 亚洲在线操| 日韩视频99| 岛国av网站| 五月婷婷激情网| 99热99色| 北条麻妃伊人| 色婷婷久久天天性爱| 欧美人人操| 久久这里只有精品久久| 色婷婷丁香特级性爱视频| 米奇影视资源777狠狠色婷婷五月天激情网| 99热精国产这里只有精品| 噜噜噜噜噜日本视频| 五月丁香婷婷成人伊人网| 丁香婷停五月激情综合深爱| 亚洲热视频在线| 99久久久久久www| 色狠狠色| 五月丁香激情综合| 91熟妇大香蕉| 国产91视频| 可以免费看av网站| 情趣视频66| 五月精品| 天天草天天爽| 大香蕉太香蕉视频97| 停停五月色宗合| 丁香六月婷婷综合| 精品久久久久久久久久久久人妻| 丁香婷婷色九月| 天天干狠狠| 国产成人精品一区二三区熟女在线 | 99久在线精品99re8热| 婷婷精品性性性性性性性| 欧美成人性爱网| 激情文学五月丁香六月婷婷 | 丁香九月激情| 狠狠色精品综合| 成年人最刺激的综合网| 欧美性色A片免费免费观看的| 五他月天啪啪啪| 久久婷婷成人| 99精品无码网站| 国产精品视频免费看| 啪啪一区| 人妻中文字幕精品| 激情伊人五月婷婷久久| 久9热视频| 69精品人人人人| 久操热线| 激情五月天的婷婷| 婷婷色Av| 超碰99在线观看| 去色色五月天| 九九色99| 嫩草AV久久伊人妇女超级A| 国产性爱一级| 色色色国产| 亚洲综合九九| 婷婷综合偷拍| 色五月婷婷开心| 五月 激情视频| 9久热精品在线视频| 免费啪啪亚州视频| 久久人妻视步| 直接看的av| 九九热内射| 特黄三级片| 五月丁香无码| 狠狠爱综合网| 丁香五月婷婷黑人妻黄色电影院| 99re8在这里只有精品| 久久久久人妻精品| 亚洲AV成人在线| 天天色激情| 五月天综合网| jiujiu热在线视频| 日韩狠狠色| 人人操9| 思思热久久阴99| 色综合伊人网| 色婷婷四虎| 这里只有视频精品| 99热这里是精品| 99干在线| 影音先锋女人av鲁色资源网小说免费| 在线成人网站| 97色热| peg 2区三区四区的| 99视频只有这里精品| 亚洲中文字幕av| 日韩精品在线观看9| 日韩操人| 婷婷色五月激情| 色色色com| 99re热| 91久久婷婷| 久久视频婷婷| 婷婷五月精品中文字幕| 超碰免费人人肏| 就爱啪啪婷婷| 麻豆AV一区二区三区| 色婷婷视频| 丁香婷婷色色| 人人综合久| 综合一区二区三区| 黄色激情久久| 亚洲无码另类| 99ri精品| 久久亚洲激情五码| 色波激情五月天| 啪啪激情网| 在线观看av网站| 996er热| 五月婷中文娱乐综合| 婷婷五月色综合| 久久色六月| 五月丁香婷婷六月天| 五月丁香啪啪网| 深爱婷婷基地| 开心五月激情网| 永久的网站AAAA | 国产精品美女久久久久AV超清| 激情五月天婷婷直播| 久操大香蕉| 色呦呦美女| 亚洲综合草草| 99re熱| 色五月综合| 91五月天| 久久精品国产AV一区二区三区 | 婷婷五月天成人视频| 久久99色色| 色图亚洲91| 99成人精品六| 久婷婷久草| 狠狠色噜噜色狠狠狠综合久久成人波| 激情婷婷综合网| www.婷婷五月| 91日本在线| 五月天桃色深爱网| 色 五月 天 婷婷 丁香 九月| 婷婷五月天av| 久久九区| 成人片黄网站色大片免费毛片| 婷婷六月丁香激情综合| 色色色九九九五月婷婷| 天天综合色丁香| 操操国产| 国产精产国品一二三在观看| 99久久九九| 狠狠色综合网站久久久久| 激情五月综合亚洲另类| www.激情.com.| 五月丁香六月激情| 久久人妻www| www.99热这里精品| 91久久久久久久久18| 天天爽人人爽| 婷婷六月综合基地| 婷婷色在线| 狠狠狠五月婷婷六月丁香| 色婷小说| 五月丁香婷婷啪啪| 亚洲精品性色| 99色在线观看视频| 久久综合九九| 色日本五月天| 这里都是精品99| 婷婷五月天 丁香五月天 裸体| 婷婷五月激情小说| 五月丁香五月丁香| 99精品偷拍视频| 99精在线| 五月婷天天搞视频| 激情色中文| 97操碰在线97| 亚洲高清在线| 国产成人亚洲综合A∨婷婷| 婷香五月| Av在线不卡一区| 99ri视频| 久久五月天色婷婷| 99精彩视频网站在线| 成功精品影院| 色五月aV| 九九自拍网| 国产全是老熟女太爽了| 亚洲AV网站在线观看| 激情丁香婷婷五月天| 色域五月丁香| 99热精品在线| 天天干天天拍| 天天做 天天爱| www久久久久久久97| 国产这里只有精品| 夜夜爱伊人| tingtingzonghewang| 色婷天天| 午夜福利成人AV91| 国产肥白大熟妇BBBB视频| 九九热免费视频| 婷婷六月丁香1| 先锋资源婷婷| 欧美日韩国产一二区| 久久香蕉网| 色女伊人| 丁香五月天欧美| 亚洲另类婷婷综合| 婷婷丁香综合| 99热综合在线观看| 五月婷视频| 婷婷五月丁香色综合| 五月天伊人日日噜影片AV| 99热主页日本| 超碰97免费在线| 色婷婷六月| 99色在线视频| 五月婷婷,狠狠操| 影音先锋人妻出差| 日本一级一级一级一级| 九九综舍久久| 色玖玖网| 色综合中文综合网| 狠狠色 综合色区| 人人草人人爱| 很很干天天干| www.激情五月天。com| 性爱网六月丁香| 国自产拍偷拍精品啪啪一区二区| 能看的AV| 丁香五月激情网| 99在线免费视频| 五月丁香啪啪伦理电影| 婷婷色Av| 天堂婷婷丁香六月网| 色婷婷香蕉| 丁香五婷| 99re热在线视频观看| 日日夜夜亚洲一区| 久操香蕉| 丁香av网| 国产高清视频91九九九久久久| 少妇人妻丰满做爰XXX| 色色色无码| 亚洲成人在线免费| 成人网址在线观看| 久久综合五月天| 91狠狠综合久久| 超碰免费人妻| 五月天激情四射| 色婷婷狠| 六月综合婷婷开心伊人| 亚洲综合99| 狠狠香蕉| 婷婷久久五月天| 亚洲色视频| 色99在线观看| 婷婷久久五月天丁香| 性爱久久| 丁香大香蕉| 色婷婷激情| 婷婷中文无码| 九九热AV| 欧美精品中文字幕亚洲专区| 9热网站| 国产五月视频| 69人人操人人爽| 激情婷| 99热 在线播放| 国产黄色av| 久久婷婷五月综合色天| 色婷久| AV成人在线播放| 手机旧版看人妻1025| 五月天婷婷伊人| 日本啪啪网| 67194成I人在线观看线路1| 久久性视频| 日本熟女视频一区二区| 色在线五月天免费| 任你搞在线观看视频| 无码一区二区三区四区五区91c| 五月花激情网| 色玖玖导航| 久久网日本| 婷婷丁五月| 五月婷婷内射网| 色婷婷丁香AV综合| 色五月六月| 久久最新色| 97干在线视频| 任你躁XXXXX麻豆精品| YW无码| 玖玖婷婷精品| 婷婷激情伍月网| 五月激情另类| 五月色影院| 国产在线黄色| 伊人激情AV一区二区三区| 亚洲AV影片在线观看| 婷婷影院欧美| 婷婷丁香人妻天久久| 青青草护士中出内射-欧美电影在线天堂新版 | 成人做爰A片免费看视频| www.wuyuetian啪啪| 欧美色色日韩| 天天日天天添| WWW五月| 亚洲av成人在线| 五月婷婷基地| 天综合日日夜综合7799| av中文在线| 精品皮股午夜AV| 97碰人人操| www.夜夜操| 内射 无码 伊人| 色99自拍| 99爱视频免费看| 成人av在线网站| 成人精品视频99在线观看免费| 久久色吧| 久久综合干| www,五月天激情| 亚洲激情在线| 亚艹艹| 亚洲热久久| 色色综合网。| 九九热只有这里精品| 激情五月综合网最新| 国产成人AV在线| 5月丁香综合图区| 色久九| 丁香五月婷婷俺也要去| 久久综合干| 91热视频| 久久久久婷婷五月热综合| 婷婷五月天欧美| 丁香婷婷激情| 九月av| 狠狠人妻久久久久久综合丁香| 综合网激情| AⅤ网站在线看| 久久久激情视频| 97五月天婷婷| 亚洲综合五月天| 亚洲99在线| 欧美日本一区二区三区| 天天操比比| 丁香花操逼| 亚洲视频色色| 九九色婷婷| 黄色短视频在线观看| 很很操96| 丁香五月婷婷色| 丁香熟女乱| 色狠狠综合网| 激情五月天综合网| 日本在线视频www色| 色五月婷婷久久| 亚洲乱码日产精品BD| 婷婷射图| 激情综合五月婷婷丁香| 久久婷婷色综合老司机| 另类国产综合| 免费无码毛片一区二区A片| 婷婷婷久久久| 人人操av| 婷婷五月天成人| 伊人久久丁香狠狠婷婷综合香蕉| 久久99这里| 99热免费精品| 日韩超碰在线| 天天天天干| 草榴视频黄色网| 99精品视频在线6| 五月婷婷综合网| 97五月天婷婷综合激情网| 丁香五月综合亚洲| 狠狠爱深色婷婷综合| av在线超清中文| 依人大香蕉| 亚洲婷婷五月| 亚洲色热| 69精品人人人人人人| 99热这里只有精品18| 99年操人人爽| 婷婷五月天手机版视频| 无码少妇高潮喷水A片免费| 色色综合日韩| 免费无码毛片一区二区A片| 国产欧美日韩性爱| 久色视频| 这里只有视频精品| 四虎国产精品永久在线国在线| 五月丁了香蕉综合| 五月天婷婷色| 99色啊| 嫩BBB槡BBBB搡BBBB| 另类的婷婷| 人妻啪啪啪| 婷婷丁香五月天综合AV| 91丨九色丨43老版熟女| 女人天堂av| 性做久久久久久久免费看| 激情五月伊人婷婷| 婷婷五月激情五月激情| 天天在线天天综合网色| 久久全意婷婷| 99热99热在线| 久久这里只有精品视频15| 婷婷开心激情五月激情网| 色色色丁香| 久久偷拍综合五月天| 久热在线观看视频9| www.天天干| 久久狠狠干| 精品久久99码| 五月天 综合 在线| 天天草天天摸| 中文字幕97超级碰| www.99视频| 秋霞黄色一级久久| 色色色九九九五月婷婷| 伊人深爱综合| 国产操肏网站| 91碰碰| 日日色五月天| 五月刺激丁香月综合| 五月色影院| 色婷婷久久天天性爱| XX色综合| 五月综合777| 99精品久久久久久| 婷丁香五月天| 欧美va国产va| 久久爱综合| 操操天堂| 成人久久天天x资源站| 91九九九九九九| 99在线精品视频| 六月丁香久久| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 九九这里是免费的视频5| 久热久| 中国女人内射6XXXXX| 亚洲激情免费视频观看| 久久性视频| 超碰亚洲欧美| 色婷婷偷拍| 久久99最新| 成人小说色图婷婷五月| 色婷婷小说| 色婷婷丁香五月色综合网| 九色激情网| 99久久网站| 99久久大片| 97九色| 欧美亚洲色色色色| 天天肏在线观看| 激情WWW| 色欧美影院| 色婷婷内射| 激情五月天福利| 亚洲色另类| 九九99一区| 五月总合激情网| 日本色色色色色色色色一色二色| 久久婷婷五月综合伊人| 我要射综合| 无码人妻电影| 色婷婷综合久久| 九九99免费视频| 伊人久久五月天| 91热在线| 欧美一线视频| 中文字幕无码人妻少妇免费视频| 性生活视频98791| 色婷婷五月天成人网| a九九热www| 夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂亚洲亚洲亚洲亚洲亚洲亚洲亚洲亚洲色 | 欧美日韩成卜| 五月丁香六月欧美综合网站| 一二三区视频韩国| 五月天婷婷色色| 91主播在线| 91碰碰碰| 五月婷婷视频在线观看| 噜噜噜精品欧美成人在线观看| 任你爽免费视频| av电影在线播放| 国产欧美日韩综合精品一区二区| 五月色婷婷中文字幕| 思思久久青草热| 国产亚洲精品人人| 另类亚洲2| 91综合视频在线| 国产精品激情AV久久久青桔| 欧美人妻一区二区| 久久久五月五丁香| 四色五月婷婷| 婷婷五月丁综合| sS丁香五月婷婷| 97碰碰视频在线观看| 伊人激情网| A片试看120分钟做受图片| 99热这| 国产 亚洲 在线| 天天爱综合网| 婷婷日日夜夜| 色开心五月丁香| www。久久久久一b。Cc| 色婷婷影视| 色婷婷丁香五月| 国产操碰| 色综合九九色综合88| 无码任你操| 亚洲色综合性| 五月激情网综合| 激情五月天之六月婷婷| 琪琪秋霞| 香蕉久久国产AV一区二区| 久久性操| 色呦呦美女| 天天操天天曰天天射| 久久9RE热视频精品98| 99精品丰满| 丁香五月婷婷av影院| 香蕉久久av一区二区三区| 日本狠狠干| 婷婷99| 激情婷婷丁香| 天天综合精品| 能看的AV| 日本不卡高字幕在线2019| 一起草av| 无码 av电影| 中文字幕乱码亚洲精品一区| 色噜噜狠狠色综无码久久合欧美| 日本精品人妻无码77777| 性按摩玩人妻HD中文字幕| 日本人妻伦在线中文字幕| 五月天激情婷婷| 激情婷婷丁香| 国产精品国产成人国产三级 | 国产无遮挡又黄又爽免费网站| 精品夜夜澡人妻无码AV| 国产乱子轮XXX农村| 人与禽A片啪啪| 丁香婷婷激情网站| 色九九一二| 亚洲欧洲小视频9| 啪色综合| 久久久久久久久久8888| 人人爽人人射-美女久久久久久久久久-成人AV| 久热中文字幕| 激情五月深爱五月| 婷婷五月天伦理| 婷婷五月丁香成人| 亚洲另类视频| 久热超碰91| 第四色激情网| 99色在线| 久久性爱激情| 丁香九月婷| 婷婷综合激情| 婷婷五月天av小说| 亚洲熟女乱色综合亚洲网站| 夜夜 操无码| 色播五月天天| 婷婷五月天亚洲综合| 亚洲日日操| 狠狠五月激情丁香六月| 五月婷婷色| 日本91在线播放| 婷婷丁香综合| 99这里有精品视频3| 激情五月婷婷在线区| 天天操夜夜橾| 色色射| 天天草女人| 婷婷五月天丁香激情| 在线99热| 五区毛片七区毛片| 97婷婷丁香| 另类小说五月天| 激情色情五月天| 91爱操| 色青青视频| 久久久久网站| 亚洲熟妇AV乱码在线观看| 日韩小视频在线99| 欧美精品999| 亚洲VA在线| 在线观看免费狠狠色丁香香综合| 欧美这里只有精品| 丁香五月天激情四射网络不好 | 免费看成人AA片无码视频吃奶| 中文字幕人妻AV| 色色激情五月| 6080av| 婷婷五月影院| 国产成人精品亚洲线观看| 99热69| 天天免费成年人视频| 天天久| 精品亚洲国产成AV人片传媒| www久久久久久| www.激情五月天.com| 日日夜夜狠狠| 免费观看欧美成人AA片爱我多深| 丁香五月婷婷天堂大香蕉| 久久er视频6| 99视频精品在线| 99无码| 丁香五月婷婷亚洲另类| 五月激情偷拍婷婷| 操操人人| 91在线看片| 日韩抽插操逼| 99精品视频偷拍| 五月婷亚洲精品| 五月婷婷色| 日本一毛片| 色婷亚洲| 性做久久久久久久免费看| 1024成人在线观看| 婷婷五月天激情AV影院| 婷婷五月天AV| 99色中文| 五月天综合在线观看| 欧亚成人A片一区二区| 狼人狠狠操| 激情小说婷婷五月| 色色丁香| 91干| 激情综合网激情五月天| 狠狠色综合无线观看| 久热这里只有精品在线观看| 天天操加勒比| 9在线9在线婷婷在线国产| 5月婷婷激情6月| 亭亭五月丁香五月天激情| 五月丁香综合影院| 婷婷十月激情综合网| 黄桃AV无码免费一区二区三区| www色色com| 五月婷婷丁香五月 | 中文av网| 丰满人妻妇伦又伦精品国产| 涩涩五月天综合| 久久久91| pom538精品视频| 丁香六月五月天| 综合色在线| 成人欧美一区二区三区在线观看| 五月天婷婷丁香| 91久久综合亚洲鲁鲁五月天| 泰州成人视频| 超碰99热在线观看| 激情小说 五月天| 亚洲情综合五月天| 婷婷五月天激情综合婷婷五月天激情综合| 大香蕉啪啪网| 久久总和99| 99热碰碰| 成人网站av免费网站推荐| 色情五月停停丁香| 色爱爱综合网| 婷婷丁香五月综合激情小说| 成人在线观看精品| 99在线国| 久久婷婷七月丁香| 新99色色色色色色| 亚洲乱码日产精品BD| 色噜噜狠狠色综合伊人| 丁香五月中文字幕| 婷婷涩五月| 操碰99| 免费操超碰| 色偷偷综合| 超碰伊人碰婷婷五月| 天天色天天操天天射| 久热在线观看视频9| 久久99激情丁香婷婷小说网| 啪精品| 丁香六月婷婷久久综合| 超碰99资源站| 色色色999| 五月天激情影院| 色色五月天丁香| 操操操操操操婷婷五月天| 六月丁香激情网| 99热综合在线| 成人做爰A片免费看视频| 亚洲熟妇AV综合网五月丁香伊人| 99精品偷自拍| 久久精品视频9| 六月份天丁香婷婷| 色欲婷婷五月天丁香| 婷婷色丁香五月| 高清成人综合| 五月婷网| 丁香五月综合激情久久潮喷| 欧美性生交XXXXX无码小说| 3p日韩网站视频| 牛牛澡牛牛爽| 激情开心五月天| 亚洲第一成人无码A片| 五月丁香色| 精品99爱免费视频在线观看| 丁香五月天91| 俺去也婷婷| 五月丁香大香蕉| 欧美在线| 无码人妻一区二区三区四区| 激情五月瑟瑟| 国产 亚洲 在线| 丁香久色| 亚洲国产成人AV在线| 99色五月| 丁香五月日啪| 大鸡巴伊人网| 丁香九九九九| 婷婷五月AA五月在线| 狠狠狠狠狠狠草| 色五月女| 99精品热视频只有精品10| 麻豆AV一区二区三区| 国产激情综合五月久久| 色999;丁香五月| 国产乱子轮XXX农村| 日日操夜夜撸| 6月丁香婷婷| 日韩乱轮AV| 另类图片激情五月| 色色色精品无码区| 国成人网| 久久色情| 久久66精品| aa久久| 97人妻超级碰碰碰碰碰| 六月丁香影院| 久久婷婷青草五月天| 婷婷丁香日韩五月| 五月婷婷啪| 九九这里精品| 中文字幕AV网址| 国产看真人毛片爱做A片| 亚洲综合丁香五月天| 色色欧美色色色| 操逼三区| 婷婷五月天com| 九九热re99re6在线精品| 婷婷丁香六月| 五月天开心网| 春色激情第四色| 久久婷婷五月综合精品蜜芽| 91操人| 成人va在线播放| 99人这里只有精品| 日本一级一片免费视频| 99久久九九视频| 五月丁香久久久久| 天天天天色天天天天天干| 五月香婷婷| 亚洲视频1区| 亚洲精品99| g00d人体西西| 色爆五月| 91久久婷婷| 无码区婷婷五月花开| 99热这里只有精品21| 91在线看免费 九九九九| 亚洲网综合在线| 久久曰曰| 人人摸人人干| 六月婷婷狠狠| 久碰久操| 99久免费视频| 久久AAAA片一区二区| 性爱综合网| 五月天婷婷爱| 天天综合天天玩夜夜玩天天玩夜夜玩 | 国产人妻777人伦精品HD| 激情久久久久久久久| 色久综合天天做视频| 五月天激情图片| 久久狠婷婷| 丁香五月综合网| 99热这里只有精品在线观看| WWW.桔色成人.COM| 中文字幕婷婷五月天在线观看| 伦乱美欧| 日本久久精品| 国产熟女大叫受不了| 五月丁香另类网| 成人国产欧美大片一区| 丁香久久| 久操97| 26uuu最新地址| 色综合网综合| 五月青青草综合| 婷婷丁香色五月亚洲| 久久婷婷综合国产| 婷婷色基地在线看| 丁香五月婷婷啪啪视频| 国产毛片精品一区二区色欲黄A片| 欧美99热| 色狠狠综合网| 狠狠插狠狠操| 丁香五月婷婷色| xxx综合在线| 久月丁香爱婷婷综合| 97碰在线| 婷婷精品视频| 超碰激情网| 婷婷激情四射五月天| 99riAV成人在线视频| 日本强伦片中文字幕免费看| 国产全是老熟女太爽了| 色香蕉影院| 久久久婷| 激情综合五月婷婷| 综合色色网| www.狠狠色.com| 婷婷五月天97干| 婷婷丁香社区| 国产小精品| 六月丁香久久| 中文字幕日产A片在线看| 五月激情天| 91日韩在线| 超碰国产在线| 九九AV| 色人久久| 日本欧美成人片AAAA| 亚洲天堂99| 激情综合五月| 婷婷五月天色色| 色情综合网| 精品一区二区三区四区五区六区| 五月丁香婷婷啪啪| 天天插天天射| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 狠狠va| 26uuu淫色| 五月婷婷深爱六月| 操你av| 91精品综合久久久久久五月丁香| 中文乱子伦视频| 午夜丁香婷婷| 色九九九九| 五月丁香啪啪啪啪| 婷婷五月丁香基地| 色综合色色| 婷婷丁香综合网| 色播色丁香五月| 大香线蕉伊人| 99精品自拍| 亚洲小视频免费看| 五月丁香六月婷婷综合伊人| 五月色网| 色婷婷激情| 日韩AV大全| 激情六月婷婷| 丁香色婷婷色手机免费在线| 丁香五月婷婷婷桃花影院| 天堂综合久| 综合色99| 六月婷婷七月丁香| 亚洲综合激情五月| 丁香婷婷五月综合色情| 日本在线视频www色| 欧美大肥婆大肥BBBBB| av操逼网| 日韩五月婷婷久久| 日本色天堂| 欧美激情 日韩无码 婷婷 五月天| 天天狠狠插| 久久色五月天综合网| 91超级碰在线视频| 99在线观看| 五月婷色丁香| 91热99| 精品九九在线观看视频| 最新五月天婷婷影| 天天色天天日| 婷婷五月天电影网| 五月婷婷很很色| 中文精品在| 丁香五月aV| 色五月婷婷小说亚洲中文字幕组| 婷婷久久综合久| 成人超碰网| 五月丁香色综合| 婷婷五月天丁香社区| 五月天激情综合首页| 天天操天天爱天天玩| 日本一级特黄大片AAAAA级| 久操热| 日韩无码系列| 性色欲情 网站| 色在线视频网2025| 婷婷五月天综合在线| 男女啪啪视频久 9| 五月丁香久久网| 欧美群妇大交乱婬网| 久久亚洲婷婷| 激情五月综合| 91狼友视频网页更新| 婷综合| 九九视频这里有精品| 丁香五月影院| 一本到不卡高清DVD| 色欲婷婷五月天| 99热成人在线观看| 激情小说视频图片| 成人va在线| 另类色视频| 亚洲va在线| 婷婷激情综合| 亚洲xx在线| 大香蕉AV在线| 草榴视频网| 综合色色婷婷| 99视频自拍| 久久人视频| 成人五月天在线视频在线观看| 狠狠操狠狠插| 欧美激情综合五月色丁香| 人人操日| 日日夜夜婷婷| 免费无码毛片一区二区A片| 久热91精品| 开心五月深爱激情| 五月综合激情| 永久免费视频| 色五月综合激情| 国自产拍偷拍精品啪啪一区二区| 99狠狠| 五月婷婷色丁香| 大香蕉综合在线| 亚洲九九99精品视频在线播放| 亚洲激情综合| 开心婷婷五月| 91热在线观看视频| 天天日人人| 伊人激情影院| 丁香激情四射| 国精产品久久| 亚洲色色色| 天天操夜夜爽天天操| 成人在线日韩欧美| 九月婷婷人人操人人舔人人爱| 色色网站观看| 国产欧洲欧洲精品久久| 婷婷五月天久久综合88| 国产VA亚洲VA96| 99国产在线精品视频| 538午夜激情| 日韩人妻在线观看| 免费看成人747474九号视频在线观看| 人人看人人要| 江苏少妇性BBB搡BBB爽爽爽| 性韩日色婷婷五月天激情啪啪XXX| 激情深爱综合网| 久久婷婷五月天大香蕉| 激情五月婷婷色综合| 综合网天天| 噜噜噜狠狠色综| 美欧成人视频| 婷婷综合日本| 自拍盗摄 另类| 五月婷狠狠| 天堂婷婷丁香六月网| 久久性爱视频| 久鲁鲁色网| 超碰在线看| 丁香色六月| 操碰97| 中文字幕在线免费| 中美日韩成人在线| 久久久久久久8| 91se在线观看| 五月狠狠| 日本婷婷在线| 3p久久| 五月婷婷色影院| 婷婷网影院| 久色激情| 夜色综合网| 丁香六月激情四射| 吾爱AV导航| 久久综合五月| 欧美伊人9| 能看的av| 超碰人人操| 五月天狠狠色| 97狠狠色| 色香蕉影院| 日本精品在线噜噜噜| 亚洲色网络| 色五月久久成人婷婷| 丁香五月成人| 五月天婷婷影院影院| 激情涩播| 这里只有精品视频99| 激情碰碰碰| 五月丁香六月色| 久久婷婷网站| 大香网伊人久久综合| 美妞av| 久久综合久色欧美综合狠狠 | 色色99色色| 影音先锋自拍网| 婷婷激情五月综合丁香社| 中文不卡av| 天天摸天天做天天爱天天爽| 日本视频99| 激情五月综合| 五月婷婷开心深| 亚洲日韩乱码一区二区三区四区 | 国产成人精品一区二三区熟女在线| 在线观看免费观看在线9久| 江苏少妇性BBB搡BBB爽爽爽| 丁香婷婷啪啪啪| 婷婷操无码| 最新丁香六月婷婷| 99日精品视频| 激情视频网址| 夜夜www| 狠狠色丁香乆乆| 天天色视频| 天天色五月婷婷91久久久久久久| 荷兰av一级| 大香蕉99热| 99热这里只有精彩| WWW.桔色成人.COM| 操婷婷久久| 亚洲激情AV| 日日干日日s| 国产精品成人网站| 另类A片| 欧美激情丁香五月天久久婷婷一区| 综合激情五月天| 久久久久久久合一狠狠做深爱| 婷婷综合视频| 99热都是精品| 五月丁香六月婷婷综合伊人| 婷婷性爱综合| 五月婷婷色| 日本熟女内射| 超碰超碰在线| 婷婷六月久久综合导航| 五月天玖玖狠狠色色| www综合久久| 99久久极情精品一区| 精品久久久久久久人妻| 狠狠色丁香久久| 9久久精品| 日日狠狠久久偷偷四色综合免费 | 五月天婷婷爱| 五月丁欧美| 久久人妻熟女一区二区| 国产精品久久久海的味道| 人人玩人人橾| 日本英国美国欧美亚洲国产精亚洲日韩精品在线观看 | 久久人妻系列| 婷婷久久99| 精品久久久久成人码免费动漫| 九九热精品6| 日韩九区| 国产原创视频91九色| 日本久久精品| 日韩黄黄| 婷婷五月丁香花综合| 亚洲国产精品SUV| 人妻久久婷婷| 狠色狠色狠狠色综合网| 99精品久| 噜噜在线| 五月丁香综合中文| 婷婷成人综合五月| 亚洲一级色电影| 偷拍99在线视频观看| 五月天婷婷久久视频| 91精品久久久久、久五月天| 丁香五月激情啪啪| 色开心五月婷婷丁香HD| AV九九| 日韩黄色电影| 九九婷婷五月天影视| 一起操 91N.com| 99热亚洲精品| 色爱终和网| 婷婷午夜丁香| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | 婷婷综合激情五月中文字幕| 亚洲色色五月| 青青久在线视频免费观看| 婷婷永久在线| 丁香五月婷久久| 亚洲综合视频一下| 五月丁香婷婷色色| 99久热在线精品99re6热| 久草热久草在线视频| 激情久久久久久| 99视频只有这里精品| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 无码一区二区日韩| 久久大香蕉视频| 婷婷中文字暮| 无码日本精品XXXXXXXXX | 大香蕉啪啪啪| 超碰97干| 第四色婷婷丁香五月| 久久机只有这里精品| 第2色五月婷| 日韩中文欧美| www.91操|