国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

企業(yè)主流Web服務(wù)器Tomcat工作原理全面解析

共 3198字,需瀏覽 7分鐘

 ·

2021-12-14 15:09


Tomcat 是什么


開源的 Java Web 應(yīng)用服務(wù)器,實現(xiàn)了 Java EE(Java Platform Enterprise Edition)的部分技術(shù)規(guī)范,比如 Java Servlet、Java Server Page、JSTL、Java WebSocket。Java EE 是 Sun 公 司為企業(yè)級應(yīng)用推出的標準平臺,定義了一系列用于企業(yè)級開發(fā)的技術(shù)規(guī)范,除了上述的之外,還有 EJB、Java Mail、JPA、JTA、JMS 等,而這些都依賴具體容器的實現(xiàn)。


上圖對比了 Java EE 容器的實現(xiàn)情況,Tomcat 和 Jetty 都只提供了 Java Web 容器必需的 Servlet 和 JSP 規(guī)范,開發(fā)者要想實現(xiàn)其他的功能,需要自己依賴其他開源實現(xiàn)。

Glassfish 是由 Sun 公司推出,Java EE 最新規(guī)范出來之后,首先會在 Glassfish 上進行實 現(xiàn),所以是研究 Java EE 最新技術(shù)的首選。

最常見的情況是使用 Tomcat 作為 Java Web 服務(wù)器,使用 Spring 提供的開箱即用的強大 的功能,并依賴其他開源庫來完成負責的業(yè)務(wù)功能實現(xiàn)。


Servlet 容器


Tomcat 組成如下圖:主要有 Container 和 Connector 以及相關(guān)組件構(gòu)成。


  • Server:指的就是整個 Tomcat 服 務(wù)器,包含多組服務(wù),負責管理和 啟動各個 Service,同時監(jiān)聽 8005 端口發(fā)過來的 shutdown 命令,用于關(guān)閉整個容器;

  • Service:Tomcat 封裝的、對外提供完整的、基于組件的 Web 服務(wù), 包含 Connectors、Container 兩個核心組件,以及多個功能組件,各個 Service 之間是獨立的,但是共享 同一 JVM 的資源;

  • Connector:Tomcat 與外部世界的連接器,監(jiān)聽固定端口接收外部請求,傳遞給 Container,并將 Container 處理的結(jié)果返回給外部;

  • Container:Catalina,Servlet 容器,內(nèi)部有多層容器組成,用于管理 Servlet 生命周期,調(diào)用 servlet 相關(guān)方法;

  • Loader:封裝了 Java ClassLoader,用于 Container 加載類文件;

  • Realm:Tomcat 中為 Web 應(yīng)用程序提供訪問認證和角色管理的機制;

  • JMX:Java SE 中定義技術(shù)規(guī)范,是一個為應(yīng)用程序、設(shè)備、系統(tǒng)等植入管理功能的框架,通過 JMX 可以遠程監(jiān)控 Tomcat 的運行狀態(tài);

  • Jasper:Tomcat 的 JSP 解析引擎,用于將 JSP 轉(zhuǎn)換成 Java 文件,并編譯成 class 文件。

  • Session:負責管理和創(chuàng)建 Session,以及 Session 的持久化(可自定義),支持 Session 的集 群。

  • Pipeline:在容器中充當管道的作用,管道中可以設(shè)置各種 valve(閥門),請求和響應(yīng)在經(jīng)由管道中各個閥門處理,提供了一種靈活可配置的處理請求和響應(yīng)的機制。

  • Naming:命名服務(wù),JNDI, Java 命名和目錄接口,是一組在 Java 應(yīng)用中訪問命名和目錄服務(wù)的 API。命名服務(wù)將名稱和對象聯(lián)系起來,使得我們可以用名稱訪問對象,目錄服務(wù)也是一種命名 服務(wù),對象不但有名稱,還有屬性。Tomcat 中可以使用 JNDI 定義數(shù)據(jù)源、配置信息,用于開發(fā)與部署的分離。


Container 組成


  • Engine:Servlet 的頂層容器,包含一 個或多個 Host 子容器;

  • Host:虛擬主機,負責 Web 應(yīng)用的部 署和 Context 的創(chuàng)建;

  • Context:Web 應(yīng)用上下文,包含多個 Wrapper,負責 Web 配置的解析、管 理所有的 Web 資源;

  • Wrapper:最底層的容器,是對 Servlet 的封裝,負責 Servlet 實例的創(chuàng) 建、執(zhí)行和銷毀。


生命周期管理

Tomcat 為了方便管理組件和容器的生命周期,定義了從創(chuàng)建、啟動、到停止、銷毀共 12 種狀態(tài),Tomcat 生命周期管理了內(nèi)部狀態(tài)變化的規(guī)則控制,組件和容器只需實現(xiàn)相應(yīng)的生命周期 方法即可完成各生命周期內(nèi)的操作(initInternal、startInternal、stopInternal、 destroyInternal)。

比如執(zhí)行初始化操作時,會判斷當前狀態(tài)是否 New,如果不是,則拋出生命周期異常;如果是,則設(shè)置當前狀態(tài)為 Initializing,并執(zhí)行 initInternal 方法,由子類實現(xiàn),方法執(zhí)行成功則設(shè)置當 前狀態(tài)為 Initialized,執(zhí)行失敗則設(shè)置為 Failed 狀態(tài)。


Tomcat 的生命周期管理引入了事件機制,在組件或容器的生命周期狀態(tài)發(fā)生變化時會通知事件監(jiān)聽器,監(jiān)聽器通過判斷事件的類型來進行相應(yīng)的操作。事件監(jiān)聽器的添加可以在 server.xml 文件中進行配置。

Tomcat 各類容器的配置過程就是通過添加 listener 的方式來進行的,從而達到配置邏輯與容器的解耦。如 EngineConfig、HostConfig、ContextConfig。

  • EngineConfig:主要打印啟動和停止日志

  • HostConfig:主要處理部署應(yīng)用,解析應(yīng)用 META-INF/context.xml 并創(chuàng)建應(yīng)用的 Context

  • ContextConfig:主要解析并合并 web.xml,掃描應(yīng)用的各類 Eeb 資源(filter、servlet、listener)



