韩剧1988免费观看全集_久久影视三级福利片_亚洲视频在线观看免费_在线观看欧美日韩_国产亚洲激情在线_亚洲精品美女久久久_欧美国产日韩一区二区在线观看_91在线观看免费高清完整版在线观看_日韩av免费看_国产又爽又黄的激情精品视频_琪琪亚洲精品午夜在线_欧美性猛xxx_不卡毛片在线看_国产亚洲日本欧美韩国_91国内在线视频_精品国产福利视频

當前位置:蘿卜系統(tǒng)下載站 > 技術開發(fā)教程 > 詳細頁面

淺談如何創(chuàng)建3層體系結構的ASP應用程序(轉)

淺談如何創(chuàng)建3層體系結構的ASP應用程序(轉)

更新時間:2021-03-06 文章作者:未知 信息來源:網絡 閱讀次數(shù):

隨著互連網應用的深入和發(fā)展,三層體系結構的應用模式也得到更多人的青睞。本文介紹了三層結構應用程序的概念和優(yōu)點,并結合一個實例介紹了如何建立三層結構的ASP應用程序。

一、兩層結構的ASP應用有何缺點
在Browser/Server 應用程序開發(fā)領域,微軟公司的IIS/ASP以其強大的功能,良好的擴展能力,及與其它微軟產品的一致性,迅速地流行起來。它能使一個具有VB/VC經驗的程序員,很快地成為一個Web程序員,開發(fā)出看上去非常專業(yè)的應用。但是,ASP有一個天生的缺點,就是ASP代碼和HTML代碼是混在一起的,ASP程序員既需要考慮與數(shù)據(jù)庫打交道,需要關心如何與HTML配合,有時還需要用ASP直接生成HTML代碼。其結果是,當程序邏輯足夠復雜時,.asp源文件非常長;而且,無論客戶提出用戶界面的改變,還是商業(yè)邏輯的改變(比如,在考試系統(tǒng)中,"合格"的標準可能從達到60分就算合格,改為進入前100名才算合格),都需要對.asp文件進行改動,而商業(yè)邏輯的改變,很可能需要改動很多文件。

二、三層結構的概念
在傳統(tǒng)的Client / Server應用中,也存在著上述同樣的問題,多層結構的應用正是在對C/S 結構的總結基礎上產生的,并且也已經擴展到了B/S應用開發(fā)領域。 即將應用劃分為三層(可以有更多層,但三層最常見): 用戶界面層,商業(yè)邏輯層,數(shù)據(jù)庫層。 用戶界面層負責處理用戶的輸入和向用戶的輸出,但并不負責解釋其含義(出于效率的考慮,它可能在向上傳輸用戶輸入前進行合法性驗證),這一層通常用前端工具(VB,VC,ASP等)開發(fā);商業(yè)邏輯層是上下兩層的紐帶,它建立實際的數(shù)據(jù)庫連接,根據(jù)用戶的請求生成SQL語句檢索或更新數(shù)據(jù)庫,并把結果返回給客戶端,這一層通常以動態(tài)鏈接庫的形式存在并注冊到服務器的注冊簿(Registry)中,它與客戶端通訊的接口符合某一特定的組件標準(如COM,CORBA),可以用任何支持這種標準的工具開發(fā);數(shù)據(jù)庫層負責實際的數(shù)據(jù)存儲和檢索。 有了這樣的結構,上面的問題迎刃而解:還是以考試系統(tǒng)中的合格標準為例,在客戶端所有需要顯示合格人員名單的地方,調用這樣一個函數(shù)GetQualifiedList,至于這個函數(shù)如何編寫,如何與數(shù)據(jù)庫打交道,以至訪問的是何種數(shù)據(jù)庫都與其無關(你一定有過這樣的經歷,在一種數(shù)據(jù)庫系統(tǒng)上運行得很好的SQL語句,有時換到另一種數(shù)據(jù)庫系統(tǒng)上必須加以修改); 在中間層DLL中實現(xiàn)這個GetQualifiedList函數(shù),如果用戶對"合格"的定義變了,只需要修改這個函數(shù)就可以了,只要此函數(shù)的入口參數(shù)和返回內容不變,在客戶端不需作任何改動。在這里,我們看到了面向對象編程的特性之一封裝性的優(yōu)點,而這一點在開發(fā)大型應用時尤其有用--我們可以把開發(fā)人員分成兩組,一組負責開發(fā)界面層,另一組負責開發(fā)商業(yè)邏輯層,雙方只要按照事先商定的函數(shù)接口,并行地開發(fā)就可以,而不必向從前那樣,后面的工作必須等前面的工作完成后才能開始。當然,這樣的開發(fā)模式需要很好的項目協(xié)調和文檔作支持。

