安裝Tomcat之前要先安裝JDK,可從http://java.sun.com上下載最新版本的JDK。Tomcat可從Apache Jakarta Project站點(diǎn)(http://jakarta.apache.org/site/binindex.cgi)上下載,本書使用的Tomcat版本是5.5.7,它需要安裝J2SE 5.0(JDK 1.5)以上的版本才能運(yùn)行。對(duì)于Windows操作系統(tǒng),Tomcat 5.5.7提供了兩種安裝文件,一種是jakarta-tomcat-5.5.7.exe,一種是jakarta-tomcat-5.5.7.zip(如果讀者使用的是Linux系統(tǒng),請下載jakarta-tomcat-5.5.7.tar.gz)。jakarta-tomcat-5.5.7.exe是可執(zhí)行的安裝程序,讀者只需要雙擊這個(gè)文件,就可以開始安裝Tomcat了。在安裝過程中,安裝程序會(huì)自動(dòng)搜尋JDK和JRE的位置。安裝完成后,在Windows系統(tǒng)的“開始”->“程序”菜單下會(huì)添加Apache Tomcat 5.5菜單組。jakarta-tomcat-5.5.7.zip是一個(gè)壓縮包,只需要將它解壓到硬盤上就可以了。在這里,我建議讀者下載jakarta-tomcat-5.5.7.zip壓縮包,通過解壓縮的方式安裝Tomcat,因?yàn)榻鈮嚎s的方式也適用于其他的操作系統(tǒng),例如Linux系統(tǒng)。下面我們主要介紹jakarta-tomcat-5.5.7.zip的安裝與Tomcat運(yùn)行環(huán)境的設(shè)置。
安裝Tomcat
使用WinZip或WinRAR等解壓縮工具將jakarta-tomcat-5.5.7.zip解壓到指定的驅(qū)動(dòng)器和目錄中。筆者是在D盤上直接解壓,產(chǎn)生了目錄jakarta-tomcat-5.5.7,解壓后的文件存放于D:\ jakarta-tomcat-5.5.7下。
Tomcat安裝后的目錄層次結(jié)構(gòu)如圖5-2所示。

圖5-2 Tomcat 5.5.7目錄層次結(jié)構(gòu)
各目錄的用途如表5-1所示。
表5-1 Tomcat的目錄結(jié)構(gòu)及其用途
目 錄
|
用 途
|
/bin
|
存放啟動(dòng)和關(guān)閉Tomcat的腳本文件
|
/common/lib
|
存放Tomcat服務(wù)器及所有Web應(yīng)用程序都可以訪問的JAR文件
|
/conf
|
存放Tomcat服務(wù)器的各種配置文件,其中包括server.xml(Tomcat的主要配置文件)、tomcat-users.xml和web.xml等配置文件
|
/logs
|
存放Tomcat的日志文件
|
/server/lib
|
存放Tomcat服務(wù)器運(yùn)行所需的各種JAR文件
|
/server/webapps
|
存放Tomcat的兩個(gè)Web應(yīng)用程序:admin應(yīng)用程序和manager應(yīng)用程序
|
/shared/lib
|
存放所有Web應(yīng)用程序都可以訪問的JAR文件
|
/temp
|
存放Tomcat運(yùn)行時(shí)產(chǎn)生的臨時(shí)文件
|
/webapps
|
當(dāng)發(fā)布Web應(yīng)用程序時(shí),通常把Web應(yīng)用程序的目錄及文件放到這個(gè)目錄下
|
/work
|
Tomcat將JSP生成的Servlet源文件和字節(jié)碼文件放到這個(gè)目錄下
|
從表5-1中可以看到,/common/lib目錄、/server/lib和/shared/lib目錄下都可以存放JAR文件,它們的區(qū)別在于:
— 在/server/lib目錄下的JAR文件只能被Tomcat服務(wù)器訪問;
— 在/shared/lib目錄下的JAR文件可以被所有的Web應(yīng)用程序訪問,但不能被Tomcat服務(wù)器訪問;
— 在/common/lib目錄下的JAR文件可以被Tomcat服務(wù)器和所有的Web應(yīng)用程序訪問。
此外,對(duì)于后面將要介紹的Java Web應(yīng)用程序,在它的WEB-INF目錄下,也可以建立lib子目錄,在lib子目錄下可以存放各種JAR文件,這些JAR文件只能被當(dāng)前Web應(yīng)用程序所訪問。
運(yùn)行Tomcat
在Tomcat安裝目錄下的bin子目錄中,有一些批處理文件(以.bat作為后綴名的文件),其中的startup.bat就是啟動(dòng)Tomcat的腳本文件,用鼠標(biāo)雙擊這個(gè)文件,將會(huì)看到如圖5-3所示的畫面。

