1 簡(jiǎn)介
JSP(Java Server Pages) 是一種服務(wù)器端腳本技術(shù), 它是在傳統(tǒng)的網(wǎng)頁(yè)HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP標(biāo)記(tag), 就構(gòu)成了JSP網(wǎng)頁(yè)(*.jsp)。而ASP(Active Server Pages)也是一種服務(wù)器端腳本技術(shù),一方面從功能上看JSP、ASP二者都可以生成和運(yùn)行動(dòng)態(tài)的、交互的、高性能的Web服務(wù)器應(yīng)用程序" title="應(yīng)用程序">應(yīng)用程序;二者都將建立交互式頁(yè)面作為基于Web的應(yīng)用程序的一部分;二者都能通過在頁(yè)面中調(diào)用組件達(dá)到分離程序設(shè)計(jì)" title="程序設(shè)計(jì)">程序設(shè)計(jì)邏輯和頁(yè)面的目的;二者都能夠完全替代繁瑣的CGI,從而使網(wǎng)站的建設(shè)和網(wǎng)站的發(fā)展方便和簡(jiǎn)單。另一方面從形式上看JSP和ASP也非常相似,無(wú)論是JSP程序員還是ASP程序員一眼就能認(rèn)出所熟悉的<% %>以及<%= %>。然而,進(jìn)一步深入探究下去我們就會(huì)發(fā)現(xiàn)它們有許多不同之處。
2 JSP?與ASP的異同
2.1使用的語(yǔ)言方面
JSP? 與ASP兩者都提供在HTML? 代碼中混合某種程序代碼、由語(yǔ)言引擎解釋執(zhí)行程序代碼的能力。無(wú)論在ASP或JSP? 環(huán)境下,信息的顯示樣式主要由HTML代碼負(fù)責(zé)描述,而信息的處理邏輯則主要由程序代碼來(lái)描述。二者雖然功能相似,但兩者使用的編程語(yǔ)言" title="編程語(yǔ)言">編程語(yǔ)言不同,ASP下的編程語(yǔ)言是? VBScript? 之類的腳本語(yǔ)言,而JSP? 使用的是Java, Java是1995年由SUN公司推出的具有很強(qiáng)吸引力的面向?qū)ο?/a>" title="面向?qū)ο?>面向?qū)ο?/a>的編程語(yǔ)言, 也是目前最為流行的網(wǎng)絡(luò)編程語(yǔ)言,它不依賴于任何現(xiàn)有的操作系統(tǒng),可直接運(yùn)行在某種機(jī)器或CPU上,Java語(yǔ)言具有支持多線程;獨(dú)有自己的內(nèi)存管理機(jī)制;可移植等眾多的優(yōu)勢(shì),即JSP擁有了強(qiáng)大的Java優(yōu)勢(shì)。近年來(lái)尤其是Internet的發(fā)展,進(jìn)一步推動(dòng)了Java技術(shù)的應(yīng)用與完善,使Java成為更加成熟的、易擴(kuò)充的、強(qiáng)壯的編程語(yǔ)言,所以從使用語(yǔ)言方面來(lái)說Java優(yōu)于基于BASIC的腳本語(yǔ)言。Java使開發(fā)人員的工作在其他方面也變得比較容易。Java語(yǔ)言提供防止內(nèi)存泄漏的方法,在內(nèi)存管理方面也大顯身手。而且JSP為應(yīng)用提供了強(qiáng)大的意外事件處理機(jī)制。
2.2 效率和安全性方面
ASP是以源碼形式存放,它的命令和腳本都在服務(wù)器中以解釋方式執(zhí)行,即每次ASP網(wǎng)頁(yè)調(diào)用都需要對(duì)源碼進(jìn)行解釋,影響其運(yùn)行效率。并且ASP大多使用的是微軟的IIS(Internet Information Server)作為網(wǎng)站W(wǎng)eb Server, IIS自身的漏洞很容易使得ASP程序被下載。而JSP在執(zhí)行以前先被編譯成字節(jié)碼 (byte code),字節(jié)碼由Java虛擬機(jī)(Java Virtual Machine)解釋執(zhí)行,這比源碼解釋(如:ASP)的效率高;此外服務(wù)器上還有字節(jié)碼的Cache機(jī)制,能提高字節(jié)碼的訪問效率。雖然第一次調(diào)用JSP網(wǎng)頁(yè)使人感覺比較著急,覺得JSP稍慢,但由于不是每次JSP網(wǎng)頁(yè)調(diào)用都需要對(duì)源碼進(jìn)行解釋,所以以后就快得多了。而且,由于JavaBean程序完全可以放到不對(duì)外的目錄中,所以JavaBean程序和JSP源程序不大可能被下載。
2.3 功能擴(kuò)充方面
ASP是通過COM來(lái)擴(kuò)充其功能的。掌握ASP雖不是很困難,但學(xué)會(huì)開發(fā)COM并不容易。而我們知道ASP是通過COM來(lái)擴(kuò)充其復(fù)雜的功能如發(fā)送email、文件上載、以及將業(yè)務(wù)處理或者復(fù)雜計(jì)算分離出來(lái)成為獨(dú)立可重復(fù)利用的模塊。這使得在開發(fā)方面,COM的開發(fā)遠(yuǎn)比JavaBean復(fù)雜和繁瑣。而JSP是通過JavaBean實(shí)現(xiàn)了同樣的功能擴(kuò)充, 而且JavaBean比較簡(jiǎn)單和方便。 尤其對(duì)掌握J(rèn)ava編程技術(shù)或C++編程技術(shù)的人來(lái)說更為簡(jiǎn)單,哪怕不熟悉Java語(yǔ)言,也可以在比較短的時(shí)間內(nèi)學(xué)習(xí)Java, 寫出JavaBean。 而且JavaBean是完全的OOP, 針對(duì)不同的業(yè)務(wù)處理功能JavaBean可以方便地建立一整套可重復(fù)利用的對(duì)象庫(kù),例如用戶權(quán)限控制等等。
2.4 維護(hù)角度方面
從維護(hù)角度來(lái)看,由于兩者所使用的語(yǔ)言不同,JSP所使用的Java語(yǔ)言是面向?qū)ο蟮膹?qiáng)大的,它能輕易的建立和維護(hù)大型的、模塊化的應(yīng)用程序。而ASP所使用的腳本語(yǔ)言對(duì)小的應(yīng)用程序是可行的,但是對(duì)大型的、復(fù)雜的應(yīng)用程序的建立和維護(hù)是不容易的。另一方面ASP僅支持組件對(duì)象模型COM,而COM必須在服務(wù)器上注冊(cè),一旦修改了COM程序,就必須重新注冊(cè),且大多數(shù)情況下必須關(guān)機(jī)和重新啟動(dòng)。而JSP技術(shù)提供的組件都是基于JavaBeans技術(shù)或者JSP標(biāo)簽庫(kù)的。這兩者雖有相同之處,但二者的區(qū)別是很明顯的。JavaBean不需要注冊(cè),放在CLASSPATH包含的目錄中就行了。一旦JavaBean進(jìn)行了修改,則JSWDK和Tomcat需要關(guān)閉和重新運(yùn)行,但不必關(guān)機(jī)和重新啟動(dòng)。另一方面對(duì)JSP來(lái)說Web服務(wù)器、平臺(tái)和其它組件都可輕松的升級(jí)或交換而不影響基于JSP的應(yīng)用程序。這使得JSP非常適合需要升級(jí)而又要求保持不變的實(shí)時(shí)Web應(yīng)用程序。
2.5 適應(yīng)平臺(tái)方面
現(xiàn)在幾乎所有平臺(tái)都支持Java,JSP+JavaBean幾乎在所有平臺(tái)下是通行無(wú)阻的。不支持的平臺(tái)目前通過一個(gè)插件也就能支持JSP, 例如在NT下IIS通過一個(gè)插件,如JRUN或者ServletExec,就能支持JSP?,F(xiàn)在Web服務(wù)器Apache也已經(jīng)能夠支持JSP。而且由于Apache廣泛應(yīng)用在NT、Unix和Linux上,目前雖然現(xiàn)在NT操作系統(tǒng)占了很大的市場(chǎng)份額,但是在服務(wù)器方面Unix的優(yōu)勢(shì)還是很大,而Linux的優(yōu)勢(shì)也是不小, 所以JSP有更廣泛的運(yùn)行平臺(tái)。還有一點(diǎn)就是從一個(gè)平臺(tái)移植到另外一個(gè)平臺(tái),JSP和JavaBean是不用重新編譯的,因?yàn)镴ava字節(jié)碼都是標(biāo)準(zhǔn)的且與平臺(tái)無(wú)關(guān)的。而ASP目前僅適用于NT和IIS。雖然Unix下有ChiliSoft的插件來(lái)支持ASP,但是ASP本身的功能有限,必須通過ASP+COM的組合來(lái)擴(kuò)充,Unix下的COM實(shí)現(xiàn)起來(lái)還是比較困難。
2.6 數(shù)據(jù)庫(kù)的支持方面
不論是用ASP還是JSP,應(yīng)用程序的一個(gè)重要環(huán)節(jié)就是鏈接數(shù)據(jù)庫(kù)、查詢數(shù)據(jù)庫(kù)、操作數(shù)據(jù)庫(kù),也就是說網(wǎng)站必須要有對(duì)后臺(tái)數(shù)據(jù)庫(kù)進(jìn)行操作的功能。
在這方面ASP是通過ADO(ActiveX Data Object)來(lái)完成對(duì)各類數(shù)據(jù)庫(kù)的查詢、存取等操作。ADO(又稱為ActiveX)是微軟提出的一項(xiàng)數(shù)據(jù)庫(kù)鏈接技術(shù),提供了程序開發(fā)人員實(shí)時(shí)存取各類數(shù)據(jù)庫(kù)的能力。而ADO建立在OLEDB基礎(chǔ)上,它們有明顯的區(qū)別和聯(lián)系,OLEDB是系統(tǒng)級(jí)的編程接口" title="編程接口">編程接口,它定義了一組COM接口,這些接口封裝了各種數(shù)據(jù)庫(kù)系統(tǒng)的訪問操作,同時(shí)OLEDB還提供了一組標(biāo)準(zhǔn)的服務(wù)組件,用來(lái)提供查詢,數(shù)據(jù)更新等操作。而ADO是應(yīng)用層的編程接口,它通過OLEDB提供的COM接口訪問數(shù)據(jù)庫(kù)。ASP中對(duì)ADO組件的使用一般經(jīng)過以下兩個(gè)步驟:①通過ODBC配置數(shù)據(jù)源 ;②利用ADO組件創(chuàng)建一個(gè)ADO鏈接對(duì)象或記錄集對(duì)象,再利用該對(duì)象連接數(shù)據(jù)源,然后利用相關(guān)對(duì)象的屬性、方法來(lái)操作數(shù)據(jù)庫(kù)。我們知道COM的開發(fā)遠(yuǎn)比JavaBean復(fù)雜和繁瑣。而ODBC也比較難學(xué),這主要是它把簡(jiǎn)單功能和高級(jí)功能摻和在一起,也就是說對(duì)于一個(gè)簡(jiǎn)單的查詢,其選項(xiàng)也比較復(fù)雜。
而JSP通過JDBC來(lái)完成對(duì)各類數(shù)據(jù)庫(kù)的查詢、存取等操作。JSP的定義是兩組分別面向應(yīng)用程序和數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序開發(fā)人員的API,和將前者向后者轉(zhuǎn)化的內(nèi)在封裝邏輯。其中面向應(yīng)用程序開發(fā)人員的接口是JDBC API, 我們可以把JDBC看作是一個(gè)被轉(zhuǎn)換為面向?qū)ο蠼涌诘腛DBC, 而面向?qū)ο蟮慕涌趯?duì)使用面向?qū)ο笳Z(yǔ)言的程序員(例如:C++、Java程序員)來(lái)說是容易接受的。另外JDBC盡量保證其簡(jiǎn)單功能的簡(jiǎn)單性,同時(shí)在需要時(shí)還保證使用其高級(jí)功能。JDBC API 對(duì)于基本的SQL抽象和概念是一種自然的Java接口。雖然JDBC和ODBC很相像,且JDBC是建立在ODBC上的,JDBC保留了ODBC的基本設(shè)計(jì)特征,兩種接口都是基于(調(diào)用級(jí)接口)X/Open SQL CLI。但它們的區(qū)別在于JDBC以Java風(fēng)格與優(yōu)點(diǎn)為基礎(chǔ)并進(jìn)行優(yōu)化,使JDBC更加易于使用。
3 結(jié)語(yǔ)
綜合上述幾點(diǎn),進(jìn)一步通過以下表格對(duì)JSP技術(shù)和 Microsoft 公司的 ASP 技術(shù)進(jìn)行詳細(xì)的比較和對(duì)照,可以看出兩者雖有相同之處,但其區(qū)別是明顯的。通過比較進(jìn)行學(xué)習(xí),這也是學(xué)習(xí)一種新的技術(shù)或由現(xiàn)有技術(shù)自然過渡到另一種技術(shù)的有效途徑。?

參考文獻(xiàn)
1? 王克宏.Java語(yǔ)言SQL接口.北京:清華大學(xué)出版社,1997?
2? 肖剛.Java Web服務(wù)器應(yīng)用程序設(shè)計(jì).北京:電子工業(yè)出版社.2001?
3? 唐青松.顏亮.ASP應(yīng)用開發(fā)全攻略寶典.北京:中國(guó)水利水電出版社.2000?
4? http://java.sun.com/products/jsp/faq.html
基金項(xiàng)目:新疆自治區(qū)少數(shù)民族科技骨干人才特殊培養(yǎng)科研專項(xiàng)資金項(xiàng)目(2001—5)
