錯(cuò)誤處理是讓程序員牢騷滿腹的東西之一。讓我們來面對(duì)它,我們不寫錯(cuò)誤的代碼就是了。。。或者類似的想法。不幸的是,代碼中的運(yùn)行時(shí)錯(cuò)誤可能有許多的原因,從硬件、軟件的改變到使用了別的開發(fā)團(tuán)隊(duì)的代碼等等。有效的處理這些錯(cuò)誤并使得它對(duì)于網(wǎng)站正常操作過程的中斷最小化是每個(gè)有良知的程序員的責(zé)任。 在本文討論的范圍內(nèi),有三個(gè)不同的地方可以發(fā)生錯(cuò)誤:腳本,中間件,以及IT內(nèi)部架構(gòu)。IT內(nèi)部架構(gòu)的錯(cuò)誤,比方周期性的性能降低并導(dǎo)致IIS進(jìn)行(Inetinfo.exe)崩潰幾乎是無法避免的。這種類型的錯(cuò)誤通常只能打電話要求技術(shù)支持并且會(huì)讓系統(tǒng)管理員忙上很久。開發(fā)者不能為阻止這類錯(cuò)誤做些什么,但是我們通常能夠應(yīng)付和改正腳本和中間件中的錯(cuò)誤。 在安裝了IIS以后,缺省的服務(wù)器端腳本語言被設(shè)置成VBScript。許多Web 開發(fā)團(tuán)隊(duì)在他們的開發(fā)環(huán)境中保持了這些缺省設(shè)置,這是不幸的,因?yàn)閂BScript對(duì)于處理運(yùn)行時(shí)錯(cuò)誤的支持非常的差。在VBScript中,開發(fā)者可以使用的唯一一個(gè)錯(cuò)誤處理結(jié)構(gòu)是
On Error Resume Next (打開錯(cuò)誤處理功能) 和 On Error GoTo 0 (關(guān)閉錯(cuò)誤處理功能)
為了在你的ASP 頁面里有效的使用這個(gè)錯(cuò)誤處理結(jié)構(gòu),你可能需要用這些結(jié)構(gòu)包括可能拋出異常的代碼,就象下面這樣: <% Dim myVar On Error Resume Next '下面一行代碼會(huì)在MSXML 4.0沒有被安裝或者已經(jīng)損壞的情況下產(chǎn)生錯(cuò)誤 Set myVar = Server.CreateObject("MSXML2.DOMDocument.4.0") If Err.Number <> 0 Then ' 在這里處理錯(cuò)誤 ' 結(jié)束錯(cuò)誤處理,避免以后發(fā)生的錯(cuò)誤無法被發(fā)現(xiàn) On Error GoTo 0 Else ' myVar 現(xiàn)在指向 MSXML 4.0 DOMDocument的一個(gè)實(shí)例 ' 結(jié)束錯(cuò)誤處理,避免以后發(fā)生的錯(cuò)誤無法被發(fā)現(xiàn) On Error GoTo 0 End If %> 就象你看到的一樣,如果你要在每一行現(xiàn)有的可能發(fā)生錯(cuò)誤的代碼上使用上面的規(guī)則,你的程序馬上就會(huì)充滿 "On Error" 和 "If Err.Number <> 0 Then . . ." 這樣的結(jié)構(gòu)。
而另一方面JScript對(duì)于健壯的錯(cuò)誤處理機(jī)制“結(jié)構(gòu)化異常處理(SEH)”有內(nèi)建的支持。使用SEH能夠讓你的軟件開發(fā)團(tuán)隊(duì)順利的轉(zhuǎn)移到.NET 環(huán)境上來,因?yàn)镾EH是JScript.NET, VB.NET, 和 C#缺省的錯(cuò)誤處理機(jī)制。(注意:.NET不支持VBScript。)下面的例子代碼執(zhí)行與VBScript代碼相同的操作,但是使用JScript語言并用SEH來處理異常
<%@ LANGUAGE="JScript" %> <% var myVar; try { myVar = Server.CreateObject("MSXML2.DOMDocument.4.0"); // 如果上面發(fā)生了錯(cuò)誤,那么catch // 代碼塊就會(huì)立刻被執(zhí)行 // 并在myVar上進(jìn)行必要的操作。 } catch (e) { // 在這里處理異常,異常本身可以用 // 'e' 變量進(jìn)行引用。 } finally { // 在這里進(jìn)行所有收尾工作 // 這段代碼不管錯(cuò)誤有沒有發(fā)生 // (也就是“catch”塊有沒有運(yùn)行) // 都會(huì)執(zhí)行。 } %>
通過在服務(wù)器端使用JScript,你就得到了SEH帶來的好處,以及對(duì)復(fù)雜ASP對(duì)象,比方Server,Request和Response對(duì)象的完全使用。要把這種腳本語言設(shè)置成你的ASP頁面的缺省語言,你只需要簡單的在你的ASP頁面上添加@LANGUAGE指令,就象上面的例子那樣。
出處:藍(lán)色理想
責(zé)任編輯:風(fēng)狗
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|