直播中
本文檔提供關(guān)于Tomcat的基礎(chǔ)信息.主要內(nèi)容如下:
Tomcat二進(jìn)制版本安裝
與Tomcat相關(guān)的腳本的主要內(nèi)容
與server.xml相關(guān)的主要內(nèi)容,Tomcat的主要配置文件
如何設(shè)置Tomcat與宿主web服務(wù)器一起工作的說(shuō)明
如何應(yīng)用Tomcat配置一個(gè)現(xiàn)實(shí)中的web站點(diǎn)
希望此文檔足以使新用戶(hù)可以開(kāi)始使用Tomcat.如找不到某方面的內(nèi)容請(qǐng)(按以下順序)
查找Tomcat faq
查找Tomcat包清單
向Tomcat用戶(hù)郵件列表發(fā)出問(wèn)題
如此疑問(wèn)的答案不存在,我們鼓勵(lì)把對(duì)疑問(wèn)的解答放入Tomcat faq或此文檔.如對(duì)此文檔有意見(jiàn)或建議,請(qǐng)發(fā)送到Tomcat的郵件列表.
Getting Started
Tomcat是一個(gè)帶有jsp環(huán)境的servlet容器.servlet容器是一個(gè)根據(jù)用戶(hù)的行為可以管理和激活servlet的運(yùn)行時(shí)的shell.
粗略地可以將servlet容器分為如下幾類(lèi):
獨(dú)立的servlet容器
內(nèi)置有web服務(wù)器的一部分.指當(dāng)使用基于Java的web服務(wù)器的情形,例如servlet容器是JavaWebServer的一個(gè)部分. 獨(dú)立的servlet容器是Tomcat的默認(rèn)模式.
大多數(shù)的web服務(wù)器并非基于Java,因此,我們可以得出如下兩種容器的模式.
進(jìn)程內(nèi)的servlet容器
servlet容器作為web服務(wù)器的插件和Java容器的實(shí)現(xiàn).Web服務(wù)器插件在內(nèi)部地址空間打開(kāi)一個(gè)JVM(java virtual machine)使Java容器得以在內(nèi)部運(yùn)行.如有某個(gè)需要調(diào)用servlet的請(qǐng)求,,插件將取得對(duì)此請(qǐng)求的控制并將他傳遞(使用JNI)給Java容器.進(jìn)程內(nèi)容器對(duì)于多線(xiàn)程,單進(jìn)程的服務(wù)器非常合適并且提供很好的運(yùn)行速度,但伸縮性有所不足.
進(jìn)程外的servlet容器
servlet容器運(yùn)行于web服務(wù)器之外的地址空間且作為web服務(wù)器的插件和Java容器的實(shí)現(xiàn)的結(jié)合.web服務(wù)器插件和Java容器 JVM使用IPC機(jī)制(通常是TCP/IP)進(jìn)行通訊.當(dāng)一個(gè)調(diào)用servlet的請(qǐng)求到達(dá)時(shí),插件將取得對(duì)此請(qǐng)求的控制并將其傳遞(使用IPC等)給Java容器,進(jìn)程外容器的反應(yīng)時(shí)間或進(jìn)程外容器引擎不如進(jìn)程內(nèi)容器,但進(jìn)程外容器引擎在許多其他可比的范圍內(nèi)更好(伸縮性,穩(wěn)定性等).
Tomcat既可作為獨(dú)立的容器(主要是用于開(kāi)發(fā)與調(diào)試)又可作為對(duì)現(xiàn)有服務(wù)器的附加(當(dāng)前支持Apache,IIS和Netscape服務(wù)器).即任何時(shí)候配置Tomcat你都必須決定如何應(yīng)用他,如選擇第二或第三種模式,你還需要安裝一個(gè)web服務(wù)器接口.
Tomcat與Jserv有何區(qū)別?Tomcat是Jserv嗎?
這是個(gè)常見(jiàn)的誤解.Jserv是Servlet API2.0兼容并與Apache一起使用的容器.Tomcat是一個(gè)完全重寫(xiě)的并與Servlet API2.2和JSP1.1兼容的容器.
Tomcat使用了一些為Jserv而寫(xiě)的代碼,特別是Jserv的Apache接口,但這是唯一的相同之處.
怎樣安裝Tomcat的二進(jìn)制版本?
非常簡(jiǎn)單,只需:
下載 zip/tar.gz 任何壓縮文件,從http://jakarta.apche.org/download/binindex.html處.
解壓縮此文件到某目錄(如:foo).將會(huì)生成一子目錄,名為”tomcat”.
轉(zhuǎn)換到”tomcat”目錄設(shè)置一新的環(huán)境變量(TOMCAT_HOME)指向你安裝的tomcat的目錄
WIN32平臺(tái),鍵入:
“set TOMCAT_HOME=foo omcat”
Unix平臺(tái):
如是bash/sh環(huán)境, 鍵入:”TOMCAT_HOME=foo/tomcat;export TOMCAT_HOME”
如是tcsh環(huán)境, 鍵入:”setenv TOMCAT_HOME foo/tomcat”
設(shè)置環(huán)境變量JAVA_HOME指向你JDK的目錄,然后添加JAVA解釋器到你的PATH環(huán)境變量.
好了!現(xiàn)在可以運(yùn)行TOMCAT并作為一個(gè)獨(dú)立的Servlet容器(模式一)
啟動(dòng)與關(guān)閉Tomcat
使用”bin”目錄中的腳本啟動(dòng)與關(guān)閉Tomcat.
啟動(dòng):
uinx:bin/startup.sh
win32:binstartup
關(guān)閉:
unix:bin/shutdown.sh
win32:binshutdown
Tomcat目錄結(jié)構(gòu)
假設(shè)你已將Tomcat解壓,你已得到下列目錄結(jié)構(gòu):
目錄名--描述
bin
包含啟動(dòng)/關(guān)閉腳本
conf
包含不同的配置文件,
包括 server.xml(Tomcat的主要配置文件)和為不同的Tomcat配置的web應(yīng)用設(shè)置缺省值的文件web.xml
doc
包含各種Tomcat文檔
lib
包含Tomcat使用的jar文件.unix平臺(tái)此目錄下的任何文件都被加到Tomcat的classpath中
logs
Tomcat擺放日志文件的地方
src
ServletAPI源文件.先別高興,這些只有些必須在Servlet容器內(nèi)實(shí)現(xiàn)的空接口和抽象類(lèi)
webapps
包含web項(xiàng)目示例
此外你可以Tomcat會(huì)創(chuàng)建如下目錄:
work
Tomcat自動(dòng)生成,放置Tomcat運(yùn)行時(shí)的臨時(shí)文件(如編譯后的JSP文件).如在Tomcat運(yùn)行時(shí)刪除此目錄.JSP頁(yè)面將不能運(yùn)行.
classes
你可以創(chuàng)建此目錄來(lái)添加一些附加的類(lèi)到類(lèi)路徑中.任何你加到此目錄中的類(lèi)都可在Tomcat的類(lèi)路徑中找到自身.
Tomcat的腳本
Tomcat是一個(gè)Java程序,因此在設(shè)置好幾個(gè)環(huán)境變量后即可用命令行的方式運(yùn)行.然而設(shè)置Tomcat使用的每個(gè)環(huán)境變量和如下的命令行參數(shù)乏味且易錯(cuò).因此,Tomcat開(kāi)發(fā)組提供了一些腳本使啟動(dòng)和關(guān)閉Tomcat變得輕松.
注意:這些腳本僅僅是個(gè)便利的方法去啟動(dòng)和關(guān)閉Tomcat.你可修改他們來(lái)定制CLASSPATH,環(huán)境變量如PATH,LD_LIBRARY_PATH,等等,只要是生成一個(gè)正確的命令行即可.
這些腳本是什么呢?下表列出對(duì)一般用戶(hù)最重要的腳本.
tomcat
主腳本.設(shè)置合適的環(huán)境變量,包括CLASSPATH,TOMCAT_HOME和JAVA_HOME和用適合的命令行參數(shù)啟動(dòng)Tomcat
startup
在后臺(tái)啟動(dòng)Tomcat.”tomcat start”命令的替換方式
shutdown
關(guān)閉Tomcat.”tomcat stop”命令的替換方式
對(duì)用戶(hù)最重要的腳本是tomcat(tomcat.bat/tomcat.sh).其他Tomcat相關(guān)的腳本作為一個(gè)簡(jiǎn)單的面向單任務(wù)的指向Tomcat腳本(設(shè)置不同的命令行參數(shù)等)的入口.
仔細(xì)考察tomcat.bat/tomcat.sh,它按以下步驟運(yùn)行:
在Unix下的步驟:
如未指定,推測(cè) TOMCAT_HOME
如未指定,推測(cè) JAVA_HOME
設(shè)置CLASS_PATH包含:
1.${TOMCAT_HOME}/classes目錄(如果存在)
2.${TOMCAT_HOME}/lib的一切內(nèi)容
3.${JAVA_HOME}/lib/tools.jar(此jar文件包含工具javac,我們需要javac處理jsp文件.
運(yùn)行帶有設(shè)定Java環(huán)境變量的命令行參數(shù)的java命令,調(diào)入tomcat.home,和org.apache.tomcat.startup.Tomcat 作為啟始類(lèi).同時(shí)也傳遞命令行參數(shù)到org.apache.tomcat.startup.Tomcat ,例如:
執(zhí)行start/stop/run 等的操作
此Tomcat進(jìn)程使用指向server.xml的路徑,
例如server.xml放置于etc/server_1.xml并且用戶(hù)意圖在后臺(tái)啟動(dòng)apache,鍵 入如下命令行:
bin/tomcat.sh start –f /etc/server_1.xml
在Win32下的步驟:(略)
由此可見(jiàn),win32版的tomcat.bat與Unix版的幾乎一致.尤其在它不推測(cè)TOMCAT_HOME和JAVA_HOME的值,并且不將所有的jar文件放入類(lèi)路徑中.
Tomcat的配置文件
Tomcat的配置基于兩個(gè)配置文件:
1.server.xml - Tomcat的全局配置文件
2.web.xml - 在Tomcat中配置不同的關(guān)系環(huán)境
這一部分將講述如何使用這些文件.我們不會(huì)包含web.xml的內(nèi)部機(jī)制,這些內(nèi)部機(jī)制深入到了Servlet API的細(xì)節(jié),因此,我們將討論涵蓋servler.xml內(nèi)容及web.xml在Tomcat關(guān)系環(huán)境中的用法.
server.xml
server.xml是Tomcat的主配置文件.完成兩個(gè)目標(biāo):
1 提供Tomcat組件的初始配置.
2 說(shuō)明Tomcat的結(jié)構(gòu),含義,使得Tomcat通過(guò)實(shí)例化組件完成起動(dòng)及構(gòu)建自身, 如在server.xml所指定的
下表描述server.xml種的重要元素:
元素及其描述
Server
server.xml文件中最重要的元素.Server定義了一個(gè)Tomcat服務(wù)器.一般你不用對(duì)他擔(dān)心太多.Server元素能包含Logger和ContextManager元素類(lèi)型
Logger
此元素定義一個(gè)Logger對(duì)象,每個(gè)Logger都有一個(gè)名字去標(biāo)識(shí),也有一個(gè)紀(jì)錄Logger的輸出和冗余級(jí)別(描述此日志級(jí)別)和包含日志文件的路徑.通常有servlet的Logger(ServletContext.log()處),JSP和Tomcat運(yùn)行時(shí)的Logger.
ContextManager
ContextManager說(shuō)明一套ContextInterceptor, RequestInterceptor , Context和他們的Connectors的配置及結(jié)構(gòu).ContextManager有幾個(gè)隨同提供的特性:
1. 用來(lái)紀(jì)錄調(diào)試信息的調(diào)試級(jí)別
2. webapps/,conf/,logs/和所有已定義的環(huán)境的基本位置.用來(lái)使Tomcat可以在TOMCAT_HOME外的其他目錄啟動(dòng).
3. 工作目錄的名字
ContextInterceptor&RequestInterceptor
這些偵聽(tīng)器(interceptors)偵聽(tīng)具體發(fā)生在ContextManager中的事件.例如,ContextInterceptor偵聽(tīng)Tomcat的啟動(dòng)及終止事件,RequestInterceptor監(jiān)視在它服務(wù)過(guò)程中用戶(hù)請(qǐng)求需要通過(guò)的不同階段.Tomcat的管理員不必知道太多關(guān)于偵聽(tīng)器的知識(shí);另外,開(kāi)發(fā)者應(yīng)該知道這是如何在Tomcat中實(shí)現(xiàn)一個(gè)”全局”型的操作(例如安全性及每個(gè)請(qǐng)求日志)
Connector
Connector表示一個(gè)到用戶(hù)的聯(lián)接,不管是通過(guò)web服務(wù)器或直接到用戶(hù)瀏覽器(在一個(gè)獨(dú)立配置中).Connector負(fù)責(zé)管理Tomcat的工作線(xiàn)程和 讀/寫(xiě) 連接到不同用戶(hù)的端口的 請(qǐng)求/響應(yīng).Connector的配置包含如下信息:
1.句柄類(lèi)
2.句柄監(jiān)聽(tīng)的TCP/IP端口
3.句柄服務(wù)器端口的TCP/IP的backlog.
稍后我們將在此文檔中描述如何配置Connector.
Context
每個(gè)Context提供一個(gè)指向你放置你Web項(xiàng)目的Tomcat的下屬目錄。每個(gè)Context包含如下配置:
1. Context放置的路徑,可以是與ContextManager主目錄相關(guān)的路徑.
2.紀(jì)錄調(diào)試信息的調(diào)試級(jí)別
3.可重載的標(biāo)志.開(kāi)發(fā)Servlet時(shí),重載更改后的Servlet,這是一個(gè)非常便利的特性,你可以調(diào)試或用Tomcat測(cè)試新代碼而不用停止或重新啟動(dòng)Tomcat.要打開(kāi)重載,把reloadable設(shè)為真即可.這雖花費(fèi)時(shí)間但可檢測(cè)所發(fā)生的變化;更重要的事,鑒于,在一個(gè)裝載類(lèi)對(duì)象裝入一個(gè)新的servlet時(shí),類(lèi)裝載觸發(fā)器可能會(huì)擲出一些錯(cuò)誤.為避免這些問(wèn)題,你可以設(shè)置可重載為假,這將停止重載功能.
從另一個(gè)目錄中啟動(dòng)Tomcat
作為缺省值將使用TOMCAT_HOME/conf/server.xml作為配置文件.缺省配置將使用TOMCT_HOME作為關(guān)系環(huán)境的基礎(chǔ).
使用 “-f/你的/目錄/server.xml”選項(xiàng)你可改變這種情況,使用另一個(gè)服務(wù)器配置文件和設(shè)置關(guān)系環(huán)境管理器的目錄屬性你需要在主目錄內(nèi)設(shè)置以下幾個(gè)文件:
Ø 一個(gè) webapps/目錄(如果你已生成) – 所有war文件獎(jiǎng)杯界壓倒此目錄而且所有子目錄將作為關(guān)系環(huán)境添加.
Ø conf/目錄 - 你可保存一個(gè)特殊的web.xml文件和其他配置文件
Ø logs/ - 所有日志文件將代替TOMCAT_HOME/logs/紀(jì)錄到此目錄中
Ø work/ - 關(guān)系環(huán)境的工作目錄
如server.xml中的ContextManager.home屬性有關(guān)聯(lián),將關(guān)聯(lián)到到當(dāng)前工作目錄.
web。xml
關(guān)于web。xml和web項(xiàng)目結(jié)構(gòu)(包括目錄服務(wù)及配置)的詳細(xì)描述可在Servlet API Spec的第9,10,14章中找到。
然而有一個(gè)與Tomcat有關(guān)的小“特性“與web.xml有關(guān)。Tomcat可以讓用戶(hù)通過(guò)將缺省的web.xml放入conf目錄中來(lái)定義所有關(guān)系環(huán)境的web.xml的缺省值.建立一個(gè)新的關(guān)系環(huán)境時(shí),Tomcat使用缺省的web.xml文件作為基本設(shè)置和應(yīng)用項(xiàng)目特定的web.xml(放在應(yīng)用項(xiàng)目的WEB-INF/web.xml文件)來(lái)覆蓋這些缺省值.
設(shè)置Tomcat與Apache Web 服務(wù)器
服務(wù)器
到現(xiàn)在為止,我們未討論作為服務(wù)器擴(kuò)展的Tomcat,只討論了作為獨(dú)立運(yùn)行的服務(wù)器.但有一些問(wèn)題需要說(shuō)明:
1. 當(dāng)處理靜態(tài)頁(yè)面時(shí),Tomcat不如Apache迅速.
2. Tomcat不象Apache一樣可配置.
3. Tomcat不象Apache一樣強(qiáng)壯.
4. 有很多網(wǎng)站已在某一特定web server上投入了很長(zhǎng)時(shí)間,例如,使用CGI腳本/Server API模組/perl/php…我們不能假設(shè)這些遺留下來(lái)的東西都會(huì)被丟棄.
基于以上原因,一個(gè)現(xiàn)實(shí)的網(wǎng)站建議使用一個(gè)Web服務(wù)器,如Apache,為網(wǎng)站的靜態(tài)頁(yè)面請(qǐng)求提供服務(wù),并使用Tomcat作為一個(gè)Servlet/JSP插件.
我們不準(zhǔn)備深入的討論每個(gè)不同的配置,我們將:
1. 涵蓋Web服務(wù)器的基本行為
2. 解釋需要何種配置
3. 在Apache上的實(shí)例
Web 服務(wù)器操作
簡(jiǎn)單說(shuō)來(lái),web服務(wù)器總是等待來(lái)自客戶(hù)端的HTTP請(qǐng)求。當(dāng)請(qǐng)求到達(dá)時(shí),服務(wù)器會(huì)提供一切必要的內(nèi)容來(lái)滿(mǎn)足此請(qǐng)求。加入一個(gè)Servlet容器某種程度上會(huì)改變此行為。但服務(wù)器仍需處理如下因素:
載入servlet容器接口庫(kù)并初始化(處理請(qǐng)求之前)。
當(dāng)收到一個(gè)請(qǐng)求時(shí),檢查是否屬于某Servlet,如是,則接口庫(kù)接收此請(qǐng)求并處理。
另一方面,接口庫(kù)需要知道他將服務(wù)某種請(qǐng)求,通常是基于請(qǐng)求的URL的某種模式和將此請(qǐng)求導(dǎo)向何處。
當(dāng)用戶(hù)想要設(shè)置使用虛擬主機(jī)的配置時(shí),事情會(huì)變得更加復(fù)雜,或者想多個(gè)開(kāi)發(fā)者在一個(gè)服務(wù)器上進(jìn)行開(kāi)發(fā)但使用不同的Servlet容器的JVMs。以下我們將討論這兩個(gè)問(wèn)題。
必需進(jìn)行的配置
應(yīng)該考慮的是最明顯的配置是servlet URL具有對(duì)servlet容器中的servlet具有表示的責(zé)任。很明顯,你必須知道傳遞什么到Servlet容器。我們?nèi)孕杼峁└郊拥呐渲庙?xiàng)目到web-server或servlet-container的結(jié)合體中.
l 考慮到Tomcat進(jìn)程是否可取得,我們?nèi)孕杼峁┡渲煤蚑omcat正在監(jiān)聽(tīng)的TCP/IP 主機(jī)名/端口號(hào)。
l 需要告知web服務(wù)器接口庫(kù)的位置(因此我們可以在起始時(shí)裝入)
l 需要設(shè)置接口內(nèi)部信息如將日志記錄在何處和如何紀(jì)錄,等等。
所有此類(lèi)信息必須出現(xiàn)在web服務(wù)器配置里或被接口使用的私有配置文件中。下面將講述如何在Apache中如何實(shí)現(xiàn)這些配置。
Apache上的實(shí)現(xiàn)
這一部分演示如何配置Apache與Tomcat一起工作;并試圖解釋深入到可能會(huì)用到的配置規(guī)范。在jserv 安裝頁(yè)上可找到其他信息