作為微軟推出的網(wǎng)頁(yè)與數(shù)據(jù)庫(kù)解決方案,ASP由于有微軟得天獨(dú)厚的操作系統(tǒng)等技術(shù)后盾支持,因此得到了迅速的發(fā)展,并且正受到越來(lái)越多的歡迎,在目前在電子商務(wù)網(wǎng)站的建設(shè)中有很多都使用ASP來(lái)編寫(xiě)程序。
近來(lái)有很多的讀者向我們咨詢學(xué)習(xí)ASP的方法和在學(xué)習(xí)中遇到的一些問(wèn)題,其中有一些是初學(xué)者經(jīng)常遇到和面臨的問(wèn)題。為了讓讀者在學(xué)習(xí)ASP的過(guò)程中加深對(duì)ASP的了解,并能夠有效地解決遇到的問(wèn)題,我們特別收集了比較有代表性的一些問(wèn)題,在此列舉出來(lái)并一一給予解答,希望能在這有限的篇幅里為你學(xué)習(xí)ASP助一臂之力。
1、問(wèn)題:ASP是一種編程語(yǔ)言嗎?
答:ASP不是編程語(yǔ)言,而是一種開(kāi)發(fā)環(huán)境。ASP提供了一個(gè)在服務(wù)器端執(zhí)行指令的環(huán)境,它利用了特殊的符號(hào)()來(lái)區(qū)分HTML與必須經(jīng)過(guò)服務(wù)器翻譯才能送往客戶端的命令。它可以執(zhí)行的指令包括HTML語(yǔ)言,Microsoft VBScript和Microsoft Jscript等,因此可以制作出功能強(qiáng)大的Web應(yīng)用程序。
2、問(wèn)題:在Web服務(wù)器上容納多個(gè)Web站點(diǎn),能使用PWS嗎?
答:在PWS上只能容納一個(gè)Web站點(diǎn)。為了在相同的計(jì)算機(jī)上容納多個(gè)Web站點(diǎn),需要使用Windows NT Server或Windows 2000 Server/Professional和IIS。
3、問(wèn)題:如何使用6個(gè)內(nèi)置ASP對(duì)象?
答:ASP提供了多個(gè)內(nèi)嵌對(duì)象,無(wú)須建立就可以在指令中直接訪問(wèn)和使用它們,這六個(gè)對(duì)象主要有:請(qǐng)求(Request)對(duì)象、響應(yīng)(Response)對(duì)象、工作階段(Session)對(duì)象、應(yīng)用程序(Application)對(duì)象、服務(wù)器(Server)對(duì)象、Cookies對(duì)象,這六個(gè)對(duì)象中的服務(wù)器(Server)對(duì)象可加載其他組件,這可以擴(kuò)展ASP的功能。
使用Server.CreateObject所建立的對(duì)象,它的生命周期在它建立時(shí)開(kāi)始,在它所在的網(wǎng)頁(yè)程序結(jié)束時(shí)結(jié)束。如果想要讓該對(duì)象跨網(wǎng)頁(yè)使用,則可以用Session對(duì)象來(lái)記錄Server.CreateObject所建立的對(duì)象。
4、問(wèn)題:為什么在使用Response.Redirect的時(shí)候出現(xiàn)以下錯(cuò)誤:“標(biāo)題錯(cuò)誤,已將HTTP標(biāo)題寫(xiě)入用戶端瀏覽器,對(duì)任何HTTP的標(biāo)題所作的修改必須在寫(xiě)入頁(yè)內(nèi)容之前”?
答:Response.Redirect可以將網(wǎng)頁(yè)轉(zhuǎn)移至另外的網(wǎng)頁(yè)上,使用的語(yǔ)法結(jié)構(gòu)是這樣的:Response.Redirect網(wǎng)址,其中網(wǎng)址可以是相對(duì)地址或絕對(duì)地址,但在IIS4.0使用與在IIS5.0使用有所不同。
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)題。
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 控件的公司列表。
| 答:Request對(duì)象除了可以用來(lái)讀取附帶在網(wǎng)址后面的參數(shù)以外,也可以讀取HTML表單字段的內(nèi)容,經(jīng)常使用的語(yǔ)法結(jié)構(gòu)如下: < Form name =Formname method=“Get|Post”Action=“URL”>< Form > 其中的method可以接受Get或Post兩種傳輸?shù)姆椒ǎ渲械腜ost是允許傳輸大量數(shù)據(jù)的方法,而Get方法會(huì)將所要傳輸?shù)臄?shù)據(jù)附在網(wǎng)址后面,然后一起送達(dá)服務(wù)器,因此傳送的數(shù)據(jù)量就會(huì)受到限制,但是執(zhí)行效率卻比Post方法好。 使用Get或Post方法都可以將數(shù)據(jù)送至服務(wù)器,使用Request對(duì)象接收數(shù)據(jù)的相對(duì)應(yīng)方法如下: Get:Request.QueryString(“字段名稱”),也可以寫(xiě)成Request (“字段名稱”) Post:Request.Form (“字段名稱”),也可以寫(xiě)成Request (“字段名稱”) 24、問(wèn)題:如何提高使用Request集合的效率? 答:在使用Request集合時(shí),由于包含了一系列對(duì)相關(guān)集合的搜索,這比訪問(wèn)一個(gè)局部變量要慢得多。因此,如果打算在頁(yè)面中多次使用Request集合中的一個(gè)值,應(yīng)該考慮將其存貯為一個(gè)局部變量。 25、問(wèn)題:在ASP頁(yè)面中既可以使用VBScript,也可以使用Jscript,混合使用腳本引擎好嗎? 答:雖然在ASP頁(yè)面中既可以使用VBScript,也可以使用JScript。但是在同一個(gè)頁(yè)面上同時(shí)使用JScript和VBScript則是不可取的。因?yàn)榉?wù)器必須實(shí)例化并嘗試緩存兩個(gè)(而不是一個(gè))腳本引擎,這在一定程度上增加了系統(tǒng)負(fù)擔(dān)。因此,從性能上考慮,不應(yīng)在同一頁(yè)面中混用多種腳本引擎。 |