手冊主要涵蓋以下內(nèi)容:應用Tomcat設置開發(fā)環(huán)境、組織源代碼、build和test應用程序(application),這些是web應用程序開發(fā)的基本步驟。
手冊不討論web應用程序開發(fā)中的架構(gòu)或推薦的編程經(jīng)驗等方面的內(nèi)容,也不準備對討論中涉及到的開發(fā)工具的使用操作提供更深入的說明。對附加資源的參考包含在下面的各小節(jié)中。
手冊中的討論,主要是針對那些使用文本編輯工具、加上命令行工具來開發(fā)、調(diào)試應用程序的開發(fā)人員的。如此,這也是一個最基本的建議,如果你正在使用一個IDE工具,那么建議你還是關(guān)注一下環(huán)境下的底層信息。當然在你使用基于Windows或Unix的開發(fā)環(huán)境時將更容易了。
http://java.sun.com/products/jsp/download.html
JSP(JavaServer Pages規(guī)范,Version 2.0
此規(guī)范說明了標準的JSP技術(shù)實現(xiàn)(web容器)應該提供的編程環(huán)境。JSP規(guī)范和Servlet API規(guī)范一起,描述一個可移植的API page中允許包含哪些內(nèi)容。關(guān)于腳本、標簽擴展、packaging JSP頁等信息也是非常有用的。
http://java.sun.com/products/servlet/download.html
Servlet API規(guī)范,Version 2.4。
此規(guī)范說明了所有遵循此規(guī)范的servlet容器必須提供的編程環(huán)境信息。特別的,你很需要這個文檔來理解web應用程序的目錄結(jié)構(gòu)、部署文件、映射請求URIs到servlets的方法、可安全管理的容器、及web應用程序部署描述器web.xml的語法等。
為了使用Tomcat 5開發(fā)web應用程序,你首先要安裝它。下面各小節(jié)簡要的說明了必要的安裝步驟。
JDK
Tomcat 5.5被設計運行在J2SE 5.0之上,但它也可以運行在JDK1.4之上,只是要求使用兼容包。
對各種平臺的兼容JDKs參見http://java.sun.com/j2se/。
Tomcat
二進制Tomcat服務器安裝包從http://java.sun.com/j2se/ 下載。手冊假定你是使用最新的Tomcat 5發(fā)布版本。
在手冊的以后內(nèi)容中,例子shell腳本假定你已經(jīng)設置環(huán)境變量CATALINA_HOME,該變量指定Tomcat 5的安裝路徑和目錄。
Ant
Ant build工具的二進制安裝包從http://ant.apache.org/bindownload.cgi 下載。手冊假定你使用的是Ant1.4或更高版本。操作說明應該也同樣適應于更高版本,但沒有經(jīng)過測試。
從上面提供的網(wǎng)址下載并安裝Ant,然后把Ant的bin 目錄增加到PATH 環(huán)境變量中。這樣做了之后,你就可以執(zhí)行ant shell命令了。
CVS
除了上面說明的工具之外,強烈建議你下載安裝source code control(源代碼控制、版本管理)工具來維護構(gòu)建應用程序的源代碼文件,如CVS(Concurrent Version System)。除了服務器程序外,你也需要合適的客戶端工具,以用于check out源代碼文件,和check in修改版本。
在說明如何組織你的源代碼目錄之前,需要先檢查一下web應用程序的運行時組織結(jié)構(gòu)。和Servlet API規(guī)范的之前版本相比,規(guī)范2.2在服務器平臺一致性方面僅有很小的改動。但是,2.2規(guī)范要求的遵循該規(guī)范的服務器必須接受Web Application Archive作為標準格式,這將在下面進行討論。
web應用程序的標準規(guī)劃被定義為層次結(jié)構(gòu)的目錄和文件。該層次結(jié)構(gòu)有兩種組織形式。一種是"unpacked"方式,這種情況下每個目錄和文件分散的保存在文件系統(tǒng)中;另一種是"packed"方式,如Web ARchive或稱WAR文件。第一種方式在開發(fā)期間比較有用,而后一種方式主要用于應用程序的發(fā)布安裝。
web應用程序?qū)哟谓Y(jié)構(gòu)的頂級目錄也即應用程序的document root(根文檔),通常在該位置放置包含應用程序用戶界面的HTML文件和JSP頁面。當系統(tǒng)管理員將應用程序部署到一個特定的服務器上時,他將分配一個context path(上下文路徑)給應用程序。因此,如果系統(tǒng)管理員給應用程序分配的上下文路徑為 /catalog,則指向 /catalog/index.html 的URI請求將從根文檔下獲取index.html文件。
標準的目錄結(jié)構(gòu)
為了更方便按要求的格式創(chuàng)建Web應用程序檔案文件(WAR),在放置"可執(zhí)行"文件時(這里的可執(zhí)行文件指Tomcat在執(zhí)行你的app時實際使用到的所有文件),保持與WAR格式本身要求的組織結(jié)構(gòu)相一致是最好的。因此,你需要在應用程序的"根文檔"目錄下放置以下內(nèi)容:
● *.html, *.jsp, etc. : 應用程序中的HTML文件、JSP頁面文件及其他必須對客戶端瀏覽器可見的文件(如JavaScript,stylesheet文件,images文件)。對于大型應用程序,你需要考慮把這些文件分別放置在不同的子目錄結(jié)構(gòu)中,但對于一個小應用程序,通常簡單地把這些文件保存在同一個目錄下。
●/WEB-INF/web.xml : Web應用程序的部署描述器(Web Application Deployment Descriptor)。一個XML文件,描述servlets和其他組件,同時包括一些初始化參數(shù)、及需要服務器執(zhí)行的容器管理的安全限制等。這個文件將在后面章節(jié)有更詳細的描述。
●/WEB-INF/classes/ : 這個目錄下保存所有的應用程序需要的、沒有被打包到JAR文件中的Java類文件(及相關(guān)資源),包括servlet和non-servlet類。如果類被組織成Java的包,則必須在 /WEB-INFO/classes/ 下以目錄層次結(jié)構(gòu)的方式保存。例如,一個名為 com.mycompany.mypackage.MyServlet 的類,就應該保存為 /WEB-INFO/classes/com/mycompany/mypackage/MyServlet.class。
●/WEB-INF/lib/ : 這個目錄下保存打包了Java類文件(及相關(guān)的資源)的JAR文件,如第三方的類庫或JDBC驅(qū)動程序等。
當在Tomcat(或任何其他2.2/2.3 兼容的服務器)上安裝應用程序時,WEB-INFO/classes/ 目錄下的類和WEB-INFO/lib/ 目錄下JAR文件中打包的所有類,對特定的web應用程序的其他類都是可見的。因此,如果在這些位置的某個地方包含了所有必須的庫類(確保已經(jīng)獲得了使用到的任何第三方庫重新發(fā)布權(quán)力的許可),就可以簡化web應用程序的安裝---無須對系統(tǒng)類路徑,或服務器中全局庫文件的安裝環(huán)境,做任何調(diào)整。
以上說明的大部分內(nèi)容摘自Servlet API規(guī)范,version 2.3,的第9章,在那里你可以看到更詳細的說明。
共享庫文件
如大多servlet容器一樣,Tomcat 5 也支持這樣的機制:庫JAR文件(或unpacked 類)一次安裝,即可對所有已安裝的web應用程序可見(除了要包含他的web應用程序本身之外)。Tomcat如何定位并共享這些類的細節(jié)在Class Loader HOW-TO文檔中有詳細說明。為了實現(xiàn)以上機制,Tomcat 5 安裝環(huán)境中有兩個位置用于共享代碼:
●$CATALINA_HOME/common/lib : 放置這里的JAR文件對web應用程序和內(nèi)部Tomcat代碼(internal Tomcat code)都可見。這是放置JDBC驅(qū)動程序的好地方,因為JDBC對你的應用程序及內(nèi)部Tomcat使用(如JDBCRealm)都需要。
●$CATALINA_HOME/shared/lib : 放置這里的JAR文件對所有web應用程序可見,但對內(nèi)部Tomcat代碼不可見。這是放置只用于應用程序的共享庫的好地方。
除此之外,標準Tomcat 5安裝環(huán)境包含了各種預安裝的共享庫文件,如:
●Servlet 2.4 和JSP 2.0 APIs,這是寫servlets和JavaServer 頁面的基礎(chǔ);
●兼容JAXP(version 1.2)APIs的XML 解析器(XML Parser),因此你的應用程序可以執(zhí)行基于DOM或基于SAX的XML文檔處理。
Web Application Deployment Descriptor
以下描述中使用$CATALINA_HOME 變量名指Tomcat 5的安裝目錄,同時也是大部分相對路徑解析的基目錄。但是,如果你的Tomcat 5配置成多實例模式、并設置了CATALINA_BASE 目錄時,你應該使用$CATALINA_BASE 代替$CATALINA_HOME 引用。
如上面提到的,/WEB-INFO/web.xml 文件包含應用程序的部署描述信息。如文件擴展名暗示的,此文件為XML文檔,其中定義了服務器需要知道的有關(guān)應用程序的所有信息(除了context path,context path是應用程序部署時系統(tǒng)管理員指定的)。
部署描述器的完整語法和語義定義在Servlet API規(guī)范(version 2.3)的第13章。隨著時間的推移,你的最終期望是應該提供部署工具來進行部署描述器的創(chuàng)建和編輯。期間,為了提供一個起點,一個基礎(chǔ)web.xml文件(basic web.xml file)首先被提供。這個文件包含了每個元素用途的描述。
NOTE:Servlet規(guī)范為web應用程序部署描述器包含了DTD(Document Type Descriptor),Tomcat 5在處理web應用程序的 /WEB-INFO/web.xml 文件時遵循了這個規(guī)則。特別地,你必須按DTD定義的順序輸入描述符元素(如
Tomcat Context Descriptor
/META-INF/context.xml 文件用于定義Tomcat的特殊配置選項,如loggers,data sources,session manager configuration,等。此XML文件必須包含一個Context元素,Context元素看起來像是Host元素的子元素,和Host一樣,Tomcat配置文檔在Context元素下包含了Context的配置信息。
Deployment with Tomcat 5
為了執(zhí)行,一個web應用程序必須首先被部署到一個servlet容器中。在開發(fā)期間這是必須的。這里將描述使用Tomcat 5提供一個執(zhí)行環(huán)境。web應用程序可以用下面幾種方法之一部署到Tomcat上:
●Copy unpacked directory hierarchy into subdirectory in directory $CATALINA_HOME/webapps/
拷貝unpacked目錄層次結(jié)構(gòu)到$CATALINA_HOME/webapps/ 目錄下的子目錄中
Tomcat 將基于你選擇的子目錄名分配一個context path給你的web應用程序。我們將在我們構(gòu)造的build.xml文件使用這個技術(shù),因為這是開發(fā)期間最快和最容易的方法。要確保在安裝或更新應用程序后重啟Tomcat。
●Copy the web application archive file into directory $CATALINA_HOME/webapps/
拷貝web應用程序檔案文件到目錄$CATALINA_HOME/webapps/ 下
當Tomcat啟動時,它將自動展開web應用程序檔案文件到其unpacked的格式,并以那種方式執(zhí)行應用程序。這個方法是用于安裝附加應用程序到Tomcat安裝環(huán)境的典型方法,如由第三方廠家或內(nèi)部開發(fā)機構(gòu)提供的應用程序。
NOTE : 如果使用這個方法,并希望稍后更新應用程序,必須替換web應用程序檔案文件并同時刪除Tomcat創(chuàng)建的展開目錄,然后重啟tomcat以反應你的更新。
●Use the Tomcat 5 "Manager" web application to deploy and undeploy web applications
使用Tomcat 5 "Manager" web應用程序部署和去部署web應用程序
Tomcat 5包含了一個web應用程序,用于在不要重啟Tomcat服務器的情況下、在運行的Tomcat服務器上完成部署和去部署web應用程序的工作。該web應用程序缺省部署在context path /manager 下。
●Use "Manager" Ant Tasks In Your Build Script
在Build腳本中用 "Manager" Ant 任務
Tomcat 5包含了一組對Ant build工具的客戶化任務定義,這些任務定義允許你自動執(zhí)行web應用程序管理的操作。這些任務也被用在Tomcat 的部署器中。
●Use the Tomcat Deployer
使用Tomcat 5部署器
Tomcat 5包含了一個綁定Ant任務的打包工具,這個工具可以用于在JSPs部署到服務器之前的自動預編譯。
部署應用程序到其他servlet容器需要遵循其他容器的規(guī)范,但所有兼容Servlet API規(guī)范的容器都必須能夠接收一個web應用程序檔案文件(WAR)。注意,其他容器沒有被要求一定接收unpacked目錄結(jié)構(gòu)(如Tomcat支持的一樣),或提供共享庫文件的支持,而這些特性通常都是很有用的。