* Catalina - 一個符合Servlet API規范2.3的Servlet Container
* Jasper - 一個符合JSP規范1.2的JSP編譯器和運行環境
* Webapps - Tomcat中包含的一些例子和用于測試的web例程,以及相關文檔。
Tomcat4.0的一個主要目的是支持目前正在處于測試版的Servlet2.3規范和JSP1.2規范的新特性。本文主要介紹Tomcat4.0實現的這些新特性以及這些新特性目前在tomcat中的實現情況。
Servlet API 規范2.3
應用程序中的事件:
你可以在web.xml文件中注冊相應的事件監聽器,當這些事件發生時,在應用程序中可以收到相應的事件通知,這些事件包括:
- 應用啟動
- 應用關閉
- 應用的屬性的增加、刪除、被替換
- Session創建
- Session失效、超時
- Session的屬性的增加、刪除、被替換
事件監聽器的功能被加入到Catalina,看來效果非常好。在Webapps中的web應用examples中就有兩個監聽器的例子用于通過ServerletContext.log()記錄相應的事件。
Servlet Fliter
你能夠在web.xml文件中注冊類似與Catalina核心中Valves功能類似的的Filter。Filter主要具有以下特性:
- Filter能夠映射成相應的URL或特定的Servlet。
- Filter能被用于對request,reponse對象進行預處理、或后處理。
- Filter能封裝request、response對象,比如可以對對象中的內容進行轉換。
- Filter能夠對訪問請求直接響應,然后返回給客戶端,而不僅僅進行訪問請求的傳送,比如,你可以在應用級進行用戶認證。
與這些特性相關聯,當servlet傳遞參數給RequestDispatcher時就可以做這種類型的封裝。而在以前,你只能將初始的request對象傳遞給Servlet Container,并且從Servlet Container中得到返回的response對象。Servlet filter的功能目前已經加入到Catalina中,并通過了初步測試。在應用examples中有一個filter用于路徑映射和向調用servlet的映射("/servlet/*"),其中存放了最終傳遞給執行Servlet的request對象屬性。
安裝擴展庫的依賴關系
Web應用程序或WEB-INF/lib中的jar文件,現在可以聲明對特定版本外部庫的依賴關系,這些外部庫是由Servlet Container作為共享擴展提供的。在Catalina中目前還沒有完全實現這部分功能。
國際化支持
Catalina現在支持從Locale向字符集的映射,在ServletRequest中增加了一個新的方法setCharacterEncoding() ,在這一方面,還需要有個多的測試和功能增強。
Web應用的類裝載器
Servlet規范草案中9.6.2節中定義了與Web應用中類裝載器相關的需求和建議。這些需求在Catalina中被遵照執行。
Servlet 2.3應用程序分發描述符的DTD
在Catalina中包括一個非正式的用于解析web.xml文件的DTD(catalina/src/conf/web_23.dtd)
它將被正式發布的DTD所替代。
JSP規范1.2
JSP 對Include flush="false"的支持
這個變化通過在標準或定制的標記中嵌套使用<jsp:include>標記,允許利用內含的servlet進行緩存、處理,并產生的輸出。這個變化取決于前述的對RequestDispatcher.include()的功能的增強功能。
JSP頁面的XML視圖
JSP1.2的實現要求輸入不僅要符合JSP語法,而且要符合XML語法。目前正在將Jasper的parser進行轉換,使得其能接受任何一種類型的輸入。
屬性編輯器的利用
假如一個應用對java類的一個特定屬性注冊了一個屬性編輯器(PropertyEditor),那么這個屬性編輯器的setAsText()方法將用于將文本格式的屬性(比如request對象的一個參數)轉換為該屬性的內部表示。假如沒有定義屬性編輯器,那么就采用前述的缺省屬性編輯器進行轉換。
定制標記庫驗證頁面的合法性
在定制標記庫中增加了一個新的編譯階段用于檢查頁面的XML視圖,如果檢測到錯誤,就拋出一個轉換時異常。在這當中,可用于驗證:
- 從語義上不能被TLD中定義的信息驗證的嵌套定制標記
- 誤用或濫用JSP中定制標記特性。比如,你可以用一個驗證子禁止JSP使用Java語句塊。
增強的迭代支持
增強了的定制tag機制支持在不做內容嵌套的前提下進行迭代的能力。這將優化這類非常常見的例子的性能,比如通過迭代來表示一個表格的處理結果,而不用顯式對表格中每一行進行處理。
定制tag庫能夠聲明應用監聽器
一個定制的tag庫能夠利用servlet2.3中的新特性,聲明一個監聽器,用于監聽應用程序相關的事件。
附加的TLD元素
在許多簡單的例子中,聲明變量時,采用附加的TLD元素可不用書寫TagExtraInfo類
在Tag接口中增加resetCustomAttributes()方法
通過由Servlet Container調用附加的方法,使得在循環調用一個tag的實例前調用該方法
原文轉自:http://www.anti-gravitydesign.com