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

ASP
asp生成三维饼图的函数
ASP下的简洁的多重查询的方法与函数 真不错
发一个ASP的ADODB类代码
A利用ASP小偷和Google实现在线翻译功能的代码
ASP类型网站结合动网论坛会员的方法
Asp下实现多表单域无组件文件上传的实例
asp制作中常用到的函数库集合
易心asp分页类 v1.0
asp中xmlhttp组件发包
检测是否为数字类型的asp代码
可以获得文件的文件名的asp函数
用asp实现访问远程计算机上MDB access数据库文件的方法
用ASP实现写IIS日志的代码
asp在IE浏览器中下载服务端上的各类文件的实现方法
asp汉字中文图片验证码的实现代码
asp WAP获取手机终端信息的一段代码
asp取得数组中的最大值的方法
用asp实现的截取指定格式字符串的代码
asp jmail发邮件 详细解析
ASP编程中连接数据库和数据库操作的常用代码

ASP 3.0高级编程(三十四)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 219 ::
收藏到网摘: 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