從微軟推出了ASP(ActiveServerPage)後,它以其強大的功能,簡單易學的特點而受到廣大WEB開發人員的喜歡。但是它卻有微軟產品的通病,只能在Windows平台下使用,雖然它可以通過增加控制項而在LINUX下使用,但是其功能最強大的DCOM控制項卻不能使用。而SUN公司在Java的基礎下開發出的JSP(Java ServerPages)實現了動態網頁面與靜態頁面的分離,脫離了硬體平台的束縛,以及編譯後運行等方式大大提高了其執行效率而逐漸成為網際網路上的主流開發工具。為了使用廣大應用ASP的程式員們能近快的學會JSP。現把其異同對比如下:
一、結構
JSP和ASP在結構上類似,都是以""作為標計符,不同的是在標計符之間的代碼ASP為JavaScript或VBScript指令碼,而JSP為Java代碼。JSP將網頁的表現形式和伺服器端的代碼邏輯分開。作為伺服器處理序的JSP頁面,首先被轉換成servlet(一種伺服器端啟動並執行Java程式)。
Servlet支援HTTP協議的請求和響應。當JSP被轉換成純Java代碼。多個使用者同時請求一個JSP頁面時,應用執行個體化線程來響應請求。這些線程由WEB伺服器處理序來管理,和ASP的線程管理器功能類似。同CGI為每個請求建立一個進程的模式比較,這種方式效率高的多。
二、效能和平台無關性
與C++、VB等語言比較,Java被看作是個效率不太高的語言,但它以犧牲效率換來了平台無關性使Java可以在大多數作業系統上運行而不需要重新編譯--許多人願意為此而付出代價。Java的編譯代碼是一種位元組代碼,在運行時由作業系統上的一個Java VirtualMachine(JVM)虛擬機器解釋。
位元組代碼可以在所有平台上遷移,而不需要任何改動。交叉平台編程傾向於採用所有作業系統的"最小公分母",尤其是使用圖形化介面時(servlets不需要任何圖形介面)。
Servlets比傳統的Java程式(applets, Javaapp)要快,因為它們在伺服器端運行,不需要載入沉重的GUI(HTML的GUI是非常少的)。另外,servlets的位元組代碼只有在客戶請求時才執行,所以儘管當首次調用servlets時會有幾秒鐘的載入時間,但後續的請求相應非常迅速,因為伺服器已經緩衝了啟動並執行servlets。
當前的JSP伺服器,都帶有Java 即時編譯器(JIT),因此,JSP的執行比每次都要解釋執行的ASP代碼要快,尤其是在代碼中存在迴圈操作時,JSP的速度要快1到2個數量級。
三、Session管理
為了跟蹤使用者的操作狀態,ASP應用SESSION對象。JSP使用一個叫HttpSession的對象實現同樣的功能。Session的資訊儲存在伺服器端,Session的id儲存在客戶機的cookie中。如果客戶機禁止cookie,Session Id就必須帶在url後面。
Session一般在伺服器上設定了一個30分鐘的到期時間,當客戶停止活動後自動失效。Session 中儲存和檢索的資訊不能是基礎資料型別 (Elementary Data Type)(primitivedatatypes)如(int, double)等,而必須是Java的相應的object(對象)如(Integer,Double)。
HttpSessionsession=request.getSession();
//得到一個session對象或建立一個
session.getId()
//得到sessionID數
Integerid=(Integer)session.getValue("id")
//檢索出session的值並轉化為整型
session.putValue("ItemValue",itemName);
//ItemValue必須不是must簡單類型
四、Application管理
有時伺服器需要管理面向整個應用的參數,使得每個客戶都能獲得同樣的參數值。和Session一樣,ASP使用Application對象而JSP使用ServletContext對象,操作的方法和Session一樣。
getServletContext().setAttribute
("Item",ItemValue);
//設定一個應用變數
Integeri=(Integer)
getServletContext().getAttribute("ItemName");
//得到//item
五、ServerSideIncludes
在伺服器端引用上ASP和JSP有著相同之處。ASP和JSP都可以支援此功能的伺服器(IIS,APACHE)上實現伺服器端包含虛檔案。但JSP是將動態網頁面的結果包含進來,而不是包含檔案的代碼本身。當你包含的檔案在另一個伺服器上時,不包含任何代碼和對象是一個非常有效功能。
ASP:<!--#includefile="subfile.asp"-->
JSP:<%@includefile="subfile.JSP"-->
六、Java組件:JavaBeans
JavaBeans是一些完成預定義功能的封裝的對象資料。JavaBeans和JSP接合與COM和ASP相比如下:
COM對象常用來封裝商業邏輯和為ASP頁面完成高強度計算。重用的組件使得頁面簡單快速,因為組件由編譯語言(C++,VB)構成,而不是解釋型的scripting語言(VBScript, JScript)。
JavaBeans只能用Java語言開發,com可以由符合標準物件模型的任何語言開發(包括Visual J++)。另一方面,JavaBeans更容易開發,因為一旦掌握了Java,瞭解JavaBeans的結構非常容易。由於com的複雜性,需要大量的學習和培訓才能掌握--即使你具有c++和vb的基礎也需要額外的努力。
Com 組件需要在伺服器上註冊,如果你修改了一個現有的組件,伺服器需要重新啟動才能使用它。JavaBeans不需要重新註冊,如果開發人員不需要得到對伺服器的完整存取,這是其一個巨大的優點。可以建立滿足商業邏輯的完整的JavaBeans庫,讓非編程人員使用庫來開發動態網站。
Beans可以在伺服器端管理資料庫串連。
JavaBeans符合結構化物件模型:每個Bean由一個不帶參數的建構函式,控制它的servlet可以使用內省(introspection)來設定其屬性。要設定Bean的內建屬性,必須使用帶有屬性名稱的setProperty標籤。如果一個屬性可以設定,Bean需要有一個setXxxx方法,Xxxx用實際的屬性名稱來代替。
七、JSP和資料庫
ASP使用ODBC通過ADO串連資料庫,而Java通過一個叫JDBC的技術聯結資料庫。目標資料庫需要一個JDBC驅動程式--一個資料庫與Java的借口,使得Java可以用標準的方式訪問資料庫。JDBC不使用伺服器端的資料來源。只要有JDBC驅動程式,Java就可以訪問資料庫了。如果一個特定的資料庫沒有JDBC驅動程式,而只有ODBC驅動程式,Java提供一個JDBC-ODBC橋來將JDBC調用轉化為ODBC調用。所有的Java編譯器都帶有一個免費的JDBC-ODBC橋。理論上,橋可以訪問任何常見的資料庫產品。
結論:
JSP模型是在ASP之後定義的,它借用了ASP的許多優點,如Session,Application等對象。同時JSP使用靈活而強大的Java語言,而不是低效的Scripting語言。ASP開發人員只能使用基於windows平台的技術,而Java和JSP是跨平台的。