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

Struts framework的工作原理和組件

開發 后端
本文介紹的是Struts framework的工作原理和組件,介紹的組件有ActionServlet,Action Classes,Action Mapping(此處包括ActionForward),ActionFrom Bean。希望對你有幫助,一起來看。

Struts是基于 MVC 模式的 Web 應用最經典框架。對于Struts 如何控制、處理客戶請求,讓我們通過對struts的四個核心組件介紹來具體說明。這幾個組件就是:ActionServlet,Action Classes,Action Mapping(此處包括ActionForward),ActionFrom Bean。

Struts ActionServlet控制器對象

ActionServlet繼承自javax.servlet.http.HttpServlet類,其在Struts framework中扮演的角色是中心控制器。它提供一個中心位置來處理全部的終端請求。控制器ActionServlet主要負責將HTTP的客戶請求信息組裝后,根據配置文件的指定描述,轉發到適當的處理器。

按照Servelt的標準,所有得Servlet必須在web配置文件(web.xml)聲明。同樣,ActoinServlet必須在Web Application配置文件(web.xml)中描述,有關配置信息如下。

  1. <servlet>  
  2. <servlet-name>action</servlet-name>  
  3. <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>  
  4. </servlet> 

全部的請求URI以*.do的模式存在并映射到這個servlet,其配置如下:

  1. <servlet-mapping>  
  2. <servlet-name>action</servlet-name>  
  3. <url-pattern>*.do</url-pattern>  
  4. </servlet-mapping> 

一個該模式的請求URI符合如下格式:http://www.my_site_name.com/mycontext/actionName.do

中心控制器為所有的表示層請求提供了一個集中的訪問點。這個控制器提供的抽象概念減輕了開發者建立公共應用系統服務的困難,如管理視圖、會話及表單數據。它也提供一個通用機制如錯誤及異常處理,導航,國際化,數據驗證,數據轉換等。

當用戶向服務器端提交請求的時候,實際上信息是首先發送到控制器ActionServlet,一旦控制器獲得了請求,其就會將請求信息傳交給一些輔助類(help classes)處理。這些輔助類知道如何去處理與請求信息所對應的業務操作。在Struts中,這個輔助類就是org.apache.struts.action.Action。通常開發者需要自己繼承Aciton類,從而實現自己的Action實例。

Struts Action Classes

ActionServlet把全部提交的請求都被控制器委托到RequestProcessor對象。RequestProcessor使用struts-config.xml文件檢查請求URI找到動作Action標示符。

一個Action 類的角色,就像客戶請求動作和業務邏輯處理之間的一個適配器(Adaptor),其功能就是將請求與業務邏輯分開。這樣的分離,使得客戶請求和Action類之間可以有多個點對點的映射。而且Action類通常還提供了其它的輔助功能,比如:認證(authorization)、日志(logging)和數據驗證(validation)。

  1. public ActionForward execute(ActionMapping mapping,  
  2. ActionForm form,  
  3. javax.servlet.ServletRequest request,  
  4. javax.servlet.ServletResponse response)  
  5. throws java.io.IOException,javax.servlet.ServletException 

Action最為常用的是execute()方法。(注意,以前的perform方法在struts1.1中已經不再支持),還有一個execute()方法,請參考apidoc,在此不在說明。

當Controller收到客戶的請求的時候,在將請求轉移到一個Action實例時,如果這個實例不存在,控制器會首先創建,然后會調用這個Action實例的execute()方法。Struts Framework為應用系統中的每一個Action類只創建一個實例。因為所有的用戶都使用這一個實例,所以你必須確定你的Action 類運行在一個多線程的環境中。下圖顯示了一個execute()方法如何被訪問:

Action實例的execute()方法

注意,客戶自己繼承的Action子類,必須重寫execute()方法,因為Action類在默認情況下是返回null的。

Struts Action Mapping

上面講到了一個客戶請求是如何被控制器轉發和處理的,但是,控制器如何知道什么樣的信息轉發到什么樣的Action類呢?這就需要一些與動作和請求信息相對應的映射配置說明。在struts 中,這些配置映射信息是存儲在特定的XML文件(比如struts-config.xml)。

