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

MVC框架的映射和解耦

開發 開發工具
這個話題有點老。MVC 1在桌面程序中應用較多,業務邏輯當然放在Model里面,Controller負責將用戶的請求數據傳遞到Model去,之后就放手不管了,讓View通過觀察者模式不斷獲知Model的最新變化。

最近在寫一個業務上用到的框架,回想起接觸過的一些MVC框架,尤其是主要貢獻在后端表現層上的那些,它們之間有太多的相似,在不斷解耦的過程中,層數和模塊數也越來越多,需要不斷引入層與層之間的映射邏輯將不同層次之間關聯起來,我們不妨來查看一下這個過程,能否尋找一些MVC框架的共性和啟示。

MVC 1到MVC 2模型的進化

這個話題有點老。MVC 1在桌面程序中應用較多,業務邏輯當然放在Model里面,Controller負責將用戶的請求數據傳遞到Model去,之后就放手不管了,讓View通過觀察者模式不斷獲知Model的最新變化(可以是Model變化后通知View,也可以是View自己來獲取)。這個模式看起來很簡單,不過很容易發現一個嚴重的問題,View必須對Model了如指掌,要不然怎么觀察它呢。這實在是一件不甚合理的事情。

MVC框架的映射和解耦

MVC 2則解開了Model和View的耦合,Controller變成了中介者一樣的角色,View接收了用戶輸入,Controller把處理請求分派給Model,處理完后,又把結果交回View來展現。不過,這樣的代價是Controller變成了一個百事通,如果它要關心Model和View的具體實現,耦合的問題只是換了一件外衣而已。所以,需要對Controller進一步解耦。下面的話題,也是借由這一點展開的。

MVC框架的映射和解耦

從這個改變就可以看出在解耦方面的進化,但是依然沒有做足,后來ASP.NET又出了MVC 3MVC 4,我沒有去了解其中的變更。這只是關于解耦的一個前傳,下面讓我們回到正題,看看那些隨著解耦的進一步進行,新產生的映射邏輯和配置。

#p#

URL Mapping

也許最早會有人這樣寫代碼:

  1. if("/ServletTest/eg1".equals(request.getURI()))  
  2.     xxx;  
  3. else if("/ServletTest/eg2".equals(request.getURI()))  
  4.     xxx;  
  5. ... ... 

但是現在應該已經不會有人這樣寫了,印象中即便是最早只是用JSP+Servlet寫程序的那一批程序員寫網站應用的時候,URL和控制器入口的映射邏輯也已經被獨立出來了,例如Tomcat的web.xml:

  1. <servlet>  
  2.     <servlet-name>Example</servlet-name>  
  3.     <servlet-class>com.xxx.xxx.Example</servlet-class>  
  4. </servlet>  
  5. <servlet-mapping>  
  6.     <servlet-name>Example</servlet-name>  
  7.     <url-pattern>/example</url-pattern>  
  8. </servlet-mapping> 

但是這樣的配置匹配的表達式不夠靈活(例如無法自定義匹配邏輯),而且配置過于冗長(通常來說,我是一個xml配置文件的痛恨者),于是現今的MVC框架都提供了一套自己的映射匹配邏輯,例如Struts2:

  1. <action name="example" class="com.xxx.xxx.ExampleAction">  
  2.     <result name="success" type="dispatcher">/success.jsp</result>  
  3.     <result name="input" ... />  
  4. </action> 

還可以配置全局的跳轉邏輯,傳遞參數等等,總之配置是靈活多了,可是每寫一段控制器的邏輯,還是需要配置一段到XML文件中。這樣的問題也是可以解決的,將變化點獨立到Action里,配置文件中只寫這個變化的參數,這樣只需要一個配置就可以完成大部分跳轉了。

對于不同參數名稱和參數個數變化的情況,上面的辦法支持得又不好了,好在許多框架都提供了注解配置的辦法,把URL映射的邏輯變成短短的注解:

  1. @Results( { @Result(name = "success", location = "/success.jsp"), @Result(name = "error", location = "/error.jsp") }) 