圖5-3 運(yùn)行Tomcat提示出錯(cuò)信息
筆者以前碰到過很多學(xué)員,在初次運(yùn)行Tomcat時(shí),看到如圖5-3所示的信息就不知所措了。有的學(xué)員以前還配置過Tomcat,但是再次使用的時(shí)候,由于忘記了上次是如何配置的,同樣感覺無從下手。
我們在學(xué)習(xí)軟件開發(fā)時(shí),一定要養(yǎng)成查看錯(cuò)誤提示信息,進(jìn)而根據(jù)錯(cuò)誤提示解決問題的良好習(xí)慣。筆者第一次配置Tomcat時(shí),就是根據(jù)錯(cuò)誤提示信息一步一步配置成功的。很多人一看見錯(cuò)誤信息,立即單擊“確定”按鈕,這樣就錯(cuò)過了提示信息。當(dāng)看到錯(cuò)誤信息時(shí),首先不要慌張和無所適從,仔細(xì)看清楚錯(cuò)誤提示,不要著急單擊按鈕。
查看圖5-3中的錯(cuò)誤提示信息,可以看到這樣一句話“The JAVA_HOME environment variable is not defined”,從畫面中可以看到,在執(zhí)行到“Using JAVA_HOME”這句時(shí)出現(xiàn)了錯(cuò)誤,由此,我們可以想到,出錯(cuò)的原因可能是因?yàn)闆]有設(shè)置JAVA_HOME環(huán)境變量。那么JAVA_HOME環(huán)境變量的值應(yīng)該是什么呢?很容易就能想到應(yīng)該是JDK所在的目錄,在筆者的機(jī)器上,JDK所在的目錄是D:\Java\jdk1.5.0_01。
在Windows 2000操作系統(tǒng)下設(shè)置環(huán)境變量的步驟如下。
① 在桌面“我的電腦”上單擊右鍵,選擇“屬性”,出現(xiàn)如圖5-4所示的畫面。

圖5-4 “我的電腦”屬性
② 單擊“高級(jí)”選項(xiàng)卡,選擇“環(huán)境變量(E)…”,如圖5-5和圖5-6所示。


圖5-5 “高級(jí)”選項(xiàng)卡 圖5-6 “環(huán)境變量”對(duì)話框
③ 在“系統(tǒng)變量”下方單擊“新建”按鈕。在“變量名”中輸入“JAVA_HOME”,在變量值中輸入JDK所在的目錄“D:\Java\jdk1.5.0_01”,然后單擊“確定”按鈕,如圖5-7所示。

圖5-7 新建JAVA_HOME環(huán)境變量
④ 最后在“環(huán)境變量”對(duì)話框上單擊“確定”按鈕,結(jié)束JAVA_HOME環(huán)境變量的設(shè)置。
我們再一次轉(zhuǎn)到D:\ jakarta-tomcat-5.5.7\bin目錄下,用鼠標(biāo)雙擊startup.bat文件,可以看到如圖5-8所示的啟動(dòng)信息。

圖5-8 Tomcat啟動(dòng)信息
然后,打開瀏覽器,在地址欄中輸入http://localhost:8080/(localhost表示本地機(jī)器,8080是Tomcat默認(rèn)監(jiān)聽的端口號(hào)),將出現(xiàn)如圖5-9所示的Tomcat頁面。

