欧美精品在线一区二区三区_亚洲女同精品视频_日韩一区免费_国产欧美久久久精品免费_国产这里只有精品_僵尸再翻生在线观看_久久99精品国产一区二区三区_亚洲免费一区二区_女教师淫辱の教室蜜臀av软件_中文字幕国产一区二区

Spring 5 新特性:函數(shù)式Web框架

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里


舉例

我們先從示例應(yīng)用程序的一些摘錄開始。下面是暴露Person對象的響應(yīng)信息庫。很類似于傳統(tǒng)的,非響應(yīng)信息庫,只不過它返回Flux<Person>而傳統(tǒng)的返回List<Person>,以及返回Mono<Person>的地方返回Person。Mono<Void>用作完成標識:指出何時保存被完成。關(guān)于Reactor類型的更多信息,請參閱

public interface PersonRepository { Mono<Person> getPerson(int id); Flux<Person> allPeople(); Mono<Void> savePerson(Mono<Person> person);
}

下面是我們?nèi)绾伪┞稁в行碌暮瘮?shù)式web框架的資源庫:

RouterFunction<?> route = route(GET("/person/{id}"),
    request -> {
        Mono<Person> person = Mono.justOrEmpty(request.pathVariable("id"))
            .map(Integer::valueOf)
            .then(repository::getPerson); return Response.ok().body(fromPublisher(person, Person.class));
    })
    .and(route(GET("/person"),
        request -> {
            Flux<Person> people = repository.allPeople(); return Response.ok().body(fromPublisher(people, Person.class));
    }))
    .and(route(POST("/person"),
    request -> {
        Mono<Person> person = request.body(toMono(Person.class)); return Response.ok().build(repository.savePerson(person));
}));

下面我們要介紹如何運行,比如在Reactor Netty中:

HttpHandler httpHandler = RouterFunctions.toHttpHandler(route);
ReactorHttpHandlerAdapter adapter = new ReactorHttpHandlerAdapter(httpHandler);
HttpServer server = HttpServer.create("localhost", 8080);
server.startAndAwait(adapter);

最后要做的一件事是試一試:

$ curl 'http://localhost:8080/person/1' {"name":"John Doe","age":42}

下面還有更多介紹,讓我們挖掘得更深!

核心組件

我會通過徹底說明核心組件來介紹框架:HandlerFunction,RouterFunction,以及FilterFunction。這三個接口以及文中描述的所有其他類型都可以在org.springframework.web.reactive.function包中找到。

HandlerFunction

這一新框架的起點是HandlerFunction<T>,基本上是Function<Request, Response<T>>,其中Request和Response是新定義的,一成不變的界面友好地來提供JDK-8 DSL到底層HTTP消息。對于構(gòu)建Response實體是一個方便的構(gòu)建工具,非常類似于在ResponseEntity中看到的。對應(yīng)到HandlerFunction注解是一個帶有@RequestMapping的方法。

下面是一個簡單的“Hello World”處理函數(shù)的例子,返回有200狀態(tài)以及body為String的響應(yīng)消息:

HandlerFunction<String> helloWorld =
    request -> Response.ok().body(fromObject("Hello World"));

正如我們在上面的例子中看到的,處理函數(shù)是通過構(gòu)建在Reactor的基礎(chǔ)上而完全響應(yīng):它們接受Flux,Mono,或任何其他相應(yīng)的流Publisher作為響應(yīng)類型。

要注意的一點,HandlerFunction本身是沒有副作用的,因為它返回響應(yīng),而不是把它當作一個參數(shù)(參見Servlet.service(ServletRequest,ServletResponse),這實質(zhì)上是BiConsumer<ServletRequest,ServletResponse> )。沒有副作用有很多好處:易于測試,編寫和優(yōu)化。

RouterFunction

傳入的請求被路由到有RouterFunction<T>的處理函數(shù)(即Function<Request, Optional<HandlerFunction<T>>)路由到處理函數(shù),如果它匹配的話;否則就返回一個空的結(jié)果。路由方法與@RequestMapping注解的作用相似。但是,還有一個顯著的區(qū)別:用注解時路由會被限制到注解的value所能表達的范圍,處理這些方法的覆蓋是困難的;當用路由方法的時候,代碼就在那里,可以輕松的覆蓋或替換。

