精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

開發最佳實踐:在Web應用開發中優化Struts框架

開發 后端
本文向您講解了如何使用靈活的Struts框架調節Web應用程序開發。這里向您展示了一些最佳實踐,您可以遵循這些實踐來優化這個成熟的開源框架。此外,您還可以學習使用一些十分有價值的標準Struts組件,包括 ActionForm、Action 類和 ActionErrors。

Struts是一種開源框架,可用來構建Web應用程序,它基于流行的Model-View-Controller (MVC2) 設計范型。該框架構建在一些標準的技術之上,比如Java Servlets、JavaBeans、ResourceBundles和XML,并且可提供靈活和可擴展的組件。

關于Struts更多內容,請參閱:Struts框架應用專題

Struts以ActionServlet的形式實現了Controller層,并建議使用JSP標記庫構建View層。Struts 通過Action類提供了圍繞Model層的包裝器。圖1展示了基于Model-View-Controller設計的Struts框架。

基于Model-View-Controller設計的Struts框架 
圖1.Struts和MVC

Struts 組件概覽

首先,我們在***實踐上下文中解釋 Struts 組件,以及它們在 Web 應用程序開發中所起的作用。

Action

應用程序的每個 Action 都會擴展 Struts 的 org.apache.struts.action.Action 類。這些 Action 類為應用程序的 Model 層提供了一個接口,充當圍繞業務邏輯的包裝器。每個 Action 類都必須向 perform() 方法提供其特定于用例的實現。perform() 方法經常返回類型 ActionForward 的一個值。

ActionForm

應用程序的 ActionForm 擴展了 Struts 的 org.apache.struts.action.ActionForm 類。ActionForm 是一些封裝和驗證請求參數的簡單 JavaBean。要驗證請求數據,ActionForm 的 validate() 方法必須給出一個特定于該情況的實現。ActionForm 作為運載工具,向 Action 類提供請求數據。一個 JSP 對象與各自的 ActionForm 對象相結合,構成應用程序的 View 層。在該層,幾乎 JSP 對象的每個表單字段都映射到相應的 ActionForm 的屬性。

JSP 定制標記庫

JSP 定制標記庫是用標記表示的一組行為的集合。這是 JSP Specification 1.1 的一個強大特性;它將其他應用程序層的表示區別了開來。這些庫易于使用,而且可以以一種類似 XML 的方式來讀取。只要盡量少地在其中使用 Java scriptlet,就可以輕松維護 JSP 組件。Struts 提供的 JSP 標記包括 HTML、邏輯和 bean 標記。

ActionErrors

可以使用 ActionError 來支持異常處理。ActionError 捕捉應用程序異常,并將其傳送給 View 層。每個異常都是一個 ActionError 實例的集合。ActionError 可以封裝錯誤消息,而 Presentation 層中的 </html:errors> 可以呈現 ActionError 集合內的所有錯誤消息。

***實踐 1. 跨多個 ActionForm 重用數據

熟悉了 Struts 組件之后,就可以繼續學習如何充分利用這一框架。首先,Struts 建議將每個 JSP 對象與一個 ActionForm 相關聯,后者可以封裝屏幕上顯示的數據??梢酝ㄟ^ ActionForm 內的附加方法來訪問 JSP 對象內的表單數據。清單 1 展示了 ActionForm 標記在 View 層中的傳統方法。

  1. 清單 1. 使用 ActionForm  
  2.    <html:form action="/bp1"> 
  3.  
  4.    <html:text  property="attrib1" /> 
  5.  
  6.    </html:form > 

這個ActionForm被稱為 “BP1AForm”,它包括屬性attrib1及其getter和setter方法。在配置文件struts-config.xml中,行為 “/bp1” 通過name屬性映射到 bp1AForm。這有助于在JSP中顯示數據。要實現這一***實踐,Struts 建議您進行以下兩個操作:

創建一個 JavaBean(BP1BForm),且其屬性是 BP1AForm 屬性的子集,還要創建這些屬性的 getter 和 setter 方法。通過將這個 bean 與 BP1AForm 關聯,用 bean BP1BForm 的屬性替代 BP1AForm 中的屬性?,F在就可以通過 BP1BForm 訪問 BP1AForm 中的屬性子集了。清單2展示了訪問的方式。

  1. 清單 2. 訪問 JSP 中的表單屬性  
  2.    <html:form action="/bp1"> 
  3.  
  4.    <bean:define name="bp1AForm" property="bp1BForm" id="bp1B" 
  5.                 type="com.ibm.dw.webarch.struts.BP1BForm" /> 
  6.  
  7.    <html:text  name="bp1B" property="subsetAtt1" /> 
  8.  
  9.    </html:form > 