這些配置信息在系統啟動的時候被讀入內存,供struts framework在運行期間使用。在內存中,每一個<action>元素都與org.apache.struts.action.ActionMapping類的一個實例對應。下表就顯示了一個登陸的配置映射。

  1. <action-mappings>  
  2. <action path="/logonAction" 
  3. type="com.test.LogonAction" 
  4. name="LogonForm" 
  5. scope="request" 
  6. input="logoncheck.jsp" 
  7. validate="false">  
  8. <forward name="welcome" path="/welcome.jsp"/>  
  9. <forward name="failure" path="/logon_failure.jsp "/>  
  10. </action>  
  11. </action-mappings>  
  12. <form-beans>  
  13. <form-bean name="LoginForm" 
  14. type="com.test.LoginForm"/>  
  15. </form-beans> 

上面的配置表示:當可以通過/logonAction.do(此處假設配置的控制器映射為*.do)提交請求信息的時候,控制器將信息委托com.test.LogonAction處理。調用LogonAction實例的execute()方法。同時將Mapping實例和所對應的LogonForm Bean信息傳入。其中name=LogonForm,使用的form-bean元素所聲明的ActionForm Bean。有關form-bean的申明如下顯示。

使用ActionForward導航

元素<forward>則表示了當Action實例的execute()方法運行完畢或,控制器根據Mapping可將響應信息轉到適當的地方。如上面現實,如果客戶登陸成功,則調用welcome forward,將成功信息返回到/welcome.jsp頁面。在你的execute()方法的結尾可以使用下面的實例代碼而返回welcome forward。當然你的welcome forward必須在action元素屬性中定義,正如上面所聲明的那樣。

  1. return (mapping.findForward("welcome")); 

ActionForward對象是配置對象。這些配置對象擁有獨一無二的標識以允許它們按照有意義的名稱如“success”,“failure”等來檢索。ActionForward對象封裝了向前進的URL路徑且被請求處理器用于識別目標視圖。ActionForward對象建立自<forward>元素位于struts-config.xml。下面是一個Struts中<forward>元素例子,屬于<action>元素范圍。

  1. <action path="/editCustomerProfile" 
  2. type="packageName.EditCustomerProfileAction" 
  3. name="customerProfileForm" scope="request">  
  4. <forward name="success" path="/MainMenu.jsp"/>  
  5. <forward name="failure" path="/CustomerService.jsp"/>  
  6. </action> 

基于執行請求處理器的execute(…)方法的結果,當傳遞一個值匹配指定于<forward>元素中name屬性的值的時候,下一個視圖可以在execute(…)方法中被開發者用方便的方法org.apache.struts.action.ActionMapping.findForward(…)選擇。ActionMapping.findForward(…)方法既從它的本地范圍又從全局范圍提供一個ActionForward對象,該對象返回至RequestProcessor以RequestDispatcher.forward(…)或response.sendRedirect(…)調用下一個視圖。

當<forward>元素有redirect=“false”屬性或redirect屬性不存在的時候,RequestDispatcher.forward(…)被執行;當redirect=“true”是,將調用sendRedirect(…)方法。下例舉例說明了redirect屬性的用法:

  1. <forward name="success" path="/Catalog.jsp" redirect="true"/> 

如果redirect=true, URL建立如/contextPath/path因為HttpServletResponse.sendRedirect(…)中解釋URL采用”/”開頭相對于servlet容器根目錄。

如果redirect=false, URI建立如/path因為ServletContext.getRequestDisptacher(…)采用虛擬目錄相關URL。

在此稍稍說一下有關global-forwards的概念。其在配置文件中描述了整個應用系統可以使用的ActionForward,而不是僅僅是一個特定的Action。

  1. <global-forwards>  
  2. <forward name="logout" path="/logout.do"/>  
  3. <forward name="error" path="/error.jsp"/>  
  4. </global-forwards> 

