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