要點

這種實踐的主要優勢是可用于多個 ActionForm 訪問一個屬性集。在遵循這一***實踐的同時,需要記住以下幾點:

1.Struts 實現 <bean:define/> 標記。

2.當代碼 <%@ taglib uri="struts-bean.tld" prefix="bean" %> 指向 struts-bean.tld 時,<bean:define/> 標記開始在 JSP 組件內工作。

3.由 ActionForm 擴展而來的 BP1AForm 驗證框架必須驗證 BP1BForm 的數據。

4.當在應用程序中創建 Action 類時,不需要直接擴展 org.apache.struts.action.Action,可以通過擴展 org.apache.struts.action.Action 創建一個 Action 類(IntermediateAction),用于處理應用程序中的常見事務。所有其他的 Action 類都擴展 IntermediateAction 類。
#p#

***實踐 2. 使用 Action 類處理請求

通常,在使用這個 Struts 框架時,對于 JSP 組件請求應用程序執行的每個動作,應用程序都必須擴展Struts的org.apache.struts.action.Action以創建Action類。在處理請求時,單個的 Action 類與應用程序的 Model 層連接。要實現這一***實踐,Struts 建議您遵循以下步驟:

1.通過擴展 org.apache.struts.action.Action 創建一個 Action 類,比如 BP2Action。

2.通過擴展 BP2Action 在 Web 應用程序中創建所有其他 Action 類。

3.在 BP2Action 類中創建一個方法 performTask(),就像在公共抽象類 ActionForward performTask(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException 中一樣。
 
4.在BP2Action 類中向應用程序添加一個或多個泛型方法,比如 serverSideValidate()??紤]以下因素后決定方法的訪問修飾符:

◆如果所有 Action 類都必須實現此方法,則讓其為抽象。
◆如果某些 Action 類提供一個特定的實現,則將此方法聲明為受保護,并給它一個默認實現。

5.在 BP2Action 類中,將方法 perform() 聲明為 final。調用上述的泛型方法(通常在處理請求前調用該方法)。現在調用 步驟 3 中創建的方法 performTask()。
在每個擴展 BP2Action 的 Action 類,添加具有特定實現的方法 performTask()。

優勢

這一實踐有兩個主要優勢。首先,它避免了 Web 應用程序中每個 Action 類的冗余代碼。其次,通過將 Action 類的行為集中在一起,使應用程序能夠更多地控制通用的任務。

#p#

***實踐 3. 使用 ActionForm 處理會話數據

在一個基于 Struts 的 Web 應用程序中,每個 ActionForm 都擴展 org.apache.struts.action.ActionForm 類。這些 ActionForm 封裝頁面數據,并提供一個驗證框架來驗證請求參數。

大多數 Web 應用程序都在會話中保持數據,使其在整個應用程序過程中可用。這種***實踐實現了這種 Web 應用程序特性。它允許方法 toSession() 和 fromSession() 將會話數據移動到表單數據或從表單數據移回。因此,它實現了在 Web 應用程序中保持會話數據。要遵循一***實踐,執行以下步驟:

通過擴展 org.apache.struts.action.ActionForm 創建一個名為 BP3Form 的抽象類。在BP3Form類中,添加具有訪問修飾語的方法,就像在公共抽象類 void toSession(SessionData sessionData) 和 void fromSession(SessionData sessionData) 中一樣。

在每個 ActionForm 類中,擴展 BP3Form 并實現這些抽象方法(表單數據通過它們傳遞到會話或從會話傳回)。 相應的 Action 類可以決定這些方法的調用順序。例如,可以在決定 actionForward 之前調用 ActionForm 上的方法 toSession()。
何時使用這一實踐,這一實踐最適用于:會話數據是單一對象和/或每個頁操作或使用會話數據。

#p#

***實踐 4.有效處理異常

