從微軟推出了asp(activeserverpage)後,它以其強大的功能,簡單易學的特點而受到廣大人員的喜歡。但是它卻有微軟產品的通病,只能在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 中保存和檢索的信息不能是基本數據類型(primitivedatatypes)如(int, double)等,而必須是java的相應的object(對象)如(integer,double)。
四、application管理
有時服務器需要管理面向整個應用的參數,使得每個客戶都能獲得同樣的參數值。和session一樣,asp使用application對象而jsp使用servletcontext對象,操作的方法和session一樣。
五、serversideincludes
在服務器端引用上asp和jsp有著相同之處。 asp和jsp都可以支持此功能的服務器(iis,apache)上實現服務器端包含虛文件。但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是跨平台的。