久久亚洲精品成人_国产精品欧美综合亚洲_亚洲va天堂va欧美ⅴa在线_91色视频在线观看_久久影院亚洲_一级黄色片播放_日韩av在线一区_精品一区二区在线看_老头吃奶性行交视频_日韩免费高清视频_天天操天天爽天天干_日本欧美在线视频

首頁 > 學院 > 開發設計 > 正文

【譯】理解SpringMVCModelAttribute和SessionAttribute

2019-11-14 15:25:07
字體:
來源:轉載
供稿:網友

作為一名 java Web 應用開發者,你已經快速學習了 request(HttpServletRequest)和 session(HttpSession)作用域。在設計和構建 Java Web 應用時,理解這些作用域,如何將數據與對象和這些作用域交互是十分重要的。【在 StackOverflow 上有一篇文章可以幫助你快速了解 request 和 session 作用域】

SPRING MVC 作用域

當我開始用 Spring MVC 編寫 Web 應用時,我發現 Spring model 和 session attribute 有一點神秘,尤其當它們與我熟知的 HTTP request 和 session 作用域交互時。一個 Spring model 元素可以從我的 session 或者 request 中找到嗎?如果是這樣的話,我該如何控制?在這篇文章中,我希望講解清楚 Spring MVC 的 model 與 session 是如何工作的。

SPRING 的 @MODELATTRIBUTE

