ASP ASPError 对象
ASP ASPError 对象(中文讲解)
在经典Active Server Pages(ASP)中,ASPError
对象用于捕获和处理ASP页面执行过程中发生的错误。它在ASP 3.0及以上版本中引入,提供详细的错误信息,帮助开发者调试和记录问题。以下是对ASP ASPError
对象的详细讲解,包括属性、用法、示例和注意事项。
1. ASPError 对象概述
- 作用:
ASPError
对象用于获取ASP脚本或服务器端组件执行时的错误详细信息,例如错误编号、描述、源代码位置等。 - 访问方式:通过
Server.GetLastError()
方法获取ASPError
对象。 - 用途:
- 捕获脚本运行时错误(如除以零、文件未找到)。
- 记录错误日志以便调试。
- 向用户显示友好的错误信息。
- 限制:仅在ASP页面发生错误且IIS配置启用错误处理时可用。
2. ASPError 对象的属性
以下是ASPError
对象的常用属性:
ASPCode
:ASP特定的错误代码(如ASP 0113
表示脚本超时)。
Response.Write("ASP错误代码:" & err.ASPCode)
Number
:错误的COM错误编号(HRESULT)。
Response.Write("错误编号:" & err.Number)
Source
:导致错误的代码片段(如果可用)。
Response.Write("错误源:" & err.Source)
Category
:错误类别(如VBScript、JScript或组件)。
Response.Write("错误类别:" & err.Category)
Description
:错误的详细描述。
Response.Write("错误描述:" & err.Description)
File
:发生错误的ASP文件名。
Response.Write("文件:" & err.File)
Line
:发生错误的行号。
Response.Write("行号:" & err.Line)
Column
:发生错误的列号(如果可用)。
Response.Write("列号:" & err.Column)
ASPDescription
:ASP引擎提供的额外错误信息(特定于ASP错误)。
Response.Write("ASP描述:" & err.ASPDescription)
3. 获取 ASPError 对象
- 使用
Server.GetLastError()
获取最近的错误。 - 必须在启用错误处理的环境中(如自定义错误页面)使用。
- 通常在IIS配置的自定义错误页面(如
500-100.asp
)中处理。
配置自定义错误页面
- 在IIS管理器中:
- 打开网站属性 > 自定义错误。
- 将HTTP错误
500;100
设置为URL(如/errors/500-100.asp
)。
- 在
Global.asa
中可定义错误处理逻辑(可选)。
4. 示例代码
(1) 捕获并显示错误信息
创建一个页面故意触发错误,并通过自定义错误页面显示ASPError
信息:
<!-- test.asp -->
<%@ Language=VBScript CodePage=65001 %>
<%
Response.Charset = "UTF-8"
' 故意触发除以零错误
Dim result
result = 10 / 0
%>
自定义错误页面(500-100.asp
):
<%@ Language=VBScript CodePage=65001 %>
<%
Response.Charset = "UTF-8"
Set err = Server.GetLastError()
%>
<html>
<body>
<h1>发生错误</h1>
<p>错误代码:<%= Server.HTMLEncode(err.ASPCode) %></p>
<p>错误编号:<%= err.Number %></p>
<p>描述:<%= Server.HTMLEncode(err.Description) %></p>
<p>类别:<%= Server.HTMLEncode(err.Category) %></p>
<p>文件:<%= Server.HTMLEncode(err.File) %></p>
<p>行号:<%= err.Line %></p>
<p>列号:<%= err.Column %></p>
<p>源代码:<%= Server.HTMLEncode(err.Source) %></p>
<p>ASP描述:<%= Server.HTMLEncode(err.ASPDescription) %></p>
</body>
</html>
- 输出示例(假设除以零错误):
错误代码:ASP 0101
错误编号:11
描述:除数不能为零
类别:VBScript
文件:/test.asp
行号:5
列号:0
源代码:result = 10 / 0
ASP描述:(可能为空)
(2) 记录错误到日志文件
将错误信息写入日志文件:
<!-- 500-100.asp -->
<%@ Language=VBScript CodePage=65001 %>
<%
Response.Charset = "UTF-8"
Set err = Server.GetLastError()
' 写入日志
Set fs = Server.CreateObject("Scripting.FileSystemObject")
Set logFile = fs.OpenTextFile(Server.MapPath("errors.log"), 8, True)
logFile.WriteLine("[" & Now() & "] 错误:" & err.Description & " | 文件:" & err.File & " | 行:" & err.Line)
logFile.Close
Set logFile = Nothing
Set fs = Nothing
%>
<html>
<body>
<h1>错误已记录</h1>
<p>抱歉,发生错误,请稍后重试。</p>
</body>
</html>
- 日志输出示例:
[2025/10/05 09:43:00] 错误:除数不能为零 | 文件:/test.asp | 行:5
(3) 结合On Error Resume Next
在页面中使用传统错误处理并结合ASPError
:
<%@ Language=VBScript CodePage=65001 %>
<%
Response.Charset = "UTF-8"
On Error Resume Next
' 故意触发错误
Dim result
result = 10 / 0
If Err.Number <> 0 Then
Set aspErr = Server.GetLastError()
Response.Write("错误描述:" & Server.HTMLEncode(aspErr.Description) & "<br>")
Response.Write("文件:" & aspErr.File & "<br>")
Response.Write("行号:" & aspErr.Line)
End If
On Error GoTo 0
%>
- 说明:
On Error Resume Next
捕获常规VBScript错误,Server.GetLastError()
获取ASP特定错误。
5. 注意事项
- 环境要求:
ASPError
对象需ASP 3.0及以上版本(IIS 5.0+)。- 确保IIS配置了自定义错误页面(如
500;100
)。
- 中文编码:
- 设置
<%@ Language=VBScript CodePage=65001 %>
和Response.Charset = "UTF-8"
支持中文。 - 对
ASPError
属性输出使用Server.HTMLEncode
防止XSS:asp Response.Write(Server.HTMLEncode(err.Description))
- 错误页面配置:
- 默认情况下,错误直接返回给浏览器,需配置
500;100
自定义错误页面。 - 在IIS中设置:网站 > 属性 > 自定义错误 > 500;100 > 设置URL。
- 性能:
- 频繁记录错误(如写入文件)可能影响性能,建议优化日志逻辑。
- 仅在必要时使用
Server.GetLastError()
。
- 限制:
ASPError
仅捕获ASP引擎错误,某些COM组件错误可能需要额外处理。Source
和Column
属性可能不可用(取决于错误类型)。
- 调试:
- 检查IIS日志或启用详细错误信息(IIS > 网站 > 属性 > 启用“发送详细错误消息”)。
- 测试错误页面时,临时禁用
On Error Resume Next
以查看完整错误。
- 安全性:
- 避免向用户暴露详细错误信息(如
err.Source
),仅记录到日志。 - 使用
Server.HTMLEncode
过滤输出,防止XSS攻击。
6. 与Request/Response/Application/Session的关系
Request
:用户输入可能触发错误,ASPError
捕获处理。
If Request.Form("value") = "" Then
Response.Write("无效输入")
Response.End
End If
Response
:输出ASPError
信息或重定向到错误页面。
Response.Write("错误:" & Server.HTMLEncode(err.Description))
Application
:记录全局错误统计。
Application.Lock
Application("errorCount") = Application("errorCount") + 1
Application.Unlock
Session
:记录用户会话中的错误。
Session("lastError") = err.Description
7. 总结
ASP的ASPError
对象是处理和调试服务器端错误的强大工具,通过Server.GetLastError()
获取详细错误信息。结合自定义错误页面(如500-100.asp
)和日志记录,可以实现错误捕获、用户友好提示和问题追踪。注意中文编码、安全性(如XSS防护)和IIS配置,确保错误处理健壮。更多细节可参考ASP官方文档中的ASPError
对象说明。