楊 萌
(1.合肥工業(yè)大學(xué)計(jì)算機(jī)與信息學(xué)院,安徽合肥 230009;2.淮北職業(yè)技術(shù)學(xué)院計(jì)算機(jī)科學(xué)技術(shù)系,安徽淮北 235000)
主流動(dòng)態(tài)網(wǎng)頁技術(shù)PHP、JSP與ASP.NET的比較研究
楊 萌1,2
(1.合肥工業(yè)大學(xué)計(jì)算機(jī)與信息學(xué)院,安徽合肥 230009;2.淮北職業(yè)技術(shù)學(xué)院計(jì)算機(jī)科學(xué)技術(shù)系,安徽淮北 235000)
目前流行的動(dòng)態(tài)網(wǎng)頁技術(shù)主要有PHP、JSP與ASP.NET等,文中比較了PHP、JSP與ASP.NET在數(shù)據(jù)庫(kù)的連接、開發(fā)效率、安全性等方面的差異,并分析其應(yīng)用前景及發(fā)展方向。
PHP;JSP;ASP.NET;動(dòng)態(tài)網(wǎng)頁技術(shù)
Web技術(shù)經(jīng)歷了重大演變。最早的網(wǎng)頁僅僅由靜態(tài)文檔構(gòu)成,用戶瀏覽時(shí)只能被動(dòng)接受網(wǎng)頁內(nèi)容。隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,不僅可以在HTML中嵌入程序,而且可以在運(yùn)行時(shí)向HTML文檔添加動(dòng)態(tài)內(nèi)容,從而構(gòu)成動(dòng)態(tài)網(wǎng)頁,用戶可以與網(wǎng)頁進(jìn)行交互,實(shí)現(xiàn)了全新的媒體形式。
目前在Internet上廣泛使用的后臺(tái)技術(shù)種類繁多,目前流行的三種動(dòng)態(tài)技術(shù)有PHP、JSP及ASP.NET等,每種技術(shù)都有各自的特點(diǎn),均是為動(dòng)態(tài)內(nèi)容而設(shè)計(jì)。
是一種易于學(xué)習(xí)、有良好數(shù)據(jù)庫(kù)交互能力、跨平臺(tái)的服務(wù)器端的嵌入式腳本語言。它與HTML語言具有非常好的兼容性,可以直接在腳本代碼中加入HTML標(biāo)簽,也可以在HTML標(biāo)簽中加入腳本代碼從而更好地實(shí)現(xiàn)頁面控制。它的語法大量地借用C、Java和Perl的語法,并結(jié)合PHP獨(dú)有的特性,使WEB開發(fā)者能快速地開發(fā)出動(dòng)態(tài)頁面。它支持目前絕大多數(shù)數(shù)據(jù)庫(kù)。PHP是完全免費(fèi)的,可以不受限制自由下載源碼,還可以從中加進(jìn)自己需要的特色。
是由SUN公司倡導(dǎo),許多公司參與一起建立的一種動(dòng)態(tài)網(wǎng)頁技術(shù)標(biāo)準(zhǔn)[1]132-133。它是HTML文件中插入JAVA程序段和JSP標(biāo)記從而形成JSP文件。Web服務(wù)器在遇到訪問JSP網(wǎng)頁的請(qǐng)求時(shí),首先執(zhí)行其中的程序段,然后將執(zhí)行的結(jié)果連同JSP文件中的HTML代碼一起返回給客戶。JSP是在服務(wù)器端執(zhí)行的,通常返回該客戶端的就是一個(gè)HTML文本,因此客戶端只要有瀏覽器瀏覽就行。Java Servlet是JSP的技術(shù)基礎(chǔ),而且大型的Web應(yīng)用程序的開發(fā)需要Java Servlet和JSP配合才能完成。
ASP最新的版本ASP.NET是對(duì)ASP進(jìn)行了完全重寫。ASP.NET是用于構(gòu)建Web應(yīng)用程序的一個(gè)完整的框架。這個(gè)模型的主要特性之一是選擇編程語言的靈活性。ASP.NET可以使用腳本語言(如VBscript、Jscript等)以及編譯語言(如VB、C等)。新框架使用通用語言運(yùn)行環(huán)境(CLR),先將您語言的源代碼編譯成Microsoft中間語言代碼,然后CLR執(zhí)行這些代碼。這個(gè)框架還提供真正的面向?qū)ο缶幊蹋∣OP),并支持真正的繼承、多態(tài)和封裝。.NET類庫(kù)根據(jù)特定的任務(wù)組織成可繼承的類。除此之外,當(dāng)用ASP.NET編程時(shí),可以用ODBC來集成數(shù)據(jù)庫(kù),ODBC提供了一組一致的調(diào)用函數(shù)來訪問您的目標(biāo)數(shù)據(jù)庫(kù)。
這三種技術(shù)相對(duì)來說,JSP是一種較新的技術(shù),國(guó)外比國(guó)內(nèi)流行,尤其是電子商務(wù)類網(wǎng)站,多采用JSP。JSP是基于平臺(tái)和服務(wù)器的相互獨(dú)立的,JSP標(biāo)簽可擴(kuò)展性和JSP跨平臺(tái)組件的重要性將使JSP為web數(shù)據(jù)庫(kù)應(yīng)用提出更具競(jìng)爭(zhēng)力的解決防范。
在企業(yè)應(yīng)用方面到底是選.NET平臺(tái)還是J2EE平臺(tái)呢?從體系結(jié)構(gòu)和技術(shù)細(xì)節(jié)來講,J2EE和.NET都采用虛擬機(jī)技術(shù),兩者對(duì)前端HTTP、進(jìn)程內(nèi)通信、后端數(shù)據(jù)庫(kù)處理技術(shù)都發(fā)展到極致。而兩者在現(xiàn)階段的主要區(qū)別:在功能方面J2EE比.NET更豐富;在使用方面.NET比J2EE更簡(jiǎn)單;在與平臺(tái)無關(guān)方面.NET還沒有真正實(shí)現(xiàn),而J2EE在這一點(diǎn)上具有優(yōu)勢(shì);在風(fēng)格差異而言,J2EE繼承了大型主機(jī)和Unix的風(fēng)格,各個(gè)部件之間相對(duì)松散獨(dú)立,需要一定組合過程,而.NET的風(fēng)格更像Windows系統(tǒng),所有組件都緊密地集成在一起。
在PHP5中,OO體系幾乎是COPY的Java的,這樣一來既保證了PHP高階用戶不流失,也使得他們能方便地使用最新的技術(shù)體系來架構(gòu)自已的應(yīng)用,同時(shí)也為Java程序員使用PHP提供了方便。在完善OO體系后,PHP具備了真正進(jìn)入企業(yè)級(jí)市場(chǎng)的能力。因此,在未來相當(dāng)長(zhǎng)時(shí)期內(nèi),PHP一方面會(huì)和Java之間建立更為緊密的關(guān)系用來黏合JavaBeans和Servlet,同時(shí)PHP會(huì)爭(zhēng)取在某一些方面取代JSP,另一方面是做Java和.NET間的集成。
ASP.NET是基于通用語言的編譯運(yùn)行的程序,所以它的強(qiáng)大性和適應(yīng)性,可以使它運(yùn)行在Web應(yīng)用軟件開發(fā)者的幾乎全部的平臺(tái)上[2]13-14。通用語言的基本庫(kù),消息機(jī)制,數(shù)據(jù)接口的處理都能無縫的整合到ASP.NET的Web應(yīng)用中。
PHP3可在Windows、Unix、Linux的Web服務(wù)器上正常執(zhí)行,還支持IIS、Apache等一般的Web服務(wù)器。用戶更換平臺(tái)時(shí)無需變換PHP3代碼,可即拿即用。
JSP作為Java家族的一員,秉承了Java技術(shù)的“一次編寫,隨處可用”的特性,JSP幾乎可以執(zhí)行于Win NT、Linux等所有平臺(tái)。在NT下IIS通過一個(gè)外加服務(wù)器,例如JRUN就能支持JSP。由于廣泛應(yīng)用在NT、Unix和Linux上的Web服務(wù)器Apache能夠支持JSP,因此JSP有更廣泛的執(zhí)行平臺(tái)。Win NT、Linux、Unix這三種平臺(tái)各有各的優(yōu)勢(shì)但Java字節(jié)碼都是標(biāo)準(zhǔn)的與平臺(tái)無關(guān)的,因此從一個(gè)平臺(tái)移植到另外一個(gè)平臺(tái)不用重新編譯。
PHP的運(yùn)行是靠它的語言解釋器來完成的。在NT或WIN9X下,PHP1EXE是一個(gè)解釋器它的作用是解釋后綴為1PHP、1PHP3、1PHTML或其它的文件,根據(jù)里面定義的程序來訪問數(shù)據(jù)庫(kù),讀寫文件或執(zhí)行外部命令,并將執(zhí)行的結(jié)果組織成STRING返回給WEB SERVER然后當(dāng)作HTML格式的文件發(fā)送給瀏覽器讀取文件和執(zhí)行外部命令。PHP的另外一個(gè)特性是執(zhí)行外部命令,在UNIX下比較多見:ls,echo等。這些都是安全隱患之所在。
對(duì)于ASP.NET來說內(nèi)建的wiIldow8驗(yàn)證和每一個(gè)應(yīng)用程序的獨(dú)立配置,可以確保原程序的絕對(duì)安全。
JSP要先編譯成字節(jié)碼然后再由Java虛擬機(jī)執(zhí)行,源碼相對(duì)不易被下載,尤其在JavaBean后安全性更高。Java還能通過異常處理機(jī)制來有效防止系統(tǒng)的崩潰。
JSP雖然在形式上與ASP或PHP很相似—都可以被內(nèi)嵌在HTML代碼中,但執(zhí)行方式卻完全不同。在執(zhí)行時(shí),JSP文件被JSP解釋器(JSP Parser)轉(zhuǎn)換成Servlet代碼,然后代碼再被Java編譯器編譯成.class字節(jié)文件,由生成的Servlet來對(duì)客戶端應(yīng)答。所以JSP可以看做是Servlet的腳本語言版。
PHP是一種在服務(wù)器端運(yùn)行,嵌入在HTML并由服務(wù)器解釋的腳本語言。PHP獨(dú)特的語法混合了C、Java、Perl以及PHP創(chuàng)新的語法,容易被初學(xué)者掌握。這種語言可以讓W(xué)eb開發(fā)人員快速高效地寫出動(dòng)態(tài)生成的頁面。
ASP.NET的語法在很大程度上與ASP兼容,同時(shí)它還提供一種新的編程模型和結(jié)構(gòu),可生成伸縮性和穩(wěn)定性更好的應(yīng)用程序,并提供更好的安全保護(hù)。ASP.NET是一個(gè)已編譯的、基于.NET的環(huán)境,可以用任何與.NET兼容的語言創(chuàng)作應(yīng)用程序。另外,任何ASP.NET應(yīng)用程序都可以使用整個(gè)Microsoft.NET Framework。ASP.NET可以無縫地與WYSIWYG HTML編輯器和其他編程工具(包括Microsoft Visual Studio.NET)一起工作。這不僅使得Web開發(fā)更加方便,而且還能提供這些工具必須提供的所有優(yōu)點(diǎn)。
(1)ASP.NET ASP.NET通過ADO技術(shù)可以訪問數(shù)據(jù)庫(kù)系統(tǒng),ADO提供的DataGrid等數(shù)據(jù)庫(kù)元件可以直接和數(shù)據(jù)庫(kù)聯(lián)系,把數(shù)據(jù)庫(kù)中的內(nèi)容顯示出來[3]46-48。
(2)PHP PHP支持多種主流與非主流的數(shù)據(jù)庫(kù),如:Interbase、Msql等。其中,PHP與Mysql是現(xiàn)在絕佳的組合,是可跨平臺(tái)運(yùn)行的。PHP可以編譯具有與許多數(shù)據(jù)庫(kù)相連接的函數(shù),Web頁面開發(fā)人員可以編寫外圍函數(shù)去間接存取數(shù)據(jù)庫(kù)。通過這樣的途徑,當(dāng)更換使用的數(shù)據(jù)庫(kù)時(shí),可以輕松地修改編碼以適應(yīng)這樣的變化。PHPLIB就是最常用的可以提供一般事務(wù)需要的一系列數(shù)據(jù)庫(kù)。目前,PHP提供的數(shù)據(jù)庫(kù)接口支持彼此不統(tǒng)一,比如對(duì)MySQL、Sybase等的接口彼此不相同,這是PHP的一個(gè)弱點(diǎn)[2]13-14。
(3)JSP使用JSP標(biāo)識(shí)或者小腳本來產(chǎn)生頁面上的動(dòng)態(tài)內(nèi)容。產(chǎn)生內(nèi)容的邏輯被封裝至標(biāo)識(shí)和JavaBeans群組件中,并且捆綁在小腳本中,所有的腳本在服務(wù)器端執(zhí)行。在服務(wù)器端,JSP引擎解釋JSP標(biāo)識(shí),產(chǎn)生所請(qǐng)求的內(nèi)容,并且將數(shù)據(jù)庫(kù)操作結(jié)果以HTML或XML頁面的形式發(fā)送回瀏覽器。這有助于作者保護(hù)自己的代碼。
真正的市場(chǎng),是需要強(qiáng)大的競(jìng)爭(zhēng)者之間的較量。PHP,JSP和ASP.NET相互共存,它們本身也在不斷地相互借鑒和完善,并且有望通過Web服務(wù)實(shí)現(xiàn)互操作。這樣用戶才能得到最好的技術(shù)和解決方案。
[1] 張智敏.動(dòng)態(tài)網(wǎng)頁設(shè)計(jì)技術(shù)ASP.NET、PHP與JSP的比較分析[J].科學(xué)之友,2008,11(33).
[2] 胡楊.動(dòng)態(tài)網(wǎng)頁技術(shù)ASP、PHP和JSP比較分析[J].軟件技術(shù)研究,2006,1(7).
[3] 樂秀潘,沈琴.ASP與ASP.NET的比較[J].電力系統(tǒng)通信,2001(12).
責(zé)任編輯:孟云玲
TP393.02
A
1671-8275(2011)01-0009-02
2010-10-26
楊萌(1979-),女,安徽淮北人,合肥工業(yè)大學(xué)計(jì)算機(jī)與信息學(xué)院2009級(jí)計(jì)算機(jī)技術(shù)專業(yè)碩士研究生,淮北職業(yè)技術(shù)學(xué)院計(jì)算機(jī)科學(xué)技術(shù)系助理工程師。