成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > 分析Tomcat的工作原理

分析Tomcat的工作原理

熱門標簽:云南云電銷機器人招商 400 電話 申請費用 長沙回撥外呼系統(tǒng) ai電話機器人營銷 江蘇自動外呼系統(tǒng)一般多少錢 山東電信外呼系統(tǒng)靠譜嗎 鸚鵡螺號航海地圖標注時間 比較穩(wěn)定的外呼系統(tǒng) 信貸電銷機器人系統(tǒng)

SpringBoot 就像一條巨蟒,慢慢纏繞著我們,使我們麻痹。不得不承認,使用了 SpringBoot 確實提高了工作效率,但同時也讓我們遺忘了很多技能。剛?cè)肷鐣臅r候,我還是通過 Tomcat 手動部署 JavaWeb 項目,還經(jīng)常對 Tomcat 進行性能調(diào)優(yōu)。除此之外,還需要自己理清楚各 Jar 之間的關(guān)系,以避免 Jar 丟失和各版本沖突導(dǎo)致服務(wù)啟動異常的問題。到如今,這些繁瑣而又重復(fù)的工作已經(jīng)統(tǒng)統(tǒng)交給 SpringBoot 處理,我們可以把更多的精力放在業(yè)務(wù)邏輯上。但是,清楚 Tomcat 的工作原理和處理請求流程和分析 Spring 框架源碼一樣的重要。至少面試官特別喜歡問這些底層原理和設(shè)計思路。希望這篇文章能給你一些幫助。

Tomcat 整體架構(gòu)

Tomcat 是一個免費的、開源的、輕量級的 Web 應(yīng)用服務(wù)器。適合在并發(fā)量不是很高的中小企業(yè)項目中使用。

文件目錄結(jié)構(gòu)

以下是 Tomcat 8 主要目錄結(jié)構(gòu)

目錄 功能說明
bin 存放可執(zhí)行的文件,如 startup 和 shutdown
conf 存放配置文件,如核心配置文件 server.xml 和應(yīng)用默認的部署描述文件 web.xml
lib 存放 Tomcat 運行需要的jar包
logs 存放運行的日志文件
webapps 存放默認的 web 應(yīng)用部署目錄
work 存放 web 應(yīng)用代碼生成和編譯文件的臨時目錄

功能組件結(jié)構(gòu)

Tomcat 的核心功能有兩個,分別是負責(zé)接收和反饋外部請求的連接器 Connector,和負責(zé)處理請求的容器 Container。其中連接器和容器相輔相成,一起構(gòu)成了基本的 web 服務(wù) Service。每個 Tomcat 服務(wù)器可以管理多個 Service。

組件 功能
Connector 負責(zé)對外接收反饋請求。它是 Tomcat 與外界的交通樞紐,監(jiān)聽端口接收外界請求,并將請求處理后傳遞給容器做業(yè)務(wù)處理,最后將容器處理后的結(jié)果反饋給外界。
Container 負責(zé)對內(nèi)處理業(yè)務(wù)邏輯。其內(nèi)部由Engine、Host、Context 和 Wrapper 四個容器組成,用于管理和調(diào)用 Servlet 相關(guān)邏輯。
Service 對外提供的 Web 服務(wù)。主要包含連接器和容器兩個核心組件,以及其他功能組件。Tomcat 可以管理多個 Service,且各 Service 之間相互獨立。

Tomcat 連接器核心原理

Tomcat 連接器框架——Coyote

連接器核心功能

一、監(jiān)聽網(wǎng)絡(luò)端口,接收和響應(yīng)網(wǎng)絡(luò)請求。

二、網(wǎng)絡(luò)字節(jié)流處理。將收到的網(wǎng)絡(luò)字節(jié)流轉(zhuǎn)換成 Tomcat Request 再轉(zhuǎn)成標準的 ServletRequest 給容器,同時將容器傳來的 ServletResponse 轉(zhuǎn)成 Tomcat Response 再轉(zhuǎn)成網(wǎng)絡(luò)字節(jié)流。

連接器模塊設(shè)計