傳統地,當在 Action 類中發生應用程序異常時,異常首先被寫入日志。然后此類創建一個 ActionError 并在合適的作用域中存儲它。然后 Action 類再將控制轉交給合適的 ActionForward。清單 3 展示了 Action 類是如何處理異常的。

  1. 清單 3. Action 類中的異常處理  
  2.    try {  
  3.    //Code in Action class  
  4.    }  
  5.    catch (ApplicationException e) {  
  6.    //log exception  
  7.    ActionErrors actionErrors = new ActionErrors();  
  8.    ActionError actionError = new ActionError(e.getErrorCode());  
  9.    actionErrors.add(ActionErrors.GLOBAL_ERROR, actionError);  
  10.    saveErrors(request, actionErrors);  
  11.    } 

傳統的異常處理過程在每個 Action 類中保存異常信息,而***實踐 4 則在處理異常時避免冗余代碼。要使用這一***實踐,Struts 建議您遵循以下步驟:

1.通過擴展 org.apache.struts.action.Action 創建一個 Action 類,比如 BP4Action。

2.通過擴展 BP4Action 在 Web 應用程序中創建所有其他 Action 類。

3.在 BP4Action 中聲明變量 ActionErrors actionErrors = new ActionErrors();。

4.在 BP4Action 中創建方法 performTask(),就像在公共抽象類 ActionForward performTask(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response, ActionErrors actionErrors) throws IOException, ServletException 中一樣。

6.在BP4Action中將方法perform()聲明為final。然后調用泛型方法(這些方法總是在處理請求前調用)?,F在調用在前一個步驟中創建的 performTask()。

7.在每個 Action 類中實現方法performTask()的同時(通過擴展 BP4Action),像清單 4 那樣處理應用程序異常。

  1. 清單 4. 有效使用 ActionErrors  
  2.    try   {  
  3.    //Code in Action class  
  4.    }  
  5.    catch(ApplicationException appException) {  
  6.    //Log exception  
  7.    //Add error to actionErrors  
  8.    actionErrors.add(ActionErrors.GLOBAL_ERROR,  
  9.       new ActionError(appException.getErrorCode()));  
  10.    }  

在BP4Action中,調用方法performTask()之后,通過saveErrors(request, errors)保存ActionErrors。

優勢

這一實踐主要的優勢是:避免了每個處理 ActionErrors的Action類中的代碼冗余。

結束語

對開發團隊而言,構建易于維護的Web應用程序是一項非常具有挑戰性的任務。使用Struts等成熟的框架有助于實現通常與構建應用程序相關的基礎設施代碼。Struts 框架提供了一組標準接口,用于將業務邏輯插入到應用程序中。此外,還提供了一種跨開發團隊的一致機制,用于執行用戶數據驗證、屏幕導航等任務,以及用于簡化開發屏幕的一組定制標記庫。

本文給出的4種***實踐對您充分利用這種框架的特性十分重要。它們不僅能夠提高代碼的模塊化程度和應用程序的可重用性,還能減少代碼冗余。對于構建可擴展的Web應用程序,這是至關重要的。

【編輯推薦】

  1. 在Struts框架下使用時間類型
  2. 實例說明Struts和Spring如何集成
  3. 對于Struts和Spring兩種MVC框架的比較
  4. Struts標簽庫中的HTML標簽
  5. Struts優缺點剖析 開源是把雙刃劍?
責任編輯:王曉東 來源: IBM
相關推薦

2020-06-12 07:00:00

Web開發項目

2009-01-03 14:57:19

ibmdwLotusWeb2.0

2012-12-13 09:47:50

2024-07-01 00:00:06

ASP.NET開源

2015-08-25 09:53:22

Web開發Python框架

2010-12-02 14:32:43

Mobile Web移動互聯網移動Web設計

2014-03-19 14:34:06

JQuery高性能

2022-05-30 07:48:11

DevOps測試策略

2010-03-09 13:27:23

Web 2.0應用程序

2014-11-19 10:08:47

2013-12-17 14:07:37

2021-09-17 09:30:57

鴻蒙HarmonyOS應用

2016-01-06 11:00:18

2018-05-10 15:06:43

Java Web分層實踐

2022-01-06 09:55:19

鴻蒙HarmonyOS應用

2010-11-17 12:59:52

2020-07-24 07:00:00

Laravel框架Web應用開發

2010-11-15 09:13:22

