Tomcat是在SUN的JSWDK的基礎上發展起來的另一個優秀的JSP服務器,它不但支持Servlet,而且還提供了Web服務器的功能。作為一個開放源碼的軟件,Tomcat有著自己獨特的優勢,可以和目前大部分的主流服務器一起工作,而且有著相當高的運行效率。
通過本章,讀者將會看到:
? Tomcat的基本概念
? 如何讓Tomcat和IIS一起工作
? 如何讓Tomcat和Apache一起工作
? 如何設定JSP的虛擬目錄
? 如何將Tomcat設為Windows服務運行
Jakarta-Tomcat概貌
綜述:Tomcat是一個帶有JSP環境的servlet容器。servlet容器是一個根據用戶的行為可以管理和激活servlet的運行時的shell。
我們可以粗略地將servlet容器分為如下幾類:
獨立的servlet容器
內置有web服務器的一部分。指使用基于Java的web服務器的情形,例如servlet容器是JavaWebServer的一個部分。獨立的servlet容器是Tomcat的默認模式。
然而,大多數的web服務器并非基于Java。因此,我們可以得出如下兩種容器的模式:
進程內的servlet容器
servlet容器作為web服務器的插件和Java容器的實現。Web服務器插件在內部地址空間打開一個JVM(Java virtual machine)使Java容器得以在內部運行。如有某個需要調用servlet的請求,插件將取得對此請求的控制并將它傳遞(使用JNI)給Java容器。進程內容器對于多線程、單進程的服務器非常合適并且提供很好的運行速度,但伸縮性有所不足。
進程外的servlet容器
servlet容器運行于web服務器之外的地址空間且作為web服務器的插件和Java容器的實現的結合。web服務器插件和Java容器 JVM使用IPC機制(通常是TCP/IP)進行通訊。當一個調用servlet的請求到達時,插件將取得對此請求的控制并將其傳遞(使用IPC等)給Java容器,進程外容器的反應時間或進程外容器引擎不如進程內容器,但進程外容器引擎在許多其他可比的范圍內更好(伸縮性、穩定性等)。
Tomcat既可作為獨立的容器(主要是用于開發與調試),又可作為對現有服務器的附加(當前支持Apache、IIS和Netscape服務器)。所以在配置Tomcat時,必須決定如何應用它,如果選擇第二或第三種模式,還需要安裝一個web服務器接口。
Tomcat與Jserv有何區別?Tomcat是Jserv嗎?
這是個常見的誤解。Jserv是Servlet API2.0兼容并與Apache一起使用的容器。Tomcat是一個完全重寫的并與Servlet API2.2和JSP1.1兼容的容器。
另外,Tomcat使用了一些為Jserv而寫的代碼,特別是Jserv的Apache接口,但這是唯一的相同之處。
怎樣安裝Tomcat的二進制版本?
非常簡單,只需:下載 zip/tar.gz 任何壓縮文件,從http://jakarta.apche.org/download/binindex.html處解壓縮此文件到某目錄(如:foo),將會生成一子目錄,名為"tomcat",轉換到"tomcat"目錄設置一新的環境變量(TOMCAT_HOME)指向你安裝的tomcat的目錄:
WIN32平臺,鍵入: set TOMCAT_HOME=foo/tomcat
Unix平臺:
如是bash/sh環境,鍵入:TOMCAT_HOME=foo/tomcat;export TOMCAT_HOME"
如是tcsh環境,鍵入:setenv TOMCAT_HOME foo/tomcat
設置環境變量JAVA_HOME指向你JDK的目錄,然后添加JAVA解釋器到你的PATH環境變量。
好了!現在可以運行TOMCAT并作為一個獨立的Servlet容器(模式一)
啟動與關閉Tomcat
使用"bin"目錄中的腳本啟動與關閉Tomcat。
啟動:
uinx:bin/startup.sh win32:binstartup |
關閉:
unix:bin/shutdown.sh win32:binshutdown Tomcat目錄結構 |
假設讀者已將Tomcat解壓,這時將得到下列目錄結構:
目錄名 | 描述 |
bin | 包含啟動/關閉腳本。 |
conf | 包含不同的配置文件,包括 server.xml(Tomcat的主要配置文件)和為不同的Tomcat配置的web應用設置缺省值的文件web.xml。 |
doc | 包含各種Tomcat文檔。 |
lib | 包含Tomcat使用的jar文件。unix平臺此目錄下的任何文件都被加到Tomcat的classpath中。 |
logs | Tomcat擺放日志文件的地方。 |
src | ServletAPI源文件。先別高興,這里只有些必須在Servlet容器內實現的空接口和抽象類。 |
webapps | 包含web項目示例。 |
work | Tomcat自動生成,放置Tomcat運行時的臨時文件(如編譯后的JSP文件),如果在Tomcat運行時刪除此目錄.JSP頁面將不能運行。 |
classes | 你可以創建此目錄來添加一些附加的類到類路徑中,任何你加到此目錄中的類都可在Tomcat的類路徑中找到自身。 |
Tomcat的腳本
Tomcat是一個Java程序,因此在設置好幾個環境變量后即可用命令行的方式運行。然而設置Tomcat使用的每個環境變量和如下的命令行參數乏味且容易出錯。因此,Tomcat開發組提供了一些腳本使啟動和關閉Tomcat變得非常輕松。
注意:這些腳本僅僅是個便利的方法去啟動和關閉Tomcat。你可修改他們來定制CLASSPATH,環境變量如PATH、LD_LIBRARY_PATH等等,只要是生成一個正確的命令行即可。
這些腳本是什么呢?下面列出對一般用戶最重要的腳本。
Tomcat:主腳本。設置合適的環境變量,包括CLASSPATH、TOMCAT_HOME以及JAVA_HOME和用適合的命令行參數啟動Tomcat 。
startup :在后臺啟動Tomcat。它是"tomcat start"命令的替換方式。
shutdown :關閉Tomcat。它是"tomcat stop"命令的替換方式。
對用戶最重要的腳本是tomcat(tomcat.bat/tomcat.sh)。其他Tomcat相關的腳本作為一個簡單的面向單任務的指向Tomcat腳本(設置不同的命令行參數等)的入口。
仔細考察tomcat.bat/tomcat.sh,它按以下步驟運行:
在Unix下的步驟:
如未指定,推測 TOMCAT_HOME
如未指定,推測 JAVA_HOME
設置CLASS_PATH包含:
1.${TOMCAT_HOME}/classes目錄(如果存在)
2.${TOMCAT_HOME}/lib的一切內容
3.${JAVA_HOME}/lib/tools.jar(此jar文件包含工具Javac,我們需要Javac處理jsp文件)
運行帶有設定Java環境變量的命令行參數的Java命令,調入tomcat.home和org.apache.tomcat.startup.Tomcat 作為啟始類。同時也傳遞命令行參數到org.apache.tomcat.startup.Tomcat ,例如:執行start/stop/run 等的操作。另外,此Tomcat進程使用指向server.xml的路徑,例如server.xml放置于etc/server_1.xml并且用戶意圖在后臺啟動apache,鍵入如下命令行:
bin/tomcat.sh start -f /etc/server_1.xml
win32版的tomcat.bat與Unix版的幾乎一致。尤其在它不推測TOMCAT_HOME和JAVA_HOME的值,并且不將所有的jar文件放入類路徑中。
Tomcat的配置文件
這一部分將講述如何使用配置文件server.xml和web.xml。我們不會包含web.xml的內部機制,這些內部機制深入到了Servlet API的細節,因此,我們將討論涵蓋這兩個配置文件在Tomcat關系環境中的用法。
Tomcat的配置基于兩個配置文件:
1.server.xml - Tomcat的全局配置文件,完成兩個目標:
(1)提供Tomcat組件的初始配置
?。?)說明Tomcat的結構、含義,使得Tomcat通過實例化組件完成啟動及構建自身。
結構、含義的說明是通過元素來實現的,下面將描述這些元素。
Server:server.xml文件中最重要的元素。Server定義了一個Tomcat服務器。一般讀者不用對它擔心太多。Server元素能包含Logger和ContextManager元素類型。
Logger:此元素定義一個Logger對象,每個Logger都有一個名字去標識,也有一個紀錄Logger的輸出和冗余級別(描述此日志級別)和包含日志文件的路徑,通常有servlet的Logger(ServletContext.log()處),JSP和Tomcat運行時的Logger。
ContextManager:它說明了一套ContextInterceptor、RequestInterceptor、Context和它們的Connectors的配置及結構。ContextManager有幾個隨同提供的特性:
a.用來紀錄調試信息的調試級別
b.webapps/、conf/、logs/和所有已定義的環境的基本位置。用來使Tomcat可以在TOMCAT_HOME外的其他目錄啟動。
c.工作目錄的名字
ContextInterceptor&RequestInterceptor:這些偵聽器(interceptors)偵聽具體發生在ContextManager中的事件,例如,ContextInterceptor偵聽Tomcat的啟動及終止事件,RequestInterceptor監視在它服務過程中用戶請求需要通過的不同階段。Tomcat的管理員不必知道太多關于偵聽器的知識;另外,開發者應該知道這是如何在Tomcat中實現一個"全局"型的操作(例如安全性及每個請求日志) 。
Connector:表示一個到用戶的聯接,不管是通過web服務器或直接到用戶瀏覽器(在一個獨立配置中)。Connector負責管理Tomcat的工作線程和讀/寫連接到不同用戶的端口的請求/響應。Connector的配置包含如下信息:
a.句柄類
b.句柄監聽的TCP/IP端口
c.句柄服務器端口的TCP/IP的backlog
Context:每個Context提供一個指向你放置你Web項目的Tomcat的下屬目錄。每個Context包含如下配置:
a.Context放置的路徑,可以是與ContextManager主目錄相關的路徑
b.紀錄調試信息的調試級別
c.可重載的標志。開發Servlet時,重載更改后的Servlet,這是一個非常便利的特性
2.web.xml--在Tomcat中配置不同的關系環境
有一個和Tomcat有關的小"特性"與web.xml有關。Tomcat可以讓用戶通過將缺省的web.xml放入conf目錄中來定義所有關系環境的web.xml的缺省值。建立一個新的關系環境時,Tomcat使用缺省的web.xml文件作為基本設置和應用項目特定的web.xml(放在應用項目的WEB-INF/web.xml文件)來覆蓋這些缺省值。
如何將Tomcat裝入IIS
IIS,即Internet Information Server,是微軟公司提供的一種功能強大的Web服務器,它對ASP有著很好的支持,這一點相信很多讀者都已經知道。現在,JSP已經流行起來,如何才能讓IIS支持該技術呢?讀者將會從本節得到答案。
一、安裝環境Windows 2000、IIS 5.0
Tomcat 3.1下載地址
http://jakarta.apache.org/builds/tomcat/release/v3.1/bin/
isapi_redirect.dll下載地址
http://jakarta.apache.org/builds/tomcat/release/v3.1/bin/win32/i386/
放到{TOMCATHOME}iniisi386isapi_redirect.dll
二、先要保證Tomcat可以正確執行
三、將下面的begin和end之間的Jakarta.reg文件裝入機器,我的Tomcat裝在c:/jakarta-tomcat,你可根據自己的環境修改Jakarta.reg文件
Jakarta.reg: ---begin--- Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINESOFTWAREApache Software FoundationJakarta Isapi Redirector1.0] "extension_uri"="/jakarta/isapi_redirect.dll" "log_file"="c:/jakarta-tomcat/logs/isapi.log" "log_level"="debug" "worker_file"="c:/jakarta-tomcat/conf/workers.properties" "worker_mount_file"="c:/jakarta-tomcat/conf/uriworkermap.properties" ---end--- |
jdk1_2_2.exe apache_1_3_9_win32.exe ApacheModuleJServ.dll tomcat.zip(3.1) |
<Connector className="org.apache.tomcat.service.SimpleTcpConnector"> ?。糚arameter name="handler" value="org.apache.tomcat.service.http. HttpConnectionHandler"/> ?。糚arameter name="port" value="80"/> </Connector> |
?。糃ontext path="/myweb" docBase="webapps/myweb" debug="0" reloadable="true" > ?。?Context> |
?。糷tml> ?。糱ody> ?。? for(int i=1;i<3;i++){ out.println("<h" + i + ">Hello World</h" + i + ">"); } %> </body> ?。?html> |
import Java.io.*; import Java.text.*; import Java.util.*; import Javax.servlet.*; import Javax.servlet.http.*; public class HelloWorld extends HttpServlet { |
存為c: omcatwebappsmywebclassesHelloWorld.Java,用Javac編譯后,在地址欄鍵入http://localhost:apache_port/testdir/servlet/HelloWorld 看看結果吧。
如何設定Tomcat作為Windows的服務而啟動?
上面我們已經談到,要使用Tomcat作為Web服務時,必須先手工啟動Tomcat,這顯然不是一個適合Tomcat作為Web服務的方法,在Linux下可以通過修改啟動腳本自動啟動Tomcat,在Windows下則可以設定Tomcat作為Windows的服務而啟動。
我們可以借助工具,使Tomcat作為Windows NT/2000的一個服務:
一、 下載工具,這里作為例子的是gservany--將NT下的一般應用程序作為服務運行的工具。下載網址為http://www.advok.com/gservany.html。將zip文件解壓縮,將gservany.exe放入winntsystem32下
二、在NT/2000的command下輸入:gservany -i tomcat "C:Jakarta-tomcatin" "startup.bat" "C:Jakarta-tomcatin" "shutdown.bat"。其中C:Jakarta-tomcat為Tomcat的安裝目錄。
三、啟動service管理器,會看到tomcat service被裝上。
新聞熱點
疑難解答