圖5-9 Tomcat的默認(rèn)主頁
注意圖5-9中鼠標(biāo)(小手形狀)指向的鏈接——Tomcat Documentation,單擊將進(jìn)入Tomcat的文檔頁面,有關(guān)Tomcat的幫助信息可以在文檔頁面中找到;讀者也可以直接訪問Tomcat的文檔,文檔首頁的位置是Tomcat安裝目錄下的webapps\tomcat-docs\index.html。如果要關(guān)閉Tomcat服務(wù)器,可以用鼠標(biāo)雙擊D:\ jakarta-tomcat-5.5.7\bin目錄下的shutdown.bat文件。
如果你機(jī)器上的Tomcat啟動(dòng)失敗,有可能是因?yàn)門CP的8080端口被其他應(yīng)用程序所占用,如果你知道是哪一個(gè)應(yīng)用程序占用了8080端口,那么先關(guān)閉此程序。如果你不知道或者不想關(guān)閉占用8080端口的應(yīng)用程序,你可以修改Tomcat默認(rèn)監(jiān)聽的端口號(hào)。
前面介紹了,Tomcat安裝目錄下的conf子目錄用于存放Tomcat服務(wù)器的各種配置文件,其中的server.xml是Tomcat的主要配置文件,這是一個(gè)格式良好的XML文檔,在這個(gè)文件中可以修改Tomcat默認(rèn)監(jiān)聽的端口號(hào)。用UltraEdit(你可以用記事本程序或其他的文本編輯工具)打開server.xml,找到修改8080端口的地方。讀者也許要問了,“這個(gè)配置文件,我都不熟悉,怎么知道在哪里修改端口號(hào)呢?”對(duì)于初次接觸server.xml的讀者,確實(shí)不了解這個(gè)文件的結(jié)構(gòu),但是我們應(yīng)該有一種開放的思路,既然Tomcat的監(jiān)聽端口號(hào)是在server.xml中配置,那么只要我們在這個(gè)文件中查找“8080”這些數(shù)字字符序列,不就能找到修改端口號(hào)的地方了嗎!在UltraEdit中,同時(shí)按下鍵盤上的“Ctrl”和“F”鍵,出現(xiàn)如圖5-10所示的查找對(duì)話框。

圖5-10 UltraEdit查找對(duì)話框
然后在“查找內(nèi)容”中輸入“8080”,單擊“查找下一個(gè)”按鈕。重復(fù)這個(gè)過程,直到找到如圖5-11所示的在server.xml中配置端口號(hào)位置。

圖5-11 server.xml中配置端口號(hào)的位置
找到后,如果我們不能確定此處就是修改端口號(hào)的地方,也沒有關(guān)系,可以先嘗試著修改一下端口號(hào),然后啟動(dòng)Tomcat,如果啟動(dòng)成功,也就證明了我們修改的地方是正確的。學(xué)習(xí)時(shí),我們應(yīng)該養(yǎng)成這種探索并不斷實(shí)驗(yàn)的精神。在這里,我們可以修改端口號(hào)為8000(讀者可以根據(jù)自己機(jī)器的配置選擇一個(gè)端口號(hào)),然后保存。再次啟動(dòng)Tomcat,在Tomcat啟動(dòng)完畢后,打開瀏覽器,在地址欄中輸入http://localhost:8000/(讀者根據(jù)自己設(shè)置的端口號(hào)做相應(yīng)的修改),就可以看到Tomcat的默認(rèn)主頁了。關(guān)閉Tomcat服務(wù)器時(shí),執(zhí)行bin目錄下的shutdown.bat文件。
Tomcat啟動(dòng)分析
在本節(jié)中我們將通過對(duì)Tomcat啟動(dòng)過程的分析,來幫助讀者更好地理解和掌握Tomcat。
用文本編輯工具打開用于啟動(dòng)Tomcat的批處理文件startup.bat,仔細(xì)閱讀,可以發(fā)現(xiàn),在這個(gè)文件中,首先判斷CATALINA_HOME環(huán)境變量是否為空,如果為空,就將當(dāng)前目錄設(shè)為CATALINA_HOME的值,接著判斷當(dāng)前目錄下是否存在bin\catalina.bat,如果文件不存在,將當(dāng)前目錄的父目錄設(shè)為CATALINA_HOME的值,根據(jù)筆者機(jī)器上Tomcat安裝目錄的層次結(jié)構(gòu),最后CATALINA_HOME的值被設(shè)為Tomcat的安裝目錄。如果環(huán)境變量CATALINA_HOME已經(jīng)存在,則通過這個(gè)環(huán)境變量調(diào)用bin目錄下的“catalina.bat start”命令。通過這段分析,我們了解到兩個(gè)信息,一是Tomcat啟動(dòng)時(shí),需要查找CATALINA_HOME這個(gè)環(huán)境變量,如果在當(dāng)前目錄下調(diào)用startup.bat,Tomcat會(huì)自動(dòng)設(shè)置CATALINA_HOME;二是執(zhí)行startup.bat命令,實(shí)際上執(zhí)行的是“catalina.bat start”命令。
如果我們不是在bin目錄作為當(dāng)前目錄時(shí)調(diào)用startup.bat,就會(huì)出現(xiàn)如圖5-12所示的錯(cuò)誤信息(在bin目錄的父目錄下調(diào)用除外)。

