1. 程式人生 > >Tomcat安裝及配置詳解(一)

Tomcat安裝及配置詳解(一)

導讀 Tomcat 伺服器是一個免費的開放原始碼的Web 應用伺服器,Tomcat是Apache 軟體基金會(Apache Software Foundation)的Jakarta 專案中的一個核心專案,它早期的名稱為catalina,後來由Apache、Sun 和其他一些公司及個人共同開發而成,並更名為Tomcat。

Tomcat簡介

Tomcat 伺服器是一個免費的開放原始碼的Web 應用伺服器,Tomcat是Apache 軟體基金會(Apache Software Foundation)的Jakarta 專案中的一個核心專案,它早期的名稱為catalina,後來由Apache、Sun 和其他一些公司及個人共同開發而成,並更名為Tomcat。Tomcat 是一個小型的輕量級應用伺服器,在中小型系統和併發訪問使用者不是很多的場合下被普遍使用,是開發和除錯JSP 程式的首選,因為Tomcat 技術先進、效能穩定,成為目前比較流行的Web 應用伺服器。Tomcat是應用(java)伺服器,它只是一個servlet容器,是Apache的擴充套件,但它是獨立執行的。目前最新的版本為Tomcat 8.0.24 Released。

Tomcat不是一個完整意義上的Jave EE伺服器,它甚至都沒有提供對哪怕是一個主要Java EE API的實現;但由於遵守apache開源協議,tomcat卻又為眾多的java應用程式伺服器嵌入自己的產品中構建商業的java應用程式伺服器,如JBoss和JOnAS。儘管Tomcat對Jave EE API的實現並不完整,然而很企業也在漸漸拋棄使用傳統的Java EE技術(如EJB)轉而採用一些開源元件來構建複雜的應用。這些開源元件如Structs、Spring和Hibernate,而Tomcat能夠對這些元件實現完美的支援。

Tomcat的架構

Tomcat 6支援Servlet 2.5和JSP 2.1的規範,它由一組巢狀的層次和元件組成,一般可分為以下四類:

頂級元件:位於配置層次的頂級,並且彼此間有著嚴格的對應關係;

聯結器:連線客戶端(可以是瀏覽器或Web伺服器)請求至Servlet容器,

容器:包含一組其它元件;

被巢狀的元件:位於一個容器當中,但不能包含其它元件;

各常見元件

1、伺服器(server):Tomcat的一個例項,通常一個JVM只能包含一個Tomcat例項;因此,一臺物理伺服器上可以在啟動多個JVM的情況下在每一個JVM中啟動一個Tomcat例項,每個例項分屬於一個獨立的管理埠。這是一個頂級元件。

2、服務(service):一個服務元件通常包含一個引擎和與此引擎相關聯的一個或多個聯結器。給服務命名可以方便管理員在日誌檔案中識別不同服務產生的日誌。一個server可以包含多個service元件,但通常情下只為一個service指派一個server。

聯結器類元件:

3、聯結器(connectors):負責連線客戶端(可以是瀏覽器或Web伺服器)請求至Servlet容器內的Web應用程式,通常指的是接收客戶發來請求的位置及伺服器端分配的埠。預設埠通常是HTTP協議的8080,管理員也可以根據自己的需要改變此埠。一個引擎可以配置多個聯結器,但這些聯結器必須使用不同的埠。預設的聯結器是基於HTTP/1.1的Coyote。同時,Tomcat也支援AJP、JServ和JK2聯結器。

容器類元件

4、引擎(Engine):引擎通是指處理請求的Servlet引擎元件,即Catalina Servlet引擎,它檢查每一個請求的HTTP首部資訊以辨別此請求應該發往哪個host或context,並將請求處理後的結果返回的相應的客戶端。嚴格意義上來說,容器不必非得通過引擎來實現,它也可以是隻是一個容器。如果Tomcat被配置成為獨立伺服器,預設引擎就是已經定義好的引擎。而如果Tomcat被配置為Apache Web伺服器的提供Servlet功能的後端,預設引擎將被忽略,因為Web伺服器自身就能確定將使用者請求發往何處。一個引擎可以包含多個host元件。

