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)中处理。
配置自定义错误页面
  1. 在IIS管理器中:
  • 打开网站属性 > 自定义错误。
  • 将HTTP错误500;100设置为URL(如/errors/500-100.asp)。
  1. 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. 注意事项

  1. 环境要求
  • ASPError对象需ASP 3.0及以上版本(IIS 5.0+)。
  • 确保IIS配置了自定义错误页面(如500;100)。
  1. 中文编码
  • 设置<%@ Language=VBScript CodePage=65001 %>Response.Charset = "UTF-8"支持中文。
  • ASPError属性输出使用Server.HTMLEncode防止XSS:
    asp Response.Write(Server.HTMLEncode(err.Description))
  1. 错误页面配置
  • 默认情况下,错误直接返回给浏览器,需配置500;100自定义错误页面。
  • 在IIS中设置:网站 > 属性 > 自定义错误 > 500;100 > 设置URL。
  1. 性能
  • 频繁记录错误(如写入文件)可能影响性能,建议优化日志逻辑。
  • 仅在必要时使用Server.GetLastError()
  1. 限制
  • ASPError仅捕获ASP引擎错误,某些COM组件错误可能需要额外处理。
  • SourceColumn属性可能不可用(取决于错误类型)。
  1. 调试
  • 检查IIS日志或启用详细错误信息(IIS > 网站 > 属性 > 启用“发送详细错误消息”)。
  • 测试错误页面时,临时禁用On Error Resume Next以查看完整错误。
  1. 安全性
  • 避免向用户暴露详细错误信息(如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对象说明。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注