本文为Microsoft官方文档。描述如何在asp中使用Error对象以及使用自定义的错误页面。
概要
本分步指南演示如何使用新的 ASPError 对象创建自定义的、集中的错误处理页。 例如,当发生错误并且系统中的某个进程尚未完成时,应用程序可能要求向某人发送电子邮件通知。 或者,您可能希望将 Internet Information Server (IIS) 错误日志信息以外的某些信息记录到数据库中。
先决条件
• Microsoft Windows 2000 Professional, Windows 2000 Server, or Windows 2000 Advanced Server
• 已安装和配置了 Internet Information Server 5.0 (或者以上 http://www.aspxuexi.com/)
使用 ASPError 对象所需的 ASPError 对象及相关 Active Server Pages (ASP) 方法是 Active Server Pages 3.0 (ASP) 中的新增功能,在 Windows 2000 以前的操作系统中没有这些功能。
新建 SubWeb
1. 右键单击开始,然后单击资源管理器以打开 Windows 资源管理器。
2. 选择 Web 站点的根文件夹(默认情况下为 C:\InetPub\Wwwroot)。
3. 在文件菜单上,指向新建,然后单击文件夹。 将该文件夹命名为 ErrTest。
4. 右键单击 ErrTest,然后单击属性。
5. 在安全选项卡上,单击 Everyone。 在权限下,确保已选中读取和写入复选框。 其他复选框保持不变。 如果进行了任何更改,请单击应用。
6. 从 Windows 开始菜单,指向程序,指向管理工具,然后单击 Internet 服务管理器以打开 Internet 服务管理器 (ISM)。
7. 在“默认 Web 站点”下,应看到 ErrTest 目录。右键单击 ErrTest,然后单击属性。
8. 确认已按以下方式启用了匿名访问:
• 在目录安全性选项卡上,在匿名访问和验证控制下,单击编辑。
• 选中匿名访问复选框,单击确定,然后单击应用。
9. 若要将该目录标记为 ASP 应用程序,请在目录选项卡上,单击应用程序设置下的创建。 单击应用以保存所作的更改,然后单击确定关闭 ErrTest 属性对话框。
创建自定义错误处理 ASP 页
1. 在 Windows 开始菜单中,指向程序,指向附件,然后单击记事本。
2. 将下列代码粘贴到“记事本”中以创建示例 ASP 错误处理程序页:
<%
Option Explicit
On Error Resume Next
Response.Clear
Dim objError
Set objError = Server.GetLastError()
%>
<html>
<head>
<title>ASP 500 Error</title>
<style>
BODY { FONT-FAMILY: Arial; FONT-SIZE: 10pt;
BACKGROUND: #ffffff; COLOR: #000000;
MARGIN: 15px; }
H2 { FONT-SIZE: 16pt; COLOR: #ff0000; }
TABLE { BACKGROUND: #000000; PADDING: 5px; }
TH { BACKGROUND: #0000ff; COLOR: #ffffff; }
TR { BACKGROUND: #cccccc; COLOR: #000000; }
</style>
</head>
<body>
<h2 align="center">ASP 500 Error</h2>
<p align="center">An error occurred processing the page you requested.<br>
Please see the details below for more information.</p>
<div align="center"><center>
<table>
<% If Len(CStr(objError.ASPCode)) > 0 Then %>
<tr>
<th nowrap align="left" valign="top">IIS Error Number</th>
<td align="left" valign="top"><%=objError.ASPCode%></td>
</tr>
<% End If %>
<% If Len(CStr(objError.Number)) > 0 Then %>
<tr>
<th nowrap align="left" valign="top">COM Error Number</th>
<td align="left" valign="top"><%=objError.Number%>
<%=" (0x" & Hex(objError.Number) & ")"%></td>
</tr>
<% End If %>
<% If Len(CStr(objError.Source)) > 0 Then %>
<tr>
<th nowrap align="left" valign="top">Error Source</th>
<td align="left" valign="top"><%=objError.Source%></td>
</tr>
<% End If %>
<% If Len(CStr(objError.File)) > 0 Then %>
<tr>
<th nowrap align="left" valign="top">File Name</th>
<td align="left" valign="top"><%=objError.File%></td>
</tr>
<% End If %>
<% If Len(CStr(objError.Line)) > 0 Then %>
<tr>
<th nowrap align="left" valign="top">Line Number</th>
<td align="left" valign="top"><%=objError.Line%></td>
</tr>
<% End If %>
<% If Len(CStr(objError.Description)) > 0 Then %>
<tr>
<th nowrap align="left" valign="top">Brief Description</th>
<td align="left" valign="top"><%=objError.Description%></td>
</tr>
<% End If %>
<% If Len(CStr(objError.ASPDescription)) > 0 Then %>
<tr>
<th nowrap align="left" valign="top">Full Description</th>
<td align="left" valign="top"><%=objError.ASPDescription%></td>
</tr>
<% End If %>
</table>
</center></div>
</body>
</html>
将新页设置为 500 种错误的错误处理程序
1. 在开始菜单上,指向程序,指向管理工具,然后单击 Internet 服务管理器。
2. 右键单击“默认 Web 站点”下的 ErrTest 虚拟目录,然后单击属性。
3. 在自定义错误信息选项卡上,滚动到“HTTP 错误”列中一个包含“500;100”的项。 可以在其中更改设置,以指向自定义错误处理程序。
4. 选择作为 500;100 错误当前定义的行,然后单击编辑属性。
5. 在消息类型下拉列表框中,单击 URL。
6. 请注意,在 URL 文本框中,URL 默认指向位于“/iisHelp/common/500-100.asp”的页。 这是系统上的默认错误处理页,如果未定义自定义处理程序,则通常由它处理 ASP 错误。 请注意,可以在文本编辑器中打开该页以查看它的错误处理方法。
7. 若要启用自定义处理程序,请键入到 ASP 页的虚拟路径。 例如,如果 ErrTest 虚拟目录就在服务器上根 Web 站点的下方,则键入以下路径:
/ErrTest/My500ErrHandler.asp
8. 单击确定两次,关闭这些对话框并设置自定义错误处理程序。
测试自定义错误处理程序
测试 1:运行时错误
下页演示一个运行时错误,当您执行无法完成的操作(如被零除)时就会出现这种错误: 1. 单击开始,指向程序,指向附件,然后单击记事本。
2. 粘贴以下代码:
2. 粘贴以下代码:
<%@Language="VBSCRIPT"%>
<html>
<head>
<title>Bad Page 1</title>
</head>
<body>
<% Response.Write 1/0 %>
</body>
</html>
3. 在文件菜单上,单击保存。 出现提示时,将该页命名为 BadPage1.asp,然后将该页保存到以前创建的 ErrTest 文件夹中。
4. 在 Web 浏览器中,在地址栏中键入以下 URL 以浏览到该页:
http://<您的服务器名 >/ErrTest/BadPage1.asp
测试 2:代码中无效的方法
下页演示当代码调用的方法不存在或者内部 ASP 对象引用中的方法有拼写错误时发生什么情况: 1. 在开始菜单中,指向程序,指向附件,然后单击记事本。
2. 粘贴以下代码:
<%@Language="VBSCRIPT"%>
<html>
<head>
<title>Bad Page 2</title>
</head>
<body>
<% Response.BadMethod "Hello" %>
</body>
</html>
3. 在文件菜单上,单击保存。 出现提示时,将该页命名为 BadPage2.asp,然后将该页保存到以前创建的 ErrTest 文件夹中。
4. 在 Web 浏览器中,在地址栏中键入以下 URL 以浏览到该页:
http://<您的服务器名 >/ErrTest/BadPage2.asp
测试 3:未注册的对象
下页演示创建未在服务器上注册的外部对象时出现的错误: 1. 在开始菜单中,指向程序,指向附件,然后单击记事本。
2. 粘贴以下代码:
<%@Language="VBSCRIPT"%>
<html>
<head>
<title>Bad Page 3</title>
</head>
<body>
<%
Dim objBad
Set objBad = Server.CreateObject("BAD.OBJECT.CLASS")
%>
</body>
</html>
3. 在文件菜单上,单击保存。 出现提示时,将该页命名为 BadPage3.asp,然后将该页保存到以前创建的 ErrTest 文件夹中。
4. 在 Web 浏览器中,在地址栏中键入以下 URL 以浏览到该页:
http://<您的服务器名 >/ErrTest/BadPage3.asp
疑难解答
• 在创建自定义错误处理程序时,应了解其他两个 ASP 概念: Server.Transfer 方法和 Server.GetLastError 方法。 Server.Transfer 方法将执行传送到在应用程序中定义的错误处理页。 因为 Server.Transfer 自动发生,所以通常不必对它进行处理。 Server.GetLastError 方法用于返回错误处理页中的 ASPError 对象。 并不要求您一定使用这种方法,在前面的示例错误处理页中包含这种方法。 有关这两种方法的更多信息,请参见“参考”一节。
• 无论出现错误的页是用 JScript 还是用 VBScript 编写的,内置的错误处理程序都可以处理这些错误;但是,本文中的基本示例只返回有关 VBScript 页错误的有用信息。 如果页是用 Jscript 编写的,则可能需要创建针对 Jscript 的错误处理程序;或者,如果需要用错误处理程序处理任何类型页的错误,请查看默认错误处理页使用的方法。
• Microsoft Internet Explorer 5 或更高版本包含一个可重写标准 HTTP Web 服务器错误信息的设置,这可能会导致浏览器出现异常情况。 若要关闭该功能,在浏览器中的工具菜单上,单击 Internet 选项。 在高级选项卡上,清除“显示友好 HTTP 错误信息”复选框。
• 还要切记,仍然可以使用内联错误处理,内联错误处理将重写集中错误处理程序。 若要演示此操作,请在“记事本”中打开 BadPage1.asp,粘贴下列修改后的代码(它增加了一个内联错误处理程序):
<%@Language="VBSCRIPT"%>
<html>
<head>
<title>Bad Page 1</title>
</head>
<body>
<%
On error resume next
Response.Write 1/0
if err.number <> 0 then
Response.Write err.description & "<BR>" & err.source & "<BR>"
err.clear
end if
%>
</body>
</html>
保存这些更改,并在 Web 浏览器中浏览到该文件。 请注意,内联错误处理程序重写所创建的集中错误处理程序。
轉自:http://www.aspxuexi.com/aspbasic/error/2007-11-5/ASPError.htm