1 概述
1.1 java servlet及其特點
servlet是java技術對cgi編程的回答。servlet程序在服務器端運行,動態地生成web頁面。與傳統的cgi和許多其他類似cgi的技術相比,java servlet具有更高的效率,更容易使用,功能更強大,具有更好的可移植性,更節省投資(更重要的是, servlet程序員收入要比perl程序員高:-):
高效
在傳統的cgi中,每個請求都要啟動一個新的進程,如果cgi程序本身的執行時間較短,啟動進程所需要的開銷很可能反而超過實際執行時間。而在servlet中,每個請求由一個輕量級的java線程處理(而不是重量級的操作系統進程)。
在傳統cgi中,如果有n個并發的對同一cgi程序的請求,則該cgi程序的代碼在內存中重復裝載了n次;而對于servlet,處理請求的是n個線程,只需要一份servlet類代碼。在性能優化方面,servlet也比cgi有著更多的選擇,比如緩沖以前的計算結果,保持數據庫連接的活動,等等。
方便
servlet提供了大量的實用工具例程,例如自動地解析和解碼html表單數據、讀取和設置http頭、處理cookie、跟蹤會話狀態等。
功能強大
在servlet中,許多使用傳統cgi程序很難完成的任務都可以輕松地完成。例如,servlet能夠直接和web服務器交互,而普通的cgi程序不能。servlet還能夠在各個程序之間共享數據,使得數據庫連接池之類的功能很容易實現。
可移植性好
servlet用java編寫,servlet api具有完善的標準。因此,為i-planet enterprise server寫的servlet無需任何實質上的改動即可移植到apache、microsoft iis或者webstar?負跛?有的主流服務器都直接或通過插件支持servlet。
節省投資
不僅有許多廉價甚至免費的web服務器可供個人或小規模網站使用,而且對于現有的服務器,如果它不支持servlet的話,要加上這部分功能也往往是免費的(或只需要極少的投資)。
1.2 jsp及其特點
javaserver pages(jsp)是一種實現普通靜態html和動態html混合編碼的技術,有關jsp基礎概念的說明請參見《jsp技術簡介 》。
許多由cgi程序生成的頁面大部分仍舊是靜態html,動態內容只在頁面中有限的幾個部分出現。但是包括servlet在內的大多數cgi技術及其變種,總是通過程序生成整個頁面。jsp使得我們可以分別創建這兩個部分。例如,下面就是一個簡單的jsp頁面:
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head><title>歡迎訪問網上商店</title></head>
<body>
<h1>歡迎</h1>
<small>歡迎,
<!-- 首次訪問的用戶名字為"new user" -->
<% out.println(utils.getusernamefromcookie(request)); %>
要設置帳號信息,請點擊
<a href="account-settings.html">這里</a></small>
<p>
頁面的其余內容...
</body>&l t;/html>
下面是jsp和其他類似或相關技術的一個簡單比較:
jsp和active server pages(asp)相比
microsoft的asp是一種和jsp類似的技術。jsp和asp相比具有兩方面的優點。首先,動態部分用java編寫,而不是vb script或其他microsoft語言,不僅功能更強大而且更易于使用。第二,jsp應用可以移植到其他操作系統和非microsoft的web服務器上。
jsp和純servlet相比
jsp并沒有增加任何本質上不能用servlet實現的功能。但是,在jsp中編寫靜態html更加方便,不必再用 println語句來輸出每一行html代碼。更重要的是,借助內容和外觀的分離,頁面制作中不同性質的任務可以方便地分開:比如,由頁面設計專家進行html設計,同時留出供servlet程序員插入動態內容的空間。
jsp和服務器端包含(server-side include,ssi)相比
ssi是一種受到廣泛支持的在靜態html中引入外部代碼的技術。jsp在這方面的支持更為完善,因為它可以??servlet而不是獨立的程序來生成動態內容。另外,ssi實際上只用于簡單的包含,而不是面向那些能夠處理表單數據、訪問數據庫的“真正的”程序。
jsp和_javascript相比
javascript能夠在客戶端動態地生成html。雖然_javascript很有用,但它只能處理以客戶端環境為基礎的動態信息。除了cookie之外,http狀態和表單提交數據對_javascript來說都是不可用的。另外,由于是在客戶端運行,_javascript不能訪問服務器端資源,比如數據庫、目錄信息等等。
新聞熱點
疑難解答