圖5-12 在其他目錄下啟動(dòng)Tomcat出錯(cuò)
要在其他目錄下也能啟動(dòng)Tomcat,就需要設(shè)置CATALINA_HOME環(huán)境變量,你可以將CATALINA_HOME添加到Windows 2000系統(tǒng)的環(huán)境變量中,其值就是Tomcat的安裝目錄,在筆者的機(jī)器上安裝目錄是D:\jakarta-tomcat-5.5.7,添加環(huán)境變量的過程和前述添加JAVA_HOME環(huán)境變量的過程是一樣的。如果你不想在系統(tǒng)的環(huán)境變量中添加,也可以直接在startup.bat文件中進(jìn)行設(shè)置。下面是在startup.bat文件中設(shè)置CATALINA_HOME后的文件片段:
……
rem $Id: shutdown.bat,v 1.5 2004/05/27 15:05:01 yoavs Exp $
rem ---------------------------------------------------------------------------
set CATALINA_HOME=D:\jakarta-tomcat-5.5.7
rem Guess CATALINA_HOME if not defined
set CURRENT_DIR=%cd%
if not "%CATALINA_HOME%" == "" goto gotHome
set CATALINA_HOME=%CURRENT_DIR%
……
注意以粗體顯示的這句話的作用就是設(shè)置CATALINA_HOME環(huán)境變量。在它的下面就可以判斷CATALINA_HOME是否為空了。如果你找不準(zhǔn)位置,干脆將設(shè)置CATALINA_HOME環(huán)境變量的這句話放置到文件的第一行。JAVA_HOME環(huán)境變量也可以采用同樣的方式進(jìn)行設(shè)置。不過,如果你要在其他目錄下,利用shutdown.bat來關(guān)閉Tomcat服務(wù)器,你也需要在shutdown.bat文件中設(shè)置CATALINA_HOME和JAVA_HOME這兩個(gè)環(huán)境變量,設(shè)置變量的位置和startup.bat文件一樣,都是在判斷CATALINA_HOME是否為空之前。當(dāng)然,為了一勞永逸,避免重裝Tomcat后還要進(jìn)行設(shè)置(需要是同一版本的Tomcat安裝在同一位置),我們最好還是將CATALINA_HOME和JAVA_HOME這兩個(gè)環(huán)境變量添加到Windows 2000系統(tǒng)的環(huán)境變量中。
有的讀者可能會(huì)對(duì)設(shè)置Tomcat安裝目錄的環(huán)境變量的名字是CATALINA_HOME而感到奇怪,按照以前設(shè)置的環(huán)境變量來看,JAVA_HOME表示JDK的安裝目錄,那么應(yīng)該用TOMCAT_HOME來表示Tomcat的安裝目錄,可為什么要使用CATALINA_HOME呢?實(shí)際上,在Tomcat 4以前,用的就是TOMCAT_HOME來表示Tomcat的安裝目錄,在Tomcat 4以后,采用了新的Servlet容器Catalina,所以環(huán)境變量的名字也改為了CATALINA_HOME。
提示:在Windows系統(tǒng)下環(huán)境變量的名字是與大小寫無關(guān)的,也就是說JAVA_HOME和java_home是相同的。
了解了startup.bat文件以后,我們再來看看真正負(fù)責(zé)啟動(dòng)Tomcat服務(wù)器的catalina.bat文件。通過分析catalina.bat文件,我們發(fā)現(xiàn)它還調(diào)用了一個(gè)文件setclasspath.bat。在setclasspath.bat文件中,它檢查JAVA_HOME環(huán)境變量是否存在,并通過設(shè)置的環(huán)境變量JAVA_HOME,找到j(luò)ava.exe,用于啟動(dòng)Tomcat。在這個(gè)文件中,還設(shè)置了其他的一些變量,分別表示JDK中的一些工具,有興趣的讀者可以自行分析一下這個(gè)文件。在執(zhí)行完setclasspath.bat之后,catalina.bat剩下的部分就開始了Tomcat服務(wù)器的啟動(dòng)進(jìn)程。
直接執(zhí)行catalina.bat時(shí),需要帶上命令行的參數(shù)。讀者可以在命令提示符窗口下,執(zhí)行catalina.bat,就會(huì)打印出catalina.bat命令的各種參數(shù)及其含義,如圖5-13所示。

