天天看點

Tomcat安裝部署Tomcat安裝部署Tomcat簡介Tomcat核心元件Tomcat處理請求的過程

Tomcat安裝部署

文章目錄

  • Tomcat安裝部署
  • Tomcat簡介
  • Tomcat核心元件
  • Tomcat處理請求的過程
    • 請求過程詳細解釋
    • Tomcat部署步驟
    • Tomcat配置檔案參數優化

Tomcat簡介

免費的、開放源代碼的Web應用伺服器
Apache軟體基金會( Apache Software Foundation)Jakarta項目中的一個核心項目
由 Apache、Sun和一些公司及個人共同開發而成
深受Java愛好者的喜愛,并得到部分軟體開發商的認可
是目前比較流行的Web應用伺服器
           

Tomcat核心元件

Tomcat安裝部署Tomcat安裝部署Tomcat簡介Tomcat核心元件Tomcat處理請求的過程
JSP (全稱JavaServer Pages)是由Sun Microsystems公司主導建立的一-種動态網頁技術标準。JSP部署于網絡伺服器上,可以響應用戶端發送的請求,并根據請求内容動态地生成HTML、XML或其他格式文檔的Web網頁,然後傳回給請求者。
JSP技術以Java語言作為腳本語言,為使用者的HTTP請求提供服務,并能與伺服器上的其它Java程式共同處理複雜的業務需求。

Servlet (Server Applet)是Java Servlet的簡稱,稱為小服務程式或服務連接配接器,用Java編寫的伺服器端程式, 具有獨立于平台和協定的特性,主要功能在于互動式地浏覽和生成資料,生成動态Web内容。
           

Tomcat處理請求的過程

請求過程基本解釋

Tomcat安裝部署Tomcat安裝部署Tomcat簡介Tomcat核心元件Tomcat處理請求的過程
connector:連接配接器

一個Connector元件将在某個指定的端口上偵聽客戶請求,接收浏覽器發過來的tcp連接配接請求,建立一個Request和一個Response對象分别用于和其你去端交換資料,然後會産生一個線程來處理這個請求并把産生的Request和Response對象傳給Engine,從Engine中獲得響應并傳回給用戶端。 Tomcat有兩個經典的Connector,一個直接偵聽來自浏覽器的HTTP請求,另外一個偵聽來自其他的WebServer的請求。Cotote HTTP/1.1 Connector在端口8080處偵聽來自客戶浏覽器的HTTP請求,Coyote JK2 Connector在端口8009處偵聽其他WebServer的Servlet/JSP請求。 Connector 最重要的功能就是接收連接配接請求然後配置設定線程讓 Container來處理這個請求,是以這必然是多線程的,多線程的處理是 Connector 設計的核心。

container:

Container是容器的父接口,該容器的設計用的是典型的責任鍊的設計模式,它由四個自容器元件構成,分别是Engine、Host、Context、Wrapper。這四個元件是負責關系,存在包含關系。通常一個Servlet class對應一個Wrapper,如果有多個Servlet則定義多個Wrapper,如果有多個Wrapper就要定義一個更高的Container,如Context。 Context定義在父容器 Host 中,其中Host 不是必須的,但是要運作 war 程式,就必須要 Host,因為 war 中必有 web.xml 檔案,這個檔案的解析就需要 Host 了,如果要有多個 Host 就要定義一個 top 容器 Engine 了。而 Engine 沒有父容器了,一個 Engine 代表一個完整的 Servlet 引擎。

engine:引擎

Engine 容器比較簡單,它隻定義了一些基本的關聯關系 Host 容器

host:虛拟主機

Host 是 Engine 的字容器,一個 Host 在 Engine 中代表一個虛拟主機,這個虛拟主機的作用就是運作多個應用,它負責安裝和展開這些應用,并且辨別這個應用以便能夠區分它們。它的子容器通常是 Context,它除了關聯子容器外,還有就是儲存一個主機應該有的資訊

context:JSP前段頁面

Context 代表 Servlet 的 Context,它具備了 Servlet 運作的基本環境,理論上隻要有 Context 就能運作 Servlet 了。簡單的 Tomcat 可以沒有 Engine 和 Host。Context 最重要的功能就是管理它裡面的 Servlet 執行個體,Servlet 執行個體在 Context 中是以 Wrapper 出現的,還有一點就是 Context 如何才能找到正确的 Servlet 來執行它呢? Tomcat5 以前是通過一個 Mapper 類來管理的,Tomcat5 以後這個功能被移到了 request 中,在前面的時序圖中就可以發現擷取子容器都是通過 request 來配置設定的

servlet:處理代碼
           

請求過程詳細解釋

1.使用者在浏覽器中輸入網址localhost:8080/test/index.jsp,請求被發送到本機端口8080,被在那裡監聽的Coyote HTTP/1.1 Connector獲得;

2.Connector把該請求交給它所在的Service的Engine(Container)來處理,并等待Engine的回應;

3.Engine獲得請求localhost/test/index.jsp,比對所有的虛拟主機Host;

4.Engine比對到名為localhost的Host(即使比對不到也把請求交給該Host處理,因為該Host被定義為該Engine的預設主機),名為localhost的Host獲得請求/test/index.jsp,比對它所擁有的所有Context。Host比對到路徑為/test的Context(如果比對不到就把該請求交給路徑名為“ ”的Context去處理);

5.path=“/test”的Context獲得請求/index.jsp,在它的mapping table中尋找出對應的Servlet。Context比對到URL Pattern為*.jsp的Servlet,對應于JspServlet類;

6.構造HttpServletRequest對象和HttpServletResponse對象,作為參數調用JspServlet的doGet()或doPost(),執行業務邏輯、資料存儲等;

7.Context把執行完之後的HttpServletResponse對象傳回給Host;

