ASP 3.0高級編程(三十四)_ASP教程
推薦:ASP.NET獲取IP與MAC地址的方法獲取服務(wù)器的IP地址方法以DNS法較為簡單實(shí)用,如下: private void ButtonIP_Click(object sender, System.EventArgs e) { Syste m.Net.IPAddress[] addressList = Dns.GetHostByName(Dns
7.4.4 使用IIS錯誤頁面
與ASP錯誤處理過程相關(guān)的內(nèi)容是為IIS提供可定制的錯誤頁面。事實(shí)上,在IIS 4.0中也有這個特點(diǎn)。但新的ASP內(nèi)置對象ASPError,更易于使用且提供更加強(qiáng)大的功能。
在第4章,當(dāng)我們研究Server.Execute和Server.Transfer方法時,已經(jīng)講述了如何建立定制的錯誤頁面。我們也討論和使用了ASPError對象,但這種方式受到了一定的限制。在這一部分,將介紹如何將定制的錯誤網(wǎng)頁和ASPError對象結(jié)合起來建立一個更好的處理ASP錯誤的方法。
我們可以使用VBScript檢查ASPError對象的內(nèi)容,從而創(chuàng)建一個定制的錯誤頁面。構(gòu)建一個包含錯誤內(nèi)容全面信息的字符串,且寫入到服務(wù)器磁盤上的日志文件中。然而網(wǎng)頁的設(shè)計僅使訪問者看到網(wǎng)頁不可用這樣一條信息是不行的,應(yīng)該使訪問者能夠選擇是重新載入上一個網(wǎng)頁還是回到主頁,使他們沒意識已經(jīng)發(fā)生了錯誤。
盡管我們采用VBScript創(chuàng)建這個網(wǎng)頁,但其使用的一些特性對JScript來說也是適用的,這兩種腳本語言的相互轉(zhuǎn)換也是比較容易的。
可以從http://www.wrox.com站點(diǎn)下載本章及本書其他章節(jié)的示例文件。
1. 設(shè)置定制的錯誤頁面
在能使用定制的錯誤頁面之前,必須在Internet Services Manager進(jìn)行相應(yīng)的設(shè)置(設(shè)置方式見第4章)。把示例文件裝入計算機(jī)的wwwroot目錄中,打開Chapter07子目錄的Properties對話框,在Custom Errors選項卡中,滾動列表并選中HTTP錯誤“500:100”條目,點(diǎn)擊Edit Properties按鈕,并鍵入定制的錯誤頁面Custom_error.asp的URL
現(xiàn)在Chapter07子目錄中的頁面出現(xiàn)一個ASP錯誤時,就會打開定制的錯誤頁面。
2. 使用定制的錯誤頁面
在瀏覽器中打開Chapter07目錄并選擇到“Using a Custom Error Page”的鏈接,這個頁面顯示了一系列用于產(chǎn)生各種類型的錯誤的按鈕,點(diǎn)擊標(biāo)有“Load a Page with a Syntax error”的按鈕
這將載入一個名為syntax_error.asp的簡單頁面。然而看不到這個頁面,因?yàn)檫@個頁面包含了一個語法錯誤。ASP終止這個頁面的編譯/執(zhí)行,并把執(zhí)行轉(zhuǎn)到定制錯誤頁面,這個頁面展示了錯誤的細(xì)節(jié)和兩個按鈕,這兩個按鈕用以返回上個頁面(主菜單)或返回Web站點(diǎn)的缺省主頁
這個頁面也把錯誤報告追加到服務(wù)器磁盤C:\temp文件夾中名為custom_error.log的日志文件中,可以在文件編輯器中打開并查看它,日志文件已經(jīng)記錄了幾個錯誤。
如果在頁面中得到了一個信息,指明日志文件不能寫入信息,可能是因?yàn)镮USR_machinename(IUSR_計算機(jī)名)帳號沒有訪問C:\temp目錄的權(quán)限。當(dāng)測試這個頁面時,應(yīng)該給予IUSR_machinename帳號對這個目錄的全部控制權(quán),或者改變custom_error.asp頁面的程序代碼以指向一個IUSR有全部控制權(quán)的文件夾
錯誤消息出現(xiàn)在頁面中的唯一原因,是因?yàn)樵赾ause_error.asp頁面中我們選擇了相應(yīng)的復(fù)選框。如果關(guān)閉該選項并再次點(diǎn)擊按鈕,便看不到錯誤的詳細(xì)情況,然而錯誤信息仍然記錄在服務(wù)器磁盤上的custom_error.log錯誤日志文件中。
“Display debugging information”復(fù)選框給定制錯誤頁面(而不是日志文件)提供了更多的信息,有助于調(diào)試那些使用ASP內(nèi)置對象集合值的頁面
在本章下面部分,將再討論這一問題,同時也可以了解“Cause An Error”頁面上的其他按鈕所提供的其他種類的錯誤信息。注意有一些按鈕能夠比其他的按鈕能夠提供更多信息。特別是只有最后一個按鈕給出ASP錯誤代碼的值(這里是ASP 0177)。
(1) “Cause An Error”頁面的功能
與先前討論的示例頁面一樣,引起錯誤的頁面使用同樣的技術(shù),用<Form>把值提交給同一個頁面。然后ASP程序查看窗口上點(diǎn)擊的是那個SUBMIT按鈕,然后運(yùn)行代碼的相應(yīng)部分。同時查看是否頁面上兩個復(fù)選框是否選中,如果是這樣,程序首先設(shè)置一個或兩個會話級的變量以指明這一點(diǎn)。
<%
'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,當(dāng)錯誤發(fā)生時,正在運(yùn)行的網(wǎng)頁的整個ASP環(huán)境由IIS傳給定制錯誤頁面。然而,腳本變量的值并沒有傳給定制錯誤頁面,所以必須使用Session變量,或者把值添加到Request.Form或Request.QueryString集合以便把值傳送給定制錯誤頁面。
設(shè)置了Session變量之后,程序繼續(xù)查看點(diǎn)擊了哪個按鈕。每個類型的錯誤(除了第一類型外),都是由運(yùn)行相應(yīng)的ASP代碼產(chǎn)生的,第一類型的錯誤需要調(diào)用另一個頁面。
...
'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下標(biāo)越界的解決方法昨天我的電影網(wǎng)站在生成內(nèi)容靜態(tài)頁面的時候出了問題,提示下標(biāo)越界,以前從來沒有遇到過的,所以根本不知道是什么東西,于是就到處在網(wǎng)上找答案,但是真的好難好難找啊,找了不少都沒有解決到根本問題
- asp FSO 讀寫文件本文件實(shí)現(xiàn)代碼
- asp中isNull、isEmpty和空字符串的區(qū)別
- asp獲取用戶真實(shí)IP地址的方法
- asp連接sqlserver數(shù)據(jù)庫實(shí)現(xiàn)代碼
- asp中正則表達(dá)式過濾html代碼函數(shù)
- asp中g(shù)et post提交表單區(qū)別
- 網(wǎng)頁模板:ASP內(nèi)建對象Request
- xmlhttp的open方法使用詳解
- ASP的常用的自定義函數(shù)大全
- asp中用for循環(huán)的一個小技巧
- eWebEditor v3.8 列目錄
- ASP無組件分頁實(shí)現(xiàn)思路及代碼
- 相關(guān)鏈接:
- 教程說明:
ASP教程-ASP 3.0高級編程(三十四)
。