下面是一個有內(nèi)嵌處理函數(shù)的路由函數(shù)的例子。它看起來有點冗長,但不要擔心:我們會找到辦法讓它變短。

RouterFunction<String> helloWorldRoute = 
    request -> { if (request.path().equals("/hello-world")) { return Optional.of(r -> Response.ok().body(fromObject("Hello World")));
        } else { return Optional.empty();
        }
    };

一般不用寫完整的路由方法,而是靜態(tài)引入RouterFunctions.route(),這樣就可以用請求判斷式(RequestPredicate) (即 Predicate<Request>)和處理方法(HandlerFunction)創(chuàng)建路由方法了。如果判斷式判斷成功則返回處理方法,否則返回空結(jié)果。如下是用route方法方式重寫上面的例子:

RouterFunction<String> helloWorldRoute =
    RouterFunctions.route(request -> request.path().equals("/hello-world"),
        request -> Response.ok().body(fromObject("Hello World")));

你可以(靜態(tài)地)導(dǎo)入RequestPredicates.*以訪問常用的謂詞,基于路徑、HTTP方法、內(nèi)容類型等等匹配。有了它,我們可以使helloWorldRoute更簡單:

RouterFunction<String> helloWorldRoute =
    RouterFunctions.route(RequestPredicates.path("/hello-world"),
        request -> Response.ok().body(fromObject("Hello World")));

組合函數(shù)

兩個路由函數(shù)可以組成一個新的路由函數(shù),路由到任一個處理函數(shù):如果第一個函數(shù)不匹配,那么就執(zhí)行第二個。你可以通過調(diào)用RouterFunction.and(),像這樣組合兩個路由函數(shù):

RouterFunction<?> route =
    route(path("/hello-world"),
        request -> Response.ok().body(fromObject("Hello World")))
    .and(route(path("/the-answer"),
        request -> Response.ok().body(fromObject("42"))));

如果路徑匹配/hello-world,以上將回應(yīng)“Hello World”,如果匹配/the-answer,則同時返回“42”。如果兩者都不匹配,則返回一個空的Optional。請注意,組合的路由函數(shù)會依次執(zhí)行,因此在具體函數(shù)之前放入泛型函數(shù)是有意義的。

你也可以組合要求謂詞,通過調(diào)用and或or。工作方式是這樣:對于and,如果兩個給定謂詞匹配的話,結(jié)果謂詞匹配,而如果兩者中的一個謂語匹配的話,那么就or匹配。例如:

RouterFunction<?> route =
    route(method(HttpMethod.GET).and(path("/hello-world")), 
        request -> Response.ok().body(fromObject("Hello World")))
    .and(route(method(HttpMethod.GET).and(path("/the-answer")), 
        request -> Response.ok().body(fromObject("42"))));

事實上,在RequestPredicates發(fā)現(xiàn)的大多數(shù)謂詞是組合的!例如,RequestPredicates.GET(String)是RequestPredicates.method(HttpMethod)和RequestPredicates.path(String)的組合物。因此,我們可以將上面的代碼重寫為:

RouterFunction<?> route =
    route(GET("/hello-world"),
        request -> Response.ok().body(fromObject("Hello World")))
    .and(route(GET("/the-answer"),
        request -> Response.ok().body(fromObject(42))));

方法引用

順便說一句:到目前為止,我們已經(jīng)編寫了所有的處理函數(shù)作為內(nèi)聯(lián)的lambda表達式。雖然這在演示和短的例子中表現(xiàn)良好,但是不得不說這有一種會導(dǎo)致“混亂”的傾向,因為你要混合兩種擔憂:請求路由和請求處理。因此,我們要看看是否能夠讓事情變得更簡潔。首先,我們創(chuàng)建一個包含處理代碼的類:

class DemoHandler { public Response<String> helloWorld(Request request) { return Response.ok().body(fromObject("Hello World"));
    } public Response<String> theAnswer(Request request) { return Response.ok().body(fromObject("42"));
    }
}

注意,兩個方法都有一個兼容了處理函數(shù)的標志。這允許我們使用方法引用:

DemoHandler handler = new DemoHandler(); // or obtain via DI RouterFunction<?> route =
    route(GET("/hello-world"), handler::helloWorld)
    .and(route(GET("/the-answer"), handler::theAnswer));

FilterFunction

