現(xiàn)在主流的網(wǎng)站開發(fā)語(yǔ)言無(wú)外乎asp、php、asp.net、jsp等。
網(wǎng)頁(yè)從開始簡(jiǎn)單的hmtl到復(fù)雜的服務(wù)語(yǔ)言,走過(guò)了10多個(gè)年頭,各種技術(shù)層出不窮,單個(gè)的主流技術(shù)也在不斷翻新的版本,現(xiàn)在分析下各種語(yǔ)言的區(qū)別、優(yōu)勢(shì)、劣勢(shì)、開發(fā)注意事項(xiàng)!
HTML:當(dāng)然這是網(wǎng)頁(yè)最基本的語(yǔ)言,每一個(gè)服務(wù)器語(yǔ)言都需要它的支持,要學(xué)習(xí),這個(gè)肯定是開始,不說(shuō)太多.
主流網(wǎng)站開發(fā)語(yǔ)言之ASP:ASP是微軟(Microsoft)所開發(fā)的一種后臺(tái)腳本語(yǔ)言,它的語(yǔ)法和Visual BASIC類似,可以像SSI(Server Side Include)那樣把后臺(tái)腳本代碼內(nèi)嵌到HTML頁(yè)面中。雖然ASP簡(jiǎn)單易用,但是它自身存在著許多缺陷,最重要的就是安全性問(wèn)題。目前在微軟的 .net 戰(zhàn)略中新推出的ASP.net 借鑒了Java技術(shù)的優(yōu)點(diǎn),使用C Sharp (C#) 語(yǔ)言作為ASP.net的推薦語(yǔ)言,同時(shí)改進(jìn)了以前ASP的安全性差等缺點(diǎn)。但是,使用ASP/ASP.net仍有一定的局限性,因?yàn)閺哪撤N角度來(lái)說(shuō)它們只能在微軟的 Windows NT/2000/XP + IIS的服務(wù)器平臺(tái)上良好運(yùn)行(雖然像ChilliSoft提供了在UNIX/Linux上運(yùn)行ASP的解決方案,但是目前ASP在UNIX/Linux上的應(yīng)用可以說(shuō)幾乎為0)。所以平臺(tái)的局限性和ASP自身的安全性限制了ASP的廣泛應(yīng)用。
ASP在執(zhí)行的時(shí)候,是由IIS調(diào)用程序引擎,解釋執(zhí)行嵌在HTML中的ASP代碼,最終將結(jié)果和原來(lái)的HTML一同送往客戶端。
主流網(wǎng)站開發(fā)語(yǔ)言之PHP:PHP 的全名非常有趣,它是一個(gè)巢狀的縮寫名稱“PHP: Hypertext Preprocessor”。PHP是一種HTML 內(nèi)嵌式的語(yǔ)言 (就像上面講的ASP那樣)。而 PHP 獨(dú)特的語(yǔ)法混合了C,Java,Perl以及 PHP 式的新語(yǔ)法。它可以比 CGI 或者 Perl 更快速地執(zhí)行動(dòng)態(tài)網(wǎng)頁(yè)。
PHP的源代碼完全公開,在 Open Source 意識(shí)抬頭的今天,它更是這方面的中流砥柱。不斷地有新的函數(shù)庫(kù)加入,以及不停地更新,使得 PHP 無(wú)論在 UNIX 或是 Win32 的平臺(tái)上都可以有更多新的功能。它提供豐富的函數(shù),使得在程式設(shè)計(jì)方面有著更好的資源。目前PHP的最新版本為4.1.1 ,它可以在Win32以及UNIX/Linux等幾乎所有的平臺(tái)上良好工作。PHP在4.0版后使用了全新的Zend引擎,其在好化之后的效率,比較傳統(tǒng) CGI 或者 ASP 等技術(shù)有了更好的表現(xiàn)。
平臺(tái)無(wú)關(guān)性是PHP的大優(yōu)點(diǎn),但是在優(yōu)點(diǎn)的背后,還是有一些小小的缺點(diǎn)的。如果在PHP中不使用ODBC,而用其自帶的數(shù)據(jù)庫(kù)函數(shù)(這樣的效率要比使用ODBC高)來(lái)連接數(shù)據(jù)庫(kù)的話, 使用不同的數(shù)據(jù)庫(kù),PHP的函數(shù)名不能統(tǒng)一。這樣,使得程序的移植變得有些麻煩。不過(guò),作為目前應(yīng)用最為廣泛的一種后臺(tái)語(yǔ)言,PHP的優(yōu)點(diǎn)還是異常明顯的。
ASP.NET:ASP.net是Microsoft.net的一部分,作為戰(zhàn)略產(chǎn)品,不僅僅是 Active Server Page (ASP) 的下一個(gè)版本;它還提供了一個(gè)統(tǒng)一的 Web 開發(fā)模型,其中包括開發(fā)人員生成企業(yè)級(jí) Web 應(yīng)用程序所需的各種服務(wù)。ASP.NET 的語(yǔ)法在很大程度上與 ASP 兼容,同時(shí)它還提供一種新的編程模型和結(jié)構(gòu),可生成伸縮性和穩(wěn)定性更好的應(yīng)用程序,并提供更好的安全保護(hù)??梢酝ㄟ^(guò)在現(xiàn)有 ASP 應(yīng)用程序中逐漸添加 ASP.NET 功能,隨時(shí)增強(qiáng) ASP 應(yīng)用程序的功能。ASP.NET 是一個(gè)已編譯的、基于 .NET 的環(huán)境,可以用任何與 .NET 兼容的語(yǔ)言(包括 Visual Basic .NET、C# 和 JScript .NET.)創(chuàng)作應(yīng)用程序。另外,任何 ASP.NET 應(yīng)用程序都可以使用整個(gè) .NET Framework。開發(fā)人員可以方便地獲得這些技術(shù)的優(yōu)點(diǎn),其中包括托管的公共語(yǔ)言運(yùn)行庫(kù)環(huán)境、類型安全、繼承等等。ASP.NET 可以無(wú)縫地與 WYSIWYG HTML 編輯器和其他編程工具(包括 Microsoft Visual Studio .NET)一起工作。這不僅使得 Web 開發(fā)更加方便,而且還能提供這些工具必須提供的所有優(yōu)點(diǎn),包括開發(fā)人員可以用來(lái)將服務(wù)器控件拖放到 Web 頁(yè)的 GUI 和完全集成的調(diào)試支持。微軟為ASP.net設(shè)計(jì)了這樣一些策略:易于寫出結(jié)構(gòu)清晰的代碼、代碼易于重用和共享、可用編譯類語(yǔ)言編寫等等,目的是讓程序員更容易開發(fā)出Web應(yīng)用,滿足計(jì)算向Web轉(zhuǎn)移的戰(zhàn)略需要。
主流網(wǎng)站開發(fā)語(yǔ)言之JSP:JSP和Servlet要放在一起講,是因?yàn)樗鼈兌际荢un公司的J2EE(Java 2 platform Enterprise Edition)應(yīng)用體系中的一部分。
Servlet的形式和前面講的CGI差不多,它是HTML代碼和后臺(tái)程序分開的。它們的啟動(dòng)原理也差不多,都是服務(wù)器接到客戶端的請(qǐng)求后,進(jìn)行應(yīng)答。不同的是,CGI對(duì)每個(gè)客戶請(qǐng)求都打開一個(gè)進(jìn)程(Process),而Servlet卻在響應(yīng)第一個(gè)請(qǐng)求的時(shí)候被載入,一旦Servlet被載入,便處于已執(zhí)行狀態(tài)。對(duì)于以后其他用戶的請(qǐng)求,它并不打開進(jìn)程,而是打開一個(gè)線程(Thread),將結(jié)果發(fā)送給客戶。由于線程與線程之間可以通過(guò)生成自己的父線程(Parent Thread)來(lái)實(shí)現(xiàn)資源共享,這樣就減輕了服務(wù)器的負(fù)擔(dān),所以,Java Servlet可以用來(lái)做大規(guī)模的應(yīng)用服務(wù)。
雖然在形式上JSP和ASP或PHP看上去很相似都可以被內(nèi)嵌在HTML代碼中。但是,它的執(zhí)行方式和ASP或PHP完全不同。在JSP被執(zhí)行的時(shí)候,JSP文件被JSP解釋器(JSP Parser)轉(zhuǎn)換成Servlet代碼,然后Servlet代碼被Java編譯器編譯成 .class 字節(jié)文件,這樣就由生成的Servlet來(lái)對(duì)客戶端應(yīng)答。所以,JSP可以看做是Servlet的腳本語(yǔ)言(Script Language)版。
由于JSP/Servlet都是基于Java的,所以它們也有Java語(yǔ)言的大優(yōu)點(diǎn)平臺(tái)無(wú)關(guān)性,也就是所謂的“一次編寫,隨處運(yùn)行(WORA – Write Once, Run Anywhere)”。除了這個(gè)優(yōu)點(diǎn),JSP/Servlet的效率以及安全性也是相當(dāng)驚人的。因此,JSP/Servlet雖然在國(guó)內(nèi)目前的應(yīng)用并不廣泛,但是其前途不可限量。
在調(diào)試JSP代碼時(shí),如果程序出錯(cuò),JSP服務(wù)器會(huì)返回出錯(cuò)信息,并在瀏覽器中顯示。這時(shí),由于JSP是先被轉(zhuǎn)換成Servlet后再運(yùn)行的,所以,瀏覽器中所顯示的代碼出錯(cuò)的行數(shù)并不是JSP源代碼的行數(shù),而是指轉(zhuǎn)換后的Servlet程序代碼的行數(shù)。這給調(diào)試代碼帶來(lái)一定困難。所以,在排除錯(cuò)誤時(shí),可以采取分段排除的方法(在可能出錯(cuò)的代碼前后輸出一些字符串,用字符串是否被輸出來(lái)確定代碼段從哪里開始出錯(cuò)),逐步縮小出錯(cuò)代碼段的范圍,最終確定錯(cuò)誤代碼的位置。
主流網(wǎng)站開發(fā)語(yǔ)言之CGI:CGI就是公共網(wǎng)關(guān)接口 (Common Gateway Interface) 的縮寫。它是最早被用來(lái)建立動(dòng)態(tài)網(wǎng)站的后臺(tái)技術(shù)。這種技術(shù)可以使用各種語(yǔ)言來(lái)編寫后臺(tái)程序,例如C,C++,Java,Pascal等,但是目前在CGI中使用的最為廣泛的是Perl語(yǔ)言。所以,狹義上所指的CGI程序一般都是指Perl程序,一般CGI程序的后綴都是.pl或者.cgi 。
CGI程序在運(yùn)行的時(shí)候,首先是客戶向服務(wù)器上的CGI程序發(fā)送一個(gè)請(qǐng)求,服務(wù)器接收到客戶的請(qǐng)求后,就會(huì)打開一個(gè)新的Process(進(jìn)程)來(lái)執(zhí)行CGI程序,處理客戶的請(qǐng)求。CGI程序最后將執(zhí)行的結(jié)果(HTML頁(yè)面代碼)傳回給客戶。
由于CGI程序每響應(yīng)一個(gè)客戶就會(huì)打開一個(gè)新的進(jìn)程,所以,當(dāng)有多個(gè)用戶同時(shí)進(jìn)行CGI請(qǐng)求的時(shí)候,服務(wù)器就會(huì)打開多個(gè)進(jìn)程,這樣就加重了服務(wù)器的負(fù)擔(dān),使服務(wù)器的執(zhí)行效率變得越來(lái)越低下。這也就是最近幾年來(lái)隨著各種新的后臺(tái)技術(shù)的誕生,CGI應(yīng)用在Internet上越來(lái)越少的原因。CGI方式不適合大訪問(wèn)量的應(yīng)用。
如今主流的Web服務(wù)器軟件主要由IIS或Apache組成。IIS支持ASP且只能運(yùn)行在Windows平臺(tái)下,Apache支持PHP,CGI,JSP且可運(yùn)行于多種平臺(tái),雖然Apache是世界使用排名第一的Web服務(wù)器平臺(tái),但是眾所周知,Windows以易用而出名,也因此占據(jù)不少的服務(wù)器市場(chǎng)。
我們常用的開發(fā)組合:
IIS環(huán)境下
1.ASP+ACCESS
2.ASP+SQL SERVER
3.ASP.NET+ACCESS
4.ASP.NET+SQL SERVER
APACHE環(huán)境下
5.jsp+Oracale
6.JSP+MYSQL
7.PHP+MYSQL
可以說(shuō),asp確實(shí)快過(guò)時(shí)了,在未來(lái)jsp和asp.net將會(huì)有巨大的潛力,但php憑借其開源的特性也會(huì)占有一定份額。
vb一般指vb6.0,是傳統(tǒng)的win32編程。vb.net和asp.net是基于微軟.net平臺(tái)的語(yǔ)言。說(shuō)java好主要是因?yàn)閖ava的j2ee部分做企業(yè)級(jí)開發(fā)很強(qiáng)大,而且跨平臺(tái)。c#是.net平臺(tái)上最好用的語(yǔ)言,現(xiàn)在只能運(yùn)行在windows系統(tǒng)。 web開發(fā)方面.net和j2ee的競(jìng)爭(zhēng)很激烈,難說(shuō)以后鹿死誰(shuí)手。 現(xiàn)在
做網(wǎng)站大部分都是asp.net或jsp的,asp.net容易上手,比較普及,但是平臺(tái)單一,jsp雖然上手難,但是跨平臺(tái),安全性高。
下面比較一下ASP、ASP.net、JSP和PHP的優(yōu)點(diǎn)和缺點(diǎn):
ASP優(yōu)點(diǎn):
1. 無(wú)需編譯
2. 易于生成
3. 獨(dú)立于瀏覽器
4. 面向?qū)ο?/div>
5. 與任何ActiveX scripting 語(yǔ)言兼容
6. 源程序碼不會(huì)外漏
缺點(diǎn):
1、Windows本身的所有問(wèn)題都會(huì)一成不變的也累加到了它的身上。安全性、穩(wěn)定性、跨平臺(tái)性都會(huì)因?yàn)榕cNT的捆綁而顯現(xiàn)出來(lái)。
2、ASP由于使用了COM組件所以它會(huì)變的十分強(qiáng)大,但是這樣的強(qiáng)大由于Windows NT系統(tǒng)最初的設(shè)計(jì)問(wèn)題而會(huì)引發(fā)大量的安全問(wèn)題。只要在這樣的組件或是操作中一不注意,哪么外部攻擊就可以取得相當(dāng)高的權(quán)限而導(dǎo)致網(wǎng)站癱瘓或者數(shù)據(jù)丟失。
3、由于ASP還是一種Script語(yǔ)言所沒除了大量使用組件外,沒有辦法提高其工作效率。它必須面對(duì)即時(shí)編繹的時(shí)間考驗(yàn),同時(shí)我們還不知其背后的組件會(huì)是一個(gè)什么樣的狀況。
4、無(wú)法實(shí)現(xiàn)跨操作系統(tǒng)的應(yīng)用。當(dāng)然這也是微軟的理由之一,只有這樣才能發(fā)揮ASP好的能力??墒俏覅s認(rèn)為正是Windows限制了ASP,ASP的概念本就是為一個(gè)能讓系統(tǒng)運(yùn)行于一個(gè)大的多樣化環(huán)境而設(shè)計(jì)的。
5、還無(wú)法完全實(shí)現(xiàn)一些企業(yè)級(jí)的功能:完全的集群、負(fù)載均橫。
ASP.NET優(yōu)點(diǎn):
1. 簡(jiǎn)潔的設(shè)計(jì)和實(shí)施。