ASP的Internet/Intranet編程經(jīng)常見(jiàn)問(wèn)題
發(fā)表時(shí)間:2024-02-12 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]基于ASP技術(shù)開(kāi)發(fā)Internet/Intranet上的MIS系統(tǒng)是非常方便的,首先是它借用了ADO技術(shù)和概念,同時(shí)通過(guò)ODBC訪問(wèn)數(shù)據(jù)庫(kù),達(dá)到了充分的靈活性和多平臺(tái)性,另外,由于ASP利用VBS和JS腳本語(yǔ)言,也保證大多數(shù)開(kāi)發(fā)者很快進(jìn)入開(kāi)發(fā)過(guò)程,減少了學(xué)習(xí)的過(guò)程。 但是,由于ASP是基...
基于ASP技術(shù)開(kāi)發(fā)Internet/Intranet上的MIS系統(tǒng)是非常方便的,首先是它借用了ADO技術(shù)和概念,同時(shí)通過(guò)ODBC訪問(wèn)數(shù)據(jù)庫(kù),達(dá)到了充分的靈活性和多平臺(tái)性,另外,由于ASP利用VBS和JS腳本語(yǔ)言,也保證大多數(shù)開(kāi)發(fā)者很快進(jìn)入開(kāi)發(fā)過(guò)程,減少了學(xué)習(xí)的過(guò)程。
但是,由于ASP是基于Internet/Intranet方式的,它和傳統(tǒng)的C/S結(jié)構(gòu)畢竟有所不同,這樣在開(kāi)發(fā)中也要注意一些細(xì)節(jié)問(wèn)題。本文講述常見(jiàn)的一些問(wèn)題,并給出解決方法。
問(wèn)題描述
A. 無(wú)法正確運(yùn)行ASP
當(dāng)我們建立了一個(gè)ASP文件,并且符合語(yǔ)法時(shí),通過(guò)瀏覽器輸入以下地址,或通過(guò)資源管理器打開(kāi)瀏覽:
c:\inetpub\wwwroot\a.asp
將出現(xiàn)無(wú)法運(yùn)行的錯(cuò)誤,并提示權(quán)限不對(duì)或文件無(wú)法訪問(wèn),原因是,ASP文件首先要求站點(diǎn)是具備“執(zhí)行(腳本)”屬性的;然后要求按照URL格式輸入地址,而不是DOS格式,所以,請(qǐng)改正這兩個(gè)錯(cuò)誤。
B. 程序移動(dòng)位置后,無(wú)法訪問(wèn)數(shù)據(jù)庫(kù)
這種錯(cuò)誤首先在ODBC,如果ODBC數(shù)據(jù)源設(shè)置正確,那么需要注意ASP中打開(kāi)數(shù)據(jù)庫(kù)的命令:Conn.Open 的參數(shù)是否正確。如果正確,則需要注意是否使用了global.asa文件,該文件是ASP連接數(shù)據(jù)庫(kù)的配置文件,該文件內(nèi)容如下:
<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
'You can add special event handlers in this file that will get run automatically when special Active Server Pages events
'occur. To create these handlers, just create a subroutine with a name from the list below that corresponds to the event
'you want to use. For example, to create an event handler for Session_OnStart, you would put the following code into this
'file (without the comments):
'EventName Description
'Session_OnStart Runs the first time a user runs any page in your application
'Session_OnEnd Runs when a user's session times out or quits your application
'Application_OnStart Runs once when the first page of your application is run for the first time by any user
'Application_OnEnd Runs once when the web server shuts down
</SCRIPT>
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Session_OnStart
'==Visual InterDev Generated - DataConnection startspan==
'--Project Data Connection
Session("Customers_ConnectionString")="DRIVER={SQL Server};SERVER=(local);UID=sa;PWD=;APP=Microsoft(R)Developer Studio;WSID=GREGLEAK;DATABASE=Customers"
Session("Customers_ConnectionTimeout") = 15
Session("Customers_CommandTimeout") = 30
Session("Customers_RuntimeUserName") = "sa"
Session("Customers_RuntimePassword") = ""
'==Visual InterDev Generated - DataConnection endspan==
End Sub
</SCRIPT>
要注意其中的DSN,其中SERVER后一定是數(shù)據(jù)庫(kù)服務(wù)器名稱,如果該處不正確,需要改正。另外是UID和PWD是否正確;還有,如果OPEN命令使用了SESSION,則需要注意
Session("Customers_RuntimeUserName") = "sa"
Session("Customers_RuntimePassword") = ""
是否正確。
C. RUNAT使用問(wèn)題
在腳本語(yǔ)法中,有RUNAT參數(shù),表示該腳本是運(yùn)行在服務(wù)器上還是客戶機(jī)上。如果有RUNAT=SERVER則腳本運(yùn)行在服務(wù)器上,由ASP解釋程序來(lái)解釋執(zhí)行,并將結(jié)果傳遞給WWW服務(wù)器;否則就是運(yùn)行在客戶機(jī)上,由瀏覽器的腳本虛擬機(jī)解釋執(zhí)行,這時(shí),和一般的腳本沒(méi)有區(qū)別。所以,一定要注意ASP語(yǔ)法中的命令,如:REQUEST,QUERYSTRING,WRITE等命令或?qū)ο蟊仨氃诰邆銻UNAT參數(shù)的腳本運(yùn)行;而訪問(wèn)HTML的FORM對(duì)象的腳本一定沒(méi)有RUNAT參數(shù),因?yàn)镠TML的FORM是客戶機(jī)方面的對(duì)象,服務(wù)器無(wú)法訪問(wèn)。
D. 無(wú)法向SQL SERVER插入日期字段
如果遇到必須使用美國(guó)日期格式插入日期的情況,則需要在服務(wù)器的區(qū)域設(shè)置上設(shè)置中國(guó)長(zhǎng)日期格式,請(qǐng)?zhí)貏e注意,ASP是在服務(wù)器上運(yùn)行的,生成的HTML結(jié)果傳遞給瀏覽器,所以,所有格式設(shè)置必須在服務(wù)器上。
E. 如何向客戶機(jī)推送提示信息
如果在服務(wù)器上判斷訪問(wèn)錯(cuò)誤,如注冊(cè)失敗、無(wú)權(quán)操作記錄等需要提示用戶的信息。這個(gè)信息需要推送到客戶機(jī)上,并出現(xiàn)提示窗口,這是經(jīng)常遇到的問(wèn)題。這個(gè)時(shí)候,必須使用動(dòng)態(tài)頁(yè)面的方式,因?yàn)殄e(cuò)誤是在服務(wù)器上判斷的,而提示是在瀏覽器上出現(xiàn)的。我們 可以使用下面的ASP來(lái)推送錯(cuò)誤:
on error resume next
conn=server.createobject("adodb.connection")
conn.open "pubs","wlf",""
'如果注冊(cè)失敗則錯(cuò)誤數(shù)大于0
if conn.errors.count>0 then
‘以下代碼生成客戶機(jī)上的腳本語(yǔ)言,提供給瀏覽器執(zhí)行
response.write "<script language=javascript>" & chr(13)
response.write "{" & chr(13)
response.write " window.alert("您無(wú)權(quán)訪問(wèn)數(shù)據(jù)庫(kù)!")" & chr(13)
response.write "}" & chr(13)
response.write "</script >" & chr(13)
end if
F. 客戶機(jī)盡量使用固定IP地址
由于ASP連接數(shù)據(jù)庫(kù)是定時(shí)的,默認(rèn)是:
Session("Customers_ConnectionTimeout") = 15
Session("Customers_CommandTimeout") = 30
兩個(gè)設(shè)置決定的時(shí)間,超時(shí)后自動(dòng)斷開(kāi)連接,所以,當(dāng)刷新頁(yè)面重新執(zhí)行ASP代碼時(shí),如果IP分配時(shí)間不夠(動(dòng)態(tài)IP分配需要時(shí)間,比靜態(tài)長(zhǎng)很多。,可能無(wú)法連接上,則出現(xiàn)錯(cuò)誤信息,所以盡量用靜態(tài)IP地址。
總結(jié)
使用ASP編程是很方便的。由于ADO跨越了ODBC,形成具備多線程處理能力的數(shù)據(jù)庫(kù)操作方式,并且是在服務(wù)器上運(yùn)行,雖然增加了服務(wù)器的壓力,好在現(xiàn)在的服務(wù)器(哪怕是PC服務(wù)器)處理能力都非常強(qiáng),這樣反而發(fā)揮了服務(wù)器的效率。另外,由于ASP可以和ActiveX控件進(jìn)行良好的接口,也使開(kāi)發(fā)者容易根據(jù)自己的需要擴(kuò)充程序,并直接建立在ASP編程環(huán)境上,唯一需要注意的是,一定要以Internet/Intranet的思路設(shè)計(jì)和編寫(xiě)程序,否則將事倍功半。