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

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線(xiàn)實(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è)用戶(hù)管理模塊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è)用戶(hù)管理模塊從數(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ù)、接收用戶(hù)輸入純展示邏輯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)是把用戶(hù)登錄校驗(yàn)邏輯寫(xiě)在 Action 的execute()方法里。這是致命錯(cuò)誤——Action 只負(fù)責(zé)“收到用戶(hù)名密碼 → 調(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 的安全柵欄。比如用戶(hù)列表頁(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)用戶(hù)列表失敗 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多用戶(hù)并發(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)”它必須滿(mǎn)足兩個(gè)硬性要求被 Spring 容器統(tǒng)一管理、事務(wù)邊界清晰可控。我們以用戶(hù)注冊(cè)為例展示 Service 接口、實(shí)現(xiàn)類(lèi)及 Spring 配置的完整閉環(huán)// com.simon.oa.user.service.UserService.java 接口 public interface UserService { /** * 用戶(hù)注冊(cè)包含業(yè)務(wù)校驗(yàn) 數(shù)據(jù)庫(kù)插入 積分初始化 * param user 待注冊(cè)用戶(hù)對(duì)象 * return 注冊(cè)成功后的用戶(hù)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)用戶(hù)名是否已存在 if (userDao.findByUsername(user.getUsername()) ! null) { throw new RuntimeException(用戶(hù)名已存在); } // 2. 插入用戶(hù) 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ù)用戶(hù)名查詢(xún)用戶(hù)使用 HQL非 SQL * param username 用戶(hù)名 * return 用戶(hù)對(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); } /** * 保存用戶(hù)返回主鍵 ID * param user 待保存用戶(hù) * 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)所有用戶(hù)使用 loadAll避免 N1 查詢(xún) * return 用戶(hù)列表 */ 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中的下劃線(xiàn)命名是數(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/ # 用戶(hù)模塊按業(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)“如果要把用戶(hù)服務(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)收指南從演示邏輯到答辯話(huà)術(shù)的實(shí)戰(zhàn)清單答辯不是復(fù)述 PPT而是用最小可行演示證明你真正掌控了三層架構(gòu)的脈絡(luò)。我?guī)н^(guò)的畢設(shè)中90% 的高分同學(xué)都遵循一個(gè)鐵律演示只聚焦一個(gè)端到端場(chǎng)景但把每一層的“開(kāi)關(guān)”都擰開(kāi)給你看。下面以“用戶(hù)注冊(cè)”為例給出一套可直接套用的答辯流程、話(huà)術(shù)及避坑點(diǎn)。5.1 演示設(shè)計(jì)用“單點(diǎn)爆破”代替“全面鋪開(kāi)”不要說(shuō)“我的系統(tǒng)有用戶(hù)管理、權(quán)限管理、日志管理”而要說(shuō)“請(qǐng)看用戶(hù)注冊(cè)這個(gè)功能如何在三層架構(gòu)中被精確切分、協(xié)同執(zhí)行?!?演示步驟嚴(yán)格按請(qǐng)求流向前端觸發(fā)打開(kāi)瀏覽器輸入http://localhost:8080/yourapp/user/register.jsp填寫(xiě)用戶(hù)名、郵箱點(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è)面證明用戶(hù)表和積分表數(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 答辯話(huà)術(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ì)著流程圖講三遍“用戶(hù)注冊(cè)怎么走完三層”。不是為了背稿而是讓肌肉記住路徑——當(dāng)導(dǎo)師問(wèn)“DAO 怎么拿到 Session”你能不假思索說(shuō)出getHibernateTemplate().getSessionFactory().getCurrentSession()那一刻你就真的懂了。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
婷婷五月天性| 九九激情综合| 97精品在线| 国产成人综合在线| 人人操9| 婷婷五月激情视频在线| 色一区高清| 97黑人精品区| 无码激情AAAAA片-区区| 97超碰在线免费观看| 日韩成人电影AV| 婷婷五月色| 五月天婷婷高清无码| 殴美日韩成人| 综合久久狠狠| 丁香婷婷六月| xx久久| 天天爽天天弄| 五月天丁香六月综合| 色五月综合激情网| 久久婷五月天| 成人在线精品| 婷婷六月综合基地| 国产无套精品一区二区| 99热精品综合| 热99精品视频观看| 欧美日朝成人| 久Se视频在线观看| 啪精品| www.色婷婷| 婷婷中文字幕| 日日操日日撸| 亚洲最大视频| 欧美VA在线| 久久精典| 丁香五月a| 色七色九九| 九九九九九九综合| 大香蕉75线| 蜜桃人妻无码AV天堂三区| a久久| 激情丁香五月激情婷婷| 99 频99热国里只有精品| 免费看片在线观看| 色婷婷五月成人网| 亚洲午夜Av| 色五月综合网| 99热在线观看| 色色五月婷婷狠狠| 久久91久久精品久久| 五月天婷婷激情小说电影| 99成人免费热视频| 99热免费| 天天综合五月| 九九九九这里只有精品| 亚洲成人综合在线| 国产精产国品一二三在观看| 欧美成人精品三区综合A片| 五月花婷婷| 99r久久这里只有精品| 丁香五月最新地址| 九九热欧美| 一区二区乱码视频| 色色婷婷丁香| eeuus五月婷| 99色色爰| 色狠狠六月| 日日鲁鲁夜夜爽爽| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | 超pen个人视频97| 另类激情综合| 丁香性爱在线视频| 97操男人的天堂| 国产亚洲精品久久久久久久久动漫| 99免费在线视频| 亚洲超碰在线| 天堂成人A片永久免费网站| 丁香婷婷色五月| 欧美久久网| 狠狠干在线| 99爱爱网| 天天综合网站| 婷婷五月六月| 人人玩人人橾| 婷婷五月天激情丁香| 天天色综合网1| 色丁香五月天婷婷| 这里只有精品视频99| 天天舔天天爽| 九九九九成人| 国产1区2区3区在线观| 婷婷激情五月| 五月丁香激情综合网官网| 久久久久久久久久久-久五月天婷婷| 96自拍视频九色在线观看| 这里只有精品96| 99热超| 色婷婷A| 超碰猛烈的性猛交| 97色色色色色色色色色色色色色| 五月激情影院| 亚洲成av人影院| 影音先锋日本三级资源| 五月天综合久久丁香91| 天天做天天干天天综合网| 天天综合天天玩夜夜玩天天玩夜夜玩 | 香焦网五月天| 色五月激情综合| 骚货艹网站视频| 狠狠插狠狠操| 国产av一区二区三区| 就爱日五月天| 99色这里| www.99操.com| 天天色伊人| 五月天婷婷在线播放| 久久久久久久人妻| 婷婷视频在线碰| 五月丁香色婷基地综合久久| 99热国内| 99热这里只有精品3| 97日韩无套内| 婷婷五月天激情在线观看| 色播五月婷婷五月| 亚洲三A| 欧美、日韩、中文、制服、人妻| 五月天无码视屏播放| 色99在线视频| 大香蕉久久综合网| 深爱五月天婷综合| 九九色热| 噜噜噜噜噜在线| 激情婷婷五月| 日本操B视频| 丁香五月综合婷婷| 久久久久网站| www.yw色| 五月婷在线| ..真实国产乱子伦对白在线_欧 | 五月丁香久久网| 丁香婷婷十月| 久热最新视频| 99爱精品| 色亚洲无码| 激情五月色播五月| 殴美97色| 五月播播| 五月丁香综缴情性爱| 婷婷六月激情小说网| 婷婷五月免费视频| 玖玖五月丁香| 亚洲综合五月天婷婷| 99国产精品白浆在线观看免费| 久9视频免费播放| 米奇影视五月天| 久久香蕉影院| 丁香五月婷婷色综合基地| 丁香五月香蕉| 色婷婷电影| 狠狠插狠狠操| 国产人人操| 激情 婷婷 丁香五月天| 久久久天堂国产精品女人| 99ri视频| 免费视频WWW在线观看网站| 综合色色色色色色| 婷婷欧美激情| 伊人久久五月天| 五月激情射| 久久婷婷五月免费视频| 六月丁香婷婷色狠狠久久| 淑女丝袜bi操逼123| 欧美综合激情| 免费不卡狠操美女视频网 | 99综合一区| 色五月婷婷自拍| 五月天婷久精视频| 丁香激情五月少妇| 久热 91| 91操片| 婷婷成人AV| 婷婷丁香www视频日本韩国| 天天舔天天摸天天透| 99综合色色色| 97碰超级人人看| 大香蕉网站,大香蕉综合| 五月婷网| 99国产小视频免费观看| 久久婷婷丁香花综合网| 五月婷婷导航| 久er7久热| 99色爱| 五月之婷婷| 亚洲色频| 99热这里是精品| 丁香婷婷久久| 69堂午夜视频最新地址| 人人肏逼视频在线一区二区| 久久婷婷网| 久久婷婷啪啪视频| 亚洲午夜成人av电影网| 五月天婷婷操逼视频| 久久伊人五月天| 婷婷亚洲色| 九九婷婷五月天影视| 天天综合网~91| 永久AⅤ1| 九九成人高清视频| 国内久久亭亭| 99国产精品久久久久久久久久久| 99色在线观看视频| 婷婷丁香人妻久久在线观看| 久久婷婷啪啪视频| 日本不卡高字幕在线2019| 天堂AV在线看| WWW.五月天9999| 久久44| 97在线/亚洲| 婷婷五月色情天| 热的国产,热的综合,热的有码 | 涩综合在线| 五月婷婷丁香日韩在线| 狠狠干,狠狠操| 色婷婷六月丁香综合欲精品| 五月天综合在线| 国产欧美精品AAAAAA片| 91日本在线观看| 五月天黄色激情小说| 丁香五月综合无码趴趴| 91 欧美| 婷婷的色色五月天| 狠狠xx| 蜜桃婷婷五月| 光棍影院日韩精品| 伊人99久久| 无码人妻激情| 免费亚洲婷婷五月| 五月丁香花激情综合网| 超碰AAAAAAV| www.色婷婷.com| 99热永久在线观看| 丁香婷婷色九月| 婷婷五月天国产传媒| 色综合久久中文| 天天干天天 亚洲| 日本系列_4页_777FP| 99热6这里只有精品| 99免费在线视频| 69堂午夜视频最新地址| 欧美毛卡| 99久久国产宗和精品1上映| 国产3p露脸普通话对白| 天天做天天爱天天爽| 蜜臀99精品| SESE无码AV| 色婷五月| 亚洲五月综合色播| 五月天婷综合网站| 亚洲 日韩色色| 国产精品色婷婷久久久精品| 丁香五月性爱爱五月| 成人午夜天| 久久丁香五月天| 涩涩五月天| 婷婷射婷婷舔| 五月丁香六月婷婷亚洲视频| 久久草大香蕉| 久久免费操| 九九热在线视频观看| 五月丁香少妇网| 六月丁香基地| 99秘 在线| 五月婷婷六月丁| WWW色色色COm| 欧美极品999| 一月婷婷色色| 91啪啪视频| 9l视频自拍九色9l视频自拍九色9l社区| 9色免费网| 色婷婷精品视频在线播放| 五月丁香婷婷伊人| 我想看国产大学生口爆吞精的视频| 久久综合26p| 玖玖色综合色| 五月天基地| 丁香香蕉婷婷| 亚洲视频五区| 色色色综合| 婷婷五月天堂| 婷婷综合久久| 爱操天堂| 欧美视频五区| 六月婷婷无码观看| 狠狠干在线| 久久婷婷六月综合综合色| 人妻久久久久久久 | 爽极品色| 99热在线观看| 久久大大香| www.久操| 午夜理论片最新午夜理论剧| 五月婷婷在线综合| 久久九九99| 丁香六月婷婷综合| 丁香五月婷婷激情蜜桃| 欧美激情伊人| 热的国产,热的综合,热的有码 | 五月天婷婷成人网| 丁香婷婷影院| 天天视频精品9| 热久69| 亚洲在线综合| 99久久国产宗和精品1上映| 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 色宗合久久五月婷婷| 久久网思思| 色婷婷五月综合| 97色色色| 日韩成人无码| 99riAv1国产在线观看| 色噜噜狠狠色综| 思思久久96热在精品国产,| 日韩九九| 亚洲精品又粗又大又爽A片| 色婷综合| 先锋资源996| 色婷婷丁香五月天在线观看| 99re在线观看| 九九超日本| www久久99com| 啪色综合| 激情婷婷五月社区| 丁香五月视频在线观看| 天天爽人人综合免费7799| http:色情日本com| 日本久久网| 色婷婷丁香五月天| 99精品视频在线观看| 婷婷色一二三区波多野结衣| 色五月开心五月激情五月| 五月婷婷免费看| 中文精品在| 伊人干练久| 高清无码入口| 日韩不卡123| 中文字幕在线观看视频www| 婷婷综合在线观看视频| 99久久综合网| 久久综合激情| 99精品热视频| 色五月婷婷激情基地| 色 五月俺去也| 久久综合激情| 99在线免费视频| 青青草原福利在线| 国产黄大片在线观看画质优化| 午夜爱插插| 激情五月丁香综合网站| 玩熟女五十AV一二三区| 深爱激情小说五月婷婷| 91性高潮久久久久久久久| 另类图片五月激情| 夜丁香五月婷婷| 好看的国产精品| 视色综合| 婷婷六月天国产综合| 综合丁香婷婷五月天| 日本3级片一区2区| 日本色图综合| 欧美色97| 97色在线观看视频| 色婷婷五月色| 久思思久视频| 丁香激情五月| 色婷婷色五月综合| 在线亚洲综合| 丁香五月天堂| 99热1| 天天干天天插| 六月婷久久| 91久久五月天| 99啪| 九九亚洲视频| 婷婷激情五月综合在线视频| .肏屄视频一区二区| 亚洲看av的网站| 国精产品一区一区三区免费视频| 日日夜夜青青草| 婷婷爱五月| 久久综合九九| 免费无码毛片一区二区A片| 狠狠88综合久久久久噜噜噜| 极品人妻VIDEOSSS人妻| 五月婷婷乱| 亚洲精品第一国产综合亚AV| 丁香六月综合激情| 操91| 国产操B| 五月婷婷天| 日本123区日韩欧美不卡在线看| 九九视频这里只有精品| 99精品一二三四视频| 久久婷丁香五月| 激情综合五| 高清无码网址| 综合久久99| 中文字幕在线资源| 亚洲AV成人无码精品| 五月丁香啪啪| 吊色AV男人的天堂| 91狠狠综合久久久| 99操逼| 玖玖99免费视频| 五月丁香人妻| 五月天色婷婷成人| 另类在线| 热99色| 色女人久久| 婷婷丁香五月av| 久久无码成人| 六月99天天婷婷激情综合| 婷婷伊人无码| 91婷婷在线观看| 婷婷五月天丁香社区| 玖玖婷婷五月天| 色婷婷丁香花五月天| 五月天开心婷婷激情网站| 亚洲啪啪啪啪| 婷婷五月在线| 六月丁香五月婷婷| 99在线视频播放| 成人在线日韩| 国精产品一区二区三区| 全部老头和老太XXXXX| 五月天婷婷综合免费| 狠狠做六月爱婷婷综合aⅴ| 大香蕉 婷婷| 九九热婷婷| 亚洲网视屏| 天天干夜夜b| 青青草色在线视频观看| 久久久精品99| 国产九月婷婷| 婷婷大香焦| 色五月av| 人妻AV在线| 五月丁香六月婷婷色日| 色吧五月婷婷| 婷婷五月天激情五月天深爱五月天| 新99思思视频| 亚洲 综合中文| 91视频精品99| 夜夜资源站| 99caobi| 色婷婷综合久久| 欧美电影在线播放| 人妻丰满精品一区二区A片| 色五月首页| 视频一二区| 九九無妻| www.射伊蕉婷婷| 丁香婷婷月| 日日夜夜久| 精品三区影院| 五月婷婷性| 亚洲国产色色| 五月激情综合美女久久| 99热免| 俺也高清无码高清视频| 吉澤明步Av一區二區| 色婷婷狠狠久久综合五月| 伊人六月丁香婷婷| 99视频精品全部免费观看| 丁香婷停五月激情综合深爱| 婷婷五月色网| 五月婷婷综合在线视频小说| 五月天 婷 欧美亚洲| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 狠狠操.COM| 天天碰天天插天天操| 操丝袜视频影院导航| 婷婷五月天色综合| 熟女激情五月天 | 欧美丁香五月97色| 这里只有精品在线视频精品| er99免费视频在线| 狠狠五月激情丁香六月| 97干在线看| 91日综合欧美| 丁香五月婷婷基地| 无码激情精品色婷婷久久久久| 亚洲精品五月| av在线激情| 精品久热| 色色色色色色五月婷婷| 婷久久| 婷婷色五月噜噜| 五月丁香色婷婷基地| 99免费视频在线观看爱| 久久久999精品| 国产精品国产成人国产三级| 国产精品 的国产| 婷婷精品视频| 色日本网| 色色网站| 色婷婷精| 亚洲国产精品五月天| 天天综合五月| 啪啪激情综合| 六六久久黄色| 青草青草久热这里只有精品| 激情五月天色婷婷综合| 久久98| 亚洲成人在线观看av| 综久久久| 性爱在线播放av| 色五月激情婷婷| 日本片日本片祼观看网站在线看中文版网页在线看 | 日韩青青| 大香蕉520| 久久66成人网站| 99综合| 亚洲国产网址| 天天日日天天| 中文字幕永久在线| 国产成人亚洲综合亚洲| 99综合视频| 欧美婷婷色| 色综合婷婷| 99av视频| 国产欧美日韩综合精品一区二区| 婷婷五月激情欧美| 色婷视频| 九九一区| 美女婷婷六月色| 久婷久婷| 婷婷干六月综合旧址| 色色色777| 五月丁香色综合| 久久综合五月天激情小说网站| 欧洲综合视频| 五月丁香婷婷深深爱| 午夜精品久久久久久久爽| 五月停停色色丁香| 丁香五月婷婷大香蕉| 国产偷人爽久久久久久老妇APP| 激情黄色小说色五月| 79色色色色| 激情内射人妻1区2区3区| 久久9视频| 91大屁股精品| 欧美日韩五月婷婷| 天天做天天爱天天要| 天堂成人A片永久免费网站| 超碰AV在线| 国产精品美女| 91婷婷色| 大香蕉婷婷五月| 久久久久久久久久久久63| 26uuu亚洲色| 国产这里只有精品| 狠狠人人| 成人国产欧美大片一区| 五月婷婷色丁香| 国产成人网址| 色婷视频| 欧美欧盟性爱网| 99热偷拍| 91狠狠色丁香婷婷综合久久精品| 超碰精品在线| 26uuu视频欧美| 久热99| 亚洲操逼网| 天天肏视频| 99热爱爱干干日| 成人欧美日韩| jiqingtaose五月天| 亚洲精品视频在线播放| 久久久五月天| 色五月激情网| 激情五月六月丁香| 久草 tingting| 亚洲va欧洲va国产va不卡| 亚洲第一成人AV| 五月丁香花开综合网| 猫咪伊人AV| 天天射色五月天| 日本情色一区二区| www.色9| 伊人干综合| 在线99热| 五月婷婷福利| 4438激情网| 亚洲碰碰碰| 五月婷婷色播| 久久婷婷激情五月天一区二区| 开心激情站| 五月丁香婷婷激情| 亚洲AV永久无码影院黑人| 9l视频自拍九色9l视频在线观看| 色一情一乱一乱一区91| 极品人妻VIDEOSSS人妻| 夜夜骑夜夜撸| 亚洲超碰在线| 97超碰,人人舔,人人操,人人摸 | 97在线观视频免费观看| 少妇综合网| 五月丁香A片| 国产看真人毛片爱做A片| 天天操夜夜橾| 婷色五月| 亚洲av成人一区二区电影在线| 天天爱天天狠天天透| 青草青草久热这里只有精品| 欧美A A A A A| 97丁香五月| 亚洲视频在线观看99| 男女av免费看| 天天狠狠夜夜狠狠2023| 韩国久久少妇视屏| 亚洲欧美成人在线| 5Www色5夜| 成人国产综合| 成人精品99| 欧美成人日韩| www.夜夜夜| 91久久久久久久久久| 天天干,天天日| 婷婷五月色亚洲| 99久久婷婷国产综合| 九色亚洲| 丁香五月激情综合| 五月丁香亭亭| 天堂草在线观| 天天天操天天天爰| 69久久99精品久久久久婷婷| 任我干视频在线观看| 中文字幕成人| 少妇综合网| 开心五月深爱五月婷| 色999五月色| 五月亭亭色| 国产午夜伦鲁鲁| 五月丁香啪啪啪| 五月开心久久| 午夜色丁香| 好好日激情五月天| 全亚洲最大的婷婷五月天网站COM 丁香五月婷婷狠狠色 | 欧美婷婷九月| av操B网站| 99国产精品久久久久久久久久久| 26uuu精品国产| 中文不卡av| 天天干天天干天天| 九九九九综合| 丁香五月色网| 国产精品色| 另类五月激情| 99国产小视频| 五月丁香青草综合啪啪| 激情五月婷婷在线区| 99久久久国产大片区| 香蕉婷婷色五月| 激情综合婷婷久久| 97狠狠碰| 欧美久人人| 一区中文字幕电影| 九月丁香亭亭| 天天舔天天摸视频| 国产精品久久久爽爽爽麻豆色哟哟 | 天天婷婷操| 四色五月婷婷在线观看| 色呦呦在线| 99色在线视频| 中文字幕AV网址| 啪啪视频99| 狠狠色综合图片| 五月婷婷黄网站大全| 国产AV熟妇人震精品一品二区| 91久久99久久91熟女精品| 久久激情五月| 婷婷激情社区| 狠狠干狠狠干| 人妻丰满精品一区二区A片| 日韩无码专区| 成人无码精品1区2区3区免费看| 强壮的公次次弄得我高潮A片日本 | 色爱亚洲| 99在线免费观看| 日本天天色| 噼里啪啦在线观看免费完整版视频| 五月天色色网站| 色婷婷丁香A片区毛片区女人区| 中文人妻AV久久人妻18| 亚洲综合五月天婷婷| 第四色色色色色丁香五月天| 狠狠色婷婷7777久综合| 色月九九| 婷婷五月激情的图片| 国产精品色色666| 婷婷五月天另类视频| 激情五月丁香激情综合网 | 日日操,日日爽| 丁香五月天BBw| 天天天天色天天天天天干| 国产偷人妻精品一区| enecarbon-materials.com污K127封锁请涟系@wip1688 | 五月深情久久| 久久久ww| 色五月婷婷开心| 日韩在线婷婷五月天综合| 午夜成人综合| 双性美人被调教到喷水A片| 亚州男人天堂婷婷五月| 久久看婷婷| 精品国产va久| 色五月播五月| 网站免费一站二站| 免费色婷婷| 99噜噜| 五月色亭丁香| 桔色成人在线| 噜噜在线| 天色综合网| 丁香五月婷婷啪| 五月婷婷福利| 精品乱码久久久久| 亚洲综合欧美色丁香婷婷888月图片 | 99热这里只有精品8| 91啦丨九色丨刺激中文| 五月激情影院| 婷婷亚洲综合| 久久久久98| 五月丁综合在线观看| 日日干天天| 精品亚洲国产成AV人片传媒| 丁香五月婷婷偷拍| xxx日本东京热| 婷婷伊人综合中文字幕| 色婷小说| 天天日天天摸天天| 97久久草草超级碰碰碰| 欧美精品狠狠色丁香婷婷| 婷婷导航| 婷婷五月激情的图片| 不卡在线超碰| 伊人五月天日日夜夜久久久天天| 婷婷另类小说| 99碰碰。| 美女要搞搞天天搞搞搞网站| 亚洲综合久| 日韩 mm 不卡| 色六月天| 午夜天堂一区人妻| 依人大香蕉| 伊人色综合久久久| 热99一二三| 五月天婷婷五月| 久久婷婷五月天| 婷婷天堂综合| 久9免费视频| 色五月激情问网站| 国产在线另类五月婷婷| 五月六月播婷婷| 激情六月综合| 99久久97| 六月久久狠狠| 亲子乱AV-区二区三区| 日本无va视频| 67194国产| 久青青久| 九九综合久久| 丁香五月性| 欧美激情综合色综合啪啪五月| 91色欲综合| 五月婷导航| 婷婷五月激情综合网| 婷婷六月天激情影院| 久热婷婷综合| 丁香五月天欧美在线| 久久AAAA片一区二区| 狠狠婷婷爱| 少妇被躁爽到高潮无码文| 99激情网| 久色网| 天天日天天添| 丁香五月影院| 久婷婷久草| 国产真实乱对白精彩| 99热这里只有精品69| 欧美成人猛片AAAAAAA| 色婷婷a三区麻| 人人操婷婷| 天天综合网在线| 欧美日韩成人一区二区| 另类图片色五月| 九九色中文| 开心五月深爱五月| 国产日日操夜夜操的肉棒视频| 久99久视频精品| 1010日日无码| 成人人操| 五月综合色| 色的色综合| 嫩草免费视频| 五月婷婷在线免费观看| 日本系列_4页_777FP| 免费AV在线网址| xx久久| 亚洲精品乱码久久久久久按摩观| 久久免费精彩视频| 夜夜爽天天日| 99热这里有精品首页10| 色爱亚洲| 色婷婷五月天成人网| 五月丁香婷婷激情图片| www.色色五月天.com| 激情综合自拍五月婷婷色五月| 欧美日韩精品人妻狠狠躁免费视频 | 九九在线精点品| 五月天婷婷在线啪啪视频| 国产精品日本一区二区在线播放| 丁香五月综合网亚洲综合欧美狠狠 | 人妻精品久久久久久久| 六月婷婷网| 91久热| 欧爱综合视频| 丁香五月最新网址| 天天操综合网| 色色哒五月婷婷六月丁香| 五月色丁香| 欧洲MV日韩MV国产| 啪啪黄页网| www.狠狠狠狠| 久久婷婷五月综合啪| 久久婷婷色| av在线色五月丁香婷区久| 久久婷婷久久| 91在线操逼视频| 日本九九网| 99爱最新免费视频在线观看| 十区AV| 成人综合网站| 影视av久久久噜噜噜噜噜三级| 婷婷丁香久久五月综合| 在线99精品| 精品一区二区三区四区五区六区| 99无码精品| 色婷婷五月天成人网| 99九九热在线观看| 午夜在线成人网站免费观看| 天天色综网| 五月天婷婷乱论小说| 精品久久人妻热| 久久色9| 综合网精品99| 内射爽无广熟女亚洲| 97香蕉久久超级碰碰高清版| 色婷婷五月天综合网| 九九人人操| 亚洲天堂九九九| 亚洲精品又粗又大又爽A片 | 婷婷五月色| 97碰| 激情六月色| 国色天香伊人狠狠色| 99热欧美在线观看| 亚洲免费av在线| 在线播放 精品| www.五月天| 人妻久久久久久久| 亚洲操逼片| 中文AV网站| 亚洲人妻五月丁香婷婷| 五月熟妇婷婷久久| 日韩色色小视频| 色丁香婷婷| 五月婷婷激情久久| 成人在线视频一区| 六月五月久久丁香| 婷婷五月天成人在线视频| 色99色| 青青草五月天| 99欧美三级视频| 碰久久精品w| 91热视频| 成人精品免费在线观看| WWW.久久.COM| 成人亚洲精品久久久久 | 激情久久伊人| 91se精品国产| 牛牛澡牛牛爽| 婷婷五月丁香激情| 天天日天天肏天天奸| 久久久天堂国产精品女人| 国产精自产拍久久久久久蜜| 大香蕉九九| 在线不卡视频| 亚洲日本韩国| 日韩久久系列| 亚洲视频码| 99er热精品视频| 大香蕉欧美在线| 天天插天天射天天干| 97欧美在线| 中文字幕九九九九| 国产免费一区二区在线A片视频| 婷综合| 五月丁香日本一抹本| 玖玖资源部在线播放| 五月深爱婷婷| 色噜噜在线| 狠狠干无码| 激情五月天啪啪| 欧美激情综合| 大香蕉手机视频| 欧美日韩成卜| 日韩成人电影Av| 黄网免费观看| 婷婷五月天激情综合| 99亚洲色| 天堂综合久| 天天玩夜夜操| 亚洲中文丁香| 精品九九视频| 99精品性爱| 久久92| 亚洲综合色婷婷| 免费在线观看AV网站| 日日噜噜久久婷婷五月天| 人人操女人| 久久五月视频| 婷婷五月天成人网站| 99久久久久久www| 色五月婷婷网| 开心五月婷婷伊人| 久久刺激网| 天天干夜夜b| 久久激情网| www.91久久| 日本97在线看片| 另类图片色五月| 玖玖精品资源| 婷婷色在线视频| 五月天丁香| 亚洲无码你懂的| 99综合视频在线| 深爱五月日韩| 狠狠干婷婷| 久久五月热| 丁香六月婷婷综情欧美| 丁香五月欧美激情| 婷香五月激情视频| 丁香花五月天社区| 开心 五月 综合| 五月天.com| 国产做爰视频免费播放| 黄色一极大片| 久色中文| 99综合视频一体| 丁香五夜激情四射夜夜夜| 五月天激情综合网俺也去| 99这里只有精彩视频| 久久九九网| 久久无意婷婷| 九九视频这里是精品五月| 婷婷久久草| 久草热8精品视频在线观看| 先锋资源91| 婷婷五月天BBw| 公的粗大挺进了我的密道| www一起操| 五月丁香做爱视频| 免费观看18视频网站| 六月丁香综合| 六月丁香五月天| 日韩少妇内射免费播放| 久久久人妻久久久| 任你搞网站| 五月天色五月天| 激情婷婷色色| 狠狠综合区| 欧美3AaAa大片| 色欲一区二区三区精品A片| 99九九玖玖| av色色国产| 久久婷综| 色色网站在线免费观看视频| 丁香婷婷网| 人妻激情视频| 这里只有精品视频99| 亚洲亚洲人成综合网络| 一夜福利不卡| 99爱在线免费视频| 黄网免费观看| 日本色图综合| 97久久五月丁香婷婷| 国产精品色婷婷AV综合色色| 丁香五月天天久久综合小说| 色五月丁香一区在线| 丁香五月影院| 区区久久妻| 婷婷色在线| 色婷婷丁香综合中文字幕| 亚洲色另类| 人人叉久| 五月天成人在线视频网站| 激情超碰网| 婷婷五月美女直播| 99情色五月天| WWW,五月| 偷偷操九九| 婷婷五月天综合久久| 97色五月丁香婷婷| 五月婷婷综合精品| 久热天堂| 五月天丁香婷婷社区| 久久精品系列| 丝袜激情网| 超碰人人操人人干| 五月色婷婷综合| 激情综合5月| 欧美成人精品三区综合A片| 色婷婷婷综合五月天| 日本一級黃色一級片| 五月婷丁香亚洲| 大香久久综合网| 99免费| 久久婷婷五月天激情| 综合AV在线| 久久er免费视频| 亚洲亚洲人成综合网络| 日本va视频| 亚洲欧美国产A片免费观看| www.色婷婷.com| 色丁香婷婷| 婷婷丁香六月| 五月婷AV| 99日精品视频| 色丁香五月| 天天日综合| 九九99视频精品| 激情综合网婷婷五夜| 欧美色色色色色| 亚洲综合久| 久久激情五月| 色五月成人网| 色色色婷婷| 99热网站| 婷婷成人五月天一区| 91人人人人人人人| 黄色成人网站在线播放| 视频这里只有精品| 久婷婷视平| 97干综合网| 欧美日韩AAAAA| 五月丁香综合网| 亚洲激情在线| site:ornaments52.com| 涩涩婷婷五月| 欧美大肥婆大肥BBBBB| 色女伊人| jiujiu热在线视频| 欧洲电影在线观看免费版英语版| 亚洲最大视频| 五月天综合缴情网网站0| 婷婷六月偷拍| 婷婷在线视频| 99思思热只有在这里看| 亚洲成人av在线| 99婷婷精品推荐在线视频| 丁香五月六月婷婷综合| 九九99视频精品| 色色婷婷色色| 日韩免费视频| 伊人五月婷婷| 五月涩涩网| 欧美色图45678| 丁香五月激情图片婷婷| 99热最新精品| 五月婷婷手机在线| 婷婷丁香熟妇综合网| 91无码一起草| 狠狠综合网| 五月色综合| 五月丁香婷婷激激激综合网色播| 天天爽人人综合免费7799| 婷婷酒色网| 亚洲综合五月天| 五月丁香琪琪| 丁香五月另类小说| 婷婷丁香五月精品| 深夜男女福利刺激影院一区完整| 日韩人人操| 成人国产欧美大片一区| 在线中文av| 亚洲精品色| 性生活视频98791| 日本精品。999| 国产成人av在线| 婷婷久久18| 91在线资源| 成人精品一区日本无码网 | www.精品久9| 操B无码视频国语| 亚洲五月婷婷| 啪啪啪大香蕉| 99re这里只有精品99| 超碰成人在线免费观看| 大地9中文在线观看免费高清| 亚洲综合1024| 99热亚洲| 五月天国产婷婷精品视频在线| 婷婷在线五月天观看| 激情综合啪啪| 色色九九五月天 | 色综合香蕉| 五月天大香蕉婷| 日韩国产在线精品| 国产精品久久欧美久久一区| 99re8在这里只有精品| 丁香五月中文字幕| 殴美日韩成人| 蜜桃人妻无码AV天堂三区| 日韩AV大全| 玖玖资源站蜜臀| 五月天停停基地| 亚洲日韩26uuu| wwccc久久久| 成人色五月天| 狠色狠色狠色狠色狠色网| 可以免费看av网站| 婷婷五月蜜桃成人桃色丁香| 天天五月香欧美| WWW.激情| 丁香婷婷少妇| 婷婷六月插屄激情| www.minyis.com【JT】国内CDN落地页保证转化QQ2101460746 | 女性自慰系列第五页| 日韩欧美一级大黄网站| 五月婷婷啪啪啪| 99久久网站| 99免费热在线精品| 亚洲美女婷婷五月天| 亚洲精品五十一区| 亚洲欧洲自拍图片专区五月天| 国产欧美日韩一区二区三区| 激情五月婷婷伊人| 久久这里只有国产视频| 日本色色色| 五月丁香成年黄色| A片一曲| 婷婷丁香成人| 国产成人精品一区二区三区视频| 激情久久伊人| 色原狠狠综合| www.99婷婷| 亚洲欧洲99| 五月丁香婷中文字幕| 激情五月深爱婷婷| 六九色综合婷婷五月天| 欧美日本黄色| 亚洲综合另类| 色婷婷中文| 九九偷拍网| 99亚洲天堂| 六月丁香综合999| 另类五月激情| 991国产精选视频在线播放下载| 大香蕉九九| 国产精品第一国产精品| 97色碰碰公开视频| 婷婷五月AV| 成人片久久网站| 26uuu另类亚洲欧美日本一| 丁香五月中文字幕色播| 99热在线播放| 99cao婷婷| 激情综合在线观看| 激情小说五月天中文字幕| 亚洲第一精品成人999久久精品| 蜜臀av粉嫩av懂色av| 大香蕉九九| 2005天天干天天1| 亚洲精品视频在线播放| 森林影视大全,最好看的2019年视频 | 99热这里只有精品9| 五月天成人在线视频网站| 色色综合网www| 99爽视频| α久久| 色婷婷免费观看| 色色欧美色色色| 超碰免费人妻| 人人人va亚洲视频在线| 9色在线| www。五月,com| 色婷婷综合网| 五月婷婷激情视频| 99在线精品视频| 丁香五月婷婷欧美成人色图| 91丨熟女丨首页| 丁香五月天亚洲视频| 国产乱子轮XXX农村| 人人性久久| 亚洲丁香网| 五月丁香六月激情欧美综合| 五月婷九月| 成人视频九九| 色色色五月婷| 丁香五月亚洲综合丝袜| 天天插天天插天天操| 狠狠干夜夜干| 亚洲中文字幕在线观看| 色欲天天综合| 天天搞天天爽| 激情操逼婷婷| 99亚色色色| 成人网在线视频| 久久久久久久久久久jjjj| 丁香婷婷五月天校园春色| 久久色亭亭五月天| www.天天色综合| 婷婷丁香人妻天天爽| 亚洲V国产V欧美V久久久久久| 91九色丨国产丨爆乳| 国产三级秋霞| 96精品成人无码A片观看金桔| 久久综合干| 噜噜噜久久| 久久婷鲁| 99色1| 日本猛少妇色XXXXX猛叫| 91久久1118| 久久人人九| 狠狠干在线| 美女五月天| 日本性视频| 日本va视频| 极品人妻VIDEOSSS人妻| 五月天婷婷午夜丁香| 天天久久狠狠色综合| 色婷久| 色99色| 98色丁香五月婷婷综合网| 激情五月丁香综合网站| 丁香婷婷狠狠97| 91啪级电影| 专区无日本视频高清8| 色色是色N一| 99热.com| 99在线观看视频免费| 91丨九色丨熟女高潮| 99综合久久| 欧美日朝成人| 五月婷婷六月天| 9l视频自拍九色9l视频自拍九色9l社区| 吾爱AV导航| 丁香五月天成人网站| 国产精品岛国片在线观看免费| 99亚洲日韩| 色婷综合| 五月婷婷丁香五月 | 婷婷WWW久久| 久久九九免费视频| 黑人无码一区|