圖5-13 catalina.bat的各參數(shù)信息
其中常用的參數(shù)是start、run和stop,參數(shù)start表示在一個(gè)單獨(dú)的窗口中啟動(dòng)Tomcat服務(wù)器,參數(shù)run表示在當(dāng)前窗口中啟動(dòng)Tomcat服務(wù)器,參數(shù)stop表示關(guān)閉Tomcat服務(wù)器。我們執(zhí)行startup.bat,實(shí)際上執(zhí)行的就是“catalina.bat start”命令;執(zhí)行shutdown.bat,實(shí)際上執(zhí)行的是“catalina.bat stop”命令。“catalina.bat run”命令有時(shí)候是非常有用的,特別是當(dāng)我們需要查看Tomcat的出錯(cuò)信息時(shí)。我們在開發(fā)JSP程序時(shí),經(jīng)常會(huì)碰到自己機(jī)器上的8080端口號(hào)被別的應(yīng)用程序占用,或者在配置server.xml時(shí)出現(xiàn)錯(cuò)誤,當(dāng)通過startup.bat(相當(dāng)于執(zhí)行“catalina.bat start”)啟動(dòng)Tomcat服務(wù)器時(shí),會(huì)導(dǎo)致啟動(dòng)失敗,因?yàn)槭窃趩为?dú)的窗口中啟動(dòng)Tomcat服務(wù)器,所以一旦啟動(dòng)失敗,命令提示符窗口就自動(dòng)關(guān)閉了,程序運(yùn)行中輸出的出錯(cuò)信息也隨之消失,而且沒有任何的日志信息,這就使得我們沒有辦法找出錯(cuò)誤原因。當(dāng)出現(xiàn)錯(cuò)誤時(shí),我們可以換成“catalina.bat run”命令再次啟動(dòng),一旦啟動(dòng)失敗,僅僅是Tomcat服務(wù)器異常終止,但是在當(dāng)前的命令提示符窗口下仍然保留了啟動(dòng)時(shí)的出錯(cuò)信息,這樣我們就可以查找啟動(dòng)失敗的原因了。
Tomcat的體系結(jié)構(gòu)
Tomcat服務(wù)器是由一系列可配置的組件構(gòu)成的,其中核心組件是Catalina Servlet容器,它是所有其他Tomcat組件的頂層容器。Tomcat各組件之間的層次關(guān)系如圖5-14所示。

圖5-14 Tomcat組件之間的層次結(jié)構(gòu)
我們下面簡單介紹一下各組件在Tomcat服務(wù)器中的作用。
(1)Server
Server表示整個(gè)的Catalina Servlet容器。Tomcat提供了Server接口的一個(gè)默認(rèn)實(shí)現(xiàn),這通常不需要用戶自己去實(shí)現(xiàn)。在Server容器中,可以包含一個(gè)或多個(gè)Service組件。
(2)Service
Service是存活在Server中的內(nèi)部組件,它將一個(gè)或多個(gè)連接器(Connector)組件綁定到一個(gè)單獨(dú)的引擎(Engine)上。在Server中,可以包含一個(gè)或多個(gè)Service組件。Service也很少由用戶定制,Tomcat提供了Service接口的默認(rèn)實(shí)現(xiàn),而這種實(shí)現(xiàn)既簡單又能滿足應(yīng)用。
(3)Connector
連接器(Connector)處理與客戶端的通信,它負(fù)責(zé)接收客戶請求,以及向客戶返回響應(yīng)結(jié)果。在Tomcat中,有多個(gè)連接器可以使用。
(4)Engine
在Tomcat中,每個(gè)Service只能包含一個(gè)Servlet引擎(Engine)。引擎表示一個(gè)特定的Service的請求處理流水線。作為一個(gè)Service可以有多個(gè)連接器,引擎從連接器接收和處理所有的請求,將響應(yīng)返回給適合的連接器,通過連接器傳輸給用戶。用戶可以通過實(shí)現(xiàn)Engine接口提供自定義的引擎,但通常不需要這么做。
(5)Host
Host表示一個(gè)虛擬主機(jī),一個(gè)引擎可以包含多個(gè)Host。用戶通常不需要?jiǎng)?chuàng)建自定義的Host,因?yàn)門omcat給出的Host接口的實(shí)現(xiàn)(類StandardHost)提供了重要的附加功能。
(6)Context
一個(gè)Contex表示了一個(gè)Web應(yīng)用程序,運(yùn)行在特定的虛擬主機(jī)中。什么是Web應(yīng)用程序呢?在Sun公司發(fā)布的Java Servlet規(guī)范中,對(duì)Web應(yīng)用程序做出了如下的定義:“一個(gè)Web應(yīng)用程序是由一組Servlet、HTML頁面、類,以及其他的資源組成的運(yùn)行在Web服務(wù)器上的完整的應(yīng)用程序。它可以在多個(gè)供應(yīng)商提供的實(shí)現(xiàn)了Servlet規(guī)范的Web容器中運(yùn)行”。一個(gè)Host可以包含多個(gè)Context(代表Web應(yīng)用程序),每一個(gè)Context都有一個(gè)惟一的路徑。用戶通常不需要?jiǎng)?chuàng)建自定義的Context,因?yàn)門omcat給出的Context接口的實(shí)現(xiàn)(類StandardContext)提供了重要的附加功能。
下面我們通過圖5-15來幫助讀者更好地理解Tomcat服務(wù)器中各組件的工作流程。