Tomcat 的啟動過程


啟動從 Tomcat 提供的 start.sh 腳本開始,Shell 腳本會調(diào)用 Bootstrap 的 main 方法,實際調(diào)用了 Catalina 相應(yīng)的 load、start 方法。

load 方法會通過 Digester 進行 config/server.xml 的解析,在解析的過程中會根據(jù) xml 中的關(guān)系和配置信息來創(chuàng)建容器,并設(shè)置相關(guān)的屬性。接著 Catalina 會調(diào)用 StandardServer 的 init 和 start 方法進行容器的初始化和啟動。

按照 xml 的配置關(guān)系,server 的子元素是 service,service 的子元素是頂層容器 Engine,每層容器有持有自己的子容器,而這些元素都實現(xiàn)了生命周期管理 的各個方法,因此就很容易的完成整個容器的啟動、關(guān)閉等生命周期的管理。

StandardServer 完成 init 和 start 方法調(diào)用后,會一直監(jiān)聽來自 8005 端口(可配置),如果接收到 shutdown 命令,則會退出循環(huán)監(jiān)聽,執(zhí)行后續(xù)的 stop 和 destroy 方法,完成 Tomcat 容器的關(guān)閉。同時也會調(diào)用 JVM 的 Runtime.getRuntime()?.addShutdownHook 方法,在虛擬機意外退出的時候來關(guān)閉容器。

所有容器都是繼承自 ContainerBase,基類中封裝了容器中的重復工作,負責啟動容器相關(guān)的組 件 Loader、Logger、Manager、Cluster、Pipeline,啟動子容器(線程池并發(fā)啟動子容器,通過線程池 submit 多個線程,調(diào)用后返回 Future 對象,線程內(nèi)部啟動子容器,接著調(diào)用 Future 對象的 get 方法來等待執(zhí)行結(jié)果)。

List>?results?=?new?ArrayList>();
for?(int?i?=?0;?i?????results.add(startStopExecutor.submit(new?StartChild(children[i])));
}
boolean?fail?=?false;
for?(Future result :results)?{
????try?{
????????result.get();
????}?catch?(Exception?e)?{
????????log.error(sm.getString("containerBase.threadedStartFailed"),?e);
????????fail?=?true;
????}
}


Web 應(yīng)用的部署方式
注:


  • catalina.home:安裝目錄

  • catalina.base:工作目錄

  • 默認值:user.dir

  • Server.xml 配置 Host 元素,指定 appBase 屬性,默認 $catalina.base/webapps/

  • Server.xml 配置 Context 元素,指定 docBase,元素,指定 Web 應(yīng)用的路徑

  • 自定義配置在 $catalina.base/EngineName/HostName/XXX.xml 配置 Context 元素


HostConfig 監(jiān)聽了 StandardHost 容器的事件,在 start 方法中解析上述配置文件:

  • 掃描 appbase 路徑下的所有文件夾和 war 包,解析各個應(yīng)用的 META-INF/context.xml,并創(chuàng)建 StandardContext,并將 Context 加入到 Host 的子容器中。

  • 解析 $catalina.base/EngineName/HostName/ 下的所有 Context 配置,找到相應(yīng) Web 應(yīng)用的位置,解析各個應(yīng)用的 META-INF/context.xml,并創(chuàng)建 StandardContext,并將 Context 加入到 Host 的子容器中。


注:

  • HostConfig 并沒有實際解析 Context.xml,而是在 ContextConfig 中進行的。

  • HostConfig 中會定期檢查 watched 資源文件(context.xml 配置文件)


ContextConfig 解析 context.xml 順序:

  • 先解析全局的配置 config/context.xml

  • 然后解析 Host 的默認配置 EngineName/HostName/context.xml.default

  • 最后解析應(yīng)用的 META-INF/context.xml


ContextConfig 解析 web.xml 順序:

  • 先解析全局的配置 config/web.xml

  • 然后解析 Host 的默認配置 EngineName/HostName/web.xml.default 接著解析應(yīng)用的 MEB-INF/web.xml

  • 掃描應(yīng)用 WEB-INF/lib/ 下的 jar 文件,解析其中的 META-INF/web-fragment.xml 最后合并 xml 封裝成 WebXml,并設(shè)置 Context


注:

  • 掃描 Web 應(yīng)用和 jar 中的注解(Filter、Listener、Servlet)就是上述步驟中進行的。

  • 容器的定期執(zhí)行:backgroundProcess,由 ContainerBase 來實現(xiàn)的,并且只有在頂層容器中才會開啟線程。(backgroundProcessorDelay=10 標志位來控制)


Servlet 生命周期


Servlet 是用 Java 編寫的服務(wù)器端程序。其主要功能在于交互式地瀏覽和修改數(shù)據(jù),生成動態(tài) Web 內(nèi)容。

  1. 請求到達 server 端,server 根據(jù) url 映射到相應(yīng)的 Servlet

  2. 判斷 Servlet 實例是否存在,不存在則加載和實例化 Servlet 并調(diào)用 init 方法

  3. Server 分別創(chuàng)建 Request 和 Response 對象,調(diào)用 Servlet 實例的 service 方法(service 方法內(nèi)部會根據(jù) http 請求方法類型調(diào)用相應(yīng)的 doXXX 方法)

  4. doXXX 方法內(nèi)為業(yè)務(wù)邏輯實現(xiàn),從 Request 對象獲取請求參數(shù),處理完畢之后將結(jié)果通過 response 對象返回給調(diào)用方

  5. 當 Server 不再需要 Servlet 時(一般當 Server 關(guān)閉時),Server 調(diào)用 Servlet 的 destroy() 方法。


load on startup

當值為 0 或者大于 0 時,表示容器在應(yīng)用啟動時就加載這個 servlet;當是一個負數(shù)或者沒有指定時,則指示容器在該 servlet 被選擇時才加載;正數(shù)的值越小,啟動該 servlet 的優(yōu)先級越高。

single thread model

每次訪問 servlet,新建 servlet 實體對象,但并不能保證線程安全,同時 Tomcat 會限制 servlet 的實例數(shù)目。最佳實踐:不要使用該模型,servlet 中不要有全局變量。