為滿足連接器的兩個核心功能,我們需要一個通訊端點來監(jiān)聽端口;需要一個處理器來處理網(wǎng)絡(luò)字節(jié)流;最后還需要一個適配器將處理后的結(jié)果轉(zhuǎn)成容器需要的結(jié)構(gòu)。

組件 功能
Endpoint 端點,用來處理 Socket 接收和發(fā)送的邏輯。其內(nèi)部由 Acceptor 監(jiān)聽請求、Handler 處理數(shù)據(jù)、AsyncTimeout 檢查請求超時。具體的實現(xiàn)有 NioEndPoint、AprEndpoint 等。
Processor 處理器,負責(zé)構(gòu)建 Tomcat Request 和 Response 對象。具體的實現(xiàn)有 Http11Processor、StreamProcessor 等。
Adapter 適配器,實現(xiàn) Tomcat Request、Response 與 ServletRequest、ServletResponse之間的相互轉(zhuǎn)換。這采用的是經(jīng)典的適配器設(shè)計模式。
ProtocolHandler 協(xié)議處理器,將不同的協(xié)議和通訊方式組合封裝成對應(yīng)的協(xié)議處理器,如 Http11NioProtocol 封裝的是 HTTP + NIO。

對應(yīng)的源碼包路徑 org.apache.coyote 。對應(yīng)的結(jié)構(gòu)圖如下

Tomcat 容器核心原理

Tomcat 容器框架——Catalina

容器結(jié)構(gòu)分析

每個 Service 會包含一個容器。容器由一個引擎可以管理多個虛擬主機。每個虛擬主機可以管理多個 Web 應(yīng)用。每個 Web 應(yīng)用會有多個 Servlet 包裝器。Engine、Host、Context 和 Wrapper,四個容器之間屬于父子關(guān)系。

容器 功能
Engine 引擎,管理多個虛擬主機。
Host 虛擬主機,負責(zé) Web 應(yīng)用的部署。
Context Web 應(yīng)用,包含多個 Servlet 封裝器。
Wrapper 封裝器,容器的最底層。對 Servlet 進行封裝,負責(zé)實例的創(chuàng)建、執(zhí)行和銷毀功能。

對應(yīng)的源碼包路徑 org.apache.coyote 。對應(yīng)的結(jié)構(gòu)圖如下

容器請求處理

容器的請求處理過程就是在 Engine、Host、Context 和 Wrapper 這四個容器之間層層調(diào)用,最后在 Servlet 中執(zhí)行對應(yīng)的業(yè)務(wù)邏輯。各容器都會有一個通道 Pipeline,每個通道上都會有一個 Basic Valve(如StandardEngineValve), 類似一個閘門用來處理 Request 和 Response 。其流程圖如下。

Tomcat 請求處理流程

上面的知識點已經(jīng)零零碎碎地介紹了一個 Tomcat 是如何處理一個請求。簡單理解就是連接器的處理流程 + 容器的處理流程 = Tomcat 處理流程。哈!那么問題來了,Tomcat 是如何通過請求路徑找到對應(yīng)的虛擬站點?是如何找到對應(yīng)的 Servlet 呢?

映射器功能介紹

這里需要引入一個上面沒有介紹的組件 Mapper。顧名思義,其作用是提供請求路徑的路由映射。根據(jù)請求URL地址匹配是由哪個容器來處理。其中每個容器都會它自己對應(yīng)的Mapper,如 MappedHost。不知道大家有沒有回憶起被 Mapper class not found 支配的恐懼。在以前,每寫一個完整的功能,都需要在 web.xml 配置映射規(guī)則,當文件越來越龐大的時候,各個問題隨著也會出現(xiàn)

HTTP請求流程

打開 tomcat/conf 目錄下的 server.xml 文件來分析一個http://localhost:8080/docs/api 請求。

第一步:連接器監(jiān)聽的端口是8080。由于請求的端口和監(jiān)聽的端口一致,連接器接受了該請求。

第二步:因為引擎的默認虛擬主機是 localhost,并且虛擬主機的目錄是webapps。所以請求找到了 tomcat/webapps 目錄。