你也許會問,如果我把這些函數(shù)些在一個單獨的文件中,再在需要調用的地方把它包含進來,不是同樣能達到目的嗎? 第一,這種方法效率不高,無論你把這些函數(shù)分散到多少個文件中,當你需要調用其中一個時,總會包含進一些實際上并不需要的函數(shù),這無疑加重了服務器的負擔,對服務器性能要求較高的Web應用尤其如此。 而DLL只在需要時才調入內存且只調入需要的函數(shù),并且多個應用程序實例可以共享同一個DLL實例;第二,設想一個員工,有20個屬性(工號,姓名,年齡,性別......),現(xiàn)在給定某工號,要求返回此員工所有信息。此時如果單純用函數(shù),只能定義20個全局變量,在函數(shù)中改變這些變量值,或者定義一個有20個傳參(by reference)參數(shù)的函數(shù)。顯然,第一種方法很麻煩而一旦增加一個屬性后一種方法就需要更改函數(shù)接口。而在一個對象里,既包含成員方法(即函數(shù)和過程),也包括成員屬性。如果我們采用對象的方法,則在函數(shù)中只需要改變對象的屬性,在函數(shù)外可以直接引用改變了的對象屬性值。 這種方法有些類似第一種方法,但1.屬性值無需在函數(shù)外逐一說明;2.這些屬性值只屬于對象,與對象無關的代碼不會無意地改變屬性值;3.一旦對象被釋放,這些值會被一起釋放。

三、如何開發(fā)三層結構的ASP應用程序
ASP具有良好的擴充性,我們訪問數(shù)據(jù)庫時,采用的時ADO對象,訪問文件時,采用的是文件系統(tǒng)對象(FSO),其實這時程序已經是三層結構的應用程序了,只不過由于是利用內置的對象而為意識到罷了。這些對象都遵循COM/ActiveX接口,因此我們自己開發(fā)的對象也要遵循這個接口。下面,我們就以上文提到的"合格"標準為例,演示如何創(chuàng)建自己的三層結構的ASP應用。
1、在數(shù)據(jù)庫系統(tǒng)中建立如下數(shù)據(jù)庫表:
    Employee: EMPLID char (5) not null,
             Name  char (10) not null,
             Gender char (1) not null,
             Score   int not null
此表存儲員工信息和考試成績,為簡單起見,這里只包含工號,姓名和性別三項,并且只有一門考試,EMPLID為主鍵。

2、建立動態(tài)鏈接庫

啟動VB(這里以VB為例,你可以用你喜歡的任何支持ActiveX接口的開發(fā)工具開發(fā)),新建一工程,工程類型為ActiveX DLL。在工程中新建一個類,取名為Employee。你可以Class Builder可視化的向類中填加屬性和方法,也可以直接手工編輯。首先填加EMPLID屬性如下:
  Private msEMPLID as string
  Property Let EMPLID(sEMPLID as string)
   msEMPLID=sEMPLID
  End Property
  Property Get EMPLID() as string
   EMPLID=msEMPLID
  End Property
