在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開(kāi)發(fā)教程 > 詳細(xì)頁(yè)面

ASP 3.0高級(jí)編程(312)

ASP 3.0高級(jí)編程(312)

更新時(shí)間:2022-05-10 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

7.2.4 客戶(hù)端腳本錯(cuò)誤
       到目前為止,我們已了解了來(lái)自ASP的錯(cuò)誤。然而ASP也經(jīng)常用于創(chuàng)建包含客戶(hù)端腳本的網(wǎng)頁(yè)。如果包含客戶(hù)端代碼的<SCRIPT>元素沒(méi)有被設(shè)置成RUNAT="SERVER"屬性,ASP將不考慮服務(wù)器,而把網(wǎng)頁(yè)信息不加改變地傳送到客戶(hù)端。
       因此,如果打開(kāi)了一個(gè)ASP網(wǎng)頁(yè),并且顯示的是一個(gè)瀏覽器錯(cuò)誤對(duì)話框,就不應(yīng)該在服務(wù)器端尋找ASP程序代碼的錯(cuò)誤。瀏覽器看不到ASP程序代碼,所以不能識(shí)別任何錯(cuò)誤,如果有一個(gè)對(duì)話框出現(xiàn)在客戶(hù)端,那么在客戶(hù)端代碼中必定有一個(gè)錯(cuò)誤。
1.  語(yǔ)法錯(cuò)誤
如果在網(wǎng)頁(yè)中的客戶(hù)端程序代碼有語(yǔ)法錯(cuò)誤的話,當(dāng)腳本下載到客戶(hù)端,瀏覽器便會(huì)出現(xiàn)相應(yīng)的錯(cuò)誤。盡管網(wǎng)頁(yè)中內(nèi)容仍可正常載入(除非由這些客戶(hù)端腳本代碼動(dòng)態(tài)裝入),但網(wǎng)頁(yè)停止執(zhí)行。用戶(hù)將看到一個(gè)包含錯(cuò)誤細(xì)節(jié)的對(duì)話框,或者是一個(gè)指示網(wǎng)頁(yè)包含錯(cuò)誤的狀態(tài)條消息。
現(xiàn)代瀏覽器趨向于隱藏網(wǎng)頁(yè)腳本錯(cuò)誤的細(xì)節(jié),而僅在狀態(tài)條上顯示一個(gè)小的錯(cuò)誤圖標(biāo)。在IE 4.0和IE 5.0中,正常的錯(cuò)誤對(duì)話框可以通過(guò)Internet Options對(duì)話框的Advanced頁(yè)進(jìn)行設(shè)置來(lái)激活,如圖7-14所示:

圖7-14  Advanced頁(yè)面設(shè)置屏幕
處理腳本程序代碼中的客戶(hù)端錯(cuò)誤和在服務(wù)器端相似,并且通常會(huì)更容易些,因?yàn)榻?jīng)常可以直接從服務(wù)器目錄中通過(guò)雙擊來(lái)下載網(wǎng)頁(yè)。一般不需要通過(guò)Web服務(wù)器和HTTP獲得網(wǎng)頁(yè)來(lái)觀察瀏覽器中的結(jié)果,其中的唯一不同是一些服務(wù)器交互由客戶(hù)端腳本來(lái)完成,如使用RDS的數(shù)據(jù)綁定或者動(dòng)態(tài)裝入。
2.  運(yùn)行期或語(yǔ)義錯(cuò)誤
在客戶(hù)端腳本中,通常可能會(huì)遇到語(yǔ)法錯(cuò)誤,也會(huì)經(jīng)常遇到運(yùn)行期或語(yǔ)義錯(cuò)誤。事實(shí)上,在客戶(hù)端,這種現(xiàn)象是很普遍的。因?yàn)樵诳蛻?hù)端不能像服務(wù)器端那樣對(duì)腳本的環(huán)境進(jìn)行控制,不能肯定用戶(hù)在他們的機(jī)器上正運(yùn)行什么,實(shí)際上在服務(wù)器上僅能從一些組件如Browser Capabilities中得到大概情況。
所以,使用客戶(hù)端對(duì)象或特殊版本的腳本語(yǔ)言和屬性的腳本程序很可能不能正常工作。盡管如此,處理客戶(hù)端錯(cuò)誤和處理服務(wù)器端錯(cuò)誤是差不多的。
3.  在服務(wù)器上創(chuàng)建的客戶(hù)端程序代碼
在錯(cuò)誤發(fā)生時(shí),作為“客戶(hù)端對(duì)話框?qū)?yīng)于ASP錯(cuò)誤頁(yè)面”規(guī)則(關(guān)于出錯(cuò)的地方)的一個(gè)特別的例外是,使用ASP程序代碼在服務(wù)器上動(dòng)態(tài)地創(chuàng)建客戶(hù)端程序代碼。例如,可能想在ASP中進(jìn)行求值運(yùn)算,然后把數(shù)據(jù)傳給運(yùn)行在客戶(hù)端的腳本代碼,可能最容易的方法是把數(shù)據(jù)作為一個(gè)變量插入腳本代碼中:
<%
' get the name of our server from the ServerVariables collection
strServerNameInASP = Request.ServerVariables("SERVER_NAME")
%>