可是這幫難伺候的程序員啊,還是嫌麻煩,這就需要利用CoC原則(規約優于配置,Convention over Configuration)。在Spring MVC中,聲明了ControllerClassNameHandlerMapping以后,對于這樣沒有配置任何映射信息的方法:

  1. @Controller 
  2. public class ExampleController extends MultiActionController{  
  3.    
  4.     @RequestMapping 
  5.     public void e1(...);  

類名叫做ExampleController,方法名叫做e1,因此在使用如下URI進行訪問的時候,就自動mapping到這個example方法上:

  1. /example/e1 

好了,這總滿足懶惰的程序員你了吧。

#p#

Data Binding

這里Data Binding(數據綁定)指的是將用戶請求提交上來的數據和領域模型綁定起來,即生成若干個攜帶數據的模型對象。

自不必說,最原始的方式應該是類似這樣的解決方法:

  1. User user = new User();  
  2. user.setName = (String)request.getParameter("name");  
  3. user.setAge = (Integer)request.getParameter("age");  
  4. ... ... 

這當然不會入程序員的法眼了,于是框架替你把參數綁定到一個數據集合的對象上,你獲取起來就容易多了,比如在Grails框架中,可以這樣寫:

  1. def example = {  
  2.     def name = params.name;  
  3.     def age = params.age;  
  4.     ... ...  

或者干脆換成參數映射的配置文件,可是還是好啰嗦,于是“規約優于配置”又來了,以Struts2為例:

  1. class UserAction{  
  2.     private User user;  
  3.     //get/set方法  

這種情況下,只要提交這樣的請求:

  1. /example/userAction?user.name=Jim&user.age=18 

這個name為Jim、age為18的User對象就自動被塞進這個Action去了。Spring MVC的情況類似,只不過粒度更小,參數注入的不是類Action實例的屬性,而是Controller方法的參數——當然,思想是一樣的。

#p#

視圖指向

你可能猜到我要說的內容了。程序員最原始的做法應該是類似這個樣子的:

  1. request.getRequestDispatcher("/common/success.jsp").forward(request, response); 

之后進化成為配置文件配置的形式、注解配置的形式,有了前文的介紹,這實在是沒什么特別的。值得一提的是,我用過一個框架,它對于URL Mapping(front-controller做的事情)和View Routing(backend-controller做的事情)通過這樣一種有趣的機制來完成:

根據URL路徑和Controller返回的結果字符串去尋找相應目錄下對應名稱的handler;

如果找不到就找defaultHandler;

如果還是找不到就往上一級目錄去找,依此類推。

舉例來說,Controller返回View的路徑為“user/admin/do”,就到…/user/admin目錄下尋找一個do.handler的文件,找不到就尋找同目錄下的default.handler,再找不到就往父目錄去遞歸尋找。這種機制就使得URL Mapping和View Routing的過程變得具有天然的繼承性(比如公用的success.handler可以放在頂級目錄中)。

這種方式其實也是配置,但是既不是配置文件,也不是注解,更不是代碼,而是一個文件和文件夾的組織結構。

最后,你肯定知道我還是要回到“規約優于配置”上面來。效果就是,例如訪問user/do默認完成后就去尋找…/user/success.jsp,異常后通過異常攔截器首先尋找…/user/failed.jsp。

#p#

頁面聚合

對于服務端頁面模板的組織在我看來一直是網站應用編程中比較薄弱的一塊(客戶端頁面聚合即前端頁面聚合我在此先不討論),直到現在,頁面模板的代碼還是極容易陷入過于復雜和不易理解的境地。最開始追溯到JSP誕生以前的時代,頁面是可以由Servlet一行一行輸出的:

  1. PrintWriter pw = response.getWriter();  
  2. pw.write("xxx");  
  3. ... ... 

那個時候還沒有頁面模板的概念。于是JSP出現,可以把頁面HTML和頁面上用于展示的Java代碼糅合在一起。至于JSP最初就容易被誤用做了更多的展示以外的事情,那其實并不是工具本身的錯。直到現在,還有許多人對于Servlet和JSP有相當的偏見,在程序員聊天的時候,你要是說你的網站是用Servlet+JSP做的,對方往往會直接鄙視你,用那么老土的技術。其實技術本身并沒有任何錯,Servlet+JSP依然可以非常漂亮地解決很多實際問題。

對于頁面模板,無論你是使用JSP,還是FreeMarker、Velocity,你都會面對一個問題,一個和Java代碼、C++代碼一樣需要依賴和組織的問題。于是程序員就將頁面分為幾個子頁面,通過這樣的方式引入:

  1. <%@ page import="xxx.jsp" %> 

不過,對于一些公共的頁面而言,可能要被許多頁面引用,幾乎所有的結果頁面都要引入header.jsp、menu.jsp、footer.jsp……并傳遞一些類似的參數。這讓啰嗦的程序員又覺得不開心了,我應該把我有限的精力專注到業務特有的邏輯和頁面上去,這些通用的部分框架能不能替我聚合,而我就不需要關心了?

這和異常處理很像,很多項目都喜歡定義自己的總異常,繼承自RuntimeException,不需要聲明,而且在通用異常攔截器內統一處理這些未被捕獲的異常,完成通用的邏輯處理和頁面轉向;而錯誤信息就通過異常攜帶出來了,程序員就不需要把精力分散到大量的異常信息傳遞上面——比如通過返回碼這種需要單獨處理的形式,記得在老項目(特別是存儲過程)的業務邏輯中還經常看到錯誤信息的返回碼,現在真是越來越少見了。

于是Tiles給了這樣的頁面聚合辦法,配置文件:

  1. <definition name="user" extends"main">  
  2.     <put name="title" value="XXX Site - User" />  
  3.     <put name="body" value="user.jsp" />  
  4.     ... ...  
  5. </definition> 

并且可以靈活地使用繼承和參數傳遞,可是依舊不爽,每一個頁面跳轉都要配置這樣一塊豆腐干,實在是很啰嗦。SiteMesh提供了一種更為簡潔的配置方式:

  1. <decorator name="main" page="main.jsp">  
  2.     <pattern>/*</pattern>  
  3. </decorator>  
  4. <excludes>  
  5.     <pattern>/admin/*</pattern>  
  6. </excludes> 

這樣一來,所有的請求(除了匹配“/admin/*”這樣的)全部都走到基于main.jsp聚合的邏輯中去了,通用的部分全部在main.jsp中完成,變化的頁面依然根據原有的View Routing的映射來尋找頁面,聚合這件事情,就真正對后續開發的程序員透明了。

對于框架來說,還有進一步解耦的需求嗎?有。比如可配置的攔截器,對于不同的請求能夠使用配置為不同數量和不同個數攔截器的“攔截器棧”來響應,既可能有前置處理,也可能有后置處理。攔截器把原本在許多業務里都要重復做的事情(比如權限校驗)通過AOP這種形式橫向切一刀給做了。再比如序列化,如果要返回頁面,形式可能是text/html的,而要傳遞對象,形式可能就是application/json這樣的,將頁面或者對象轉換成html或者JSON響應的活兒,程序員當然也不想干……

縱觀上面介紹的這些MVC框架在解耦和映射方面做的貢獻,我們很容易看到,在不斷地解耦過程中,層數、模塊數不斷在增加,復雜性應該說也在增加,配置當然更復雜,可是愛偷懶的程序總有辦法讓復雜變得簡單。這個因解耦引起層與層之間映射的配置便是如此:

程序員自己實現;框架實現,但是需要手動配置;規約優于配置。

正是程序員對于懶惰的追求,造就了一個又一個好用的MVC框架,現在開發一個網站對于十多年前來說,實在是簡便太多太多了,在今天談論的角度上,未來MVC框架還會有怎樣的發展趨勢呢?還有哪一些通用的部分會被解耦出來,你又怎么看?

原文鏈接:http://www.raychase.net/850

責任編輯:張偉 來源: 四火的嘮叨的博客
相關推薦

2024-07-10 17:51:47

2010-01-08 12:03:42

ibmdwREST

2011-02-24 15:11:00

MVC框架

2009-02-02 09:08:38

MVC框架控制器CakePHP

2009-06-19 11:28:45

2013-03-21 13:56:21

JavaScriptBackBone

2009-07-22 10:34:37

ActionInvokASP.NET MVC

2009-02-02 09:04:52

MVC框架Java

2017-11-23 17:21:31

Yii框架IntelYii框架深度剖析

2009-04-24 09:43:09

.NETASP.NET框架

2009-06-19 11:43:59

Spring MVC框

2009-07-24 13:20:44

MVC框架ASP.NET

2010-06-23 15:44:03

ASP.NET MVC

2010-01-07 09:59:16

RESTMVC

2012-11-28 11:05:42

IBMdW

2009-07-22 13:24:24

ASP.NET MVC

2009-07-22 10:09:59

ASP.NET MVC

2013-11-06 09:39:30

JavaScriptMVC框架

2009-07-20 10:53:59

ASP.NET MVC

2011-04-15 10:26:38

JavaMVC
點贊
收藏

51CTO技術棧公眾號

91麻豆精品在线| 欧美视频亚洲图片| 手机看片一区二区三区| 国产一区美女| 亚洲成人xxx| 久久久久久久久久网| 亚洲AV第二区国产精品| 久久久久久久久精| 好吊日视频在线观看| 久久国产精品第一页| 久久韩剧网电视剧| 久久黄色一级视频| 亚洲淫成人影院| 日本一区二区动态图| 91日本在线视频| 日韩精品一区二区不卡| 嫩草一区二区三区| 欧美日韩精品三区| 日本中文字幕在线视频观看 | 亚洲成人tv| 精品国产sm最大网站免费看| 国产精品动漫网站| 欧美jizz18性欧美| 不卡的av网站| 国产免费一区二区三区香蕉精| 粉嫩av性色av蜜臀av网站| 色婷婷综合久久久久久| 欧美日韩高清不卡| 男女激情无遮挡| 日韩a在线观看| 国模无码大尺度一区二区三区| 欧美精品激情在线观看| 双性尿奴穿贞c带憋尿| 台湾天天综合人成在线| 黄色成人av网| 妞干网这里只有精品| 天天操天天射天天舔| 久久精品一区| 午夜精品免费视频| 精品国产视频一区二区三区 | 成人国产精品久久久| www..com国产| 91精品91| 亚洲网站视频福利| 日本wwwxx| 国产成人77亚洲精品www| 午夜精品视频一区| 欧洲xxxxx| 男人影院在线观看| 国产日本一区二区| 国产精品嫩草在线观看| 国产绿帽刺激高潮对白| 日韩1区2区3区| 欧美野外猛男的大粗鳮| 免费一级黄色大片| 99久久夜色精品国产亚洲96 | 国产在线观看高清视频| 99精品久久99久久久久| 91视频在线免费观看| 亚洲一区在线观| 久久久久免费| 欧美综合在线第二页| 亚洲二区在线播放| 欧美激情国产在线| 亚洲天堂日韩电影| 免费成人蒂法网站| 男人的天堂久久| 精品国产凹凸成av人导航| 岛国大片在线免费观看| 成人污污视频| 91黄色激情网站| 国产91在线视频观看| 免费不卡av| 亚洲一区二区三区四区的 | 国产精品porn| 欧美成人合集magnet| 午夜三级在线观看| 93在线视频精品免费观看| 北条麻妃99精品青青久久| 天堂资源在线视频| 婷婷激情综合| 欧美日韩高清在线观看| 久久av高潮av无码av喷吹| 91精品国产福利在线观看麻豆| 色噜噜狠狠狠综合曰曰曰| 深爱五月激情网| 欧美xxxx在线| 亚洲精品福利在线| 亚洲成人日韩在线| av中文一区| 日韩在线不卡视频| 九九热国产精品视频| 国产精品啊v在线| 海角国产乱辈乱精品视频| 特一级黄色大片| 视频一区在线播放| 成人观看高清在线观看免费| 91亚洲视频在线观看| 奇米在线7777在线精品| 91深夜福利视频| 性xxxx视频播放免费| 国产欧美综合色| 日本黄色播放器| 天堂av资源在线观看| 狠狠躁18三区二区一区| 三级在线免费看| 精品视频91| 亚洲国产成人精品久久久国产成人一区| 成人免费看片载| 外国成人在线视频| 精品国产欧美一区二区五十路 | 男女超爽视频免费播放| 一区二区视频免费完整版观看| 一本色道综合亚洲| 99国产精品久久久久久| 91精品啪在线观看国产爱臀| 一区二区三区国产在线| 欧美激情网友自拍| 人人爽人人爽人人片av| 九九视频精品免费| 国产一区二区视频在线免费观看| 色综合888| 亚洲少妇屁股交4| 可以在线看的av网站| av在线播放一区| 精品国产露脸精彩对白| 毛片久久久久久| 黄色免费成人| 国产精品日韩欧美| 国产 日韩 欧美 精品| 国产欧美日韩综合| 日韩精品一区二区免费| 岛国精品在线| 欧美xxxxxxxx| 三区四区在线观看| 欧美日韩专区| 成人性生交大片免费看小说| 视频一区二区在线播放| 亚洲柠檬福利资源导航| www黄色在线| 国产乱人伦精品一区| 中文字幕精品一区二区精品| 欧美成人aaaaⅴ片在线看| 精品一区二区在线看| 欧美亚洲一级二级| 国产蜜臀在线| 欧美一级一区二区| 精品人体无码一区二区三区| 99riav国产精品| 成人国产精品日本在线| av在线免费观看网站| 懂色av中文一区二区三区天美| 精品无码人妻少妇久久久久久| 欧美日本一区| 国产精品日韩一区二区免费视频 | 久久夜色精品国产欧美乱极品| 加勒比成人在线| 牛牛影视久久网| 2019中文字幕在线观看| 日本国产在线| 色999日韩国产欧美一区二区| 精品人妻无码一区二区三区换脸| 久久国产欧美| 日本一区二区三不卡| 色天使综合视频| 日韩中文字幕久久| 国产精品女人久久久| 亚洲免费资源在线播放| 两女双腿交缠激烈磨豆腐| 欧美日韩综合| 久久综合精品一区| 成人做爰免费视频免费看| 中文字幕在线看视频国产欧美| 91亚洲视频在线观看| 一区二区视频在线看| 日韩综合第一页| 蜜乳av另类精品一区二区| 亚洲国产午夜伦理片大全在线观看网站 | 国产无码精品在线播放| 91麻豆国产福利精品| 在线免费观看av的网站| 欧美一区亚洲| 狠狠色噜噜狠狠色综合久| 高清av不卡| 久久久精品免费| 好男人www在线视频| 欧美日韩亚洲视频| 337人体粉嫩噜噜噜| 国产乱对白刺激视频不卡| 熟女少妇在线视频播放| 日韩在线观看一区| 国产精品国产三级欧美二区| 欧美亚洲韩国| 欧美精品在线免费| 欧美新色视频| 91精品蜜臀在线一区尤物| aaa人片在线| 国产精品久久久久久久久久免费看 | 美腿丝袜亚洲色图| www插插插无码免费视频网站| 九九在线精品| 成人一区二区在线| 韩日精品一区| 午夜剧场成人观在线视频免费观看| 国产黄色免费在线观看| 精品国免费一区二区三区| 波多野结衣一区二区在线| 夜夜精品视频一区二区| 日本美女xxx| bt7086福利一区国产| 青青草久久伊人| 性色一区二区| 美女扒开大腿让男人桶| 99久久久久| 日本一区免费| 天海翼精品一区二区三区| 亚洲一区二区免费在线| 韩国女主播一区二区| 7m第一福利500精品视频| 国产盗摄在线观看| 中文字幕国产亚洲2019| 视频二区在线| 亚洲第一男人天堂| 99国产精品久久久久久久成人| 在线视频国内自拍亚洲视频| 天天综合网入口| 亚洲精品日韩专区silk| 最新日韩免费视频| 国产亚洲成年网址在线观看| 亚洲国产精品狼友在线观看| 韩国成人在线视频| 波多结衣在线观看| 视频一区视频二区在线观看| 女性女同性aⅴ免费观女性恋 | 久久高清视频免费| 69xxxx欧美| 亚洲视频精品在线| 天堂av在线7| 日韩国产高清污视频在线观看| 蜜臀av中文字幕| 亚洲精品一区二区三区福利 | 一区二区欧美日韩| 欧美裸体在线版观看完整版| 蜜桃av噜噜一区二区三| 婷婷国产精品| 久久99久久99精品蜜柚传媒| 粉嫩av一区二区| 豆国产97在线| 97久久精品| 国产精品日韩高清| 欧美激情影院| 久久99精品国产一区二区三区| 粉嫩一区二区三区四区公司1| 国产欧美亚洲日本| 日韩高清一级| 麻豆av一区二区三区| 亚洲香蕉视频| 日本一区二区三区四区高清视频 | 高清不卡一区二区| 中文在线字幕观看| 播五月开心婷婷综合| 中出视频在线观看| 久久综合国产精品| 日本欧美一区二区三区不卡视频| 国产欧美日韩视频一区二区| 在线观看国产精品一区| 国产精品乱人伦一区二区| 娇小11一12╳yⅹ╳毛片| 亚洲天堂久久久久久久| 久草福利资源在线观看| 精品久久久久久久久久久久| 成人av网站在线播放| 欧美日韩美女一区二区| 国产视频第一页| 亚洲国产福利在线| 懂色av中文在线| 久久久www成人免费精品| 日本小视频在线免费观看| …久久精品99久久香蕉国产| 在线成人视屏| 爱情岛论坛亚洲入口| 一区二区三区日本久久久| 亚洲第一导航| 欧美日韩综合| 色婷婷综合久久久久中文字幕 | 欧美影视一区| avav在线看| 国产美女精品在线| 大地资源二中文在线影视观看| 国产精品久久久久影视| 国产精品a成v人在线播放| 欧美性猛交xxxxxx富婆| 亚洲精品喷潮一区二区三区| 一本色道久久综合狠狠躁篇怎么玩 | 91国内在线| 久久精品这里都是精品| 国产精品麻豆一区| 香蕉久久一区二区不卡无毒影院| 无码人妻精品一区二区三区蜜桃91| 制服丝袜一区二区三区| 午夜性色福利影院| 久久精品2019中文字幕| 免费h在线看| 91情侣偷在线精品国产| 国产精品一区2区3区| 99在线免费视频观看| 男人的j进女人的j一区| 三级视频网站在线观看| 亚洲欧洲美洲综合色网| 欧产日产国产69| 日韩欧美一区中文| 在线播放日本| 欧美一区三区三区高中清蜜桃| 精品99re| 亚洲精品一区二区三| 香蕉久久国产| 大尺度做爰床戏呻吟舒畅| 国产精品久久久久永久免费观看| 日本在线播放视频| 91精品久久久久久久99蜜桃| 搞黄视频在线观看| 欧美一区二区三区四区在线| 日韩一二三区在线观看| 一区在线电影| 欧美a级一区二区| 亚欧洲乱码视频| 欧美日韩美女在线| 成人无码一区二区三区| 美女撒尿一区二区三区| 成人国产激情| 丝袜美腿玉足3d专区一区| 国产亚洲在线观看| 色哟哟无码精品一区二区三区| 亚洲天堂成人网| 91亚洲欧美激情| 日韩最新在线视频| 国产91欧美| 色综合影院在线观看| 久久久久久亚洲精品杨幂换脸| avtt香蕉久久| 香蕉乱码成人久久天堂爱免费| 亚洲国产精品18久久久久久| 欧美精品在线网站| 欧美中文高清| 无码人妻精品一区二区蜜桃百度| 国产在线播放一区| 国产精品白丝喷水在线观看| 制服丝袜亚洲网站| av在线麻豆| 999国产在线| 欧美91福利在线观看| 日本女人黄色片| 亚洲综合激情网| 日本激情一区二区| 18性欧美xxxⅹ性满足| 色老板在线视频一区二区| 黄色影院一级片| 久久久久久一级片| 91麻豆精品在线| 日韩综合中文字幕| 亚洲视频精选| 国产精品无码一区二区在线| aaa欧美色吧激情视频| 久久艹免费视频| 亚洲性线免费观看视频成熟| 国产福利亚洲| 佐佐木明希av| 不卡的av在线播放| 欧美brazzers| 久久夜色精品国产亚洲aⅴ| 天堂精品在线视频| 无码精品a∨在线观看中文| 国产亚洲短视频| 国产精品丝袜黑色高跟鞋| 欧美黑人视频一区| 网友自拍一区| 最新天堂中文在线| 亚洲美女偷拍久久| 天天操天天插天天射| 国产精品成人aaaaa网站| 我不卡手机影院| 影音先锋黄色资源| 欧美色精品天天在线观看视频| www红色一片_亚洲成a人片在线观看_| 高清视频一区| 青青青伊人色综合久久| 九九热只有精品| 亚洲天堂第一页| 国产亚洲观看| 欧美精品成人网| 亚洲久草在线视频| 神马久久精品| 91香蕉嫩草影院入口| 在线亚洲观看| 激情高潮到大叫狂喷水| 亚洲精品成人网| 疯狂欧洲av久久成人av电影| 欧美日本视频在线观看| 国产精品不卡一区二区三区| 神马午夜一区二区|