云計算開發測試

2009-09-27 09:41:21

Web開發

2018-12-17 16:39:20

Golang微服務
點贊
收藏

51CTO技術棧公眾號

国产一区在线免费| 久久99久国产精品黄毛片入口| 日韩在线综合网| 日韩a级作爱片一二三区免费观看| 国产精品入口| 亚洲深夜福利视频| 制服丝袜中文字幕第一页 | 99国产精品久久久久久久久久| 91精品国产色综合久久不卡98口| 成人免费毛片糖心| 9.1麻豆精品| 天天综合色天天| 亚洲欧美日产图| 六月婷婷综合网| 麻豆久久婷婷| 欧美日韩不卡合集视频| 污污污www精品国产网站| 午夜av成人| 亚洲一区二区欧美激情| 日韩三级电影免费观看| 亚洲AV无码精品自拍| 肉色丝袜一区二区| 孩xxxx性bbbb欧美| 日本成人精品视频| 香蕉久久精品| 日韩午夜在线观看视频| 天天操天天摸天天爽| 欧美aaa免费| 国产精品国产三级国产普通话三级 | 九九热精品免费视频| 狠狠综合久久av一区二区蜜桃| 日韩一区二区三免费高清| 人妻无码视频一区二区三区| 丁香影院在线| 亚洲视频图片小说| 日韩一区二区三区资源| 天天干天天色天天| 国产成人一区在线| 91久久精品国产| 在线观看亚洲黄色| 亚洲免费网站| 性色av一区二区三区红粉影视| 国内毛片毛片毛片毛片毛片| 欧美欧美黄在线二区| 亚洲精品一区二区三区福利| 亚洲在线观看网站| 欧美高清你懂的| 欧洲国产伦久久久久久久| 欧美久久久久久久久久久久久 | 国产精品久久久久精k8| 欧美精品在线一区| 污视频网站在线播放| 国产99久久久国产精品潘金| 91亚洲国产精品| 国产精品亚洲lv粉色| 美女性感视频久久| 国产精品自拍小视频| 国产精华7777777| 肉丝袜脚交视频一区二区| 日韩av成人在线| www.久久精品视频| 美女久久网站| 日本乱人伦a精品| 欧美黄色一级大片| 日韩精品五月天| 国产成人午夜视频网址| 一级黄色av片| 奇米一区二区三区av| 国产精品久久久久久久久久99| 探花视频在线观看| 久久精品日产第一区二区| 欧美最近摘花xxxx摘花| 久久亚洲精品石原莉奈| 日本亚洲最大的色成网站www| 日本三级久久久| 糖心vlog精品一区二区| 欧美aⅴ一区二区三区视频| 国产精品久久久久一区二区| 在线免费观看视频网站| 黑人巨大精品欧美黑白配亚洲| 91精品综合视频| 国产偷人妻精品一区二区在线| 国产成人在线视频网站| 国产无套精品一区二区| 欧洲亚洲在线| 国产精品第五页| 中文字幕在线中文| 九色porny视频在线观看| 色婷婷精品久久二区二区蜜臂av | 久久久久久久9999| 精久久久久久| 日韩美女中文字幕| 一区二区三区播放| 成人黄色在线视频| 日本精品一区二区| www.久久久久.com| 精品国产91乱高清在线观看| 久久久国产欧美| 久久综合给合| 亚洲精品一区在线观看香蕉| 免费一级suv好看的国产网站| 你懂的国产精品永久在线| 久久久亚洲成人| 糖心vlog精品一区二区| 国产成人啪午夜精品网站男同| 国产一区在线免费| 欧美成人三区| 欧美日韩精品在线| 99精品视频国产| 亚洲尤物av| 久久成人精品一区二区三区| 国产精品久久久久久人| 韩国视频一区二区| 欧洲国产精品| 免费在线播放电影| 欧美丝袜第三区| 手机在线看片日韩| 你懂的网址国产 欧美| 国产精品1区2区在线观看| 99热这里只有精品3| 国产视频不卡一区| 91丨porny丨探花| 精品午夜av| 中文字幕精品www乱入免费视频| 国产在线综合网| 狠狠久久亚洲欧美| 香蕉久久夜色| 波多野结衣久久精品| 精品久久久久久久久久久久包黑料| 久久久精品成人| 翔田千里一区二区| 99在线影院| 黄色动漫在线| 欧洲精品一区二区| 男生草女生视频| 国产日韩欧美三区| 国产精品免费视频一区二区| www视频在线免费观看| 欧美日韩综合一区| 在线观看国产精品一区| 国产一区二区你懂的| 成人欧美一区二区三区视频xxx| aaa在线观看| 欧美性猛交xxxx免费看漫画| 91丨porny丨对白| 欧美喷水视频| 亚洲一区二区中文| 国产网站在线免费观看| 欧美色男人天堂| 亚洲ⅴ国产v天堂a无码二区| 日韩国产一区二| 欧美一级爽aaaaa大片| 在线观看欧美日韩电影| 亚洲精品国产品国语在线| 日韩免费一二三区| 成人中文字幕电影| av在线播放亚洲| 爽爽窝窝午夜精品一区二区| 538国产精品一区二区在线 | 岛国av在线一区| 真实国产乱子伦对白视频| 6080成人| 久久久久久久国产| 视频一区二区免费| 婷婷久久综合九色综合伊人色| 又色又爽又黄18网站| 激情欧美一区| 另类小说综合网| 欧美大胆成人| 中文字幕一区日韩电影| 国产精品人妻一区二区三区| 亚洲美腿欧美偷拍| 亚洲成人精品在线播放| 亚洲高清免费| 欧美日本亚洲| 久久91视频| 久久伊人精品视频| а√中文在线资源库| 午夜精品一区二区三区三上悠亚| 韩国无码一区二区三区精品| 久久久水蜜桃av免费网站| 视频三区二区一区| 精品亚洲二区| 日本精品一区二区三区在线| 四虎久久免费| 精品国精品自拍自在线| 九九九在线观看| 国产精品久久看| 欧美成人精品一区二区综合免费| 国产精品久久久久久久久久妞妞 | 欧美日韩在线第一页| 精品亚洲aⅴ无码一区二区三区| 久久99国产精品麻豆| 欧美亚洲黄色片| 国产影视一区| 69堂成人精品视频免费| 一区二区电影免费观看| 久久伊人精品一区二区三区| 熟妇高潮一区二区三区| 欧美日韩一区高清| 日本一二三区不卡| 国产精品女人毛片| 一区二区免费在线观看视频| 免费成人在线网站| 男女超爽视频免费播放| 久久麻豆精品| 久久精品日产第一区二区三区精品版 | 一区二区三区视频在线看| 欧美bbbbb性bbbbb视频| 黑人巨大精品欧美一区| 精品久久久久av| 欧美日本二区| 亚洲一区二区三区欧美| 天堂综合网久久| 91偷拍精品一区二区三区| 日本在线视频一区二区| 91国产视频在线| a毛片在线播放| 在线观看欧美视频| 亚洲日本国产精品| 日韩欧美一区二区视频| 中文字幕在线观看1| 欧美日韩中国免费专区在线看| 日韩影院一区二区| 国产欧美综合色| 素人fc2av清纯18岁| 成人中文字幕合集| 久久久国产精品久久久| 麻豆一区二区99久久久久| 凹凸国产熟女精品视频| 国一区二区在线观看| 警花观音坐莲激情销魂小说| av中字幕久久| 欧美欧美一区二区| 女仆av观看一区| 超碰国产精品久久国产精品99| 亚洲18在线| 国产精品久久久久久五月尺| 日韩性xxx| 欧美综合第一页| 伊人久久视频| 日韩美女在线播放| 二吊插入一穴一区二区| 日产精品久久久一区二区福利| 涩涩涩视频在线观看| 97视频在线观看视频免费视频| 日本天码aⅴ片在线电影网站| 久久天天躁狠狠躁夜夜爽蜜月| 色综合久久久久综合一本到桃花网| 亚洲女成人图区| 男人的天堂在线| 亚洲欧美国产一区二区三区| 免费在线国产| 国产亚洲激情视频在线| 国产中文在线| 亚洲香蕉成视频在线观看| 国产露出视频在线观看| 一本色道久久88精品综合| 国产日韩精品在线看| 一区二区三区美女xx视频| h视频在线观看免费| 日韩性xxxx爱| 在线观看操人| 欧美高清视频免费观看| 大香伊人久久| 日本欧美一级片| 国语自产精品视频在线看抢先版结局 | 久久免费小视频| 亚洲一区二区三区影院| 日韩高清精品免费观看| 日韩欧美亚洲成人| 国产精品xxxxxx| 7777精品伊人久久久大香线蕉超级流畅 | 国产三区在线观看| 欧美精品激情blacked18| 岛国av在线播放| 国产成人av在线| 色8久久久久| αv一区二区三区| 天堂99x99es久久精品免费| 欧美一区二区三区四区在线观看地址 | 亚洲精品一区二区三区香蕉| 青青青草原在线| 中文字幕欧美日韩精品| а√天堂8资源在线官网| 国自产精品手机在线观看视频| **欧美日韩在线观看| 国产专区精品视频| 红杏aⅴ成人免费视频| 日韩精品一区二区三区丰满| 性xxxx欧美老肥妇牲乱| 国产日韩av网站| 日韩av不卡一区二区| 国产成人强伦免费视频网站| 97久久精品人人爽人人爽蜜臀| youjizz亚洲女人| 夜夜操天天操亚洲| 欧美日韩在线视频播放| 精品欧美久久久| 丁香婷婷在线| 久久久久久网站| 国产91欧美| 精品视频一区二区| 亚洲欧洲中文字幕| 91免费视频网站在线观看| 狠狠狠色丁香婷婷综合激情| 丰满圆润老女人hd| 亚洲你懂的在线视频| 高潮毛片又色又爽免费| 日韩欧美一区电影| 一本一道波多野毛片中文在线 | 国产一级做a爰片在线看免费| 欧美性色综合网| 四季av日韩精品一区| 久久视频这里只有精品| 欧美日韩国产网站| 精品91免费| 欧美日韩国产在线一区| 视频在线观看免费高清| 久久久青草青青国产亚洲免观| 青娱乐在线视频免费观看| 欧美体内she精视频| 深夜影院在线观看| 久久久久久久香蕉网| 久久av网站| 伊人狠狠色丁香综合尤物| 久久中文字幕一区二区三区| 国产精品久久久久久亚洲av| 亚洲人xxxx| 中文字幕一区二区三区人妻四季 | 欧美色精品在线视频| 色哟哟在线观看| 久久全球大尺度高清视频| 日本成人精品| 26uuu成人| 蜜芽一区二区三区| 日韩不卡av在线| 色爱区综合激月婷婷| 无码精品人妻一区二区三区影院| 欧美黄网免费在线观看| 久久gogo国模啪啪裸体| 强开小嫩苞一区二区三区网站| 蜜桃视频第一区免费观看| 日本黄色小视频在线观看| 日本久久一区二区三区| 九九九伊在人线综合| 欧亚精品在线观看| 同性恋视频一区| 黄www在线观看| 91视频一区二区| 国产成人无码av| 亚洲视频欧美视频| 国精产品一区二区三区有限公司| 欧美三级华人主播| 狂野欧美性猛交xxxx巴西| 一色道久久88加勒比一| 91黄色免费观看| h视频在线观看免费| 国产在线播放91| 久久精品欧美一区| 最新国产精品自拍| 亚洲高清免费视频| 性xxxxbbbb| 日本中文字幕成人| 久久国产成人精品| 亚洲欧美日韩一二三区| 亚洲午夜激情av| 日本人妖在线| 国产精品视频免费观看www| 99久久亚洲精品| 丰满饥渴老女人hd| 午夜国产精品一区| 经典三级在线| 成人在线一区二区| 亚洲天堂偷拍| 日本高清www| 欧美日韩精品免费观看视频| 菠萝菠萝蜜在线视频免费观看| 国产乱码一区| 丝袜美腿一区二区三区| 中文字幕在线观看2018| 亚洲成成品网站| 亚洲第一影院| 大桥未久一区二区| 99久久免费视频.com| 国产精品成人久久久| 欧美大片在线看免费观看| 西瓜成人精品人成网站| 亚洲一级片av| 欧美视频中文字幕在线| 日韩欧美小视频| 国产经品一区二区| 日韩国产一区二| 国产亚洲成人精品| 在线看片第一页欧美| 香蕉大人久久国产成人av| 午夜肉伦伦影院| 亚洲视频中文字幕| 青青草在线免费观看| 91嫩草国产在线观看|