<SCRIPT LANGUAGE="JScript" RUNAT="CLIENT">
<!-- hide code from older browsers
var strServerName = "<% = strServerNameInASP %>";

alert('Server name is: ' + strServerName);

// stop hiding code
-->
</SCRIPT>
在客戶(hù)端,在ASP處理這個(gè)頁(yè)面之后,將得到的是:
<SCRIPT LANGUAGE="JScript" RUNAT="CLIENT">
<!-- hide code from older browsers
var strServerName = "WROXBOX";

alert('Server name is: ' + strServerName);

// stop hiding code
-->
</SCRIPT>
可以忽略RUNAT="CLIENT"屬性,但是加上這一項(xiàng)可以使得在查看運(yùn)行代碼的ASP網(wǎng)頁(yè)時(shí)更加清楚。
這樣,如果在某個(gè)位置想把服務(wù)器端數(shù)據(jù)庫(kù)中的數(shù)據(jù)加入到一個(gè)客戶(hù)端數(shù)組中,可以采用下面的程序?qū)崿F(xiàn):
<SCRIPT LANGUAGE="JScript" RUNAT="CLIENT">
<!-- hide code from older browsers
var arrBooks = new Array(10)             //highest available index will be

<% ' start of ASP processing
intIndex = 0
Do While { not at the end of some recordset }
              strTitle = { get title from database record }
              Response.Write "arrBooks[" & CInt(intIndex) & "] = '" _
                                   & strTitle & "'; " & vbCrlf
              intIndex = intIndex +1
              { move to next record in database }
Loop

do something here on the client with the array of book titles

// stop hiding code
-->
</SCRIPT>
這段服務(wù)器端ASP程序代碼產(chǎn)生的客戶(hù)端代碼,在客戶(hù)端運(yùn)行時(shí)創(chuàng)建書(shū)名標(biāo)題數(shù)組。同時(shí)產(chǎn)生的客戶(hù)端腳本錯(cuò)誤出現(xiàn)在瀏覽器的錯(cuò)誤對(duì)話框中。錯(cuò)誤的原因是以arrBooks命名的數(shù)組是由JavaScript代碼運(yùn)行在客戶(hù)端時(shí)創(chuàng)建的,僅能接受9個(gè)書(shū)名;而服務(wù)器端代碼能很可能產(chǎn)生多于9個(gè)的書(shū)名,具體多少由源數(shù)據(jù)庫(kù)中的記錄數(shù)來(lái)決定。這相當(dāng)于如下客戶(hù)端代碼:
<SCRIPT LANGUAGE="JScript" RUNAT="CLIENT">
<!-- hide code from older browsers
var arrBooks = new Array(10)             //highest available index will be
arrBooks[0] = 'Instant JavaScript';
arrBooks[1] = 'Professional ASP 3.0 Programming';
arrBooks[2] = 'ADO 2.5 Programmers Reference';

etc

arrBooks[9] = 'ASP Techniques for Webmasters';
arrBooks[10] = 'ASP Programmers Reference';          // <- client-side error occurs here
arrBooks[11] = 'ADSI CDO Programming';
arrBooks[12] = 'Professional MTS and MSMQ Programming';

do something here on the client with the array of book titles