由路由函數(shù)映射的路徑可以通過調(diào)用RouterFunction.filter(FilterFunction<T, R>)進行過濾,其中FilterFunction<T,R>本質(zhì)上是BiFunction<Request, HandlerFunction<T>, Response<R>>。函數(shù)的處理器(handler)參數(shù)代表的就是整個鏈條中的下一項: 這是一個典型的 HandlerFunction, 但如果附加了多個過濾器的話,它也能夠是另外的一個 FilterFunction。讓我們向路由添加一個日志過濾器:

RouterFunction<?> route =
    route(GET("/hello-world"), handler::helloWorld)
    .and(route(GET("/the-answer"), handler::theAnswer))
    .filter((request, next) -> {
        System.out.println("Before handler invocation: " + request.path());
        Response<?> response = next.handle(request);
        Object body = response.body();
        System.out.println("After handler invocation: " + body); return response;
});

需要注意的是,要不要調(diào)用下一個處理程序是可選的。這在安全和緩存方案中非常有用(如只在用戶有足夠權(quán)限的時候調(diào)用next)。

由于route是一個無限路由函數(shù),因此我們知道接下來的處理程序會返回什么類型的響應(yīng)信息。這就是為什么我們最終在我們的過濾器中用Response<?>結(jié)束以及用Object響應(yīng)body的原因。在處理程序類中,兩種方法都返回Response<String>,所以應(yīng)該有可能有String響應(yīng)主體。我們可以通過使用RouterFunction.andSame()來代替and()做到這一點。這種組合方法需要參數(shù)路由函數(shù)是相同的類型。例如,我們可以讓所有的響應(yīng)變成大寫:

RouterFunction<String> route =
  route(GET("/hello-world"), handler::helloWorld)
  .andSame(route(GET("/the-answer"), handler::theAnswer))
  .filter((request, next) -> {
    Response<String> response = next.handle(request);
    String newBody = response.body().toUpperCase(); return Response.from(response).body(fromObject(newBody));
  });

使用注解,相似的功能可以用@ControllerAdvice和/或ServletFilter來實現(xiàn)。

運行服務(wù)端

所有這一切都很好,但有一件事忘了:我們?nèi)绾尾拍茉趯嶋H的HTTP服務(wù)器中運行這些函數(shù)呢?答案勿庸置疑是通過調(diào)用另一個函數(shù)。你可以通過使用RouterFunctions.toHttpHandler()將路由函數(shù)轉(zhuǎn)換成HttpHandler。HttpHandler是引進到Spring 5.0 M1的一個響應(yīng)抽象:它允許你運行在各種響應(yīng)運行時上:Reactor Netty、RxNetty、Servlet 3.1+,和Undertow。在這個例子中,我們已經(jīng)表明了在Reactor Netty中運行route是怎么樣的。對于Tomcat,它看起來像這樣:

HttpHandler httpHandler = RouterFunctions.toHttpHandler(route);
HttpServlet servlet = new ServletHttpHandlerAdapter(httpHandler);
Tomcat server = new Tomcat();
Context rootContext = server.addContext("",
    System.getProperty("java.io.tmpdir"));
Tomcat.addServlet(rootContext, "servlet", servlet);
rootContext.addServletMapping("/", "servlet");
tomcatServer.start();

有一點要注意的是,上面的代碼不依賴于Spring應(yīng)用程序上下文。就像JdbcTemplate和其他Spring實用工具類,使用應(yīng)用程序上下文是可選的:你可以在上下文中接通處理程序和路由函數(shù),但它不是必需的。

還要注意的是,你也可以轉(zhuǎn)換路由函數(shù)為HandlerMapping,以便它可以在DispatcherHandler中運行(可能需要有響應(yīng)的@Controllers)。

結(jié)論

讓我通過簡短的總結(jié)來得出結(jié)論:

  • 處理函數(shù)通過返回響應(yīng)處理請求。
  • 路由函數(shù)路由到處理函數(shù),并且可以與其他路由函數(shù)組合。
  • 路由函數(shù)可以通過過濾器進行過濾。
  • 路由函數(shù)可以在響應(yīng)的web運行時中運行。


藍藍設(shè)計m.ocunn.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 平面設(shè)計服務(wù)

日歷

鏈接

個人資料

藍藍設(shè)計的小編 http://m.ocunn.cn