一般地講,每一個屬性都應該有Property Let和Property Get兩個方法,它們分別當向屬性賦值和讀取屬性值時被調用。如果某個屬性只被賦值而從不被讀取(這種情況多發(fā)生在對應數(shù)據(jù)庫表的主鍵的屬性上),則Property Get方法可以省略。Property Let方法不能省略。你可以仿照上面的程序再建立Name,Gender和Score三個屬性。然后創(chuàng)建如下方法:
  Public Sub Create(EMPLID as string)
  dim conn as new Connection
  dim rs as new Recordset
  dim sql as string
  'Suppose that you create a DSN in the control panel, the connectionstring property
  'can also be dsn-less string
  conn.ConnectionString="dsn=dsnname;uid=username;password=pwd"
  conn.open
  sql="select * from Employee where EMPLID='" & EMPLID & "'"
  with rs
   .open sql,conn,1,3
   if .eof and .bof then
     exit sub
   else
     msEMPLID=trim(.Fields("EMPLID"))
     msName=trim(.Fields("Name"))
     msGender=trim(.Fields("Gender"))
     msScore=.Fields("Score")
   end if
   .close
  end with
  set rs=nothing
  conn.close
  set conn=nothing
  End Sub
這里根據(jù)EMPLID創(chuàng)建Employee對象,注意數(shù)據(jù)庫中的值是賦給三個私有變量,而不是直接賦值給屬性,如果你單步調試就會發(fā)現(xiàn),給msEMPLID賦值會調用Property Let EMPLID,也就是給屬性賦值。
  下面我們再創(chuàng)建一個類Employees,并填加如下方法:
  private colQualifiedList as new Collection
  private mnCurrentIndex as integer
  Public Sub GetQualifiedList()
  dim conn as new Connection
  dim rs as new Recordset
  dim sql as string
  'Suppose that you create a DSN in the control panel, the connectionstring property
  'can also be dsn-less string
  conn.ConnectionString="dsn=dsnname;uid=username;password=pwd"
  conn.open
  sql="select EMPLID from Employee where Score>=60 order by Score desc"
  with rs
   .open sql,conn,1,3
   if .eof and .bof then
     exit sub
   else
     do while not .eof
       dim oEmployee as new Employee
       oEmployee.Create trim(.Fields("EMPLID"))
       colQualifiedList.Add oEmployee
       set oEmployee=nothing
     loop
   end if
   .close
  end with
  set rs=nothing
  conn.close
  set conn=nothing
  End Sub
首先請注意VB中創(chuàng)建類實例的語法dim oEmployee as new Employee,后面會看到,在ASP中創(chuàng)建類實例的語法是不同的。這個方法檢索成績大于等于60的員工工號,并據(jù)此創(chuàng)建一個Employee對象,再將此對象加入私有的集合對象中。下面兩個函數(shù)遍歷集合中的元素:
  Public Function GetFirst() as Employee
   if colQualifiedList.count>0 then
    mnCurrentIndex=1
     set GetFirst=colQualifiedList.Item(1)
   else
     set GetFirst=nothing
   end if
  End Function
  Public Function GetNext() as Employee
   mnCurrentIndex=mnCurrentIndex+1
   if mnCurrentIndex>colQualifiedList.count then
     set GetNext=nothing
   else
     set GetNext=colQualifiedList.Item(mnCurrentIndex)
   End if
  End Function
也許你會說,為何不把集合聲明Public,這樣在ASP中不是可以直接引用嗎?確實,這樣也行得通,編程實現(xiàn)起來也更簡單些,但是,這樣做破壞了封裝性原則。因為數(shù)據(jù)以何格式存儲完全是商業(yè)邏輯層的事,與用戶界面層無關,假設有一天你因為每種原因放棄了用集合來存儲數(shù)據(jù)的設計,而改用數(shù)組或記錄集(Recordset)來存儲,那你只需要修改GetFirst和GetNext兩個函數(shù),用戶界面層完全無需修改。
至此類文件創(chuàng)建完畢,將工程文件存為 test.vbp,選File菜單下的Make test.dll選項將其編譯。