// stop hiding code
-->
</SCRIPT>
這個(gè)頁(yè)面只有經(jīng)過(guò)修正之后才能正常工作,可以通過(guò)增加數(shù)組大小,也可以通過(guò)控制來(lái)自數(shù)據(jù)庫(kù)的記錄數(shù)使其正常工作。

7.3 防止錯(cuò)誤
       上面已經(jīng)看到了能夠出現(xiàn)的一些不同類(lèi)型的錯(cuò)誤,并且有了一些查找錯(cuò)誤的感覺(jué)。下面將考慮如何避免把錯(cuò)誤引入程序中,盡管不能保證所編寫(xiě)的程序沒(méi)有錯(cuò)誤,但是這里概括的許多技術(shù)有助于減少錯(cuò)誤數(shù)目。

良好的編程習(xí)慣
       在編程中避免出現(xiàn)錯(cuò)誤是和良好的編程習(xí)慣相關(guān)的,這里有許多工作我們要做,以減少把錯(cuò)誤帶進(jìn)網(wǎng)頁(yè)的可能性。可能有些人因采用某個(gè)技術(shù)而走向極端,甚至一定程度上在某個(gè)特殊問(wèn)題上因書(shū)生氣十足而引入了更多的錯(cuò)誤。當(dāng)然編程人員也不可能采用了這里列出的所有技術(shù)。
       要考慮的主要內(nèi)容是:
       · 代碼的格式化和縮進(jìn)編排。
       · 變量顯式表明。
       · 變量轉(zhuǎn)換為合適的數(shù)據(jù)類(lèi)型。
       · 使用有意義的變量命名約定。
       · 封裝腳本。
       · 注意潛在的錯(cuò)誤情況。
1.  代碼的格式化和縮進(jìn)編排
許多VBScript編程員懶于格式化編排其書(shū)寫(xiě)的程序。盡管這并不阻礙程序運(yùn)行,但這使得查找何處產(chǎn)生了錯(cuò)誤變得困難。例如,在前面我們看到的程序中,丟失了一個(gè)End If,由于嵌套結(jié)構(gòu)的縮進(jìn),錯(cuò)誤在哪里是相當(dāng)明顯的:
                            objCounters.Remove strCounterName
                     Response.Write "Removed counter " & strCounterName
              <--- missing 'End If' should be here
       End If
End If
%>
如果程序看起來(lái)像下面所示的那樣,尋找錯(cuò)誤將不是一件易事:
<% if Len(Request.Form("cmdSet")) then
strCounterName=Request.Form("lstSet")
strNewValue=Request.Form("txtSet")
if isnumeric (strnewvalue)     then
intNewValue =cint(strNewValue)
       objCounters.Set strCounterName, intNewValue
Response.write      "Set counter"         & strCounterName &" to " & strNewValue

else
Response.write      strNewValue          &" is not a valid number"
       If Len ( Request.Form ("cmdRemove")) then
StrCounterName = Request.Form("lstRemove")

objCounters.Remove strCounterName
Response.write      "Removed counter "& strCounterName
end if
End IF
%>
2.  顯式表明變量
VBScript支持Option Explicit語(yǔ)句。在一個(gè)腳本頁(yè)面的開(kāi)頭插入Option Explicit語(yǔ)句時(shí),可以避免使用沒(méi)有用Dim命令(或用于動(dòng)態(tài)數(shù)組的ReDim)定義的變量。似乎不需要這么做,因?yàn)槟_本語(yǔ)言允許通過(guò)給一個(gè)變量賦值來(lái)創(chuàng)建一個(gè)需要的變量。然而用Option Explicit進(jìn)行定義有助于避免錯(cuò)誤,特別是那些難以發(fā)現(xiàn)的引起腳本產(chǎn)生不正確結(jié)果的邏輯錯(cuò)誤。
例如,編寫(xiě)如下程序:
<%
' get value for calculation
strSalesTotal = Request.Form("SalesTotal")
curSalesTotal = CCur(strSalesTotal)
sngCommissionPercent = 2.5