第三步:解析的 docs 是 web 程序的應(yīng)用名,也就是 context。此時請求繼續(xù)從 webapps 目錄下找 docs 目錄。有的時候我們也會把應(yīng)用名省略。

第四步:解析的 api 是具體的業(yè)務(wù)邏輯地址。此時需要從 docs/WEB-INF/web.xml 中找映射關(guān)系,最后調(diào)用具體的函數(shù)。

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">

 <Service name="Catalina">

	<!-- 連接器監(jiān)聽端口是 8080,默認通訊協(xié)議是 HTTP/1.1 -->
 <Connector port="8080" protocol="HTTP/1.1"
  connectionTimeout="20000"
  redirectPort="8443" />
			 
	<!-- 名字為 Catalina 的引擎,其默認的虛擬主機是 localhost -->
 <Engine name="Catalina" defaultHost="localhost">

	 <!-- 名字為 localhost 的虛擬主機,其目錄是 webapps-->
 <Host name="localhost" appBase="webapps"
  unpackWARs="true" autoDeploy="true">

 </Host>
 </Engine>
 </Service>
</Server>

SpringBoot 如何啟動內(nèi)嵌的 Tomcat

SpringBoot 一鍵啟動服務(wù)的功能,讓有很多剛?cè)肷鐣呐笥讯纪?Tomcat 是啥。隨著硬件的性能越來越高,普通中小項目都可以直接用內(nèi)置 Tomcat 啟動。但是有些大一點的項目可能會用到 Tomcat 集群和調(diào)優(yōu),內(nèi)置的 Tomcat 就不一定能滿足需求了。

我們先從源碼中分析 SpringBoot 是如何啟動 Tomcat,以下是 SpringBoot 2.x 的代碼。

代碼從 main 方法開始,執(zhí)行 run 方法啟動項目。

SpringApplication.run

從 run 方法點進去,找到刷新應(yīng)用上下文的方法。

this.prepareContext(context, environment, listeners, applicationArguments, printedBanner);
this.refreshContext(context);
this.afterRefresh(context, applicationArguments);

從 refreshContext 方法點進去,找 refresh 方法。并一層層往上找其父類的方法。

this.refresh(context);

在 AbstractApplicationContext 類的 refresh 方法中,有一行調(diào)用子容器刷新的邏輯。

this.postProcessBeanFactory(beanFactory);
this.invokeBeanFactoryPostProcessors(beanFactory);
this.registerBeanPostProcessors(beanFactory);
this.initMessageSource();
this.initApplicationEventMulticaster();
this.onRefresh();
this.registerListeners();
this.finishBeanFactoryInitialization(beanFactory);
this.finishRefresh();

從 onRefresh 方法點進去,找到 ServletWebServerApplicationContext 的實現(xiàn)方法。在這里終于看到了希望。

protected void onRefresh() {
 super.onRefresh();

 try {
 this.createWebServer();
 } catch (Throwable var2) {
 throw new ApplicationContextException("Unable to start web server", var2);
 }
}

從 createWebServer 方法點進去,找到從工廠類中獲取 WebServer的代碼。

if (webServer == null && servletContext == null) {
 ServletWebServerFactory factory = this.getWebServerFactory();
 // 獲取 web server 
 this.webServer = factory.getWebServer(new ServletContextInitializer[]{this.getSelfInitializer()});
} else if (servletContext != null) {
 try {
 // 啟動 web server
 this.getSelfInitializer().onStartup(servletContext);
 } catch (ServletException var4) {
 throw new ApplicationContextException("Cannot initialize servlet context", var4);
 }
}

從 getWebServer 方法點進去,找到 TomcatServletWebServerFactory 的實現(xiàn)方法,與之對應(yīng)的還有 Jetty 和 Undertow。這里配置了基本的連接器、引擎、虛擬站點等配置。

