(2) 定制错误页面的工作
知道了如何创建错误后,让我们来看看定制的错误页面。在前面的章节里已经知道了构建网页需要的理论,这里再概要地描述一下其工作过程。第一步是关闭缺省的错误处理器以便页面程序不被另一个错误中断。第二步通过创建一个新的ASPError对象收集原始错误信息。进行这个工作时要格式化一些值,并把它们转换成合适的数据类型。
<%
'prevent any other errors from stopping execution
On Error Resume Next
'get a reference to the ASPError object
Set objASPError = Server.GetLastError()
'get the property values
strErrNumber = CStr(objASPError.Number) 'normal error code
strASPCode = objASPError.ASPCode'ASP error code (if available)
If Len(strASPCode) Then
;;;strASPCode = "'" & strASPCode & "' "
Else
;;;strASPCode = ""
End If
strErrDescription = objASPError.Description
strASPDescription = objASPError.ASPDescription
strCategory = objASPError.Category;;;;;;'type or source of error
strFileName = objASPError.File;;'file path and name
strLineNum = objASPError.Line;;;'line number in file
strColNum = objASPError.Column;;'column number in line
If IsNumeric(strColNum) Then;;;;'if available convert to integer
;;;lngColNum = CLng(strColNum)
Else
;;;lngColNum = 0
End If
strSourceCode = objASPError.Source;;;;'source code of line
...
现在构建一个错误报告字符串,这段程序看起来复杂,但实际上仅是一系列If ...Then语句的嵌套,用以产生良好的报告格式,没有任何空的段落。如果错误是语法错误,来自ASPError对象的Source属性的源代码可在strSourceCode变量中得到,可以使用这个变量及lngColNum的值(从ASPError对象的Column属性中得到)增加一个标记用来指明在源程序中的什么地方发现了错误。
...
'create the error message string
strDetail = "ASP Error " & strASPCode & "occurred " & Now
If Len(strCategory) Then
;;;strDetail = strDetail & " in " & strCategory
End If
strDetail = strDetail & vbCrlf & "Error number: " & strErrNumber _
;;& " (0x" & Hex(strErrNumber) & ")" & vbCrlf
If Len(strFileName) Then
;;;strDetail = strDetail & "File: " & strFileName
;;;If strLineNum > "0" Then
;;;;;;strDetail = strDetail & ", line " & strLineNum
;;;;;;If lngColNum > 0 Then
;strDetail = strDetail & ", column " & lngColNum
;If Len(strSourceCode) Then
;;;;;'get the source line so put a ^ marker in the string
;;;;strDetail = strDetail & vbCrlf & strSourceCode & vbCrlf _
;;;;;;& String(lngColNum - 1, "-") & "^"
;End If
;;;;;;End If
;;;End If
;;;strDetail = strDetail & vbCrlf
End If
strDetail = strDetail & strErrDescription & vbCrlf
If Len(strASPDescription) Then
;;;strDetail = strDetail & "ASP reports: " & strASPDescription & vbCrlf
End If
...
标签: 编程