' calculate commission payment
sngCommission = curSalesTotal * (sngComissionPercent /100)
%>
運(yùn)行這段程序不會(huì)產(chǎn)生錯(cuò)誤(當(dāng)然,除非用戶(hù)給銷(xiāo)售合計(jì)值賦了非法的值)。然而這段程序總是會(huì)產(chǎn)生0的結(jié)果,因?yàn)樵诔绦虻淖詈笠恍兄衧ngCommissionPercent變量名拼寫(xiě)錯(cuò)了。腳本解釋器將產(chǎn)生一個(gè)新的變量名(叫作sngComissionPercent),由于沒(méi)有賦值,在數(shù)學(xué)計(jì)算時(shí)返回值總為0。
為了防止這種錯(cuò)誤,僅需在程序開(kāi)頭增加Option Explicit語(yǔ)句。
<%
Option Explicit
Dim strSalesTotal
Dim curSalesTotal
Dim sngCommissionPercent

' get value for calculation
strSalesTotal = Request.Form("SalesTotal")
curSalesTotal = CCur(strSalesTotal)
sngCommissionPercent = 2.5

' calculate commission payment
sngCommission = curSalesTotal * (sngComissionPercent /100)
%>
這時(shí),當(dāng)腳本引擎試圖解釋程序時(shí)將識(shí)別出一個(gè)語(yǔ)法錯(cuò)誤,并且能夠指出此變量沒(méi)有聲明,如圖7-15所示:

圖7-15  顯示的錯(cuò)誤信息
在JScript中引用一個(gè)沒(méi)有聲明的變量將返回一個(gè)“Undefined”信息,并且在試圖使用變量之前,能夠檢測(cè)到這種情況。
3.  變量轉(zhuǎn)換為合適的數(shù)據(jù)類(lèi)型
回頭看看前面的程序,可能發(fā)現(xiàn)用CCur函數(shù)把用戶(hù)提供的數(shù)據(jù)轉(zhuǎn)換成了貨幣型數(shù)據(jù)類(lèi)型。在VBScript中,有一系列類(lèi)似這樣的數(shù)據(jù)變形變換函數(shù),在第3章中有詳細(xì)的描述。
blnBoolean = Cbool(varVariant)     ' converts to a Variant of subtype Boolean
bytByte = Cbyte(varVariant)          ' converts to a Variant of subtype Byte
curCurrency = CCur(varVariant)   ' converts to a Variant of subtype Currency
datDate = CDate(varVariant)         ' converts to a Variant of subtype Date
dblDouble = CDbl(varVariant)       ' converts to a Variant of subtype Double
intInteger = CInt(varVariant)         ' converts to a Variant of subtype Integer
lngLong = CLng(varVariant)         ' converts to a Variant of subtype Long
sngSingle = CSng(varVariant)       ' converts to a Variant of subtype Single
strString = CStr(varVariant)          ' converts to a Variant of subtype String
如果不能完成變換,也就是說(shuō)變量?jī)?nèi)容對(duì)新數(shù)據(jù)類(lèi)型來(lái)說(shuō)是無(wú)效的,便會(huì)出現(xiàn)一個(gè)運(yùn)行期錯(cuò)誤。然而,如果對(duì)數(shù)值類(lèi)型進(jìn)行變換,我們希望這個(gè)數(shù)值是有效的,并且能在程序中使用。因此能夠檢測(cè)一個(gè)均衡的值對(duì)于防止錯(cuò)誤的出現(xiàn)是一件“幸事”。
如果想把輸入空格作0對(duì)待,并且把任何其他無(wú)效的輸入作為用戶(hù)錯(cuò)誤對(duì)待,前面程序變?yōu)椋?br>strSalesTotal = Request.Form("SalesTotal")
If Len(strSalesTotal) = 0 Then
       ' no value entered, so assume zero
       curSalesTotal = 0
ElseIf Not IsNumeric(strSalesTotal) Then
       ' not a valid number, so report an error and stop
       Response.Write "The value you entered is not a valid number. "
       Response.Flush
       Resonse.End
Else
       ' OK to conver the string value and use it
       curSalesTotal = CCur(strSalesTotal)