圖5-15 Tomcat各組件的工作流程
要了解這些組件的其他信息,可以看下面的頁面:
%CATALINA_HOME%\webapps\tomcat-docs\architecture\index.html
我們可以在conf目錄下的server.xml文件中對(duì)這些組件進(jìn)行配置,讀者打開server.xml文件,就可以看到元素名和元素之間的嵌套關(guān)系,與Tomcat服務(wù)器的組件是一一對(duì)應(yīng)的,server.xml文件的根元素就是server。關(guān)于server.xml配置文件中的各元素及其屬性的含義,請參見附錄C。
在Tomcat中,提供了各組件的接口及其實(shí)現(xiàn)類,如果你要替代Tomcat中的某個(gè)組件,只需要根據(jù)該組件的接口或類的說明,重寫該組件,并進(jìn)行配置即可。圖5-16是Tomcat各組件的類圖。

在類圖的接口名或類名下面是該接口或該類所在的包,這些接口和類都在%CATALINA_HOME%\ server\lib\catalina.jar文件中。對(duì)Tomcat服務(wù)器的實(shí)現(xiàn)感興趣的讀者,可以從http://tomcat.apache.org/上下載Tomcat的源代碼。
提示:由于Apache軟件基金會(huì)并不是一個(gè)商業(yè)性的組織,所以文檔更新的速度有時(shí)候跟不上版本更新的速度。在Tomcat 5.5.7中,就可以發(fā)現(xiàn)文檔與其源碼實(shí)現(xiàn)有不一致的地方。在Tomcat 5.5.x中,去掉了org.apache.catalina.Connector接口及其相關(guān)的實(shí)現(xiàn)類,而直接以org.apache.catalina.connector.Connector類來代替。我們在看Tomcat的文檔時(shí),最好結(jié)合其API文檔一起看,這樣才能保證了解的信息是完整的和準(zhǔn)確的。
Tomcat提供了兩個(gè)管理程序:admin和manager。其中admin用于管理和配置Tomcat服務(wù)器,manager用于管理部署到Tomcat服務(wù)器中的Web應(yīng)用程序。
admin Web應(yīng)用程序
admin Web應(yīng)用程序需要單獨(dú)下載,與Tomcat在同一個(gè)下載頁面,鏈接名是Admin zip,下載后的文件名是jakarta-tomcat-5.5.7-admin.zip,解壓縮后,覆蓋Tomcat安裝目錄下的同名目錄。admin Web應(yīng)用程序位于%CATALINA_HOME%\server\webapps\admin目錄下。
要訪問admin Web應(yīng)用程序,需要添加具有管理員權(quán)限的賬號(hào),編輯%CATALINA_HOME%\ conf\tomcat-users.xml文件,在<tomcat-users>元素中添加如下內(nèi)容:
<user username="admin" password="12345678" roles="admin"/>
其中用戶名和密碼可以根據(jù)自己的喜好設(shè)置。
啟動(dòng)Tomcat服務(wù)器,打開瀏覽器,在地址欄中輸入:
http://localhost:8080/admin/
將出現(xiàn)如圖5-17所示的頁面。

