ASP 中健壯的頁結構的異常處理

錯誤處理是讓程序員牢騷滿腹的東西之一。讓我們來面對它,我們不寫錯誤的代碼就是了。。。或者類似的想法。不幸的是,代碼中的運行時錯誤可能有許多 的原因,從硬件、軟件的改變到使用了別的開發團隊的代碼等等。有效的處理這些錯誤並使得它對於網站正常操作過程的中斷最小化是每個有良知的程序員的責任。  
   
  在本文討論的範圍內,有三個不同的地方可以發生錯誤:腳本,中間件,以及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" %>
<%
var myVar;
try {
myVar = Server.CreateObject("MSXML2.DOMDocument.4.0");
// 如果上面發生了錯誤,那麼catch
// 代碼塊就會立刻被執行
// 並在myVar上進行必要的操作。
}
catch (e) {
// 在這裏處理異常,異常本身可以用
// 'e' 變量進行引用。
}
finally {
// 在這裏進行所有收尾工作
// 這段代碼不管錯誤有沒有發生
// (也就是“catch”塊有沒有運行)
// 都會執行。
}
%>

  通過在服務器端使用JScript,你就得到了SEH帶來的好處,以及對複雜ASP對象,比方Server,Request和Response 對象的完全使用。要把這種腳本語言設置成你的ASP頁面的缺省語言,你只需要簡單的在你的ASP頁面上添加@LANGUAGE指令,就象上面的例子那樣。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章