End If
在JScript中,所有的變量都是對(duì)象,并且有typeOf()方法。可以使用typeOf()來(lái)確定存在變量中的數(shù)據(jù)是什么類(lèi)型,見(jiàn)第3章中的詳細(xì)論述。
也可以對(duì)“null”(VBScript中為Null)進(jìn)行測(cè)試保證在程序使用各種變量之前它們已經(jīng)賦了值。一個(gè)特例是從數(shù)據(jù)庫(kù)中獲得數(shù)據(jù)時(shí),數(shù)據(jù)庫(kù)中的字段內(nèi)容經(jīng)常是Null,表示沒(méi)有數(shù)據(jù)。
4.  變量命名和編碼約定
閱讀過(guò)本章和前面幾章后,讀者可以看出我們對(duì)變量名使用三個(gè)字母的前綴,用以指明它所代表的數(shù)據(jù)類(lèi)型。盡管在這兩種腳本語(yǔ)言中用ASP提供的所有變量都是Variant(或JScript中的等價(jià)物)類(lèi)型的,但用變量名來(lái)區(qū)分出存儲(chǔ)在其中的數(shù)據(jù)的類(lèi)型仍是非常有用的,有助于防止編寫(xiě)程序時(shí)出錯(cuò)。
有許多不同的變量命約定,經(jīng)常使用的見(jiàn)表7-2:
表7-2  變量類(lèi)型及前綴
變量類(lèi)型
前   綴

布爾型(Boolean)
bln

字節(jié)型(Byte)
byt

日期/時(shí)間型(Date/Time)
dat或dtm

集合型(Collection)
col

雙精度型(Double)
dbl

整型(Integer)
int

長(zhǎng)整型(Long)
lng

對(duì)象型(Object)
obj

單精度型(Single)
sng

字符型(string)
str

對(duì)于一個(gè)包含函數(shù)和子程序的網(wǎng)頁(yè),指出某個(gè)變量是否已經(jīng)聲明或存在于任何函數(shù)和子程序之外是非常有用的。若已經(jīng)聲明,則該變量對(duì)網(wǎng)頁(yè)來(lái)說(shuō)是全局變量。對(duì)全局變量加上“g”前綴,所以一全局字符串變量可能被命名為gstrMystring;類(lèi)似的,以“a”為前綴的變量是數(shù)組或數(shù)組元素。

程序注釋
       許多編程人員感覺(jué)到對(duì)程序增加注釋不僅增加了不必要的開(kāi)發(fā)時(shí)間,而且也減緩了網(wǎng)頁(yè)的運(yùn)行速度,因?yàn)槟_本解釋器每次必須先讀整個(gè)程序,然后再跳過(guò)這些注釋。盡管這種觀點(diǎn)有一定的道理,但是一個(gè)月后再回過(guò)頭來(lái)想讀懂沒(méi)有注釋的程序,是非常困難的。
       至少應(yīng)該對(duì)常用函數(shù)和子程序進(jìn)行注釋以便你和其他人能重新使用這些程序。特別是,使用新的Server.Execute方法更加容易(詳細(xì)情況參閱第4章)。下面是微軟提供的一個(gè)例程的注釋格式。
       '*****************************************************
       'Purpose: what the routine is designed to achieve
       'Inputs: a list of all the parameters to the routine
       '      parameter1: description, data-type, etc.
       '      parameter2: description, data-type, etc.
       'Returns: what data type is returned, and what it contains
       'Comments: other comments about the routine, update history, etc.
       '*****************************************************
