### 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 指令，就象上面的例子那样。