有幾種方法將數據或對象添加到 Spring 的 model 中。一般來說,數據或對象是通過 controller 層的一個注解添加進 Spring 的 model 中。在下面的例子中,使用 @ModelAttribute 添加一個名為 MyCommandBean 的實例給 key 值為『myRequestObject』的 model。

 1 public class MyController { 2   3     @ModelAttribute("myRequestObject") 4     public MyCommandBean addStuffToRequestScope() { 5         System.out.println("Inside of addStuffToRequestScope"); 6         MyCommandBean bean = new MyCommandBean("Hello World",42); 7         return bean; 8     } 9  10     @RequestMapping("/dosomething")11     public String requestHandlingMethod(Model model, HttpServletRequest request) {12         System.out.println("Inside of dosomething handler method");13  14         System.out.println("--- Model data ---");15         Map modelMap = model.asMap();16         for (Object modelKey : modelMap.keySet()) {17             Object modelValue = modelMap.get(modelKey);18             System.out.println(modelKey + " -- " + modelValue);19         }20  21         System.out.println("=== Request data ===");22         java.util.Enumeration reqEnum = request.getAttributeNames();23         while (reqEnum.hasMoreElements()) {24             String s = reqEnum.nextElement();25             System.out.println(s);26             System.out.println("==" + request.getAttribute(s));27         }28  29         return "nextpage";30     }31  32          //  ... the rest of the controller33 }

在一個到達的 request 中,任何被 @ModelAttribute 注解的方法都會在 controller handler method 之前調用(就像上面例子中的 requestHandlingMethod 一樣)。這些方法會趕在 handler method 執行之前將數據添加進一個 java.util.Map,然后加入 Spring model 中。可以用一個示例操作展示出來。我創建了兩個 jsp 頁面:index.jsp 和 nextpage.jsp。index.jsp 上的一個鏈接用于向 MyController 中的 requestHandlingMethod() 應用觸發器發送一個 request。上面的代碼中,requestHandlingMethod() 將『nextpage』作為下個視圖的邏輯名返回,其在這個例子中會處理為 nextpage.jsp。

當這個小小的網址被修改為這種形式后,controller 的 System.out.println 展現了 @ModelAttribute 方法是如何在 handler method 之前執行的。同時也展現了 MyCommandBean 創建和加入 Spring model,并在 handler method 中可用的過程。

 1 Inside of addStuffToRequestScope 2 Inside of dosomething handler method 3 --- Model data --- 4 myRequestObject -- MyCommandBean [someString=Hello World, someNumber=42] 5 === Request data === 6 org.springframework.web.servlet.DispatcherServlet.THEME_SOURCE 7 ==WebapplicationContext for namespace 'dispatcher-servlet': startup date [Sun Oct 13 21:40:56 CDT 2013]; root of context hierarchy 8 org.springframework.web.servlet.DispatcherServlet.THEME_RESOLVER 9 ==org.springframework.web.servlet.theme.FixedThemeResolver@204af48c10 org.springframework.web.servlet.DispatcherServlet.CONTEXT11 ==WebApplicationContext for namespace 'dispatcher-servlet': startup date [Sun Oct 13 21:40:56 CDT 2013]; root of context hierarchy12 org.springframework.web.servlet.HandlerMapping.pathWithinHandlerMapping13 ==dosomething.request14 org.springframework.web.servlet.HandlerMapping.bestMatchingPattern15 ==/dosomething.*16 org.springframework.web.servlet.DispatcherServlet.LOCALE_RESOLVER17 ==org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver@18fd23e4

 

現在問題變為了『Spring model 的數據存儲在哪里?』是存儲在標準 Java request 作用域中么?答案是 —— 對的。。。就最終而言的話。就像你從上面的輸出中讀到的,MyCommandBean 在 model 中,但當 handler method 執行時還不在 request 對象中。的確,handler method 執行之后,下個視圖(本例中為 nextpage.jsp)顯示之前為止,Spring 都沒有將 model 數據作為 attribute 加入 request 中。

也可以通過輸出存儲在 index.jsp 與 nextpage.jsp 的 HttpServletRequest 中的 attribute 展現出來。我在兩個頁面中都布置了一個 JSP 代碼塊(如下面所示),用以展現 HttpServletRequest 的 attribute。

 1 <h3>Request Scope (key==values)</h3> 2 <% 3     java.util.Enumeration<String> reqEnum = request.getAttributeNames(); 4     while (reqEnum.hasMoreElements()) { 5         String s = reqEnum.nextElement(); 6         out.print(s); 7         out.println("==" + request.getAttribute(s)); 8 %><br /> 9 <%10     }11 %>

 

當應用啟動,index.jsp 加載完畢,你可以看到在 request 作用域中沒有 attribute。

requestattributesbefore

在本例中,當『do something』被點擊時執行 MyController 的 handler method,然后會跳轉并展示 nextpage.jsp。而 nextpage.jsp 中已經編寫了相同的 JSP 代碼塊,同樣提供了 request 作用域中的 attribute。瞧,當 nextpage.jsp 渲染后,顯示出在 controller 中創建的 MyCommandBean model 被加進 HttpServletRequest 作用域中了!Spring model attribute 的鍵值『myRequestObject』被復制后用作 request attribute 的鍵值。

所以下一個視圖呈現之前,Spring model 數據已經在 handler method 執行之前(或者之間)被拷貝給了 HttpServletRequest。

使用 SPRING MODEL 與 REQUEST 的原因

你或許想知道為什么 Spring 使用 model attribute。為何不直接把數據加到 request 對象里?我在 Rod Johnson 等人的書籍《Professional Java Development with the Spring Framework》中找到了答案。這本書關于 Spring API 的部分有一點過時(基于 Spring 2.0 編寫),但是我發現該書提供了一些對于 Spring 引擎運行的擴展解釋。下面是書中 model 元素部分的引用:

直接將元素加入 HttpServletRequest(像 request attributes 一樣)看起來就像在服務同樣的目標。這樣做的理由是當看到我們為 MVC 框架設置的 requirements 時,能夠更明確。它應盡可能與視圖無關,這意味著我們可以合并視圖技術,并不受 HttpServletRequest 的束縛。

SPRING 的 @SESSIONATTRIBUTES

所以現在你知道了 Spring 如何管理 model 數據,與如何連接標準的 Http request attribute 數據。那么關于 Spring 的 session 數據呢?

Spring 的 @SessionAttribute 在 controller 中用來指定哪一個 model attributes 需要存儲到 session。事實上,Spring 文檔聲明了 @SessionAttributes 注解『列舉需要顯式地存儲 session 或一些交互用的存儲空間內的 model attributes 名稱。』另外說一下,『一些交互存儲空間』表明了 Spring MVC 試圖保持與技術無關聯的設計思想。

事實上,@SessionAttributes 允許你做的就是告訴 Spring 哪一個 model attributes 將在視圖展現之前一同拷貝給 HttpSession。關于這一點同樣可以用一個簡短的代碼來展示。

在 index.jsp 和 nextpage.jsp 中,我添加了額外的 JSP 代碼塊,使其顯示 HttpSession attributes。

 1 <h3>Session Scope (key==values)</h3> 2 <% 3   java.util.Enumeration<String> sessEnum = request.getSession() 4     .getAttributeNames(); 5   while (sessEnum.hasMoreElements()) { 6     String s = sessEnum.nextElement(); 7     out.print(s); 8     out.println("==" + request.getSession().getAttribute(s)); 9 %><br />10 <%11   }12 %>

 

我使用 @SessionAttributes 注解 MyController,使其將同一個 model attributes(myRequestObject)放入 Spring session 中。

1 @Controller2 @SessionAttributes("myRequestObject")3 public class MyController {4   ...5 }

 

另外在 controller 的 handler method 中添加代碼顯示 HttpSession 中的 attributes(就像顯示 HttpServletRequest 中的 attributes 一樣)。

 1 @SuppressWarnings("rawtypes") 2 @RequestMapping("/dosomething") 3 public String requestHandlingMethod(Model model, HttpServletRequest request, HttpSession session) { 4   System.out.println("Inside of dosomething handler method"); 5   6   System.out.println("--- Model data ---"); 7   Map modelMap = model.asMap(); 8   for (Object modelKey : modelMap.keySet()) { 9     Object modelValue = modelMap.get(modelKey);10     System.out.println(modelKey + " -- " + modelValue);11   }12  13   System.out.println("=== Request data ===");14   java.util.Enumeration<String> reqEnum =         request.getAttributeNames();15   while (reqEnum.hasMoreElements()) {16     String s = reqEnum.nextElement();17     System.out.println(s);18     System.out.println("==" + request.getAttribute(s));19   }20  21   System.out.println("*** Session data ***");22   Enumeration<String> e = session.getAttributeNames();23   while (e.hasMoreElements()){24     String s = e.nextElement();25     System.out.println(s);26     System.out.println("**" + session.getAttribute(s));27   }28  29   return "nextpage";30 }

現在,我們可以看見加上 @SessionAttributes 注解后,Spring MVC 處理一個 HTTP 請求之前、之間和之后的 session 對象情況。下面顯示了結果。首先,當 index.jsp 顯示時(請求被 Spring MVC 發送和處理之前),我們可以看見 HttpServletRequest 和 HttpSession 都沒有 attribute 數據。

before-request-attribute-list

handler method 執行時(requestHandlingMethod),你可以看見 MyCommandBean 被添加進 Spring model attributes,但是還沒有加入 HttpServletRequest 或 HttpSession 作用域。

但是 handler method 執行后和 nextpage.jsp 顯示時,你可以看見 model attribute 數據(MyCommandBean)已經作為一個 attribute 被復制給了 HttpServletRequest 和 HttpSession(擁有相同的 attribute key)。

控制 SESSION ATTRIBUTES

現在你已經理解了 Spring model 和 session attribute 數據如何添加進 HttpServletRequest 與 HttpSession。或許又開始關心怎么管理 Spring session 中的數據。Spring 提供了一個方法移除 Spring session attributes,同時也會從 HttpSession 中移除(不需要刪除整個 HttpSession)。簡單地將一個 Spring SessionStatus 對象作為參數加入一個 controller handler method 中。在此方法中,使用 SessionStatus 對象結束這個 Spring session。

1 @RequestMapping("/endsession")2 public String nextHandlingMethod2(SessionStatus status){3   status.setComplete();4   return "lastpage";5 }

 

總結

希望這篇文章能夠幫助你理解 Spring model 和 session attributes。這并不神奇,僅僅是一個理解 HttpSession 和 HttpServletRequest 如何存儲 Spring model 和 session attributes 的問題。我已經將展示用的代碼放在了 Intertech Web site 上。如果你對繼續探索與理解 Spring model 和 session 感興趣,盡管從這里下載吧。

如果你對深入學習 Spring(或任何一種 Java 技術)感興趣,可以考慮馬上注冊,成為 Intertech 的一員。在這里學到更多與注冊。


原文鏈接: Intertech
首發于 importnew,譯文鏈接: http://www.importnew.com/16782.html

已同步至 Github,歡迎 Star 關注更新。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
精品成人在线观看| 99久久精品费精品国产一区二区| 成人中文字幕在线| 日韩精品中文字幕视频在线| 成人在线视频一区二区三区| 成年人av网站| 91精品国产综合久久国产大片| 久久99久久99精品蜜柚传媒| 日本视频www| 天天影视涩香欲综合网| 亚洲高清123| 精品国产亚洲av麻豆| 亚洲欧洲一区二区三区久久| gogo亚洲国模私拍人体| 久久精品综合网| 亚洲a区在线视频| 中文字幕精品一区二区精| 亚洲第一页中文字幕| 999精品视频在线| 久久影院电视剧免费观看| av成人免费观看| 国产又粗又猛又色又| 亚洲人成电影网站色…| 久久久免费看片| 在线免费观看日本欧美| 欧美日韩在线不卡视频| 国产欧美日韩精品一区| 一本色道久久综合亚洲二区三区| 久久国产精品一区二区| 91精品国产自产在线观看永久| 中文字幕在线欧美| 欧美日韩福利在线观看| 天堂网视频在线| 久久久精品在线观看| 偷偷操不一样的久久| 中文字幕日本欧美| 欧美三级 欧美一级| 欧美福利电影网| 日韩在线中文视频| 亚洲精品男人的天堂| 91免费在线视频| 国产成人精品午夜视频免费| 欧美精品久久96人妻无码| 欧美一区二区三区在| 日韩xxx高潮hd| 成人性生交大片免费看小说| 国产高清亚洲一区| 91网站在线免费观看| av网站在线免费看| 久久综合婷婷综合| 国产精品亲子伦对白| 久久性爱视频网站| 亚洲黄色av女优在线观看| 日本中文在线视频| 97香蕉超级碰碰久久免费软件 | 国产不卡一区二区三区在线观看| 国产精品免费无遮挡无码永久视频| 91国产丝袜在线放| 国产精品进线69影院| 白嫩情侣偷拍呻吟刺激| 97在线免费观看| 精品亚洲免费视频| 中文字幕精品一区二区三区在线| 精品欧美乱码久久久久久| 亚洲一级视频在线观看| 一本一生久久a久久精品综合蜜| 五月天一区二区| 欧美精品色哟哟| 欧美精彩一区二区三区| 日本国产一区二区| 亚洲在线免费观看视频| xxxx一级片| 国产精品久久久久久久久久东京 | 亚洲精品国产精品国自产网站按摩| 亚洲最大av网| 五月激情综合色| 91精品在线视频观看| 日韩精品一区中文字幕| 久久天天躁夜夜躁狠狠躁2022| 国产亚洲精品7777| 国产色视频在线| 国产福利精品一区二区三区| 成人在线看片| 亚洲国产欧美久久| 日本欧美一区二区| 泷泽萝拉在线播放| 久久久亚洲天堂| 久久精品一区二区三区四区| 午夜偷拍福利视频| 一区二区三区不卡在线| 亚洲人午夜精品| 久久综合久久鬼色中文字| 久久久久久久极品内射| www精品久久| 国产做受69高潮| 一本久久精品一区二区| 视频一区二区中文字幕| 99久久人妻精品免费二区| 97国产suv精品一区二区62| 黄色成人在线免费| 久久99精品国产麻豆婷婷| 国产传媒国产传媒| 缅甸午夜性猛交xxxx| 国产有码在线一区二区视频| 日韩一区二区三区电影| 日本欧美一区二区| 精品一级少妇久久久久久久| 激情五月亚洲色图| 欧美一二三视频| 一本久久综合亚洲鲁鲁五月天| 亚洲一区欧美在线| 捆绑凌虐一区二区三区| 欧美精品一区二区三区在线四季| 中文字幕日韩精品在线观看| 亚洲最大成人网4388xx| 激情六月婷婷综合| 少妇又紧又色又爽又刺激视频 | 欧美综合一区第一页| 日韩精品一区二区三区在线| 亚洲三级免费电影| 国产福利一区二区三区视频| 国产麻豆91视频| 神马久久精品综合| 中文字幕在线视频播放| 岛国大片在线播放| 成人国产精品一区| 久久久久久高潮国产精品视| 日韩成人网免费视频| 欧美日韩亚洲丝袜制服| 国产精品伦一区二区三级视频| 中文字幕观看在线| 夜夜爽妓女8888视频免费观看| 日本黄色小视频在线观看| 91九色蝌蚪porny| 天天干天天综合| 日本999视频| 亚洲精品视频导航| 亚洲欧美日韩综合一区| 美女主播视频一区| 久久精品中文字幕一区二区三区| 91视频免费在线| 成人免费看黄网站| 国产主播在线一区| 91精品久久久久| 999国内精品视频在线| 亚洲va久久久噜噜噜久久天堂| 国产成人精品在线观看| 国产精品一区二区久久精品| 国产精品小说在线| 久久香蕉综合色| 亚洲淫片在线视频| 国产在线欧美日韩| 欧美剧情片在线观看| 国产亚洲人成a一在线v站| 欧美精品videossex88| 欧美一级黄色网| 久久久久久高清| 国产精品国产对白熟妇| 亚洲色图欧美日韩| 国产精品第108页| 91九色蝌蚪91por成人| 国产精品久久久久久久久久久久久久久久 | 国内精品一区二区三区| 久久久亚洲国产| 精品久久精品久久| 精品久久久久久无码国产| av中文字幕免费观看| 日韩精品成人免费观看视频| 久久激情视频| 亚洲日本电影在线| 欧美精品一区二区三| 久精品免费视频| 中文字幕日韩一区二区三区| 丰满人妻一区二区三区大胸 | 97在线视频免费| 欧美重口乱码一区二区| а 天堂 在线| 欧美日韩a v| 91在线视频网址| 亚洲美女福利视频网站| 91色精品视频在线| 干日本少妇首页| 69亚洲精品久久久蜜桃小说| 粉嫩av一区二区三区在线播放| 欧美羞羞免费网站| 日韩美女福利视频| 久久久精品三级| 国产精品毛片一区视频播| 国产精品久久久久久妇女6080| 亚洲色图25p| 久久久久久久久久久久久国产| 特黄一区二区三区| 国产剧情一区二区三区| 日韩精品福利在线| 免费看污久久久| 久草视频免费在线| 91原创在线视频| 日韩在线欧美在线国产在线| 欧美一级中文字幕| 中文字幕 视频一区| 一区二区三区四区不卡视频| 97超视频免费观看| 亚洲欧美偷拍另类| 无码国产精品一区二区免费16| 日韩一区二区在线观看| 日韩精品一区二区三区电影| 中文字幕欧美色图| 亚洲主播在线观看| 国产精品美女黄网| 男人的天堂一区| 黑人精品xxx一区| 精品欧美日韩| 欧美精品一二三四区| 色婷婷av一区二区三区软件| 日本精品一区二区三区不卡无字幕| 西西44rtwww国产精品| 欧美亚洲精品一区| 精品国产一区二区三区在线| 秋霞av鲁丝片一区二区| 一本大道亚洲视频| 国产成人精品无码播放| 亚洲福利在线观看视频| 亚洲日本aⅴ片在线观看香蕉| 国产理论在线播放| 国产激情视频一区二区三区欧美 | 国产一区二区三区国产| www.久久久久| 日本激情小视频| 一区二区三区在线播| 亚洲成人av动漫| 中文字幕精品一区二| 亚洲欧美日韩国产成人| 香蕉视频黄色在线观看| 亚洲午夜电影在线观看| 青青青免费在线| 91麻豆免费在线观看| 国产精品亚洲片夜色在线| 在线不卡免费视频| 国外成人在线视频| 中文字幕日韩免费| 欧美另类极品videosbestfree| 亚洲区一区二区三| 亚洲精品成人av| 一区视频免费观看| 国产亚洲成av人片在线观看桃| www.99热| 亚洲美女精品久久| 在线观看黄网址| 91精品午夜视频| 污污的视频在线免费观看| 国产偷亚洲偷欧美偷精品| 黑人狂躁日本娇小| 欧美日韩不卡在线| 亚洲毛片亚洲毛片亚洲毛片| 精品网站999www| 日本一级片免费| 日韩在线资源网| 亚洲图片在线播放| 91精品国产综合久久男男 | 女人高潮一级片| 欧美日韩一区不卡| 国产美女免费网站| 久久99国产精品久久久久久久久| 97国产精品久久久| 福利视频久久| 国产片一区二区三区| 国产免费黄色小视频| 欧美肥妇毛茸茸| 国产精品视频免费播放| 欧美有码在线视频| 麻豆国产精品视频| 青青青在线观看视频| 一区在线中文字幕| 中文字幕亚洲影院| 亚洲欧美日韩第一区| 国产免费一区二区三区最新不卡| 久久青青草综合| 色一情一乱一乱一91av| 国产在线观看免费av| 91视频在线免费观看| 亚洲综合图片区| 久久久久亚洲av片无码下载蜜桃| 国产精品久久久久久久av大片| 国产亚洲欧洲997久久综合| 9.1成人看片| 91亚洲精品一区| 欧美日韩在线另类| 国产情侣免费视频| 黄色一级片在线看| 亚洲欧美中文另类| 日本一不卡视频| 337p日本欧洲亚洲大胆张筱雨| 久久免费观看视频| 国产精品欧美一区二区三区| 五月天婷婷色综合| 天天爽天天狠久久久| 精品国产乱码久久久久久久久 | 中文文字幕一区二区三三| 国产精品电影一区| 日韩av在线天堂| 久久精品夜夜夜夜夜久久| 成人av电影在线网| japanese中文字幕| 久草一区二区| 中文字幕在线看视频国产欧美| 性猛交富婆╳xxx乱大交天津 | 污片在线观看一区二区| 精品国产午夜福利| 国产免费人做人爱午夜视频| 国产精品久久久av| 国产成人在线免费观看| 97干在线视频| 夜夜亚洲天天久久| 成人一区二区免费视频| 亚洲天堂av电影| 国产一区二区导航在线播放| 国产精品无码在线| 日本婷婷久久久久久久久一区二区| 在线免费av一区| 亚洲少妇中出一区| 五月天亚洲综合情| 91精品国产欧美一区二区| 国产精品国产自产拍高清av| 久久99日本精品| 人妻少妇精品无码专区久久| 黄色片在线观看网站| 最近中文字幕免费视频| 精品久久久久久久久久久院品网| 香蕉影院在线观看| 久久偷窥视频| 啪一啪鲁一鲁2019在线视频| 日韩国产高清视频在线| 欧美性猛交xxxx乱大交极品| 日本黄色免费视频| 黑人一级大毛片| 免费中文字幕在线观看| 国产精品密蕾丝袜| 无码任你躁久久久久久老妇| 扒开jk护士狂揉免费| 日本成人黄色网| av污在线观看| 99视频在线视频| 中文字幕一区二区在线观看视频| 超碰97在线看| 免费极品av一视觉盛宴| 亚洲人成影视在线观看| 97netav| 国产欧美日韩专区发布| 热re99久久精品国产66热 | 国产真实乱子伦精品视频| 久久综合狠狠| 日韩专区一卡二卡| 波多野结衣91| 亚洲国产成人av好男人在线观看| 亚洲一二三专区| 日本一二三四高清不卡| av男人天堂av| 国产美女18xxxx免费视频| 欧美人与性禽动交精品| 四虎一区二区| 91人妻一区二区三区| 九九热视频精品| 亚洲va欧美va| 成人1区2区3区| 韩国一区二区在线观看| 亚洲男人的天堂网| 在线91免费看| 欧美剧在线观看| 日韩av色在线| 蜜桃传媒视频麻豆第一区免费观看 | 午夜av免费在线观看| 蜜臀a∨国产成人精品| 成人性生交大片免费看中文网站| 国产精品美女久久久久aⅴ国产馆| 性做久久久久久| 中文字幕一区二区三区电影| 成人激情黄色网| 日本一区午夜艳熟免费| 午夜激情视频在线播放| 美女久久一区| 一本久久a久久精品亚洲| 在线观看国产精品淫| 国内视频一区| 免费观看污网站| 91在线你懂的| 亚洲国产日产av| 欧美另类老女人| 久久久福利视频| 久久久999免费视频| 小早川怜子久久精品中文字幕| 中文字幕在线观看1| 高清不卡在线观看| 亚洲精品二三区| 91综合免费在线| 日韩av成人网| 久久精品伊人| 欧美色电影在线| 91免费精品视频| 国产人与禽zoz0性伦| 国产成人精品1024| 九九视频这里只有精品| 一女二男3p波多野结衣| 久久精品国产秦先生| 亚洲一二在线观看| 久久久久久久久久一区二区| 人人妻人人玩人人澡人人爽| 日韩av在线免费观看| 男人透女人免费视频| 亚洲精品视频网| 国产成人精品免费|