Tomcat 伺服器是一個免費的開放源代碼的Web 應用伺服器,屬於輕量級應用伺服器,在中小型系統和併發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程式的首選。對於一個初學者來說,可以這樣認為,當在一臺機器上配置好Apache 伺服器,可利用它響應HTML(標準通用標記語言下的一個應用) ...
- Tomcat 伺服器是一個免費的開放源代碼的Web 應用伺服器,屬於輕量級應用伺服器,在中小型系統和併發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程式的首選。對於一個初學者來說,可以這樣認為,當在一臺機器上配置好Apache 伺服器,可利用它響應HTML(標準通用標記語言下的一個應用)頁面的訪問請求。實際上Tomcat是Apache 伺服器的擴展,但運行時它是獨立運行的,所以當你運行tomcat 時,它實際上作為一個與Apache 獨立的進程單獨運行的。
- 訣竅是,當配置正確時,Apache 為HTML頁面服務,而Tomcat 實際上運行JSP 頁面和Servlet。另外,Tomcat和IIS等Web伺服器一樣,具有處理HTML頁面的功能,另外它還是一個Servlet和JSP容器,獨立的Servlet容器是Tomcat的預設模式。不過,Tomcat處理靜態HTML的能力不如Apache伺服器。目前Tomcat最新版本為9.0。
一、Tomcat體系架構
核心組件
server:相當於一個tomcat實例。接收並解析請求信息;完成相關動作後把響應結果返回給電腦。
service:每個server包含多個service,相互獨立,僅共用JVM以及類庫。用於把連接器(connector)與引擎(engine)關連起來,且一個service只能有一個engine,但是可以有多個connector。因為engine無法直接接受連接器發來的數據。
connector:負責開啟socket並監聽客戶端請求、返迴響應數據。多個connector監聽多個埠
engine:負責具體的處理請求,connector僅僅負責監聽,收到數據後交給engine運行。
host:在ngine中可以包含多個host,每個host定義了虛擬主機
context:每個context可以部署一個web應用。一個host可以存在多個context。如果部署多個應用需要分別對每個應用裝載所依賴的庫,這個步驟可以自動可以手動。
二、Tomcat的安裝
tomcat其實就是一個JAVA程式,所以要運行在JAVA虛擬機中。要運行虛擬機就要先安裝JDK。
1.JDK的安裝
1.通過YUM安裝
yum install java-1.8.0-openjdk-devel
2.配置環境變數
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/latest # 首先定義JAVA_HOME的環境變數
export PATH=$JAVA_HOME/bin:$PATH # 然後向後追加即可
###2.Tomcat的安裝
首先要從Tomcat的官網下載Tomcat,然後上傳至伺服器解壓。 https://tomcat.apache.org
1.將下載的軟體包解壓
tar xf apache-tomcat-VERSION.tar.gz -C /usr/local/
cd /usr/local
2.創建軟連接,或者將解壓的tomcat直接改名為tomcat也能達到同樣的效果
ln -sv apache-tomcat-VERSION tomcat
3.添加環境變數
vim /etc/profile.d/tomcat.sh
export CATALINA_BASE=/usr/local/tomcat
export PATH=$CATALINA_BASE/bin:$PATH
4.創建tomcat需要的用戶
useradd tomcat
5.將安裝包的路徑下的所有屬組都改為tomcat
chown -R root.tomcat /usr/local/tomcat # 設定所有者為root,所屬組為tomcat
chown -R tomcat /usr/local/tomcat/{logs,temp,work,webapps} # 僅將需要有寫許可權文件所有者改為tomcat
chmod g+r /usr/local/tomcat/conf # 預設沒有許可權,會導致啟動失敗
5.切換到tomcat用戶最後啟動服務即可
su - tomcat
catalina.sh start # 啟動tomcat。catalina.sh命令需要先添加環境變數
三、Tomcat服務的配置文件結構
bin: 腳本、以及Tomcat自身所攜帶的工具包
conf: Tomcat服務的配置文件目錄;
lib: 庫文件,Java類庫,jar;
logs: 日誌文件目錄;
temp: 臨時文件目錄;
webapps:webapp的預設目錄;相當於頁面的根目錄。部署的應用都應該在IC目錄下
work: 工作目錄,存放編譯後的位元組碼文件;
四、部署測試頁面
創建一個測試頁面,將下麵的步驟全部做完後,通過瀏覽器訪問http://IP:8080/test 即可訪問到測試的頁面
1.創建文件夾,classes、lib、WEB-INF為一個標準應用應該有的目錄,這裡創建僅僅為了與標準看齊
mkidr -pv /usr/share/tomcat/webapps/test/{classes,lib,WEB-INF}
2.創建一個測試頁面用於檢驗Tomcat服務是否能正常提供服務
vim /usr/local/tomcat/webapps/test/index.jsp # 創建jsp測試頁面
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title>Test Page</title>
/head>
<body>
<% out.println("hello world");
%>
</body>
</html
3.重啟服務
systemctl restart tomcat
4.部署完成後在webapp目錄自動生成一些目錄
cd /usr/share/tomcat/work/Catalina # 部署完成後自動生成的test目錄下的文件
[root@localhost Catalina]# tree .
.
└── localhost # 預設主機站點
├── _
├── docs
├── examples
├── host-manager
├── manager
├── sample
└── test # webpp應用名稱。自動生成以下目錄
└── org
└── apache
└── jsp
├── index_jsp.class
└── index_jsp.java
五、Tomcat的至 配置文件
1.service組件
前面講到connecotr負責接收用戶請求,而engine負責接處理用戶請求。但是connecotr並不能與engine直接通信。所以service就是負責將connector與engine連接起來的組件
<Service name="Catalina">
2.connector組件
connector負責接收客戶端發來的請求,常見的連接有三種:http、https、ajp
進入tomcat的請求可分為兩類:
(1) standalone : 請求來自於客戶端瀏覽器;
(2) 由其它的web server反代:來自前端的反代伺服器,通過反帶伺服器發來的又有以下幾種;
- nginx --> http connector --> tomcat
- httpd(proxy_http_module) --> http connector --> tomcat
- httpd(proxy_ajp_module) --> ajp connector --> tomcat
httpd(mod_jk) --> ajp connector --> tomcat
示例<Connector port="8080" # 預設有兩個connector一個監聽http一個監聽ajp protocol="HTTP/1.1" # 如果是http可以無需指明協議。AJP的話Protocol="AJP/1.3" connectionTimeout="20000" # 超時時長,毫秒即20s redirectPort="8443" # 如果請求的為SSL請求就將請求轉發至8443埠 address: # 監聽的IP地址;預設為本機所有可用地址;不寫就監聽本地所有IP maxThreads: # 最大併發連接數,預設為200; enableLookups: # 是否啟用DNS查詢功能;將IP地址解析為功能變數名稱。關閉提升性能 acceptCount: # 等待隊列的最大長度; secure: # =true的表示使用SSL通信 sslProtocol: # 設定使用哪個SSL協議,通常在tomcat上不建議使用SSL,速度太慢 />
3.Engine組件
Engine組件負責處理髮來的請求。
Engine是Servlet實例,即servlet引擎,其內部可以一個或多個host組件來定義站點; 通常需要通過defaultHost來定義預設的虛擬主機。
示例
<Engine name="Catalina" defaultHost="localhost">
name=Catalina # 引擎的名稱
defaultHost="localhost" # 預設的響應主機站點。如果找不到合適,或者功能變數名稱不匹配選擇預設host
jvmRoute= # Tomcat做集群時的調度標誌,類似於HAproxy的會話標識。
# 在基於cookie綁定時會用到
...
<Engine>
4.Host組件
Host組件位於engine內部用於接收請求併進行相應處理的主機或虛擬主機
<Host name="localhost" # 設定為主機名即可
appBase="webapps" # webapps的預設存放路徑(相對路徑,可以用絕對路徑)。相當站點根
unpackWARs="true" # true為自動展開WAR文件
autoDeploy="true"> # 是否開啟自動部署功能。
#unpackWARS、autoDeploy定義了WebAPP為WAR格式且在根下時自動部署
</Host>
5.Context組件
包含在Host標簽里。
如果在一個主機上部署多個app的話,Context就可以用來定義不同app對應的路徑。
<Context path="/PATH" # 網頁的RUL
docBase="/PATH/TO/SOMEDIR" # 真實路徑。
reloadable=""/> # 如果為true說明可以重新裝載
6.valve組件
Valve存在多種類型:
定義訪問日誌:org.apache.catalina.valves.AccessLogValve
定義訪問控制:org.apache.catalina.valves.RemoteAddrValve
<Valve className="org.apache.catalina.valves.AccessLogValve" # 定義記錄日誌要訪問的類
directory="logs" # 日誌文件的目錄路徑,預設在/var/log/tomcat下
prefix="node1_test_access_" # 日誌文件的首碼
suffix=".log" # 日誌文件的尾碼
pattern="%h %l %u %t "%r" %s %b" /> # 記錄日誌的格式
pattern="%h %l %u %t "%r" %s %b" />