圖5-17 admin Web應(yīng)用程序的登錄界面
也可以在Tomcat的默認(rèn)主頁的左上方單擊“Tomcat Administration”鏈接,進(jìn)入admin登錄頁面。輸入用戶名admin,密碼12345678,單擊“Login”按鈕,將看到如圖5-18所示的頁面。

圖5-18 admin Web應(yīng)用程序的主頁面
在這個(gè)頁面中,可以進(jìn)行Tomcat服務(wù)器的各項(xiàng)配置。
5.6.2 manager Web應(yīng)用程序
manager Web應(yīng)用程序包含在Tomcat的安裝包中。和admin程序一樣,需要添加訪問manager Web應(yīng)用程序的管理員賬號(hào),編輯%CATALINA_HOME%\conf\tomcat-users.xml文件,在<tomcat-users>元素中添加如下內(nèi)容:
<user username="manager" password="12345678" roles="manager"/>
其中用戶名和密碼可以根據(jù)自己的喜好設(shè)置。
啟動(dòng)Tomcat服務(wù)器,打開瀏覽器,在地址欄中輸入:
http://localhost:8080/manager/html/
將出現(xiàn)如圖5-19所示的頁面。

圖5-19 manager Web應(yīng)用程序的登錄界面
也可以在Tomcat的默認(rèn)主頁的左上方單擊“Tomcat Manager”鏈接,訪問manager程序。輸入用戶名manager,密碼12345678,單擊“確定”按鈕,將看到如圖5-20所示的頁面。