5.  封裝腳本語(yǔ)言以便代碼重用
剛剛看到了如何注釋子程序和函數(shù)以便易于重新使用。面向?qū)ο缶幊痰脑硎墙⒃诔绦虼a重用的基礎(chǔ)上的,并且SSI的#include和新的Server.Execute方法使調(diào)用存儲(chǔ)在程序庫(kù)中的函數(shù)更容易。
例如,如果有一系列函數(shù)用于計(jì)算稅收和商品的應(yīng)付費(fèi)用。可把包含這段程序的頁(yè)面插入其他頁(yè)面中:
<!-- #inculde VIRTUAL="/library/code/online_sales/tax_and_delivery.inc" -->
包含文件必須含有腳本定界符,或者用<SCRIPT RUNAT="SERVER">...</SCRIPT>或者用<%...%>,每一個(gè)子程序和函數(shù)應(yīng)該采用其要求的數(shù)值做參數(shù),并且用函數(shù)值或更新的參數(shù)返回結(jié)果。不能使用全局變量,況且不同網(wǎng)頁(yè)之間的全局變量也是不可用的。但在主網(wǎng)頁(yè)中的程序能安全地調(diào)用所需的函數(shù)和子程序。
另外可使用Server.Execute(或者Server.Transfer)把執(zhí)行轉(zhuǎn)到另一個(gè)網(wǎng)頁(yè)。如果有一段ASP代碼用來(lái)為客戶(hù)創(chuàng)建在線采購(gòu)一覽表,這種方法是非常有用的。它包含HTML用來(lái)創(chuàng)建標(biāo)題、表格,用代碼進(jìn)行計(jì)算并用Request集合的內(nèi)容填寫(xiě)相應(yīng)值(記住不能使用Server.Execute或Server.Transfer把腳本變量傳到另一個(gè)網(wǎng)頁(yè))。另外,運(yùn)行的網(wǎng)頁(yè)能夠支持函數(shù)、類(lèi)定義(在VBScript中),或者其他設(shè)計(jì)為可重新使用的內(nèi)容。
6.  注意潛在的錯(cuò)誤情況
編程時(shí)不管如何仔細(xì),比如在使用和對(duì)變量類(lèi)型轉(zhuǎn)換之前對(duì)變量值進(jìn)行測(cè)試,但總還是有一些情況不能避免錯(cuò)誤的出現(xiàn)。明顯的例子是:當(dāng)使用FileSystemObject對(duì)象的方法設(shè)法訪問(wèn)一個(gè)用戶(hù)指定的文件時(shí),不能確定這個(gè)文件是否已移動(dòng)、刪除或者標(biāo)記成只讀型,所有這些操作都可能使程序不能工作。
其他類(lèi)似的情況可能是,當(dāng)訪問(wèn)數(shù)據(jù)庫(kù)或其他數(shù)據(jù)存儲(chǔ)時(shí),對(duì)用戶(hù)帳戶(hù)而言,有時(shí)要求某一層權(quán)限。在這種情況下,可能因?yàn)樾枰脑L問(wèn)不能實(shí)現(xiàn),使程序不能工作。
可以通過(guò)采取預(yù)防性措施編寫(xiě)程序,來(lái)測(cè)試類(lèi)似的潛在錯(cuò)誤。例如,可以使用Tools組件或者FileSystemObject對(duì)象的FileExists方法來(lái)查看,是否一個(gè)文件在訪問(wèn)之前就已存在了;或者使用Permission Checker組件來(lái)查看當(dāng)前用戶(hù)帳號(hào)是否有訪問(wèn)需要的文件或資源的權(quán)限;也可以通過(guò)使用FileSystemObject獲得一個(gè)文件的屬性設(shè)置,以便在刪除或重寫(xiě)之前查看文件是否是只讀的。
如果不考慮可能發(fā)生的錯(cuò)誤并防止錯(cuò)誤發(fā)生的話,這些情況和許多類(lèi)似的情況都可能是潛在的運(yùn)行期錯(cuò)誤源。
7.  最后的測(cè)試
很明顯,測(cè)試是對(duì)錯(cuò)誤的最好防范方法。錯(cuò)誤能通過(guò)應(yīng)用程序影響到其他操作,如果不及時(shí)發(fā)現(xiàn)能引起不可估量的損失。用各種數(shù)值(如用戶(hù)提交的,或者訪問(wèn)一個(gè)數(shù)據(jù)庫(kù)得到的數(shù)據(jù))對(duì)網(wǎng)頁(yè)進(jìn)行測(cè)試。同時(shí),更重要的是,如果采用我們不希望的值會(huì)發(fā)生什么。程序能避免這些情況產(chǎn)生其他錯(cuò)誤或者避免擾亂正在測(cè)試的子程序嗎?
好的測(cè)試技術(shù)應(yīng)該包括一系列值,如期望的值、邊界條件值和超出邊界的值。用期望傳送到網(wǎng)頁(yè)的值進(jìn)行測(cè)試是應(yīng)該經(jīng)常做的工作,同樣超出邊界的值通常比較容易阻止。例如,可以限制可接受的數(shù)值范圍為-100~+100,程序如下:
If (intValue < -100) or (intValue > 100) Then
       ' not a valid value, so report an error and stop
       Response.Write "Value must be between –100 and +100 inclusive. "
       Response.Flush
       Response.End
End If
然而要記住查看邊界條件,上面的程序能處理-100和+100嗎?想把數(shù)據(jù)限制在-100~+100中嗎?取0時(shí)會(huì)發(fā)生什么?上面的程序會(huì)顯示“Divide By Zero”錯(cuò)誤而最終停止執(zhí)行嗎?

