ASP 3.0高級編程(三十四)_ASP教程
推薦:ASP.NET獲取IP與MAC地址的方法獲取服務器的IP地址方法以DNS法較為簡單實用,如下: private void ButtonIP_Click(object sender, System.EventArgs e) { Syste m.Net.IPAddress[] addressList = Dns.GetHostByName(Dns
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
分享:終于找到了ASP下標越界的解決方法昨天我的電影網站在生成內容靜態頁面的時候出了問題,提示下標越界,以前從來沒有遇到過的,所以根本不知道是什么東西,于是就到處在網上找答案,但是真的好難好難找啊,找了不少都沒有解決到根本問題
- 相關鏈接:
- 教程說明:
ASP教程-ASP 3.0高級編程(三十四)。