Tomcat是Sun的JSWDK(JavaServer Web Development
Kit)中Servlet的運行環境(servlet容器)。Tomcat的源代碼被提供給Jakarta項目,在Open
Source的模型下進行進一步的開發。Tomcat是一個Server容器,同樣的,EJB運行在EJB的容器中。
對于一個初學者來說,可以這樣認為,當在一臺機器上配置好Apache服務器,可利用它響應對HTML頁面的訪問請求。實際上tomcat部分是
apache服務器的擴展,但它是獨立運行的,所以當你運行tomcat時,它實際上作為一個與apache獨立的進程單獨運行的。
這里的訣竅是,當配置正確時,Apache為.html頁面服務,而tomcat實際上運行.jsp頁面和servlet。
如今,基于Web的應用越來越多,傳統的Html已經滿足不了如今的需求。我們需要一個交互式的Web,于是便誕生了各種Web語言。如Asp,
Jsp,Php等。當然,這些語言與傳統的語言有著密切的聯系,如Php基于C和C++語言,Jsp基于Java語言。本文所要介紹的Tomcat即是一
個Jsp和Servlet的運行平臺。
一:什么是Jsp和Servlet
Jsp(JavaServer Page)是在普通Html中嵌入了Java代碼的一個腳本,在這一點上,它與其它的腳本語言(如Php)一樣,但它與其它語言不同的是:其它腳本語言由服務器直接解釋這個腳本,而Jsp則由Jsp容器(如Tomcat)首先將其轉化為Servlet,然后再調用Javac將Servlet編譯為Class文件。最終,服務器解
釋的是Class文件。那么什么是Servlet呢?Servlet其實是一個特殊的Java類,Servlet類一般從HttpServlet類繼承而
來,在這個類中至少要實現doGet或者doPost函數,在這兩個函數中處理來自客戶的請求,然后將結果返回。Servlet和Jsp是Sun公司
J2EE架構中重要的部分。由于基于Java語言,因此其可以方便的調用功能強大的Java API(如JDBC)。
二:Tomcat概述
Tomcat是一個免費的開源的Serlvet容器,它是Apache基金會的Jakarta項目中的一個核心項目,由Apache,Sun和其它
一些公司及個人共同開發而成。由于有了Sun的參與和支持,最新的Servlet和Jsp規范總能在Tomcat中得到體現。Tomcat被
JavaWorld雜志的編輯選為2001年度最具創新的java產品,可見其在業界的地位。
Tomcat
最新版本是4.0x。4.0x與3.x的架構不同,而是重新設計的。Tomcat4.0x中采用了新的Servlet容器:Catalina,完整的實現
了Servlet2.3和Jsp1.2規范。Tomcat提供了各種平臺的版本供下載,可以從http://jakarta.apache.org上下載
其源代碼版或者二進制版。由于Java的跨平臺特性,基于Java的Tomcat也具有跨平臺性。
與傳統的桌面應用程序不同,Tomcat中的應用程序是一個WAR(Web
Archive)文件。WAR是Sun提出的一種Web應用程序格式,與JAR類似,也是許多文件的一個壓縮包。這個包中的文件按一定目錄結構來組織:通
常其根目錄下包含有Html和Jsp文件或者包含這兩種文件的目錄,另外還會有一個WEB-INF目錄,這個目錄很重要。通常在WEB-INF目錄下有一
個web.xml文件和一個classes目錄,web.xml是這個應用的配置文件,而classes目錄下則包含編譯好的Servlet類和Jsp或
Servlet所依賴的其它類(如JavaBean)。通常這些所依賴的類也可以打包成JAR放到WEB-INF下的lib目錄下,當然也可以放到系統的
CLASSPATH中,但那樣移植和管理起來不方便。
在Tomcat中,應用程序的部署很簡單,你只需將你的WAR放到Tomcat的webapp目錄下,Tomcat會自動檢測到這個文件,并將其解
壓。你在瀏覽器中訪問這個應用的Jsp時,通常第一次會很慢,因為Tomcat要將Jsp轉化為Servlet文件,然后編譯。編譯以后,訪問將會很快。
另外Tomcat也提供了一個應用:manager,訪問這個應用需要用戶名和密碼,用戶名和密碼存儲在一個xml文件中。通過這個應用,輔助于Ftp,
你可以在遠程通過Web部署和撤銷應用。當然本地也可以。
Tomcat不僅僅是一個Servlet容器,它也具有傳統的Web服務器的
功能:處理Html頁面。但是與Apache相比,它的處理靜態Html的能力就不如Apache。我們可以將Tomcat和Apache集成到一塊,讓
Apache處理靜態Html,而Tomcat處理Jsp和Servlet。這種集成只需要修改一下Apache和Tomcat的配置文件即可。
另外,Tomcat提供Realm支持。Realm類似于Unix里面的group。在Unix中,一個group對應著系統的一定資源,某個
group不能訪問不屬于它的資源。Tomcat用Realm來對不同的應用(類似系統資源)賦給不同的用戶(類似group)。沒有權限的用戶則不能訪
問這個應用。Tomcat提供三種Realm,1:JDBCRealm,這個Realm將用戶信息存在數據庫里,通過JDBC獲得用戶信息來進行驗證。
2:JNDIRealm,用戶信息存在基于LDAP的服務器里,通過JNDI獲取用戶信息。3:MemoryRealm,用戶信息存在一個xml文件里面,上面講的manager應用驗證用戶時即使用此種Realm。通過Realm我們可以方便地對訪問某個應用的客戶進行驗證。
在Tomcat4中,你還可以利用Servlet2.3提供的事件監聽器功能,來對你的應用或者Session實行監聽。Tomcat也提供其它的一些特征,如與SSL集成到一塊,實現安全傳輸。還有Tomcat也提供JNDI支持,這與那些J2EE應用服務器提供的是一致的。說到這里我們要介紹一下通常所說的應用服務器(如WebLogic)與Tomcat有何區別。應用服務器提供更多的J2EE特征,如EJB,JMS,JAAS等,同時也支持Jsp和Servlet。而Tomcat則功能沒有那么強大,它不提供EJB等支持。但如果與JBoss(一個開源的應用服務器)集成到一塊,則可以實現J2EE的全部功能。既然應用服務器具有Tomcat的功能,那么Tomcat有沒有存在的必要呢?事實上,我們的很多中小應用不需要采用EJB等技術,Jsp和Servlet已經足夠,這時如果用應用服務器就有些浪費了。而Tomcat短小精悍,配置方便,能滿足我們的需求,這種情況下我們自然會選擇Tomcat。
基于Tomcat的開發其實主要是Jsp和Servlet的開發,開發Jsp和Servlet非常簡單,你可以用普通的文本編輯器或者IDE,然后
將其打包成WAR即可。我們這里要提到另外一個工具Ant,Ant也是Jakarta中的一個子項目,它所實現的功能類似于Unix中的make。你需要
寫一個build.xml文件,然后運行Ant就可以完成xml文件中定義的工作,這個工具對于一個大的應用來說非常好,我們只需在xml中寫很少的東西
就可以將其編譯并打包成WAR。事實上,在很多應用服務器的發布中都包含了Ant。另外,在Jsp1.2中,可以利用標簽庫實現Java代碼與Html文件的分離,使Jsp的維護更方便。
Tomcat也可以與其它一些軟件集成起來實現更多的功能。如與上面提到的JBoss集成起來開發EJB,與Cocoon(Apache的另外一個項目)集成起來開發基于Xml的應用,與OpenJMS
集成起來開發JMS應用,除了我們提到的這幾種,可以與Tomcat集成的軟件還有很多。
三:展望
Tomcat確實是一個很好的工具,不僅僅因為其免費,功能強大,更因為其開放性。如今,開源軟件越來越收到人們的重視,Linux就是一個成功的典型。人們不再限于只使用軟件,而且已經關心起軟件的具體實現。我們有理由相信Tomcat會走得更遠。