存檔

国产精品久久久久一区| 乌克兰美女av| 欧美一区二区视频在线| 国产色视频一区| 57pao国产成人免费| 久久精品国产免费观看| 日韩精品小视频| 欧美v日韩v国产v| 欧美日本免费一区二区三区| 欧美日韩精品中文字幕| 亚洲精品高清在线| 国产精品久久久久久久久图文区| 久久综合狠狠综合久久激情| 国产电影一区二区三区| 国产精品扒开做爽爽爽的视频| 黄色片一区二区三区| 一本大道伊人av久久综合| 久久一区二区三区视频| 成年人午夜视频| 日韩精品一区二区三| 久久99久久久| 久久亚洲国产成人精品性色| 欧美特级一级片| 国产这里有精品| 久草视频在线免费看| 日本中文字幕免费在线观看| 男女羞羞免费视频| 日韩视频免费观看高清| 久久久国产精品成人免费| 国产精品免费av一区二区| av大片在线免费观看| 黑人精品无码一区二区三区AV| 国产成人精品网| 中文字幕av片| 亚洲国产精品久久久久久6q| 亚洲精品一区二区三区蜜桃| 先锋av资源站| 国产视频三级在线观看播放| 午夜视频在线观看免费视频| 中文国产字幕在线观看| h片在线观看下载| 女生影院久久| 国产在线不卡一区二区三区| 欧美激情影院| 五月婷婷亚洲| 亚洲激情女人| 久久国产精品区| av在线这里只有精品| 国产日韩亚洲欧美综合| 亚洲男人的天堂网| 色婷婷激情综合| 日韩欧美不卡一区| 一本久久综合亚洲鲁鲁| 欧美另类在线观看| 国产精品88a∨| 国产精品国产三级国产专区53 | 亚洲一区二区三区日本久久九| 久久悠悠精品综合网| 欧美肉体xxxx裸体137大胆| 亚洲高清影视| 日本女优在线视频一区二区| 成人ar影院免费观看视频| 国产精品情趣视频| 色综合色狠狠综合色| 精品乱码亚洲一区二区不卡| 久久五月天色综合| 国产精品色视频| 欧美下载看逼逼| 黄色免费观看视频网站| 日本wwww色| 永久看片925tv| 在线免费观看视频网站| 在线观看h视频| 国产盗摄精品一区二区酒店| 91精品网站在线观看| 成人网18免费网站| 奇米777欧美一区二区| 久久网站最新地址| 日韩人体视频一二区| 日韩精品免费视频| 人人澡人人澡人人看欧美| 国产亚洲一区二区三区在线播放| 国产精品日韩三级| 久久国产劲爆∧v内射| 激情五月婷婷小说| 韩国av在线免费观看| 黄色成人在线| 99这里只有精品视频| 好吊一区二区三区| 99re热这里只有精品视频| 亚洲成人av在线电影| 亚洲国产精品嫩草影院久久| 97**国产露脸精品国产| 免费成人看片网址| 日韩中文字幕二区| 美国黄色片视频| 国产黄色一级大片| 香蕉久久aⅴ一区二区三区| 一区二区中文字幕在线观看| 亚洲小说欧美另类社区| 99国产精品国产精品毛片| 色综合久久中文字幕综合网| 中文字幕亚洲欧美日韩高清| 91在线高清视频| 乱妇乱女熟妇熟女网站| a资源在线观看| 精品人妻一区二区三区麻豆91| 国产精品剧情一区二区在线观看 | 精品无码m3u8在线观看| 国产最顶级的黄色片在线免费观看| av电影院在线看| 欧美一区二区三区激情视频 | 99国产视频| 欧美精品色婷婷五月综合| 极品尤物一区二区| 亚洲精品一区二区口爆| 麻豆蜜桃在线观看| 亚洲国产精品久久久久蝴蝶传媒| aaa亚洲精品一二三区| 欧美日韩在线综合| 欧美一级片免费在线| 异国色恋浪漫潭| 国产中年熟女高潮大集合| 国产婷婷在线视频| 人人草在线视频| 欧美福利一区| 国产精品国产精品国产专区不蜜| 亚洲国产精品成人一区二区| 91免费精品视频| 午夜在线观看av| 欧美一区二区三区不卡视频| 国产黄色在线网站| 欧美美女一区| 国产视频一区二区在线| 日韩电影中文字幕av| 亚洲自拍另类欧美丝袜| 一区二区在线免费看| 亚洲黄网在线观看| 国产精品69xx| 在线一区欧美| 欧美日韩免费一区| 国产91|九色| 成人小视频在线看| 日韩黄色在线播放| segui88久久综合9999| 欧美精品aa| 亚洲最大成人综合| 欧美激情啊啊啊| av在线播放亚洲| 成人在线免费看视频| 欧美videosex性欧美黑吊| 午夜精品亚洲| 精品美女久久久久久免费| 久久久综合av| 99免费视频观看| 亚洲一级特黄毛片| 成人国产激情在线| 经典三级在线一区| 精品欧美乱码久久久久久 | 午夜欧美在线一二页| 欧美日韩国产成人在线观看| 免费看欧美黑人毛片| 国产午夜久久久| 国产精品一二三产区| 亚洲欧美日韩在线观看a三区 | 日韩午夜三级在线| 国产欧美精品一区二区三区| 草草地址线路①屁屁影院成人| 在线观看国产v片| 青青青青在线| 欧美喷水视频| 色婷婷狠狠综合| 亚洲一区二区三区成人在线视频精品| 国产a√精品区二区三区四区| 亚洲AV无码乱码国产精品牛牛 | 欧美欧美全黄| 一个色在线综合| 国产成人久久久| 国产老头和老头xxxx×| 性感美女一级片| 日韩欧美视频在线播放| 亚洲成人第一页| 成人在线国产精品| 日韩精品电影一区二区| 淫片在线观看| 蜜乳av另类精品一区二区| 在线播放中文字幕一区| 激情一区二区三区| 久久综合激情网| 日韩av大片站长工具| 国产成人亚洲综合a∨猫咪| 亚洲人高潮女人毛茸茸| 久久99中文字幕| 老鸭窝一区二区| 成人免费在线电影| 国产日韩欧美一区二区三区在线观看| 制服视频三区第一页精品| 麻豆av一区二区三区久久| 国产亚洲精品久久777777| 亚洲www.| 国产视频一区二区三区在线观看| 久久久之久亚州精品露出| 成人性生交视频免费观看| 天堂a中文在线| 亚洲三级观看| 亚洲第一精品夜夜躁人人爽| 懂色av粉嫩av蜜臀av| 一级黄色大片免费观看| 四虎884aa成人精品最新| 亚洲国产精品尤物yw在线观看| 亚洲中国色老太| 国产在线一卡二卡| 日韩一区二区三免费高清在线观看| 久久婷婷色综合| 国产精品久久9| 亚洲a∨无码无在线观看| 伊人成综合网站| 欧美激情综合在线| 国产v综合v亚洲欧美久久| 插吧插吧综合网| av女在线播放| 久久综合给合久久狠狠狠97色69| 青青久久av北条麻妃海外网| 中日韩精品一区二区三区| 国产精品一品| 久久婷婷一区二区三区| 国产精品日韩久久久久| 亚洲天堂一级片| 外国成人毛片| 一区二区三区欧美在线观看| 国产乱码精品一区二区三区日韩精品 | 91精品国产综合久久久蜜臀图片| 国产又爽又黄ai换脸| www.成人精品| 亚洲夜间福利| 色综久久综合桃花网| 亚洲午夜精品在线观看| 日韩经典av| 久久久噜噜噜久久人人看| 精品一区二区三区在线| 色婷婷国产精品免| 免费高清在线观看免费| 亚洲av成人精品一区二区三区在线播放 | 亚洲啊啊啊啊啊| 高清欧美精品xxxxx在线看| 99热在线精品观看| 日韩中文字幕不卡视频| 蜜臀aⅴ国产精品久久久国产老师| 波多野结衣中文在线| 国产亚洲综合在线| 99中文视频在线| 一二三四区在线| 亚洲国产裸拍裸体视频在线观看乱了中文 | 欧美一区二区在线免费播放| 两根大肉大捧一进一出好爽视频| 午夜成人影视| 高清不卡在线观看av| 国产精品久久视频| 制服.丝袜.亚洲.中文.综合懂色| av亚洲在线观看| 亚洲欧美日韩国产中文| 91精品人妻一区二区三区蜜桃2| av中文字幕电影在线看| 亚洲三级在线免费| 亚洲制服欧美久久| 中文在线a在线| 国产91色综合久久免费分享| 成人写真福利网| 国产精选久久久| 日韩精品乱码免费| 欧日韩在线观看| 欧美三级韩国三级日本三斤在线观看| 久久免费大视频| 中文字幕亚洲无线码a| xxxx日本免费| 久久精品福利| 日韩精品视频中文在线观看 | 5278欧美一区二区三区| 日本在线小视频| 欧美日本一区| 欧美黑人性视频| 日韩精品久久久久久久酒店| 91tv官网精品成人亚洲| 久久国产精品偷| 青青草免费av| 欧美.www| 久久免费精品日本久久中文字幕| 欧美成人免费看| 欧美精品一区二区三区久久久竹菊| 久久香蕉国产线看观看av| 久久中文免费视频| 自产国语精品视频| 久久久这里只有精品视频| 欧美日韩乱国产| 久久久噜噜噜| 成人精品视频99在线观看免费| 国产欧美一级片| 国产成人精品免费看| 九色91视频| 每日更新在线观看av| 日韩一区中文字幕| 欧美又粗又长又爽做受| hd国产人妖ts另类视频| 日本道色综合久久| 中文字幕一区久| 国产精品免费丝袜| 肉大捧一出免费观看网站在线播放 | 日本黄色不卡视频| 成人va在线观看| 亚洲乱码国产乱码精品天美传媒| av在线中文| 亚洲国产aⅴ天堂久久| 一级特黄性色生活片| www欧美在线观看| 亚洲午夜激情免费视频| 久久97人妻无码一区二区三区| 99精品热6080yy久久| 国产日韩在线精品av| 在线视频99| 国产精品亚洲欧美| 国产一区红桃视频| 在线视频网站| 中文字幕人成不卡一区| 欧美精品色婷婷五月综合| 欧美综合影院| 在线播放日韩专区| 中文字幕激情小说| 国产一区在线看| 在线观看成人av| 2021中文字幕在线| 欧美刺激脚交jootjob| 青青青视频在线免费观看| 激情久久综合| 国产aⅴ精品一区二区三区黄| 国产资源在线观看| 色婷婷久久久亚洲一区二区三区| 欧类av怡春院| 亚洲国产一区二区在线观看 | 亚洲视频天天射| 日韩美女一区二区三区在线观看| …久久精品99久久香蕉国产| 亚洲欧美另类综合| 成人免费在线视频观看| 亚洲欧美偷拍另类| 精品国产一区一区二区三亚瑟 | a级片在线免费| 日韩精品中文字幕在线播放| 国产一卡二卡在线| 国产成人自拍高清视频在线免费播放 | 伊人久久大香线蕉成人综合网| 一区二区三区短视频| 亚洲女人天堂色在线7777| 国产农村妇女aaaaa视频| 东方欧美亚洲色图在线| 91视频 - 88av| 一级毛片精品毛片| 97精品国产aⅴ7777| 中文字幕免费在线观看| 欧美日韩中文在线| 天天摸日日摸狠狠添| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲国产高清国产精品| 新片速递亚洲合集欧美合集| 一区二区av在线| 精品国产无码AV| 亚洲永久精品大片| 麻豆国产精品一区| 欧美亚洲三区| 黄色网址在线免费看| 日韩精品视频在线看| 欧美一级大片视频| 国产高清视频免费最新在线| 欧美精品少妇一区二区三区 | 国产综合自拍| 欧美极品一区| 亚州精品国产| 欧美有码在线视频| 国产日本在线视频| 精品乱人伦小说| 一区二区小视频| 一区二区三区**美女毛片| 亚洲国产第一区| 老司机午夜精品| 色综合av综合无码综合网站| 欧美色就是色| 黑人中文字幕一区二区三区| 黑人精品一区| 久久久久国色av免费观看性色| 一二三区在线视频| 欧美一级久久久| 小泽玛利亚一区二区三区视频| 亚洲欧美视频在线观看| 丰满少妇一区二区| 国产二区国产一区在线观看| 在线黄色免费观看| 宅男噜噜噜66国产日韩在线观看| 色呦呦网站入口| 激情五月色综合国产精品| 国产精品v欧美精品∨日韩| 欧美日韩成人影院|