圖5-20 manager Web應(yīng)用程序的主頁面
在這個(gè)頁面中,你可以部署、啟動(dòng)、停止、重新加載、卸載Web應(yīng)用程序。注意在兩個(gè)圓角矩形框中的路徑“/jsp-examples”和“/servlets-examples”,單擊這兩個(gè)路徑,將看到Tomcat提供的JSP和Servlet的例子程序,這些程序可以作為學(xué)習(xí)JSP和Servlet的參考。不過在這兩個(gè)路徑下,只列出了部分的例子程序,完整的JSP和Servlet例子程序位于下面的兩個(gè)目錄中:
%CATALINA_HOME%\webapps\jsp-examples
%CATALINA_HOME%\webapps\servlets-examples
關(guān)于JSP中的錯(cuò)誤頁面處理
通常JSP 在執(zhí)行時(shí),在兩個(gè)階段下會(huì)發(fā)生錯(cuò)誤。
JSP 網(wǎng)頁 → Servlet 類
Servlet 類處理每一個(gè)請求時(shí)
在第一階段時(shí),產(chǎn)生的錯(cuò)誤我們稱為Translation Time Processing Errors;在第二階段時(shí),產(chǎn)生的錯(cuò)誤我們稱為Client Request Time Processing Errors。接下來我們針對(duì)這兩個(gè)階段產(chǎn)生錯(cuò)誤的原因和處理方法,進(jìn)行介紹。
1、 Translation Time Processing Errors
Translation Time Processing Errors 產(chǎn)生的主要原因:我們在撰寫JSP時(shí)的語法有錯(cuò)誤,導(dǎo)致JSP Container 無法將JSP 網(wǎng)頁編譯成Servlet 類文件( .class),例如:500 Internal Server
Error,500 是指HTTP 的錯(cuò)誤狀態(tài)碼,因此是Server Error。
通常產(chǎn)生這種錯(cuò)誤時(shí),可能是JSP 的語法有錯(cuò)誤,或是JSP Container 在一開始安裝、設(shè)定時(shí),有不適當(dāng)?shù)那樾伟l(fā)生。解決的方法就是再一次檢查程序是否有寫錯(cuò)的,不然也有可能是JSPContainer 的bug。
2、 Client Request Time Processing Errors
Client Request Time Processing Errors 錯(cuò)誤的發(fā)生,往往不是語法錯(cuò)誤,而可能是邏輯上的錯(cuò)誤,簡單地說,你寫一個(gè)計(jì)算除法的程序,當(dāng)用戶輸入的分母為零時(shí),程序會(huì)發(fā)生錯(cuò)誤并拋出異常(Exception),交由異常處理(Exception Handling)機(jī)制做適當(dāng)?shù)奶幚怼?/span>對(duì)于這種錯(cuò)誤的處理,我們通常會(huì)交給errorPage 去處理。下面舉個(gè)例子:
使用errorPage 的范例程序 :ErrorPage.jsp
<%@ page contentType="text/html;charset=GB2312" errorPage="Error.jsp" %> //設(shè)置Error.jsp頁為本頁的錯(cuò)誤處理頁
<html>
<head>
<title>CH4 - ErrorPage.jsp</title>
</head>
<body>
<h2>errorPage 的范例程序</h2>
<%!
private double toDouble(String value)
{
return(Double.valueOf(value).doubleValue());
}
%>
<%
double num1 = toDouble(request.getParameter("num1"));
double num2 = toDouble(request.getParameter("num2"));
%>
您傳入的兩個(gè)數(shù)字為:<%= num1 %> 和 <%= num2 %><br>
兩數(shù)相加為 <%= (num1+num2) %>
</body>
</html>
ErrorPage.jsp 程序中,我們使用page 指令中的errorPage 屬性,告訴JSP Container,如果在程序中有錯(cuò)誤產(chǎn)生時(shí)(指的是servlet運(yùn)行時(shí)產(chǎn)生的錯(cuò)誤或顯示用throw拋出的異常),會(huì)自動(dòng)交給Error.jsp 處理。
Error.jsp
<%@ page contentType="text/html;charset=GB2312" isErrorPage="true" %> //設(shè)置該頁為錯(cuò)誤處理頁
<%@ page import="java.io.PrintWriter" %>
<html>
<head>
<title>CH4 - Error.jsp</title>
</head>
<body>
<h2>errorPage 的范例程序</h2>
<p>ErrorPage.jsp 錯(cuò)誤產(chǎn)生:<I><%= exception %></I></p><br>
<pre>
問題如下:<% exception.printStackTrace(new PrintWriter(out)); %> //輸出錯(cuò)誤的原因
</pre>
</body>
</html>
Error.jsp 主要處理ErrorPage.jsp 所產(chǎn)生的錯(cuò)誤,所以在ErrorPage.jsp 中page 指令的屬性errorPage設(shè)為Error.jsp,因此,若ErrorPage.jsp有錯(cuò)誤發(fā)生時(shí),會(huì)自動(dòng)轉(zhuǎn)到Error.jsp來處理。Error.jsp 必須設(shè)定page 指令的屬性isErrorPage為true,因?yàn)?/span>Error.jsp是專門用來處理錯(cuò)誤的網(wǎng)頁。設(shè)定page 指令的屬性isErrorPage為true后,在Error.jsp里就可以使用exception異常類了。
由于在這個(gè)程序中并沒有做一個(gè)窗體來輸入兩個(gè)數(shù)字,所以必須手動(dòng)在URL后輸入num1和num2的值,如http://localhost:8080/ErrorPage.jsp?num1=100&num2=245。當(dāng)ErrorPage.jsp 產(chǎn)生錯(cuò)誤時(shí)(如加數(shù)為字符串型),就會(huì)交由Error.jsp 去處理,所以我們看到的結(jié)果,不
再是原始的服務(wù)器提示的亂七把糟的錯(cuò)誤提示,將是執(zhí)行Error.jsp 后的結(jié)果。
在jsp中顯式地拋出異常時(shí),系統(tǒng)也會(huì)轉(zhuǎn)到錯(cuò)誤處理頁面:
<%@page language="java" contentType="text/html;charset=GBK" import= "java.util.* " errorPage="exception.jsp"
%>
<jsp:useBean id="user" scope="session" class="S_userObj"/>
<%
if(user= =null)
throw new Exception("您沒有登陸或者登陸超時(shí),請重新登陸");
。。。 。。。
當(dāng)user為空時(shí)系統(tǒng)會(huì)自動(dòng)轉(zhuǎn)到錯(cuò)誤處理頁面。
總之,以下情況jsp會(huì)轉(zhuǎn)到錯(cuò)誤處理頁面:
前提:jsp成功的轉(zhuǎn)換到了servlet,轉(zhuǎn)換過程中沒有發(fā)生錯(cuò)誤。
當(dāng)servlet運(yùn)行時(shí),程序中碰到異常。
當(dāng)servlet運(yùn)行時(shí),程序控制轉(zhuǎn)到了顯式拋出的異常。例如:if(…) throw new exception();