您是否了解您對下一代平台產品有多渴望?可以說您將全部未來都寄托在它上面了。這一產品中廠商所承諾的附加特性必須讓您跟上行業競爭的步伐,它的故障修復程序可解決您的日常碰到的問題, 它的功能早在您提出要求之前就已經是發展成熟。 您是否想過只需將現有的應用程序原封不動, 移到另外一個具備您所期望一切的平台上,而一切還運轉如初? 這正是Servlets要為您做的。
Servlets API之所以重要,最主要的原因就是只有API才具有廣泛的廠商支持,同時又可使您建立起高效的、成熟的網上應用程序。它主要是由一些Web服務器,如Java Soft公司的JavaWeb服務器(JWS)及O"Reilly & Associates公司的WebSite Pro服務器支持的。對於其它大受歡迎的服務器,如Netscape公司的 Enterprise and Fast Track服務器,微軟公司的Internet Information服務器(IIS),StarNine公司的WebSTAR 以及Apache,已通過一些公司如Gefion軟件公司,Live軟件公司,新亞特蘭大公司及IBM公司添加了Servlet引擎。在高端領域,應用服務器如ATG的Dynamo及Sun Microsystems的Net Dynamics都有Servlet支持,這些服務器都具有負載均衡及成熟管理的功能。您可以將基於Servlet的應用程序從一個操作系統的Web服務器移到另一個操作系統的另一個Web服務器中,盡管它們使用的是不同的處理器體系結構。而且您可使用一個基本的Web服務器,在自己Mac或PC上開發應用程序,並用高端應用服務器將其部署在功能最強大的服務器池上。平台是依您的要求而定的!
除非有其它原因促使人們一定要使用Servlets,否則在此談論它的廣泛的支持性只能是無用的和無意義的。它的最重要的一些特點包括多線程、持久性、易於訪問其它網絡資源及靈活性等。
對Servlet的並行請求是用同一個Servlet范例在單獨的線程中進行的。與對於每個請求都啟動一個新的處理過程,裝載一個Perl解釋程序和Perl腳本並加以執行,直至請求完成後再釋放所有系統資源的方式相比,它更為有效。Java的線程支持也令Servlets的開發更為容易,Servlets使用一個工作員線程不停地收集信息,監示資源,或承擔其它持續時間長的任務。這個工作員線程可以在啟動Servlet時就啟動並且可以用規則的Servlet請求收集有關任務的狀態報告。
持久性從某方面來說是與多線程特性相關的。並行請求可以用線程而不必啟用新處理過程來處理的原因是,一旦Servlet裝上Java VM處理過程,它將 北A粼诶锩嬷敝練衿鞅還乇鍘R虼薙ervlet可以在請求之間保留住信息。持久性可大大提高處理性能並簡化任務,而這些任務在基於CGI的解決方案中是非常復雜的。例如,一個訪問數據庫的Servlet可以保留住一組開放的數據庫連接,用於所有的請求。另外一種更好的方式就是用一個連接池管理器來為多數據庫Servlets管理一組數據庫連接。另外一個有關持久性的例子就是對話跟蹤。對話是當客戶第一次請求Servlet時由服務器產生的目標。從那時起被同一客戶請求的所有Servlets將訪問同一個對話目標。這樣,一個Servlet可以將信息放入對話目標而另一個Servlet可以讀取它。通過一個對話目標共享某個客戶的信息,一組Servlets就可被結合起來形成一個應用程序,比如像利用對話目標來跟蹤貨車貨物的在線存儲應用程序一樣。對話跟蹤是Servlet API的一部分並由所有兼容的Servlet引擎實現。大部分公司都有需要不斷訪問的遺留系統。用Servlets建立的Web應用程序可以使用整套的Java APIs訪問遺留系統或其它網絡資源。通過JDBC對所有主要的數據庫進行存取,通過JNDI進行目錄服務,以及通過RMI及Java IDL進行高級分布式服務都是可以實現的。上述未盡之工作幾乎全部可由Sockets或JNI來處理。
Servlets還可以有很多不同的使用方法。Servlet API定義了Servlet接口及壽命周期,但留給開發者很大的創造空間以開發出有效的、靈活多樣的Servlet引擎。通常所支持的Servlet應用方式有三種:作為CGI的替代產品,作為服務器端腳本的替代產品以及SSI Servlets。它們都有其應用的原因並可適用於不同的環境。
做為CGI的替代產品,Servlet模仿了大多數CGI腳本的設計和使用。Servlet在Java中實施後,可執行一項任務並產生一整頁HTML,顯示出結果。通常這種Servlet被直接與像http://www.ourcompany.com/servlet//DoSomethingNice的 URL一起調用。這是當前應用最普遍的一種Servlet,並且特別適用於所生成的HTML相當簡單而又不需經常改變的情況。
用Servlet替代服務器端腳本,意味著用靜態HTML和Java代碼編寫網頁,以執行某項任務並為網頁的動態部分產生HTML。這種網頁使用特殊的文件擴展名,如jhtml,並由一種網頁編譯功能加以處理,將網頁轉換成Java Servlet源文件、編譯並執行。當下一次該網頁收到請求時,就可直接調用編譯的代碼。最近出現了經大量修訂的網頁編譯版本,叫做Java Servlet Pages或JSP。如果您的網頁開發人員同時懂得HTML和Java的基本知識,而您又只想加入一點動態內容,這種方法是很好用的。有一個例子叫作SSI Servlet或Servlet Bean,它是從數據庫中讀取並嵌入Java代碼的,用來顯示結果或顯示“抱歉未找到記錄”信息。也可以在網頁上使用(SERVLET)標記為Servlet嵌入某個呼叫, 從而激活Servlet。用這種方法激活的Servlet,這裡叫做服務器端包含(Server Side Include)或SSS Servlet,與替代CGI的Servlet相似。不同之處是如果SSI Servlet能產生HTML輸出的話,它產生的只是一小部分HTML生成頁。帶有(SERVLET)標記的網頁通常被賦予shtml文件擴展名並且除了(SERVLET)標記外,它還包括規則的HTML標記,用來定義網頁布局和靜態內容。當網頁收到請求時,服務器端包含(Server Side Include)功能解析文件並將所有規則的HTML原封不動退還給客戶。它用Servlet(如果有)產生的HTML替換了(SERVLET)標記。如果網頁開發人員只懂得HTML而不會編程,使用這種方法最為理想;網頁中沒有代碼,只有規則的HTML及類似HTML的標記可以調用Servlets來產生動態內容。SSI Servlets可以由內部編程員購買或開發。
當我們開始設計我們的“即時在線”(InstantOnline)型產品時,我們尋求一種平台獨立的技術,這種技術將使我們可以利用Web服務器和應用程序服務器提供的基礎設施,而不必去爭搶另一種專有的服務器端引擎。現在我們有了Servlets,我們知道我們已找到了所要的東西。這是我們不悔的選擇。