久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Tomcat核心組件及應(yīng)用架構(gòu)詳解

瀏覽:207日期:2023-03-19 16:50:57
目錄
  • Web容器是什么?
  • HTTP的本質(zhì)
    • HTTP請(qǐng)求響應(yīng)實(shí)例
    • Cookie和Session
  • Servlet規(guī)范
    • Servlet容器
      • Web應(yīng)用
        • 擴(kuò)展機(jī)制
          • 一、Tomcat各組件認(rèn)知
            • 2.Tomcat各組件及關(guān)系
          • 二、Tomcatserver.xml配置詳解
            • 三、Tomcat部署腳本編寫(xiě)

              Web 容器是什么?

              讓我們先來(lái)簡(jiǎn)單回顧一下 Web 技術(shù)的發(fā)展歷史,可以幫助你理解 Web 容器的由來(lái)。

              早期的 Web 應(yīng)用主要用于瀏覽新聞等靜態(tài)頁(yè)面,HTTP 服務(wù)器(比如 Apache、Nginx)向?yàn)g覽器返回靜態(tài) HTML,瀏覽器負(fù)責(zé)解析 HTML,將結(jié)果呈現(xiàn)給用戶(hù)。

              隨著互聯(lián)網(wǎng)的發(fā)展,我們已經(jīng)不滿(mǎn)足于僅僅瀏覽靜態(tài)頁(yè)面,還希望通過(guò)一些交互操作,來(lái)獲取動(dòng)態(tài)結(jié)果,因此也就需要一些擴(kuò)展機(jī)制能夠讓 HTTP 服務(wù)器調(diào)用服務(wù)端程序。

              于是 Sun 公司推出了 Servlet 技術(shù)。你可以把 Servlet 簡(jiǎn)單理解為運(yùn)行在服務(wù)端的 Java 小程序,但是 Servlet 沒(méi)有 main 方法,不能獨(dú)立運(yùn)行,因此必須把它部署到 Servlet 容器中,由容器來(lái)實(shí)例化并調(diào)用 Servlet。

              而 Tomcat 就是一個(gè) Servlet 容器。為了方便使用,它們也具有 HTTP 服務(wù)器的功能,因此 Tomcat 就是一個(gè)“HTTP 服務(wù)器 + Servlet 容器”,我們也叫它們 Web 容器。

              HTTP 的本質(zhì)

              HTTP 協(xié)議是瀏覽器與服務(wù)器之間的數(shù)據(jù)傳送協(xié)議。作為應(yīng)用層協(xié)議,HTTP 是基于 TCP/IP 協(xié)議來(lái)傳遞數(shù)據(jù)的(HTML 文件、圖片、查詢(xún)結(jié)果等),HTTP 協(xié)議不涉及數(shù)據(jù)包(Packet)傳輸,主要規(guī)定了客戶(hù)端和服務(wù)器之間的通信格式。

              假如瀏覽器需要從遠(yuǎn)程 HTTP 服務(wù)器獲取一個(gè) HTML 文本,在這個(gè)過(guò)程中,瀏覽器實(shí)際上要做兩件事情。

              • 與服務(wù)器建立 Socket 連接。
              • 生成請(qǐng)求數(shù)據(jù)并通過(guò) Socket 發(fā)送出去。

              HTTP 請(qǐng)求響應(yīng)實(shí)例

              用戶(hù)在登陸頁(yè)面輸入用戶(hù)名和密碼,點(diǎn)擊登陸后,瀏覽器發(fā)出了這樣的 HTTP 請(qǐng)求:

              HTTP 請(qǐng)求數(shù)據(jù)由三部分組成,分別是請(qǐng)求行、請(qǐng)求報(bào)頭、請(qǐng)求正文。當(dāng)這個(gè) HTTP 請(qǐng)求數(shù)據(jù)到達(dá) Tomcat 后,Tomcat 會(huì)把 HTTP 請(qǐng)求數(shù)據(jù)字節(jié)流解析成一個(gè) Request 對(duì)象,這個(gè) Request 對(duì)象封裝了 HTTP 所有的請(qǐng)求信息。接著 Tomcat 把這個(gè) Request 對(duì)象交給 Web 應(yīng)用去處理,處理完后得到一個(gè) Response 對(duì)象,Tomcat 會(huì)把這個(gè) Response 對(duì)象轉(zhuǎn)成 HTTP 格式的響應(yīng)數(shù)據(jù)并發(fā)送給瀏覽器。

              HTTP 的響應(yīng)也是由三部分組成,分別是狀態(tài)行、響應(yīng)報(bào)頭、報(bào)文主體。同樣,我還以極客時(shí)間登陸請(qǐng)求的響應(yīng)為例。

              Cookie 和 Session

              我們知道,HTTP 協(xié)議有個(gè)特點(diǎn)是無(wú)狀態(tài),請(qǐng)求與請(qǐng)求之間是沒(méi)有關(guān)系的。這樣會(huì)出現(xiàn)一個(gè)很尷尬的問(wèn)題:Web 應(yīng)用不知道你是誰(shuí)。因此 HTTP 協(xié)議需要一種技術(shù)讓請(qǐng)求與請(qǐng)求之間建立起聯(lián)系,并且服務(wù)器需要知道這個(gè)請(qǐng)求來(lái)自哪個(gè)用戶(hù),于是 Cookie 技術(shù)出現(xiàn)了。

              Cookie 是 HTTP 報(bào)文的一個(gè)請(qǐng)求頭,Web 應(yīng)用可以將用戶(hù)的標(biāo)識(shí)信息或者其他一些信息(用戶(hù)名等)存儲(chǔ)在 Cookie 中。用戶(hù)經(jīng)過(guò)驗(yàn)證之后,每次 HTTP 請(qǐng)求報(bào)文中都包含 Cookie,這樣服務(wù)器讀取這個(gè) Cookie 請(qǐng)求頭就知道用戶(hù)是誰(shuí)了。Cookie 本質(zhì)上就是一份存儲(chǔ)在用戶(hù)本地的文件,里面包含了每次請(qǐng)求中都需要傳遞的信息。

              由于 Cookie 以明文的方式存儲(chǔ)在本地,而 Cookie 中往往帶有用戶(hù)信息,這樣就造成了非常大的安全隱患。而 Session 的出現(xiàn)解決了這個(gè)問(wèn)題,Session 可以理解為服務(wù)器端開(kāi)辟的存儲(chǔ)空間,里面保存了用戶(hù)的狀態(tài),用戶(hù)信息以 Session 的形式存儲(chǔ)在服務(wù)端。當(dāng)用戶(hù)請(qǐng)求到來(lái)時(shí),服務(wù)端可以把用戶(hù)的請(qǐng)求和用戶(hù)的 Session 對(duì)應(yīng)起來(lái)。那么 Session 是怎么和請(qǐng)求對(duì)應(yīng)起來(lái)的呢?答案是通過(guò) Cookie,瀏覽器在 Cookie 中填充了一個(gè) Session ID 之類(lèi)的字段用來(lái)標(biāo)識(shí)請(qǐng)求。

              具體工作過(guò)程是這樣的:服務(wù)器在創(chuàng)建 Session 的同時(shí),會(huì)為該 Session 生成唯一的 Session ID,當(dāng)瀏覽器再次發(fā)送請(qǐng)求的時(shí)候,會(huì)將這個(gè) Session ID 帶上,服務(wù)器接受到請(qǐng)求之后就會(huì)依據(jù) Session ID 找到相應(yīng)的 Session,找到 Session 后,就可以在 Session 中獲取或者添加內(nèi)容了。而這些內(nèi)容只會(huì)保存在服務(wù)器中,發(fā)到客戶(hù)端的只有 Session ID,這樣相對(duì)安全,也節(jié)省了網(wǎng)絡(luò)流量,因?yàn)椴恍枰?Cookie 中存儲(chǔ)大量用戶(hù)信息。

              那么 Session 在何時(shí)何地創(chuàng)建呢?當(dāng)然還是在服務(wù)器端程序運(yùn)行的過(guò)程中創(chuàng)建的,不同語(yǔ)言實(shí)現(xiàn)的應(yīng)用程序有不同的創(chuàng)建 Session 的方法。在 Java 中,是 Web 應(yīng)用程序在調(diào)用 HttpServletRequest 的 getSession 方法時(shí),由 Web 容器(比如 Tomcat)創(chuàng)建的。

              Tomcat 的 Session 管理器提供了多種持久化方案來(lái)存儲(chǔ) Session,通常會(huì)采用高性能的存儲(chǔ)方式,比如 Redis,并且通過(guò)集群部署的方式,防止單點(diǎn)故障,從而提升高可用。同時(shí),Session 有過(guò)期時(shí)間,因此 Tomcat 會(huì)開(kāi)啟后臺(tái)線(xiàn)程定期的輪詢(xún),如果 Session 過(guò)期了就將 Session 失效。

              Servlet規(guī)范

              HTTP 服務(wù)器怎么知道要調(diào)用哪個(gè) Java 類(lèi)的哪個(gè)方法呢。最直接的做法是在 HTTP 服務(wù)器代碼里寫(xiě)一大堆 if else 邏輯判斷:如果是 A 請(qǐng)求就調(diào) X 類(lèi)的 M1 方法,如果是 B 請(qǐng)求就調(diào) Y 類(lèi)的 M2 方法。但這樣做明顯有問(wèn)題,因?yàn)?HTTP 服務(wù)器的代碼跟業(yè)務(wù)邏輯耦合在一起了,如果新加一個(gè)業(yè)務(wù)方法還要改 HTTP 服務(wù)器的代碼。

              那該怎么解決這個(gè)問(wèn)題呢?我們知道,面向接口編程是解決耦合問(wèn)題的法寶,于是有一伙人就定義了一個(gè)接口,各種業(yè)務(wù)類(lèi)都必須實(shí)現(xiàn)這個(gè)接口,這個(gè)接口就叫 Servlet 接口,有時(shí)我們也把實(shí)現(xiàn)了 Servlet 接口的業(yè)務(wù)類(lèi)叫作 Servlet。

              但是這里還有一個(gè)問(wèn)題,對(duì)于特定的請(qǐng)求,HTTP 服務(wù)器如何知道由哪個(gè) Servlet 來(lái)處理呢?Servlet 又是由誰(shuí)來(lái)實(shí)例化呢?顯然 HTTP 服務(wù)器不適合做這個(gè)工作,否則又和業(yè)務(wù)類(lèi)耦合了。

              于是,還是那伙人又發(fā)明了 Servlet 容器,Servlet 容器用來(lái)加載和管理業(yè)務(wù)類(lèi)。HTTP 服務(wù)器不直接跟業(yè)務(wù)類(lèi)打交道,而是把請(qǐng)求交給 Servlet 容器去處理,Servlet 容器會(huì)將請(qǐng)求轉(zhuǎn)發(fā)到具體的 Servlet,如果這個(gè) Servlet 還沒(méi)創(chuàng)建,就加載并實(shí)例化這個(gè) Servlet,然后調(diào)用這個(gè) Servlet 的接口方法。因此 Servlet 接口其實(shí)是 Servlet 容器跟具體業(yè)務(wù)類(lèi)之間的接口。下面我們通過(guò)一張圖來(lái)加深理解。

              Servlet 接口和 Servlet 容器這一整套規(guī)范叫作 Servlet 規(guī)范。Tomcat 和 Jetty 都按照 Servlet 規(guī)范的要求實(shí)現(xiàn)了 Servlet 容器,同時(shí)它們也具有 HTTP 服務(wù)器的功能。作為 Java 程序員,如果我們要實(shí)現(xiàn)新的業(yè)務(wù)功能,只需要實(shí)現(xiàn)一個(gè) Servlet,并把它注冊(cè)到 Tomcat(Servlet 容器)中,剩下的事情就由 Tomcat 幫我們處理了。

              Servlet 接口定義了下面五個(gè)方法:

              public interface Servlet {    void init(ServletConfig config) throws ServletException;        ServletConfig getServletConfig();        void service(ServletRequest req, ServletResponse res)throws ServletException, IOException;        String getServletInfo();        void destroy();}

              其中最重要是的 service 方法,具體業(yè)務(wù)類(lèi)在這個(gè)方法里實(shí)現(xiàn)處理邏輯。這個(gè)方法有兩個(gè)參數(shù):ServletRequest 和 ServletResponse。ServletRequest 用來(lái)封裝請(qǐng)求信息,ServletResponse 用來(lái)封裝響應(yīng)信息,因此本質(zhì)上這兩個(gè)類(lèi)是對(duì)通信協(xié)議的封裝。

              HTTP 協(xié)議中的請(qǐng)求和響應(yīng)就是對(duì)應(yīng)了 HttpServletRequest 和 HttpServletResponse 這兩個(gè)類(lèi)。你可以通過(guò) HttpServletRequest 來(lái)獲取所有請(qǐng)求相關(guān)的信息,包括請(qǐng)求路徑、Cookie、HTTP 頭、請(qǐng)求參數(shù)等。此外, 我們還可以通過(guò) HttpServletRequest 來(lái)創(chuàng)建和獲取 Session。而 HttpServletResponse 是用來(lái)封裝 HTTP 響應(yīng)的。

              你可以看到接口中還有兩個(gè)跟生命周期有關(guān)的方法 init 和 destroy,這是一個(gè)比較貼心的設(shè)計(jì),Servlet 容器在加載 Servlet 類(lèi)的時(shí)候會(huì)調(diào)用 init 方法,在卸載的時(shí)候會(huì)調(diào)用 destroy 方法。我們可能會(huì)在 init 方法里初始化一些資源,并在 destroy 方法里釋放這些資源,比如 Spring MVC 中的 DispatcherServlet,就是在 init 方法里創(chuàng)建了自己的 Spring 容器。

              你還會(huì)注意到 ServletConfig 這個(gè)類(lèi),ServletConfig 的作用就是封裝 Servlet 的初始化參數(shù)。你可以在web.xml給 Servlet 配置參數(shù),并在程序里通過(guò) getServletConfig 方法拿到這些參數(shù)。

              我們知道,有接口一般就有抽象類(lèi),抽象類(lèi)用來(lái)實(shí)現(xiàn)接口和封裝通用的邏輯,因此 Servlet 規(guī)范提供了 GenericServlet 抽象類(lèi),我們可以通過(guò)擴(kuò)展它來(lái)實(shí)現(xiàn) Servlet。雖然 Servlet 規(guī)范并不在乎通信協(xié)議是什么,但是大多數(shù)的 Servlet 都是在 HTTP 環(huán)境中處理的,因此 Servet 規(guī)范還提供了 HttpServlet 來(lái)繼承 GenericServlet,并且加入了 HTTP 特性。這樣我們通過(guò)繼承 HttpServlet 類(lèi)來(lái)實(shí)現(xiàn)自己的 Servlet,只需要重寫(xiě)兩個(gè)方法:doGet 和 doPost。

              Servlet 容器

              當(dāng)客戶(hù)請(qǐng)求某個(gè)資源時(shí),HTTP 服務(wù)器會(huì)用一個(gè) ServletRequest 對(duì)象把客戶(hù)的請(qǐng)求信息封裝起來(lái),然后調(diào)用 Servlet 容器的 service 方法,Servlet 容器拿到請(qǐng)求后,根據(jù)請(qǐng)求的 URL 和 Servlet 的映射關(guān)系,找到相應(yīng)的 Servlet,如果 Servlet 還沒(méi)有被加載,就用反射機(jī)制創(chuàng)建這個(gè) Servlet,并調(diào)用 Servlet 的 init 方法來(lái)完成初始化,接著調(diào)用 Servlet 的 service 方法來(lái)處理請(qǐng)求,把 ServletResponse 對(duì)象返回給 HTTP 服務(wù)器,HTTP 服務(wù)器會(huì)把響應(yīng)發(fā)送給客戶(hù)端

              Web 應(yīng)用

              Servlet 容器會(huì)實(shí)例化和調(diào)用 Servlet,那 Servlet 是怎么注冊(cè)到 Servlet 容器中的呢?一般來(lái)說(shuō),我們是以 Web 應(yīng)用程序的方式來(lái)部署 Servlet 的,而根據(jù) Servlet 規(guī)范,Web 應(yīng)用程序有一定的目錄結(jié)構(gòu),在這個(gè)目錄下分別放置了 Servlet 的類(lèi)文件、配置文件以及靜態(tài)資源,Servlet 容器通過(guò)讀取配置文件,就能找到并加載 Servlet。Web 應(yīng)用的目錄結(jié)構(gòu)大概是下面這樣的:

              | -  MyWebApp      | -  WEB-INF/web.xml-- 配置文件,用來(lái)配置Servlet等      | -  WEB-INF/lib/   -- 存放Web應(yīng)用所需各種JAR包      | -  WEB-INF/classes/       -- 存放你的應(yīng)用類(lèi),比如Servlet類(lèi)      | -  META-INF/      -- 目錄存放工程的一些信息

              Servlet 規(guī)范里定義了 ServletContext 這個(gè)接口來(lái)對(duì)應(yīng)一個(gè) Web 應(yīng)用。Web 應(yīng)用部署好后,Servlet 容器在啟動(dòng)時(shí)會(huì)加載 Web 應(yīng)用,并為每個(gè) Web 應(yīng)用創(chuàng)建唯一的 ServletContext 對(duì)象。你可以把 ServletContext 看成是一個(gè)全局對(duì)象,一個(gè) Web 應(yīng)用可能有多個(gè) Servlet,這些 Servlet 可以通過(guò)全局的 ServletContext 來(lái)共享數(shù)據(jù),這些數(shù)據(jù)包括 Web 應(yīng)用的初始化參數(shù)、Web 應(yīng)用目錄下的文件資源等。由于 ServletContext 持有所有 Servlet 實(shí)例,你還可以通過(guò)它來(lái)實(shí)現(xiàn) Servlet 請(qǐng)求的轉(zhuǎn)發(fā)。

              擴(kuò)展機(jī)制

              引入了 Servlet 規(guī)范后,你不需要關(guān)心 Socket 網(wǎng)絡(luò)通信、不需要關(guān)心 HTTP 協(xié)議,也不需要關(guān)心你的業(yè)務(wù)類(lèi)是如何被實(shí)例化和調(diào)用的,因?yàn)檫@些都被 Servlet 規(guī)范標(biāo)準(zhǔn)化了,你只要關(guān)心怎么實(shí)現(xiàn)的你的業(yè)務(wù)邏輯。這對(duì)于程序員來(lái)說(shuō)是件好事,但也有不方便的一面。所謂規(guī)范就是說(shuō)大家都要遵守,就會(huì)千篇一律,但是如果這個(gè)規(guī)范不能滿(mǎn)足你的業(yè)務(wù)的個(gè)性化需求,就有問(wèn)題了,因此設(shè)計(jì)一個(gè)規(guī)范或者一個(gè)中間件,要充分考慮到可擴(kuò)展性。Servlet 規(guī)范提供了兩種擴(kuò)展機(jī)制:Filter 和 Listener

              Filter 是過(guò)濾器,這個(gè)接口允許你對(duì)請(qǐng)求和響應(yīng)做一些統(tǒng)一的定制化處理,比如你可以根據(jù)請(qǐng)求的頻率來(lái)限制訪(fǎng)問(wèn),或者根據(jù)國(guó)家地區(qū)的不同來(lái)修改響應(yīng)內(nèi)容。過(guò)濾器的工作原理是這樣的:Web 應(yīng)用部署完成后,Servlet 容器需要實(shí)例化 Filter 并把 Filter 鏈接成一個(gè) FilterChain。當(dāng)請(qǐng)求進(jìn)來(lái)時(shí),獲取第一個(gè) Filter 并調(diào)用 doFilter 方法,doFilter 方法負(fù)責(zé)調(diào)用這個(gè) FilterChain 中的下一個(gè) Filter。

              Listener 是監(jiān)聽(tīng)器,這是另一種擴(kuò)展機(jī)制。當(dāng) Web 應(yīng)用在 Servlet 容器中運(yùn)行時(shí),Servlet 容器內(nèi)部會(huì)不斷的發(fā)生各種事件,如 Web 應(yīng)用的啟動(dòng)和停止、用戶(hù)請(qǐng)求到達(dá)等。 Servlet 容器提供了一些默認(rèn)的監(jiān)聽(tīng)器來(lái)監(jiān)聽(tīng)這些事件,當(dāng)事件發(fā)生時(shí),Servlet 容器會(huì)負(fù)責(zé)調(diào)用監(jiān)聽(tīng)器的方法。當(dāng)然,你可以定義自己的監(jiān)聽(tīng)器去監(jiān)聽(tīng)你感興趣的事件,將監(jiān)聽(tīng)器配置在web.xml中。比如 Spring 就實(shí)現(xiàn)了自己的監(jiān)聽(tīng)器,來(lái)監(jiān)聽(tīng) ServletContext 的啟動(dòng)事件,目的是當(dāng) Servlet 容器啟動(dòng)時(shí),創(chuàng)建并初始化全局的 Spring 容器。

              Tomcat下載地址:https://tomcat.apache.org/download-80.cgi

              /bin:存放 Windows 或 Linux 平臺(tái)上啟動(dòng)和關(guān)閉 Tomcat 的腳本文件。/conf:存放 Tomcat 的各種全局配置文件,其中最重要的是server.xml。/lib:存放 Tomcat 以及所有 Web 應(yīng)用都可以訪(fǎng)問(wèn)的 JAR 文件。/logs:存放 Tomcat 執(zhí)行時(shí)產(chǎn)生的日志文件。/work:存放 JSP 編譯后產(chǎn)生的 Class 文件。/webapps:Tomcat 的 Web 應(yīng)用目錄,默認(rèn)情況下把 Web 應(yīng)用放在這個(gè)目錄下。

              打開(kāi) Tomcat 的日志目錄,也就是 Tomcat 安裝目錄下的 logs 目錄。Tomcat 的日志信息分為兩類(lèi) :一是運(yùn)行日志,它主要記錄運(yùn)行過(guò)程中的一些信息,尤其是一些異常錯(cuò)誤日志信息 ;二是訪(fǎng)問(wèn)日志,它記錄訪(fǎng)問(wèn)的時(shí)間、IP 地址、訪(fǎng)問(wèn)的路徑等相關(guān)信息。

              • catalina.***.log 主要是記錄 Tomcat 啟動(dòng)過(guò)程的信息,在這個(gè)文件可以看到啟動(dòng)的 JVM 參數(shù)以及操作系統(tǒng)等日志信息。
              • catalina.out是 Tomcat 的標(biāo)準(zhǔn)輸出(stdout)和標(biāo)準(zhǔn)錯(cuò)誤(stderr),這是在 Tomcat 的啟動(dòng)腳本里指定的,如果沒(méi)有修改的話(huà) stdout 和 stderr 會(huì)重定向到這里。所以在這個(gè)文件里可以看到我們?cè)贛yServlet.java程序里打印出來(lái)的信息
              • localhost.**.log主要記錄 Web 應(yīng)用在初始化過(guò)程中遇到的未處理的異常,會(huì)被 Tomcat 捕獲而輸出這個(gè)日志文件。
              • localhost_access_log.**.txt存放訪(fǎng)問(wèn) Tomcat 的請(qǐng)求日志,包括 IP 地址以及請(qǐng)求的路徑、時(shí)間、請(qǐng)求協(xié)議以及狀態(tài)碼等信息。
              • manager.***.log/host-manager.***.log存放 Tomcat 自帶的 Manager 項(xiàng)目的日志信息。

              概要:

              1. Tomcat各核心組件認(rèn)知
              2. server.xml 配置詳解

              一、Tomcat各組件認(rèn)知

              知識(shí)點(diǎn):

              1. Tomcat架構(gòu)說(shuō)明
              2. Tomcat組件及關(guān)系詳情介紹
              3. Tomcat啟動(dòng)參數(shù)說(shuō)明
              4. Tomcat架構(gòu)說(shuō)明

              Tomcat是一個(gè)基于JAVA的WEB容器,其實(shí)現(xiàn)了JAVA EE中的 Servlet 與 jsp 規(guī)范,與Nginx apache 服務(wù)器不同在于一般用于動(dòng)態(tài)請(qǐng)求處理。在架構(gòu)設(shè)計(jì)上采用面向組件的方式設(shè)計(jì)。即整體功能是通過(guò)組件的方式拼裝完成。另外每個(gè)組件都可以被替換以保證靈活性。

              2.Tomcat 各組件及關(guān)系

              Server 和 Service
              Connector 連接器
              HTTP 1.1
              SSL https
              AJP( Apache JServ Protocol) apache 私有協(xié)議,用于apache 反向代理Tomcat
              Container
              Engine 引擎 catalina
              Host 虛擬機(jī) 基于域名 分發(fā)請(qǐng)求
              Context 隔離各個(gè)WEB應(yīng)用 每個(gè)Context的 ClassLoader都是獨(dú)立
              Component
              Manager (管理器)
              logger (日志管理)
              loader (載入器)
              pipeline (管道)
              valve (管道中的閥)

              二、Tomcat server.xml 配置詳解


              server

              root元素:server 的頂級(jí)配置 主要屬性: port:執(zhí)行關(guān)閉命令的端口號(hào) shutdown:關(guān)閉命令

              演示shutdown的用法 #基于telent 執(zhí)行SHUTDOWN 命令即可關(guān)閉(必須大寫(xiě)) telnet 127.0.0.1 8005 SHUTDOWN

              service

              服務(wù):將多個(gè)connector 與一個(gè)Engine組合成一個(gè)服務(wù),可以配置多個(gè)服務(wù)。

              Connector

              連接器:用于接收 指定協(xié)議下的連接 并指定給唯一的Engine 進(jìn)行處理。 主要屬性:

              • protocol 監(jiān)聽(tīng)的協(xié)議,默認(rèn)是http/1.1
              • port 指定服務(wù)器端要?jiǎng)?chuàng)建的端口號(hào)
              • minSpareThreads服務(wù)器啟動(dòng)時(shí)創(chuàng)建的處理請(qǐng)求的線(xiàn)程數(shù)
              • maxThreads 最大可以創(chuàng)建的處理請(qǐng)求的線(xiàn)程數(shù)
              • enableLookups 如果為true,則可以通過(guò)調(diào)用request.getRemoteHost()進(jìn)行DNS查詢(xún)來(lái)得到遠(yuǎn)程客戶(hù)端的實(shí)際主機(jī)名,若為false則不進(jìn)行DNS查詢(xún),而是返回其ip地址
              • redirectPort 指定服務(wù)器正在處理http請(qǐng)求時(shí)收到了一個(gè)SSL傳輸請(qǐng)求后重定向的端口號(hào)
              • acceptCount 指定當(dāng)所有可以使用的處理請(qǐng)求的線(xiàn)程數(shù)都被使用時(shí),可以放到處理隊(duì)列中的請(qǐng)求數(shù),超過(guò)這個(gè)數(shù)的請(qǐng)求將不予處理
              • connectionTimeout 指定超時(shí)的時(shí)間數(shù)(以毫秒為單位)
              • SSLEnabled 是否開(kāi)啟 sll 驗(yàn)證,在Https 訪(fǎng)問(wèn)時(shí)需要開(kāi)啟。生成證書(shū): keytool -genkey -v -alias testKey -keyalg RSA -validity 3650 -keystore D:\test.keystore
              • [ ] 演示配置多個(gè)Connector
              <Connector port="8860" protocol="org.apache.coyote.http11.Http11NioProtocol"                connectionTimeout="20000"                redirectPort="8862"                URIEncoding="UTF-8"                useBodyEncodingForURI="true"                compression="on" compressionMinSize="2048"compressableMimeType="text/html,text/xml,text/plain,text/javascript,text/css,application/x-json,application/json,application/x-javascript"                maxThreads="1024" minSpareThreads="200"                acceptCount="800"maxConnections="10000"                enableLookups="false"        />

              Engine

              引擎:用于處理連接的執(zhí)行器,默認(rèn)的引擎是catalina。一個(gè)service 中只能配置一個(gè)Engine。 主要屬性:name 引擎名稱(chēng) defaultHost 默認(rèn)host

              Host

              虛擬機(jī):基于域名匹配至指定虛擬機(jī)。類(lèi)似于nginx 當(dāng)中的server,默認(rèn)的虛擬機(jī)是localhost. 主要屬性:

              演示配置多個(gè)Host

              <Host name="www.wukong.com"  appBase="/usr/www/wukong"  unpackWARs="true" autoDeploy="true"> 	<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="www.wukong.com.access_log" 			suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" /> </Host>

              Context

              應(yīng)用上下文:一個(gè)host 下可以配置多個(gè)Context ,每個(gè)Context 都有其獨(dú)立的classPath。相互隔離,以免造成ClassPath 沖突。 主要屬性:

              演示配置多個(gè)Context

              <Context path="/testweb" docBase="testweb.war"  reloadbale="true"/>

              Valve 閥門(mén):可以理解成

              的過(guò)濾器,具體配置要基于具體的Valve 接口的子類(lèi)。以下即為一個(gè)訪(fǎng)問(wèn)日志的Valve

              <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"               prefix="www.wukong.com.access_log" suffix=".txt"               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

              三、Tomcat 部署腳本編寫(xiě)

              Tomcat啟動(dòng)參數(shù)說(shuō)明

              我們平時(shí)啟動(dòng)Tomcat過(guò)程是怎么樣的?

              1. 復(fù)制WAR包至Tomcat webapp 目錄。
              2. 執(zhí)行starut.bat 腳本啟動(dòng)。
              3. 啟動(dòng)過(guò)程中war 包會(huì)被自動(dòng)解壓裝載。

              但是我們?cè)贓clipse 或idea 中啟動(dòng)WEB項(xiàng)目的時(shí)候 也是把War包復(fù)雜至webapps 目錄解壓?jiǎn)幔匡@然不是,其真正做法是在Tomcat程序文件之外創(chuàng)建了一個(gè)部署目錄,在一般生產(chǎn)環(huán)境中也是這么做的 即:Tomcat 程序目錄和部署目錄分開(kāi) 。 我們只需要在啟動(dòng)時(shí)指定CATALINA_HOME 與 CATALINA_BASE 參數(shù)即可實(shí)現(xiàn)。

              | 啟動(dòng)參數(shù) | 描述說(shuō)明 | |:----|:----| | JAVA_OPTS | jvm 啟動(dòng)參數(shù) , 設(shè)置內(nèi)存 編碼等 -Xms100m -Xmx200m -Dfile.encoding=UTF-8 | | JAVA_HOME | 指定jdk 目錄,如果未設(shè)置從java 環(huán)境變量當(dāng)中去找。 | | CATALINA_HOME | Tomcat 程序根目錄 | | CATALINA_BASE | 應(yīng)用部署目錄,默認(rèn)為$CATALINA_HOME | | CATALINA_OUT | 應(yīng)用日志輸出目錄:默認(rèn)$CATALINA_BASE/log | | CATALINA_TMPDIR | 應(yīng)用臨時(shí)目錄:默認(rèn):$CATALINA_BASE/temp |

              可以編寫(xiě)一個(gè)腳本 來(lái)實(shí)現(xiàn)自定義配置:

              ln -s /home/wukong/apache-tomcat-8.5.56 apache-tomcat

              更新 啟動(dòng) 腳本

              #!/bin/bash export JAVA_OPTS="-Xms100m -Xmx200m"export CATALINA_HOME=/home/wukong/apache-tomcatexport CATALINA_BASE="`pwd`" case $1 in        start)        $CATALINA_HOME/bin/catalina.sh start                echo start success!!        ;;        stop)                $CATALINA_HOME/bin/catalina.sh stop                echo stop success!!        ;;        restart)        $CATALINA_HOME/bin/catalina.sh stop                echo stop success!!                sleep 3        $CATALINA_HOME/bin/catalina.sh start        echo start success!!        ;;        version)        $CATALINA_HOME/bin/catalina.sh version        ;;        configtest)        $CATALINA_HOME/bin/catalina.sh configtest        ;;        esacexit 0

              docker 啟動(dòng)tomcat

              docker run -id --name=test_tomcat -e JAVA_OPTS="-Xmx128m" -p 8888:8080 -v /usr/local/tuling-project/tomcat-test/webapps:/usr/local/tomcat/webapps -v /usr/local/tuling-project/tomcat-test/logs:/usr/local/tomcat/logs -v /usr/local/tuling-project/tomcat-test/conf:/usr/local/tomcat/conf --privileged=true tomcat:8

              源碼構(gòu)建

              下載地址:https://tomcat.apache.org/download-80.cgi

              配置

              1.解壓源碼 apache-tomcat-8.5.57-src

              2.apache-tomcat-8.5.57-src目錄下添加pom文件

              <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">     <modelVersion>4.0.0</modelVersion>    <groupId>org.apache.tomcat</groupId>    <artifactId>Tomcat8.0</artifactId>    <name>Tomcat8.0</name>    <version>8.0</version>     <build><finalName>Tomcat8.0</finalName><sourceDirectory>java</sourceDirectory><testSourceDirectory>test</testSourceDirectory><resources>    <resource><directory>java</directory>    </resource></resources><testResources>    <testResource><directory>test</directory>    </testResource></testResources><plugins>    <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.3</version><configuration>    <encoding>UTF-8</encoding>    <source>1.8</source>    <target>1.8</target></configuration>    </plugin></plugins>    </build>     <dependencies><dependency>    <groupId>junit</groupId>    <artifactId>junit</artifactId>    <version>4.12</version>    <scope>test</scope></dependency><dependency>    <groupId>org.easymock</groupId>    <artifactId>easymock</artifactId>    <version>3.4</version></dependency><dependency>    <groupId>ant</groupId>    <artifactId>ant</artifactId>    <version>1.7.0</version></dependency><dependency>    <groupId>wsdl4j</groupId>    <artifactId>wsdl4j</artifactId>    <version>1.6.2</version></dependency><dependency>    <groupId>javax.xml</groupId>    <artifactId>jaxrpc</artifactId>    <version>1.1</version></dependency><dependency>    <groupId>org.eclipse.jdt.core.compiler</groupId>    <artifactId>ecj</artifactId>    <version>4.5.1</version></dependency>     </dependencies></project>

              3.在apache-tomcat-8.5.57-src 同級(jí)目錄新建 catalina-home并保證目錄下面文件如下

              注意: 上面文件夾apache-tomcat-8.5.57-src里面有的,就剪切過(guò)來(lái),沒(méi)有的就新建一個(gè), bin conf webapps 應(yīng)該是從apache-tomcat-8.5.57-src剪切過(guò)來(lái)的

              4.idea引入項(xiàng)目

              File->Open 選擇解壓的C:\Users\wukong\Downloads\apache-tomcat-8.5.57-src\apache-tomcat-8.5.57-src

              配置啟動(dòng)

              MainClass: org.apache.catalina.startup.BootstrapVmOptions: -Dcatalina.home=C:\Users\wukong\Downloads\apache-tomcat-8.5.57-src\apache-tomcat-8.5.57-src\catalina-home

              啟動(dòng)報(bào)錯(cuò)

              TestCookieFilter 報(bào)錯(cuò)找不到這個(gè)類(lèi)CookieFilter

              解決方法:

              1. 刪除:TestCookieFilter

              啟動(dòng)后,訪(fǎng)問(wèn)localhost:8080 報(bào)錯(cuò) org.apache.jasper.JasperException: java.lang.NullPointerException

              解決方案:

              org.apache.catalina.startup.Bootstrap 添加代碼塊

              {JasperInitializer initializer =new JasperInitializer(); }

              以上就是Tomcat核心組件及應(yīng)用架構(gòu)詳解的詳細(xì)內(nèi)容,更多關(guān)于Tomcat核心組件及應(yīng)用架構(gòu)的資料請(qǐng)關(guān)注其它相關(guān)文章!

              標(biāo)簽: Tomcat
              主站蜘蛛池模板: 久久久久久久久久久网站 | 操操操操操操 | h成人在线 | 不卡视频一区二区三区 | 91精品久久久久久久久中文字幕 | 亚洲一区二区 | 亚洲一区中文 | 一级欧美在线 | 久久亚洲一区二区三区四区五区高 | 日韩三级视频 | 欧美视频免费看 | 欧美成人精品一区二区 | 91视频8mav| 日韩在线一区二区三区 | 日韩一二 | 午夜成人在线视频 | 成年视频在线观看福利资源 | 在线免费观看黄 | 黄色片免费观看 | 久久爱综合网 | 亚洲人人草| 精品国产一区二区三区久久久 | 日韩一区二区在线观看视频 | 日韩av一级片 | 欧美亚洲一区 | 国产一区二区精品在线观看 | 亚洲福利av | 国产一区二区三区久久久久久久久 | 人人玩人人添人人澡97 | 日日夜夜一区二区 | 国产精品1区2区 | 午夜四虎 | 99免费看 | 日韩在线免费电影 | 精品久久久久久久久久久久久久久久久久久 | 精品成人在线视频 | 国产午夜精品久久久久久久 | 成人深夜在线观看 | 亚洲精品福利在线观看 | 蜜桃视频一区二区 | a久久| 欧洲毛片基地 | 亚洲三级视频 | av在线免费看片 | 亚洲一区二区三区高清 | 天天操天天碰 | 国产精品11 | 久久亚洲综合 | 日韩av在线免费电影 | 欧美在线观看免费观看视频 | 色婷婷综合久久久中文字幕 | 男女视频在线免费观看 | 午夜电影网址 | 99久久婷婷 | 免费av在线 | 一级一级国产片 | 欧美日韩在线免费观看 | 久久久国产精品入口麻豆 | 日日操夜 | 日韩免费av网站 | 香蕉国产精品 | av免费网站在线观看 | 欧美在线观看一区 | 免费观看黄色大片 | 特级淫片裸体免费看 | 国产91九色 | 啊啊啊网站 | 亚洲欧美日韩电影 | 国产日韩精品一区二区 | 亚洲一区欧美一区 | 自拍第一页 | 国产精品伊人影院 | 欧美日韩电影一区二区 | 成年人视频在线免费观看 | jvid美女成人福利视频 | 亚洲精品视频大全 | 日韩欧美国产一区二区 | 精品无人乱码一区二区三区 | 97久久精品人人做人人爽50路 | 一区二区三区在线免费观看 | 91精彩视频| 亚洲一二三区在线观看 | 综合精品 | 国产高潮好爽受不了了夜色 | 国产日韩精品在线 | 国产激情偷乱视频一区二区三区 | 黄色一级免费大片 | 亚洲精品国产精品国自产 | 欧美一区免费 | 免费看毛片的网站 | 中文字幕一区二区三区在线视频 | 欧美日韩一区二区三区在线观看 | 精品乱子伦一区二区三区 | 欧美一区二区 | 日韩精品一二三 | 国产成人精品亚洲日本在线观看 | 日韩在线一区二区 | 国产乱码精品1区2区3区 | 国产真实乱全部视频 | 久草色视频在线观看 | 日本在线视频不卡 | 一级免费在线视频 | 成人一区二区三区 | 一区二区国产精品 | 国产精品免费一区二区三区四区 | 色网站视频 | 欧美国产日韩一区 | 在线视频一二区 | 成人网在线 | 午夜寂寞福利视频 | 成人免费在线播放 | 丁香五月网久久综合 | 99热成人在线 | 婷婷成人免费视频 | 国产自产才c区 | 午夜精品久久久久 | 久草青青 | 久久久欧美 | av在线播放网址 | 成人在线一区二区三区 | 狠狠操网站| 久久久久久久 | 毛片毛片毛片毛片毛片毛片 | 在线看亚洲 | 2019中文字幕视频 | 黄色大片网站在线观看 | 国产视频久久久 | 国产精品18 | 国产干干干 | 亚洲另类视频 | 一区二区三区国产 | 在线亚洲不卡 | 午夜小影院| 日韩欧美国产一区二区三区 | 欧美视频精品在线观看 | 欧美在线国产 | 在线免费观看成年人视频 | 国产精品久久久久久久久久久久久 | 欧美一区2区三区4区公司二百 | 国产 欧美 日韩 一区 | 免费视频爱爱太爽了 | 免费高清av | 美女视频一区 | 日本好好热视频 | 日韩一区中文字幕 | 亚洲一区二区高清视频 | 国产精品久久精品 | 国产精品久久久久久久久 | 九九免费在线观看 | 一区二区三区日韩 | 国产一区二区影院 | 五月婷婷色 | 91在线观看视频 | 成人免费在线观看 | 亚洲欧洲在线观看 | 国产精品污www在线观看 | 国产一区二区视频在线 | 久久国产一区视频 | 午夜免费福利影院 | the蜜臀av入口 | 精品国产依人香蕉在线精品 | 国产精品第一国产精品 | 国产一区二区精品在线观看 | 天天干夜夜爽 | 色视频久久| 精品一区二区久久 | 91麻豆精品国产91久久久资源速度 | 欧美精品一区二区三区中文字幕 | 一区二区三区在线播放 | 中文字幕日韩一区二区 | 波多野结衣一区二区三区高清 | 日本免费一区二区视频 | 一区二区三区在线 | 狠狠干天天干 | 成人黄色片在线观看 | 热久久这里只有精品 | 亚洲精品1区2区 | 成人av在线播放 | 亚洲www永久成人夜色 | 国产伦精品一区二区 | 草草视频网站 | 在线观看国产精品一区 | 欧美一区精品 | 亚洲国产二区 | 欧美精品一区二区三区在线 | 在线一区二区三区视频 | 免费观看的黄色 | 成人精品视频在线观看 | 国产香蕉97碰碰久久人人九色 | 国产中文字幕在线观看 | 国产一区2区 | 免费国产黄| 欧美一级全黄 | 青青草免费在线视频 | 国产成人综合一区二区三区 | 精品国产一级毛片 | 国产91麻豆视频 | 国产一区二区精品在线观看 | 91一区二区三区久久国产乱 | 91精品国产综合久久久久久软件 | 夫妻午夜影院 | 欧美日一区二区 | 日韩精品一区二区三区中文字幕 | 中字一区| www.亚洲 | 毛片免费观看视频 | 夜操| 亚洲最黄网站 | 精品无码久久久久久国产 | 亚洲精品乱码久久久久久按摩观 | 亚洲精品视频在线看 | 91碰碰| 色婷婷av一区二区三区软件 | 一区二区三区精品视频 | 国产精品一区二区三区在线播放 | 午夜一区二区三区在线观看 | 国产精品网站在线观看 | 欧美日韩中文字幕在线 | av免费在线观看网站 | 精品伦理一区二区三区 | 国产午夜精品一区二区 | 欧美福利网址 | 国产精品久热 | 欧美操穴 | 国产精品视频免费观看 | 中文在线a在线 | 成人一区视频 | 日韩影院在线 | 久久影音先锋 | а天堂中文最新一区二区三区 | 一级黄色大片 | 亚洲视频一区二区在线 | 超碰一区| 欧美亚洲另类丝袜综合网动图 | 国产伦精品一区二区三区在线 | 国产1级片 | 久久精品系列 | a级性生活 | 午夜爱爱毛片xxxx视频免费看 | 曰韩毛片 | 白浆在线| 免费视频一区二区 | av7777| 精品国产乱码久久久久久1区2区 | 91精品一区二区三区久久久久久 | 在线亚洲精品 | 亚洲一二三 | 一级大片免费观看 | 国产区日韩区欧美区 | 亚洲网站免费 | 国产精品久久九九 | 午夜精品久久久 | 99pao成人国产永久免费视频 | 99免费在线播放99久久免费 | 日本涩涩网站 | 亚洲 欧美 日韩在线 | 麻豆视频在线 | 日韩视频一 | 国产精品成人国产乱一区 | 久久亚洲一区二区三区四区五区高 | 国产精品一区二区在线观看 | 在线精品国产 | 亚洲精品久久 | 一级黄色大片 | 久久精品小视频 | 欧美一区二区三区免费观看视频 | 亚洲欧洲中文日韩 | v888av成人| 亚洲一级毛片 | 综合网激情 | 国产精品久久久久久久美男 | 免费成人在线观看视频 | av一区二区三区四区 | 91视频观看 | 国产精品毛片一区二区在线看 | 欧美日韩一区二区视频在线观看 | 久久亚洲一区二区三区四区五区高 | 国产高清一级 | 久色视频在线 | 久久九九国产 | 99re视频在线播放 | 久久久精品免费观看 | 麻豆久久久9性大片 | 中字一区 | 狠狠综合久久av一区二区小说 | 草久av| 在线国产一区 | 91精品国产日韩91久久久久久 | 亚洲视频在线免费观看 | 久久精品国产99 | h视频在线免费观看 | 91精品久久久久久 | 国产一区二区久久久 | 91尤物网站网红尤物福利 | 99久久精品免费看国产四区 | 一区视频在线 | 欧美日韩在线精品 | 99pao成人国产永久免费视频 | 免费在线色 | 亚洲精品国品乱码久久久久 | 啊v视频 | 亚洲久悠悠色悠在线播放 | 爱爱网av | 人人干在线 | 亚洲成人精品 | 国产精品1 | 91精品国产欧美一区二区 | 欧美jizzhd精品欧美巨大免费 | 欧美成人激情视频 | 黄色短视频在线观看 | 成人a视频 | 在线欧美视频 | 九九热视频在线 | 国产精品久久久久久久午夜 | 国产成人精品久久久 | 亚洲系列| 亚洲综合大片69999 | 精品久久久久一区二区国产 | 国产精品综合 | 成人免费看黄 | 毛片毛片毛片 | 久久久久女人精品毛片九一韩国 | 青青草视频免费观看 | 一区二区精品在线 | 国产精品欧美一区二区三区 | 亚洲欧美激情精品一区二区 | 亚洲电影一区二区 | 亚洲自拍偷拍欧美 | 日韩成人一区二区 | 超碰在线人人 | 亚洲资源在线 | 久久久精品久久久 | 综合网日韩 | 国产成人精品一区二区 | 一区二区日韩视频 | 日韩在线中文 | 九色91视频 | 亚洲日韩欧美一区二区在线 | jjzz18国产 | 影音在线资源 | 国产毛片毛片 | 精品中文字幕一区二区三区 | 欧美日本高清视频 | 国产精品二区一区二区aⅴ污介绍 | 麻豆freexxxx性91精品 | 日韩成人在线观看 | 国产女人高潮视频在线观看 | 五月天婷婷国产精品 | 国产欧美在线一区二区 | 可以免费看黄的网站 | 人人草人人 | 国产成人免费视频 | 国产成人一区二区 | 日韩av一区二区在线观看 | 久久久精品高清 | 国产精品中文字幕在线观看 | 成人在线精品视频 | 黄色a级| 黄色在线观看网址 | 久久久亚洲一区二区三区 | av免费在线观看网站 | 久久这里只有国产精品 | 日韩精品第一页 | 日韩欧美自拍 | 日本人做爰大片免费观看一老师 | 九九九久久久 | 久久蜜桃精品一区二区三区综合网 | 波多野结衣先锋影音 | 华丽的挑战在线观看 | 中文日韩av | 五月激情综合网 | 成人高清在线观看 | 亚洲成人一区二区三区 | 欧美日韩电影一区 | 精品一区二区三区国产 | 亚洲视频一区在线播放 | 欧美一区二区视频 | 国产伦精品一区二区三毛 | 91国内 | 日韩欧美一区二区三区免费观看 | 日韩欧美在线综合 | 91久久爽久久爽爽久久片 | 伊人久久综合影院 | 欧美激情五月 | av在线免费观看一区二区 | 久久久久久影院 | 亚洲国产精品99久久久久久久久 | 国产精品亚洲视频 | 亚洲激情一区二区 | 国产精品久久 | 99国产精品久久久久久久成人热 | 国产成人在线免费观看视频 | 精品三区| 一级片免费在线 | 91精品国产色综合久久 | av不卡电影在线观看 | 91亚洲国产成人久久精品网站 | 一级毛片免费播放 | 天天澡天天狠天天天做 | 久久成人免费 | 蜜桃视频成人m3u8 | 天堂在线视频 | 欧美精品欧美极品欧美激情 | 国产一区二区av | 天天看天天操 | 国产在视频一区二区三区吞精 | 精品久久久久久国产 | 情五月| 精品久久久网站 | 99亚洲国产 | 精品在线播放 | 一级免费毛片 | 国产高清在线看 | 久久狠狠 | 日本不卡免费新一二三区 | 伊人网一区| 精品黄网 | 亚洲欧美综合精品久久成人 | 日韩在线中出 | 日韩成人av在线 | 美女操av | 亚洲少妇视频 | 天堂av一区| 色婷婷综合久久久中字幕精品久久 | 中文字幕亚洲一区二区三区 | 免费成人在线网站 | 欧美一级二级视频 | 99热国产在线观看 | jizz在亚洲 | 亚洲不卡在线 | 精品久久久久久亚洲精品 | www.国产.com| 国产精品一区二 | 国产精品二区三区 | 成人精品在线 | porn在线视频 | 二区免费视频 | 好看毛片| 日本一二三区视频 | 国产一区二区三区在线看 | 国产精品18久久久久久久久久久久 | 国产精品高清在线观看 | 国产一区二区视频在线 | 91免费视频观看 | 欧美一级视频在线观看 | 国产 日韩 一区 | 二区三区 | 成人精品视频 | 欧美一级日韩片 | 一级黄色毛片免费 | 538在线精品| 狠狠的干| 久久久久久亚洲国产 | 国产一级视频免费观看 | 狠狠色综合久久丁香婷婷 | 欧洲尺码日本国产精品 | 成人av免费在线观看 | 亚洲乱码二区 | 亚洲一区二区三区在线 | 久久黄视频 | 日本阿v视频高清在线中文 中文二区 | 国产精品福利91 | 日韩精品一区二区三区免费观看视频 | 久久视频一区 | 久久久久国产一区二区三区四区 | 在线a视频 | 国产精品久久久久婷婷二区次 | 久久99久久99精品 | 97夜夜操| 亚洲国产欧美91 | 久久这里只有精品首页 | 国产亚洲一区二区三区在线观看 | 亚洲国产免费 | 狠狠色丁香婷婷综合 | 极品久久| 欧美日韩一区二区电影 | 中文字幕一区二区在线观看 | 亚洲精品久久久久久一区二区 | 欧美一区二区三区视频 | 九九热精品免费视频 | 久久综合九色综合欧美狠狠 | 99精品一区二区 | 色约约精品免费看视频 | 日韩免费高清视频 | 国产精品久久久久久吹潮 | 久久99国产精品久久99大师 | 北条麻妃一区二区三区在线 | 天天综合欧美 | 国产精品亚洲一区 | 欧美狠狠操 | 成人精品视频99在线观看免费 | 人人人人澡 | 精品国产91亚洲一区二区三区www | 激情久久久 | 国产精品久久久麻豆 | 久草热8精品视频在线观看 欧美全黄 | 日韩欧美一区二区三区免费观看 | 日韩在线中文字幕 | 国产精品久久久久久久久 | 国产精品久久久久久久午夜 | 日韩欧美不卡 | 天天艹久久 | 91干在线观看 | 亚洲综合区 | 久久精品欧美一区二区三区不卡 | 免费在线一区二区 | 国产xvideos免费视频播放 | 成人亚洲区 | 久草中文在线 | 国产精品毛片无码 | 日本在线观看一区 | 欧美日韩在线免费观看 | 91久久精品一区 | 国产精品婷婷午夜在线观看 | 久久久久久麻豆 | 澳门久久| 岛国在线免费 | 亚洲激情视频 | 国产精品亚洲第一区在线暖暖韩国 | 黄色大片在线 | 国产精品视频在线观看 | 一区二区三区在线观看视频 | 国产色视频网站 | 国产日韩欧美一区二区 | 国产精品极品美女在线观看免费 | 日本少妇bbbb爽爽bbb美 | 中文字幕第二页 | 成人精品一区二区三区 | 国产精品久久国产精品 | 亚洲国产精品成人久久久 | 国产精品大全 | 亚洲欧美中文字幕 | 日本一区二区三区免费观看 | 99精品久久| 日韩三级黄 | 综合网日韩 | 久久这里只有精品首页 | 久久国产精品视频观看 | 9191视频 | 无码日韩精品一区二区免费 | 91电影在线 | 精品免费国产一区二区三区 | 亚洲乱码一区二区 | 国产精品婷婷久久久久 | 日韩中文一区二区三区 | 天天舔日日干 | 性色av一区二区三区 | 精品成人免费一区二区在线播放 | 国产精品久久免费观看spa | 91高清视频 | 毛片入口 | 伊人手机在线视频 | 日本在线视频一区二区 | 黄色毛片av| 亚洲成人精品在线观看 | 欧美五月婷婷 | 成人精品| 亚洲成人免费影院 | 欧美黄色片 | 国产精品久久久久久久一区探花 | 欧美日韩国产一级片 | 国产精品a久久 | 电影91久久久 | 欧美精品一区二区在线观看 | 综合久久99 | 日韩免费观看视频 | 91福利在线播放 | 国产99久久久久久免费看农村 | 在线播放黄色片网站 | 一a级毛片| 日本一区二区电影 | 日本精品久久 | 中文字幕国产区 | 91精品在线播放 | 女人夜夜春高潮爽a∨片传媒 | 久久精美视频 | 亚洲成人免费在线 | 一区二区三区不卡视频 | 国产高清视频在线 | 亚洲成av | 久久久影院 | 狠狠的日| 午夜电影福利 | 欧美日韩一区不卡 | 91亚洲国产成人久久精品网站 | 99小视频| 99视频精品| 久草免费在线视频 | 久久精品亚洲精品国产欧美 | 国产精品久久久久久久午夜 | 精品久久久久久久久久久久久久 | 久久精品亚洲 | 一区二区免费播放 | 国产精品国产成人国产三级 | 欧美午夜一区二区三区 | 一区二区三区视频免费在线观看 | 青娱乐国产精品视频 | 免费福利视频一区二区三区 | 男人的天堂亚洲 | 日韩成人在线观看视频 | 国产成人精品午夜视频' | 91精品啪aⅴ在线观看国产 | 精品国产一区二区三区久久久蜜月 | 亚洲免费在线观看视频 | 夜夜天天 | 天天噜天天干 | 三区在线观看 | www97影院| 在线观看亚洲a | 成人在线免费 | 男女羞羞视频免费在线观看 | 可以免费看黄的网站 | 国产三区在线视频 | 亚洲va中文字幕 | 国产精品久久久久久久久免费 |