Struts ActionForm Bean捕獲表單數據

在上面講解ActionServlet,Action Classes和Action Mapping的時候,我們都提到了ActionForm Bean的概念。一個應用系統的消息轉移(或者說狀態轉移)的非持久性數據存儲,是由ActionForm Bean的負責保持的。

ActionForm派生的對象用于保存請求對象的參數,因此它們和用戶緊密聯系。

一個ActionForm類被RequestProcessor建立。這是發生在已完成向前進到一個URL,該URL為映射到控制器servlet而不是JSP和相應的動作映射指定的表單屬性的。在這個情況下,如果沒有在指定的活動范圍內找到,RequestProcessor將嘗試尋找可能導致創建一個新ActionForm對象的表單bean。該ActionForm對象在指定的活動范圍內被用<action>元素的name屬性找到;

RequestProcessor將隨后重新安排表單屬性,用請求時參數填充表單,隨即調用表單對象的validate(…)方法以履行服務器端用戶輸入驗證。僅當ActionMapping對象中validate屬性被設為true時,validate(…)方法被調用;這就是默認的行為。

request.getParameterValues(parameterName)被用于得到一個String[]對象,它用來表單填充;驗證的結果應該是一個ActionErrors對象,用org.apache.struts.taglib.html.ErrorsTag來顯示驗證錯誤給用戶。ActionForm也可以被用于為當前用戶保存即將被一個視圖引用的中間模型狀態。

當一個表單對象被RequestProcessor找到,它被傳遞到請求處理器的execute(…)方法。一個ActionForm對象也可以被請求處理器建立。表單對象建立目的是提供中間模型狀態給使用請求范圍JSP;這將確保對象不會在有效性過期后仍然存在。

默認的,所有的表單都被保存為會話范圍。會話中表單對象脫離有效性的存在可能導致浪費內存,同樣的,請求處理器必須跟蹤保存在會話中的表單對象的生命周期。一個好的捕獲表單數據的實踐是為橫跨多用戶交互的相關表單用一個單獨的表單bean。表單bean也可以在反饋的時候用來儲存能夠被自定義標簽改變的中間模型狀態。

在視圖中標簽用法避免結合Java代碼,因此要成一個好的任務劃分,web生產組主要處理標志,而應用開發組主要處理Java代碼。標簽因素退出訪問中間模型狀態的邏輯;當訪問嵌套的對象或當通過聚集列舉時這個邏輯可能很復雜。

注意:在struts1.1中,ActionForm的校驗功能,逐漸被剝離出來(當然依然可以使用)。使用了validator framework對整個應用系統的表單數據驗證進行統一管理。詳細信息請參考:http://home.earthlink.net/~dwinterfeldt

在ActionForm的使用中,Struts提倡使用到值對象(Value Object)。這樣將客戶或開發人員,對數據狀態與對象狀態能夠更加清晰的理解和使用。

對于每一個客戶請求,Struts framework在處理ActionForm的時候,一般需要經歷如下幾個步驟:

(1)檢查Action的映射,確定Action中已經配置了對ActionForm的映射

(2)根據name屬性,查找form bean的配置信息

(3)檢查Action的formbean的使用范圍,確定在此范圍下,是否已經有此form bean的實例。

(4)假如當前范圍下,已經存在了此form bean的實例,而是對當前請求來說,是同一種類型的話,那么就重用。

(5)否則,就重新構建一個form bean的實例

(6)form bean的reset()方法備調用

(7)調用對應的setter方法,對狀態屬性賦值

(8)如果validatede的屬性北設置為true,那么就調用form bean的validate()方法。

(9)如果validate()方法沒有返回任何錯誤,控制器將ActionForm作為參數,傳給Action實例的execute()方法并執行。

注意:直接從ActionFrom類繼承的reset()和validate()方法,并不能實現什么處理功能,所以有必要自己重新覆蓋。

Struts的其他組件

