基本簡介
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.1 6.0.14
2.4/2.0 5.5.25
2.3/1.2 4.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 這樣高度靈活快速的技術。



