請求處理過程


  1. 根據(jù) server.xml 配置的指定的 connector 以及端口監(jiān)聽 http、或者 ajp 請求

  2. 請求到來時建立連接,解析請求參數(shù),創(chuàng)建 Request 和 Response 對象,調(diào)用頂層容器 Pipeline 的 invoke 方法

  3. 容器之間層層調(diào)用,最終調(diào)用業(yè)務(wù) servlet 的 service 方法

  4. Connector 將 response 流中的數(shù)據(jù)寫到 socket 中


Pipeline 與 Valve


Pipeline 可以理解為現(xiàn)實中的管道,Valve 為管道中的閥門,Request 和 Response 對象在管道中經(jīng)過各個閥門的處理和控制。

每個容器的管道中都有一個必不可少的 basic valve,其他的都是可選的,basic valve 在管道中最后調(diào)用,同時負責調(diào)用子容器的第一個 valve。

Valve 中主要的三個方法:setNext、getNext、invoke。Valve 之間的關(guān)系是單向鏈式結(jié)構(gòu),本身 invoke 方法中會調(diào)用下一個 Valve 的 invoke 方法。

各層容器對應(yīng)的 basic valve 分別是 StandardEngineValve、StandardHostValve、StandardContextValve、StandardWrapperValve。


JSP引擎



JSP 生命周期

  • 編譯階段:servlet 容器編譯 servlet 源文件,生成 servlet 類

  • 初始化階段:加載與 JSP 對應(yīng)的 servlet 類,創(chuàng)建其實例,并調(diào)用它的初始化方法

  • 執(zhí)行階段:調(diào)用與 JSP 對應(yīng)的 servlet 實例的服務(wù)方法

  • 銷毀階段:調(diào)用與 JSP 對應(yīng)的 servlet 實例的銷毀方法,然后銷毀 servlet 實例


JSP元素

  • 代碼片段:<% 代碼片段 %>

  • JSP聲明:<%! declaration; [ declaration; ]+ ... %>

  • JSP表達式:<%= 表達式 %>

  • JSP注釋:<%-- 注釋 --%>

  • JSP指令:<%@ directive attribute=“value” %>

  • JSP行為:

  • HTML元素:html/head/body/div/p/……

  • JSP隱式對象:request、response、out、session、application、config、 pageContext、page、Exception


JSP 元素說明

  • 代碼片段:包含任意量的 Java 語句、變量、方法或表達式

  • JSP 聲明:一個聲明語句可以聲明一個或多個變量、方法,供后面的 Java 代碼使用

  • JSP 表達式:輸出 Java 表達式的值,String 形式;

  • JSP 注釋:為代碼作注釋以及將某段代碼注釋掉

  • JSP 指令:用來設(shè)置與整個 JSP 頁面相關(guān)的屬性:

    • <%@ page ... %> 定義頁面的依賴屬性,比如 language、contentType、errorPage、 isErrorPage、import、isThreadSafe、session 等等

    • <%@ include ... %> 包含其他的 JSP 文件、HTML 文件或文本文件,是該 JSP 文件的一部分,會被同時編譯執(zhí)行

    • <%@ taglib ... %> 引入標簽庫的定義,可以是自定義標簽


  • JSP 行為:jsp:include、jsp:useBean、jsp:setProperty、jsp:getProperty、jsp:forward


JSP 解析過程


  • 代碼片段:在 _jspService() 方法內(nèi)直接輸出

  • JSP 聲明:在 servlet 類中進行輸出

  • JSP 表達式:在 _jspService() 方法內(nèi)直接輸出

  • JSP 注釋:直接忽略,不輸出

  • JSP 指令:根據(jù)不同指令進行區(qū)分,include:對引入的文件進行解析;page 相關(guān)的屬性會做為 JSP 的屬性,影響的是解析和請求處理時的行為

  • JSP 行為:不同的行為有不同的處理方式,jsp:useBean 為例,會從 pageContext 根據(jù) scope 的 類別獲取 bean 對象,如果沒有會創(chuàng)建 bean,同時存到相應(yīng) scope 的 pageContext 中

  • HTML:在 _jspService() 方法內(nèi)直接輸出

  • JSP 隱式對象:在 _jspService() 方法會進行聲明,只能在方法中使用


Connector



  • HTTP,HTTP 是超文本傳輸協(xié)議,是客戶端瀏覽器或其他程序與 Web 服務(wù)器之間的應(yīng)用層通信協(xié)議

  • AJP,Apache JServ 協(xié)議(AJP)是一種二進制協(xié)議,專門代理從 Web 服務(wù)器到位于后端的應(yīng)用程序服務(wù)器的入站請求


阻塞 IO


非阻塞 IO


IO 多路復用


阻塞與非阻塞的區(qū)別在于進行讀操作和寫操作的系統(tǒng)調(diào)用時,如果此時內(nèi)核態(tài)沒有數(shù)據(jù)可讀或者沒有緩沖空間可寫時,是否阻塞。

IO 多路復用的好處在于可同時監(jiān)聽多個 socket 的可讀和可寫事件,這樣就能使得應(yīng)用可以同時監(jiān)聽多個 socket,釋放了應(yīng)用線程資源。

Tomcat 各類 Connector 對比


Connector 的實現(xiàn)模式有三種,分別是 BIO、NIO、APR,可以在 server.xml 中指定。

  • JIO:用 java.io 編寫的 TCP 模塊,阻塞IO

  • NIO:用 java.nio 編寫的 TCP 模塊,非阻塞 IO,(IO 多路復用)

  • APR:全稱 Apache Portable Runtime,使用 JNI 的方式來進行讀取文件以及進行網(wǎng)絡(luò)傳輸


Apache Portable Runtime 是一個高度可移植的庫,它是 Apache HTTP Server 2.x 的核心。APR 具有許多用途,包括訪問高級 IO 功能(如 sendfile,epoll 和 OpenSSL),操作系統(tǒng)級功能(隨機數(shù)生成,系統(tǒng)狀態(tài)等)和本地進程處理(共享內(nèi)存,NT 管道和 Unix 套接字)。

