亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

基于SSM的文檔管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn):從任務(wù)書到部署全流程解析

基于SSM的文檔管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn):從任務(wù)書到部署全流程解析 做過文檔管理系統(tǒng)的人都知道這類項(xiàng)目表面上就是一個(gè)文件的CRUD但真正把需求理清楚、把權(quán)限和流程落地難度一點(diǎn)都不低。尤其是以任務(wù)書形式給出的SSM版本文檔管理系統(tǒng)既要滿足基礎(chǔ)的文件存取又要體現(xiàn)三層架構(gòu)的工程化能力還要在答辯或驗(yàn)收時(shí)講清楚每一個(gè)設(shè)計(jì)決策。這篇博文我就以自己從任務(wù)書到交付的完整過程為例把里面的設(shè)計(jì)思路、表結(jié)構(gòu)、核心代碼、部署細(xì)節(jié)和踩坑記錄都翻出來給正準(zhǔn)備動(dòng)手或者寫技術(shù)文檔的同學(xué)一點(diǎn)參考。項(xiàng)目標(biāo)題: 基于SSM的文檔管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)任務(wù)書——這句話里真正重要的關(guān)鍵詞是任務(wù)書意味著你拿到的不是一句做個(gè)文檔系統(tǒng)的模糊需求而是一份有功能邊界、有技術(shù)指標(biāo)、有驗(yàn)收標(biāo)準(zhǔn)的約束文件。SSM是SpringSpringMVCMyBatis的組合在目前Spring Boot大行其道的環(huán)境下依然有很多課程設(shè)計(jì)和中小型企業(yè)內(nèi)部項(xiàng)目在用這套組合原因無非兩個(gè)一是Spring的核心IoC與AOP思想必須通過SSM這種手動(dòng)裝配的方式才能理解得更透二是大量存量系統(tǒng)仍然是SSM架構(gòu)維護(hù)和二次開發(fā)的需求長(zhǎng)期存在。我的經(jīng)驗(yàn)是拿到任務(wù)書先別急著寫代碼花兩天時(shí)間把數(shù)據(jù)庫(kù)表和接口設(shè)計(jì)定下來后面能省一半的返工時(shí)間。下面我從頭到尾拆解這個(gè)項(xiàng)目的完整落地過程。1. 項(xiàng)目定位與整體設(shè)計(jì)思路1.1 這類項(xiàng)目要解決的核心痛點(diǎn)是什么文檔管理系統(tǒng)的本質(zhì)不是把文件存起來而是解決三個(gè)現(xiàn)實(shí)問題文件散落、權(quán)限失控、操作無痕。先說說使用場(chǎng)景。一個(gè)小團(tuán)隊(duì)或者一個(gè)部門日常產(chǎn)生的合同、制度、技術(shù)資料、會(huì)議紀(jì)要往往散落在各人的電腦和共享文件夾里。共享文件夾最大的問題是沒有權(quán)限粒度要么大家都能刪要么配起來極其麻煩。誰(shuí)在什么時(shí)間修改過哪個(gè)文件完全沒有記錄。文檔管理系統(tǒng)要做的就是把散落的文件收攏到一個(gè)統(tǒng)一入口按組織架構(gòu)和角色控制誰(shuí)能看、誰(shuí)能傳、誰(shuí)能刪同時(shí)對(duì)關(guān)鍵操作留下日志。從任務(wù)書常見的要求來看功能模塊一般繞不開這幾個(gè)用戶登錄與角色權(quán)限、文檔分類管理、文檔上傳下載、文檔檢索、操作日志、回收站機(jī)制。有些任務(wù)書還會(huì)加上在線預(yù)覽、版本管理、收藏與分享但核心永遠(yuǎn)是權(quán)限和流程。我接手過的模擬項(xiàng)目X就是典型的中小規(guī)模需求用戶分管理員和普通用戶兩級(jí)管理員可以管理所有文檔和分類普通用戶只能管理自己上傳的文檔所有用戶共享一個(gè)公共文檔庫(kù)。就這么一條簡(jiǎn)單的規(guī)則直接決定了后面用戶表、角色表和文檔表的關(guān)聯(lián)方式。1.2 為什么選SSM而不是Spring Boot這個(gè)問題幾乎每輪答辯都會(huì)被問到也是任務(wù)書如此設(shè)計(jì)技術(shù)棧的核心用意。SSM是一個(gè)典型的三層架構(gòu)技術(shù)組合Spring負(fù)責(zé)對(duì)象管理和事務(wù)控制SpringMVC負(fù)責(zé)HTTP請(qǐng)求的路由與參數(shù)綁定MyBatis負(fù)責(zé)SQL與對(duì)象映射。這三層各司其職邊界非常清晰。而Spring Boot把大量配置自動(dòng)化了你只需要引入依賴就能跑起來但底層的DispatcherServlet、HandlerMapping、SqlSessionFactory這些核心機(jī)制反而被隱藏了。對(duì)于以學(xué)習(xí)和教學(xué)為目的的任務(wù)書項(xiàng)目選SSM的意義在于你必須自己配置數(shù)據(jù)源、自己聲明事務(wù)管理器、自己寫攔截器、自己管理SQL映射這個(gè)過程能把框架的核心原理串起來。換句話說SSM版本做一遍Spring Boot版本就是水到渠成的事情。另外從實(shí)際運(yùn)維角度看很多公司在2015到2020年間沉淀的內(nèi)部系統(tǒng)就是SSM架構(gòu)目前依然在線運(yùn)行。一個(gè)能基于SSM做二次開發(fā)的工程師在老系統(tǒng)維護(hù)這個(gè)維度上是有實(shí)際價(jià)值的。1.3 功能模塊的拆解與邊界劃分動(dòng)手設(shè)計(jì)之前我會(huì)把任務(wù)書里的每一條功能要求拆成四層表現(xiàn)層、接口層、服務(wù)層、數(shù)據(jù)層。這是SSM項(xiàng)目的天然分層也是寫技術(shù)文檔時(shí)最直觀的結(jié)構(gòu)。以文檔檢索為例表現(xiàn)層是一個(gè)帶搜索框的列表頁(yè)接口層接收keyword、categoryId、pageNum、pageSize這些參數(shù)服務(wù)層負(fù)責(zé)拼接查詢條件并調(diào)用MyBatis的Mapper接口數(shù)據(jù)層則是動(dòng)態(tài)SQL的查詢語(yǔ)句。每一層只干自己的事后面排查問題的時(shí)候一層一層看效率很高。功能邊界同樣重要。任務(wù)書如果寫了回收站就要定義清楚用戶刪除文檔是邏輯刪除還是物理刪除回收站里的文檔保留多久徹底刪除是否需要管理員權(quán)限這些邊界問題如果不提前想清楚代碼寫到最后很容易陷進(jìn)改不完的狀態(tài)流轉(zhuǎn)。我的建議是畫一張角色權(quán)限矩陣橫軸是功能操作縱軸是角色類型單元格里標(biāo)注允許或不允許。這張表后面既是寫代碼的依據(jù)也是測(cè)試用例的來源。2. 數(shù)據(jù)庫(kù)設(shè)計(jì)與核心表結(jié)構(gòu)2.1 表結(jié)構(gòu)設(shè)計(jì)的原則與典型拆分文檔管理系統(tǒng)的數(shù)據(jù)庫(kù)表不會(huì)特別多但表與表之間的關(guān)聯(lián)關(guān)系很考驗(yàn)設(shè)計(jì)功底。一個(gè)典型的SSM文檔管理系統(tǒng)核心表包括用戶表、角色表、用戶角色關(guān)聯(lián)表、文檔分類表、文檔信息表、操作日志表。用戶表的核心字段是id、用戶名、密碼、真實(shí)姓名、郵箱、手機(jī)號(hào)、狀態(tài)、創(chuàng)建時(shí)間。密碼一定不要存明文用MD5加鹽或者BCrypt散列這是底線問題。角色表相對(duì)簡(jiǎn)單就是id、角色名、角色編碼和描述。用戶和角色是多對(duì)多關(guān)系所以需要一張中間關(guān)聯(lián)表。文檔信息表是整個(gè)系統(tǒng)最關(guān)鍵的一張表字段設(shè)計(jì)我后面單獨(dú)展開。分類表是自關(guān)聯(lián)結(jié)構(gòu)用parentId字段實(shí)現(xiàn)樹形目錄比如技術(shù)資料/后端/框架這就是兩層的父子關(guān)系。操作日志表記錄關(guān)鍵行為字段包括操作人、操作類型、操作對(duì)象、操作詳情、IP地址、操作時(shí)間。這張表的價(jià)值在于審計(jì)追溯屬于平時(shí)沒人看、出事必須查的表設(shè)計(jì)時(shí)寧可多存字段不要事后補(bǔ)字段。2.2 文件存儲(chǔ)方式數(shù)據(jù)庫(kù)BLOB還是磁盤路徑這是文檔管理系統(tǒng)里最容易糾結(jié)的決定。我見過有人把文件轉(zhuǎn)成byte[]直接塞進(jìn)數(shù)據(jù)庫(kù)的BLOB字段也見過只存文件路徑的做法。我的結(jié)論很明確主流可靠方案是文件存磁盤數(shù)據(jù)庫(kù)存元數(shù)據(jù)和路徑。用一個(gè)維度來對(duì)比會(huì)非常直觀對(duì)比項(xiàng)數(shù)據(jù)庫(kù)BLOB磁盤路徑元數(shù)據(jù)數(shù)據(jù)庫(kù)備份體積非常大備份恢復(fù)都很慢數(shù)據(jù)庫(kù)體積小備份快文件讀取性能每次讀取走數(shù)據(jù)庫(kù)連接高頻下載時(shí)是災(zāi)難文件流直接從磁盤讀或交給靜態(tài)資源服務(wù)器處理文件預(yù)覽支持需要額外寫二進(jìn)制流輸出邏輯配合Nginx映射目錄即可支持?jǐn)U展性數(shù)據(jù)庫(kù)擴(kuò)容成本高文件可遷移到OSS或分布式存儲(chǔ)如果任務(wù)書明確要求使用BLOB那說明這個(gè)項(xiàng)目是教學(xué)演示級(jí)重點(diǎn)是展示MyBatis對(duì)大字段的處理能力這種情況可以按照任務(wù)書執(zhí)行但也要在文檔里說明方案的局限性。如果任務(wù)書沒有強(qiáng)制要求存儲(chǔ)方式選磁盤路徑方案更合理也更符合企業(yè)真實(shí)做法。文件存儲(chǔ)目錄的規(guī)劃同樣重要。在應(yīng)用所在磁盤建立一個(gè)專用目錄比如/data/docfiles下面按日期或者按分類分子目錄存儲(chǔ)時(shí)給文件生成一個(gè)新的隨機(jī)文件名擴(kuò)展名保留原文件擴(kuò)展名。這樣做的好處是避免重名覆蓋同時(shí)避免特殊字符和中文名在文件系統(tǒng)層面的兼容問題。2.3 權(quán)限設(shè)計(jì)從簡(jiǎn)到繁的兩檔實(shí)現(xiàn)權(quán)限模型是文檔管理系統(tǒng)和普通文件目錄最本質(zhì)的區(qū)別。任務(wù)書通常會(huì)給兩種權(quán)限要求對(duì)應(yīng)的實(shí)現(xiàn)復(fù)雜度差別很大。第一檔是粗粒度權(quán)限只有管理員和普通用戶兩種角色管理員能做所有操作普通用戶只能操作自己上傳的文檔。這種模型不需要菜單表只需要在service層判斷當(dāng)前登錄用戶的角色和資源歸屬即可。第二檔是細(xì)粒度RBAC任務(wù)書可能要求不同角色看到不同菜單、不同按鈕這時(shí)候就要引入菜單表和角色菜單關(guān)聯(lián)表。登錄成功后查詢當(dāng)前角色的菜單列表動(dòng)態(tài)渲染左側(cè)導(dǎo)航欄。后端每個(gè)接口通過攔截器和注解雙重校驗(yàn)權(quán)限比第一檔復(fù)雜不少。我的建議是如果任務(wù)書沒有明確要求權(quán)限細(xì)分先做第一檔把核心業(yè)務(wù)流程跑通有余力再升級(jí)到第二檔。權(quán)限這東西最容易陷入過度設(shè)計(jì)一套系統(tǒng)如果一共就三個(gè)角色硬生生做五張權(quán)限表純屬給自己挖坑。3. 核心技術(shù)實(shí)現(xiàn)與實(shí)操要點(diǎn)3.1 登錄認(rèn)證與攔截器的完整實(shí)現(xiàn)登錄認(rèn)證幾乎是每一個(gè)SSM項(xiàng)目的第一個(gè)硬骨頭。流程不復(fù)雜但細(xì)節(jié)很多。登錄接口接收用戶名和密碼調(diào)用service層根據(jù)用戶名查詢用戶比對(duì)密碼時(shí)用MD5加鹽的方式前端提交明文密碼后端用固定鹽值拼上密碼再做MD5與數(shù)據(jù)庫(kù)存儲(chǔ)的散列值比對(duì)。成功之后將用戶對(duì)象放入session同時(shí)放入角色編碼后續(xù)每個(gè)請(qǐng)求通過攔截器從session中判斷登錄狀態(tài)。SpringMVC的攔截器需要實(shí)現(xiàn)HandlerInterceptor接口核心在preHandle方法里public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session request.getSession(); Object user session.getAttribute(loginUser); if (user null) { response.sendRedirect(request.getContextPath() /login); return false; } return true; }這里有幾個(gè)關(guān)鍵配置需要注意。攔截器要排除登錄接口、注冊(cè)接口和靜態(tài)資源路徑否則CSS、JS、圖片全部被攔頁(yè)面會(huì)變成裸HTML。在spring-mvc.xml配置攔截器路徑時(shí)我用的是/*還是/**這點(diǎn)非常容易搞錯(cuò)。/*只匹配一級(jí)路徑/doc/detail/1這種多級(jí)URL會(huì)直接繞過攔截必須用/**才能匹配所有層級(jí)。還有一個(gè)隱患是session超時(shí)。Tomcat默認(rèn)session過期時(shí)間是30分鐘用戶在上傳大文件或長(zhǎng)時(shí)間停留后提交請(qǐng)求時(shí)session已經(jīng)失效會(huì)被攔截器踢回登錄頁(yè)。這個(gè)情況要在任務(wù)書文檔的異常處理部分提及生產(chǎn)環(huán)境可以適當(dāng)調(diào)大session超時(shí)時(shí)間或者配合記住我的Cookie機(jī)制做自動(dòng)登錄。3.2 文件上傳與下載的實(shí)現(xiàn)細(xì)節(jié)文件上傳是文檔管理系統(tǒng)的核心操作也是坑最多的地方。SpringMVC處理文件上傳依賴commons-fileupload和commons-io兩個(gè)庫(kù)在spring-mvc.xml中配置MultipartResolver。核心配置如下bean idmultipartResolver classorg.springframework.web.multipart.commons.CommonsMultipartResolver property namemaxUploadSize value104857600/ property namemaxInMemorySize value1048576/ property namedefaultEncoding valueUTF-8/ /beanmaxUploadSize是總上傳大小上限這里設(shè)置100MB單位是字節(jié)。maxInMemorySize是內(nèi)存緩沖閾值超過1MB的文件會(huì)先寫入臨時(shí)文件再處理避免大文件撐爆內(nèi)存。這兩個(gè)參數(shù)如果不設(shè)置Tomcat默認(rèn)單次請(qǐng)求最大數(shù)據(jù)量可能是2MB或者2048KB用戶傳個(gè)稍大的PDF就會(huì)報(bào)錯(cuò)。接收文件的Controller層方法簽名是MultipartFile參數(shù)PostMapping(/upload) ResponseBody public Result upload(RequestParam(file) MultipartFile file, RequestParam(categoryId) Integer categoryId) { if (file.isEmpty()) { return Result.error(請(qǐng)選擇文件); } String originalFilename file.getOriginalFilename(); String ext originalFilename.substring(originalFilename.lastIndexOf(.)); String newFileName UUID.randomUUID().toString().replace(-, ) ext; // 保存到磁盤 File dest new File(fileDir File.separator newFileName); file.transferTo(dest); // 插入文檔表記錄 docService.addDoc(...); }保存文件前一定要做擴(kuò)展名校驗(yàn)。任務(wù)書里通常會(huì)寫支持常見辦公文檔格式那就定義一個(gè)白名單doc、docx、xls、xlsx、ppt、pptx、pdf、txt、zip。不要用黑名單攔截exe、bat這種可執(zhí)行文件因?yàn)楹诿麊斡肋h(yuǎn)漏白名單才是可靠方案。下載文件有兩種寫法。一種是返回ResponseEntitybyte[]代碼簡(jiǎn)潔但大文件會(huì)把整個(gè)文件讀進(jìn)內(nèi)存另一種是直接用HttpServletResponse獲取OutputStream流式寫入這種方法對(duì)大文件更友好。流式下載核心代碼如下File file new File(filePath); response.setContentType(application/octet-stream); String fileName URLEncoder.encode(doc.getFileName(), UTF-8); response.setHeader(Content-Disposition, attachment;filename fileName); FileInputStream fis new FileInputStream(file); OutputStream os response.getOutputStream(); byte[] buffer new byte[1024 * 8]; int len; while ((len fis.read(buffer)) ! -1) { os.write(buffer, 0, len); } os.flush(); fis.close();這里最大的坑是下載文件名中文亂碼。HTTP協(xié)議頭不支持非ASCII字符必須用URLEncoder轉(zhuǎn)碼瀏覽器收到后會(huì)自動(dòng)解碼。如果不做這步文件名是中文的文檔下載下來全是亂碼。下載完成后還要回寫一條操作日志記錄哪個(gè)用戶在什么時(shí)間下載了哪個(gè)文件同時(shí)把數(shù)據(jù)庫(kù)里的下載數(shù)字段加一。這一步很多人會(huì)漏而操作日志恰恰是任務(wù)書評(píng)分的加分項(xiàng)。3.3 MyBatis動(dòng)態(tài)SQL與分頁(yè)查詢的最佳實(shí)踐文檔管理系統(tǒng)的查詢條件通常不固定用戶可能只按文件名搜也可能同時(shí)按分類和文件名搜還可能按上傳時(shí)間范圍搜。這種場(chǎng)景正是MyBatis動(dòng)態(tài)SQL發(fā)揮威力的地方。Mapper XML里用where和if標(biāo)簽拼接條件select idsearchDocs resultTypecom.example.pojo.Document select * from doc_info where if testkeyword ! null and keyword ! and file_name like concat(%, #{keyword}, %) /if if testcategoryId ! null and category_id #{categoryId} /if if testuploaderId ! null and uploader_id #{uploaderId} /if if teststartTime ! null and create_time gt; #{startTime} /if /where order by create_time desc /selectwhere標(biāo)簽會(huì)自動(dòng)處理第一個(gè)條件前面的and不用手動(dòng)加where 11這種寫法看起來不優(yōu)雅但在MyBatis里確實(shí)很多人還在用只是不建議因?yàn)闀?huì)影響查詢優(yōu)化器對(duì)索引的使用。分頁(yè)查詢我推薦使用PageHelper插件引入依賴后在service層調(diào)用PageHelper.startPage(pageNum, pageSize)緊接著的查詢就是分頁(yè)查詢?cè)偻ㄟ^PageInfo對(duì)象獲取總記錄數(shù)。用法如下PageHelper.startPage(pageNum, pageSize); ListDocument list docMapper.searchDocs(condition); PageInfoDocument pageInfo new PageInfo(list);PageHelper的原理是攔截MyBatis的Executor在查詢前自動(dòng)拼接LIMIT語(yǔ)句。優(yōu)點(diǎn)是代碼侵入性小缺點(diǎn)是有時(shí)候容易忘掉它只能在第一次查詢前調(diào)用如果Mapper里有兩個(gè)查詢它只對(duì)第一個(gè)生效。如果不想引入額外依賴也可以手寫LIMIT分頁(yè)自己算偏移量再單獨(dú)寫一條count查詢。這種方式更可控但代碼量大一些。課程設(shè)計(jì)階段用PageHelper完全足夠。還有一個(gè)MyBatis高頻坑插入文檔后要立刻拿到自增主鍵用于回填文檔ID和后續(xù)操作。配置起來很簡(jiǎn)單insert idaddDoc parameterTypecom.example.pojo.Document useGeneratedKeystrue keyPropertyid如果沒有這行配置你插入后拿到的id永遠(yuǎn)是0后面要做根據(jù)ID綁定分類、生成日志關(guān)聯(lián)ID時(shí)全都會(huì)出問題。4. 關(guān)鍵配置與部署實(shí)操4.1 環(huán)境準(zhǔn)備與依賴管理一個(gè)標(biāo)準(zhǔn)的SSM項(xiàng)目環(huán)境我這邊用的是JDK 1.8、Maven 3.6、Tomcat 8.5、MySQL 5.7。JDK 1.8在SSM生態(tài)里兼容性最好MyBatis和Spring的老版本都能正常跑Tomcat 8.5對(duì)應(yīng)Servlet 3.1規(guī)范支持SpringMVC的注解驅(qū)動(dòng)方式。Maven依賴是SSM項(xiàng)目里最容易出錯(cuò)的部分。常見問題是版本沖突spring-webmvc用的是5.xspring-jdbc卻引成一個(gè)4.x啟動(dòng)時(shí)各種NoSuchMethodError。建議所有Spring相關(guān)依賴統(tǒng)一版本屬性在pom.xml中定義properties spring.version5.3.28/spring.version /properties核心依賴清單如下用途依賴名說明Spring核心spring-context, spring-webmvc版本統(tǒng)一數(shù)據(jù)訪問mybatis, mybatis-springMyBatis和Spring整合連接池druid阿里連接池監(jiān)控方便文件上傳commons-fileupload, commons-ioMultipart支持JSON處理jackson-databind前后端交互分頁(yè)插件pagehelper分頁(yè)查詢JSTLjstl, taglibs-standard-implJSP頁(yè)面使用JDK 1.8對(duì)應(yīng)Tomcat版本不能太新Tomcat 10把javax改名成了jakartaSpring老版本的包全都找不到類這是新手常踩的坑。我推薦直接用Tomcat 8.5減少不必要的適配。4.2 SSM整合配置的三個(gè)關(guān)鍵文件SSM項(xiàng)目需要三份配置文件web.xml、spring-mvc.xml、spring-mybatis.xml。這三份文件的職責(zé)劃分清晰配置時(shí)各管各的。web.xml配置編碼過濾器、Spring容器監(jiān)聽器和DispatcherServletfilter filter-nameencodingFilter/filter-name filter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-class init-param param-nameencoding/param-name param-valueUTF-8/param-value /init-param init-param param-nameforceEncoding/param-name param-valuetrue/param-value /init-param /filterCharacterEncodingFilter放在所有過濾器最前面而且forceEncoding要設(shè)為true否則只影響請(qǐng)求編碼不影響響應(yīng)編碼頁(yè)面會(huì)亂碼得很均勻。spring-mvc.xml配置掃描Controller包、注解驅(qū)動(dòng)、視圖解析器、攔截器和MultipartResolver。spring-mybatis.xml配置掃描service、配置數(shù)據(jù)源、配置SqlSessionFactory、配置Mapper掃描、配置事務(wù)管理器。DataSource用Druid連接池的核心參數(shù)是initialSize5、maxActive20、minIdle5這些參數(shù)要根據(jù)實(shí)際并發(fā)量調(diào)整不要默認(rèn)值跑天下。事務(wù)管理是我特別想強(qiáng)調(diào)的一點(diǎn)。文檔系統(tǒng)中刪除分類、批量搬移文件、更新文檔狀態(tài)這些操作涉及多張表如果沒有事務(wù)中間一步失敗會(huì)導(dǎo)致數(shù)據(jù)不一致。配置事務(wù)管理器后在Service實(shí)現(xiàn)類或方法上使用Transactional注解即可。4.3 部署到Tomcat的完整流程部署階段的任務(wù)是打包成war包丟進(jìn)Tomcat的webapps目錄。Maven打包前要先做幾個(gè)檢查數(shù)據(jù)庫(kù)連接URL的IP是不是生產(chǎn)庫(kù)的IP上傳文件目錄在服務(wù)器上是否存在磁盤權(quán)限是否可寫。war包部署后同樣有一個(gè)約束要提前規(guī)避上傳文件目錄不能放在Tomcat部署目錄內(nèi)部。如果文件存到webapps/upload下一次重新部署war包時(shí)整個(gè)目錄會(huì)被覆蓋用戶上傳的文件全部丟失。正確做法是把上傳目錄配置到Tomcat之外比如/data/docfiles通過配置文件注入路徑這樣重新部署也不會(huì)丟文件。生產(chǎn)環(huán)境的數(shù)據(jù)庫(kù)初始化腳本建議在部署文檔中單獨(dú)提供。建庫(kù)語(yǔ)句、建表語(yǔ)句、初始管理員賬號(hào)的插入語(yǔ)句都要寫成SQL腳本。初始化時(shí)要注意字符集設(shè)置建庫(kù)語(yǔ)句帶上DEFAULT CHARSETutf8mb4否則存emoji或生僻字時(shí)數(shù)據(jù)庫(kù)直接報(bào)錯(cuò)。5. 常見問題與排查技巧實(shí)錄5.1 文件上傳失敗的幾種典型場(chǎng)景上傳功能是這個(gè)項(xiàng)目問題重災(zāi)區(qū)我把常見問題匯總成表格排查時(shí)對(duì)照著看效率很高。報(bào)錯(cuò)現(xiàn)象根本原因解決方案請(qǐng)求被拒絕超出大小限制maxUploadSize未配置或太小設(shè)置CommonsMultipartResolver的maxUploadSize空文件也能上傳成功未判空file.isEmpty()Controller層加判空和擴(kuò)展名校驗(yàn)上傳中文文件名保存后亂碼編碼過濾器未設(shè)置或順序不對(duì)web.xml放最前forceEncodingtrue傳到本地目錄出現(xiàn)重復(fù)文件直接用原文件名改用UUID隨機(jī)名存儲(chǔ)大文件上傳內(nèi)存溢出maxInMemorySize過大設(shè)為1MB左右觸發(fā)臨時(shí)文件機(jī)制還有一個(gè)很容易被忽略的問題如果項(xiàng)目配置了Spring Security或自定義的過濾器它可能會(huì)讀取并消費(fèi)請(qǐng)求體導(dǎo)致MultipartResolver拿不到文件數(shù)據(jù)。雖然SSM項(xiàng)目一般不引入Security但如果遇到上傳接口無響應(yīng)的情況優(yōu)先檢查過濾器鏈有沒有攔請(qǐng)求體。5.2 中文亂碼的一次排查實(shí)錄亂碼問題在SSM項(xiàng)目中幾乎不可避免我實(shí)際排查過的案例里亂碼往往不是單一原因而是多層疊加的結(jié)果。假設(shè)上傳一個(gè)名為產(chǎn)品需求說明書.docx的文件下載后文件名變成亂碼。第一層檢查URL編碼Content-Disposition頭里必須用URLEncoder.encode轉(zhuǎn)碼第二層檢查瀏覽器解碼方式不同瀏覽器對(duì)RFC 5987格式的支持有差異我最終用了一個(gè)簡(jiǎn)單粗暴且兼容的方案文件名轉(zhuǎn)碼成UTF-8后再按ISO-8859-1重新編碼再用URLEncoder處理雖然繞了一點(diǎn)但對(duì)主流瀏覽器都有效。如果列表頁(yè)顯示的文件名亂碼那是數(shù)據(jù)庫(kù)層面或者前端頁(yè)面編碼的問題。數(shù)據(jù)庫(kù)連接URL要加characterEncodingutf8頁(yè)面JSP的pageEncoding要設(shè)置為UTF-8Tomcat的URIEncoding也要設(shè)為UTF-8。這三個(gè)地方只要有一個(gè)漏了中文就會(huì)在某個(gè)環(huán)節(jié)變成問號(hào)。排查思路永遠(yuǎn)是從源頭到展示一步步試不要瞎改配置。先用數(shù)據(jù)庫(kù)客戶端直接查庫(kù)判斷數(shù)據(jù)本身是否正常再判斷是后端返回前就已經(jīng)亂碼還是瀏覽器顯示時(shí)亂碼。定位到具體環(huán)節(jié)修復(fù)就很快了。5.3 前端與后端聯(lián)調(diào)中的隱藏坑前后端分離不是SSM的主流用法但很多任務(wù)書要求頁(yè)面顯示結(jié)果和接口分開測(cè)試。用AJAX請(qǐng)求JSON數(shù)據(jù)時(shí)有幾個(gè)坑不可避免。Jackson默認(rèn)序列化Date類型的結(jié)果是一長(zhǎng)串時(shí)間戳數(shù)字前端顯示很丑陋。解決辦法是在實(shí)體類的日期字段上加注解JsonFormat(pattern yyyy-MM-dd HH:mm:ss, timezone GMT8) private Date createTime;另一個(gè)是static靜態(tài)資源被攔截的問題。如果spring-mvc.xml里沒有放行靜態(tài)資源瀏覽器打開頁(yè)面時(shí)CSS和JS全部加載失敗頁(yè)面光禿禿的。配置方式有兩種要么用mvc:default-servlet-handler/交給默認(rèn)Servlet處理要么用mvc:resources mapping/static/** location/static//指定資源路徑映射。我推薦使用mapping方式匹配規(guī)則更明確。JSON字符串中文亂碼也比較常見。SpringMVC的ResponseBody默認(rèn)StringHttpMessageConverter編碼是ISO-8859-1需要在spring-mvc.xml配置消息轉(zhuǎn)換器使用UTF-8否則通過AJAX返回的中文全是問號(hào)。5.4 性能與安全的基本加固文檔管理系統(tǒng)的并發(fā)量一般不高但也不能完全不考慮性能和建議層面的安全加固尤其是任務(wù)書如果涉及系統(tǒng)的非功能需求這一節(jié)。查詢性能的重中之重是索引。doc_info表的file_name字段如果經(jīng)常被模糊查詢可以建立前綴索引create_time字段用于排序建普通索引即可category_id是外鍵關(guān)聯(lián)字段頻繁做等值查詢必須建索引。安全方面有兩個(gè)底線操作必須做。一是密碼加密二是SQL注入防護(hù)。MyBatis的#{}預(yù)編譯天然防止SQL注入但那種手寫拼接${}的地方要特別小心一旦出現(xiàn)在用戶可控參數(shù)的場(chǎng)景就存在注入風(fēng)險(xiǎn)。上傳文件的存儲(chǔ)路徑也要做合法性校驗(yàn)嚴(yán)禁用戶通過路徑穿越等方式訪問系統(tǒng)目錄。我一般在保存文件時(shí)直接使用數(shù)據(jù)庫(kù)生成的ID和時(shí)間戳重構(gòu)文件名完全不用原始文件名這樣可以最大化降低這類風(fēng)險(xiǎn)。還有一個(gè)經(jīng)驗(yàn)是備份策略。文檔系統(tǒng)的數(shù)據(jù)價(jià)值主要在文件本身數(shù)據(jù)庫(kù)可以每天備份一次但文件目錄最好采用增量同步方案。我在模擬項(xiàng)目X中寫過一個(gè)簡(jiǎn)單的Shell腳本每天凌晨將當(dāng)日新增文件同步到備份盤這個(gè)操作成本極低關(guān)鍵時(shí)候能救命。6. 從任務(wù)書到交付的項(xiàng)目管理心得6.1 任務(wù)書的驗(yàn)收標(biāo)準(zhǔn)如何落實(shí)到開發(fā)計(jì)劃任務(wù)書在結(jié)尾部分通常會(huì)有成果要求比如系統(tǒng)運(yùn)行截圖、核心代碼說明、數(shù)據(jù)庫(kù)設(shè)計(jì)文檔、操作手冊(cè)、測(cè)試報(bào)告。這些文檔不是最后一天能趕出來的最好開發(fā)過程中同步積累。我習(xí)慣在項(xiàng)目目錄下維護(hù)三個(gè)文檔技術(shù)方案書、數(shù)據(jù)庫(kù)設(shè)計(jì)說明、測(cè)試記錄表。技術(shù)方案書寫框架選型理由和模塊劃分?jǐn)?shù)據(jù)庫(kù)設(shè)計(jì)說明標(biāo)注每張表每個(gè)字段的業(yè)務(wù)含義測(cè)試記錄表把每個(gè)功能點(diǎn)的操作步驟和結(jié)果截圖存檔。這份資料往任務(wù)書里一貼就是一份非常完整的項(xiàng)目材料。時(shí)間分配上前期設(shè)計(jì)占30%編碼占50%測(cè)試和文檔占20%。新手最常犯的錯(cuò)誤是一上來就寫代碼寫到一半發(fā)現(xiàn)表結(jié)構(gòu)不合理返工成本極高。6.2 答辯和評(píng)審環(huán)節(jié)的講解重點(diǎn)如果這個(gè)項(xiàng)目最終要答辯講解的邏輯主線應(yīng)該是需求分析到表設(shè)計(jì)表設(shè)計(jì)到代碼實(shí)現(xiàn)代碼實(shí)現(xiàn)到功能演示。不要一上來就念代碼要先講清楚為什么這樣設(shè)計(jì)。我建議準(zhǔn)備一個(gè)設(shè)計(jì)決策表把任務(wù)書中每個(gè)關(guān)鍵要求對(duì)應(yīng)到具體的實(shí)現(xiàn)方案和技術(shù)點(diǎn)。比如任務(wù)書寫了支持多條件組合檢索就對(duì)應(yīng)MyBatis動(dòng)態(tài)SQL寫不同角色對(duì)文檔操作權(quán)限不同就對(duì)應(yīng)攔截器和角色判斷邏輯。答辯時(shí)評(píng)委問什么就從這張表里找答案。演示環(huán)節(jié)一定要用自己的測(cè)試數(shù)據(jù)不要用空的數(shù)據(jù)庫(kù)或者只有兩三條記錄的庫(kù)演示。提前準(zhǔn)備好十來份不同格式的測(cè)試文檔把搜索、分類、權(quán)限切換、回收站恢復(fù)這些操作連貫演示一遍效果比說一百句話都強(qiáng)。6.3 拓展思路與后續(xù)升級(jí)方向SSM版本的文檔管理系統(tǒng)做完后往下的升級(jí)路徑很清晰如果團(tuán)隊(duì)規(guī)模變大可以替換成Spring Boot來降低維護(hù)成本配合Spring Security做更細(xì)粒度的權(quán)限控制如果文件量繼續(xù)增長(zhǎng)可以對(duì)接對(duì)象存儲(chǔ)服務(wù)把文件從本地磁盤搬遷到云端數(shù)據(jù)庫(kù)只存訪問地址如果要做在線預(yù)覽可以通過中間件把Office文件轉(zhuǎn)換成PDF后再展示這也是企業(yè)版文檔系統(tǒng)最常見的功能。技術(shù)選型從來不是追新而是合適。SSM這套組合雖然在配置上比Spring Boot繁瑣但它的每一行配置都在幫你理解Web開發(fā)底層發(fā)生了什么。這個(gè)理解在排查線上問題時(shí)非常值錢。我個(gè)人在多次做過類似系統(tǒng)后最大的體會(huì)是文檔管理系統(tǒng)的難點(diǎn)不在存取文件而在定義清楚誰(shuí)能做什么。任務(wù)書限定SSM反而是件好事它強(qiáng)迫你把權(quán)限、流程、狀態(tài)這些業(yè)務(wù)規(guī)則用最傳統(tǒng)但最扎實(shí)的三層結(jié)構(gòu)寫出來。把這份功課做扎實(shí)了以后不管換成什么框架、什么存儲(chǔ)、什么部署方式核心的業(yè)務(wù)建模能力都是通用的。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久操黄色视频| 婷婷涩嫩草鲁丝久久午夜精品| 最新av在线| 综合网欧美| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 亚洲国产精品久久久久婷婷老年| 婷婷五月激情综合| 国产精品视频在线观看| 中日无幕一二三四区| 欧美Ⅴ性爱| 亚洲AV麻豆Aⅴ无码电影一| 日韩欧美视频青青| 天天干天天操天天操夜夜操天天操| 激情自拍 校园春色| 日韩三级在线观看网站| 啪啪综合网| 国产怡红院| 成人性爱免费播放| 嗯嗯不要视频| 97超碰亚洲| 男人的天堂2019AV| 97九色人妻| 国产精品久久久久久 百度| 天天热精品| 色狠狠色| 秋霞免费AV| 日本久久超碰| 久久久久斤小| AV一二区| 国产超碰人人操| 3PAV乱伦视频| 日日97| 97超级久久强资源| 欧美综合97www| 国产欧美伊人| 欧美久久毛片基地| 狂操嫩妻视频一区二区三区| 色色色综合网| 日韩人妻播放| 国产无码三级视频在线观看| 97chaopengongkai| 天天做天天爱| 亚洲骚逼少妇| 嗯~啊~轻一点 视频| 先锋音影AV| 99热综合| 亚洲AV成人无码久久精品播放| 日韩一级欧美一级国产一级台湾| 亚洲无码?第一页| 丝袜美腿av女优在线| 久久动漫精品视频这里只有精品| 97爱免费插| 熟女在线视频| 91老熟女逼| 爱干爱射网啊啊啊| a人片中文字幕一区二区| 亚洲美女 晚间男人天堂 | 国产熟女二区| 欧美综合综合| 加勒比久久av| 精品人妻一区二区三区免费视频| 精品无码秘 人妻一区二区| 久久久国产护士丝袜美腿一| 97国产伦理| 美女AV一区二区| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 日韩中文字幕国产| 中文字幕日韩电影人妻| 精品v日韩欧美国产| 东京热免费视频| 中文字幕 一区二区 亚洲无码| 欧美日本久久精品一区| 人妻喷水| 2018天天干在线视频| 伊人热综合| 极品尤物女神在线观看| 久久婷婷色| 禁片 高清 在线观看视频网站| 97久久精品亚洲中六字幕| 超碰国产情侣自拍网| 神马久久久久久久久久| 91爰爱欧美| 欧美热图99| 青娱乐91| 丁香色婷婷| 欧洲一区二区三区免费| 一级免费精品| 极品综合| 欧美顶级黄片AAAAA在线免费看| 青青伊人这里只有精品| 色五月大香蕉| 婷婷性网| 91快色色色色色| 丝袜六区| 熟妇人妻丰满久久久久久久无码| 97超碰人人模人人拍人人| 国产剧情AV不卡在线观看| 1024亚洲中文字幕久在线看片你懂的| 91日韩国产欧美亚洲另类精盘州至城都| 天天色黄色影院天天操| 日韩精品国产精品五码一区二区| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 手机午夜电影神马久久| 日韩一级片| 日韩精品第3页| 精品久久久久久久| 99精彩视频| 无毛精品| 欧美顶级黄色大片免费| 欧美欧美少妇| 骚货人妻偷情自拍在线视频| 国产a片操逼| 大地资源在线观看中文第二页| 亚洲爱爱视频一区二区| 天天色,天天干,天天干| 欧洲亚洲天堂精品| 探花在线免费观看视频国产一区| 96免费视频在线| 97香蕉网| 高清肉丝中文无码| 丰满人妻av一区二区三区 | 亚洲乱码尤物193YW| 四虎AV在线观看| 999久久芭蕾| 操逼视频免费日韩无码| 久久久久96| a级成人毛片免费视频高清| 97视频900| 在线强奷到舒服的无码视频| 97欧美色综合| 精品日韩中文在线| 午夜精品久久久久久久99热影院| 精品成人亚洲午夜电影| 久久宗合亚洲| 亚洲AV成人无码一区二区三区在线观看| 欧美在线色| 国产亚洲精品av一区| 麻豆精品天美| 91丨九色丨43老版熟女| 火箭成精品视频884必出精品| 久9视频| 嗯嗯啊啊视频一区二区三区| 国产一区自拍欧美日韩| 新91视频.cmp| AV天堂电影网| 久久久久久国产无码精品| 4虎在线视频| 4399成人黄A片| 搡老女人老91妇女老熟女| 婷婷五月天久久精品视频一区二区三区| 可以免费看黄片的视频| 风间由美日韩欧美久久| 久久久亚洲精品电影免费看| 91狠狠色丁香婷婷综合久久精品| 婷婷色色五月天福利| 影音综合网| 欧美视频一区二区在线| 国产剧情在线| 影音资源男人日韩| 91狠狠综合久久久久久| 狠狠久久手机视频精品| 综合少妇网| 精品免费1| 中国一级特黄大片护士| 91熟女网| 91 国产丝袜在线播放-百度| 国产在线不卡导航| 免费综合亚洲中文| 中文字幕日韩电影人妻| 久久婷婷成人综合色怡春院| 亚洲淫色网中文| 91九色在线| 色操逼网| 91在线免费精品视频| 日韩精品国模| 国产肏屁眼视频| 五月激情小说| 黄片免费日韩| 中国91AV| 91色伦| 求求你操操我| 午夜国产成人福利视频| 乱伦一二三区| 俄罗斯及免费在线看| 国产怡红院在线| 色情婷婷| 日本高清电影欧美色图| 亚洲欧美国产其他二区| 欧美性爱中文字幕无线码| 精品一级毛片在线观看| 欧美成97爱| 人人妻人人色一区二区三区| 极品少妇久久久久| 超碰97国产欧美| 另类欧美| 大屁股国产在线视频| 中国黑人三级片网站上区| 99这里只有精品| 超碰九色| 我要看免费韩日黄片| 精品人妻一区二区视频| 国产精品夜夜| 91爱| 69一区二区| 99re超碰| 老熟妇乱轮| 淫淫综合网| 久久尹人大香焦视| 偷拍盗拍亚洲色图图片 | 免费一级视频特黄色大片| 国产亚洲精品美女久久久久久2021| 九九九精品成人免费视频小说| 亚洲综合影院| 在线αⅴ| 国产精品久久99日日| 为用户提供免费看黄网址在线观看| 香蕉欧美| 欧美成人一级免费电影| 婷婷中文网| 柠檬AV导航| 欧美丰满熟妇XXXX性ppX人交| 国产AV高清AV无码| 免费视频无码| 精品人妻一区二区乱码一区二区| 99re综合伊人| 日本久久超碰| 91在线超高颜值国产| 尤物网址| 色婷亚洲五月在线观看| 91原创在线观看| 国产精品熟女AV中文字幕在线播放| 国产一级久久久| 天天摸夜夜操视频| 大香蕉手机在线| 高清视频一区| 人干人人人操人人摸| 亚洲第一成人影院色播| 久久久久久久久久久97| 人妻五十路在线| 日日爽熟女| 久久国产AⅤ| 亚洲AV秘 精品久久老牛影视| 色婷婷六月| 欧美激情视频一区二区三区不卡| 美女网站91| 免费自拍三级综合| 欧美亚洲综合色| 久操操| 2019男人的天堂| 天天热精品| 久久久96| 国产成人久久久精品免费AV| 白丝少妇一区二区| 东京太热男人的天堂久久久| 久久东京伊人一本到鬼色| 色婷婷综合视频| 麻豆福利视频导航| 久久精品高清无码一区| 日韩三级伊人| 丁香五月性| 99久在线精品99re8a| 国产午夜精品一区二区三区牛牛| 日韩性爱1级片视频| 色爽爽文学| 日本久久久精品电影| 毛片一区二区| 丁香九月激情| 天天干1区2区在线| 精品中文字幕一区二区| 国精品一区二区三| 国产97视频| 操屄不卡视频| 亚洲影视第一页| 超碰97人人cao| 人人摸人人干| 97久操| 嗯啊抽插大香蕉网页| 超碰 97国产熟女| 国产丁香精品露脸视频| 成人乱码一区二区三少妇| 久久亚州高清| 国产精品高潮久久久无码| 日韩av乱伦| 欧美在线综合| 欧洲成人性爱视频| 蜜桃视频一区二区三区| 亚川综合视频| 蜜臀久久在线视频| 四虎影视永久在线免费| 日韩天天本| 亚洲伊人a线观看视频| 日本97久久久精品| 人人操,人人插| 色女综合| 亚洲精品国产熟女| 亚洲网污污污污| 国产操逼视频在线观看| 久草久日| 天美麻花大全视频| 熟女少妇视频| 人妻啊啊人妻啊啊| 天天上日日上日韩精品| 99啪啪| 欧美巨大性舒爽顶到了| 青青草五月天| 激情综合网五月婷婷五月天| 深爱伊人影院| 大胆91| 摸奶性爱视频网站在线免费播放| 我中文字幕6区| 午夜精品久久久久久久99蜜桃一| av日韩中文字幕| 欧美日韩性爱视屏免费看了| 俞拍久久国应视频| 美性中文综合网| 日本一区二区三区四区免费观看| 一二三卡欧美日韩人妻免费精品| 口爆综合网| 欧美成人精品一区二区三区| 日韩一级二级三级| 久综合国内精品自在自线| 亚洲精品三区在线观看| 嗯嗯啊啊啊啊轻点视频| 爱我干综合| 亚洲有码视频二区| 亚洲欧美日韩国产丝袜自拍中文| 丁香五月天激情网站| 久久国产乱子伦精品免费女,网站| 色婷婷在线视频精品导航| 芊芊操逼视频无码| 色香av| 97玖玖超碰| 美女自卫慰黄网站免费| 久久狠狠色噜噜狠狠狠狠97| 亚州九九九精品视频| 丁香激情五月| 搡老熟女老女人老熟妇免费视频| 大色综合| 日韩青久久| 四虎AV无码| 日韩黄色成人性爱| 自拍大香蕉乱插| 天天做天天爱| 亚洲做性| 丰满精品人妻少妇久久字幕| 97色婷婷| www狠狠| 亚洲影院无码在线| 午夜男人的天堂| 久久超碰98| 国产天美欧美| 色五月婷婷麻豆在| 人妻熟女午夜精品在线| 最新啪啪视频| 国语对白在线播放视频| 男人女人18禁片免费看网站| 91天天综合日韩欧美| 亚洲日韩乱码中文无码蜜桃臀网站| 一区二区日韩欧美久久| A 天堂在线观看视频| 免费家庭乱伦视频| 黄片免费日韩| 亚洲天堂久久久久久粉红视频| 骚妻少妇精品性色无码四色A V| 75大香蕉| 麻豆一区二区三区精品| 成人女人国产| 超碰天天久久79| 亚洲欧美一区二区三区在钱蜜桃 | 久久婷婷五月天| 人妻系列无码专区中文有码| 成人七区| 天天干干天天干干| 大香蕉一区二区在线观看.| 国产精品操| 青娱乐黄色录像| 在线洲亚线| 怡红院网站在线视频| 91麻豆一二三区| 青青草视频导航官网| 精品无码一区二区| 国产视频一区二区在线| 91美女视屏| 天堂av2019| 男人亚洲91首页在线| 成人情色一区二区| AV天堂丝袜| 久都青青视频 | 亚洲欧美另类激情小说| 一级毛片电影免费看| 狠狠操狠狠操操| 日日骚AV| 秋霞成人一级在线观看| 国产Aα| 国产免a费看黄片在线| 日韩美女啪啪一区| 91成人精品在线播放| 色噜噜人妻丝袜a∨先锋影 | 超碰视97中文| 97鸡把在线视频| 巨乳特殊服务按摩| 操一操摸一摸| 综合免费无码中文| 亚洲高清在线| 中文字幕加勒比海高清无码免费视频 | 久久综合av| 夜夜爽夜夜摸夜夜操免费视频| 涩亚洲欧洲| 亚洲人妻色图| 国产资源中文字幕在线| 无码日韩人妻av一| 日本 成 人 小说 电影 一区二区| 91网亚洲| 97日韩欧美亚洲| 91东北熟女| 操逼免费视频无码国产| 欧美顶级黄片AAAAA在线免费看| 五月综合色| 91中文精品日韩欧美在线| 国产91专区| 最近二区三区视频大全| 天天干人人干天天日97| 久久久98网站免费视频| 日日日日做夜夜夜夜做无码97| 人人妻人人爽| 多毛小伙内射老太婆| 婷婷五月av| www.高清无码诱惑一区.com| 亚洲精品蜜桃久久久| 91久久久亚洲| 国内三级自拍小视频在线观看| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 粘花网06av视频| 激情久久日韩精品中文字幕麻豆| 看全色黄大色大片免费视频| 少妇干B| 欧美九九99久久精品| 97久久精品不卡| 丝袜人妻av一区二区| 亚洲色图亚洲无码强奸乱伦| 色狠人在线99| 99re免费| 五月婷在线| 欧美97视频| 国产免费一区2区3区| 五月丁香社区婷婷日韩欧美精品影院 | 欧日韩不卡视.频| 日产123区精品免费观看| 日本精品五区| 91日韩在线| 国产乱青青草久久| 综合五月婷婷亚洲一区| 亚洲综合影视| 极品销魂美女一区二区 | 极品色综合| 久久久久久AⅤ无码免费肉站| 国产欧美日韩臀| 国产精品点击进入在线影院高清| 综合色图区| 男人的天堂日韩| 在线播放免费av福利片| 99爱久久视频频| 超碰91在线| 亚洲综合五月天婷婷丁香| 精品无码一区二区三区| 亚欧高清在线| 极品出轨视频网站| 亚洲国产激情国产av| 伊人午夜福利视频| 乱伦系列一区二区| 在线啊啊啊| 毛片电影一区二区三区| 亚州欧美在线| 三级三级三级日本99| 中国和日本人色哪个不下载能放| 婷婷丁香五月综合| 96久久久| 97干天天| 国产www色在线观看| 亚洲污污网站| 我爱大香蕉| 丰满人妻一区二区三区免费 | 超碰激情808| 一本色道久久天天射天天干| 传媒免费一区二区三区| 无色无码| 欧美色另类| 91老司机在线视频免费观看| 国内精品久久人妻性色av| 操亚州| 日本熟妇人妻中出视频| 亚洲色电影在线| 一二三啪啪专区| 在线无码视频| 91精品操美女| 日日天天久久啊啊aaa| 另类TS人妖一区二区三区 | 久久精品国产亚洲AV无码电影| 在线啊啊啊| 日韩亚洲美州欧洲综三区一品在线| 国产又黄又爽| 99日视频在线免费| 精品人妻二区三区| 日韩欧美午夜视频在线| 99re免费| 四虎在线观看网站| 少妇99成人麻豆| 国产一级操B视频| 91天天综合日韩欧美| 黄色不卡视频| 丁香五月婷婷色| 老外又粗又长一晚做五次| 97热视频在线观看| AV天堂丝袜| 在线看免费无码AV天堂的| 日本不卡一区二区| 干b网| 天堂国产AV| 国产伦精品一区二区三区在线观| 日韩操逼性鲍| 好爽免费视频| 亚州精品人妻一二三区| 男人天堂久久日韩| 亚洲男人天堂Av| 成人美女av| 国语对白露脸XXXXXX| 干b网| 97视频www| 91九久| 亚洲操逼网| 日韩Va亚洲va欧美Ⅴa久久| 91综合熟女| 亚洲欧美天| 97超碰资源网| 九九热视频这里只有精品| 综合熟女| 色婷婷色99国产综合精品| 久久久久亚洲AV无码专区少妇| 91这里只有精品| 久操免费电影| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 九九九九九九免费视频| 无码人妻精品一区二区三区九九| 人妻一区二区三区| 久久综合18p| 欧美视频在线第3页| 婷婷伊人网| 在线国产一区二区av| 日韩激情啪啪啪| 伊人丁香五月婷婷| 国产成人99久久亚洲综合| 3PAV乱伦视频| 99婷婷一区二区| 在线日韩日本亚洲国产| 农村女一级毛卡片| 黄片视频观看| 国产又黄又粗的视频| 爱妃国产亚洲视频中文字幕| 美女裸体无遮挡永久免费观看网站| 日日操夜夜操天天操免费观看麻豆| 9精品久久久久| 国产嫩草精品A88AV| 久久精品操| 久久精品超碰| 2017大香蕉| 四虎国产精品永久在线囯在线| 男人的天堂 在线一区| 久久精品人妻一区| 中文字幕一区二区三区字幕| 亚洲一区二区三区播放在线| 国产毛片久久久久久久| 97精品熟女少妇一区 | 国产乱不卡| 天天日天天干天天摸天天操| 熟妇视频一区二区三区在线| 日韩熟女三十乱伦| 欧美亚洲一级在线观看| 秋霞曰韩R级| 五月花婷婷| 日本不卡码黄色 | 加勒比在线视频一区二区三区| 亚洲蜜桃V妇女| 三级三久久线久久99久目本WW| 日本三级韩国三级99| 加勒比在线视频| 欧美97在线观看| 十八禁电影伊人网| 综合 亚洲 欧美| 999精品国产高清一区二区| 免费啪啪一级视频| 曰韩精品九九无码| 传媒免费一区二区三区| 狠狠入| 大香蕉乱级| 亚洲aV性爱| 中文一区二区婷婷视频| 啊啊啊不要嗯嗯在线观看| 超碰诱惑| 上海一级黄片| 天天色悠悠激情| 亚洲诱惑天堂 | 操操操五月天婷婷丁香影院| 国产成人无码久久精品| 熟妇一区二区三区| 日本黄色精品| 黄色区免费观看中文字幕| 艹我哪美一区无码| 亚洲丝袜99| 99久久久无码国产精品性啊聊| 播播亚洲小说亚洲| 亚洲第一页欧美| 亚洲女人91| 日操粉逼逼| 欧亚不卡| 91亚州| 色爱国产| 在线中文AV| 国产三级在线现体验区| 啊啊啊好爽快点啊啊啊嗯嗯| 久久精品人妻一区二区三区| 无码操逼视频一下| 精品 码产区一区二-1080P高清在线www-B029AV | 97欧美综合| 亚欧性爱在线无码| 久久精品中文字幕女同| 岛国A V在线免费看| 98一区二区精品| 91大香蕉伊人| 日韩性爱小视频在线观看| 性性欧美| 天天躁日日躁AAAAXXXX国产| 日本一区二区电影网站| 精品午夜福利| 99激情| 97人人夜| 久久五月丁香| 极品美女嘿咻| 激情五月天色色网| 亚洲影视高清三级-草1024榴社区入口-品爱AV| 欧洲欧美视频一区二区| 99青青草国产视频| 国产91av在线播放| 一区 欧美 日韩 麻豆| 欧美v日韩v亚洲v最新在线| 91 刺激在线| 人妻丝袜日本| 久都青青视频| 国产一区二区成人av在线播放| 人妻精品综合中文字幕在线 | av在线浏览| 麻豆国产97在线| 色老汉色| 精品国产91av一区二区三区| 欧美激情色婷婷花野真衣一区二区| 嫩呦国产一区二区三区AV| 97超级欧美| 成人三一级一片aaa| 99热日| 亚洲黄网在哪免费看| 深夜激情| 无码99| 无码精品久久| 少妇丝袜在线观看AV| 天天干人妇| 精品97久久| 九九九网页| 亚洲日本激情| 97操综合| 天天狠| 天堂69亚洲精品中文字| 伊人991| 天天躁日日躁AAA片李宗瑞| 九九九不卡| 91在线|亚| 久久无码成人| 日韩精品啪啪啪| 色狠狠综合噜一二三区| 中文字幕一区二区在线日韩精品| 日本熟妇自慰性高潮一区二区三区| 婷婷色在线| 九九九精品成人免费视频小说| 国产精品在线网站| 色婷婷在线视频| 激情天天视频| 五月天精品| 亚洲欧美天堂在线| 国产福利av精彩对白| 成年人黄色| 97精品中文字幕| 99re9在线| 黄色AAAAAAAAAAA大片| 日本媚薬中文字幕在线| 夜夜狠狠躁日日躁色视频| 亚洲av无码成人精品国产| 九九九九热| 中文字幕欧美日本乱码一线二线| www四虎| 国产男女无套视频免费观看| 一个人免费视频观看在线WWW| 精品人妻一区二区三区蜜桃视频| 日本不卡码黄色| 欧美色综合影院| 黄色人人| 国产强奸乱伦欧美| 亚洲综合色图欧美| 精品无码人妻一区二区免费蜜桃| 久久久久13| 国产成人无码网站在线视频| 曰韩操B| 清纯唯美亚洲综合| 国产黑白丝在线| 天天天天天超碰| 欧美欲色| 九九无码久久精品视频| 欧美一级色| 国产人妻天天干精品| 久久精品国产亚洲妲己影视| 日韩啪啪视频| 麻豆尤物视频网| 国产中文字幕在线观看| 亚洲日韩久久精品一区| 欧美色图私拍91| 天天色香欲综合网| 婷婷中文字幕| 婷婷丁香成人| 强奸乱亚洲| 日本一级性爱| 操逼逼无码| 欧美大香蕉专区网| 欧美日韩操操操| 日韩精品免费高清视频在线| 美女视频尤物网在线看| 亚洲男人久久综合天堂| 国产真乱mangent| 青娱乐999| 日韩免费三级黄片电影| 无码人妻一区二区三区色欲aⅴ| 啊啊啊无码| 99re免费| 13小男生GAY自慰脱裤子| 最新亚洲黄色免费电影| 国产成人91一区二区三区| 亚洲图片另类| 东京热一区二区中文字幕| 欧美激情久操网| 无码精品久久久久久亚洲| 九九九九精品| 日本一区二区三区午夜观看| 飘花国产午夜精品不卡| 亚洲国产一区二区入口| 亚洲无码久久久久久久| 日本午夜福利影院| 激情丁香五月婷婷| 婷婷四五区| 爱欲AV| 中文幕97| 欧美,日韩,中文,另类| 97美日韩视频| 亚洲天堂精品日韩电影| 久久国产熟女影院| 精品一区二区综合熟妇| 欧美日韩性爱精品| 人妻天天操天天爽视频免费| 人人澡综合涩| 青青操视频在线| 91 综合网| 亚洲欧美成人网站AAA| 日日夜夜精品| 九九色图| 中文字幕天天操| 欧美第五页| 不卡av免费在线网址| 91丨豆花丨熟女| 色婷网| 观看视频图片一区二区三区| 超碰这里有精品| 另类图片天天影视| 亚洲蜜乳av| 亚洲激情网一二三四区| 牛牛久久国产精品视频一二三| 一本一道久久综合久久| 黄色免费网| 亚洲AV成人无码一区二区三区在线观看| 欧美亚性天堂| 欧美第一页| 亚洲av噜噜噜噜噜噜| 中国女人内射6XXXXX| julia高潮后不停追击中出| 日韩钢筋无码高清啾啾啾| 校园春色美腿丝袜 | 免费观看国产不卡av| 久久婷婷五月天| 久久97超碰香蕉| 牛牛AV人人夜夜澡人人爽| 99日精品欧美国产| 91久久堂| 国产黄色剧情影片麻豆免费播放| 久久香蕉国产线看观看猫咪av| 精品久久久久瑟瑟| 97超级久久| 欧美日韩国产高清在线一二三区 | 99少妇内射| 波多野42部无码喷潮在线观看 | 情色图区| 天天做日日做天天欢。| 东北女人的毛片| 91天堂网| 91精品久久久久久综合五月天| 另类 综合 日韩 欧美 亚洲| 97视频在线播放| 熟女突然公开看18禁影片| 99蜜桃臀亚洲成人在线观看| 91综合色噜噜| 亚洲少妇喷视频看| 国产蜜臀精品一区二区尤物| 91成人久久| 婷婷15月天青娱乐| 嫩草美女久久| 超碰97色色| 富女玩鸭子一级毛片| 久操综合在线| 久久久久久久唑| 亚洲精品视频在线播放| 97精品视频在线播放| 日韩欧美tv一区二区在线观看| 久久伊人网视频一区二区三区| 亚洲久久久| 91精品综合久久久久久五月丁香| 人妻少妇无码| 欧亚在线视频| 亚洲资源吧| 91精品丝袜在线观看| 久久熟女久| 日韩9999| 日韩国产十八禁| 青娱乐999| 亚洲精品色| 成人性爱免费播放| 麻豆天美传媒在线视频天堂| 91久久九九精品国产综合| 亚洲乱色视频一区、二区在线| 久久男人的天堂| 97干色天堂| 操逼日批| www被窝色com| 最新国产亚洲精品精品国产亚洲综合| 男女香蕉一区二区| 国产大学生高潮在线播放| 美女爽到高潮91| 婷婷五月天网| 欧美第一页| 精品无人区麻豆乱码久久久| 亚洲 日本 国产 综合| 伊人991| 99精品视频在线观看免费| 亚洲怡春院| 婷婷五月色| 亚洲图片欧美色图| 1区2区3区中文字幕日韩| 天天综合网日韩7799| 国产精品粉嫩福利在线| 久热婷婷| 国产精品直播在线观看直播| 亚洲精品蜜桃久久久久久久| 欧美黑人精品一区二区| 日韩在线电影| 久草婷婷| 九九色逼| 欧美亚洲国产91在线| 超碰无码五月97| 大香蕉婷婷| 熟女这里只有精品6| 少妇高潮喷水无套久久久久久| 六月婷婷激情| 午夜激情成人在线观看| 0755午夜福利视频| 亚洲精品欧美专业| 亚洲精品国产精品乱码不99| 天天看天天日| 蜜臀一二三区| 涩爱AV在线| 亚洲中文字幕三级在线| 亚洲国产成人精品久久久国产成人一区二区 | 亚洲AV噜噜狠狠网址蜜桃动漫| 少妇贴图| 日欧毛片久久| 丝袜美腿欧美| 亚洲高清无码AAA久久久精品| 亚洲综合电影| 久久激情四射婷婷丁香五月天| 亚洲少妇诱惑| 国产超碰在线| 日韩精品中文字幕一| 91这里只有精品| 久久久性少妇| 精品国产乱码久久久兰草影视| 人妻加勒比东京热| 五月天玖玖资源站| 少妇一级婬片免费放一级a性色.| 97干在线视频| 中文字幕av片| 国产一区二区久久| 熟女一区二区| 91在线欧色| 欧美久热| 亚洲aV性爱| 一区二区影院| 在线综合 亚洲 欧美中文字幕| 青青草国产欧美非洲黑人| 2003天天干夜夜操| 97碰碰日本乱偷人妻中文的| 中文字幕视频在线观看一区二区| 夜夜草网站| 亚洲一区二区性爱电影| 亚洲欧美自拍偷拍| 99视频这有这里有精品| 欧美欧美啪啪视频| 97亚洲欧美| 熟妇色99| 狼人狠干| 午夜精品久久久久久久久久久久久| 欧美性少妇| 一区二区播放| 欧美色图亚洲色,麻豆| 九九亚洲色在线观看| 一本久久精品中文字| 天天天天做夜夜夜夜做| 久超超碰| 精品国产国产AV| 77国产精品| 中文久久96| 夜夜免费视频| 日日AAvv| 欧美成人精品欧美一级乱黄一区二…| 国产夫妻性生活视频| 日韩青久久| 啊啊啊骚| 老熟女网站| 2017av无码免费无线播| 人人模人人看| 超碰国产精品无码| 做爱A级亚欧| 欧美,日韩,亚洲视频| 操逼日韩无码 | 久久久九九网站| 五月婷婷六月天| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 91九色精品熟女内射| 在线99热| 炮色五月| 试看福利| 亚洲玖玖爱| 美女91在线| 精品国模无码| 一区操逼日比视频| 成年女人18级毛片毛片免费观看| 丁香五月天激情| 天天看天天综合成人网| 欧美大香蕉97| 九七人妻在线| 人人操人人肉久久精品| 91免费看一区二区三区| 樱花蜜乳av| 日韩一级免费性爱| 欧美九9 9 9| 日韩99神马视频播放| 激情婷婷丁香| 亚洲天堂2020| 97人人夜夜精品视频| 亚洲国产午夜真人一级片中文字幕精品黄网站 | 日韩乱码Av| 亚洲天堂情色| 色九九久九九| 一级性爱视频免费在线| 国产乱人伦AVA麻豆软件.| 亚洲人妻av| 亚州再线| 老熟乱一区二区三区四区| 日本人妻最新在线中| 欧美日韩在线国产在线| 久久久久免费少妇| 日日做夜狠狠爱欧美黑人| 麻豆尤物视频网| 日本一区视频在线观看| 亚洲欧洲另类| 二三四区精品| 国产强奸乱伦第1页| 强奸乱伦大香蕉网| 蜜臀亚洲中文| 亚洲女优有码无码高清| 超清福利精品视频在线| 99久视频| 亚av顶级裸体一区二区三区四区五区 | 人人妻人人色| 91亚洲人| 特级丰满少妇一级AAAA爱毛片| 97超碰美国| 另类图片五月天| 少妇人妻太紧太深av| 欧日韩不卡视.频| wuyechaopeng| 日韩欧美成人午夜福利| 欧美激情综合色综合啪啪五月| 97在线观看免费视频l| 狠狠干91| 激情六月婷婷| 欧亚日韩综合精品国产| 成人av毛片在线观看| 91狠狠色丁香婷婷综合久久| 久久同城AV| 色呦呦国产精品免费看| 狠狠操狠狠插| 欧美人妻熟女在线| 18禁网站在线播放| 国产AV人人 夜夜人人澡| 97精品免费视频网站| 亚洲国产成人高清在线| 国产视频小说| 台湾成人无码AV| 鸥美插入视频| 日韩欧美操逼xxx| 91女在线观看| 综合网欧美| 日韩另类色图| 天天久久| 久久99综合| 中文字幕一区二区无码成人| 色综合尤物| 色五月AV在线| 欧美日韩国内不卡| 嫩草 我啊~嗯~在线| 这里只有精品视频在线观看麻豆| 久久中出在线| 天天夜躁日日躁狠狠2002| 伊人大香蕉在线| 日韩成人无码| 一区中文字幕二区日韩| 丰满人妻被猛烈进入中| 欧美在线色图| 激情五月综合开心五月| 日韩99神马视频播放| 精品久久久久久无码| 青青操在线亚洲视频观看欧美在线| 精品蜜乳AV免费观看| av在线人气| 可以免费看黄片的视频| 人妻 欧美 中文| 黄色av网站在线播放| 国产成人精品午夜福利| 日韩激情啪啪| 精品一区二区三区蜜桃| 天美传媒一二三区永久网站| 国产精品人妻无码久久久互動交流| 欧美综合97www| 精品成人无码| 四虎免费视频| 欧美激情综合| 日韩国产精品人妻无码久久久| 5252色欧美在线| 日本激情免费大片| 美女t无毒不卡不卡| 另类图片五月| 国产一区二区三区免费视频在性观看 | 亚洲精品一区二区免费在线观看| av在线免费一区二区| 91无码人妻精品一区二区三区蜜桃| 少妇超碰在线| 夜夜操美女| 欧美色道啊| 天天综合网国产| 激情五月天插| 97色操| 淫色网综合| 亚洲成人福利电影免费 | 麻豆蜜桃视频在线观看| 日日操免费视频| 亚洲交换| 超碰97资源中文字幕| 强奸乱伦中文字幕AV| 久久αⅴ| 超碰天天操你比| 五月天激情婷婷| 欧美亚洲第一页| 人人澡人人干| 亚洲男人综合网| 五月香婷婷| 国产亚洲中文不卡二区| 91天堂| 狠狠躁天天躁日日躁97| 亚洲欧美校园另类春色| 日韩在线地址一| 欧美日韩操逼动图| 天天92av| 亚洲欧美在线综合| 日韩人体偷拍| 天天操天天舔| 国产精品ⅴ无码大片在线看.| 中文字幕第95页| 成人A片男人的天堂| 97人人射| 在线A日本| 亚欧色图在线激情| 91欧洲入口| 欧美72网页| 97超碰jingpin| 国产亚洲国产超碰| 这里只有精品视频在线观看麻豆| 精品久| 激情久久日韩精品中文字幕麻豆| 日日日啊啊啊| 91麻豆天美国产欧美| 国产尤物AV尤物在线观看不卡| 日产操逼| 射久久| 欧美图片校园春色| 啊啊啊啊啊啊啊在线| 中文字幕乱碼在线| 欧美亚性天堂| 97综合在线| 久久AV无码网址| 91精品国产日韩欧美综合| 人妻另类 专区 欧美 制服| 97伊人| 毛片99-全集电影手机免费观看完整-B029AV| 色好看av| 日韩中文字幕熟妇人妻 | 无码国产精品96久久久久孕妇| 少妇精品| 国产嫩草精品A88AV| 操逼无毒无码免费视频| 97超碰久久色| 亚洲吊色| 天天天天天天天天综合| 1234区中文字幕在线观看_青青草国产在线_日韩一区二区 | 性猛交| 天天狂操夜夜狂日| 又黄又硬又粗又长国产视频| 天天综合站| 97国产精选| 国产97av| 高清视频一区| 美女黄站| 国产成人在线观看网址| 激情综合网亚洲| 在线日韩日本亚洲国产| 国产成人在线观看网址| 欧美性暴力| 中日韩免费看男女操逼大全| 啊啊啊操死我| 日本韩高清无砖码22o| 久久精品国产精品一区 | 精品91摸| 国产性感在线观看| 久久神马影院| 久偷拍欧美日韩三区| 久久久九精品| 超碰久久.com| 久久久久九九九九| 国产一区二区在线播放量| 久久久久久日韩|