7.4 處理錯(cuò)誤
       即使采用了防御性編程技術(shù)之后,錯(cuò)誤仍能進(jìn)入到網(wǎng)頁(yè),這可能是因?yàn)闇y(cè)試并不充分,或者是因?yàn)樗揽康囊恍┢渌Y源或服務(wù)沒(méi)有正確工作。為了防止頁(yè)面出現(xiàn)問(wèn)題,在程序中要能夠進(jìn)行定制錯(cuò)誤處理。

7.4.1 ASP缺省錯(cuò)誤處理器
       前面已經(jīng)看到過(guò),ASP和IIS能找出網(wǎng)頁(yè)中的大多數(shù)錯(cuò)誤,并且能自動(dòng)生成錯(cuò)誤信息頁(yè),這些錯(cuò)誤幾乎總是500.100類(lèi)型的,并且IIS用Server.Transfer方法裝載以500-100.asp命名的缺省錯(cuò)誤頁(yè),然后傳送給客戶(hù)。第4章介紹了這一工作過(guò)程,以及如何與定制錯(cuò)誤網(wǎng)頁(yè)接口。
       然而,運(yùn)行期腳本錯(cuò)誤不總是由IIS發(fā)現(xiàn)的,當(dāng)一個(gè)運(yùn)行期錯(cuò)誤發(fā)生時(shí),腳本引擎會(huì)查看一下目前執(zhí)行點(diǎn)或語(yǔ)句的環(huán)境。如果正在執(zhí)行一個(gè)子程序或函數(shù),缺省的腳本引擎錯(cuò)誤處理器通過(guò)終止子程序的運(yùn)行并返回調(diào)用子程序的地方來(lái)指出錯(cuò)誤。
       在這里,程序會(huì)查看是否實(shí)現(xiàn)了其他的錯(cuò)誤處理器,如果沒(méi)有的話,又會(huì)重復(fù)這個(gè)過(guò)程,然后返回到調(diào)用子程序的地方。當(dāng)子程序返回到網(wǎng)頁(yè)的主程序(在任何其他子程序或函數(shù)外面)時(shí),程序又查看是否實(shí)現(xiàn)了任何其他的錯(cuò)誤處理器。在這個(gè)過(guò)程中,只有確實(shí)沒(méi)有發(fā)現(xiàn)其他的錯(cuò)誤處理器,程序才給ASP提示錯(cuò)誤,指示IIS把執(zhí)行轉(zhuǎn)到缺省的錯(cuò)誤頁(yè)面。


溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類(lèi)教程下載