5、主機(Host):主機元件類似於Apache中的虛擬主機,但在Tomcat中只支援基於FQDN的“虛擬主機”。一個引擎至少要包含一個主機元件。

6、上下文(Context):Context元件是最內層次的元件,它表示Web應用程式本身。配置一個Context最主要的是指定Web應用程式的根目錄,以便Servlet容器能夠將使用者請求發往正確的位置。Context元件也可包含自定義的錯誤頁,以實現在使用者訪問發生錯誤時提供友好的提示資訊。

被巢狀類(nested)元件

這類元件通常包含於容器類元件中以提供具有管理功能的服務,它們不能包含其它元件,但有些卻可以由不同層次的容器各自配置。

7、閥門(Valve):用來攔截請求並在將其轉至目標之前進行某種處理操作,類似於Servlet規範中定義的過濾器。Valve可以定義在任何容器類的元件中。Valve常被用來記錄客戶端請求、客戶端IP地址和伺服器等資訊,這種處理技術通常被稱作請求轉儲(request dumping)。請求轉儲valve記錄請求客戶端請求資料包中的HTTP首部資訊和cookie資訊檔案中,響應轉儲valve則記錄響應資料包首部資訊和cookie資訊至檔案中。

8、日誌記錄器(Logger):用於記錄元件內部的狀態資訊,可被用於除Context之外的任何容器中。日誌記錄的功能可被繼承,因此,一個引擎級別的Logger將會記錄引擎內部所有元件相關的資訊,除非某內部元件定義了自己的Logger元件。

9、領域(Realm):用於使用者的認證和授權;在配置一個應用程式時,管理員可以為每個資源或資源組定義角色及許可權,而這些訪問控制功能的生效需要通過Realm來實現。Realm的認證可以基於文字檔案、資料庫表、LDAP服務等來實現。Realm的效用會遍及整個引擎或頂級容器,因此,一個容器內的所有應用程式將共享使用者資源。同時,Realm可以被其所在元件的子元件繼承,也可以被子元件中定義的Realm所覆蓋。

引擎(Engine):引擎是指處理請求的Servlet引擎元件,即Catalina Servlet引擎,它從HTTPconnector接收請求並響應請求。它檢查每一個請求的HTTP首部資訊以辨別此請求應該發往哪個host或context,並將請求處理後的結果返回的相應的客戶端。嚴格意義上來說,容器不必非得通過引擎來實現,它也可以是隻是一個容器。如果Tomcat被配置成為獨立伺服器,預設引擎就是已經定義好的引擎。而如果Tomcat被配置為Apache Web伺服器的提供Servlet功能的後端,預設引擎將被忽略,因為Web伺服器自身就能確定將使用者請求發往何處。一個引擎可以包含多個host元件。

Tomcat聯結器架構

基於Apache做為Tomcat前端的架構來講,Apache通過mod_jk、mod_jk2或mod_proxy模組與後端的Tomcat進行資料交換。而對Tomcat來說,每個Web容器例項都有一個Java語言開發的聯結器模組元件,在Tomcat6中,這個聯結器是org.apache.catalina.Connector類。這個類的構造器可以構造兩種類別的聯結器:HTTP/1.1負責響應基於HTTP/HTTPS協議的請求,AJP/1.3負責響應基於AJP的請求。但可以簡單地通過在server.xml配置檔案中實現聯結器的建立,但建立時所使用的類根據系統是支援APR(Apache Portable Runtime)而有所不同。

APR是附加在提供了通用和標準API的作業系統之上一個通訊層的本地庫的集合,它能夠為使用了APR的應用程式在與Apache通訊時提供較好伸縮能力時帶去平衡效用。
同時,需要說明的是,mod_jk2模組目前已經不再被支援了,mod_jk模組目前還apache被支援,但其專案活躍度已經大大降低。因此,目前更常用 的方式是使用mod_proxy模組。

如果支援APR:

HTTP/1.1:org.apache.cotote.http11.Http11AprProtocol
AJP/1.3:org.apache.coyote.ajp.AjpAprProtocol

如果不支援APR:

HTTP/1.1: org.apache.coyote.http11.Http11Protocol
AJP/1.3: org.apache.jk.server.JkCoyoteHandler