8.Host把HttpServletResponse對象傳回給Engine;

9.Engine把HttpServletResponse對象傳回Connector;

10.Connector把HttpServletResponse對象傳回給客戶Browser
           

Tomcat部署步驟

Tomcat安裝部署Tomcat安裝部署Tomcat簡介Tomcat核心元件Tomcat處理請求的過程

JDK

JDK是Java語言的軟體工具開發包

JDK時Tomcat運作的必要環境

[[email protected] ~]# iptables -F
[[email protected] ~]# setenforce 0
[[email protected] ~]# java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
[[email protected] ~]# cd /opt
[[email protected] opt]# mkdir tomcat
[[email protected] opt]# cd tomcat/
[[email protected] tomcat]# ls
apache-tomcat-9.0.16.tar.gz  jdk-8u201-linux-x64.rpm
[[email protected] tomcat]# rpm -ivh jdk-8u201-linux-x64.rpm 
[[email protected] tomcat]# tar zvxf apache-tomcat-9.0.16.tar.gz 
[[email protected] tomcat]# cd /usr/java/jdk1.8.0_201-amd64/
[[email protected] jdk1.8.0_201-amd64]# pwd
/usr/java/jdk1.8.0_201-amd64
[[email protected] jdk1.8.0_201-amd64]# vim /etc/profile
 77 export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
 78 export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
 79 export PATH=$JAVA_HOME/bin:$PATH

[[email protected] jdk1.8.0_201-amd64]# source /etc/profile
[[email protected] jdk1.8.0_201-amd64]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
[[email protected] jdk1.8.0_201-amd64]# cd /opt/tomcat/
           
[[email protected] tomcat]# mv apache-tomcat-9.0.16/ /usr/local/tomcat
[[email protected] tomcat]# cd /usr/local/tomcat/
[[email protected] tomcat]# cd bin/
[[email protected] bin]# ls
bootstrap.jar       commons-daemon.jar            digest.sh         shutdown.sh           tool-wrapper.sh
catalina.bat        commons-daemon-native.tar.gz  makebase.bat      startup.bat           version.bat
catalina.sh         configtest.bat                makebase.sh       startup.sh            version.sh
catalina-tasks.xml  configtest.sh                 setclasspath.bat  tomcat-juli.jar
ciphers.bat         daemon.sh                     setclasspath.sh   tomcat-native.tar.gz
ciphers.sh          digest.bat                    shutdown.bat      tool-wrapper.bat

[[email protected] bin]# ln -s /usr/local/tomcat/bin/startup.sh /usr/bin/
[[email protected] bin]# ln -s /usr/local/tomcat/bin/shutdown.sh /usr/bin/
[[email protected] bin]# ./startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[[email protected] bin]# netstat -ntap | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      76190/java  
           
Tomcat安裝部署Tomcat安裝部署Tomcat簡介Tomcat核心元件Tomcat處理請求的過程

Tomcat配置檔案參數優化

參數詳解

maxThreads:Tomcat 使用線程來處理接收的每個請求,這個值表示 Tomcat 可建立的最大的線程數,預設值是 200。

minSpareThreads:最小空閑線程數,Tomcat 啟動時的初始化的線程數,表示即使沒有人使用也開這麼多空線程等待,預設值是 10。

maxSpareThreads:最大備用線程數,一旦建立的線程超過這個值,Tomcat 就會關閉不再需要的 socket 線程。預設值是-1(無限制)。一般不需要指定。

URIEncoding:指定 Tomcat 容器的 URL 編碼格式,語言編碼格式這塊倒不如其它 Web 伺服器軟體配置友善,需要分别指定。

connnectionTimeout:網絡連接配接逾時,機關:毫秒,設定為 0 表示永不逾時,這樣設定有隐患的。通常預設 20000 毫秒就可以。

enableLookups:是否反查域名,以傳回遠端主機的主機名,取值為:true 或 false, 如果設定為 false,則直接傳回 IP 位址,為了提高處理能力,應設定為 false。

disableUploadTimeout:上傳時是否使用逾時機制。應設定為 true。

connectionUploadTimeout:上傳逾時時間,畢竟檔案上傳可能需要消耗更多的時間, 這個根據你自己的業務需要自己調,以使 Servlet 有較長的時間來完成它的執行,需要與上一個參數一起配合使用才會生效。

acceptCount:指定當所有可以使用的處理請求的線程數都被使用時,可傳入連接配接請求的最大隊列長度,超過這個數的請求将不予處理,預設為 100 個。

compression:是否對響應的資料進行 GZIP 壓縮,off:表示禁止壓縮;on:表示允許壓縮(文本将被壓縮)、force:表示所有情況下都進行壓縮,預設值為 off,壓縮資料後可以有效的減少頁面的大小,一般可以減小 1/3 左右,節省帶寬。

compressionMinSize:表示壓縮響應的最小值,隻有當響應封包大小大于這個值的時候才會對封包進行壓縮,如果開啟了壓縮功能,預設值就是 2048。

compressableMimeType:壓縮類型,指定對哪些類型的檔案進行資料壓縮。

noCompressionUserAgents=“gozilla, traviata”:對于以下的浏覽器,不啟用壓縮。

配置

[[email protected] conf]# vim server.xml 
<Connector port="8080" protocol="HTTP/11.1" 
connectionTimeout="20000" 
redirectPort="8443" 
minSpareThreads="50" 
enableLookups="false" 
disableUploadTimeout="true" 
acceptCount="300" 
maxThreads="500" 
processorCache="500"
URIEncoding="UTF-8" 
compression="on" 
compressionMinSize="2048" 
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image /jpg,image/png"/>
[[email protected] conf]# shutdown.sh
[[email protected] conf]# startup.sh