Tomcat安裝部署
文章目錄
- Tomcat安裝部署
- Tomcat簡介
- Tomcat核心元件
- Tomcat處理請求的過程
-
- 請求過程詳細解釋
- Tomcat部署步驟
- Tomcat配置檔案參數優化
Tomcat簡介
免費的、開放源代碼的Web應用伺服器
Apache軟體基金會( Apache Software Foundation)Jakarta項目中的一個核心項目
由 Apache、Sun和一些公司及個人共同開發而成
深受Java愛好者的喜愛,并得到部分軟體開發商的認可
是目前比較流行的Web應用伺服器
Tomcat核心元件
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNCM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPR1ENnRlTx0kaOBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLzUzN5ITMzAjM1EDOwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
JSP (全稱JavaServer Pages)是由Sun Microsystems公司主導建立的一-種動态網頁技術标準。JSP部署于網絡伺服器上,可以響應用戶端發送的請求,并根據請求内容動态地生成HTML、XML或其他格式文檔的Web網頁,然後傳回給請求者。
JSP技術以Java語言作為腳本語言,為使用者的HTTP請求提供服務,并能與伺服器上的其它Java程式共同處理複雜的業務需求。
Servlet (Server Applet)是Java Servlet的簡稱,稱為小服務程式或服務連接配接器,用Java編寫的伺服器端程式, 具有獨立于平台和協定的特性,主要功能在于互動式地浏覽和生成資料,生成動态Web内容。
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部署步驟
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配置檔案參數優化
參數詳解
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