`
zhaohaolin
  • 浏览: 1018238 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ASP 3.0高级编程(十五)

阅读更多
 来    源: 互联网
 作    者: 不祥
 发表日期: 2005-12-17 16:47:22
 阅读次数: 76
 文章标题:ASP → ASP 3.0高级编程(十五)
 查看权限: 普通文章
 查看方式: 查看:[ 大字 中字 小字 ] [双击滚屏]
 正    文:
ASP 3.0高级编程(十五)
4.3.4 Server对象的错误处理
       ASP没有错误处理机制一直受到批评。
       在VBScript中,有一个On Error Resume Next语句,它使脚本解释器忽略运行期错误并继续脚本代码的执行。接着该脚本可以检查Err.Number属性的值,判别是否出现了错误。如果出现错误,返回一个非零值。在ASP 3.0中,也可以使用On Error Goto 0“转回到”缺省的错误处理。在ASP 2.0中实际也进行这种处理,但是没有相应文档说明。
       在Jscript中,有一个新的错误处理功能:C语言风格的try和catch语句。然而所有的这些错误处理技术都不是由ASP或IIS实现的,而是由ASP使用的脚本引擎实现的。
       第7章专门讨论脚本和脚本引擎涉及到的调试和错误处理技术。
       同时,ASP和IIS的开发小组已经增加了一个新的功能,用于在ASP网页中进行错误处理。这分为两个部分:IIS错误页面的配置及使用ASP的一个新的方法和对象。
1.  Server对象的GetLastError方法
在ASP 3.0中,Server对象有一个名为GetLastError的新方法。与VBScript的Err对象不同,不能为查看是否出现了错误而随时调用该方法,只能在一个ASP定制的错误网页中使用。如果像对Err对象进行操作那样,通过关闭缺省的错误处理(用On Error Resume Next语句)来使用,则GetLastError方法不能访问错误的详细数据。
GetLastError方法要做的事情是提供更多的有关错误源和错误原因的信息。GetLastError方法创建并返回一个对象的引用,该对象是一个名为ASPError的新对象。这个对象具有一系列的属性,这些属性返回有关在GetLastError方法调用之前出现的最新错误的信息。
2.  ASPError对象的属性
ASPError对象提供了九个属性说明所出现的错误的性质和错误源,并返回引发错误的实际代码,其属性及说明如表4-4所示:
表4-4  ASPError对象的属性及说明
属 性
说 明

ASPCode
整型。由ASP/IIS产生的错误号,例如0x800A009

ASPDescription
字符串型。如果这个错误是与ASP相关的错误,这个属性是错误的详细说明

Category
字符串型。错误源,即ASP内部脚本语言、或一个对象

Column
整型。产生错误的文件中的字符位置

Description
字符串型。错误的简短说明

File
字符串型。错误出现时正在处理的文件的名称

Line
整型。产生错误的文件中的行号

Number
整型。一个标准的COM错误代码

Source
字符串型。引发错误的行的实际代码

3.  配置“单个网页”错误处理
在IIS中“不可思议”地出现一个错误(例如404 Not Found)时,页面看起来像是从服务器返回给客户端的一个错误信息页面,但实际上并不是这样。它们是普通的HTML网页,在对一个错误进行响应时被下载并且发送给客户端。这些网页通常称为定制的错误网页(custom error page)。
然而,错误网页作为IIS的缺省安装部分,可根据要求定制。事实上,也可以在IIS的早期版本中建立定制的错误网页。
在IIS 4.0中,可以为每种不同类型的HTTP协议或服务器错误指定一个定制的错误网页,为服务器上任意的Web网站中的每个目录建立一个定制的错误信息网页。
(1)    IIS缺省的错误网页
由IIS提供的缺省错误页面放在Web服务器的WinNT\Help目录中。在Windows 2000中的IIS 5.0的环境下,该页面放在WinNT\Help\iishelp\common目录下,如图4-17所示:

图4-17  缺省的错误页面位置
可在浏览器中打开这些文件查看结果,或者在文本编辑器中查看HTML源程序和脚本代码。当一个404错误出现时,使用的页面是404b.htm,这个文件包含一个客户端脚本代码部分,它获得当前文档的URL(从document对象的url属性中检索)并在该页面中显示:
<tr>
<td width="400" colspan="2"> <font style="COLOR:000000; FONT: 9pt/11pt 宋体">您正在搜索的网页可能已经删除、更名或暂时不可用。</font></td>
  </tr>

  <tr>
    <td width="400" colspan="2"> <font style="COLOR:000000; FONT: 9pt/11pt 宋体">

       <hr color="#C0C0C0" noshade>

<p>请尝试下列操作:</p>

       <ul>
<li>如果您在“地址”栏中键入了网页地址,请检查其拼写是否正确。<br>
      </li>

<li>打开 <script>
         <!--
         if (!((window.navigator.userAgent.indexOf("MSIE") > 0) && (window.navigator.appVersion.charAt(0) == "2")))
         {
             Homepage();
         }
         //-->
          </script> 主页,寻找指向所需信息的链接。</li>

<script>
function Homepage(){
<!--
       DocURL = document.URL;
       protocolIndex=DocURL.indexOf("://",4);
       serverIndex=DocURL.indexOf("/",protocolIndex + 3);
       BeginURL=DocURL.indexOf("#",1) + 1;
       urlresult=DocURL.substring(BeginURL,serverIndex);
       displayresult=DocURL.substring(protocolIndex + 3 ,serverIndex);
       document.write('<A HREF="' + urlresult + '">' + displayresult + "</a>");
}
//-->
</script>
这会产生你经常看到的页面,如图4-18所示:

图4-18  产生404错误时的页面
(2)    IIS中错误网页的映射
当IIS检测到一个错误时,会把相应的错误页面传送给客户端。如何判别应该向客户端发送那一个页面?很明显,网页的名字应具有解决这个问题的一些信息,但事实上文件名是不重要的。错误和错误网页文件之间的映射关系是在每个目录的properties对话框的Custom Errors选项卡中决定的。
在Internet Services Manager中,在想编辑映射关系的目录上单击右键,并选择Properties。如果对示例文件进行设置,在Chapter04目录中选择server子目录,如图4-19所示:

图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,可以对此进行确认。但是在原网页的脚本变量中存储的值,在定制的错误网页中都是不可用的。
如果原ASP网页正在一个事务内运行,即在网页的最前面包含有一个<% @TRANSACTION=”…” %>指令,也应该确定是否需要在网页中采取一些方法,以退出该事务。例如可以调用内置ObjectContext对象的SetAbort方法:
objectContext.SetAbort        ‘Fail the transaction if an ASP error occurs
在本书的后面将介绍与事务的相关全部内容。
(2)    使用ASPError对象的属性
关于使用ASPError对象的属性,有以下几点值得注意的:
· 即使没有出现错误,Number属性应该一直有一个值。如果ASP网页调用GetLastError方法时没有错误出现,该属性的值是0。通常情况下,对ASP脚本的运行期错误,Number属性返回十六进制的值“0x800A0000”,加上标准的脚本引擎错误代码。例如,前面的例子对“Subscript out of Range”错误的返回值为“0x800A0009”,因为VBScript对该类型错误的错误代码是“9”。
· 当出现已经过一个错误时,Category和Description属性将一直有一个值。
· APSCode属性的值由IIS产生,对大多数脚本错误将为空。更多情况下,涉及外部组件使用出错时有相应的值。
· ASPDescription属性的值由ASP预处理程序产生,而不是由当前正在使用的脚本引擎产生的,并且对大多数脚本错误而言将是空的。更多情况下,对诸如对ASP内置对象调用无效的方法的错误有相应的值。
· File、Source、Line和column属性仅在错误出现时,并且在错误的详细数据是可用的情况下才能进行设置。对一个运行期错误,File和Line属性通常是有效的,但是column属性经常返回-1。当错误是一个阻止页面被ASP处理的语法错误,才返回Source属性。一般在这些情况下,Line和Column属性是有效的。如果把Source属性的值写到页面,明智的办法是先将该值传给HTMLEncode,以防在其含有非法的HTML字符。在本章的后面将详细地讨论HTMLEncode方法。
 
分享到:
评论

相关推荐

    ASP3.0高级编程技术

    ASP3.0高级编程技术是Web开发领域中的一个重要里程碑,它是Active Server Pages的第三个主要版本,主要用于构建动态、交互式的网站。在这个版本中,开发者能够利用更强大的功能和改进的性能来创建复杂的Web应用程序...

    ASP3.0高级编程

    ASP3.0高级编程是针对Web开发人员深入学习ASP(Active Server Pages)技术的重要参考资料。在ASP3.0中,微软引入了许多增强功能,使得它成为构建动态网站和Web应用程序的强大工具。本教程旨在帮助开发者掌握ASP3.0的...

    ASP3.0高级编程.pDF

    本书《ASP3.0高级编程》应该是针对这一技术的深入解析和实践指导。 1. **ASP3.0基础**:ASP3.0的核心概念包括脚本语言支持、服务器端控件、内置对象等。学习者应掌握如何创建基本的ASP页面,理解Response、Request...

    ASP3.0高级编程技术中文版—1

    1.4 ASP 3.0对象模型概要 22 1.4.1 对象环境概念 22 1.4.2 ASP内置的对象 23 1.5 ASP 3.0中的新特性 24 1.5.1 ASP 3.0新特性概要 24 1.5.2 对ASP 2.0的改进 26 1.5.3 VBScript 5.0中的新特性 28 1.5.4 JScript 5.0中...

    《ASP 3.0高级编程技术》中文版-2

    1.4 ASP 3.0对象模型概要 22 1.4.1 对象环境概念 22 1.4.2 ASP内置的对象 23 1.5 ASP 3.0中的新特性 24 1.5.1 ASP 3.0新特性概要 24 1.5.2 对ASP 2.0的改进 26 1.5.3 VBScript 5.0中的新特性 28 1.5.4 JScript 5.0中...

    ASP.NET MVC3.0 高级编程

    ASP.NET MVC3.0 是微软开发的一个开源框架,用于构建高度可测试和可维护的Web应用程序。...通过阅读《ASP.NET MVC3.0 高级编程》这本书,你可以获取更多关于这些主题的详细信息,掌握实际开发中的最佳实践。

    ASP 3.0高级编程.rar

    通过深入研究"ASP 3.0高级编程",开发者不仅可以熟练运用ASP 3.0的各种特性和功能,还能为向更现代的技术栈过渡打下坚实的基础,例如ASP.NET或Node.js等。不断学习和适应新的技术,是IT行业从业者保持竞争力的关键。

    ASP 3.0高级编程(一)

    ### ASP 3.0高级编程知识点详解 #### ASP 3.0概述 ASP(Active Server Pages)3.0是微软开发的一种服务器端脚本环境,用于创建动态网页和应用程序。它允许网页开发者在HTML页面中嵌入脚本或ActiveX组件,从而实现更...

    ASP 3.0高级编程

    ASP 3.0高级编程.

    精通ASP3.0网络编程

    通过"精通ASP3.0网络编程"的学习,你不仅将掌握ASP3.0的核心技术,还能培养解决实际问题的能力,从而成为一名熟练的Web开发者。在实践中不断磨炼,你将能够构建出高效、安全且用户友好的Web应用程序。

    《C#与.NET 3.0高级程序设计》[源代码+英文PDF电子书]

    本书是C# 领域久负盛名的经典著作,深入全面地叙述了C# 编程语言和.NET...另外,还介绍了最新的C# 3.0 编程语言和LINQ 编程技术。本书由微软C# MVP Andrew Troelsen 编写,历经多次修订,适合各层次.NET 开发人员阅读。

    ASP.NET MVC3.0 高级编程完整版

    在"ASP.NET MVC3.0 高级编程完整版"中,我们可能涵盖以下关键知识点: 1. **MVC模式**:MVC是一种软件设计模式,将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。模型负责处理...

    ASP3.0高级编程_Part1

    在"ASP3.0高级编程_Part1"中,这些知识点可能被详细讲解,并结合实际案例进行阐述,以帮助读者理解并掌握ASP.NET 3.0的高级特性和最佳实践。通过阅读给出的PDF文件(01.PDF至05.PDF),读者将有机会深入学习这些内容...

    ASP3.0高级编程_Part5

    《ASP.NET 3.0高级编程》是一本深入探讨ASP.NET技术的专业书籍,它涵盖了ASP.NET 3.0的核心概念和高级特性。该书通过图文并茂的方式,为读者提供了丰富的学习资源,还配备有详细的书签,使得阅读和查阅变得极其方便...

    ASP3.0高级编程_Part2

    在这个“ASP3.0高级编程_Part2”中,我们将会深入探讨ASP.NET 3.0的一些核心概念和技术,包括但不限于控件编程、数据绑定、状态管理、安全性以及性能优化。 1. **控件编程**:ASP.NET 3.0引入了大量服务器控件,如...

    ASP 3.0 高级编程

    ASP 3.0 网页制作教程

    外文翻译asp-3.0-高级编程大学论文.doc

    "ASP 3.0高级编程大学论文" 本文档主要介绍了ASP 3.0高级编程的相关知识点,涵盖了WWW的起源、HTML的基本结构、HTML的发展历史、动态内容的缺乏、早期网站的缺陷等方面。 一、WWW的起源 WWW(World Wide Web)...

Global site tag (gtag.js) - Google Analytics