手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络编程>Asp编程>列表

ASP 3.0高级编程(十五)

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!


图4-19 设置属性时的页面屏幕
Properties对话框的Custom Errors选项卡在IIS安装时(除非已经进行过修改)设置了缺省映射关系的列表,如图4-20所示:

图4-20 映射关系的列表
靠近该列表的底部是HTTP错误500:100的一个条目。类型500错误是由ASP产生的,可以从中看出一些错误已经与错误网页建立了映射关系。这些错误都是一般性的错误,比如“Invalid Application”、“Server Shutting Down”等等。然而,如果ASP载入包含语法错误的页面,或者出现一个运行期错误,则出现500:100错误页面。在列表中显示的缺省映射关系表明,在这个目录中的一个文件出现上述错误时,将执行500-100.asp页面。
当一个ASP错误出现时,我们所看到的信息不再是一个普通的Web网页,而是一个ASP Web网页(也就是说它具有文件扩展名.asp)。也可以根据需要编辑该映射关系来指向另一个页面。
(3) 指定一个定制的错误网页
单击Custom Errors选项中的Edit Properties按钮,打开Error Mapping Properties对话框。在Message Type下拉列表中选择URL,键入自己的定制错误网页的完整虚拟路径,如图4-21所示:

图4-21 指定错误页面的虚拟路径的屏幕
在图4-21中给出的值指向我们创建的与示例网页一起使用的一个定制错误网页。根据你安装示例文件的具体位置,可能要使用不同的路径。
现在无论何时出现一个500:100类型的错误,将打开我们的定制错误页面。Message Type的其他两个选项是:
· Default(缺省):可以简单地输入一个短的文本信息,而不是指定一个发送给客户端的页面。
· File(文件):指定一个HTTP错误网页的物理路径。
在选择File选项时,指定的网页由IIS载入,载入的方式与在Windows Explorer中双击要载入的文件时的方式相同。这意味着ASP网页不能使用这个选项,因为在这种情况下不会执行其中的任何脚本。
4. 使用GetLastError方法和ASPError对象
配置好IIS后,在编辑了错误映射属性的目录内的任一页面上出现一个与ASP相关的错误时,都将载入定制错误页面。实际上,现在已经设置了一个正常的脚本错误陷阱,因为在这个目录内的任何一个网页上的ASP运行期错误都将触发定制错误页面。
事实上在内部IIS通过Server.Transfer方法进行这种操作,这意味着能够访问正在运行的原网页的全部环境。可以在脚本环境中获取信息,这样可以根据所出现的错误决定要做些什么。在此基础上,可以在定制的错误网页中检索ASPError对象,找到引起载入页面出错的错误的所有信息。
在IIS 4.0中,编辑错误映射属性要做一些类似的工作。但是只有一般的500错误(“Internal Server Error”)在映射中是可用的。另外,当定制错误网页载入时,不会传送网页的环境,除了提供一个非特定的错误信息外,做其他任何工作都是比较困难的。
在以前例子中已经使用过ASP Server Object示例页面,在其中可以看到ASPError对象的详细情况。单击Server.GetLastError()对应的按钮,如图4-22所示:

图4-22 查看ASPError对象的详细屏幕
这个操作会重新载入该网页,其中的ASP脚本查看点击的是哪个按钮。如果是Server.GetLastError()对应的名为cmdGetError的按钮,将执行一些示例代码,这些代码将会产生一个运行期脚本错误。

If Len(Request.Form(“cmdGetError”)) Then
Dim arrThis(3)
ArrThis(4) = “Causes an error”
End If

因为已对这个目录设置了错误网页映射,即配置为装入定制错误页面,所以当错误出现时,就打开这个页面(通过Server.Transfer方法在后台不可见地工作),见图4-23所示:

图4-23 定制的错误网页
(1) 示例错误网页代码的功能
定制错误网页显示ASPError对象属性的所有值,并通过使用Response.Status方法,把一个HTTP报头状态消息返回给客户端,指明出现了一个错误。接着使用GetLastError方法获取对ASPError对象的一个引用,因此可以访问错误的详细数据:

<%
Response.Status = "500 Internal Server Error"
Set objASPError = Server.GetLastError()
%>
Currently executing the page: <B>show_error.asp</B><P>
<B>Error Details:</B><BR>

ASPError.ASPCode = <% = objASPError.ASPCode %><BR>
ASPError.Number = <% = objASPError.Number %> (0x<% = Hex(objASPError.Number) %>)<BR>
ASPError.Source = <% = Server.HTMLEncode(objASPError.Source) %><BR>
ASPError.Category = <% = objASPError.Category %><BR>
ASPError.File = <% = objASPError.File %><BR>
ASPError.Line = <% = objASPError.Line %><BR>
ASPError.Column = <% = objASPError.Column %><BR>
ASPError.Description = <% = objASPError.Description %><BR>
ASPError.ASPDescription = <% = objASPError.ASPDescription %>

<FORM ACTION="<% = Request.ServerVariables("HTTP_REFERER") %>" METHOD="POST">
<INPUT TYPE="SUBMIT" NAME="cmdOK" VALUE="&nbsp;&nbsp;&nbsp;">
&nbsp; Return to the previous page<P>
</FORM>
值得注意的一点是,如果一个脚本或ASP错误出现在定制错误网页中,IIS将仅仅返回一个与错误代码500:100对应的一般性消息。这可能是脚本引擎自己的错误消息,或者只是相当简单的消息:“Internal Server Error”。不会再次重新载入定制的错误网页。
包含错误的网页的全部环境将传送给定制错误网页。也就是说,可以使用存储在任何ASP内部对象集合或属性中的值。例如,如果检索来自Request.ServerVariables集合的HTTP_REFERER值,它将反映调用原网页的网页(即在错误出现之前的网页)的URL。在服务器把执行转到错误网页时,这个值不会发生变化,并且它将不包含当错误发生时正在执行的网页的URL。
同样,SCRIPT_NAME值将是包含该错误的网页的名字,而不是错误网页的URL。在一个错误网页已经装入时,通过检查浏览器地址栏中的URL,可以对此进行确认。但是在原网页的脚本变量中存储的值,在定制的错误网页中都是不可用的。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!