本文为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 (或者以上 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 错误处理程序页:
<%@Language="VBSCRIPT"%>
<%
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>
3. 在文件菜单上,单击保存。 在出现提示时,将该页命名为 My500ErrHandler.asp,然后将该页保存到以前创建的 ErrTest 文件夹中。
将新页设置为 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. 粘贴以下代码:
<%@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 浏览器中浏览到该文件。 请注意,内联错误处理程序重写所创建的集中错误处理程序。