Struts framework本身提供了很多可擴展的組件或sub framework,方便的開發人員在其構架上構建web層的應用系統。比如upload,collections ,logging等等。讓我們來看看兩個比較重要的組件:validationg framework和struts taglib。有關其他組件請參考Struts用戶手冊(http://jakarta.apache.org/struts/userGuide)。

Validation Framework for Struts

在struts1.1中,新增了validation framework。增加了對form數據提交的驗證。將原本需要在ActionFrom Bean的validate()進行的驗證通過配置文件的描述進行驗證。

有關其詳細信息,請參考http://home.earthlink.net/~dwinterfeldt 。個人建議對于小型應用系統可以采用這種配置方式,但是對于應用系統中有大量web層表單應用的系統,并且業務需求變動比較大的,使用validation framework 可能會加重開發難度、系統維護難度。可以借鑒validation framework的Javascript Validator Tag。

Struts TagLib

struts提供了一組可擴展的自定義標簽庫(TagLib),可以簡化創建用戶界面的過程。目前包括:Bean Tags,HTML Tags,Logic Tags,Nested Tags,Template Tags 這幾個Taglib。有關Struts Taglib的結構和使用,可以參考前面有關Cutomer Tag Lib的介紹.

BeanUtils

這個組件的全稱是Bean Introspection Utilites。是屬于Jakarta Commons項目組的。主要是幫助構建javabean的屬性操作的(getter,setter),已經提供一種動態定義和訪問bean的屬性。有關詳細信息,請參考。
http://jakarta.apache.org/commons/beanutils.html

如果各位對這方面有很興趣,可以參考一些有關java反射(Reflectio)方面的資料。

Collections

這個組件主要是提供了一些集合或列表對象,在原有的java collections framework的基礎上進行了擴展。詳細資料請參考:
http://jakarta.apache.org/commons/collections.html 以及
http://cvs.apache.org/viewcvs/~checkout~/jakarta-commons/collections/STATUS.html?rev=1.13

Digester

這個組件翻譯成中文的意思是“匯編”。其主要功能是根據xml配置文件,初始化系統的一些java類對象。Digester幫助你指定XML與java對象之間映射模型,而且允許客戶話定制映射規則(rules)。詳細資料請參考
http://jakarta.apache.org/commons/digester.html

通過本文的介紹,希望對你有幫助。

【編輯推薦】

  1. JAVA開發 分析JNI標準原理
  2. 談JAVA靜態載入的兩種方式
  3. JAVA入門 基于Java的移動游戲開發
  4. JavaScript重構 模塊劃分和命名空間
  5. C++和Java 的缺省初始化問題
責任編輯:于鐵 來源: 互聯網
相關推薦

2009-06-03 09:16:03

Hibernate工作原理使用

2009-06-04 10:41:52

Struts工作原理

2009-06-05 11:01:23

struts mvcMVC工作原理

2011-04-22 10:01:59

SimpleFrame

2025-08-04 02:55:00

AIAgent架構

2009-11-23 19:48:50

ibmdwJava

2009-06-04 15:58:55

Struts原理基本配置

2009-06-05 10:26:05

struts工作流程

2010-09-26 08:50:11

JVM工作原理

2009-07-09 14:01:22

JVM工作原理

2010-09-16 14:42:44

JVM

2015-07-02 09:56:48

ReactiveCociOS

2023-09-27 12:22:50

Kafka架構

2023-05-26 10:37:17

ChatGPT人工智能

2023-07-10 09:23:31

2009-06-03 09:11:03

Hibernate工作原理體系結構

2025-06-06 08:04:17

2020-10-30 09:00:00

JavaScriptJavaScript引前端

2010-07-23 16:10:32

SQL Server復

2024-11-27 08:15:50

點贊
收藏

51CTO技術棧公眾號

欧美亚洲高清一区| 国产精品主播直播| 久久国产主播| 欧美精品尤物在线观看| ass极品国模人体欣赏| 中文字幕亚洲一区二区av在线| a天堂视频在线| 成人在线激情网| 亚洲美女性生活视频| 久久人体大尺度| 波多野结衣家庭教师在线| 色94色欧美sute亚洲13| 日韩精品一区第一页| 日韩欧美在线视频观看| 噜噜噜噜噜久久久久久91| 日韩精品手机在线| 成人羞羞视频播放网站| 欧美老人xxxx18| 国产成人一区二区三区别| 天堂在线资源库| 奇米777欧美一区二区| 北条麻妃在线一区二区| 性色av蜜臀av浪潮av老女人| 日韩欧美另类一区二区| 国产精品成人免费在线| 国产一区二区丝袜高跟鞋图片| 美女视频久久久| 国产伦精品一区二区三区在线播放| 欧美日韩免费看| 影音欧美亚洲| av 一区二区三区| 午夜一级久久| 精品自在线视频| 免费污网站在线观看| 久久久精品区| 欧美在线观看18| 欧美日韩精品在线一区二区| 伊人免费在线| 精品一区二区av| 97在线视频一区| 久久久久久久久久97| 色天下一区二区三区| 4438x亚洲最大成人网| jizzjizzxxxx| 3d玉蒲团在线观看| 国产精品全国免费观看高清 | 欧美激情理论| 精品视频中文字幕| 中文字幕无码毛片免费看| 都市激情亚洲一区| 亚洲色图欧美激情| 日本中文不卡| 欧美午夜黄色| 成人黄色网址在线观看| 亚洲最大的免费| 中文字幕免费在线看| 久久久久网站| 91高清视频免费| 国产五月天婷婷| 欧美深夜福利| 九九精品视频在线| 精品国产视频一区二区三区| 欧美1级片网站| 亚洲最新在线视频| 谁有免费的黄色网址| 外国成人在线视频| 亚洲精品www| 黄色网址在线视频| 久久草在线视频| 亚洲电影成人av99爱色| 丰满少妇xbxb毛片日本| 亚洲国产综合在线观看| 欧美日韩不卡一区| 色婷婷一区二区三区av免费看| 91福利精品在线观看| 一本到三区不卡视频| 日韩精品视频久久| 成人一区福利| 在线观看亚洲专区| 免费涩涩18网站入口| 亚洲1234区| 色婷婷av久久久久久久| 亚洲国产欧美久久| 欧洲视频一区二区三区| 日本国产在线| 久久免费国产精品| 手机看片福利永久国产日韩| jizz亚洲| 亚洲精品va在线观看| 亚洲 国产 欧美一区| 麻豆国产在线播放| 欧美国产精品久久| 久久免费看毛片| 色操视频在线| 欧美日韩中国免费专区在线看| 干日本少妇首页| 成人午夜毛片| 欧美一区二区三区精品| 性高潮免费视频| 秋霞影院一区| 亚洲精品www| 特级西西www444人体聚色| 欧美日韩激情在线一区二区三区| 亚洲人成啪啪网站| 国产尤物在线播放| 精品成人久久| 国产精品久久久av| 成人av无码一区二区三区| 国产suv精品一区二区三区| 波多野结衣一区二区三区在线观看| 亚洲精品无amm毛片| 久久品道一品道久久精品| 亚洲精品久久区二区三区蜜桃臀| a级毛片免费观看在线| 亚洲第一综合色| 亚洲乱码国产一区三区| 超薄肉色丝袜脚交一区二区| 欧美日韩日本国产| 性生活免费在线观看| 99久久人爽人人添人人澡| 亚洲色图校园春色| 国产又黄又爽又无遮挡| 久久精品男女| av噜噜色噜噜久久| 电影av一区| 亚洲已满18点击进入久久| 一本色道无码道dvd在线观看| 亚洲电影二区| 亚洲天堂精品在线| 久久久久久久久久久久国产| 日本美女视频一区二区| 国产精品麻豆免费版| 91社区在线| 欧美日韩亚洲网| 在线看的黄色网址| 国产精品国产三级在线观看| 欧美成人一区二区| sm捆绑调教视频| 羞羞视频在线观看欧美| 999精品在线观看| 搞黄视频免费在线观看| 午夜影院久久久| 17c国产在线| 欧美日韩激情在线一区二区三区| 97视频com| 国产成人毛毛毛片| 国产精品另类一区| 日本黄网站免费| 欧美人妖视频| 久久久久久伊人| 国产婷婷在线视频| 中文字幕一区免费在线观看 | aaaaaa亚洲| 红杏aⅴ成人免费视频| 久久国产精彩视频| 在线播放一级片| 成人av网站在线| av不卡在线免费观看| 最新日韩三级| 亚洲精品一区二区三区婷婷月| 久久亚洲成人av| 国产精品1区二区.| 国产免费内射又粗又爽密桃视频| 国外成人福利视频| 综合网日日天干夜夜久久| 日韩精品在线观看免费| 91一区二区三区在线观看| 久草视频国产在线| 色综合.com| 久久久精品美女| 国产日本精品视频| 亚洲图片激情小说| 国产一级二级av| 色呦哟—国产精品| 成人国产精品一区| 在线免费av网站| 欧美精品三级日韩久久| 免费精品在线视频| 精品一区中文字幕| 欧洲美女和动交zoz0z| 精品欧美视频| 欧美激情精品久久久久久| 好吊色在线观看| 午夜精品久久久久久久99水蜜桃 | 欧美日韩经典丝袜| 精品毛片乱码1区2区3区| 99久久婷婷国产综合| 国内精品免费在线观看| 青草视频在线观看视频| 欧美电影免费网站| 国产精品久久久久久久久久三级| av网站无病毒在线| 欧美日韩国产综合久久| 日韩成人毛片视频| 9久草视频在线视频精品| 男女av免费观看| 成人在线电影在线观看视频| 91免费在线视频| √天堂8在线网| 日韩精品专区在线影院观看| 国产成人在线播放视频| 国产日韩欧美在线一区| www.日本久久| 999亚洲国产精| 日韩av影视| 日本一区二区乱| 26uuu另类亚洲欧美日本一| av网站无病毒在线| 精品国精品国产尤物美女| 亚洲天堂日韩av| 中文字幕不卡在线观看| 8x8x成人免费视频| 夜久久久久久| 亚洲国产婷婷香蕉久久久久久99| 亚洲视频一起| 国产精品久久久久免费a∨| 在线免费观看污| 日韩精品欧美激情| 国产剧情久久久| 欧美色另类天堂2015| 色在线观看视频| 久久精品人人做人人爽人人| 一级黄色片国产| 欧美先锋影音| 亚洲欧美影院| 日韩手机在线| 国产区精品在线观看| 成人黄色动漫| 欧美xxxx18性欧美| 成人午夜电影在线观看| 亚洲精品97久久| www.激情五月.com| 欧美日韩成人综合天天影院| 国产午夜精品无码一区二区| 国产精品久久久久桃色tv| 亚洲av午夜精品一区二区三区| 裸体在线国模精品偷拍| 97国产精东麻豆人妻电影| 欧美69wwwcom| 一本一道久久a久久精品综合| 欧美国产极品| 国产精品播放| www.成人| 国产精品小说在线| 日韩欧美一区二区三区在线观看 | 久久久久成人网站| 国产精品每日更新| 国产精品国产三级国产专业不 | 国产成人av电影在线观看| 五月婷婷六月合| 老妇喷水一区二区三区| 波多野结衣综合网| 伊人影院久久| 国产传媒久久久| 亚洲精品一二三区区别| 亚洲精品在线免费| 日韩成人动漫在线观看| 国产精品综合久久久久久| 香蕉大人久久国产成人av| 96精品久久久久中文字幕| 亚洲影视资源| 成人精品网站在线观看| 只有精品亚洲| 成人有码在线视频| www.久久| 国产精品一二三在线| 99只有精品| 国产精品亚洲第一区| 久久麻豆视频| 成人做爽爽免费视频| 国产精品一站二站| 亚洲综合中文字幕在线| 国产亚洲亚洲国产一二区| 国产精品扒开腿做爽爽爽视频| 51漫画成人app入口| 久久久亚洲精选| 免费在线小视频| 欧美一级视频在线观看| 新片速递亚洲合集欧美合集| 国产精品成人aaaaa网站| 亚洲精品.com| 国产热re99久久6国产精品| 国产成人免费av一区二区午夜| 国产精品毛片a∨一区二区三区|国| 高清av一区| 成人黄色免费看| 伊人久久影院| 好吊色欧美一区二区三区| 色爱综合av| 亚洲欧美日韩在线综合| 午夜久久99| 性欧美18一19内谢| 色婷婷热久久| 嫩草影院中文字幕| 亚洲精品欧洲| 欧美污视频网站| 男人的天堂亚洲一区| 国产xxxxx在线观看| 黄色国产精品| 青青青国产在线视频| 精品无码三级在线观看视频| 国产人妖在线观看| 久久久99久久| 欧美三根一起进三p| 欧美日韩中文字幕综合视频| 丁香社区五月天| 欧美三级在线视频| 亚洲av综合色区无码一二三区| 亚洲精品aⅴ中文字幕乱码| av在线资源网| 欧美大片在线看免费观看| 日韩精品极品| 国产精品久久久久久av福利软件 | 热久久精品免费视频| 国产资源精品在线观看| 网站免费在线观看| 亚洲色图20p| 中文字幕日韩一级| 8x8x8国产精品| 韩国三级在线观看久| 欧美成人一二三| 偷拍中文亚洲欧美动漫| 97久久精品午夜一区二区| 成人激情视频| 男女激情无遮挡| 国产一区二区三区在线观看免费| 一本色道综合久久欧美日韩精品 | 青娱乐国产精品视频| 91影院在线观看| 污污的视频在线免费观看| 亚洲午夜影视影院在线观看| 夜夜躁日日躁狠狠久久av| 欧美va在线播放| 性开放的欧美大片| 668精品在线视频| 亚洲一区导航| 精品国产免费人成电影在线观...| 91精品一区二区三区综合| 无码精品国产一区二区三区免费| 蜜臀91精品一区二区三区| 国产吞精囗交久久久| 亚洲国产一区二区三区| a片在线免费观看| 一本一道久久a久久精品逆3p| 蜜桃视频在线观看播放| www.一区二区三区| 中文字幕乱码亚洲无线精品一区| 美女黄色片视频| 国产日韩高清在线| 国产一级一级国产| 日韩精品高清在线| 91精品久久| 超碰在线97av| 国产精品magnet| 91九色蝌蚪porny| 亚洲综合视频网| 欧美视频一二区| 欧美黑人性生活视频| 老牛精品亚洲成av人片| 狠狠色狠狠色综合日日五| 色网站在线播放| 欧美精品一区二区三| 国内激情视频在线观看| 国产伦精品一区二区三毛| 亚洲国产裸拍裸体视频在线观看乱了中文| 国产伦精品一区二区三区妓女下载| 亚洲一区二区三区国产| 亚洲精品18p| 日韩av免费在线播放| 免费视频亚洲| 中文字幕第一页在线视频| 亚洲欧美一区二区三区国产精品| 成人av手机在线| 国内久久久精品| 欧美日韩中文字幕一区二区三区| 成人性生活视频免费看| 26uuu欧美| 成人一级免费视频| 久久天天躁日日躁| 日日夜夜亚洲精品| 国产精品videossex国产高清 | 日本加勒比一区| 国产97在线视频| 日本不卡免费一区| www.欧美com| 精品动漫一区二区三区| a天堂中文在线88| 欧洲永久精品大片ww免费漫画| 国产精品亚洲人成在99www| 污网站在线免费| 亚洲一区二区偷拍精品| 久草在线青青草| 国产一区二区丝袜| 伊人久久大香线蕉av超碰演员| 国产精品无码一区二区三区免费| 欧美精品一级二级| 黄视频免费在线看| 亚洲国产精品一区在线观看不卡 | 性欧美videohd高精| 日韩一级特黄毛片|