基本簡介
Tomcat很受廣大程式設計師的喜歡,因為它運行時占用的系統資源小,擴展性好,支持負載平衡與郵件服務等開發套用系統常用的功能;而且它還在不斷的改進和完善中,任何一個感興趣的程式設計師都可以更改它或在其中加入新的功能。Tomcat是一個小型的輕量級套用伺服器,在中小型系統和並發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP程式的首選。對於一個初學者來說,可以這樣認為,當在一台機器上配置好Apache伺服器,可利用它回響對HTML頁面的訪問請求。實際上Tomcat部分是Apache伺服器的擴展,但它是獨立運行的,所以當你運行tomcat時,它實際上作為一個與Apache獨立的進程單獨運行的。
這裡的訣竅是,當配置正確時,Apache為HTML頁面服務,而Tomcat實際上運行JSP頁面和Servlet。另外,Tomcat和IIS、Apache等Web伺服器一樣,具有處理HTML頁面的功能,另外它還是一個Servlet和JSP容器,獨立的Servlet容器是Tomcat的默認模式。不過,Tomcat處理靜態HTML的能力不如Apache伺服器。
版本簡介
版本對照表:
Servlet/JSP Spec Apache Tomcat version
———————————————————————
2.5/2.16.0.14
2.4/2.0 5.5.25
2.3/1.24.1.36
2.2/1.1 3.3.2
容器概述
Tomcat是一個免費的開源的Servlet容器,它是Apache基金會的Jakarta項目中的一個核心項目,由Apache,Sun和其它一些公司及個人共同開發而成。由於有了Sun的參與和支持,最新的Servlet和Jsp規範總能在Tomcat中得到體現。Tomcat被JavaWorld雜誌的編輯選為2001年度最具創新的java產品,可見其在業界的地位。Tomcat4.0x中採用了新的Servlet容器:Catalina,完整的實現了Servlet2.3和Jsp1.2規範。Tomcat提供了各種平台的版本供下載,可以從其官方網站上下載其原始碼版或者二進制版。由於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集成的軟體還有很多。
安裝方法
一、準備工作在開始安裝之前,先準備J2SDK和TOMCAT兩個軟體,如果已經安裝了J2SDK,就只需TOMCAT即可。
使用的軟體如下:
J2SDK v1.4.2_04 -http://java.sun.com/j2se/1.4.2/download.html
TOMCAT v5.0.28 -http://apache.linuxforum.net/dist/jakarta/tomcat-5/v5.0.28/bin/jakarta-tomcat-5.0.28.exe
二、安裝J2SDK
安裝很簡單,只需雙擊下載的檔案,選擇安裝在d:j2sdk1.4.2_04目錄下,設定環境變數,方法如下:
右擊“我的電腦”==》屬性==》高級==》環境變數==》新建
變數名:JAVA_HOME
變數值:d:j2sdk1.4.2_04
三、安裝TOMCAT
運行jakarta-tomcat-5.0.28.exe 按照提示安裝,這裡選擇了Service,就是作為Windows服務來運行。
如果要改變安裝路徑,可以在這個步驟操作,偶這裡選擇安裝在D:Tomcat 5.0
在這裡設定TOMCAT使用的連線埠以及WEB管理界面用戶名和密碼,請確保該連線埠未被其他程式占用
選擇J2SDK的安裝路徑,安裝程式會自動搜尋,如果沒有正確顯示,則可以手工修改,偶這裡改為d:j2sdk1.4.2_04
接下來就開始拷貝檔案了,成功安裝後,程式會提示啟動tomcat並查看readme文檔。Tomcat正常啟動後會在系統欄載入圖示。
在圖示上右鍵滑鼠可以看到一些設定項目
點擊Configure或者雙擊圖示可看到如下顯示,選擇Startup type為automatic自動啟動,這樣每次開機後就會自動運行TOMCAT。另外也可在這個界麵點擊start或stop按鈕來控制tomcat的運行。
四、測試
至此安裝與配置都已完成,打開瀏覽器輸入:http://localhost:8080即可看到TOMCAT的相關信息
五、備註
由於偶將TOMCAT作為service方式安裝,所以CATALINA_HOME環境變數也沒設過,如果讀者不是按照這種方式請設定一個系統環境變數,設定方法同J2SDK。
變數名:CATALINA_HOME
變數值:d:Tomcat 5.0
另外可再增加一個環境變數
變數名:CLASSPATH
變數值:%JAVA_HOME%libdt.jar;%JAVA_HOME%libtool.jar;%JAVA_HOME%libtools.jar;%CATALINA_HOME%commonlibservlet-api.jar;%CATALINA_HOME%commonlibjsp-api.jar
也是因為service安裝的原因,在執行一些程式的時候會出現如下錯誤信息:
Unable to find a javac compiler; com.sun.tools.javac.Main is not on the classpath. Perhaps JAVA_HOME does not point to the JDK
錯誤信息是沒有設定過JAVA_HOME環境變數,讀者也可能碰到過這個問題,明明設定過這個環境變數,在服務里啟動就會出錯,但是在命令行下輸入D:Tomcat 5.0binstartup.bat啟動卻能運行,在服務里啟動沒有讀取JAVA_HOME這個環境變數,而是在配置里定義這個環境變數的,於是偶在Java Options里加入了一句:-Djava.home=d:j2sdk1.4.2_04,再次啟動TOMCAT就OK了,參照下圖:
未來前景
分析公司Forrester Research的分析師這樣評價Tomcat:“Tomcat可能是排在Apache Web 伺服器和MySQL 資料庫之後使用最多的開源產品。”BZ最新的調查研究則為此提供了有力的證據:Apache Tomcat是Java社區最常用的套用伺服器??64%的Java開發者選擇使用Tomcat。Tomcat之所以大受歡迎原因主要有以下五點:
1、Tomcat是Apache的核心項目之一,也被 SUN 視作 Servlet/JSP 容器的一個重要參考實現而加以支持。因此 SUN 最新的Servlet/JSP規範,往往能夠很快地在Tomcat的新版本中得到體現;
2、Tomcat是一個小巧精緻的web套用伺服器,配置、安裝、運行、部署web套用都很簡單,這讓用戶能夠很快地上手使用;
3、開源軟體的生命力,往往與其社區的狀況有緊密的聯繫。在一個健康、活躍的社區,用戶的疑問通常能夠及時地解決,用戶的反饋往往能夠得到有效地處理,這樣會吸引更多的用戶加入到社區中來;反過來,不斷擴大的用戶群,也會促進社區的發展。Tomcat所擁有的優秀社區,對開發者而言,無論用什麼標準來評價,都是充滿吸引力的;
4、編寫良好的文檔,是開發者在開發中最好的幫手之一。Apache在開源社區中,無疑是撰寫文檔方面的佼佼者;
5、因為開源和免費的特性,使得用戶可以自由無障礙地下載、安裝、使用Tomcat。這也是 Tomcat 能夠被廣泛使用的重要原因之一。
Tomcat最初是作為Servlet/JSP 容器的參考實現而進行設計開發的,在性能方面,並沒有做過多的考量。經過幾年的時間,Apache 發現 Servlet/JSP 容器並非只是 J2EE 環境的一部分而已。大量 web 套用並不需要 J2EE 這樣的龐然大物,完全可以將 Tomcat 作為一個單獨的 web 套用伺服器來使用。
這實際也正是Tomcat受歡迎的另一原因所在很多開發者不需要如EJBs、JMS、分散式事務處理等J2EE組件。Rod Johnson在他的《J2EE Development without EJB》一書中,指出了 J2EE 的許多不足之處。比如說,傳統 J2EE(Java EE 5之前的 J2EE)中的 Entity EJB 是不怎么招人喜歡的。在Java EE 5中,過時的Entity EJB 組件被淘汰掉,數據持久化的工作,交給了深受 Hibernate 此類 ORM 工具影響的 JPA 來完成。分散式對象在大多數情況下,也是不合時宜的。
Martin Fowler 在《企業套用架構模式》中分散式對象設計的第一原則就是不要分布你的對象。他給出的建議是將所有的組件部署到集群中的每一個節點中去。因而對於大部分 web 套用,Tomcat 套用伺服器就能滿足需求。通過諸如 Spring-Struts-Hibernate 這樣的組合,可以快速而靈活地開發出能夠滿足複雜業務需求的 web 系統來。在開發實踐中除了Tomcat賀煒還使用過Resin,就二者的性能方面,Resin 2.x 的性能比同時期的 Tomcat 要好不少。但是 Tomcat 自設計實現了全新的 Catalina 引擎之後,在性能方面的問題便持續得到改善。而 Resin 在步入 3.x 版本後,劃分成免費的 Open Source 版本和收費的 Pro 版本。有相當多的測試表明,Resin 3.x OS 的性能,與 Tomcat 5/6 相比要低得多;在配置方面,同 Resin 相比,Tomcat 還是顯得稍微繁瑣一點。對於中國的開發者而言,為了避免系統中出現亂碼,往往還需要對 Tomcat 進行一些額外的配置才可以。而 Resin 在這一方面表現得很好,在絕大多數情況下,基本上不用做任何配置就能正常處理中文而不會出現亂碼的問題。
在 Resin 3.x Pro 中,提供了諸如快取、集群等高級特性,倘若 Tomcat 在這方面有所加強,對於開發者而言無疑是非常美好的一件事情。Tomcat未來的趨勢, Tomcat 無疑是使用最為廣泛的 web 套用伺服器之一,完全有理由相信這樣的情況至少還會持續數年。但是天邊已經出現兩朵小小的、令人不安的烏雲。
Ruby on Rails 所展現的開發方式與它所產生的高生產率,給予 Java 開發者們的震撼很大。如果Java社區不能及時有效地改進web套用開發的方式,那么包括 Tomcat 在內的眾多 Java 社區都會受到 RoR 不小的衝擊。可能正如 Bruce Tate 所預言的那樣,Java 在未來將更加著重於解決更複雜的事情,而普通web套用開發領域,則會逐步讓位給像RoR 這樣高度靈活快速的技術。