表格中字段含義說明:

  • Support Polling:是否支持基于 IO 多路復用的 socket 事件輪詢

  • Polling Size:輪詢的最大連接數(shù)

  • Wait for next Request:在等待下一個請求時,處理線程是否釋放,BIO 是沒有釋放的,所以在 keep-alive=true 的情況下處理的并發(fā)連接數(shù)有限

  • Read Request Headers:由于 request header 數(shù)據(jù)較少,可以由容器提前解析完畢,不需要阻塞

  • Read Request Body:讀取 request body 的數(shù)據(jù)是應(yīng)用業(yè)務(wù)邏輯的事情,同時 Servlet 的限制,是需要阻塞讀取的

  • Write Response:跟讀取 request body 的邏輯類似,同樣需要阻塞寫


NIO處理相關(guān)類


Acceptor 線程負責接收連接,調(diào)用 accept 方法阻塞接收建立的連接,并對 socket 進行封裝成 PollerEvent,指定注冊的事件為 op_read,并放入到 EventQueue 隊列中,PollerEvent 的 run 方法邏輯的是將 Selector 注冊到 socket 的指定事件。

Poller 線程從 EventQueue 獲取 PollerEvent,并執(zhí)行 PollerEvent 的 run 方法,調(diào)用 Selector 的 select 方法,如果有可讀的 Socket 則創(chuàng)建 Http11NioProcessor,放入到線程池中執(zhí)行。

CoyoteAdapter 是 Connector 到 Container 的適配器,Http11NioProcessor 調(diào)用其提供的 service 方法,內(nèi)部創(chuàng)建 Request 和 Response 對象,并調(diào)用最頂層容器的 Pipeline 中的第一個 Valve 的 invoke 方法。

Mapper 主要處理 http url 到 servlet 的映射規(guī)則的解析,對外提供 map 方法。

NIO Connector主要參數(shù)


Comet


Comet 是一種用于 Web 的推送技術(shù),能使服務(wù)器實時地將更新的信息傳送到客戶端,而無須客戶端發(fā)出請求,在 WebSocket 出來之前,如果不使用 comet,只能通過瀏覽器端輪詢 Server 來模擬實現(xiàn)服務(wù)器端推送。Comet 支持 servlet 異步處理 IO,當連接上數(shù)據(jù)可讀時觸發(fā)事件,并異步寫數(shù)據(jù)(阻塞)。


Tomcat 要實現(xiàn) Comet,只需繼承 HttpServlet 同時,實現(xiàn) CometProcessor 接口。

  • Begin:新的請求連接接入調(diào)用,可進行與 Request 和 Response 相關(guān)的對象初始化操作,并保存 response 對象,用于后續(xù)寫入數(shù)據(jù)

  • Read:請求連接有數(shù)據(jù)可讀時調(diào)用

  • End:當數(shù)據(jù)可用時,如果讀取到文件結(jié)束或者 response 被關(guān)閉時則被調(diào)用

  • Error:在連接上發(fā)生異常時調(diào)用,數(shù)據(jù)讀取異常、連接斷開、處理異常、socket 超時


Note:

  • Read:在 post 請求有數(shù)據(jù),但在begin事件中沒有處理,則會調(diào)用read,如果read沒有讀取數(shù)據(jù),在會觸發(fā)Error回調(diào),關(guān)閉socket

  • End:當socket超時,并且response被關(guān)閉時也會調(diào)用;server被關(guān)閉時調(diào)用

  • Error:除了socket超時不會關(guān)閉socket,其他都會關(guān)閉socket

  • End和Error時間觸發(fā)時應(yīng)關(guān)閉當前comet會話,即調(diào)用CometEvent的close方法 Note:在事件觸發(fā)時要做好線程安全的操作


異步 Servlet




傳統(tǒng)流程:

  • 首先,Servlet 接收到請求之后,request 數(shù)據(jù)解析;

  • 接著,調(diào)用業(yè)務(wù)接口的某些方法,以完成業(yè)務(wù)處理;

  • 最后,根據(jù)處理的結(jié)果提交響應(yīng),Servlet 線程結(jié)束。



異步處理流程:

  • 客戶端發(fā)送一個請求

  • Servlet 容器分配一個線程來處理容器中的一個 Servlet

  • Servlet 調(diào)用 request.startAsync(),保存 AsyncContext,然后返回

  • 任何方式存在的容器線程都將退出,但是 response 仍然保持開放

  • 業(yè)務(wù)線程使用保存的 AsyncContext 來完成響應(yīng)(線程池)

  • 客戶端收到響應(yīng)


Servlet 線程將請求轉(zhuǎn)交給一個異步線程來執(zhí)行業(yè)務(wù)處理,線程本身返回至容器,此時 Servlet 還沒有生成響應(yīng)數(shù)據(jù),異步線程處理完業(yè)務(wù)以后,可以直接生成響應(yīng)數(shù)據(jù)(異步線程擁有 ServletRequest 和 ServletResponse 對象的引用)

為什么 Web 應(yīng)用中支持異步?

推出異步,主要是針對那些比較耗時的請求:比如一次緩慢的數(shù)據(jù)庫查詢,一次外部 REST API 調(diào)用,或者是其他一些 I/O 密集型操作。這種耗時的請求會很快的耗光 Servlet 容器的線程池,繼而影響可擴展性。

Note:從客戶端的角度來看,request 仍然像任何其他的 HTTP 的 request-response 交互一樣,只是耗費了更長的時間而已。

異步事件監(jiān)聽

  • onStartAsync:Request 調(diào)用 startAsync 方法時觸發(fā)

  • onComplete:syncContext 調(diào)用 complete 方法時觸發(fā)

  • onError:處理請求的過程出現(xiàn)異常時觸發(fā)

  • onTimeout:socket 超時觸發(fā)


Note:onError/onTimeout 觸發(fā)后,會緊接著回調(diào) onComplete,onComplete 執(zhí)行后,就不可再操作 request 和 response。

原文鏈接:https://juejin.cn/post/6844903473482317837

Linux學習指南

有收獲,點個在看?