聯結器協議

Tomcat的Web伺服器聯結器支援兩種協議:AJP和HTTP,它們均定義了以二進位制格式在Web伺服器和Tomcat之間進行資料傳輸,並提供相應的控制命令

AJP(Apache JServ Protocol)協議:目前正在使用的AJP協議的版本是通過JK和JK2聯結器提供支援的AJP13,它基於二進位制的格式在Web伺服器和Tomcat之間傳輸資料,而此前的版本AJP10和AJP11則使用文字格式傳輸資料。

HTTP協議:誠如其名稱所表示,其是使用HTTP或HTTPS協議在Web伺服器和Tomcat之間建立通訊,此時,Tomcat就是一個完全功能的HTTP伺服器,它需要監聽在某埠上以接收來自於商前伺服器的請求。

二、安裝Tomcat

Tomcat的官方站點為http://tomcat.apache.org/,要安裝Tomcat,首先需要安裝JDK。

以下安裝平臺為CentOS release 6.6 (Final) 32位平臺上,JDK 版本為jdk-6u45-linux-i586-rpm.bin ,tomcat 使用 apache-tomcat-7.0.63.tar.gz。

[root@localhost tomcat]# ls -l
total 75676
-rw-r--r--. 1 root root  8850470 Aug 12 02:08 apache-tomcat-7.0.63.tar.gz
-rw-r--r--. 1 root root 68637258 Apr  6  2014 jdk-6u45-linux-i586-rpm.bin
[root@localhost tomcat]# chmod +x jdk-6u45-linux-i586-rpm.bin 
[root@localhost tomcat]# ./jdk-6u45-linux-i586-rpm.bin 
[root@localhost tomcat]# tar xf  apache-tomcat-7.0.63.tar.gz -C  /usr/local/
[root@localhost tomcat]# ln -s /usr/local/apache-tomcat-7.0.63/  /usr/local/tomcat
[root@node1 tomcat]# vim /etc/profile.d/java.sh     #設定java環境變數
export JAVA_HOME=/usr/java/latest
export PATH=$PATH:$JAVA_HOME/bin
[root@node1 conf]# .  /etc/profile.d/tomcat.sh
[root@node1 tomcat]# vim /etc/profile.d/tomcat.sh       #設定tomcat環境變數
export CATALINA_HOME=/usr/local/tomcat
export PATH=$PATH:$CATALINA_HOME/bin
[root@node1 conf]# catalina.sh version    
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.6.0_45
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/7.0.63
Server built:   Jun 30 2015 08:08:33 UTC
Server number:  7.0.63.0
OS Name:        Linux
OS Version:     2.6.32-504.el6.i686
Architecture:   i386
JVM Version:    1.6.0_45-b06
JVM Vendor:     Sun Microsystems Inc.
[root@localhost tomcat]# vim /etc/init.d/tomcat    #提供啟動指令碼
#!/bin/sh
# Tomcat init script for Linux.
#
# chkconfig: 2345 96 14
# description: The Apache Tomcat servlet/JSP container.
# JAVA_OPTS='-Xms64m -Xmx128m'
JAVA_HOME=/usr/java/latest
CATALINA_HOME=/usr/local/tomcat
export JAVA_HOME CATALINA_HOME
case $1 in
start)
  exec $CATALINA_HOME/bin/catalina.sh start ;;
stop)
  exec $CATALINA_HOME/bin/catalina.sh stop;;
restart)
  $CATALINA_HOME/bin/catalina.sh stop
  sleep 2
  exec $CATALINA_HOME/bin/catalina.sh start ;;
configtest)
  exec $CATALINA_HOME/bin/catalina.sh configtest ;;
*)
  exec $CATALINA_HOME/bin/catalina.sh * ;;
esac
[root@localhost tomcat]# chmod +x  /etc/init.d/tomcat 
[root@localhost tomcat]# chkconfig --add tomcat
[root@node1 tomcat]# catalina.sh start
[root@node1 tomcat]# jps      #顯示Bootstrap啟動則表示啟動成功
29145 Bootstrap                           
29163 Jps

原文來自: https://www.linuxprobe.com/tomcat-install-configure.ht