黄a在线观看-黄a在线-黄a大片-黄色片在线看-黄色毛片免费-黄色大片网站

您的位置:首頁技術文章
文章詳情頁

Tomcat核心組件及應用架構詳解

瀏覽:230日期:2023-03-19 16:50:57
目錄
  • Web容器是什么?
  • HTTP的本質
    • HTTP請求響應實例
    • Cookie和Session
  • Servlet規范
    • Servlet容器
      • Web應用
        • 擴展機制
          • 一、Tomcat各組件認知
            • 2.Tomcat各組件及關系
          • 二、Tomcatserver.xml配置詳解
            • 三、Tomcat部署腳本編寫

              Web 容器是什么?

              讓我們先來簡單回顧一下 Web 技術的發展歷史,可以幫助你理解 Web 容器的由來。

              早期的 Web 應用主要用于瀏覽新聞等靜態頁面,HTTP 服務器(比如 Apache、Nginx)向瀏覽器返回靜態 HTML,瀏覽器負責解析 HTML,將結果呈現給用戶。

              隨著互聯網的發展,我們已經不滿足于僅僅瀏覽靜態頁面,還希望通過一些交互操作,來獲取動態結果,因此也就需要一些擴展機制能夠讓 HTTP 服務器調用服務端程序。

              于是 Sun 公司推出了 Servlet 技術。你可以把 Servlet 簡單理解為運行在服務端的 Java 小程序,但是 Servlet 沒有 main 方法,不能獨立運行,因此必須把它部署到 Servlet 容器中,由容器來實例化并調用 Servlet。

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

              HTTP 的本質

              HTTP 協議是瀏覽器與服務器之間的數據傳送協議。作為應用層協議,HTTP 是基于 TCP/IP 協議來傳遞數據的(HTML 文件、圖片、查詢結果等),HTTP 協議不涉及數據包(Packet)傳輸,主要規定了客戶端和服務器之間的通信格式。

              假如瀏覽器需要從遠程 HTTP 服務器獲取一個 HTML 文本,在這個過程中,瀏覽器實際上要做兩件事情。

              • 與服務器建立 Socket 連接。
              • 生成請求數據并通過 Socket 發送出去。

              HTTP 請求響應實例

              用戶在登陸頁面輸入用戶名和密碼,點擊登陸后,瀏覽器發出了這樣的 HTTP 請求:

              HTTP 請求數據由三部分組成,分別是請求行、請求報頭、請求正文。當這個 HTTP 請求數據到達 Tomcat 后,Tomcat 會把 HTTP 請求數據字節流解析成一個 Request 對象,這個 Request 對象封裝了 HTTP 所有的請求信息。接著 Tomcat 把這個 Request 對象交給 Web 應用去處理,處理完后得到一個 Response 對象,Tomcat 會把這個 Response 對象轉成 HTTP 格式的響應數據并發送給瀏覽器。

              HTTP 的響應也是由三部分組成,分別是狀態行、響應報頭、報文主體。同樣,我還以極客時間登陸請求的響應為例。

              Cookie 和 Session

              我們知道,HTTP 協議有個特點是無狀態,請求與請求之間是沒有關系的。這樣會出現一個很尷尬的問題:Web 應用不知道你是誰。因此 HTTP 協議需要一種技術讓請求與請求之間建立起聯系,并且服務器需要知道這個請求來自哪個用戶,于是 Cookie 技術出現了。

              Cookie 是 HTTP 報文的一個請求頭,Web 應用可以將用戶的標識信息或者其他一些信息(用戶名等)存儲在 Cookie 中。用戶經過驗證之后,每次 HTTP 請求報文中都包含 Cookie,這樣服務器讀取這個 Cookie 請求頭就知道用戶是誰了。Cookie 本質上就是一份存儲在用戶本地的文件,里面包含了每次請求中都需要傳遞的信息。

              由于 Cookie 以明文的方式存儲在本地,而 Cookie 中往往帶有用戶信息,這樣就造成了非常大的安全隱患。而 Session 的出現解決了這個問題,Session 可以理解為服務器端開辟的存儲空間,里面保存了用戶的狀態,用戶信息以 Session 的形式存儲在服務端。當用戶請求到來時,服務端可以把用戶的請求和用戶的 Session 對應起來。那么 Session 是怎么和請求對應起來的呢?答案是通過 Cookie,瀏覽器在 Cookie 中填充了一個 Session ID 之類的字段用來標識請求。

              具體工作過程是這樣的:服務器在創建 Session 的同時,會為該 Session 生成唯一的 Session ID,當瀏覽器再次發送請求的時候,會將這個 Session ID 帶上,服務器接受到請求之后就會依據 Session ID 找到相應的 Session,找到 Session 后,就可以在 Session 中獲取或者添加內容了。而這些內容只會保存在服務器中,發到客戶端的只有 Session ID,這樣相對安全,也節省了網絡流量,因為不需要在 Cookie 中存儲大量用戶信息。

              那么 Session 在何時何地創建呢?當然還是在服務器端程序運行的過程中創建的,不同語言實現的應用程序有不同的創建 Session 的方法。在 Java 中,是 Web 應用程序在調用 HttpServletRequest 的 getSession 方法時,由 Web 容器(比如 Tomcat)創建的。

              Tomcat 的 Session 管理器提供了多種持久化方案來存儲 Session,通常會采用高性能的存儲方式,比如 Redis,并且通過集群部署的方式,防止單點故障,從而提升高可用。同時,Session 有過期時間,因此 Tomcat 會開啟后臺線程定期的輪詢,如果 Session 過期了就將 Session 失效。

              Servlet規范

              HTTP 服務器怎么知道要調用哪個 Java 類的哪個方法呢。最直接的做法是在 HTTP 服務器代碼里寫一大堆 if else 邏輯判斷:如果是 A 請求就調 X 類的 M1 方法,如果是 B 請求就調 Y 類的 M2 方法。但這樣做明顯有問題,因為 HTTP 服務器的代碼跟業務邏輯耦合在一起了,如果新加一個業務方法還要改 HTTP 服務器的代碼。

              那該怎么解決這個問題呢?我們知道,面向接口編程是解決耦合問題的法寶,于是有一伙人就定義了一個接口,各種業務類都必須實現這個接口,這個接口就叫 Servlet 接口,有時我們也把實現了 Servlet 接口的業務類叫作 Servlet。

              但是這里還有一個問題,對于特定的請求,HTTP 服務器如何知道由哪個 Servlet 來處理呢?Servlet 又是由誰來實例化呢?顯然 HTTP 服務器不適合做這個工作,否則又和業務類耦合了。

              于是,還是那伙人又發明了 Servlet 容器,Servlet 容器用來加載和管理業務類。HTTP 服務器不直接跟業務類打交道,而是把請求交給 Servlet 容器去處理,Servlet 容器會將請求轉發到具體的 Servlet,如果這個 Servlet 還沒創建,就加載并實例化這個 Servlet,然后調用這個 Servlet 的接口方法。因此 Servlet 接口其實是 Servlet 容器跟具體業務類之間的接口。下面我們通過一張圖來加深理解。

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

              Servlet 接口定義了下面五個方法:

              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 方法,具體業務類在這個方法里實現處理邏輯。這個方法有兩個參數:ServletRequest 和 ServletResponse。ServletRequest 用來封裝請求信息,ServletResponse 用來封裝響應信息,因此本質上這兩個類是對通信協議的封裝。

              HTTP 協議中的請求和響應就是對應了 HttpServletRequest 和 HttpServletResponse 這兩個類。你可以通過 HttpServletRequest 來獲取所有請求相關的信息,包括請求路徑、Cookie、HTTP 頭、請求參數等。此外, 我們還可以通過 HttpServletRequest 來創建和獲取 Session。而 HttpServletResponse 是用來封裝 HTTP 響應的。

              你可以看到接口中還有兩個跟生命周期有關的方法 init 和 destroy,這是一個比較貼心的設計,Servlet 容器在加載 Servlet 類的時候會調用 init 方法,在卸載的時候會調用 destroy 方法。我們可能會在 init 方法里初始化一些資源,并在 destroy 方法里釋放這些資源,比如 Spring MVC 中的 DispatcherServlet,就是在 init 方法里創建了自己的 Spring 容器。

              你還會注意到 ServletConfig 這個類,ServletConfig 的作用就是封裝 Servlet 的初始化參數。你可以在web.xml給 Servlet 配置參數,并在程序里通過 getServletConfig 方法拿到這些參數。

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

              Servlet 容器

              當客戶請求某個資源時,HTTP 服務器會用一個 ServletRequest 對象把客戶的請求信息封裝起來,然后調用 Servlet 容器的 service 方法,Servlet 容器拿到請求后,根據請求的 URL 和 Servlet 的映射關系,找到相應的 Servlet,如果 Servlet 還沒有被加載,就用反射機制創建這個 Servlet,并調用 Servlet 的 init 方法來完成初始化,接著調用 Servlet 的 service 方法來處理請求,把 ServletResponse 對象返回給 HTTP 服務器,HTTP 服務器會把響應發送給客戶端

              Web 應用

              Servlet 容器會實例化和調用 Servlet,那 Servlet 是怎么注冊到 Servlet 容器中的呢?一般來說,我們是以 Web 應用程序的方式來部署 Servlet 的,而根據 Servlet 規范,Web 應用程序有一定的目錄結構,在這個目錄下分別放置了 Servlet 的類文件、配置文件以及靜態資源,Servlet 容器通過讀取配置文件,就能找到并加載 Servlet。Web 應用的目錄結構大概是下面這樣的:

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

              Servlet 規范里定義了 ServletContext 這個接口來對應一個 Web 應用。Web 應用部署好后,Servlet 容器在啟動時會加載 Web 應用,并為每個 Web 應用創建唯一的 ServletContext 對象。你可以把 ServletContext 看成是一個全局對象,一個 Web 應用可能有多個 Servlet,這些 Servlet 可以通過全局的 ServletContext 來共享數據,這些數據包括 Web 應用的初始化參數、Web 應用目錄下的文件資源等。由于 ServletContext 持有所有 Servlet 實例,你還可以通過它來實現 Servlet 請求的轉發。

              擴展機制

              引入了 Servlet 規范后,你不需要關心 Socket 網絡通信、不需要關心 HTTP 協議,也不需要關心你的業務類是如何被實例化和調用的,因為這些都被 Servlet 規范標準化了,你只要關心怎么實現的你的業務邏輯。這對于程序員來說是件好事,但也有不方便的一面。所謂規范就是說大家都要遵守,就會千篇一律,但是如果這個規范不能滿足你的業務的個性化需求,就有問題了,因此設計一個規范或者一個中間件,要充分考慮到可擴展性。Servlet 規范提供了兩種擴展機制:Filter 和 Listener

              Filter 是過濾器,這個接口允許你對請求和響應做一些統一的定制化處理,比如你可以根據請求的頻率來限制訪問,或者根據國家地區的不同來修改響應內容。過濾器的工作原理是這樣的:Web 應用部署完成后,Servlet 容器需要實例化 Filter 并把 Filter 鏈接成一個 FilterChain。當請求進來時,獲取第一個 Filter 并調用 doFilter 方法,doFilter 方法負責調用這個 FilterChain 中的下一個 Filter。

              Listener 是監聽器,這是另一種擴展機制。當 Web 應用在 Servlet 容器中運行時,Servlet 容器內部會不斷的發生各種事件,如 Web 應用的啟動和停止、用戶請求到達等。 Servlet 容器提供了一些默認的監聽器來監聽這些事件,當事件發生時,Servlet 容器會負責調用監聽器的方法。當然,你可以定義自己的監聽器去監聽你感興趣的事件,將監聽器配置在web.xml中。比如 Spring 就實現了自己的監聽器,來監聽 ServletContext 的啟動事件,目的是當 Servlet 容器啟動時,創建并初始化全局的 Spring 容器。

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

              /bin:存放 Windows 或 Linux 平臺上啟動和關閉 Tomcat 的腳本文件。/conf:存放 Tomcat 的各種全局配置文件,其中最重要的是server.xml。/lib:存放 Tomcat 以及所有 Web 應用都可以訪問的 JAR 文件。/logs:存放 Tomcat 執行時產生的日志文件。/work:存放 JSP 編譯后產生的 Class 文件。/webapps:Tomcat 的 Web 應用目錄,默認情況下把 Web 應用放在這個目錄下。

              打開 Tomcat 的日志目錄,也就是 Tomcat 安裝目錄下的 logs 目錄。Tomcat 的日志信息分為兩類 :一是運行日志,它主要記錄運行過程中的一些信息,尤其是一些異常錯誤日志信息 ;二是訪問日志,它記錄訪問的時間、IP 地址、訪問的路徑等相關信息。

              • catalina.***.log 主要是記錄 Tomcat 啟動過程的信息,在這個文件可以看到啟動的 JVM 參數以及操作系統等日志信息。
              • catalina.out是 Tomcat 的標準輸出(stdout)和標準錯誤(stderr),這是在 Tomcat 的啟動腳本里指定的,如果沒有修改的話 stdout 和 stderr 會重定向到這里。所以在這個文件里可以看到我們在MyServlet.java程序里打印出來的信息
              • localhost.**.log主要記錄 Web 應用在初始化過程中遇到的未處理的異常,會被 Tomcat 捕獲而輸出這個日志文件。
              • localhost_access_log.**.txt存放訪問 Tomcat 的請求日志,包括 IP 地址以及請求的路徑、時間、請求協議以及狀態碼等信息。
              • manager.***.log/host-manager.***.log存放 Tomcat 自帶的 Manager 項目的日志信息。

              概要:

              1. Tomcat各核心組件認知
              2. server.xml 配置詳解

              一、Tomcat各組件認知

              知識點:

              1. Tomcat架構說明
              2. Tomcat組件及關系詳情介紹
              3. Tomcat啟動參數說明
              4. Tomcat架構說明

              Tomcat是一個基于JAVA的WEB容器,其實現了JAVA EE中的 Servlet 與 jsp 規范,與Nginx apache 服務器不同在于一般用于動態請求處理。在架構設計上采用面向組件的方式設計。即整體功能是通過組件的方式拼裝完成。另外每個組件都可以被替換以保證靈活性。

              2.Tomcat 各組件及關系

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

              二、Tomcat server.xml 配置詳解


              server

              root元素:server 的頂級配置 主要屬性: port:執行關閉命令的端口號 shutdown:關閉命令

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

              service

              服務:將多個connector 與一個Engine組合成一個服務,可以配置多個服務。

              Connector

              連接器:用于接收 指定協議下的連接 并指定給唯一的Engine 進行處理。 主要屬性:

              • protocol 監聽的協議,默認是http/1.1
              • port 指定服務器端要創建的端口號
              • minSpareThreads服務器啟動時創建的處理請求的線程數
              • maxThreads 最大可以創建的處理請求的線程數
              • enableLookups 如果為true,則可以通過調用request.getRemoteHost()進行DNS查詢來得到遠程客戶端的實際主機名,若為false則不進行DNS查詢,而是返回其ip地址
              • redirectPort 指定服務器正在處理http請求時收到了一個SSL傳輸請求后重定向的端口號
              • acceptCount 指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理
              • connectionTimeout 指定超時的時間數(以毫秒為單位)
              • SSLEnabled 是否開啟 sll 驗證,在Https 訪問時需要開啟。生成證書: keytool -genkey -v -alias testKey -keyalg RSA -validity 3650 -keystore D:\test.keystore
              • [ ] 演示配置多個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

              引擎:用于處理連接的執行器,默認的引擎是catalina。一個service 中只能配置一個Engine。 主要屬性:name 引擎名稱 defaultHost 默認host

              Host

              虛擬機:基于域名匹配至指定虛擬機。類似于nginx 當中的server,默認的虛擬機是localhost. 主要屬性:

              演示配置多個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

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

              演示配置多個Context

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

              Valve 閥門:可以理解成

              的過濾器,具體配置要基于具體的Valve 接口的子類。以下即為一個訪問日志的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 部署腳本編寫

              Tomcat啟動參數說明

              我們平時啟動Tomcat過程是怎么樣的?

              1. 復制WAR包至Tomcat webapp 目錄。
              2. 執行starut.bat 腳本啟動。
              3. 啟動過程中war 包會被自動解壓裝載。

              但是我們在Eclipse 或idea 中啟動WEB項目的時候 也是把War包復雜至webapps 目錄解壓嗎?顯然不是,其真正做法是在Tomcat程序文件之外創建了一個部署目錄,在一般生產環境中也是這么做的 即:Tomcat 程序目錄和部署目錄分開 。 我們只需要在啟動時指定CATALINA_HOME 與 CATALINA_BASE 參數即可實現。

              | 啟動參數 | 描述說明 | |:----|:----| | JAVA_OPTS | jvm 啟動參數 , 設置內存 編碼等 -Xms100m -Xmx200m -Dfile.encoding=UTF-8 | | JAVA_HOME | 指定jdk 目錄,如果未設置從java 環境變量當中去找。 | | CATALINA_HOME | Tomcat 程序根目錄 | | CATALINA_BASE | 應用部署目錄,默認為$CATALINA_HOME | | CATALINA_OUT | 應用日志輸出目錄:默認$CATALINA_BASE/log | | CATALINA_TMPDIR | 應用臨時目錄:默認:$CATALINA_BASE/temp |

              可以編寫一個腳本 來實現自定義配置:

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

              更新 啟動 腳本

              #!/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 啟動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

              源碼構建

              下載地址: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 同級目錄新建 catalina-home并保證目錄下面文件如下

              注意: 上面文件夾apache-tomcat-8.5.57-src里面有的,就剪切過來,沒有的就新建一個, bin conf webapps 應該是從apache-tomcat-8.5.57-src剪切過來的

              4.idea引入項目

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

              配置啟動

              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

              啟動報錯

              TestCookieFilter 報錯找不到這個類CookieFilter

              解決方法:

              1. 刪除:TestCookieFilter

              啟動后,訪問localhost:8080 報錯 org.apache.jasper.JasperException: java.lang.NullPointerException

              解決方案:

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

              {JasperInitializer initializer =new JasperInitializer(); }

              以上就是Tomcat核心組件及應用架構詳解的詳細內容,更多關于Tomcat核心組件及應用架構的資料請關注其它相關文章!

              標簽: Tomcat
              主站蜘蛛池模板: 午夜激情网址 | 国产suv精品一区二人妻 | 女同舌吻互慰一区二区 | 久一蜜臀av亚洲一区 | 偷拍中国夫妇高潮视频 | 欧美俄罗斯40老熟妇 | 女人解开奶罩喂男人吃奶 | 欧美性xxxx在线播放 | 久久99精品久久久久久9鸭 | 在线看日韩 | 久久久久久久久久久中文字幕 | 四虎在线免费观看视频 | 午夜福利一区二区三区在线观看 | 日产mv免费观看 | 伊人性伊人情综合网 | 在线国精产品 | 国产美女激情 | 国产亚洲欧美日韩在线一区二区三区 | 在线观看欧美日韩 | 亚洲国产成人一区二区在线 | 亚洲18禁私人影院 | 日日躁夜夜躁狠狠躁 | 中文字幕超清在线免费观看 | 最新中文字幕免费看 | a级特黄视频 | 性xxxxxxxxx18欧美 | 欧美入口 | 少妇裸交aa大片 | 亚洲元码| 91久久国产婷婷一区二区 | 日韩在线播放av | 永久天堂网 av手机版 | 野花社区视频www官网 | 亚洲精品乱码久久久久久9色 | 国产精品无码制服丝袜 | 霍思燕三级| 粉嫩小箩莉奶水四溅在线观看 | 欧美大黑bbbbbbbbb在线 | 男人天堂黄色 | 日批视频在线看 | 日本在线一区 | 午夜乱蜜桃久久久乱 | 亚洲精品国产品国语在线观看 | 午夜视频在线瓜伦 | 亚洲人成图片小说网站 | 色综合久久久久 | 狠狠躁18三区二区一区 | 国产一级80毛片古装片 | 成人夜视频 | 免费观看又色又爽又黄动态 | 性欧美极品 | 久久天天躁狠狠躁亚洲综合公司 | 七月婷婷综合 | 国产a∨精品一区二区三区不卡 | а√在线中文网新版地址在线 | 恶虐女帝安卓汉化版最新版本 | 久久久在线观看 | 欧美毛片免费看 | 欧美日韩免费 | 嫩草视频网站 | 无码国内精品久久人妻 | 欧美在线 | 亚洲 | 日韩毛片在线视频x | 亚洲成a人片777777张柏芝 | 亚洲女人毛茸茸 | 88xx永久免费看大片 | 九一视频在线 | 国产人妻精品一区二区三区 | yy111111少妇无码理论片 | 午夜伦理一区 | 欧美一级性生活视频 | 桃色激情网 | 乌克兰t做爰xxxⅹ性 | 久久久久久久久久久小说 | 亚洲国产成人丁香五月激情 | 97影院在线午夜 | 51自拍视频在线观看 | 国产精品一区二区三区在线看 | 噼里啪啦国语版在线观看 | 日韩不卡| 疯狂做爰高潮videossex | 黄色一二三区 | 日韩亚洲天堂 | 欧美剧场| 亚洲色图在线观看视频 | 欧美精品亚洲 | 日韩蜜桃视频 | 国产精品久久久久一区二区 | 国产精品99久久久久久www | 久久精品无码一区二区日韩av | 欧美日韩国产网站 | 又黄又爽又色的网站 | 中文字幕中文有码在线 | 777午夜福利理伦电影网 | www日本在线播放 | 老湿午夜免费yin22xyz | 国产精品少妇 | 久草在线资源网 | 亚洲欧美日韩精品 | 深夜免费福利 | 欧美国产精品一区二区三区 | 久久久精品中文字幕 | 综合色天天| 欧美爱爱免费视频 | 尼姑福利影院 | 国产一区免费看 | 全球av在线 | 亚洲精品伦理 | 中文字幕一精品亚洲无线一区 | 国产精品成人国产乱 | 午夜av在线 | 国产人交视频xxxcom | 性猛交ⅹxxx富婆video | 天天色天天射天天干 | 欧美日韩亚洲国产 | 中国丰满人妻videoshd | 免费毛片手机在线播放 | 国产精品久久一区二区三区动漫 | 亚洲大色| 欧美一区欧美二区 | 日韩和欧美一区二区 | 中文字幕精品久久久乱码乱码 | 亚洲成在人网站无码天堂 | www久久爱69com| 色伊人| 免费成人av在线 | www蜜臀| 色爽av| 日韩成人短视频 | 青草国产精品久久久久久 | 成人黄色片网站 | 精品视频在线观看 | 黑白配在线观看免费观看 | 五月婷婷综合久久 | 国产日韩久久久久69影院 | 单亲与子性伦刺激对白视频 | 国产产无码乱码精品久久鸭 | 波多野一区二区 | 国产一区二区丝袜 | 九九国产精品无码免费视频 | 波多野结衣中文字幕一区二区三区 | 丝袜老师办公室里做好紧好爽 | 免费播放毛片 | 日韩精品视频中文字幕 | 玖玖在线 | 亚洲你我色 | 国产女人乱人伦精品一区二区 | 超碰在线cao| 男人猛躁进女人免费播放 | 国产小精品 | 日本少妇做爰大尺裸体网站 | 国产大学生呻吟对白精彩在线 | 亚洲国产av一区二区三区 | 日韩亚洲国产欧美 | 国产3页 | 色婷婷噜噜久久国产精品12p | 国产成人av一区二区三区不卡 | 国内精品卡一卡二卡三 | 久久久久久久精 | 一性一交一口添一摸视频 | 美女视频黄a视频免费全程软件 | 日本少妇高潮喷水xxxxxxx | 中文字幕亚洲中文字幕无码码 | 精品亚洲一区二区三区在线观看 | 人与禽性视频77777 | 国产999精品成人网站 | 亚洲奶水xxxx哺乳期tv | 精品国产一区二区在线观看 | 免费人成再在线观看网站 | 早起邻居人妻奶罩太松av | 中文字幕一区二区三区在线播放 | 国产毛片毛片毛片毛片毛片 | 国产偷国产偷av亚洲清高 | 精品一区二区三区免费毛片 | 亚洲自拍偷拍精品 | 亚洲国产精品一区二区成人片国内 | 九七影院在线观看免费观看电视 | 天堂√在线 | 天天噜噜噜在线视频 | 国产成人午夜高潮毛片 | 超碰成人97 | 精品国产一区二区三区久久狼黑人 | 国产精品一区二区香蕉 | 国产精品久久久久久久久久iiiii | 欧美国产亚洲日韩在线二区 | 日本高清在线播放 | 欧美人与动性行为视频 | 奶水旺盛的女人伦理 | 超碰pron| 中文字幕无码免费久久99 | 成人免费视屏 | 三级在线网站 | 女人的黄 色视频 | 激情偷乱人伦小说视频在线 | 中国精品久久久 | 亚洲欧美综合区丁香五月小说 | 中文字幕日韩高清 | 午夜性刺激在线视频免费 | 亚洲国产精品久久久久久6q | 欧美又大又硬又粗bbbbb | 国产午夜精品久久久久久免费视 | 亚洲国产精品成人午夜在线观看 | 久久久久久久久久一区二区三区 | 日韩毛片免费观看 | 欧美性受黑人性爽 | 国产偷亚洲偷欧美偷精品 | 中日韩在线 | 少妇高潮毛片免费看 | ass亚洲日本嫩体私拍ass | 久久久久久久蜜桃 | 久久精品4 | 欧美精品亚洲精品日韩传电影 | 亚洲综合成人av | 青草福利在线 | 丝袜 亚洲 欧美 日韩 综合 | 夫妻性生活a级片 | 四色永久网站在线观看 | 7m精品福利视频导航 | 久久久久久免费观看 | 就去色av| 18禁无遮挡免费视频网站 | 婷婷色在线播放 | √天堂资源在线中文8在线最新版 | 久久av一区二区三区亚洲 | 亚洲福利网址 | 欧洲视频在线观看 | 凹凸日日摸日日碰夜夜 | 99久久精品国产片果冻的功能特点 | 成人做爰www免费看视频网战 | 99精品久久久久久久免费看蜜月 | 午夜啪啪网站 | 日本丰满熟妇乱子伦 | 全国最大成人网 | 欧美一级二级在线观看 | a级黄色毛片三个搞一 | 一级黄色视屏 | 成人在线视频免费播放 | 日本三级排行榜 | 优月まりな乳狂在线观看 | 国产乱来视频 | 老头老夫妇自拍性tv | 天堂av成人| 蜜臀av午夜一区二区三区 | 国产97色在线 | 中国 | 国产欧美日韩 | 天堂va在线观看 | 国产精品精品久久久久久甜蜜软件 | 中文字幕大香视频蕉免费 | 亚洲精品无码av中文字幕电影网站 | 亚洲操图 | 亚洲最大福利网 | 久久国产精品波多野结衣av | 久久久久久久国产精品美女 | 久久综合五月丁香六月丁香 | 九九热这里有精品 | 一区二区三区在线 | 欧洲 | 免费一级做a爰片久久毛片潮 | 啦啦啦www在线观看免费视频 | 暖暖在线日本免费高清最新版 | 99久久国语露脸精品国产 | 男女啪啪免费 | 97超碰人人爱 | 日韩国产区 | jizz亚洲女人高潮大叫 | 亚洲欧洲中文字幕 | 亚洲夜夜性无码 | 精品无码日韩国产不卡av | 主播大秀一区二区三区 | 国产a毛片| 一区二区三区欧美在线观看 | 国产精品无码免费播放 | 亚洲精品女人久久久 | 国产亚洲tv在线观看 | 亚洲激情啪啪 | 毛片日本 | 亚洲精品久久久久玩吗 | 国产 国语对白 露脸 | 99久久精品日本一区二区免费 | 嫩草影院在线视频 | 日韩中文字幕观看 | 中文亚洲欧美日韩无线码 | 在线免费av片 | 每日更新在线观看av | 青青草国产在线视频 | 亚洲区自拍 | 二区三区在线 | 嫩草社区 | 天海翼一区二区三区高清在线观看 | 精品国产成人av在线免 | 日本激烈吮乳吸乳视频 | 欧美一区二区二区 | 日本美女a级片 | 男女无套免费视频网站动漫 | 丝袜美腿中文字幕 | 秋霞影院午夜丰满少妇在线视频 | 2018天天躁夜夜躁 | 亚洲中文字幕久久无码精品 | 黄色片免费在线 | 欧美另类视频在线观看 | 国产精品有码 | 亚洲性一区 | 真多人做人爱视频高清免费 | 岛国精品在线观看 | 欧美乱淫视频 | 亚洲国产成人精品片在线观看 | 欧美成人家庭影院 | 色老99久久九九爱精品 | 日韩a√ | 亚洲成av人片香蕉片 | 国模裸体无码xxxx视频 | 日本大尺度床戏揉捏胸 | 奇米影视亚洲狠狠色 | 亚洲爱色 | 欧美在线a | 欧美xxxx非洲 | 精品久久久久久亚洲中文字幕 | 99国产精品久久久久久久久久久 | 黄色大片a级 | 国产交换配乱淫视频a | 九九视频网站 | 欧美在线看| 自拍偷拍第八页 | 国产一级生活片 | 日韩精品无码一区二区三区av | 一区二区三国产 | 久草在线资源福利 | 秋霞特色aa大片 | 美国人性欧美xxxx | 亚洲人成伊人成综合网久久久 | 在线麻豆 | 欧美日韩色另类综合 | 亚洲精品无码永久在线观看你懂的 | 日本加勒比中文字幕 | 亚洲欧美色图 | 翘臀后进少妇大白嫩屁股 | 最新精品国偷自产在线下载 | 91免费影片 | 亚洲国产精品美女 | 久久av影视 | 霍思燕三级 | 无码人妻久久一区二区三区蜜桃 | 狠狠亚洲超碰狼人久久 | 亚洲美女屁股眼交3 | 中文字幕日韩精品亚洲一区小树林 | 亚洲国产精品久久一线不卡 | 久久这里都是精品 | 亚洲日韩精品欧美一区二区一 | av中文字幕在线播放 | 亚洲国产成人久久综合电影 | 国产日本欧美一区二区 | 国产特黄aaa大片免费观看 | 国产精品日本一区二区在线播放 | 国产精品一区二区三区四 | 中文天堂在线观看 | 久久精品国产亚洲a∨蜜臀 久久精品国产亚洲沈樵 | 国产精品一卡二卡三卡 | 日日操网| 国产日产精品一区二区三区四区的观看方式 | 美女黄色免费网站 | 九九热只有精品 | 操穴影院| 91久久嫩草影院一区二区 | 亚洲欧美日韩国产精品一区午夜 | 精品欧美激情精品一区 | 免费一级淫片日本高清视频一 | 我要色综合网 | 欧美黑人孕妇孕交 | 成人香蕉视频 | 久久久999| 人妻少妇精品视频一区二区三区 | 久久久久性 | 国产香蕉av | 日韩一区二区三区四区五区六区 | 一本久道久久 | 日本视频一区二区 | 亚洲一区二区三区国产 | 性av在线| 国产系列在线观看 | 无码国产乱人伦偷精品视频 | 国产男女精品 | 国产精品欧美日韩 | 97精品久久久午夜一区二区三区 | 国产伦精品一区二区三区妓女下载 | 丁香五精品蜜臀久久久久99网站 | 久久久久久久中文字幕 | 成人做爰69片免费 | 中文字幕第一页永久有效 | 久久视频在线 | 国产成人精品在线观看 | 成人重囗味sm | 女娃videosex娇小 | 红桃视频成人传媒 | 91麻豆蜜桃一区二区三区 | 国产甜淫av片免费观看 | 亚洲视频免费在线观看 | 欧美成人性色 | 六月婷婷久香在线视频 | 天天综合网天天综合 | 国产成人亚洲综合 | 国产suv精品一区二区 | 国产av无码专区亚洲精品 | 五月综合色| 提莫影院av毛片入口 | 岛国av免费在线观看 | 曰本无码人妻丰满熟妇5g影院 | 暴力强奷在线播放无码 | 在线成人国产 | 中文字幕一级二级三级 | 国产乱色国产精品播放视频 | 最黄一级片 | 激情久久婷婷 | 一区二区免费在线播放 | 亚洲最大毛片 | 国产传媒视频在线 | 欧美成人午夜77777 | 农村妇女毛片精品久久久 | 亚洲熟妇无码八av在线播放 | 久久精品国产99国产精品 | 懂色一区二区三区久久久 | а天堂中文地址在线 | 欧美日韩中文字幕一区 | 亚洲激情网站 | 九九九九九伊人 | 国产69精品久久久久久野外 | 亚洲精品久久久久国产 | 国产极品jizzhd欧美 | 在线播放av片 | 北条麻妃一区二区三区在线 | 天堂在线中文资源 | 偷偷在线观看免费高清av | 伊人综合影院 | 成人影院yy111111在线观看 | 国产成人精品亚洲线观看 | 国产中文区4幕区2021 | 国产午夜手机精彩视频 | 午夜av在线播放 | 亚洲色啦啦狠狠网站 | 在线视频成人 | 99久久婷婷国产综合精品青牛牛 | 国产成人无码综合亚洲日韩 | 337p日本欧洲亚洲大胆精蜜臀 | 久久久看片| 国产一级黄色影片 | 日本特黄特色a大片免费高清观看视频 | 毛片免费视频观看 | 午夜视频一区 | 2级黄色片| aaaaa一级片| 偷拍自中文字av在线 | 午夜精品国产精品大乳美女 | 日韩在线一区二区三区 | 国产特级毛片aaaaaaa高清 | av美女在线观看 | 欧美人和黑人牲交网站上线 | 国产喷水福利在线视频 | 免费国产羞羞网站视频 | 999久久久无码国产精品 | 精品国产一区二区三区四区 | 中文字幕精品久久久乱码乱码 | 中文字幕一区二区三区久久 | 99久久久精品免费观看国产 | 国内精品偷拍视频 | 色综合天天综合网天天狠天天 | 蜜臀av88 | 一级黄色毛片子 | 亚洲2022国产成人精品无码区 | 操欧美老逼 | 欧美日韩中文字幕视频 | √天堂资源在线中文8在线最新版 | 黄色网页在线免费观看 | 欧美日韩综合在线观看 | 狠狠久久精品中文字幕无码 | www一起操 | 69产性猛交xxxx乱大交 | 亚洲男人在线天堂 | 伊人久久综合 | 日本黄色片段 | 日韩欧美视频在线 | 欧美精品一二 | 青青国产精品 | 国产免费高清av | 最新免费av | 国产乱人伦av麻豆网 | 亚洲久久影院 | 免费一级片网站 | 性乌克兰xxxx极品 | 91国内在线 | 日韩精品在线第一页 | 亚洲国产成人精品女 | 91性高潮久久久久久久 | 日韩 欧美 动漫 国产 制服 | 少妇性生活视频 | 国产成年人视频网站 | 中文字幕二区三区 | 波多野结衣久久精品 | 亚洲熟女综合色一区二区三区 | 国产日韩久久久 | 成人免费小视频 | 国产精品综合av一区二区国产馆 | 午夜爱爱毛片xxxx视频免费看 | 一区二区传媒有限公司 | 久草在线视频福利资源站 | 中文在线а√在线8 | 国产a√精品区二区三区四区 | 国产精品日韩在线 | 诱惑の诱惑筱田优在线播放 | 国产精品初高中害羞小美女文 | 一本大道东京热无码aⅴ | 午夜国产片 | 51精产品一区一区三区 | 色午夜一av男人的天堂 | 午夜性生活视频 | 亚洲精品色图 | 国内精品91少妇在线播放 | 奇米精品视频一区二区三区 | 久久777国产线看观看精品 | 国产清纯白嫩初高中在线观看性色 | 奇米av在线 | 越南性xxxx精品hd | 伊人久艹 | 青青草偷拍视频 | 免费看片啪啪tv | 欧美三级在线视频 | 少妇高潮惨叫久久久久电影69 | 国产熟人av一二三区 | 无码国产69精品久久久久同性 | 久久久久成人网 | 人妻无码中文字幕免费视频蜜桃 | 第四色激情 | 欧美成人一区二区三区四区 | 国产精品自在在线午夜 | www.欧美色| www久久爱白液流出h | 日韩小视频网站 | 久久国产精品波多野结衣 | 国产美女视频免费观看的软件 | 夜夜高潮次次欢爽av女 | 嫩模一区 | 免费黄网站在线 | 中文字幕22页 | 免费a网| 性做久久久久久久久 | 国产精品久久久久久av | 免费中文视频 | 国产成人午夜福利在线播放 | 日本疯狂爆乳xxxx | 亚洲国产精品国自产拍av | 加勒比色综合久久久久久久久 | 欧美色图偷窥自拍 | 黑人狂躁中国少妇and | 久久精品噜噜噜成人av农村 | 青青草小视频 | 成熟交bgmbgmbgm在线 | 国产精品欧美大片 | 国产免费一区二区三区在线观看 | 91av视频 | 蜜臀久久99精品久久久久久 | 成人h视频在线观看 | 精品少妇爆乳无码av无码专区 | 欧美亚洲日韩国产人成在线播放 | 国产成年无码久久久久下载 | www.激情| 免费看黄色一级片 | 欧美黑人粗大xxxxbbbb | 免费观看激色视频网站 | 人妻少妇一区二区三区 | 一 级 黄 色 片免费网站 | а√天堂中文在线资源8 | 网站色| 国产毛片儿 | 少妇富婆一区二区三区夜夜 | 青青草福利 | 五月婷婷六月情 | 黄色一级淫片 | www.天堂av.com | 亚洲 欧美 激情 小说 另类 | 亚洲美女毛片 | 免费在线观看a级片 | www色涩涩com网站 | 亚洲视频一区在线 | 国产最新毛片 | 各处沟厕大尺度偷拍女厕嘘嘘 | 含羞草传媒mv免费观看视频 | 亚洲美女视频网站 | 偷拍盗摄66av99 | 久久成人精品视频 | 国产精品自产拍在线观看 | 岛国精品资源网站 | 九九精品免费视频 | 激情爆乳一区二区三区 | 欧美黄色小说 | 欧美不卡视频 | 亚洲高清无吗 | 人人爽人人爽人人片av亚洲 | 欧美 日韩 国产 成人 在线观看 | 91久久嫩草影院一区二区 | 91精品国产综合久久久蜜臀图片 | 亚洲欧美中文字幕在线一区 | 99精品国产成人一区二区 | 中国丰满猛少妇xxxx | 久久精品视频在线免费观看 | 丰满白嫩大屁股ass 久久精品无码一区二区三区免费 | 美女屁股眼视频免费 | 538在线精品视频 | 日韩另类av| 国产女人被狂躁到高潮小说 | 欧美久久99| 国产精品丝袜高跟鞋 | 国产精欧美一区二区三区久久 | 国产精品女人精品久久久天天 | 亚洲国产精品无码久久久 | 免费a级毛片出奶水 | 亚洲免费观看在线视频 | 中文字幕一区二区在线视频 | xx久久 |