3、注冊動態(tài)鏈接庫

啟動Web Server 上的Microsoft Transaction Server (Start--Windows NT Optionpack4--Internet Information Server--Internet Service Manager),展開Microsoft Transaction Server--Computer--My Computer--Package Installed,點鼠標右鍵選New--Package--Create Empty Package,輸入包名Test(這里Test是任選的名字,不一定要與DLL同名),OK-Interactive User-the current Logon user--Finish。雙擊Test--Component,右鍵選Component-New-Component-Install New component(s)-- Add File,選擇你剛編譯好的DLL文件,MTS會發(fā)現(xiàn)DLL中有兩個類Employee和Employees。至此DLL注冊完畢。

4、編寫ASP程序
  <HTML><Body>
  <p>Qualified Employee List</p>
  <table border=1 cellspacing=0 cellpadding=0>
  <tr>
   <td>Employee ID</td>
   <td>Name</td>
   <td>Gender</td>
   <td>Score</td>
  </tr>
  <%
   set oEmployees=server.createobject("Test.Employees")
   oEmployees.GetQualifiedList
   set oEmployee=oEmployees.GetFirst()
   do while not oEmployee is nothing
  %>
  <tr>
   <td><%=oEmployee.EMPLID%></td>
   <td><%=oEmployee.Name%></td>
   <td><%=oEmployee.Gender%></td>
   <td><%=oEmployee.Score%></td>
  </tr>
  <%
     set oEmployee=oEmployees.GetNext()
   loop
  %>
  
  </body></html>
注意在ASP中創(chuàng)建類實例的語法set oEmployees=server.createobject("Test.Employees"),其中Test是DLL的名字,Employees是類的名字; 當然,如果一個函數(shù)的返回值是一個對象,類似set oEmployee=oEmployees.GetFirst()這樣的語法也是可以的。

至此,一個完整的三層結構的應用程序已經完成了,讓我們看以下,如果把"合格"的定義改為:只有成績進入前100名才算合格,程序需要做那些修改。事實上,如果你的數(shù)據(jù)庫系統(tǒng)是SQL Server,你只需把SQL語句改為:

sql="select top 100 EMPLID from Employee order by Score desc" 就已經可以了,即使為了跨數(shù)據(jù)庫系統(tǒng)的兼容性,我們也只需要對GetQualifiedList做如下修改:
  sql="select EMPLID from Employee order by Score desc"
  with rs
   .open sql,conn,1,3
   if .eof and .bof then
     exit sub
   else
     i=1
     do while (not .eof) and (i<=100)
       dim oEmployee as new Employee
       oEmployee.Create trim(.Fields("EMPLID"))
       colQualifiedList.Add oEmployee
       set oEmployee=nothing
       i=i+1
     loop
   end if
   .close
  end with
  ...
然后把DLL重新編譯,注冊就可以了,ASP程序完全不必修改。
四、一些說明和注意事項
1、 由于這個例子比較簡單,在Employee類中可以沒有Create方法,而在Employees類中將員工的所有信息(工號,姓名,性別,成績)都讀出來并將其賦給Employee對象對應的屬性。但在實際應用中,當Employee對象的屬性增多,或表的數(shù)量增多,表之間關系變復雜時,還是本文所示的方法更有效,代碼重用的機會更大。
2、當DLL被修改后,在MTS中只能將其刪除后重新注冊,因為每次重新編譯后在注冊表中對象的ID值都將重新生成。
3、從ASP中調用帶參數(shù)的類方法和函數(shù)時,所有的變量參數(shù)一定要用相應的類型轉換函數(shù)轉換后再傳入,否則會引起類型不匹配錯誤,因為VBScript中只有Variant類型,它不能自動轉換成其它類型。例如,有如下的函數(shù)定義:
  Public Function Fun1(p1 as string,p2 as integer) as integer
  End Function
  在ASP程序中應如下調用:
  <%
   p1=obj.property1 ' Property1 is a string property
   p2=obj.property2 'Property2 is an integer property
   a=obj.Fun1(cstr(p1),cint(p2))
   a=obj.Fun1("aaa",10) ' constant parameter need not be changed
  %>
  而下面的兩種寫法是錯誤的:
  <%
   p1=obj.property1 ' Property1 is a string property
   p2=obj.property2 'Property2 is an integer property
   a=obj.Fun1(p1,p2) ' incorrect,p1 and p2 are variant variables
   p1=cstr(p1)
   p2=cint(p2)
   a=obj.Fun1(p1,p2) ' still incorrect
  %>
