Tomcat是在SUN的JSWDK的基礎(chǔ)上發(fā)展起來的另一個(gè)優(yōu)秀的JSP服務(wù)器,它不但支持Servlet,而且還提供了Web服務(wù)器的功能。作為一個(gè)開放源碼的軟件,Tomcat有著自己獨(dú)特的優(yōu)勢,可以和目前大部分的主流服務(wù)器一起工作,而且有著相當(dāng)高的運(yùn)行效率。
通過本章,讀者將會看到:
? Tomcat的基本概念
? 如何讓Tomcat和IIS一起工作
? 如何讓Tomcat和Apache一起工作
? 如何設(shè)定JSP的虛擬目錄
? 如何將Tomcat設(shè)為Windows服務(wù)運(yùn)行
Jakarta-Tomcat概貌
綜述:Tomcat是一個(gè)帶有JSP環(huán)境的servlet容器。servlet容器是一個(gè)根據(jù)用戶的行為可以管理和激活servlet的運(yùn)行時(shí)的shell。
我們可以粗略地將servlet容器分為如下幾類:
獨(dú)立的servlet容器
內(nèi)置有web服務(wù)器的一部分。指使用基于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)部地址空間打開一個(gè)JVM(Java virtual machine)使Java容器得以在內(nèi)部運(yùn)行。如有某個(gè)需要調(diào)用servlet的請求,插件將取得對此請求的控制并將它傳遞(使用JNI)給Java容器。進(jìn)程內(nèi)容器對于多線程、單進(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的請求到達(dá)時(shí),插件將取得對此請求的控制并將其傳遞(使用IPC等)給Java容器,進(jìn)程外容器的反應(yīng)時(shí)間或進(jìn)程外容器引擎不如進(jìn)程內(nèi)容器,但進(jìn)程外容器引擎在許多其他可比的范圍內(nèi)更好(伸縮性、穩(wěn)定性等)。
Tomcat既可作為獨(dú)立的容器(主要是用于開發(fā)與調(diào)試),又可作為對現(xiàn)有服務(wù)器的附加(當(dāng)前支持Apache、IIS和Netscape服務(wù)器)。所以在配置Tomcat時(shí),必須決定如何應(yīng)用它,如果選擇第二或第三種模式,還需要安裝一個(gè)web服務(wù)器接口。
Tomcat與Jserv有何區(qū)別?Tomcat是Jserv嗎?
這是個(gè)常見的誤解。Jserv是Servlet API2.0兼容并與Apache一起使用的容器。Tomcat是一個(gè)完全重寫的并與Servlet API2.2和JSP1.1兼容的容器。
另外,Tomcat使用了一些為Jserv而寫的代碼,特別是Jserv的Apache接口,但這是唯一的相同之處。
怎樣安裝Tomcat的二進(jìn)制版本?
非常簡單,只需:下載 zip/tar.gz 任何壓縮文件,從http://jakarta.apche.org/download/binindex.html處解壓縮此文件到某目錄(如:foo),將會生成一子目錄,名為"tomcat",轉(zhuǎn)換到"tomcat"目錄設(shè)置一新的環(huán)境變量(TOMCAT_HOME)指向你安裝的tomcat的目錄:
WIN32平臺,鍵入: set TOMCAT_HOME=foo/tomcat
Unix平臺:
如是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容器(模式一)
啟動與關(guān)閉Tomcat
使用"bin"目錄中的腳本啟動與關(guān)閉Tomcat。
啟動:
uinx:bin/startup.sh win32:binstartup |
關(guān)閉:
unix:bin/shutdown.sh win32:binshutdown Tomcat目錄結(jié)構(gòu) |
假設(shè)讀者已將Tomcat解壓,這時(shí)將得到下列目錄結(jié)構(gòu):
目錄名 | 描述 |
bin | 包含啟動/關(guān)閉腳本。 |
conf | 包含不同的配置文件,包括 server.xml(Tomcat的主要配置文件)和為不同的Tomcat配置的web應(yīng)用設(shè)置缺省值的文件web.xml。 |
doc | 包含各種Tomcat文檔。 |
lib | 包含Tomcat使用的jar文件。unix平臺此目錄下的任何文件都被加到Tomcat的classpath中。 |
logs | Tomcat擺放日志文件的地方。 |
src | ServletAPI源文件。先別高興,這里只有些必須在Servlet容器內(nèi)實(shí)現(xiàn)的空接口和抽象類。 |
webapps | 包含web項(xiàng)目示例。 |
work | Tomcat自動生成,放置Tomcat運(yùn)行時(shí)的臨時(shí)文件(如編譯后的JSP文件),如果在Tomcat運(yùn)行時(shí)刪除此目錄.JSP頁面將不能運(yùn)行。 |
classes | 你可以創(chuàng)建此目錄來添加一些附加的類到類路徑中,任何你加到此目錄中的類都可在Tomcat的類路徑中找到自身。 |
Tomcat的腳本
Tomcat是一個(gè)Java程序,因此在設(shè)置好幾個(gè)環(huán)境變量后即可用命令行的方式運(yùn)行。然而設(shè)置Tomcat使用的每個(gè)環(huán)境變量和如下的命令行參數(shù)乏味且容易出錯(cuò)。因此,Tomcat開發(fā)組提供了一些腳本使啟動和關(guān)閉Tomcat變得非常輕松。
注意:這些腳本僅僅是個(gè)便利的方法去啟動和關(guān)閉Tomcat。你可修改他們來定制CLASSPATH,環(huán)境變量如PATH、LD_LIBRARY_PATH等等,只要是生成一個(gè)正確的命令行即可。
這些腳本是什么呢?下面列出對一般用戶最重要的腳本。
Tomcat:主腳本。設(shè)置合適的環(huán)境變量,包括CLASSPATH、TOMCAT_HOME以及JAVA_HOME和用適合的命令行參數(shù)啟動Tomcat 。
startup :在后臺啟動Tomcat。它是"tomcat start"命令的替換方式。
shutdown :關(guān)閉Tomcat。它是"tomcat stop"命令的替換方式。
對用戶最重要的腳本是tomcat(tomcat.bat/tomcat.sh)。其他Tomcat相關(guān)的腳本作為一個(gè)簡單的面向單任務(wù)的指向Tomcat腳本(設(shè)置不同的命令行參數(shù)等)的入口。
仔細(xì)考察tomcat.bat/tomcat.sh,它按以下步驟運(yùn)行:
在Unix下的步驟:
如未指定,推測 TOMCAT_HOME
如未指定,推測 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 作為啟始類。同時(shí)也傳遞命令行參數(shù)到org.apache.tomcat.startup.Tomcat ,例如:執(zhí)行start/stop/run 等的操作。另外,此Tomcat進(jìn)程使用指向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的內(nèi)部機(jī)制,這些內(nèi)部機(jī)制深入到了Servlet API的細(xì)節(jié),因此,我們將討論涵蓋這兩個(gè)配置文件在Tomcat關(guān)系環(huán)境中的用法。
Tomcat的配置基于兩個(gè)配置文件:
1.server.xml - Tomcat的全局配置文件,完成兩個(gè)目標(biāo):
(1)提供Tomcat組件的初始配置
(2)說明Tomcat的結(jié)構(gòu)、含義,使得Tomcat通過實(shí)例化組件完成啟動及構(gòu)建自身。
結(jié)構(gòu)、含義的說明是通過元素來實(shí)現(xiàn)的,下面將描述這些元素。
Server:server.xml文件中最重要的元素。Server定義了一個(gè)Tomcat服務(wù)器。一般讀者不用對它擔(dān)心太多。Server元素能包含Logger和ContextManager元素類型。
Logger:此元素定義一個(gè)Logger對象,每個(gè)Logger都有一個(gè)名字去標(biāo)識,也有一個(gè)紀(jì)錄Logger的輸出和冗余級別(描述此日志級別)和包含日志文件的路徑,通常有servlet的Logger(ServletContext.log()處),JSP和Tomcat運(yùn)行時(shí)的Logger。
ContextManager:它說明了一套ContextInterceptor、RequestInterceptor、Context和它們的Connectors的配置及結(jié)構(gòu)。ContextManager有幾個(gè)隨同提供的特性:
a.用來紀(jì)錄調(diào)試信息的調(diào)試級別
b.webapps/、conf/、logs/和所有已定義的環(huán)境的基本位置。用來使Tomcat可以在TOMCAT_HOME外的其他目錄啟動。
c.工作目錄的名字
ContextInterceptor&RequestInterceptor:這些偵聽器(interceptors)偵聽具體發(fā)生在ContextManager中的事件,例如,ContextInterceptor偵聽Tomcat的啟動及終止事件,RequestInterceptor監(jiān)視在它服務(wù)過程中用戶請求需要通過的不同階段。Tomcat的管理員不必知道太多關(guān)于偵聽器的知識;另外,開發(fā)者應(yīng)該知道這是如何在Tomcat中實(shí)現(xiàn)一個(gè)"全局"型的操作(例如安全性及每個(gè)請求日志) 。
Connector:表示一個(gè)到用戶的聯(lián)接,不管是通過web服務(wù)器或直接到用戶瀏覽器(在一個(gè)獨(dú)立配置中)。Connector負(fù)責(zé)管理Tomcat的工作線程和讀/寫連接到不同用戶的端口的請求/響應(yīng)。Connector的配置包含如下信息:
a.句柄類
b.句柄監(jiān)聽的TCP/IP端口
c.句柄服務(wù)器端口的TCP/IP的backlog
Context:每個(gè)Context提供一個(gè)指向你放置你Web項(xiàng)目的Tomcat的下屬目錄。每個(gè)Context包含如下配置:
a.Context放置的路徑,可以是與ContextManager主目錄相關(guān)的路徑
b.紀(jì)錄調(diào)試信息的調(diào)試級別
c.可重載的標(biāo)志。開發(fā)Servlet時(shí),重載更改后的Servlet,這是一個(gè)非常便利的特性
2.web.xml--在Tomcat中配置不同的關(guān)系環(huán)境
有一個(gè)和Tomcat有關(guān)的小"特性"與web.xml有關(guān)。Tomcat可以讓用戶通過將缺省的web.xml放入conf目錄中來定義所有關(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文件)來覆蓋這些缺省值。
如何將Tomcat裝入IIS
IIS,即Internet Information Server,是微軟公司提供的一種功能強(qiáng)大的Web服務(wù)器,它對ASP有著很好的支持,這一點(diǎn)相信很多讀者都已經(jīng)知道。現(xiàn)在,JSP已經(jīng)流行起來,如何才能讓IIS支持該技術(shù)呢?讀者將會從本節(jié)得到答案。
一、安裝環(huán)境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可以正確執(zhí)行
三、將下面的begin和end之間的Jakarta.reg文件裝入機(jī)器,我的Tomcat裝在c:/jakarta-tomcat,你可根據(jù)自己的環(huán)境修改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"> <Parameter name="handler" value="org.apache.tomcat.service.http. HttpConnectionHandler"/> <Parameter name="port" value="80"/> </Connector> |
<Context path="/myweb" docBase="webapps/myweb" debug="0" reloadable="true" > </Context> |
<html> <body> <% 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 看看結(jié)果吧。
如何設(shè)定Tomcat作為Windows的服務(wù)而啟動?
上面我們已經(jīng)談到,要使用Tomcat作為Web服務(wù)時(shí),必須先手工啟動Tomcat,這顯然不是一個(gè)適合Tomcat作為Web服務(wù)的方法,在Linux下可以通過修改啟動腳本自動啟動Tomcat,在Windows下則可以設(shè)定Tomcat作為Windows的服務(wù)而啟動。
我們可以借助工具,使Tomcat作為Windows NT/2000的一個(gè)服務(wù):
一、 下載工具,這里作為例子的是gservany--將NT下的一般應(yīng)用程序作為服務(wù)運(yùn)行的工具。下載網(wǎng)址為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被裝上。
|
新聞熱點(diǎn)
疑難解答
圖片精選