public WebServer getWebServer(ServletContextInitializer... initializers) {
 Tomcat tomcat = new Tomcat();
 File baseDir = this.baseDirectory != null ? this.baseDirectory : this.createTempDir("tomcat");
 tomcat.setBaseDir(baseDir.getAbsolutePath());
 Connector connector = new Connector(this.protocol);
 tomcat.getService().addConnector(connector);
 this.customizeConnector(connector);
 tomcat.setConnector(connector);
 tomcat.getHost().setAutoDeploy(false);
 this.configureEngine(tomcat.getEngine());
 Iterator var5 = this.additionalTomcatConnectors.iterator();

 while(var5.hasNext()) {
 Connector additionalConnector = (Connector)var5.next();
 tomcat.getService().addConnector(additionalConnector);
 }

 this.prepareContext(tomcat.getHost(), initializers);
 return this.getTomcatWebServer(tomcat);
}

服務(wù)啟動后會打印日志

o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8900 (http)
o.apache.catalina.core.StandardService : Starting service [Tomcat]
org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.34
o.a.catalina.core.AprLifecycleListener : The APR based Apache Tomcat Native library which allows optimal ...
o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 16858 ms

END

文章到這里就結(jié)束了,實在是 hold 不住了,周末寫了一整天還沒有寫到源碼部分,只能放在下一章了。再寫真的就要廢了,有什么不對的地方請多多指出

以上就是Tomcat的工作原理是怎樣的的詳細內(nèi)容,更多關(guān)于Tomcat 工作原理的資料請關(guān)注腳本之家其它相關(guān)文章!

標簽:烏海 亳州 運城 齊齊哈爾 嘉興 衡陽 拉薩 澳門

