处理程序中的各种错误是另程序员们心烦的一件事。面对它把,我们不要出错的代码,大家都这样想。不幸的是,从软、硬件的变动到重用其他开发团队的代码,运行错误可以由各种原因引起。有效处理这些错误并且把对站点的正常运行的影响减少到最小是每个有责任心的程序员的职责。
对于我们来说,有三个不同的地方会出现错误(也被称为异常):脚本、中间件和底层结构。底层错误,例如周期性出现的破坏IIS进程(Inteinfo.exe),是很少能够预料的。这种类型的错误通常需要打技术支持电话来解决并且会花费系统管理员大量的时间。程序员对于底层错误办法不多,但是可以捕获脚本和中间件错误。
IIS安装时将VBScript作为默认的服务器端脚本语言,很多Web开发商在他们的开发环境中保留了这个默认设置。这不是一个好的选择,因为VBScript对于运行错误处理的支持很弱。在VBSript中,程序员可以用来处理错误的唯一结构是:
On Error Resume Next //开始捕获错误
On Error GoTo 0 //关闭错误捕获
要想在你的页面中有效运用,要把有潜在异常的代码行放进这个结构中,如下所示:
<%
Dim myVar
On Error Resume Next
‘如果没有安装MSXML4.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 Error.Number <> 0 Then”结构。
相比之下,Jscript内建了强劲的错误处理机制:结构化异常处理(SHE)。使用SHE可以为以后迁移到.NET环境作好准备,因为SHE是Jscript.NET、VB.NET和C#的默认错误处理机制。(.NET并不支持VBScript。)下面的代码与上面的VBScript代码执行了同样的操作,但用的是Jscript并使用了SHE。
<%
var myVar
try{
myVar=Server.CreateObject(“MSXML2.DOMDocument.0.0”);
//如果发生错误,会立刻执行catch块
//对myVar进行操作
}
catch(e){
//在此处理错误。错误由变量“e”指出
}
finally{
//在此进行清除工作。不管发不发生错误都要执行这里的代码
}
%>
在服务器端使用Jscript,可以充分利用SHE,也可以完整使用内建ASP对象如Server、Request和Response。如果要将Jscript作为ASP页面的默认语言,只需在ASP页面中加入LANGUAGE标识,如同上例所示。