系統(tǒng)下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 日本在线视频www| 日韩中文在线字幕| 久久久国产精华液999999 | www黄色日本| 精品国产一区二区三区无码| 亚洲综合20p| 中文字幕亚洲欧洲| 五月天视频在线观看| 中文字幕12页| 91热视频在线观看| 亚欧精品在线视频| 精品一二三四五区| 国产乱子伦精品视频| 国产精品久久久久9999小说| 国产免费中文字幕| 污污视频在线免费| 400部精品国偷自产在线观看| 天天综合天天添夜夜添狠狠添| 99re精彩视频| 久久久九九九热| 人妻激情另类乱人伦人妻| 欧美 日韩精品| 久久精品一二三四| a级片一区二区| 91专区在线观看| 国产又猛又黄的视频| av在线网站免费观看| 国产又粗又猛又爽又黄的网站| 国产资源在线免费观看| 无码人妻精品一区二区三区在线 | 国产精品日韩三级| 国产精品69页| 熟女熟妇伦久久影院毛片一区二区| 国产成人永久免费视频| 国产精品网站免费| www亚洲成人| 欧美在线观看成人| 日本一二区免费| 高清欧美精品xxxxx| 亚洲妇熟xx妇色黄蜜桃| 欧美美女黄色网| www.日日操| 男人c女人视频| 视色视频在线观看| 欧美精品自拍视频| 青青视频免费在线观看| 国产免费一区二区三区视频| 国产精品探花在线播放| 国产aaa一级片| 中文字幕乱码免费| www.99r| 欧美日韩在线视频一区二区三区| 亚洲国产欧美91| 热久久精品国产| 999一区二区三区| 国产资源中文字幕| 亚洲综合婷婷久久| 国产又黄又猛又粗| 国产精品亚洲二区在线观看| 日本免费成人网| 992tv快乐视频| 中文字幕资源在线观看| 手机看片福利日韩| 超碰在线超碰在线| 一级黄色录像在线观看| 黄色一级大片在线观看| 免费在线激情视频| 欧美性久久久久| 成人免费观看cn| 精品无码国模私拍视频| 国产91沈先生在线播放| 狠狠干视频网站| 日韩精品免费一区| 人人妻人人澡人人爽欧美一区双| 好色先生视频污| 国产精品jizz在线观看老狼| 亚洲免费在线播放视频| av 日韩 人妻 黑人 综合 无码| 9999在线观看| 无颜之月在线看| 精品少妇在线视频| 欧美日韩黄色一级片| 欧美成人免费高清视频| 国产91色在线观看| 日韩av福利在线观看| 懂色av粉嫩av蜜臀av| 久久av高潮av| 日韩久久一级片| 色天使在线观看| 国产一级大片免费看| 欧美二区在线视频| 国产精品亚洲二区在线观看| 中文字幕精品一区二区三区在线| 国产精品久久久久久久99| 日韩精品久久一区二区| 欧美成人黑人猛交| 国产在线拍揄自揄拍无码| 国产美女网站在线观看| 天天操天天干天天做| 97视频在线免费| 国产视频手机在线播放| 高清无码一区二区在线观看吞精| 日本a在线天堂| 污视频网站观看| 青青青在线视频播放| jizz欧美性11| 日本精品www| 亚洲爆乳无码精品aaa片蜜桃| 黄色av免费在线播放| 毛片在线视频观看| www午夜视频| 日韩一级在线免费观看| 天堂а√在线中文在线| 三区视频在线观看| 欧美日韩在线不卡视频| 精品一区二区成人免费视频| 在线视频日韩一区 | 国产裸体舞一区二区三区| 浴室偷拍美女洗澡456在线| 五月婷婷丁香色| 一本久道中文无码字幕av| 麻豆一区二区三区在线观看| 成人亚洲视频在线观看| 丁香花在线影院观看在线播放| 成年人网站av| 99热一区二区| 亚洲 激情 在线| 黑森林福利视频导航| 那种视频在线观看| 黄色一级视频片| 国产99久久九九精品无码| 在线观看av的网址| 日本高清免费在线视频| 九色porny自拍| 国产日韩欧美久久| 一级在线免费视频| 午夜激情在线观看视频| 91热这里只有精品| 污网站免费在线| 伊人色在线观看| 国内自拍第二页| 国产av第一区| 青草网在线观看| 国产精品va无码一区二区| 久久综合久久色| 午夜精品在线免费观看| 三上悠亚在线一区二区| 日本一二三四区视频| 青青草综合视频| 国产美女主播在线播放| 亚洲熟妇av一区二区三区漫画| 久久久久久久久久久视频| 亚洲性生活网站| 中文字幕55页| 无码精品a∨在线观看中文| 成年人在线观看视频免费| 国产又黄又猛的视频| 国产欧美123| 国产 porn| 大桥未久一区二区三区| 国产精品网站免费| 91福利免费观看| 久久精品xxx| www.日本一区| 黄色一级视频片| 一本之道在线视频| 成年人视频网站免费观看| 一区二区在线免费看| 成人在线播放网址| 亚洲成人天堂网| 日本a视频在线观看| 在线观看日本www| 欧美 日韩精品| 亚洲爆乳无码精品aaa片蜜桃| av免费播放网址| 97中文字幕在线| 天天色天天综合网| 999精品网站| 日本a视频在线观看| 青娱乐国产精品视频| 天天碰免费视频| 高清在线观看免费| 91大学生片黄在线观看| 亚洲免费黄色录像| 国产成人无码av在线播放dvd| 800av在线免费观看| 久国产精品视频| 中文字幕欧美人妻精品一区| 国产欧美日韩小视频| av电影一区二区三区| 一区二区三区四区毛片| 日本久久精品一区二区| 黄色片一级视频| 欧美精品色婷婷五月综合| 人人妻人人添人人爽欧美一区| 久久免费一级片| 无码人妻aⅴ一区二区三区日本| 日韩av一卡二卡三卡| 亚洲 国产 图片| 99re6在线观看|