巨人網(wǎng)絡(luò)通訊聲明:本文標題《分析Tomcat的工作原理》,本文關(guān)鍵詞  分析,Tomcat,的,工作,原理,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《分析Tomcat的工作原理》相關(guān)的同類信息!
  • 本頁收集關(guān)于分析Tomcat的工作原理的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    先锋成人影院| 日韩毛片无码永久免费看| 黄频免费在线观看| 99国产在线视频| 国产成人在线观看网站| 99视频精品全部免费看| 91九色porn蝌蚪| japanese日本护士撒尿| 4p变态网欧美系列| 欧美日本免费一区二区三区| 五月天久久狠狠| 日韩一区二区三区不卡| 久久mv成人精品亚洲动漫| 99成人精品视频| 亚洲欧美中文日韩在线| 制服丝袜中文字幕一区| 日韩精品福利| 中文字幕av在线| 成人超碰在线| 久久99精品国产| 四虎永久在线观看| 国产一区啦啦啦在线观看| 成人高清在线| 免费毛片aaaaaa| 黄色免费在线观看网站| xxxx性欧美黑人| 女女同性女同一区二区三区按摩| 亚洲综合色婷婷| 北条麻妃视频在线| 免费一区二区三区在线观看| 九九视频在线播放| 成人羞羞国产免费| 久久99热精品这里久久精品| 无码人妻丰满熟妇区五十路百度| 亚洲夜夜综合| 亚洲av成人精品一区二区三区在线播放| 日本va欧美va国产激情| 亚洲男女自偷自拍图片另类| 欧美精品激情blacked18| 色哟哟一区二区| 国产嫩草影院久久久久| 97av自拍| 色爱综合网站| 国产精品对白刺激久久久| 潘金莲一级淫片aaaaa免费看| www中文字幕在线观看| 久久高清一区| 欧美性色黄大片手机版| 欧美电影精品一区二区| 亚洲熟女综合色一区二区三区| 亚洲色图视频在线观看| 中日韩在线视频| ㊣最新国产の精品bt伙计久久| 风间由美一区二区三区| 新婚的少妇hd中文字幕| 婷婷四房综合激情五月| 石原莉奈一区二区三区高清在线| jizz蜜桃视频在线观看| 免费国产高清| 欧美国产精品一区二区| 国产日产精品一区| 久热精品视频在线观看一区| 国产精品中文字幕制服诱惑| 国产一区二区女| 久久五月天小说| 亚洲一区二区三区三| 午夜精品三级久久久有码| 伊人久久大香线蕉综合网站| 成人午夜毛片| 久久黄色小视频| 在线播放你懂得| 影音先锋男人资源在线观看| 欧美性做爰猛烈叫床潮| 亚洲欧洲激情在线乱码蜜桃| 成人综合电影| 亚洲肉体裸体xxxx137| 日韩精品诱惑一区?区三区| 国产黄在线观看免费观看不卡| 成人在线免费小视频| 国产欧美一区二区三区在线| 可播放的18gay1069| 香蕉乱码成人久久天堂爱免费| 欧美日韩中文精品| 日韩在线视频观看| 女生裸体无遮挡天堂网站免费| 在线视频观看你懂的| 久久噜噜噜精品国产亚洲综合| 黄色动漫在线免费看| 欧美日韩免费不卡视频一区二区三区| 成人精品久久久| 538国产精品一区二区免费视频| 九色porny91| 成人免费在线视频网址| 91超碰碰碰碰久久久久久综合| 久久精品99国产精品日本| 国产在线美女| 成人久久在线| 亚洲午夜在线| 深夜影院在线观看| 欧美专区在线视频| 99蜜桃臀久久久欧美精品网站| 国产一区二区麻豆| 影音先锋导航| xxxx69·hdxxxxx| 妺妺窝人体色www在线小说| 粉嫩一区二区三区在线观看| 福利微拍一区二区| 美女扒开内裤让男人桶| 污污内射在线观看一区二区少妇| 国产一区二区自拍视频| 亚州精品一二三区| 深夜福利免费在线观看| 国产欧美日韩免费看aⅴ视频| 蜜桃视频在线免费| 欧美电影《轻佻寡妇》| 久久久久国产免费免费| 欧美国产一区二区三区激情无套| 美女日韩欧美| 8x8x视频在线| 国产剧情一区二区在线观看| 欧美黑人视频一区| 超碰在线电影| 国产999在线| 欧美人与性动交α欧美精品济南到| 可骚可骚的黄视频网站| 国产免费无码一区二区视频| www.黄色一片| 久久久免费人体| 免费做暖暖免费观看日本| 欧美a在线视频| 一区二区三区精| aaa大片免费观看| 成人乱码一区二区三区av| 国产成人在线网站| 欧美午夜电影在线观看| 污网站在线看| 国语自产精品视频在线看| 国产天堂资源| 激情图片在线观看高清国产| 国内成人自拍视频| 亚洲人亚洲人色久| 成人毛片18女人毛片| 99精品一区| 国产亚洲欧洲高清一区| 亚洲护士老师的毛茸茸最新章节| 色噜噜狠狠色综合欧洲selulu| 日韩高清一区在线| 欧美日韩麻豆| 欧美性xxxx极品hd欧美风情| 亚洲成人久久影院| 中文字幕66页| 亚洲一区二区电影| av网站无病毒在线| 亚洲激情欧美激情| 久久久久久a亚洲欧洲aⅴ| 欧美偷拍一区二区| 久久人妻无码aⅴ毛片a片app| 国产日韩精品综合网站| 美女与牲口做爰视频在线观看| 亚洲国产99精品国自产| 西野翔中文久久精品字幕| 日韩高清二区| 国产在线一区二区三区四区| 欧美日韩一级大片| 99在线视频观看| 特黄视频在线观看| 国产精品护士白丝一区av| 中文字幕乱码在线| 亚洲福利免费| 欧美高清videos性极品| 性久久久久久久久久久久久久| 国产在线中文字幕| 久久一二三四区| 97色婷婷成人综合在线观看| 欧美aa免费在线| 欧美大秀在线观看| 精品一区二区三区中文字幕| 992tv在线观看在线播放| 91香蕉国产在线观看| dy888午夜| 久久精品一区二区三区不卡免费视频| 在线观看一区二区精品视频| 中文字幕无码人妻少妇免费| 999在线精品视频| 国产精品成人av| www.欧美.com| 日本sm极度另类视频| 微拍福利一区二区| 欧美做爰性欧美大fennong| 国产裸体美女永久免费无遮挡| 亚洲免费观看高清完整版在线观| 亚洲精品久久久蜜桃动漫| 精品少妇爆乳无码av无码专区| 日韩一区二区三区电影在线观看| 国产鲁鲁视频在线观看免费| 成人网6969conwww| 国产一区二区三区免费看| 国产日韩欧美视频在线| 欧美bbbbxxxx| 欧美激情第二页| 91精品一区二区三区综合| 日本在线视频免费| 国产亚洲永久域名| 国产精品日韩一区二区免费视频| 久久69精品久久久久久久电影好| 性一交一乱一区二区洋洋av| 亚洲免费一级电影| 蜜臀av免费在线观看| 欧美日本不卡视频| 国产精品v日韩精品v在线观看| 色老板亚洲精品一区| 天堂а√在线中文在线| 久久久高清一区二区三区| 欧美videossex另类| 日本午夜视频| 国产麻花豆剧传媒精品mv在线| 亚洲欧洲国产综合| 成人在线播放网站| 午夜国产在线| 国产一区二区三区四区福利| 日本少妇xxx| 在线播放三级网站| 色婷婷久久99综合精品jk白丝| 亚洲第一成年人网站| 中国女人内谢69xxxx视频| 成年人午夜剧场| 在线成人www免费观看视频| www.久色| 亚洲国产高清福利视频| 在线视频欧美精品| 欧美性生活久久| a级黄色免费视频| 偷拍自拍一区| 狠狠色伊人亚洲综合成人| 另类激情视频| 青青久久av北条麻妃海外网| 91精品一久久香蕉国产线看观看| 色综合伊人色综合网站| 国产又粗又猛又黄又爽| 久久黄色小视频| 天天干在线观看| 亚洲女性喷水在线观看一区| 久草视频在线免费看| 久久女同性恋中文字幕| 成片免费观看| 亚洲国产精品v| 色综合亚洲欧洲| 又黄又爽又色视频| 黄页网址大全在线播放| 亚洲国产小视频在线观看| 天堂中文在线8| 免费大秀视频在线播放| 成人av免费在线| 欧美日韩偷拍视频| 国产精品88久久久久久| 亚洲精品va| 国产三级精品在线不卡| 91九色蝌蚪视频| 国产在线播精品第三| av高清在线免费观看| 一区二区三区毛片| 国产一级免费av| 欧美一级黑人aaaaaaa做受| 欧美h版电影| 日本激情在线观看| 中文字幕一区二区久久人妻网站| 久久精品亚洲国产奇米99| 午夜dv内射一区二区| 在线观看制服搞黄视频| 天堂av在线网站| 亚洲欧美日韩国产中文| 精品亚洲一区二区三区在线播放| 久久久免费av| 久久精品亚洲一区二区| 免费日韩精品中文字幕视频在线| 成人91免费视频| 国产精品一区一区| 性久久久久久久久| 亚洲成色www.777999| 依依成人综合网| 免费看成人av| 五月激情综合色| 久久久久成人精品免费播放动漫| 国产精品爱久久久久久久| 精品在线一区| www在线播放| 懂色av一区二区三区在线播放| 四虎成人精品永久免费av| 精品亚洲一区二区三区在线观看| 97国产精品视频人人做人人爱| 精品国产乱码一区二区三区四区| 免费在线观看的黄色网址| 日韩久久免费av| 国产露脸91国语对白| 亚洲一二三区不卡| 西西44rtwww国产精品| 亚洲视频在线视频| 99视频+国产日韩欧美| 国产又粗又大又爽的视频| 国产一二三四在线| 手机看片1024国产| 伊人久久大香线蕉av一区二区| 欧美亚洲视频在线观看| 亚洲欧洲无码一区二区三区| 深夜做爰性大片蜜桃| 日韩一卡二卡在线| 香蕉国产精品| 成人精品国产| 欧美激情高清视频| av一区二区三区四区电影| 日韩精品无码一区二区三区免费| 成人手机在线| 久久精品视频免费观看| chinese国产精品| 亚洲乱亚洲乱妇| 久久成人麻豆午夜电影| 麻豆精品新av中文字幕| www91在线观看| 午夜伦欧美伦电影理论片| 国产精品久久久影院| 91精品国产91久久久久久黑人| 免费一级电影| 国产精品久久久久白浆| 国产中文字幕一区二区三区| 五月婷婷深爱五月| 欧美日韩色一区| 国产精品丝袜黑色高跟鞋| 日韩电影免费观看在|