ASP設(shè)計(jì)常見(jiàn)問(wèn)題及解答精要-2
發(fā)布時(shí)間:2008-09-17 閱讀數(shù): 次 來(lái)源:網(wǎng)樂(lè)原科技
9、問(wèn)題:我有沒(méi)有必要在每一個(gè)ASP文件中使用“Option Explicit”?
答:在實(shí)際應(yīng)用中,VBScript變量的概念已經(jīng)模糊了,允許直接使用變量,而不用Dim聲明變量,但這并不是一個(gè)好習(xí)慣,容易造成程序錯(cuò)誤,因?yàn)榭赡苤貜?fù)定義一個(gè)變量。我們可以在程序中使用Option Explicit語(yǔ)句,這樣在使用一個(gè)變量的時(shí)候,必須先聲明它,如果使用了沒(méi)有經(jīng)過(guò)聲明的變量,運(yùn)行時(shí),程序就會(huì)出錯(cuò)。
實(shí)踐證明,ASP文件中使用“Option Explicit”可以使得程序出錯(cuò)機(jī)會(huì)降到最少,并且會(huì)大大提升整體性能。
10、問(wèn)題:運(yùn)行ASP文件時(shí)有什么安全措施?
答:ASP提供了很好的代碼保護(hù)機(jī)制,所有的ASP代碼都在服務(wù)器端執(zhí)行而只返回給客戶端代碼執(zhí)行結(jié)果。但仍不排除惡意人士對(duì)Web服務(wù)器的刻意破壞,所以在編寫(xiě)ASP文件時(shí)更要注意安全問(wèn)題。
雖然在ASP中引入文件以inc作為擴(kuò)展名,在這里仍建議以ASP作為引文件的擴(kuò)展名。當(dāng)這些代碼在安全機(jī)制不好的Web Server上運(yùn)行時(shí),只需在地址欄上輸入引入文件的地址(inc為擴(kuò)展名),就可以瀏覽該引入文件的內(nèi)容,這是由于在Web Server上,如果沒(méi)有定義好解析某類型(比如inc)的動(dòng)態(tài)連接庫(kù)時(shí),該文件以源碼方式顯示。
另外,不要把數(shù)據(jù)庫(kù)文件放在網(wǎng)站結(jié)構(gòu)內(nèi)部,這樣,當(dāng)惡意人士獲取數(shù)據(jù)庫(kù)路徑后,就可以輕易獲取該數(shù)據(jù)庫(kù),進(jìn)而肆意更改數(shù)據(jù)庫(kù)內(nèi)容。比較好的做法是,為數(shù)據(jù)庫(kù)建立數(shù)據(jù)源名稱DSN(Date Source Name),在DSN中存儲(chǔ)了有關(guān)連接到指定數(shù)據(jù)提供者的信息,包括:“數(shù)據(jù)庫(kù)的物理位置,用于訪問(wèn)數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序的類型,訪問(wèn)數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序所需要的任何其他參數(shù)”,在進(jìn)行數(shù)據(jù)庫(kù)訪問(wèn)時(shí)可以直接訪問(wèn)該DSN。
11、問(wèn)題:評(píng)介Web數(shù)據(jù)庫(kù)管理系統(tǒng)時(shí),應(yīng)該考慮哪些問(wèn)題?
答:在評(píng)價(jià)一個(gè)Web數(shù)據(jù)庫(kù)管理系統(tǒng)時(shí),必須考慮到三方面的問(wèn)題:多用戶問(wèn)題;所建立的Web數(shù)據(jù)庫(kù)應(yīng)該是關(guān)系型的;數(shù)據(jù)庫(kù)的安全性問(wèn)題。
12、問(wèn)題:ADO是什么,它是如何操作數(shù)據(jù)庫(kù)的?
答:ADO的全名是ActiveX Data Object(ActiveX數(shù)據(jù)對(duì)象),是一組優(yōu)化的訪問(wèn)數(shù)據(jù)庫(kù)的專用對(duì)象集,它為ASP提供了完整的站點(diǎn)數(shù)據(jù)庫(kù)解決方案,它作用在服務(wù)器端,提供含有數(shù)據(jù)庫(kù)信息的主頁(yè)內(nèi)容,通過(guò)執(zhí)行SQL命令,讓用戶在瀏覽器畫(huà)面中輸入,更新和刪除站點(diǎn)數(shù)據(jù)庫(kù)的信息。
ADO主要包括Connection,Recordset和Command三個(gè)對(duì)象, 它們的主要功能如下:
·Connection對(duì)象:負(fù)責(zé)打開(kāi)或連接數(shù)據(jù)庫(kù)文件;
·Recordset對(duì)象:存取數(shù)據(jù)庫(kù)的內(nèi)容;
·Command對(duì)象:對(duì)數(shù)據(jù)庫(kù)下達(dá)行動(dòng)查詢指令,以及執(zhí)行SQL Server的存儲(chǔ)過(guò)程。
13、問(wèn)題:使用Recordset對(duì)象和Command對(duì)象來(lái)訪問(wèn)數(shù)據(jù)庫(kù)的區(qū)別在哪里?
答:Recordset對(duì)象會(huì)要求數(shù)據(jù)庫(kù)傳送所有的數(shù)據(jù),那么數(shù)據(jù)量很大的時(shí)候就會(huì)造成網(wǎng)絡(luò)的阻塞和數(shù)據(jù)庫(kù)服務(wù)器的負(fù)荷過(guò)重,因此整體的執(zhí)行效率會(huì)降低。
利用Command對(duì)象直接調(diào)用SQL語(yǔ)句,所執(zhí)行的操作是在數(shù)據(jù)庫(kù)服務(wù)器中進(jìn)行的,顯然會(huì)有很高的執(zhí)行效率。特別是在服務(wù)器端執(zhí)行創(chuàng)建完成的存儲(chǔ)過(guò)程,可以降低網(wǎng)絡(luò)流量,另外,由于事先進(jìn)行了語(yǔ)法分析,可以提高整體的執(zhí)行效率。
14、問(wèn)題:是否必須為每一個(gè)Recordset對(duì)象創(chuàng)建一個(gè)Connection對(duì)象?
答:可以同時(shí)對(duì)不同的Recordset對(duì)象使用相同的Connection對(duì)象,以節(jié)省資源。
15、問(wèn)題:什么是數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)?
答:數(shù)據(jù)庫(kù)為了保證存儲(chǔ)在其中的數(shù)據(jù)的安全和一致,必須有一組軟件來(lái)完成相應(yīng)的管理任務(wù),這組軟件就是數(shù)據(jù)庫(kù)管理系統(tǒng),簡(jiǎn)稱DBMS,DBMS隨系統(tǒng)的不同而不同,但是一般來(lái)說(shuō),它應(yīng)該包括以下幾方面的內(nèi)容:
數(shù)據(jù)庫(kù)描述功能:定義數(shù)據(jù)庫(kù)的全局邏輯結(jié)構(gòu),局部邏輯結(jié)構(gòu)和其他各種數(shù)據(jù)庫(kù)對(duì)象;
數(shù)據(jù)庫(kù)管理功能:包括系統(tǒng)配置與管理,數(shù)據(jù)存取與更新管理,數(shù)據(jù)完整性管理和數(shù)據(jù)安全性管理;
數(shù)據(jù)庫(kù)的查詢和操縱功能:該功能包括數(shù)據(jù)庫(kù)檢索和修改;
數(shù)據(jù)庫(kù)維護(hù)功能:包括數(shù)據(jù)引入引出管理,數(shù)據(jù)庫(kù)結(jié)構(gòu)維護(hù),數(shù)據(jù)恢復(fù)功能和性能監(jiān)測(cè)。
為了提高數(shù)據(jù)庫(kù)系統(tǒng)的開(kāi)發(fā)效率,現(xiàn)代數(shù)據(jù)庫(kù)系統(tǒng)除了DBMS之外,還提供了各種支持應(yīng)用開(kāi)發(fā)的工具。
16、問(wèn)題:當(dāng)前流行的WEB數(shù)據(jù)庫(kù)管理系統(tǒng)有哪些?
答:當(dāng)前流行的Web數(shù)據(jù)庫(kù)管理系統(tǒng)有微軟的SQL Server、Oracle、DB2、Sybase,小規(guī)模的企業(yè)多使用Access。
17、問(wèn)題:在ASP中使用ADO的AddNew方法和直接使用“Insert into...”語(yǔ)句有何不同?哪種方式更好?
答:ADO的AddNew方法只是將“Insert into ”語(yǔ)句封裝了起來(lái),所以,當(dāng)對(duì)大量數(shù)據(jù)進(jìn)行操作的時(shí)候,直接使用SQL語(yǔ)句將會(huì)大大加快存取數(shù)據(jù)的速度,因?yàn)樗鼫p少了ADO的“翻譯”時(shí)間,由于SQL語(yǔ)句所執(zhí)行的操作是直接在數(shù)據(jù)庫(kù)服務(wù)器中進(jìn)行的,尤其在數(shù)據(jù)量很大的時(shí)候有顯著的優(yōu)勢(shì)。
18、問(wèn)題:為什么我在ASP中使用標(biāo)準(zhǔn)的插入記錄語(yǔ)句 insert into books(name,email) values(“kitty”, “kitty@263.com”)會(huì)出錯(cuò)?
答:SQL(Structured Query Language/結(jié)構(gòu)式查詢語(yǔ)言)是IBM公司在1970年代所發(fā)展出來(lái)的數(shù)據(jù)查詢語(yǔ)言,它現(xiàn)在已經(jīng)成為關(guān)系型數(shù)據(jù)庫(kù)查詢語(yǔ)言的標(biāo)準(zhǔn)。SQL語(yǔ)句是一種以英文為基礎(chǔ)的程序語(yǔ)言,可以使用它來(lái)添加,管理以及存取數(shù)據(jù)庫(kù)。
在SQL語(yǔ)句中添加時(shí)的字符串雖然可以使用雙引號(hào),但在ASP中卻需要使用單引號(hào)才能正常執(zhí)行。所以應(yīng)當(dāng)寫(xiě)成insert into books(name,email) values(‘kitty’,‘kitty@263.com’)。
19、問(wèn)題:什么是ActiveX 控件? 在哪里可以得到這些ActiveX控件?
答:Microsoft ActiveX控件是由軟件提供商開(kāi)發(fā)的可重用的軟件組件。除了ASP的內(nèi)嵌對(duì)象外,另外安裝進(jìn)來(lái)的ActiveX控件也可以在ASP中使用,這樣可以節(jié)省許多寶貴的開(kāi)發(fā)時(shí)間,在ASP中其實(shí)也內(nèi)嵌了很多的ActiveX控件可以使用。
使用ActiveX控件,可以很快地Web應(yīng)用程序、以及開(kāi)發(fā)工具中加入特殊的功能。例如,使用AdRotator對(duì)象來(lái)制作廣告滾動(dòng)板,使用FileSystemObject對(duì)象進(jìn)行文件存取,使用Marquee對(duì)象實(shí)現(xiàn)滾動(dòng)文字。
現(xiàn)在,已有1000多個(gè)商用的ActiveX控件,開(kāi)發(fā)ActiveX控件可以使用各種編程語(yǔ)言,如C,C++等,以及微軟公司的 Visual Java開(kāi)發(fā)環(huán)境Microsoft Visual J++。 ActiveX控件一旦被開(kāi)發(fā)出來(lái),設(shè)計(jì)和開(kāi)發(fā)人員就可以把它當(dāng)作預(yù)裝配組件,用于開(kāi)發(fā)客戶程序。以此種方式使用 ActiveX控件,使用者無(wú)需知道這些組件是如何開(kāi)發(fā)的,在很多情況下,甚至不需要自己編程,就可以完成網(wǎng)頁(yè)或應(yīng)用程序的設(shè)計(jì)。
目前由第三方軟件開(kāi)發(fā)商提供的商用控件有1000多種。微軟ActiveX組件庫(kù)(ActiveX Component Gallery)中存著有關(guān)信息以及相關(guān)的連接,它們指向微軟及第三方開(kāi)發(fā)商提供的各種 ActiveX 控件。在微軟ActiveX組件庫(kù)(ActiveX Component Gallery)中,可以找到開(kāi)發(fā)Internet增強(qiáng)型ActiveX 控件的公司列表。
20、問(wèn)題:為什么使用strStartPort=(Request.Form ("catmenu_0")語(yǔ)句取到表單中起始站點(diǎn)的值在數(shù)據(jù)庫(kù)卻找不到?
答:這是因?yàn)槿〉降钠鹗颊军c(diǎn)的值可能有空格,比如原意是“杭州”,但是由于空格存在,ASP程序取到的值可能就是“ 杭州”,而數(shù)據(jù)庫(kù)中只有“杭州”的記錄,當(dāng)然就找不到了,解決的方法是利用Trim 函數(shù)將字符串兩頭空格全部去除,相應(yīng)的語(yǔ)句為:
strStartPort=TRIM(Request.Form("catmenu_0"))
21、問(wèn)題:在ASP中當(dāng)變量的生命周期結(jié)束后,有幾種保留變量?jī)?nèi)容的方法?
答:任何導(dǎo)致網(wǎng)頁(yè)結(jié)束的操作,比如當(dāng)按下瀏覽器的“刷新”按鈕,或者關(guān)閉了瀏覽器,再重新打開(kāi)它,都會(huì)導(dǎo)致變量生命周期的結(jié)束。
如果希望在網(wǎng)頁(yè)結(jié)束執(zhí)行時(shí),還能夠保留變量的內(nèi)容,以備下一次執(zhí)行時(shí)使用,就可以借助Application對(duì)象來(lái)實(shí)現(xiàn)。比如可以利用Application對(duì)象來(lái)制作統(tǒng)計(jì)網(wǎng)站訪問(wèn)量的計(jì)數(shù)器。
Session對(duì)象跟Application對(duì)象一樣,可以在網(wǎng)頁(yè)結(jié)束時(shí)將變量的內(nèi)容存儲(chǔ)下來(lái),但是與Application對(duì)象不同的是,每個(gè)聯(lián)機(jī)是一個(gè)獨(dú)立的Session對(duì)象,簡(jiǎn)單地說(shuō)就是所有聯(lián)機(jī)上網(wǎng)者只會(huì)共享一個(gè)Application對(duì)象,但每位聯(lián)機(jī)上網(wǎng)者卻會(huì)擁有自己的Session對(duì)象。
Application對(duì)象與Session對(duì)象可以幫我們把信息記錄在服務(wù)器端,而Cookies對(duì)象則會(huì)借助瀏覽器提供的Cookies功能將信息記錄在客戶端。有一點(diǎn)要注意,Cookies是記錄在瀏覽器的信息,所以數(shù)據(jù)的存取并不象存取其他ASP對(duì)象(信息存儲(chǔ)在Server端)那么簡(jiǎn)單,就實(shí)際運(yùn)行來(lái)看,只有在瀏覽器開(kāi)始瀏覽Server的某一網(wǎng)頁(yè),而Server尚未下載任何數(shù)據(jù)給瀏覽器之前,瀏覽器才能夠與Server進(jìn)行Cookies數(shù)據(jù)的交換。
22、問(wèn)題:對(duì)象使用完后應(yīng)該怎么辦?
答:當(dāng)使用完對(duì)象后,首先使用Close方法來(lái)釋放對(duì)象所占用的系統(tǒng)資源;然后設(shè)置對(duì)象值為“nothing”來(lái)釋放對(duì)象占用的內(nèi)存,否則會(huì)因?yàn)閷?duì)象太多導(dǎo)致WEB服務(wù)站點(diǎn)運(yùn)行效率降低乃至崩潰,相應(yīng)語(yǔ)句如下:
< %
對(duì)象.close
set對(duì)象= nothing
% >