瀏覽 43
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 日韩乱伦AV| 大香蕉久| 久久久噜噜噜久久中文字幕色伊伊| 精品国产成人a在线观看| 91大神shunv| 天天干少妇| 亚洲无码久久飞鱼网站| 东京热免费视频| 亚洲精品a| 日本免费高清视频| 色综合天天综合网国产成人网| 日韩三级片在线视频| 男人的天堂一区| 五月丁香无码| 大地8免费高清视频观看大全| 亚洲第一成人网站| 亚洲www啪成人一区二区麻豆| 伊人久久免费视频| 欧美又大又粗| 欧美一级在线免费观看| 69国产精品无码免费| 国产精品午夜在线| 日韩第三页| 国产高清精品无码| 中文字幕一区二区蜜桃| 欧美视频一区| 日本无码一区二区| 日本一区二区在线| 99免费精品视频| 国产女人18毛片水真多1| 久久久久久久97| 狠狠地日| 嫩BBB槡BBBB槡BBBB百度| 欧美+日韩+国产+成人+在线| 狠狠色噜噜狠狠狠7777米奇网| 大香蕉亚洲成人| 久草福利视频| 免费AV在线| 无码免费播放| 色婷婷综合久久久中文字幕| 五月丁香成人网| 亚洲AV无码免费| 激情丁香六月| 中国免费一级无码成人片| 免费看毛片网站| 国产97在线视频| 国产一区二区视频在线| 91精品人妻一区二区三区四区 | 五月婷婷开心| 日日骚中文字幕| youjizzcom日本| 久草福利| 国产婷婷| 日韩性爱视频| 成人性生活视频| www99热| 欧美青青草| 操逼的网站| 人人干人人澡| 国产特级毛片| 免费亲子乱婬一级A片| 亚洲综合视频在线观看| 国产成人大片| 日韩精品一区在线观看| 一道本av| 国产高清无码一区二区三区| 国产精品国产三级国产专业不| 福利色播| 狠狠无码| 日老女人的逼| 在线有区别亚洲| 91露脸熟女四川熟女在线观看| 成人网站毛片| 水蜜桃在线观看视频| 亚洲一级AV| 欧美亚洲中文| 亚洲最大的成人网站| 一级a一级a爱片免费免免高潮| 日逼日逼日逼| www.777av| 人妻无码久久| 国产高清无码一区二区三区| 五月婷婷亚洲| 丁香五月激情网| 无码啪啪啪| 第一福利视频| 久久系列| 日韩人妻精品中文字幕免费| 亚洲欧美成人在线| 日韩强操逼网| 久久久久久97电影院电影院无码 | 日韩小视频| 久久青草视频| 日韩综合色视频导航| 精品夜夜澡人妻无码AV| 免费无码视频一区二区| 国产无码在线影院| 免费aa片| 最新激情网站| 偷拍亚洲综合| 二区三区视频| 操B视频免费看| 黑人巨大翔田千里AⅤ| 亚洲三级片无码| 天天日天天摸| 久久久精品免费| www.黄色片| 免费成人黄色网址| sesese999| 免费人妻视频| 青春草在线观看| 99热9| 成人性爱福利视频| 高清无码片| 996热re视频精品视频这里 | 亚洲国产高清在线观看视频| 天天视频狠狠狠狠| 最新日韩中文字幕| 99天堂网| 国产成人无码一区二区在线播放 | 91黄色毛片| 精品视频久| 2024av在线| 亚洲毛片亚洲毛片亚洲毛片| xxxxxbbbbb| 黄色片网站免费观看| 国产成人无码精品久在线观看| 青草草在线| 免费在线看a| 天天噜| 日韩国产在线观看| 久草蜜臀| 尤物av在线| www.操逼网| 午夜久久视频| AV资源网站| 日韩久久视频| 国产在线a| 国产三级片视频| 日皮做爱视频网站| 免费看三级网站| 国产日韩欧美成人| 丁香六月婷婷综合激情欧美| 超碰97av| 国产欧美精品一区二区色综合| 欧美成人大香蕉| 日韩黄色电影在线观看| 日本天堂Tv视频在线观看| 777欧美| 1024大香蕉| 国产三级精品三级在线观看 | 青青草99热| 91大屁股| 91麻豆一区| 性爱av天堂| 人妻大屁股-91Porn| 久久久国产精品黄毛片| 女人18特级毛片。| 开心色播五月天| 亚洲天堂AV在线观看| 大香蕉伊人精品| 熟妇人妻丰满久久久久久久无码 | 操逼日韩欧美| 色就色欧美| 欧美日韩国产成人电影| 黄色免费看视频| 天天操一操| 婷婷射| 四虎Av| 欧美男女交配视频| 婷婷五月成人| 中文字幕天天干| 超碰91在线观看| 青青在线视频| 91巨乳| 国产久久久久久久久久| 蜜桃久久久亚洲精品| 东北女人操逼| 无码视频免费观看| 成人黄网站免费观看| 国产乱╳╳AⅤ毛片| 成人久久久久一级大黄毛片中国 | av玖玖| 国产—级a毛—a毛免费视频| 欧美在线| 久久AV秘一区二区三区水生| 日韩视频在线观看免费| 天堂麻豆天美| 99热这里只有精品999| 操精品| 无码人妻精品一区二区三千菊电影| 色人人| 婷婷久草网| 操屄在线视频| 国产经典午夜福利视频合集| 午夜性视频| 色悠悠久久| 欧美午夜精品久久久久免费视 | 日本韩国欧美18| 国产嫩BBwBBw高潮| 在线A视频| 人妻FrXXeeXXee护士| 在线看片a| 不卡AV在线播放| 2024AV在线| 91嫩逼| 亚洲乱伦网| 国产AV大香蕉| 精品无码蜜桃| 五月天婷婷av| 六月婷| AV大全在线免费观看| 亚洲日韩三级| 97人人爽人人爽人人人| 久久久精品黄色网址| 怡红院成人在线| 成人做爰黄A片免费视频网站野外| 国产色情网站| 欧美性猛交一区二区三区| 免费看A片视频| 亚洲天堂男人的天堂| www.污| 极品美女援交在线| 国产精品资源在线观看| 婷婷夜色福利网| 亚洲成人性爱| 婚闹不堪入目A片| 安徽妇搡BBBB搡BBBB按摩| 国产精品视频久久久| 亚洲天媒在线播放| 久草综合网| 东京热在线视频观看| 六月色| 97超碰色| 亚州免费视频| 久久99免费视频| 国产美女操逼网站| 国产成人精品777777| 中文字幕免费在线视频| 色94色.欧美.setu| 欧美国产在线观看| 91在线| 另类老妇奶性生BBwBB| 围内精品久久久久久久久白丝制服| 91国内偷拍| 天天综合91| 欧美久色| 国产女主播在线| 国产精品久久久久永久免费看| 欧美在线观看一区二区| 性中国熟妇| 麻豆mdapp01.tⅴ| 老熟女AV| 天天日天天操天天摸天天干天日射天天插 | 双腿张开被9个男人调教| 999大香蕉| 91国产爽黄在线相亲| 国精品无码一区二区三区在线| 免费av片| 日韩福利视频| 五十路熟妇| 国产小电影在线| 韩日美女性爱| 丰滿人妻一区二区三| www.男人天堂| 亚洲黄色无码视频| 欧美日韩中文字幕在线视频| 免费一二区| av日韩在线播放| 豆花天天吃最新视频| 黄色视频网站免费| 国产精品视频导航| 视色影院| 91日综合欧美| 一级黄色视频免费观看| www.久久99| 亚洲素人无码| 农村老太HD肉HD| 超碰人人操| www.色日本| 激情五月天影院| 国产91综合一区在线观看| 中文字幕有码在线看| 日韩精品人妻一区二区| 成人中文字幕在线视频| 欧美久久精品| 99热加勒比| 国产精彩无码视频| 国产综合第一页| 亚洲高清毛片一区二区| 亚州在线视频| 性爱一级视频| av网站在线免费观看| 肏逼网站| 热久色| 天天爽视频| 大鸡巴日小逼| AV色片| 中文字幕首页| 日韩欧美中文字幕在线视频| 少妇精品| A片视频播放| 欧美精品在线播放| 色综合九九| 成人无码一区二区三区| 天天狠天天干| 亚洲精品一二三| 日韩视频一区| 一区二区三区日本| 欧美性爱中文字幕| 欧美在线A| 豆花视频成人精品视频| 亚洲欧洲视频在线观看| 能看的AV网站| 人妻少妇91精品一区黑人| 国产老女人操逼| 欧美一区二区三区婷婷五月| 人人天天爽| 日本日韩欧美| 一区黄片| 免费人妻视频| 欧美大鸡巴在线观看| 亚洲欧美另类在线| 在线中文AV| 亚洲做爱视频| 人人看人人摸人人插| 精品麻豆| 先锋久久资源| 男女www视频| 91探花精品偷拍在线播放| 日韩三级片无码| 午夜免费性爱视频| a免费在线观看| 熟女视频国产| 西西人体44www大胆无码| 99热免费| 无码国产高清| 天堂在线最新资源| 黄a无码| 免费视频一区二区| 亚洲成人AV电影| 黄色视频在线免费看| 草逼逼| 99热免费| 人人射人人爱| 2025av中文字幕| 亚洲乱码中文字幕| 国产性交网站| 九九久久99| 青草午夜| 日韩在线中文字幕视频| 丝袜东京热AV高清| 久久亭亭| 欧美性爱免费在线视频| 亚洲天堂2025| 激情麻豆| 六月激情婷婷| 国产黄片在线播放| 国产做受91一片二片老头| 91国内产香蕉| 久久精品熟妇丰满人妻99| 大香蕉免费| 在线免费看黄片| www.操操操| 一区在线视频| 国产视频在线播放| 一级A片视频免费看| 欧美成人精品在线| 裸体黄色一极大片| 国产二区三区| 日本特黄视频| 久久99免费视频| 51精品日本| 日韩欧美一级| 少妇婷婷| 日韩操大屌| 影音先锋在线视频| 五月丁香婷婷激情综合| 做爱网| 国产精品成| 免费看操逼视频| 伊人99re| 无码不卡视频在线观看| 日日夜夜AV| 99精品一区二区三区| 人人操大香蕉| 国产精品人妻无码久久久郑州天气网 | 我爱大香蕉| 青青草东路热vv| 99热这里精品| 91大神精品| 日日摸日日| 免费在线观看AV网站| 日韩高清国产一区在线| 五月丁香狠狠爱| 成人伊人AV| 91免费国产视频| 日韩av免费在线| av在线天堂| 日皮视频在线免费观看| 成人av影院| 欧美熟妇精品黑人巨大一二三区 | 苍井空视频| 五月丁香五月婷婷| 12一15女人A片毛| 欧美久久一区二区三区四区视频| 国精产品一二四区黑人| 人妻熟女在线视频| 婷婷在线播放| 97天天干| 先锋影音亚洲无码av| 加勒比综合| 国产三级视频在线| 伊人综合电影| 亚洲天堂综合网| 在线国产激情| 偷偷操穴| 日韩毛片中文字幕| 亚洲AV无码成人精品区h麻豆| 91站街农村熟女露脸| 中文字幕第11页| 中文字幕有码在线播放| 99色综合| 在线男人天堂| 怡春院综合成人社区| 日产无码| 国产精品无码无套在线照片| 亚洲成人中文字幕| 成人久久网| 热久久最新地址| 超碰97免费| 一级黄色片免费| 久久久偷拍视频| 九色在线视频| 亚州高清无码视频| 99插插插| 国产黄色免费| 国产免费高清| 天天草天天爽| sesese| 一区二区成人电影| 黑人aV| 亚洲大哥天天干| 张柏芝BBw搡BBBB槡BBBBHDfree | 国产精品色情| 五月天久久久久久| 国产乱子伦一区二区三精品| 影音先锋国产在线| 久久国产精品伦子伦| 五月天婷婷在线观看| 久久永久免费视频| 日韩精品成人在线视频| 影音先锋aV成人无码电影| 日韩视频――中文字幕| 亚洲国产精品成人综合色在线婷婷 | 91色视频在线观看| 国产免费小视频| 少妇人妻精品| 亚洲中文无码在线观看| 伊人网综合| 乱子伦国产精品一区二区| 夜夜精品视频| 亚洲成人视频| 欧美日韩99| 色色色热| 日韩黄色视频在线观看| 97精品国产| 色综合天天综合网国产成人网| 三级无码在线播放| 天堂成人在线视频| 欧美国产精品一二三产品在哪买 | 色悠悠国产| 日本色情视频网站| 波多野结衣黄色视频| 国产又大又黄| 午夜福利在线播放| 人妻无码中文久久久久专区| 欧美熟妇精品一级A片视色| 欧美日韩人妻| 俺去啦俺去也| 国产精品毛片| 残忍另类BBWBBWBBW| 中文字幕乱码中文乱码91| 狠狠色噜噜狠狠狠7777米奇网| 黄色操逼网站| 巜痴漢電車~凌脔版2| 天堂A片| 黄色成人毛片| 亚洲高清无码视频在线观看| 精品成人一区二区三区| 亚洲ww国产a大作| 欧美亚洲综合在线观看| 国产高清一区| Av一区二区三区| 69欧美视频| 亚洲三级国产| www久久久| 一区二区色| 色婷婷18禁| 婷婷成人在线| 搡BBBB搡BBB搡五十粉嫩| 欧美A视频| 91久久国产综合久久91精品网站 | 苍井空一区| 99久久99久久| 91搞鸡| 爽爽午国产浪潮AV性色www| 日韩精品在线观看视频| 91探花在线观看| 天天爽天天爽成人A片影院| 激情色图| 成人免费毛片果冻日本| 黄片高清| 免费无码婬片AAAA片直播| 熟女人妻在线| 看免费操逼视频| 操逼AⅤ| xxx综合网| 操日韩| 91久久精品无码一区| 无码人妻中文| 国产性爱电影网| 国产精品视频播放| 加勒比无码| 免费在线黄色视频| 一区二区三区四区| 巨爆乳肉感一区二区三区视频| 欧美视频在线观看| 荫蒂添出高潮A片视频| 国产三级片精品| 91久久久久久久18| 日日騒av无码| 黃色A片一級二級三級免費久久久| 亚韩无码| 99久久久国产精品无码| 水果派解说av| 午夜久| 成人毛片18毛片女人| 人人操在线| 一区二区三区四区久久| 91资源超碰| 亚洲欧美成人在线视频| 中文字幕性爱电影| 国产精品无码激情视频| 江苏妇搡BBBB搡BBBB-百度| 在线无码人妻| 91在线| 91福利视频在线观看| 国产小视频在线免费观看| 国产福利美女网站| 激情av天堂| 91久久精品日日躁夜夜躁国产| 久久无码高清视频| caopeng97| 在线观看视频无码| 国产又爽又黄免费观看| 五月天深爱激情网| 999成人电影| 久热久热| 国产在线高清| 中文字幕成| 国产91免费视频| 残忍另类BBWBBWBBW| 日本一本在线| 少妇人妻一区二区三区| 欧美A片免费观看| 欧美操操操| 国产亚洲视频在线观看视频| 兔子先生和優奈玩游戲脫衣服,運氣報表優奈輸到脫精光 | 伊人免费视频| 男人天堂网在线| 在线免费观看黄色片| 97在线视频免费观看| 亚洲视频91| 久久先锋| 口爆在线| 国产高清一区二区| 日韩欧美国产视频| 二区三区在线观看| 久久人搡人人玩人妻精AV香蕉| 怡春院免费视频| 成人精品秘久久久按摩下载| 另类老妇性bbwbbwbbw| 国产精品123区| 国产成人无码精品久在线观看| 超碰在线图片| 91视频美女模特| 天堂8在线19| 天天干天天日天天| 国产无码一二三| 成人视频18+在线观看| 国产成人电影免费在线观看| 日韩无码影院| 亚洲一级内射| 亚洲日韩Av无码中文字幕美国| 97黄片| 亚洲综合精品| 国产手机精品视频| 日本韩国欧美18| 黄色一级大片在线免费看国产| 欧美精品久| 东京热网站在线观看| 青草久在线| 无套影院| 99国产视频| 亚洲四区| 中文字幕亚洲有码| 双飞少妇| 久草手机在线视频| 黄色成人视频在线免费观看| 日本黄色视频网址| 特级西西444WWW视频| 福利在线| 日韩一级片在线播放| 人人妻人人澡人人爽人人爽| 精品无码一区二区三区蜜桃李宗瑞 | 亚州成熟少妇视频在线观看| 日韩成人无码视频| 亚洲天堂免费| 国产h视频在线观看| 护士小雪的yin荡高日记H视频| 伊人网大香| 国产免费AV网站| 中文有码视频| 91久久精品视频| 日本99热| 亚洲小电影在线| 国产在线视频一区二区三区 | 无码免费一区二区| 熟女人妻人妻の视频| 3D动漫啪啪精品一区二区中文字幕 | 日韩免费无码| 少妇bbw搡bbbb搡bbbb| 天天干天天舔| 国产中文在线观看| 国产无码一二三| 围产精品久久久久久久| 亚洲国产久久| 久热精品在线观看视频| www.操| www久久99| 婷婷五月天丁香网| 影音先锋av在线资源| 欧美偷拍一区| 麻豆91蜜桃传媒在线观看| 久久b| 国产精品美女久久久久久久久 | 亚洲少妇无码| 超碰婷婷| 国产精品自拍三级| 国产av网站大全| 黄片大全在线免费观看| 欧美极品另类| 嫩小槡BBBB槡BBBB槡免费-百度| 国产乱伦AV网站| 91麻豆精品无码人妻| 2024AV在线| 9l视频自拍九色9l视频成人| 日本黄色色情视频| 欧美老女人操逼视频| 青青草逼视频| 一级黄色免费片| 91麻豆精品国产91久久久久久| 日本黄色视频在线免费观看| 一区二区A片| 亚洲精品一区二区三区四区五区六区 | 国产成人精品一区二区三区四区| 艹逼视频免费观看| 无码人妻av一区| 噼里啪啦免费观看视频大全| 亚洲日本中文字幕在线| 日韩欧美国产一区二区| 免费福利视频网站| 日韩做爱网站| 黑人毛片91久久久久久| 日韩无码电影| 国内自拍视频网| 91av一区| 大香蕉大香蕉视频网| 91无码成人| 日韩无码性爱视频| 日本一区二区三区免费观看| 97大香蕉视频| 国产靠逼视频| 欧美性爱-熊猫成人网| 午夜性视频| 亚洲精品免费视频| 欧美成人精品AAA| 国产亲子乱A片免费视频| 欧美色小说| 日本AI高清无码在线观看网址 | 2025天天干| 欧美一级片在线| 日韩一级网站| 黄色精品| 欧美一区二区| 天天躁狠狠躁夜躁2024| 欧美日韩一区二区三区在线电影| 在线观看视频免费无码| 人妻懂色av粉嫩av浪潮av| 中文资源在线√8| 日韩精品中文字幕在线观看| 一级a片免费| 亚洲欧美日韩动漫| a片免费在线| 色天使av| 92丨九色丨偷拍老熟女| 日韩视频无码| 中文字幕在线免费视频| 男人天堂网站| 中文人妻av| 97无码人妻一区二区三区| 婷婷丁香五月在线| 国产欧美综合三级伦| 国产精品免费网站| 国产手机拍视频推荐2023| 亚洲天堂精品在线| 日日夜夜AV| 丁香婷婷一区二区三区| 人妻视频网站| 国产AV激情| 另类老妇性BBBWBBW| 丁香花在线小说免费阅读| 嫩草久久| 亚洲国产成人无码a在线播放| 久久精品久| 99热在线只有精品| 18禁网站禁片免费观看| 在线观看欧美日韩| 9I成人免费版| 亚洲黄色电影| 国产精品久久久91| 亚洲福利社| 操逼逼片| 大香蕉a片| 无码黄片免费| 久草视频免费| 五月丁香六月| 国产乱码在线| 久热中文在线观看精品视频| 黄色片久久| 国产手机精品视频| 国产91精品探花一区二区| 一本道中文字幕| 在线免费人成视频| 欧美精品一区二区三区蜜臀| 色欲色欲一区二区三区| 四川少BBB搡BBB爽爽爽| 亚洲熟女av中文字幕| 无码成人午夜在线影院| 久久成人毛片| 五月天黄色电影| 人人操夜夜| 色噜噜狠狠一区二区三区| 好吊妞视频在线| 亚洲人成色777777无码| 欧美成人黄色| 久久青| 国产精品欧美综合在线| 久草三级片| 成年人视频免费| 免费av片| 国模私拍视频| 黄色片在线免费观看| 欧美日本激情| 亚洲日本中文字幕在线观看 | 骚BBBB槡BBB槡BBB| 成人做爰黄片视频免费| 亚洲色图欧美另类| 天堂成人网| 肏屄网站| 婷婷五月天激情丁香| 国产操逼网址| AAA成人| 日韩一区在线视频| 麻豆免费成人传媒| 黄色视频在线观看亚洲一区二区三区免费 | 777777视频| 欧美性视频网站| 五月天婷婷小说| 超碰成人在线免费观看| 一级无码视频| 国产欧美一区二区三区在线看蜜臀| 亚洲综合伊人| 亚洲色综合网| 三级黄色免费网站| 亚洲精品色图| 国产suv精品一区二区6| a级黄色视频免费观看| 米奇色色色| 97国产资源| 日韩成人在线观看视频| 天天干天天日天天干| 无码日韩av| 欧美级黑寡妇毛片app| 日韩在线视频一区二区三区| V天堂在线| 日韩精品在线免费观看| 国产一区二区三区视频在线| 自拍偷拍激情视频| 无码三| 欧美草逼| 18禁裸体美女| 色综合色综合色综合| 热久在线| 色婷婷导航| 久久毛久久久j| 成人网站中文字幕| 91福利视频在线观看| 国产一二三四区| 九七影院第二页| 亚洲日本中文字幕在线观看| 亚洲欧美不卡| 性爱二区| 国产九九九| 成人一级黄色电影| 日韩视频中文| 国产成人精品三级麻豆| 国产美女精品久久AV爽| 欧美日韩一级二级三级| 91av免费在线观看| 国产黄色网页| 欧美精品一区二区少妇免费A片| 91ncom| 免费黄色视频网址| 日韩成人视频在线观看| 亚洲一区免费| 亚洲视频www| 人人妻人人爱人人操| 少妇在线观看| 夜夜夜夜撸| 欧美日韩成人在线观看| 中文视频在线观看| 亚洲无人禁区| 久久免费播放视频| 亚洲最大的成人网站| 女人操逼视频| 夜夜精品视频| 粉嫩小泬BBBB免费看-百度 | 青草五月天| 国产一级片内射| 无码人妻精品一区二区三区99仓| 久久久一区二区三区| 操B视频在线播放| 国产不卡在线观看| 国产毛片视频| 色婷婷五月激情| 人妻熟女在线| 亚洲午夜视频在线观看| 污导航在线| 日韩精品丰满无码一级A片∴| 黑人一级| 日本操B久久| 97午夜福利视频| 中文字幕av久久爽Av| 黄网站在线观看| 日韩中文无码电影| 青青色在线观看| 成人伊人网| 亚洲午夜久久久| 久久久久久久久久8888| 欧美偷拍| 中文字幕无码一区二区三区一本久 | 亚洲免费看黄| 国产伦乱| xxx久久| 色福利视频| 在线观看日本vs欧洲vs美洲| 樱桃码一区二区三区| 天天无码视频| 这里都是精品| 亚洲三级国产| 北条麻纪无码视频| 色妹子综合| 国产Av资源| 青草草在线| 免费AV网站| A级免费视频| 日本精品在线| 黄色免费a级片一级片| 欧美A片免费| 97资源超碰| 午夜AV在线播放| 婷婷综合亚洲| 欧亚毛片| 另类aV| 天天干人妻| 北条麻妃电影九九九| 天天爽夜夜爽夜夜爽精品| 日韩无码A片| 黑人AV在线播放| 欧美丁香五月| www日韩| 亚洲成人AV| 国产A片免费观看| 国产人国产视频成人免费观看…| 91免费网站在线观看| 欧美三P囗交做爰XXXⅩ| 亚洲AV无码成人精品久久久| 免费18禁网站|