這里第二種寫法仍然是錯誤的,即使經過了類型轉換,p1和p2仍然是Variant變量。在VBScript中,數(shù)據(jù)類型和類型轉換函數(shù)只在表達式運算中起作用,變量只有Variant一種類型。

結束語
以上對多層結構的理論和實踐進行了一番探討,希望能對您的開發(fā)有所幫助。這里還有一個問題,即類和類的成員該如何設計。這既涉及面向對象編程的理論,也需要一定的實踐經驗。請參考相關的OOP理論書籍并在實踐中不斷總結,相信您一定能設計出自己的完美的多層結構的應用程序。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網站地圖xml | 網站地圖html
色综合久久88色综合天天| 国产精品免费精品自在线观看| 就去色蜜桃综合| 国产午夜免费视频| 国产91亚洲精品久久久| 99久久久国产精品免费调教网站| 伦伦影院午夜日韩欧美限制| 天堂精品中文字幕在线| 亚洲午夜精品久久久久久高潮| 久久久久成人片免费观看蜜芽| 国产精品免费久久久| 99re6热在线精品视频播放速度| 国产娇喘精品一区二区三区图片| 欧美gv在线观看| 欧美日韩在线亚洲一区蜜芽| 日本vs亚洲vs韩国一区三区二区| 国产精品27p| 精品视频导航| 在线成人性视频| 一区二区三区在线视频播放| 宅男在线精品国产免费观看| 丁香花在线影院观看在线播放| 成人精品电影在线观看| 国产成人无码a区在线观看视频| 欧美野外猛男的大粗鳮| 日韩一级片免费在线观看| 扒开jk护士狂揉免费| 久久久久久久久一区二区| 台湾佬中文在线| 伊人五月天婷婷| 国产成人在线观看免费网站| 夜色福利刺激| 国产精品夜夜夜一区二区三区尤| 看黄网站在线观看| 中文字幕乱码日本亚洲一区二区| freexxx性亚洲精品| 亚洲剧情一区二区| 国产成人精品免费一区二区| 亚洲日日夜夜| 亚洲欧洲美洲在线综合| 午夜激情视频网| 91青青草免费在线看| 欧美aaaaaa午夜精品| 国产欧美日韩高清| 在线播放色视频| 久久婷婷国产综合国色天香| 很黄很色的网站| 日韩精品影片| 精品人妻一区二区三| 国产无套在线观看| 日韩黄在线观看| 激情综合色综合久久综合| 午夜久久久久久久久久| 99热这里只有成人精品国产| 国产九区一区在线| 免费h视频网站| 成人午夜伦理影院| 亚洲一区二区三区午夜| 夜色77av精品影院| 国产精品永久在线| 成人四虎影院| 欧美人妻一区二区| 最近免费观看高清韩国日本大全| 国产色a在线| 国产麻豆剧果冻传媒观看hd高清| 欧美一级片免费在线| 欧美综合精品| 好男人看片在线观看免费观看国语| 在线观看免费网站黄| 国产日韩欧美高清免费| 精品综合久久88少妇激情| 免费在线看黄网站| 91av福利| 国产午夜精品一区二区三区嫩草| 国产色一区二区三区| 免费看的av| 一线天自拍视频| 国产成人精品在线看| 69堂成人精品免费视频| 91精品国产综合久久香蕉| h视频在线观看免费网站| 97视频在线免费观看| 久久九九全国免费精品观看| 爱福利在线视频| 精品久久久久久亚洲| 欧美18—19性高清hd4k| 免费看啪啪网站| 亚洲综合成人婷婷小说| 亚洲国产精品久久久久久6q| 国产精品福利在线观看| 国产又粗又大又爽的视频| 神宫寺奈绪一区二区三区| 91亚洲免费视频| 亚洲欧美日韩在线不卡| 中文字幕日本精品| 久久草视频在线看| 欧美另类亚洲| 午夜精品福利在线| 欧美一区二区三区图| av女名字大全列表| 国产乱子伦一区二区三区国色天香| 欧美日韩久久精品| 99re6热在线精品视频播放速度| 灌醉mj刚成年的大学平面模特| 蜜臀av一区二区在线观看| 日本午夜免费一区二区| 激情视频一区| 午夜视频在线观看一区二区| 婷婷婷国产在线视频| 三区四区不卡| 99精品国自产在线| 色婷婷激情视频| 日韩深夜福利| 久草视频手机在线观看| 午夜国产精品视频免费体验区| 中文字幕在线视频网| 欧美 日本 国产| 欧美日韩一区二区不卡| 久久99精品久久久久久三级| 亚洲一二三四五| 国产成人无吗| 久久亚洲国产精品一区二区| jizzjizz日本护士免费| 欧美一区二区视频网站| 国产精品久久777777换脸| 亚色视频在线播放| 日本中文字幕一区二区视频| 亚洲一区一卡| 中文av字幕在线观看| 亚洲成色在线综合网站2018站| 久久久久久亚洲综合影院红桃| 电影一区中文字幕| 91人人爽人人爽人人精88v| 久久久噜噜噜久久| aaaaa级片| 可以www视频| 日韩电影免费在线| 国产精品爱啪在线线免费观看| 中文字幕一区二区三区乱码在线| 色婷婷综合久久久中文一区二区| 第一区免费在线观看| 一本大道久久a久久综合| 在线观看视频色| 人妻一区二区视频| 国产精品三区www17con| 孩娇小videos精品| 自拍偷拍一区二区三区四区| 日本精品在线中文字幕| 亚洲一级视频在线观看| 国产精品对白刺激久久久| 黄色成人小视频| 一级特黄录像免费看| 国产精品免费无遮挡| 国产精品白丝久久av网站| 99在线看视频| 成人动漫视频在线观看| 精品视频一区二区观看| 国产精品福利在线| 成年人在线观看网站| 久久视频在线视频| 亚洲三级电影| 欧美日韩性视频一区二区三区| 成人福利资源| 污污免费网站| 亚洲美女高潮久久久| 91嫩草在线视频| 午夜剧场成人观在线视频免费观看| 国产精品videosex极品| 91免费黄视频| 在线不卡的av| av影片在线| 91麻豆精品在线| 国产喷水福利在线视频| 国产又粗又猛又爽又黄视频| 99久久99| 欧美13一14另类| 性做久久久久久久久久| 免费日韩电影在线观看| 免费看又色又爽又黄网站| 免费一级肉体全黄毛片| 免费污网站在线观看| 国产成人精品一区二区色戒| 美女永久在线网站| 国产三级三级三级看三级| 日韩一区二区不卡视频| 91免费视频播放| 国产精品欧美在线观看| 日韩电影在线一区二区| 亚洲黄色av女优在线观看| 亚洲a在线视频| h视频免费网站| 中文字幕乱码在线人视频| 国产精品免费一区二区三区在线观看| 免费日韩电影在线观看| 国产福利微拍精品一区二区| 久草视频在线看| 国产精品久久久久久久久免费丝袜| 成人毛片免费| 激情成人综合网| 亚洲熟女乱色一区二区三区久久久| 精品一区二区三区免费观看| 人妻精油按摩bd高清中文字幕| 欧美激情一区二区三区不卡| 久久99国产精品二区高清软件| 精品国产一区二区三区日日嗨| 国产精品久久久久久网站| 亚洲精品国产精品乱码不99| 亚洲成人性视频| 亚洲一区二区三区四区中文字幕| 99久久婷婷国产精品综合| 亚洲乱码免费伦视频| 77777_亚洲午夜久久多人| 欧美色图另类| 一本色道亚洲精品aⅴ| 日韩欧美高清dvd碟片| 91在线免费观看网站| 日本精品一二区| 国产又色又爽又黄又免费| 欧美三区免费完整视频在线观看| 亚洲欧美国产三级| 狠狠色伊人亚洲综合成人| 999久久久国产精品| 手机av免费在线观看| 久久久免费看片| 最新免费av网址| 日韩欧美国产午夜精品| 2021天堂中文幕一二区在线观| h片在线观看下载| 日韩免费高清视频网站| 99国产精品国产精品毛片| 91精品婷婷色在线观看| 久久99久久99精品| 电影一区二区三| 亚洲国产精品视频一区| 黄色av中文字幕| 自拍偷拍21p| 久久久国产精品午夜一区ai换脸| 欧美色图麻豆| aaa一级毛片| 一区二区三区日本久久久| 国产ts变态重口人妖hd| 国产成人在线播放视频| 大吊一区二区三区| 五月婷婷视频在线观看| av在线电影网| 中文在线观看视频| 欧美一区二区三区艳史| 日韩成人免费电影| 国产亚洲精久久久久久无码77777| 欧美色图亚洲自拍| 久久久久一区二区| 中文字幕乱伦视频| 国产精品一卡| 欧洲激情视频| 国产精品综合久久久久| 色94色欧美sute亚洲13| 2017亚洲天堂| 北条麻妃高清一区| 亚洲精品成人a8198a| 国产福利成人在线| 这里只有精品丝袜| 希岛爱理一区二区三区| 欧美视频在线观看网站| 在线视频中文字幕久| 91亚洲国产成人精品一区二区三| 永久www成人看片| 婷婷激情综合网| 久久日韩视频| 9.1国产丝袜在线观看| 日本不卡免费在线视频| 婷婷亚洲天堂| 国产在线www| 欧美性做爰猛烈叫床潮| 欧美激情精品久久| www.99re6| 三级小说欧洲区亚洲区| 正义之心1992免费观看全集完整版| 国产专区精品视频| 国产极品久久久久久久久波多结野| 91福利电影| 国产欧美日韩电影| 国产精品播放| www.欧美三级电影.com| 国产一级一级国产| 中文字幕乱码一区二区三区| 国产精品欧美亚洲777777| 高潮久久久久久久久久久久久久| 免费看久久久| 北条麻妃一区二区三区在线| 欧美一区二区三区四区夜夜大片| 免费精品99久久国产综合精品应用| 波多野结衣在线网站| 男人天堂2024| 亚洲天堂777| 国产精品1区2区3区4区| 国产成人在线网站| av一卡二卡| 国产美女18xxxx免费视频| 欧美午夜国产| 成人黄在线观看| 亚洲精品视频免费看| 日韩成人三级| 欧美www在线观看| 8x8ⅹ国产精品一区二区二区| 日韩精品一区二区久久| 91麻豆精品国产综合久久久久久| 国精品产品一区| 国产激情在线看| 四虎884aa成人精品最新| 国产一区二区三区电影在线观看| 国产欧美一区二区三区鸳鸯浴| 一级久久久久久| 国产在线观看福利| 18毛片免费看| 国产精品123| 国产伦精品一区二区三区免| 欧美一级午夜免费电影| av影音在线| 外国成人在线视频| 91资源在线播放| 免费无遮挡无码永久在线观看视频| 国产欧美日韩亚洲精品| 丰满岳乱妇一区二区三区| 深夜精品寂寞黄网站在线观看| 欧美成人国产精品高潮| 美女把腿扒开让男人桶免费| 日韩久久久久久久久久久久久| 动漫视频在线一区|