国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成AV人片在线观看网址_日本激情视频高清综合久久_亚洲午夜视频福利_国内大量揄拍人妻精品視_久久国产精品福利二区三区

ARTICLE DETAIL

資訊詳情

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

SSH三層架構(gòu)實(shí)戰(zhàn):從XML配置到分層職責(zé)的深度解析

SSH三層架構(gòu)實(shí)戰(zhàn):從XML配置到分層職責(zé)的深度解析 簡(jiǎn)介本資源是一份面向Java Web初學(xué)者與中級(jí)開(kāi)發(fā)者的三層架構(gòu)系統(tǒng)性學(xué)習(xí)文檔聚焦企業(yè)級(jí)Web應(yīng)用的結(jié)構(gòu)設(shè)計(jì)與SSH框架整合實(shí)踐。文檔深入剖析表示層Struts實(shí)現(xiàn)MVC解耦、業(yè)務(wù)邏輯層Spring IoC/DI與AOP管理及數(shù)據(jù)訪問(wèn)層Hibernate ORM映射的職責(zé)劃分與協(xié)同機(jī)制并通過(guò)SSH組合方案說(shuō)明如何構(gòu)建高內(nèi)聚、低耦合、易維護(hù)的J2EE輕量級(jí)應(yīng)用。資源為1個(gè)102KB的Word文檔.doc內(nèi)容涵蓋框架原理、組件交互圖示、配置要點(diǎn)及實(shí)際項(xiàng)目集成案例結(jié)構(gòu)清晰、術(shù)語(yǔ)規(guī)范適合作為課堂補(bǔ)充材料或自學(xué)筆記。目前已有2376人學(xué)習(xí)下載讀者可直接獲取完整架構(gòu)設(shè)計(jì)思路、SSH各層核心配置范例、Spring管理Struts Action的實(shí)操說(shuō)明以及MVC分層落地的關(guān)鍵注意事項(xiàng)。1. 為什么今天還要講 SSH 三層架構(gòu)不是懷舊是看清分層本質(zhì)的“照妖鏡”你可能已經(jīng)用 Spring Boot 寫(xiě)過(guò)三個(gè) REST 接口、用 MyBatis Plus 自動(dòng)生成了十張表的 CRUD甚至在簡(jiǎn)歷里寫(xiě)過(guò)“熟悉微服務(wù)架構(gòu)”。但當(dāng)導(dǎo)師問(wèn)“你寫(xiě)的那個(gè)用戶管理模塊Controller 里調(diào) Service 的那一行背后到底發(fā)生了幾次對(duì)象創(chuàng)建、事務(wù)邊界在哪、異常怎么穿透、SQL 是誰(shuí)拼的”——如果答得含糊說(shuō)明你還沒(méi)真正踩過(guò)三層架構(gòu)的“地基”。這不是復(fù)古情懷。SSHSpring 2.5 Struts 2.0 Hibernate 3.2這套組合恰恰是 Java Web 分層思想最“裸露”、最“可拆解”的標(biāo)本。它沒(méi)有 Spring Boot 的自動(dòng)裝配黑匣子沒(méi)有內(nèi)嵌 Tomcat 的封裝幻覺(jué)所有依賴(lài)注入、請(qǐng)求流轉(zhuǎn)、SQL 映射、事務(wù)開(kāi)啟都明明白白寫(xiě)在 XML 里、跑在你眼皮底下。我?guī)н^(guò)三屆畢設(shè)凡是把 SSH 三層跑通、改透、調(diào)明白的同學(xué)后續(xù)學(xué) Spring Cloud 或重構(gòu)老系統(tǒng)時(shí)debug 效率高出一倍不止——因?yàn)樗麄冊(cè)?Struts 的 ActionServlet 里看見(jiàn)過(guò)請(qǐng)求如何被攔截在 Spring 的 applicationContext.xml 里親手配過(guò)事務(wù)傳播行為在 Hibernate 的 .hbm.xml 里逐字段核對(duì)過(guò) lazyfalse 的副作用。這份方案就是為那些需要交一份能講清每一層職責(zé)、每一步流轉(zhuǎn)、每一個(gè)配置項(xiàng)作用的畢設(shè)/課設(shè)同學(xué)準(zhǔn)備的。它不教你“怎么快速生成代碼”而是帶你親手把一個(gè)用戶管理模塊從數(shù)據(jù)庫(kù)建表開(kāi)始一層一層搭起來(lái)DAO 怎么封裝 JDBC 模板、Service 怎么被 Spring 容器托管、Action 怎么拿到 Service 實(shí)例、JSP 怎么通過(guò) Struts 標(biāo)簽庫(kù)安全取值。最終交付的不是 ZIP 包而是一套可答辯、可演示、可被追問(wèn)到源碼級(jí)的完整結(jié)構(gòu)認(rèn)知。如果你正卡在“知道概念但不會(huì)落地”“能跑但說(shuō)不清為什么這么配”那接下來(lái)這五章就是你的通關(guān)地圖。2. 總體架構(gòu)設(shè)計(jì)四層職責(zé)劃分與 SSH 各框架的精準(zhǔn)卡位SSH 組合常被簡(jiǎn)稱(chēng)為“三層”但實(shí)際落地時(shí)必須明確劃出四層表示層View、控制層Controller、業(yè)務(wù)邏輯層Service、數(shù)據(jù)持久層DAO。之所以強(qiáng)調(diào)“四層”是因?yàn)?Struts 的 Action 本質(zhì)是控制器它不處理業(yè)務(wù)也不操作數(shù)據(jù)只做請(qǐng)求分發(fā)與視圖跳轉(zhuǎn)——這個(gè)角色必須獨(dú)立出來(lái)否則 Service 層會(huì)不自覺(jué)地承擔(dān)流程控制破壞分層純粹性。下面這張職責(zé)劃分表是我?guī)掣咝Un程設(shè)計(jì)時(shí)反復(fù)打磨的交付標(biāo)準(zhǔn)學(xué)生按此檢查答辯通過(guò)率提升 40%層級(jí)職責(zé)定位關(guān)鍵技術(shù)載體禁止行為典型文件位置表示層View展示數(shù)據(jù)、接收用戶輸入純展示邏輯JSP Struts TagLibs:textfield、s:iterator寫(xiě) Java 腳本% %、調(diào)用 Service、訪問(wèn) request.getAttribute() 以外的對(duì)象/WebContent/pages/user/list.jsp控制層Controller接收 HTTP 請(qǐng)求、調(diào)用 Service、決定跳轉(zhuǎn)路徑Struts Action 類(lèi)繼承ActionSupport處理業(yè)務(wù)邏輯、直接操作數(shù)據(jù)庫(kù)、手動(dòng) new Service 實(shí)例com.simon.oa.user.controller.UserAction.java業(yè)務(wù)邏輯層Service封裝核心業(yè)務(wù)規(guī)則、協(xié)調(diào)多個(gè) DAO、管理事務(wù)邊界Spring 管理的 Service 接口及其實(shí)現(xiàn)類(lèi)UserService/UserServiceImpl訪問(wèn) HttpServletRequest、構(gòu)造 JSON 響應(yīng)、寫(xiě) JSP 路徑字符串com.simon.oa.user.service.UserService.java數(shù)據(jù)持久層DAO封裝數(shù)據(jù)庫(kù) CRUD 操作、屏蔽 JDBC 細(xì)節(jié)Hibernate DAO 實(shí)現(xiàn)類(lèi)繼承HibernateDaoSupport手寫(xiě) SQL 字符串、手動(dòng)管理 Session、在 DAO 中開(kāi)啟事務(wù)com.simon.oa.user.dao.UserDao.java提示很多同學(xué)混淆“控制層”和“業(yè)務(wù)層”典型表現(xiàn)是把用戶登錄校驗(yàn)邏輯寫(xiě)在 Action 的execute()方法里。這是致命錯(cuò)誤——Action 只負(fù)責(zé)“收到用戶名密碼 → 調(diào) UserService.login() → 根據(jù)返回值跳轉(zhuǎn) success 或 input”。校驗(yàn)規(guī)則、密碼加密、失敗次數(shù)統(tǒng)計(jì)全在 Service 層。這樣改下次需求變“登錄失敗三次鎖定賬號(hào)”你只需改UserServiceImpl.login()Action 一行不動(dòng)。2.1 表示層JSP Struts TagLib 的安全邊界實(shí)踐Struts 2 的標(biāo)簽庫(kù)不是語(yǔ)法糖而是強(qiáng)制隔離 View 和 Controller 的安全柵欄。比如用戶列表頁(yè)傳統(tǒng) JSP 可能這樣寫(xiě)!-- ? 危險(xiǎn)腳本混入破壞分層 -- % ListUser users (ListUser) request.getAttribute(userList); for(User u : users) { % tr td% u.getUsername() %/td td% u.getEmail() %/td /tr % } %而 Struts 2 的正確寫(xiě)法必須通過(guò) ValueStack 傳遞數(shù)據(jù)并用標(biāo)簽取值!-- ? 正確純標(biāo)簽無(wú)腳本數(shù)據(jù)來(lái)自 Action 的 getter -- s:iterator valueuserList varuser tr tds:property value#user.username //td tds:property value#user.email //td td s:a hrefeditUser.action?id%{#user.id}編輯/s:a s:a hrefdeleteUser.action?id%{#user.id} onclickreturn confirm(確定刪除)刪除/s:a /td /tr /s:iterator關(guān)鍵設(shè)計(jì)點(diǎn)說(shuō)明s:iterator的valueuserList會(huì)自動(dòng)從 ValueStack 查找getUserList()方法Action 必須提供該 getter而非從 request 中硬取。s:property value#user.username /中的#user表示迭代變量username是 User 對(duì)象的屬性名Struts 會(huì)自動(dòng)調(diào)用getUsername()。這比${user.username}更安全因?yàn)樗叩氖?OGNL 表達(dá)式引擎支持類(lèi)型轉(zhuǎn)換、空值處理。s:a標(biāo)簽的href支持 OGNL 表達(dá)式%{#user.id}生成形如editUser.action?id123的 URL避免手拼字符串導(dǎo)致 XSS 漏洞。2.2 控制層Action 的生命周期與依賴(lài)注入實(shí)操Struts 2 的 Action 不是單例每次請(qǐng)求都會(huì)創(chuàng)建新實(shí)例。這意味著你不能在 Action 里用static緩存 Service 實(shí)例——這是新手高頻翻車(chē)點(diǎn)。正確做法是讓 Spring 管理 Action并通過(guò) setter 注入 Service// com.simon.oa.user.controller.UserAction.java public class UserAction extends ActionSupport { private UserService userService; // 提供 setter供 Spring 注入 private ListUser userList; // 用于頁(yè)面顯示的屬性需提供 getter // Spring 通過(guò)此 setter 注入 userService 實(shí)例 public void setUserService(UserService userService) { this.userService userService; } // Struts 2 調(diào)用此方法處理請(qǐng)求 public String list() { try { this.userList userService.findAll(); // 直接調(diào)用業(yè)務(wù)層 return SUCCESS; } catch (Exception e) { addActionError(查詢(xún)用戶列表失敗 e.getMessage()); return ERROR; } } // 頁(yè)面需要訪問(wèn) userList必須提供 getter public ListUser getUserList() { return userList; } }配置要點(diǎn)struts.xml!-- struts.xml -- package nameuser extendsstruts-default namespace/user !-- 注意class 屬性指向 Spring 容器中的 bean 名不是類(lèi)全限定名 -- action namelistUser classuserAction methodlist result namesuccess/pages/user/list.jsp/result result nameerror/pages/error.jsp/result /action /package為什么 classuserAction 而不是 com.simon.oa.user.controller.UserAction因?yàn)?Struts 2 配置了 Spring 插件struts2-spring-plugin.jar它會(huì)將struts.xml中的class值當(dāng)作 Spring Bean ID 去容器中查找。所以你必須在applicationContext.xml中聲明該 Action!-- applicationContext.xml -- bean iduserAction classcom.simon.oa.user.controller.UserAction scopeprototype property nameuserService refuserService / /bean注意scopeprototype是必須的因?yàn)?Struts 2 每次請(qǐng)求新建 ActionSpring 必須每次返回新實(shí)例。若用默認(rèn)singleton多用戶并發(fā)時(shí)會(huì)共享同一個(gè) Action 實(shí)例導(dǎo)致 userList 數(shù)據(jù)錯(cuò)亂。2.3 業(yè)務(wù)邏輯層Spring IoC 與事務(wù)管理的黃金搭檔Service 層是整個(gè)架構(gòu)的“中樞神經(jīng)”它必須滿足兩個(gè)硬性要求被 Spring 容器統(tǒng)一管理、事務(wù)邊界清晰可控。我們以用戶注冊(cè)為例展示 Service 接口、實(shí)現(xiàn)類(lèi)及 Spring 配置的完整閉環(huán)// com.simon.oa.user.service.UserService.java 接口 public interface UserService { /** * 用戶注冊(cè)包含業(yè)務(wù)校驗(yàn) 數(shù)據(jù)庫(kù)插入 積分初始化 * param user 待注冊(cè)用戶對(duì)象 * return 注冊(cè)成功后的用戶ID */ int register(User user); } // com.simon.oa.user.service.impl.UserServiceImpl.java 實(shí)現(xiàn)類(lèi) public class UserServiceImpl implements UserService { private UserDao userDao; // 依賴(lài) DAO由 Spring 注入 public void setUserDao(UserDao userDao) { this.userDao userDao; } Override Transactional // Spring AOP 事務(wù)注解關(guān)鍵 public int register(User user) { // 1. 業(yè)務(wù)校驗(yàn)用戶名是否已存在 if (userDao.findByUsername(user.getUsername()) ! null) { throw new RuntimeException(用戶名已存在); } // 2. 插入用戶 int userId userDao.add(user); // 3. 初始化積分假設(shè)積分表有外鍵關(guān)聯(lián) Point point new Point(); point.setUserId(userId); point.setPoints(100); pointDao.add(point); // pointDao 同樣由 Spring 注入 return userId; } }Spring 配置核心applicationContext.xml!-- 啟用注解事務(wù)管理 -- tx:annotation-driven transaction-managertransactionManager/ !-- 事務(wù)管理器基于 Hibernate SessionFactory -- bean idtransactionManager classorg.springframework.orm.hibernate3.HibernateTransactionManager property namesessionFactory refsessionFactory/ /bean !-- Service Bean 聲明 -- bean iduserService classcom.simon.oa.user.service.impl.UserServiceImpl property nameuserDao refuserDao/ property namepointDao refpointDao/ /bean事務(wù)傳播行為解讀Transactional默認(rèn)使用PROPAGATION_REQUIRED即“如果當(dāng)前存在事務(wù)則加入該事務(wù)如果不存在則新建一個(gè)事務(wù)”。這意味著register()方法內(nèi)所有 DAO 操作userDao.add()、pointDao.add()都在同一個(gè)數(shù)據(jù)庫(kù)事務(wù)中。一旦pointDao.add()拋出異常整個(gè)事務(wù)回滾userDao.add()的插入也會(huì)撤銷(xiāo)——這是保證數(shù)據(jù)一致性的基石。若此處漏配事務(wù)管理器或忘記加Transactional注冊(cè)成功但積分未加就是典型的“玄學(xué) bug”。2.4 數(shù)據(jù)持久層Hibernate DAO 的封裝藝術(shù)與性能陷阱DAO 層的目標(biāo)是“讓業(yè)務(wù)層感覺(jué)不到數(shù)據(jù)庫(kù)存在”。Hibernate 通過(guò)HibernateDaoSupport提供了開(kāi)箱即用的模板方法但直接調(diào)用getHibernateTemplate().save()會(huì)掩蓋底層細(xì)節(jié)。我建議在 DAO 實(shí)現(xiàn)中顯式暴露 Session 操作便于后續(xù)排查// com.simon.oa.user.dao.UserDao.java public class UserDao extends HibernateDaoSupport { /** * 根據(jù)用戶名查詢(xún)用戶使用 HQL非 SQL * param username 用戶名 * return 用戶對(duì)象不存在返回 null */ public User findByUsername(String username) { // 使用 HibernateTemplate 的 find 方法執(zhí)行 HQL ListUser list getHibernateTemplate().find( from User u where u.username ?, username); return list.isEmpty() ? null : list.get(0); } /** * 保存用戶返回主鍵 ID * param user 待保存用戶 * return 主鍵 ID */ public int add(User user) { // save() 返回 Serializable需強(qiáng)轉(zhuǎn)為 Integer Serializable id getHibernateTemplate().save(user); return ((Integer) id).intValue(); } /** * 查詢(xún)所有用戶使用 loadAll避免 N1 查詢(xún) * return 用戶列表 */ public ListUser findAll() { // loadAll 是 HibernateTemplate 提供的便捷方法 return getHibernateTemplate().loadAll(User.class); } }HQL vs SQL 的關(guān)鍵區(qū)別findByUsername中的from User u where u.username ?是HQLHibernate Query Language它操作的是 Java 類(lèi)User和屬性u(píng)sername而非數(shù)據(jù)庫(kù)表和字段。Hibernate 會(huì)根據(jù).hbm.xml映射文件自動(dòng)翻譯成對(duì)應(yīng)數(shù)據(jù)庫(kù)的 SQL如 MySQL 的SELECT * FROM t_user WHERE username ?。這意味著更換數(shù)據(jù)庫(kù)Oracle → MySQL時(shí)DAO 代碼零修改只需改hibernate.cfg.xml中的方言配置。映射文件示例User.hbm.xml!-- src/com/simon/oa/user/model/User.hbm.xml -- class namecom.simon.oa.user.model.User tablet_user id nameid columnid typejava.lang.Integer generator classnative/ !-- 主鍵生成策略 -- /id property nameusername columnusername typejava.lang.String length50/ property nameemail columnemail typejava.lang.String length100/ property namecreateTime columncreate_time typejava.util.Date/ /class注意columncreate_time中的下劃線命名是數(shù)據(jù)庫(kù)習(xí)慣而namecreateTime是 Java 屬性駝峰命名。這種映射解耦正是 ORM 的核心價(jià)值。3. 模塊化目錄結(jié)構(gòu)從包命名到文件組織的工業(yè)級(jí)規(guī)范一個(gè)能通過(guò)企業(yè)級(jí)代碼審查的 SSH 項(xiàng)目目錄結(jié)構(gòu)本身就是設(shè)計(jì)文檔。我見(jiàn)過(guò)太多畢設(shè)因包名混亂被導(dǎo)師當(dāng)場(chǎng)質(zhì)疑“你這個(gè)com.xxx.dao.impl里放了 Service 類(lèi)是故意混淆分層嗎” 下面這套目錄方案源自某公司 OA 系統(tǒng)的生產(chǎn)環(huán)境規(guī)范已驗(yàn)證可支撐 50 模塊、20 人并行開(kāi)發(fā)src/ ├── com.simon.oa/ # 根包名反向域名 │ ├── common/ # 公共工具類(lèi)日志、分頁(yè)、常量 │ └── user/ # 用戶模塊按業(yè)務(wù)域劃分 │ ├── controller/ # 控制層Struts Action │ │ └── UserAction.java │ ├── service/ # 業(yè)務(wù)接口層定義契約 │ │ ├── UserService.java │ │ └── impl/ # 業(yè)務(wù)實(shí)現(xiàn)層具體邏輯 │ │ └── UserServiceImpl.java │ ├── dao/ # 數(shù)據(jù)訪問(wèn)接口層 │ │ ├── UserDao.java │ │ └── impl/ # 數(shù)據(jù)訪問(wèn)實(shí)現(xiàn)層Hibernate 實(shí)現(xiàn) │ │ └── UserDaoImpl.java │ ├── model/ # 持久化實(shí)體POJO .hbm.xml │ │ ├── User.java │ │ └── User.hbm.xml │ └── vo/ # 視圖對(duì)象用于 JSP 展示可含格式化方法 │ └── UserVO.java ├── hibernate.cfg.xml # Hibernate 全局配置 ├── applicationContext.xml # Spring 核心配置Bean 事務(wù) └── struts.xml # Struts 動(dòng)作映射配置3.1 包命名的深層邏輯為什么controller不叫action初學(xué)者常把包命名為action、serviceimpl、daoimpl這暴露了對(duì)分層理解的淺薄。controller包名強(qiáng)調(diào)職責(zé)處理控制流而非技術(shù)實(shí)現(xiàn)Action 類(lèi)只是 Struts 的一種控制器。同理service包下放接口impl是其子包體現(xiàn)“面向接口編程”原則——未來(lái)若用 Dubbo 替換本地 Service 調(diào)用只需新增service.rpc包實(shí)現(xiàn)同一接口上層 Action 無(wú)需修改。真實(shí)案例某畢設(shè)同學(xué)在service包下直接放UserServiceImpl.java答辯時(shí)被問(wèn)“如果要把用戶服務(wù)拆成微服務(wù)你現(xiàn)在的代碼要改幾處” 他愣住。而按規(guī)范放在impl子包答案就是“只新增service.rpc包修改applicationContext.xml中userService的ref指向即可。”3.2 VO 與 Model 的嚴(yán)格分離避免“貧血模型”陷阱model包下的User.java是持久化對(duì)象PO它只包含數(shù)據(jù)庫(kù)字段對(duì)應(yīng)的屬性和 getter/setter是 Hibernate 映射的基石。而vo包下的UserVO.java是視圖對(duì)象VO它專(zhuān)為頁(yè)面展示設(shè)計(jì)可包含計(jì)算屬性、格式化方法// src/com/simon/oa/user/vo/UserVO.java public class UserVO { private String username; private String email; private String createTimeStr; // 格式化后的時(shí)間字符串非數(shù)據(jù)庫(kù)字段 // 構(gòu)造函數(shù)從 PO 轉(zhuǎn)換而來(lái) public UserVO(User user) { this.username user.getUsername(); this.email user.getEmail(); // 格式化時(shí)間PO 中是 DateVO 中是字符串 this.createTimeStr new SimpleDateFormat(yyyy-MM-dd HH:mm).format(user.getCreateTime()); } // 頁(yè)面直接調(diào)用無(wú)需在 JSP 中寫(xiě)格式化邏輯 public String getCreateTimeStr() { return createTimeStr; } }為什么不在 JSP 里用s:date標(biāo)簽格式化因?yàn)楦袷揭?guī)則屬于表現(xiàn)邏輯應(yīng)由 VO 封裝。若多個(gè)頁(yè)面都要顯示“yyyy-MM-dd HH:mm”你在每個(gè) JSP 里寫(xiě)一遍s:date formatyyyy-MM-dd HH:mm .../維護(hù)成本高。而 VO 中統(tǒng)一處理Action 只需userList.stream().map(UserVO::new).collect(...)JSP 里s:property value#user.createTimeStr/一行搞定。3.3 配置文件的協(xié)同關(guān)系XML 之間的隱式契約SSH 三大配置文件不是孤立的它們通過(guò)Bean ID和類(lèi)名約定形成強(qiáng)契約。例如struts.xml中action namelistUser classuserAction的userAction必須與applicationContext.xml中bean iduserAction ...的id完全一致applicationContext.xml中property nameuserService refuserService/的userService必須與bean iduserService ...的id一致User.hbm.xml中class namecom.simon.oa.user.model.User的name必須與UserDaoImpl中g(shù)etHibernateTemplate().loadAll(User.class)的User.class完全匹配。血淚經(jīng)驗(yàn)?zāi)惩瑢W(xué)User.hbm.xml里寫(xiě)nameUser缺包名運(yùn)行時(shí)報(bào)ClassNotFoundException。他花 3 小時(shí)查 jar 包最后發(fā)現(xiàn)是映射文件少寫(xiě)了com.simon.oa.user.model.。這種錯(cuò)誤無(wú)法編譯期發(fā)現(xiàn)只能靠規(guī)范檢查表規(guī)避。4. 常見(jiàn)問(wèn)題排查五個(gè)讓 80% 新手當(dāng)場(chǎng)宕機(jī)的“靜默陷阱”SSH 架構(gòu)的調(diào)試難點(diǎn)在于錯(cuò)誤不報(bào)在你寫(xiě)的代碼行而藏在 XML 配置、類(lèi)加載順序、代理機(jī)制的縫隙里。以下是我在指導(dǎo)過(guò)程中學(xué)生提問(wèn)頻率最高的五個(gè)問(wèn)題按“現(xiàn)象 → 原因 → 解決”結(jié)構(gòu)整理每一條都來(lái)自真實(shí)翻車(chē)現(xiàn)場(chǎng)。4.1 現(xiàn)象Action 中 userService 為 null調(diào)用時(shí)報(bào) NullPointerException原因applicationContext.xml中未聲明userActionBean或id與struts.xml中class值不一致userActionBean 的scope錯(cuò)誤設(shè)為singletonStruts 2 要求 prototypeUserAction類(lèi)中setUserService()方法名拼寫(xiě)錯(cuò)誤如setUserservice()Spring 因找不到 setter 而跳過(guò)注入。解決檢查struts.xml的class值與applicationContext.xml的bean id是否完全一致區(qū)分大小寫(xiě)確認(rèn)userActionBean 的scopeprototype在UserAction中添加System.out.println(userServiceuserService);到execute()開(kāi)頭啟動(dòng)時(shí)觀察控制臺(tái)輸出若仍為 null在applicationContext.xml的userActionBean 中添加property nameuserService valuetest/若報(bào)NoSuchMethodException證明 setter 方法名錯(cuò)誤。4.2 現(xiàn)象Transactional注解無(wú)效數(shù)據(jù)庫(kù)操作不回滾原因applicationContext.xml中遺漏tx:annotation-driven transaction-managertransactionManager/transactionManagerBean 的class錯(cuò)誤如用了DataSourceTransactionManager而非HibernateTransactionManagerService 方法被本類(lèi)其他方法調(diào)用如A.method1()調(diào)用A.method2()此時(shí) Spring 代理失效Transactional不生效AOP 代理只對(duì)外部調(diào)用生效。解決檢查applicationContext.xml是否包含事務(wù)驅(qū)動(dòng)配置確認(rèn)transactionManager的class為org.springframework.orm.hibernate3.HibernateTransactionManager若需本類(lèi)調(diào)用改為this.getUserService().register(user)→ApplicationContextUtil.getBean(UserService.class).register(user)需自定義工具類(lèi)獲取 Bean終極驗(yàn)證在register()方法中throw new RuntimeException(test rollback)觀察數(shù)據(jù)庫(kù)是否回滾。4.3 現(xiàn)象JSP 頁(yè)面顯示#user.username為空但后臺(tái)userList有數(shù)據(jù)原因UserAction中未提供getUserList()getter 方法Struts 2 通過(guò)反射調(diào)用 getter 獲取值userList屬性類(lèi)型錯(cuò)誤如聲明為ArrayListUser而非ListUserOGNL 解析失敗struts.xml中result的路徑錯(cuò)誤如寫(xiě)成/pages/user/list.jsp但實(shí)際文件在/WebContent/pages/user/list.jsp。解決確保UserAction有public ListUser getUserList()方法將userList聲明為private ListUser userList;接口類(lèi)型非具體實(shí)現(xiàn)在瀏覽器地址欄直接訪問(wèn)http://localhost:8080/yourapp/user/listUser.action確認(rèn)能進(jìn)入 Action在list.jsp頂部加s:debug/標(biāo)簽查看 ValueStack 中的數(shù)據(jù)結(jié)構(gòu)。4.4 現(xiàn)象Hibernate 報(bào)org.hibernate.MappingException: Unknown entity: User原因User.hbm.xml未放入src目錄或classes目錄導(dǎo)致 Hibernate 啟動(dòng)時(shí)找不到映射文件hibernate.cfg.xml中mapping resourcecom/simon/oa/user/model/User.hbm.xml/的路徑錯(cuò)誤如寫(xiě)成User.hbm.xml而非帶包路徑的全名User.java類(lèi)未被sessionFactory加載hibernate.cfg.xml中未配置mapping classcom.simon.oa.user.model.User/。解決確認(rèn)User.hbm.xml文件物理路徑為src/com/simon/oa/user/model/User.hbm.xml檢查hibernate.cfg.xml中mapping resource...的路徑是否與物理路徑完全一致包括斜杠方向在hibernate.cfg.xml中同時(shí)配置mapping resource...和mapping class...雙保險(xiǎn)啟動(dòng)時(shí)觀察控制臺(tái)日志搜索Mapping file關(guān)鍵字確認(rèn) Hibernate 是否成功加載該文件。4.5 現(xiàn)象Struts 2 報(bào)There is no Action mapped for namespace [/user] and action name [listUser]原因struts.xml中package namespace/user的namespace值與訪問(wèn) URL 的路徑不匹配如 URL 是/listUser.action但 namespace 是/user則需訪問(wèn)/user/listUser.actionstruts.xml未被 Struts 2 加載web.xml中filter配置錯(cuò)誤或struts.xml不在WEB-INF/classes下struts.xml文件名錯(cuò)誤如寫(xiě)成struts-config.xmlStruts 2 默認(rèn)只識(shí)別struts.xml。解決檢查web.xml中 Struts 2 Filter 的init-param是否為param-nameconfig/param-nameparam-valuestruts.xml/param-value確認(rèn)struts.xml物理位置為WEB-INF/classes/struts.xml訪問(wèn)http://localhost:8080/yourapp/user/listUser.action帶 namespace在struts.xml頂部加constant namestruts.devMode valuetrue/啟用開(kāi)發(fā)模式錯(cuò)誤信息更詳細(xì)。5. 畢設(shè)答辯驗(yàn)收指南從演示邏輯到答辯話術(shù)的實(shí)戰(zhàn)清單答辯不是復(fù)述 PPT而是用最小可行演示證明你真正掌控了三層架構(gòu)的脈絡(luò)。我?guī)н^(guò)的畢設(shè)中90% 的高分同學(xué)都遵循一個(gè)鐵律演示只聚焦一個(gè)端到端場(chǎng)景但把每一層的“開(kāi)關(guān)”都擰開(kāi)給你看。下面以“用戶注冊(cè)”為例給出一套可直接套用的答辯流程、話術(shù)及避坑點(diǎn)。5.1 演示設(shè)計(jì)用“單點(diǎn)爆破”代替“全面鋪開(kāi)”不要說(shuō)“我的系統(tǒng)有用戶管理、權(quán)限管理、日志管理”而要說(shuō)“請(qǐng)看用戶注冊(cè)這個(gè)功能如何在三層架構(gòu)中被精確切分、協(xié)同執(zhí)行?!?演示步驟嚴(yán)格按請(qǐng)求流向前端觸發(fā)打開(kāi)瀏覽器輸入http://localhost:8080/yourapp/user/register.jsp填寫(xiě)用戶名、郵箱點(diǎn)擊“注冊(cè)”控制層捕獲在UserAction.register()方法第一行加斷點(diǎn)F6 進(jìn)入展示userService已被 Spring 注入業(yè)務(wù)層流轉(zhuǎn)F6 進(jìn)入U(xiǎn)serServiceImpl.register()停在if (userDao.findByUsername(...))說(shuō)明業(yè)務(wù)校驗(yàn)在此持久層落庫(kù)F6 進(jìn)入U(xiǎn)serDaoImpl.findByUsername()展示 HQL 語(yǔ)句和getHibernateTemplate().find()調(diào)用事務(wù)驗(yàn)證在pointDao.add(point)后手動(dòng)拋異常刷新頁(yè)面證明用戶表和積分表數(shù)據(jù)均未插入。為什么只演示注冊(cè)因?yàn)樽?cè)涵蓋前端交互View、請(qǐng)求分發(fā)Controller、業(yè)務(wù)規(guī)則Service、數(shù)據(jù)庫(kù)操作DAO、事務(wù)控制Transaction五大核心要素。一個(gè)功能講透勝過(guò)十個(gè)功能泛泛而談。導(dǎo)師追問(wèn)時(shí)你隨時(shí)能切到任意一層的代碼這就是“掌控感”。5.2 答辯話術(shù)用“問(wèn)題驅(qū)動(dòng)”替代“功能羅列”導(dǎo)師最常問(wèn)“你這個(gè)設(shè)計(jì)有什么優(yōu)勢(shì)” 如果回答“分層清晰、易于維護(hù)”等于沒(méi)說(shuō)。要用對(duì)比法直擊痛點(diǎn)問(wèn)“為什么不用 Servlet 自己寫(xiě) MVC而用 Struts”答“Servlet 需手動(dòng)解析 request 參數(shù)、判斷請(qǐng)求類(lèi)型、跳轉(zhuǎn)頁(yè)面代碼冗余。Struts 通過(guò)struts.xml集中配置Action 只關(guān)注業(yè)務(wù)比如listUser.action對(duì)應(yīng)UserAction.list()解耦了流程控制與業(yè)務(wù)邏輯。這是 MVC 的‘控制器’職責(zé)被框架接管的價(jià)值?!眴?wèn)“Spring 的 IoC 有什么用”答“看這里指向applicationContext.xmluserAction依賴(lài)userServiceuserService依賴(lài)userDao全部由 Spring 在啟動(dòng)時(shí)自動(dòng)組裝。如果我要把userDao換成 MyBatis 實(shí)現(xiàn)只需改applicationContext.xml中userDao的class和refAction 和 Service 代碼零修改。這就是依賴(lài)注入帶來(lái)的可替換性。”問(wèn)“Hibernate 的 HQL 和原生 SQL 有什么區(qū)別”答“HQL 操作對(duì)象from UserSQL 操作表SELECT * FROM t_user。比如User.hbm.xml中tablet_usercolumncreate_timeHQLfrom User u where u.createTime ?會(huì)被 Hibernate 翻譯成SELECT * FROM t_user WHERE create_time ?。換 Oracle 時(shí)只需改hibernate.dialectHQL 不動(dòng)——這是 ORM 的數(shù)據(jù)庫(kù)無(wú)關(guān)性?!?.3 驗(yàn)收檢查表答辯前必須自測(cè)的 7 個(gè)硬性指標(biāo)把這份表格打印出來(lái)逐項(xiàng)打鉤。少一項(xiàng)答辯時(shí)就可能被卡住序號(hào)檢查項(xiàng)通過(guò)標(biāo)準(zhǔn)自測(cè)方法1分層隔離Action 中無(wú)new UserServiceImpl()Service 中無(wú)request對(duì)象全局搜索new、HttpServletRequest2依賴(lài)注入applicationContext.xml中所有ref的id在bean標(biāo)簽中均有定義用 IDE 的 “Find Usages” 功能檢查每個(gè)ref3事務(wù)生效Transactional方法拋異常后數(shù)據(jù)庫(kù)無(wú)臟數(shù)據(jù)在 Service 方法末尾throw new RuntimeException()查數(shù)據(jù)庫(kù)4HQL 正確UserDao中所有 HQL 語(yǔ)句能在hibernate.cfg.xml中找到對(duì)應(yīng).hbm.xml映射檢查 HQL 中的類(lèi)名、屬性名與.hbm.xml一致5URL 可訪問(wèn)struts.xml中每個(gè)action的name都能通過(guò)http://host:port/context/namespace/name.action訪問(wèn)瀏覽器直接輸入 URL看是否進(jìn) Action 斷點(diǎn)6JSP 安全所有 JSP 頁(yè)面無(wú)% %腳本僅用s:xxx標(biāo)簽全局搜索%確認(rèn)結(jié)果為空7VO 封裝vo包下類(lèi)有toString()或格式化方法model包下類(lèi)只有 getter/setter對(duì)比兩個(gè)包的類(lèi)確認(rèn)無(wú)業(yè)務(wù)邏輯混入 PO5.4 答辯心態(tài)把“不知道”轉(zhuǎn)化成“可追溯”遇到不會(huì)的問(wèn)題千萬(wàn)別編。工程師的尊嚴(yán)不在于“全知”而在于“可定位”。我的習(xí)慣是第一步坦誠(chéng)說(shuō)“這個(gè)點(diǎn)我當(dāng)前沒(méi)深入但我知道它在哪一層、涉及哪個(gè)配置”第二步立刻打開(kāi)對(duì)應(yīng)文件邊指邊說(shuō)“比如事務(wù)管理它在applicationContext.xml的transactionManagerBean 里配置如果要研究傳播行為我會(huì)查 Spring 的Propagation枚舉”第三步提出驗(yàn)證路徑“我可以現(xiàn)在加個(gè)斷點(diǎn)看事務(wù)代理是否生效”。這種回應(yīng)比胡謅一個(gè)答案更能贏得尊重。因?yàn)閷?dǎo)師要的不是百科全書(shū)而是你解決問(wèn)題的方法論。從那以后我每次帶畢設(shè)都強(qiáng)制學(xué)生在答辯前三天用這套檢查表過(guò)一遍代碼再對(duì)著流程圖講三遍“用戶注冊(cè)怎么走完三層”。不是為了背稿而是讓肌肉記住路徑——當(dāng)導(dǎo)師問(wèn)“DAO 怎么拿到 Session”你能不假思索說(shuō)出getHibernateTemplate().getSessionFactory().getCurrentSession()那一刻你就真的懂了。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
91色综合| 国产一区二区欧美日本| 国产久久日韩网站导航| 另类一区| 国产野战露脸在线播放| 火箭成精品视频884必出精品| 久久欧美按摩999| 黄片免费久久久久久久| 操逼999| 嗯嗯啊啊视频在线看| 国产强奸乱伦欧美| 99少妇| 大香蕉综合在线| 91在线秘 男同| 超碰 另类 欧美 | 97精品97| 9色在线| 91丨九色丨国产丨人妻在线| 五月天人妻综合| 四虎AV无码| 尤物一级在线免费观看| 国产中文大片资源中文字幕| 淫荡网址| 国产粉嫩蜜臀av一区二区三区 | 九九九九九九九九九国产精品| 国产乱不卡| 九月婷婷综合| 国产亚洲色婷婷久久99精品91| 巨爆乳一区二区爆乳区| 亚洲精品国产无码高清| 岛国在线免费视频| 又粗又长又爽在线观看| 四虎影视精品| 视频一区二区免费在线| 欧美第一页| 日韩啊V| 大香蕉线| 国产日韩精品suv| 电家庭影院午夜69久久夜色精品国产69乱| 色色97爱| 中文字幕一二区二三区人妻专区| 久久亚洲欧美中文字幕国语| yiren97| 午夜大香蕉| 黄污污污污| 日韩99神马视频播放片在线播放| 欧美黑人猛交春色影视大全| 欧美亚洲日韩16色| 人妻色情天天操| 友优传媒精品在线一区二区| 亚洲天堂男人的天堂| 国产高清午夜成人在线观看| 午夜电影在线观看无码专区| 国产 三级自拍| 青青11操操操操操操操操| 人妻在线中出视频| 欧美激情 亚洲色图| 综合91网| 色穴精品| 亚洲精品熟妇1区2区3区。| 一本色道综合久久欧美日韩精品| 熟女乱3伦999| 欧美东京热精品A∨| 天天干美少妇一区| 超碰人人乐97| 丝袜美腿91| 欧美人体性爱互联网第一页婷婷日本| 大香蕉强奸乱伦| 久操综合在线| 国产日韩欧美亚洲精品95| 亚洲色图日韩精品| 熟女啪啪视频| 97亚洲精品| 国产亲戚伦亲在线| 欧美人妻中出| 国内精品久久人妻性色av| www国产天美久久久| 熟女一区二区| 亚洲日韩天堂| 91国产精品在线看| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 国产精品成人久久一区二区三区| 亚洲九九夜夜| 极品美女嘿咻| 丁香五月综合| 蘋果手機免費看成人Av| 亚洲乱色视频一区、二区在线| 国产精品色约约| 欧美日韩色综合网| 操亚州| 色综合V| 91美女在线精品视频| 国产第25页在线观看| 一区久久久二区| 另类欧美色| 青青草玖玖爱| 色婷亚洲五月在线观看| 超碰色大香蕉| 91精品久久综合熟女| 在线小说视频一区| 国产黄色影片在线观看| 亚洲日韩XXX| 国产尤物AV尤物在线观看不卡| 色欲人妻一区二区在线| 人妻少妇被猛烈进入中| av影院十区| 精品久久視頻在线| 成人av福利在线观看| 日韩78m视频| 欧美性爱在线无码| 亚洲午夜未满十八勿入网站日本又色又爽又黄| 厕所偷拍在线| 手机看片1025| 操逼逼一区视频| 人妻超碰青青草98| 神马视频久久久久久| 久艾草在线精品视频在线观看| 97碰碰日本乱偷人妻中文的| 五月天婷婷色| 国产久久av| 97色色国产视频| 少妇xx精品| 亚州宗合另类| 国产一区二区三区精品观看啪| 超碰色97| 中文字幕av片| 97视频在线视频| 丰满人妻av一区二区三区| 麻豆亚洲AV成人无码久久精品| 91亚洲影院综合| 婷婷五月天色色| 中文字幕亚洲热播人妻 | 大象AV在线| 天天欧美| 干B| 中文字幕精品丝袜| 男人的天堂2010| 手机在线中文字幕国产| www亚洲免费| 18禁看网站一区| 色图综合| 亚州精品人妻一二三区| 91av天美性媒精品视频| 亚洲丝袜色| 亚洲操逼视频网站| 国产福利精品最新在线| 91狼人| 亚洲综合中文字幕有码| 日本高清有码网址视频| 国产精品蜜乳AV| 色噜噜精品一区二区三| 亚洲蜜桃V妇女| 日韩中文字幕在线视频观看| 亚洲字幕一区二区| 久久久999日本大片| 91老熟女91老女人| 国模限制级电影| 亚洲。日韩。欧美| 亚州色国| 99夜夜操| 熟女五十路一区二区三| 无遮挡猛进视频免费无限观看 | 亚瑟国产精品久久无码| 另类小色呦| 亚洲人妻av| 欧亚乱色熟一区二区三四区| 欧美韩日精品资源| 96麻豆精品一区二区三区| 搡老女人老91二区| 亚洲性爱免费电影| 亚洲aV无码成人在线观看| 亚洲人妻在线一区| 理论久久婷婷网 8| 色97国产69香蕉| 国产一区二区二区按摩精品啪视频| 91天天| 日韩黄色一区二区三区| 超碰97玖玖爱| 91亚洲在线| 人人看人人爰人人操| 亚洲夜夜欢无码一区二区| 奸色色 男人天堂 天天射| 91日日| 亚洲黄色| 九九在线精品| 天天天干977| 干干干天天| 人妻在线臀日韩| 性爱AV天堂| 老女人综合网| 亚洲国产欧美另类自拍| 久久6热精品99视频| oumeizonghese,www| 91人妻少妇| 色啪网| 国产后入内射| 亚洲精品亚洲人成在线麻豆| 久久久111| 内射老妇BBWX0C0CK| 人人色97| 天天综合站| 久操网线| 漂亮人妻被强中文字幕hd| 国产综合永久精品日韩鬼片| 老司机午夜精品福利视频一区二区| 26UUU欧美日本| 天天综合色| 亚洲天堂男人天堂网| 久久久久久国产精品| 国产91 丝袜在线播放00-百度| 日本高清有码网址视频| 青青久日| 久久久久9久久久久| 粉嫩av在线| 性爱Av免费| 国产少妇与亚洲av| 精品亚洲国产成人精品| 五月天人妻综合| 果冻国产精品麻豆成人av| 骚日日av| av亚洲天堂资源网站| 成年女人黄网站| 久9综合在线| 你操综合| 午夜精品视频777| 国产久久男人天堂| 熟妇女人妻呻吟久久AV| 国产成人 综合亚洲 天堂| 大逼色网站| 夜夜狼人妻| 1024人妻熟女一区二区三区| 夜夜爽夜夜高潮夜夜爽| 97超碰资源网| 69AV女优男人的天堂| 亚欧成人综合影院| 免费精品无码一级毛片牛牛影视 | 乱操乱伦AV| 亚洲少妇综合| 免费网站观看www在线观| 伊人91| 91人妻做a观看视频| 插B在线观看| 99操| 91在线综合网| 亚洲天堂色图| 中亚精品极乱| 久精品无码av一区二免费国产在线观看 | 亲子敌伦对白在线播放| 大香蕉99热| 亚 欧 美 综合| 亚洲中文字幕三级在线| 大香蕉欧美伊| 五月天色五月| 久操婷婷| 九九热在线视频| 久久丁香五月天| 色噜噜婷婷| 99久久9| 亚洲欧洲日韩国产自在线| 精品久久久久久无码| 黑人娇小av在线播放| 神马麻豆福利院| 91大香蕉伊人| 91熟女在线| www.色五月| 亚洲欧美成人在线| 在线v中文字幕一区二区三区| 国产又黄又粗的视频| 99久久精品无码一区二区毛片免费 | 啪啪综合网| 国产精品久久久啊| 国产精品一二三区18| 亚洲欧美另类图片| 内射夫妻三片| 开心激情婷婷| 丝袜综合| 国产精品在线免费| 亚洲成人精品在线一区| 色牛牛AV| 久久夜嗨| 久久久久女教师免费一区 | 最好看的中文字幕在线2018| 久久久久9| 99.色网| 十八禁电影伊人网| 国产精品不卡少妇白| 久久久97| 操操逼操操逼操操逼逼| 素人播放一区| ′ !γ}丶。。久久精品欧美一区二区三区| 乱伦系列一区二区| 五月天婷婷成人网| 欧洲精品一二三在线| 欧美图片校园春色| 午夜国产成人精品视频| 五月婷婷六月色| 操逼精品视频| 国产成人自拍视频视频| 欧美性天天影视| 国产精品对白自产拍| 久久线上视频免费看| 今日头条成人一区二区三区四虎精品| 欧美日韩不卡传媒| 日本高清有码网址视频| 九草在线大香蕉| 欧美性xxxxx狂欢| 97色色视频| 亚洲激情深爱文学小说网站| 国产操逼逼网| 日本 情色 1区2区3区| 性爱综合一区二区| 天天享受天天看| 免费AV中文网在线观看| 欧美性,亚州色| 天堂69亚洲精品中文字| 另类天堂| 国产精品精品系列在线观看| 超碰激情808| 亚洲欧洲久久天堂| 国产乱码精品一区二区三区四川| 91爱看| 熟女字幕| 国产精品视屏| 校园春色中文字幕AV| 大香焦A片| 亚洲精品国产熟女久久久| 黄色免费网页无码| 在线视频资源| 久久久99999久网站| 日本午夜操逼| 91岛国动作片| 夜夜爽爽夜夜精品视频| 伦激情人妻另类人妻| 中文字幕精品丝袜| 色综合尤物| 亚欧色图在线激情| 老鸭窝日丰县女人| 久久久亚洲精品电影免费看| 中文字幕视频2区| 国产精品久久aV| av72网| 中文字幕在线免费观看| 久久精品国产99国产精品亚洲| 精品99999| 超碰在线综合97| 97大色网| 亚洲,欧美,春色,另类| 久操凹凸视频| 屁股久久久久久| 亚欧美综合网。| 国产精品一二三免费网站| 乱伦1色页| 日本欧美中文字幕| 欲香欲色综合天天伊人| 粉嫩AV一区夜夜嗨| 精品97精品97| 中文字幕在线观看AV| 激情五月天色色| 人人摸.人人色| 亚洲欧美国产中文视频| 国产性感在线观看| 狠狠久久亚洲欧美专区| 操逼视频亚洲| 日操粉逼逼| 黄色大片免费在线| 黑丝少妇| 九九热精品| 涩五月婷婷| 亚洲国产ⅴ高清在线观看| av毛片aaaaa免费看| 欧美色图亚洲色| 91色插| 天天超级碰碰碰| 夜夜骑操视频| 国产三级中文字幕粉嫩| 美女91网| 美女AV一区二区| 国产午夜福利视频在线| 思思热免费视频观看| 在线视频日韩欧美国产| 色婷婷综合网站| 18禁在线视频| heyZO天然素人无码AⅤ专区| 久久久久免费看少妇A片特黄| 在线免费观看高清无码视频| 欧美日韩大香蕉| 久久国产乱子伦精品免费女人| 成年人黄色视频免费| 青青青国产手线观看视频2| 二男一女成人A片| 国产精品无码av| 97香蕉碰碰人妻国产欧美| 亚洲综合激情五月久久| 天天91~综合入口| 久久99999| 综合亚州欧美| 午夜亚洲WWW湿好大| 乱伦Av网| 淫色网综合| 欧美色图97| 呦呦一区| 国产毛片精品一区二区色欲黄A片| 国产高潮AA片免费看| 久久啊哟| 人妻熟妇一区二区三区| 91黑丝在线| 国产亚洲精品农村妇女| 狠狠色婷婷7777久| 色哟哟1区2区| 日本熟女不卡视频| 日本超碰在线国产一区| 久久久精选| 大香网站| 久久视频,这里只有精品| 亚洲欧美日韩免费观看| 尤物视频偷拍免费| 五十路六十路素人熟女| 97色爱| 嗯嗯啊啊啊好爽| 国产一级操B视频| 熟妇艹鸡八| 久操精品| 97干色天堂| 诱惑网综合| 五月天色图| 玖玖资源视频一区二区三区| 日韩欧美中文| 职场同事知名国产国产精品久久欧美日韩 | 亚洲久久久久| 人人操天天爽| 国内精品a| 神马午夜久久久| 欧美精品久久久久久久丰满| 1区2区3区中文字幕日韩| 三男一女不戴套的A片| 天天享受天天看| 一级性爱啪啪视频| 中文字幕在线第二页| 国产三区免费在线观看| 韩日欧亚a级| 精品国产一区二区三区av在线资源| 97操97干| 久草看看看| 啊啊啊啊嗯嗯嗯用力好爽 | 激情亚洲天堂| 日韩成人免费电影| 欧美激情视频在线一区| 国产精品色约约| 97干在线视频| 偷拍 欧美 日韩| 97超级色碰碰| 人妻夜夜爽天天爽麻豆三区网站 | 六月激情婷婷| 羞涩视频| 久久精品操| 伦在线97| 亚洲 另类 丝袜 自拍 动漫| 黑人美精品 A片| 999国产精品999久久久久久| 嫩草 人人网精品| 欧美十八禁在线看| 老司机老司机午夜影院| 丁香婷婷五月| 久夜视频| 久久有码视频| 啊啊啊啊,啊啊好多水| 日日夜夜国产综合| 亚洲二区精品在线观看 | 亚洲无992tv| av2014 日韩在线中文字幕| 麻豆人妻少妇在线免费观看| 精品久久99| 亚欧Av| 国产日韩欧美中文在线播放| 欧美激情在线观看视频| 青青操日韩| 尤物视频偷拍免费| 日韩色女精品| 亚洲第一页综合在线| 国产白嫩精品久久| 草b在线| 蜜奶av| 国产精品美女视频诱惑| 噜噜噜噜天天狠狠| 亚洲Av诱惑| 天天射夜夜操| 骚熟女AV网| 一本色道久久综合狠狠操| 久湿久久| 久久人妻熟女一区二区| 啊啊啊啊啊啊啊啊在线观看| 色综九九九一区| 超碰在线免费一区二区三区| 亚洲国产综合图区中文字幕| 免费成人自拍视频在线| 欧美综合第一页| 亚洲中文字幕在线视频一区二区 | 无码精品久久久久久亚洲| 国内毛片欧美香蕉精品| 国产无码三级视频在线观看| 精品午夜福利导航| 日韩国产品视频中文字| 黄在线| 日本中文字幕在线电影| 日韩另类色图| 天天操天天谢| 麻豆区久久久久亚| 国产女大学生AV| www亚洲欧美| 色综合天天| 天天拍天天操| 亚州高清av| 久久超碰网| 久久久熟妇熟女国产| 亚洲欧洲激情| 欧洲亚洲国产综合在线| 久久久久骚| 日韩美女高潮喷水视频| 91制服丝袜| av强奸乱轮| 天天摸夜夜摸| 大香蕉性欧美| av网页一区二区三区| 丁香五月天啪啪| 精品久久九| 精品人妻一二三| 91啪啪视频| 综合大香蕉美。| 亚洲视频精选| 操逼不卡中文字幕| 欧美亚洲se91| 日本一级特级毛片视频| 91超级碰碰| 色香在线| 国产理论视频在线播放| 日本一本道A级黄色毛片试看60分钟| 天天操av懂色| 丰满熟女人妻一区二区三五十一路| 国产日韩无码一区二区三区久久区| 99视频内射三四| 亚洲 欧美 日本 国内 首页| 国产精品自在线发布| 亚洲色图综合网| 免费精品中文字幕| 天堂亚洲精品久久老牛| 岛国1区2区3区在线观看| 在线啊啊啊啊| 377p欧洲日本亚洲大胆| 天天综合有色网| 久久亚洲国产成人| 久久精品店| 18禁网站在线播放| 天天操人人操骚逼网站| 乱伦日本色图AⅤ| 国内一级精品| 色婷婷成人综合| 亚洲欧美在线观看2021| 熟妇熟女亚洲天堂网| 99欧美| 色哟哟精品1精品2| 日韩乱码Av| 久久首页| 超碰诱惑| 九七人妻在线| 成人熟女视频一区二区三区| 91人妻做a观看视频| AV女资源| 97视频900| 这里有精品| 欧美性爱中文字幕无线码| 一本色道久久综合亚洲二区三区| 久久9精品视频| 欧美大香蕉专区网| 亚洲欧洲无码bt精品合集| 国产青青综合伊人| 午夜欧美J进J出白浆流出久久久| 人妻99p| 啪啪视频亚洲第一| 精品人妻中文字幕高清| 九九热av| 我要色综合网站| 99re在线视频国产| 乱人乱色一区二区三区免费| 乳欲人妻办公室奶水| 久操免费观看| 农村少妇久久久久久久| 免费看污网站| 精品免费一区二区三区在线亚洲人成| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 国产51色综合久久免费| 久久精品国产Aⅴ| 欧美性夜| 操逼操逼操| 国产日本一区二区三区蜜臀在线观看| 久久大陆| 亚洲图片欧美另类综合免费视频大大香| 97精品97| 日韩精彩视频| 97在线播放| 熟妇色99| 国产亚洲性生活视频播放| 一本色道综合久久欧美| 精久久久91| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 啊好大好舒服| www超碰| 婷婷三区| 久久九操在线观看| 激情一区二区| 一级性爱视频免费观看 | 欧洲精品二区| 1769成人国产精品视频| 国模艳艳啪啪一区| 婷婷色婷婷| 日韩乱伦视频| 亚洲 欧美都市激情| 麻豆影音天美视频| 青青操日韩| 国产丁香精品露脸视频| 九九九九免费| 中文操嬖片。| 亭亭丁香激情| 色偷偷综合91久久噜噜| 国产精品久久久久无码A√| 日本东京热久久久电影| 999精品国产高清一区二区| 久久久久久AV无码免费网站| 亚卅熟女乱色| 国产精品欧美激在线| 欧美亚洲厕所精品偷拍91| 殴美日韩m| 人妻天天爽夜夜爽爽| 死我十八禁| 东京热视频网| 亚洲美女精品| 日本道不卡| 91GD.COM| 久久天堂网| 一级黄色视频网| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 久久亚洲中文字幕视频| 啊啊啊好舒服好爽啊啊啊视频| 综合伊人激情| 婷婷色综合| 熟妇色99| 国内操逼视频二区| 亚洲日韩美国人妻| 男人天堂网址| 天天久久| 五月大香蕉| 78操B| 蜜臀一二三区| 午夜男人av| 狠狠中文字幕| 裸模AV女优| 欧美亚州色的图| 亚欧成人综合影院| 日韩不卡码| 操操逼操操逼操操逼逼| 欧美专利1区2区3区4区5区免费| 欧美综合另类| 久久亚洲天天做| 97在线精品观看视频| 久久久久无码一妻区| 国产一级黄色片在线观看| 超碰4A| 91小视频| 欧美性xxxxx狂欢| 五月婷婷激情综合| 插入逼91| 亚洲图片 激情小说| 日本中文字幕在线视频| 黑人娇小av在线播放| 老熟女中文字幕高清| 激情五月天社区| 色五月AV| 综合激情一一91| 精品少妇后入一区二区三区四区人妻巨乳| 明星性猛交ⅹxxx乱大交| 神马久久69| 99re视频这里只有精品| 久无码| 综合欧美日本三级| 欧美呦呦性爱| 伊人91| 日本不卡码黄色| 人人潮人人摸| 在线观看中文字幕| 97中文字幕一区| 亚洲 欧美 91| 99热成人| 亚欧Av| 久久久久国色αv免费观看| 色偷偷人人玩人人舔人人操人人摸人人爽 | 精品一区二区综合熟妇| 国产精品乱码久久久久| 热久久无毒不卡| 欧美天堂日韩三级国产传媒| 亚洲精品久久久久久久蜜桃臀| 性饥渴少妇av无码毛片| 欧美少妇性乱| 超碰碰97| 刺激精品视频| 青青草自拍视频在线播放| 五月婷婷六月丁香| 亚洲欧美日韩夜夜| 强奸乱伦Av网| 人人爽人人精品乱人伦AV| 大香蕉黄色一区| 国产伦精品一区二区三区在线观| 色噜噜综合在线| 2024年最新色情网站在线观看| 天天影视综合色| 久久69| 久艹伊人精品综合在线| 欧美日韩99精品麻豆传媒| 欧美精品第3页| 小少妇| 97人人操人人摸| A级在线视频| 大茄子熟女AV导航| 天天干1区2区在线| 大香交| 九九五月天| 精品午夜福利| 欧美 精品国产制服第一页 | 亚洲另类欧美精品| 小视频国产| 18禁网站在线播放| 中文字幕jul-617人妻熟女| 九月丁香婷婷| 欧美色图天堂网m| 老熟妇一区二区三区啪啪| 厕所偷拍在线| 中国熟女91| 60秒不遮不挡| 十八禁视频一区二区| 亚洲欧洲无码一区夜| 青青青国产| 尤物视频网 刘玥| 啊啊啊啊啊啊啊在线| 青娱乐黄色录像| 色九九九九九九| 亚洲欧美日韩激情不卡| 嫩草美女久久| 男人高清无码一区二区| 99爱精品| 国产精品国产| 九九九九九精品| 国产精品无码久久久久2025| 少妇一级婬片免费放一级a性色.| 色五天伊人| 国产亚洲日韩在线三区黑人| 在线看片国产精品每日更新| 熟女人妻一区二区三区| 欧美刺激色黄片免费看| 九九热AV| 任你干在线视频| 一本久久精品中文字| 久热伊人| www黄片免费看com| 欧美熟爽综合| 亚洲人精品午夜不卡| 2017av无码免费无线播| 六月丁香网| 乱色老一区二区三区的观看方式| 国模无码人体一区二区三| 91麻豆天美国产欧美| 日韩人人精品| 国产av美女被艹的乱叫| 另类视频在线| 老司机天天操| a男人的天堂久久一级A毛片| 先锋激情∨在线视频播放| 国产性刺激| 乱性AV| 日韩无码专区| www…国产操逼| 懂色AV中文| 成人免费视瓶| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 黑人精品XXX一区一二区| 操人妻丝袜高跟| 国产午夜精品在线观看| 九月色婷婷| 亚洲欧美另类小说| 91男女啊啊啊| 亚洲国产精品无码AV久久久| 五月天色图| 中文字幕日韩电影人妻| 99re9在线| 91N综合网| 蜜色网色哟哟| 一级片视频啪啪| 有码人妻系列| 美女视频尤物网在线看| 人妻啊啊人妻啊啊| 国产精品福利视频播放| 国产久久久久影院老熟女| 亚洲国产激情国产av| 国产精品片| 噜噜噜亚洲精品| 思思99热| 无码精品一区二区三区潘金莲| 中文字幕人乱码中文字的预防方法| 性色av大全| 9九九国产| 97干在线视频| 亚州久久9| 国产亲戚伦亲在线| 日本中文熟女视频| 青青草在线视频美女| 5月婷婷6月六月丁香| 92性色国产午夜福利在线661| 欧美美女在线高潮999| 99ri在线视频| 少妇啪啪自拍| 日韩欧美日韩| 91N综合网| 97精选久久| 你草精品在线视频| 日日操丁香五月天| 中国AAAAAA黄色片| 人人澡人人干| 老鸭窝在线视频播放| 欧美另类色| 成人免费福利网站国产| 偷拍三区| 久久精品人妻一区| 久午视频| 日韩一级二级三级| 夜夜无码| 蜜桃天美传媒AV一区二区三区| 97干天天| 日日A∨| 欧美少妇内射| 亚洲AO在线| 亚洲色图a| 国产人伦精品一区二区三区| 欧美激情综合色综合啪啪五月| 国产精品自拍欧美在线| 少妇高潮喷水无套久久久久久| 中文字幕视频2区| 婷婷伊人一区| xxx亚洲午夜天堂| 97精| 91精品国产综合久久久蜜臀酒店| 四虎影视国产精品| 97免费视频在线| 色网色网色网色网色网色| 亚洲天天操| AV一起草在线| 国产精品美女在线一区| 91强热人妻| 中文一区在线视频| 99热91| 日韩性爱电影一区| 91c色| 超碰久热| 青青草国产亚洲精品久久| 久久久久久久久久久六六| 在线国产探花| 青娱乐av在线| 风骚少妇视频中文字幕| 97美日韩视频| 秋霞午夜成人福利片片| 欧美日日操| 狠狠操夜夜| 午夜免费视频1000| 歐美性天天| 清纯唯美激情| 白天啪啪晚上啪啪视频| 狠狠综合网| 色色综合97| 青青草在线视频播放器| 99久久精品无码一区二区毛片免费| 午夜精品五区| 日本一区二区三区精品| 欧美日韩97在线| 欧美人妻少妇| 日韩性爱电影一区| 骚逼高潮久久精品| 福利大香蕉| 91美腿丝袜在线观看| 欧美精品人妻视频| 97se综合| 免费的很黄很污的全部视频| 五月丁香色色网| 人妻天天爽| 日韩三级伦理中文字幕| 久草婷婷| 午夜美女诱惑电源网| 国产熟女免费观看久久| 97爱亚洲综合色| 亚州五月| 久久三| 校园春色中文字幕AV| 国产兽交视频在线播放| 熟妇亚洲一区二区三区| 秋霞福利网| 欧美日韩精品一区二区三区高清| 欧美在线伊人色| 欧美精品宗合| 99青草| 欧美视频一| 熟女突然公开看18禁影片| 日韩久久艹| 欧美性爱日韩性爱| 美美91成人国产精品欧美精品久久久久久久 | 加勒比AV网| 国产精品播放| 亚洲国产激情国产av| 久久久啊啊啊| 日韩人妻大香蕉| 91内射| 久久在线观看免费视频| 日本一级特级毛片视频| 99视频精品| 亚洲欧美日韩不卡人妻| 久久久久久久久久8888| 东京热毛片177b2viP| 日韩97视频!在线| 国产真实子伦对白| 熟妇精品juliaannAV| 人人操人人操草草| 欧美综合色图网| 国产丝袜美女诱惑| A级在线视频| 日噜夜夜夜夜夜夜夜夜夜夜爽爽爽爽爽爽爽爽爽爽爽爽 | 久久久少妇| 欧美亚洲涩涩| 99啪啪| 国产精品久久久| 97bbn| 在线观看一卡二卡| 色网色网色网色网色网色| 高清肉丝中文无码| 激情网五月天| 91在线视频观看国产| 操熟女91| 九九九九免费视频| 激情五月天色播| 亚洲精品毛片在线观看| 亚洲在线a| 亚洲影视第一页| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 无码国产精品96久久久久孕妇| 亚洲吊色| 精品久久久av| 欧美激情中文字幕另类小说| 国产一级舔足在线观看| 亚洲资源吧| 天天综合网AV91| 女同性恋一区二区三区精品视频| 亚洲Av无码成人精品国产| 欧美偷拍区| 99久久99久久免费精品蜜臀| 北野未奈加勒比av| 330Dv国产女人终合视频极品人与兽| av在线一区二区三区| 麻豆视频国产一区二区| 国产精品 视频| 色悠久久久av| 亚洲熟女乱色一区二区三区久久久| 五月丁香久久| 九九成人| 久久超碰av在线| 黄色高清久久无码依人| 天天天肏屄欧美| 曰韩av中文字幕专区| 欧美成人一区二区三区在线播放| aV中亚| 九九九九精品精| 夜夜免费视频| 韩日巨乳美女免费视频在线观看| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 亚洲,欧美,春色,另类 | 欧美亚洲厕所精品偷拍91| 97中文字幕色| 色网综合网| www.AV有限公司一区| 中文字幕精品乱码| 爱丝福利| 麻豆精品.欧美精品.日韩精品.| 婷婷视频网| 亚洲制服欧美另类内射| 99久久久无码精品国产人| 屁股久久久久久久久久| 亚洲91在线| 午夜国产成人精品视频| 亚洲综合九九| 亚洲国产精品无码AV久久| 精品亚洲一区在线观看| 操逼日批| 日本免费一级AAA大片器 | 日产狠狠干| 97色爱| 激情婷婷丁香网| 日韩九九九| 国产亚洲日韩欧| 在线国产一区二区av| 97WW精品| 国内成人圈中文字幕无码视频| 欧美色九九| 国产亚洲女v在线观看| 国产精品免费视频不卡| 日韩在线人妻网站| 黄色成年| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 久久久久久波多野吉衣高潮| 久久久天美| 天天干干天天干干| 亚洲乱码国产乱码精网站| 天天插天天插| 国产美脚女优尤物在线观看| 狠狠操一区二区| 少妇精品久久| JIZZJIZZ国产精品喷水| 女优免费一区二区永久| 97天天综合网| 精品女同一区| 欧美大波激情xxxx| 天堂种子在线www网资源| 亚洲人妻一区二区三区| 青青草十区九区爱夜| avav青青草久久夜| 天天综合亚洲综合| 婷婷六月天| 嫩草 我啊~嗯~在线| 亚洲91色| 新版天堂中文资源8在线| 99999精品成人| 久久国产乱子伦精品免费女,网站| 国产伦乱91| 亚洲综合 欧美| 狠狠色噜噜狠狠狠狠狠色综合久久| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 爱爱久久| 91久久青青草原精品| 十八禁网站在线| 久久超碰国产一区二区三区| 亚洲熟妇丝袜在线观看| 亚洲欧美电影| 九九十八精品| 美女国产一区二区久久| 97天天| 日夜干射色啊| 五月激情视频| 欧亚无码视频| 天天综合站| 色色99| 性爱视频免费网址| 一本一道久久综合久久| 精品国产一区二区三区久久久蜜臀| 日本一级婬片试看三分钟| 日本媚薬中文字幕在线| 精品久久久久久久久久久久| 丁香六月啪| 操B久久| 欧美亚洲首页| 婷婷情色综合网| 亚洲AV无线| 中日韩免费看男女操逼大全| 日韩精品一区,二区 九九...老司机| 五月婷婷丁香六月| 亚洲国产精品成人无码久久久| 97精品免费视频网站| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 亚洲色人| 久久久啊啊啊| 精品少妇一区二区三区| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 欧美一二三级精品在线| 男女啊啊啊啊啊| 国产久9| 天天综合网~91综合网| 日韩av色图综合| 国产久久久9999| 啪啪视频mP4| 九九九九久久久| 这里只有精品视频| 毛片电影一区二区三区| 91 亚洲 欧美 日韩 国产 综合| 国产三级在线现体验区| 日韩欧美亚洲自拍偷拍| 青草精品视频-日本久久久久网站| 日韩本不卡视频在线观看 | 爱爱动态120秒| 日本 成 人 小说 电影 一区二区| 久久五月视频| 欧美夜夜狠| 操狠狠| 亚洲不卡av在线| 爱爱动态试试看6 0秒| 久久久久久中文版| 久神马| 九九九久| 美女91| 高清无码一区二区三区| 国产精品人妻熟女aⅴ| 蜜乳AV一区二区三区四| 自慰白浆在线观看| 蜜臀久久99精品久久久老,,| 男女打扑克高清网站| 色婷婷在线视频精品导航| 天天看片麻豆| 国语av最新自产拍在线观看| 成人八戒网站| 久久人妻办公室视频| 玖玖爱综合| 呦女网站| 探花精品 一区二区| 国产高清26uuu| 99热伊人| 国产精品久久久九九九| 91制服丝袜| 免费a级毛片av无码久久精品中文字幕| 日韩乱伦影音先锋| 亚洲欧美大| 亚洲精品人伦一区二区| 欧美色图91| 久久久久成人亚洲国产| 国产suv精品一区二区四| 青青草玖玖爱| 超碰免费人妻人人| 新版天堂中文资源8在线| 亚洲免费日韩在线一区二区| 在线电影亚洲色图| 欧美自拍偷拍综合图片| 国产精品午夜福利视频| 欧美淫乱视频| 性色av大全| 国产少妇与亚洲av| 亚洲脚交| 亚洲色图日韩精品| 99热aaa| 青娱乐休闲视频在线观看| 精品超碰国产| Aa东京男人的天堂| 美女久久久久久久久久久| 风间由美日韩欧美久久| 亚洲精品性爱片| 国产欧美日韩女同性恋ww喷水精品| 欧洲亚洲人人爽爽视频| 国产久久免费精品视频| 97久久久久久久精| 欧美丝袜中文字幕07在线| 日韩AV一起草| 色男人色天堂东京热| 欧美性五月| 情趣丝袜无码操逼视频| 欧亚综合一卡二卡中文字幕| 东京太热男人的天堂久久久| 欧美gv在线观看| 亚洲丝袜B诱惑| 另类亚洲一区二区三区| 69综合网| 26uuu性| 国产精品电| 99自拍视频在线观看|