当前位置: 首页 > 图文教程 > 网络编程 > ASP > ASP 3.0高级编程(三十四)

ASP
ASP基础讲座(下)
解决IIS5 HTTP500内部错误
ASP 3.0高级编程(四十六)
ASP 3.0高级编程(四十五)
ASP 3.0高级编程(四十四)
ASP 3.0高级编程(四十三)
ASP 3.0高级编程(四十二)
ASP 3.0高级编程(四十一)
ASP 3.0高级编程(三十九)
ASP 3.0高级编程(三十八)
ASP 3.0高级编程(三十七)
ASP 3.0高级编程(三十六)
ASP 3.0高级编程(三十五)
ASP 3.0高级编程(三十四)
ASP 3.0高级编程(三十三)
ASP 3.0高级编程(三十二)
ASP 3.0高级编程(三十一)
ASP错误代码说明
jscript错误代码及相应解释大全
ASP错误处理

ASP 3.0高级编程(三十四)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 40 ::
收藏到网摘: n/a

7.4.4 使用IIS错误页面
与ASP错误处理过程相关的内容是为IIS提供可定制的错误页面。事实上,在IIS 4.0中也有这个特点。但新的ASP内置对象ASPError,更易于使用且提供更加强大的功能。
在第4章,当我们研究Server.Execute和Server.Transfer方法时,已经讲述了如何建立定制的错误页面。我们也讨论和使用了ASPError对象,但这种方式受到了一定的限制。在这一部分,将介绍如何将定制的错误网页和ASPError对象结合起来建立一个更好的处理ASP错误的方法。
我们可以使用VBScript检查ASPError对象的内容,从而创建一个定制的错误页面。构建一个包含错误内容全面信息的字符串,且写入到服务器磁盘上的日志文件中。然而网页的设计仅使访问者看到网页不可用这样一条信息是不行的,应该使访问者能够选择是重新载入上一个网页还是回到主页,使他们没意识已经发生了错误。
尽管我们采用VBScript创建这个网页,但其使用的一些特性对JScript来说也是适用的,这两种脚本语言的相互转换也是比较容易的。
可以从http://www.wrox.com站点下载本章及本书其他章节的示例文件。
1. 设置定制的错误页面
在能使用定制的错误页面之前,必须在Internet Services Manager进行相应的设置(设置方式见第4章)。把示例文件装入计算机的wwwroot目录中,打开Chapter07子目录的Properties对话框,在Custom Errors选项卡中,滚动列表并选中HTTP错误“500:100”条目,点击Edit Properties按钮,并键入定制的错误页面Custom_error.asp的URL

现在Chapter07子目录中的页面出现一个ASP错误时,就会打开定制的错误页面。
2. 使用定制的错误页面
在浏览器中打开Chapter07目录并选择到“Using a Custom Error Page”的链接,这个页面显示了一系列用于产生各种类型的错误的按钮,点击标有“Load a Page with a Syntax error”的按钮

这将载入一个名为syntax_error.asp的简单页面。然而看不到这个页面,因为这个页面包含了一个语法错误。ASP终止这个页面的编译/执行,并把执行转到定制错误页面,这个页面展示了错误的细节和两个按钮,这两个按钮用以返回上个页面(主菜单)或返回Web站点的缺省主页

这个页面也把错误报告追加到服务器磁盘C:\temp文件夹中名为custom_error.log的日志文件中,可以在文件编辑器中打开并查看它,日志文件已经记录了几个错误。


如果在页面中得到了一个信息,指明日志文件不能写入信息,可能是因为IUSR_machinename(IUSR_计算机名)帐号没有访问C:\temp目录的权限。当测试这个页面时,应该给予IUSR_machinename帐号对这个目录的全部控制权,或者改变custom_error.asp页面的程序代码以指向一个IUSR有全部控制权的文件夹
错误消息出现在页面中的唯一原因,是因为在cause_error.asp页面中我们选择了相应的复选框。如果关闭该选项并再次点击按钮,便看不到错误的详细情况,然而错误信息仍然记录在服务器磁盘上的custom_error.log错误日志文件中。
“Display debugging information”复选框给定制错误页面(而不是日志文件)提供了更多的信息,有助于调试那些使用ASP内置对象集合值的页面

在本章下面部分,将再讨论这一问题,同时也可以了解“Cause An Error”页面上的其他按钮所提供的其他种类的错误信息。注意有一些按钮能够比其他的按钮能够提供更多信息。特别是只有最后一个按钮给出ASP错误代码的值(这里是ASP 0177)。
(1) “Cause An Error”页面的功能
与先前讨论的示例页面一样,引起错误的页面使用同样的技术,用<Form>把值提交给同一个页面。然后ASP程序查看窗口上点击的是那个SUBMIT按钮,然后运行代码的相应部分。同时查看是否页面上两个复选框是否选中,如果是这样,程序首先设置一个或两个会话级的变量以指明这一点。
<%
'see if we are displaying error and debug information
'set session variables to retrieve in the custom error page
If Len(Request.Form("chkShowError")) Then
Session("ShowError") = "Yes"
Else
Session("ShowError") = ""
End If
If Len(Request.Form("chkShowDebug")) Then
Session("ShowDebug") = "Yes"
Else
Session("ShowDebug") = ""
End If
...
%>
由于使用了Server.Transfer,当错误发生时,正在运行的网页的整个ASP环境由IIS传给定制错误页面。然而,脚本变量的值并没有传给定制错误页面,所以必须使用Session变量,或者把值添加到Request.Form或Request.QueryString集合以便把值传送给定制错误页面。
设置了Session变量之后,程序继续查看点击了哪个按钮。每个类型的错误(除了第一类型外),都是由运行相应的ASP代码产生的,第一类型的错误需要调用另一个页面。
...
'look for a command sent from the FORM section buttons
If Len(Request.Form("cmdSyntax")) Then
Response.Clear
Response.Redirect "syntax_error.asp"
End If
If Len(Request.Form("cmdParamType")) Then
intDate = "error"
intDay = Day(intDate)
End If
If Len(Request.Form("cmdArray")) Then
Dim arrThis(3)
arrThis(4) = "Causes an error"
End If
If Len(Request.Form("cmdFile")) Then
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objTStream = objFSO.OpenTextFile("does_not_exist.txt")
End If
If Len(Request.Form("cmdPageCount")) Then
Set objPageCount = Server.CreateObject("MSWC.PageCounter")
objPageCount.WrongProperty = 10
End If
If Len(Request.Form("cmdObject")) Then
Set objThis = Server.CreateObject("Doesnot.Exist")
End If