ASP編程入門進(jìn)階(七):內(nèi)置對(duì)象Server
更新時(shí)間:2007年01月03日 00:00:00 作者:
Server 對(duì)象提供對(duì)服務(wù)器上的方法和屬性的訪問 , 其中大多數(shù)方法和屬性是作為實(shí)用程序的功能服務(wù)。(IIS HELP翻譯)
有了 Server 對(duì)象,你就可以在服務(wù)器上啟動(dòng) ActiveX 對(duì)象例程,并使用 Active Server 服務(wù)提供象 HTML 和 URL 編碼這樣的函數(shù)。
一,Script.ScriptTimeout
在腳本運(yùn)行超過一段時(shí)間之后,即作超時(shí)處理。
服務(wù)器一般的默認(rèn)腳本運(yùn)行時(shí)間是90秒。
你可以從“Internet信息服務(wù)”中“默認(rèn)Web站點(diǎn)”的屬性彈出框中看出,你也可以自己設(shè)定。

呵呵,上面的可不是,900秒了。
應(yīng)該是“主目錄”標(biāo)簽中的“配置”對(duì)話框中,WINXP一樣。


在理解腳本運(yùn)行時(shí)間之前,先來看一個(gè)程序,主要功能就是進(jìn)行計(jì)算網(wǎng)頁(yè)執(zhí)行時(shí)間的。
[Ctrl+A 全部選擇進(jìn)行拷貝 提示:可先修改部分代碼,再點(diǎn)擊運(yùn)行]
當(dāng)然對(duì)應(yīng)的ASP也就是看到許多站點(diǎn)都有的頁(yè)面執(zhí)行時(shí)間顯示
1,time.asp
那如果上面的程序變成for i= 1 to 5000000
呵呵,是不是機(jī)器快反應(yīng)不過來的感覺,那這個(gè)就是腳本的執(zhí)行時(shí)間了。
為了讓程序能很好的執(zhí)行,就該把腳本執(zhí)行時(shí)間放長(zhǎng)了。
怎么放長(zhǎng)?把默認(rèn)的改?呵呵,當(dāng)然不是:)
時(shí)間的設(shè)定當(dāng)然要是比默認(rèn)90秒大的,現(xiàn)在的代碼就是:指定服務(wù)器處理腳本在 110 秒后超時(shí)。
還有,腳本時(shí)間的確定要看自身的程序了,一般情況100秒左右也差不多了,即使能執(zhí)行出來,可能觀看網(wǎng)頁(yè)的人早就把它叉叉了。
以上的ScriptTimeout就是Server對(duì)象唯一屬性了
二,Server.HtmlEncode
HtmlEncode就是Server對(duì)象的其中一個(gè)方法了。它允許你對(duì)特定的字符串進(jìn)行 HTML 編碼,雖然 HTML 可以顯示大部分你寫入 ASP 文件中的文本,但是當(dāng)你需要實(shí)際包含 HTML 標(biāo)記中所使用的字符,就會(huì)遇到問題。這是因?yàn)?,?dāng)瀏覽器讀到這樣的字符串時(shí),會(huì)試圖進(jìn)行解釋。
還是看一個(gè)程序,我想在頁(yè)面顯示“ ”這樣的代碼(附: 是空格的代碼)
那么當(dāng)我進(jìn)行書寫的時(shí)候你會(huì)發(fā)現(xiàn),瀏覽器已經(jīng)給我解釋了的。
[Ctrl+A 全部選擇進(jìn)行拷貝 提示:可先修改部分代碼,再點(diǎn)擊運(yùn)行]
所以,為了要讓一些特殊代碼能夠顯示,就運(yùn)用該方法了。
2,htmlencode.asp
這在許多網(wǎng)站,論壇都存在的一些BUG,不信你可以到各論壇試試:敲入 就是沒有,急死你呢:)當(dāng)然HtmlEncode只是其中的一個(gè)原因,最主要的還是UBB代碼的轉(zhuǎn)換。不過關(guān)于這點(diǎn)我也已經(jīng)調(diào)試解決了。
調(diào)試地址參看 http://www.cnbruce.com/juven/showart.asp
當(dāng)然經(jīng)典論壇不存在這問題,要不你也不會(huì)看到效果了。
三,Server.UrlEncode
正如 HtmlEncode 方法使客戶可以將字符串翻譯成可接受的 HTML 格式一樣,Server 對(duì)象的 UrlEncode 方法則是根據(jù) URL 規(guī)則對(duì)字符串進(jìn)行正確編碼,當(dāng)字符串?dāng)?shù)據(jù)以 URL 的形式傳遞到服務(wù)器時(shí),在字符串中不允許出現(xiàn)空格,也不允許出現(xiàn)特殊字符。為此,如果你希望在發(fā)送字符串之前進(jìn)行 URL 編碼,可以使用 Server.URLEncode 方法。
為方便起見,我們先看為處理送交,然后處理接受的效果。
3,urlencode.asp
當(dāng)然你會(huì)發(fā)現(xiàn),雖然不執(zhí)行了,但會(huì)出現(xiàn)“<”變成了“%3C”,“>”變成了“%3E”,那這就是因?yàn)?B>沒有在發(fā)送之前處理。
不過,我們還可以通過Replace函數(shù)將這些特殊代碼再逆轉(zhuǎn)過來。
4,vurlencode.asp
呵呵,其實(shí)上面我是做的無(wú)用功啦,真正應(yīng)該是在發(fā)送之前就該處理下的,不過對(duì)學(xué)習(xí)該方法的舉例確是個(gè)好方法:)
四,Server.MapPath
相信看過我寫的《DW2ASP系列》的朋友,都卡在這個(gè)上了。DW畢竟是入門的好東西,但要系統(tǒng)學(xué)ASP編程,對(duì)這個(gè)就該好好認(rèn)識(shí)了解下。
MapPath方法,具體的就是將指定的相對(duì)或虛擬路徑,映射到服務(wù)器上相應(yīng)的物理目錄上。
用法,也就是語(yǔ)法了,如下:
Path 指定要映射物理目錄的相對(duì)或虛擬路徑。若 Path 以一個(gè)正斜杠 (/) 或反斜杠 (\) 開始,則 MapPath 方法返回路徑時(shí)將 Path 視為完整的虛擬路徑。若 Path 不是以斜杠開始,則 MapPath 方法返回同本文件中已有的路徑相對(duì)的路徑。這里需要注意的是 MapPath 方法不檢查返回的路徑是否正確或在服務(wù)器上是否存在。
當(dāng)然這可以和Request.ServerVariables連起來使用看看。
5,mappath.asp
測(cè)試我的地址http://www.cnbruce.com/server.asp
注意測(cè)試的地址和根目錄下的地址,對(duì)應(yīng)的是同一文件夾(這就是虛擬主機(jī)),6to23之類是不會(huì)相同的。
有此些了解,對(duì)路徑的處理應(yīng)該要好多了,再返回我的站點(diǎn),看看我對(duì)數(shù)據(jù)庫(kù)的mappath路徑的處理方法,相信又是一個(gè)理解層次了。
數(shù)據(jù)庫(kù)的mappath路徑的處理方法在:
http://www.cnbruce.com/blog/showlog.asp?cat_id=27&log_id=241
五,Server.CreatObject
Server.CreateObject 這個(gè)方法恐怕是 ASP 中最為實(shí)用,也是最強(qiáng)勁的功能了。它可用于創(chuàng)建已經(jīng)注冊(cè)到服務(wù)器上的 ActiveX 組件實(shí)例。這是一個(gè)非常重要的特性,因?yàn)橥ㄟ^使用 ActiveX 組件能夠使你輕松地?cái)U(kuò)展 ActiveX 的能力,正是使用了 ActiveX 組件,你可以實(shí)現(xiàn)至關(guān)重要的功能,譬如數(shù)據(jù)庫(kù)連接、文件訪問、廣告顯示和其他 VBScript 不能提供或不能簡(jiǎn)單地依靠單獨(dú)使用 ActiveX 所能完成的功能。也正是因?yàn)檫@些組件才使得 ASP 具有了強(qiáng)大的生命力。
呵呵,不過,在我們沒有談及連接數(shù)據(jù)庫(kù)之前,這個(gè)先空著,“要得好,到臨了”:)等我們接觸到數(shù)據(jù)庫(kù)連接的時(shí)候再說不遲。
恩,那今天就主要把Server對(duì)象學(xué)習(xí)了下,感覺好象是每個(gè)都有用的,重要啊。
還有,需要說明的,如果您從本處轉(zhuǎn)載,發(fā)現(xiàn)和本源件有差錯(cuò),比如代碼 、 < 、 >等等,根本就是被執(zhí)行了的。都說明您的站點(diǎn)存在著這些問題。
有了 Server 對(duì)象,你就可以在服務(wù)器上啟動(dòng) ActiveX 對(duì)象例程,并使用 Active Server 服務(wù)提供象 HTML 和 URL 編碼這樣的函數(shù)。
一,Script.ScriptTimeout
在腳本運(yùn)行超過一段時(shí)間之后,即作超時(shí)處理。
服務(wù)器一般的默認(rèn)腳本運(yùn)行時(shí)間是90秒。
你可以從“Internet信息服務(wù)”中“默認(rèn)Web站點(diǎn)”的屬性彈出框中看出,你也可以自己設(shè)定。

呵呵,上面的可不是,900秒了。
應(yīng)該是“主目錄”標(biāo)簽中的“配置”對(duì)話框中,WINXP一樣。


在理解腳本運(yùn)行時(shí)間之前,先來看一個(gè)程序,主要功能就是進(jìn)行計(jì)算網(wǎng)頁(yè)執(zhí)行時(shí)間的。
[Ctrl+A 全部選擇進(jìn)行拷貝 提示:可先修改部分代碼,再點(diǎn)擊運(yùn)行]
當(dāng)然對(duì)應(yīng)的ASP也就是看到許多站點(diǎn)都有的頁(yè)面執(zhí)行時(shí)間顯示
1,time.asp
<%startime=timer()%> <a href=#bot>到下面看執(zhí)行的時(shí)間</a> <% for i= 1 to 5000 response.write("<hr width="&int(500+i)&">") next %> 當(dāng)然中間還可以添加其它內(nèi)容。<br> <%endtime=timer()%> <a name=bot></a> <%=FormatNumber((endtime-startime)*1000,3)%>毫秒 |
那如果上面的程序變成for i= 1 to 5000000
呵呵,是不是機(jī)器快反應(yīng)不過來的感覺,那這個(gè)就是腳本的執(zhí)行時(shí)間了。
為了讓程序能很好的執(zhí)行,就該把腳本執(zhí)行時(shí)間放長(zhǎng)了。
怎么放長(zhǎng)?把默認(rèn)的改?呵呵,當(dāng)然不是:)
<%Server.ScriptTimeout=110%> |
時(shí)間的設(shè)定當(dāng)然要是比默認(rèn)90秒大的,現(xiàn)在的代碼就是:指定服務(wù)器處理腳本在 110 秒后超時(shí)。
還有,腳本時(shí)間的確定要看自身的程序了,一般情況100秒左右也差不多了,即使能執(zhí)行出來,可能觀看網(wǎng)頁(yè)的人早就把它叉叉了。
以上的ScriptTimeout就是Server對(duì)象唯一屬性了
二,Server.HtmlEncode
HtmlEncode就是Server對(duì)象的其中一個(gè)方法了。它允許你對(duì)特定的字符串進(jìn)行 HTML 編碼,雖然 HTML 可以顯示大部分你寫入 ASP 文件中的文本,但是當(dāng)你需要實(shí)際包含 HTML 標(biāo)記中所使用的字符,就會(huì)遇到問題。這是因?yàn)?,?dāng)瀏覽器讀到這樣的字符串時(shí),會(huì)試圖進(jìn)行解釋。
還是看一個(gè)程序,我想在頁(yè)面顯示“ ”這樣的代碼(附: 是空格的代碼)
那么當(dāng)我進(jìn)行書寫的時(shí)候你會(huì)發(fā)現(xiàn),瀏覽器已經(jīng)給我解釋了的。
[Ctrl+A 全部選擇進(jìn)行拷貝 提示:可先修改部分代碼,再點(diǎn)擊運(yùn)行]
所以,為了要讓一些特殊代碼能夠顯示,就運(yùn)用該方法了。
2,htmlencode.asp
<%Response.write ("這是沒有采用 HTMLEncode 方法的測(cè)試。<br> 這里就另起一行,說明代碼被執(zhí)行。 ")%> <hr> <%Response.write Server.HtmlEncode("這是對(duì) HTMLEncode 方法的測(cè)試。<br> 這里應(yīng)該不會(huì)另起一行,也就是代碼沒有被執(zhí)行了。 ")%> |
這在許多網(wǎng)站,論壇都存在的一些BUG,不信你可以到各論壇試試:敲入 就是沒有,急死你呢:)當(dāng)然HtmlEncode只是其中的一個(gè)原因,最主要的還是UBB代碼的轉(zhuǎn)換。不過關(guān)于這點(diǎn)我也已經(jīng)調(diào)試解決了。
調(diào)試地址參看 http://www.cnbruce.com/juven/showart.asp
當(dāng)然經(jīng)典論壇不存在這問題,要不你也不會(huì)看到效果了。
三,Server.UrlEncode
正如 HtmlEncode 方法使客戶可以將字符串翻譯成可接受的 HTML 格式一樣,Server 對(duì)象的 UrlEncode 方法則是根據(jù) URL 規(guī)則對(duì)字符串進(jìn)行正確編碼,當(dāng)字符串?dāng)?shù)據(jù)以 URL 的形式傳遞到服務(wù)器時(shí),在字符串中不允許出現(xiàn)空格,也不允許出現(xiàn)特殊字符。為此,如果你希望在發(fā)送字符串之前進(jìn)行 URL 編碼,可以使用 Server.URLEncode 方法。
為方便起見,我們先看為處理送交,然后處理接受的效果。
3,urlencode.asp
<%filepath=request.servervariables("script_name")%> 接受URL中的值(沒有處理接受值,發(fā)現(xiàn)值被解釋了): <%=request.querystring("cnbruce")%> <form action="<%=filepath%>"> 你可以輸入“<hr>”等代碼看看:<input type="text" size="20" name="cnbruce"><input type="submit"> </form> 接受URL中的值(進(jìn)行了urlencode編碼,不會(huì)執(zhí)行): <%=Server.URLEncode(request.querystring("cnbruce"))%> |
當(dāng)然你會(huì)發(fā)現(xiàn),雖然不執(zhí)行了,但會(huì)出現(xiàn)“<”變成了“%3C”,“>”變成了“%3E”,那這就是因?yàn)?B>沒有在發(fā)送之前處理。
不過,我們還可以通過Replace函數(shù)將這些特殊代碼再逆轉(zhuǎn)過來。
4,vurlencode.asp
<% function tihuan(what) tihuan=what if not isnull(what) then tihuan=replace(tihuan,"%3C","<") tihuan=replace(tihuan,"%3D","=") tihuan=replace(tihuan,"%3E",">") tihuan=replace(tihuan,"%26","&") tihuan=replace(tihuan,"%20"," ") tihuan=replace(tihuan,"%3B",";") tihuan=replace(tihuan,"%22",""") tihuan=replace(tihuan,"%2B","+") tihuan=replace(tihuan,"%2F","/") end if end function %> <%filepath=request.servervariables("script_name")%> 接受URL中的值(沒有處理接受值,發(fā)現(xiàn)值被解釋了): <%=request.querystring("cnbruce")%> <form action="<%=filepath%>"> 你可以輸入“<hr>”等代碼看看:<input type="text" size="20" name="cnbruce"><input type="submit"> </form> 接受URL中的值(進(jìn)行了urlencode編碼,不會(huì)執(zhí)行): <%=tihuan(Server.URLEncode(request.querystring("cnbruce")))%> |
呵呵,其實(shí)上面我是做的無(wú)用功啦,真正應(yīng)該是在發(fā)送之前就該處理下的,不過對(duì)學(xué)習(xí)該方法的舉例確是個(gè)好方法:)
四,Server.MapPath
相信看過我寫的《DW2ASP系列》的朋友,都卡在這個(gè)上了。DW畢竟是入門的好東西,但要系統(tǒng)學(xué)ASP編程,對(duì)這個(gè)就該好好認(rèn)識(shí)了解下。
MapPath方法,具體的就是將指定的相對(duì)或虛擬路徑,映射到服務(wù)器上相應(yīng)的物理目錄上。
用法,也就是語(yǔ)法了,如下:
Server.MapPath(Path) |
Path 指定要映射物理目錄的相對(duì)或虛擬路徑。若 Path 以一個(gè)正斜杠 (/) 或反斜杠 (\) 開始,則 MapPath 方法返回路徑時(shí)將 Path 視為完整的虛擬路徑。若 Path 不是以斜杠開始,則 MapPath 方法返回同本文件中已有的路徑相對(duì)的路徑。這里需要注意的是 MapPath 方法不檢查返回的路徑是否正確或在服務(wù)器上是否存在。
當(dāng)然這可以和Request.ServerVariables連起來使用看看。
5,mappath.asp
Request.ServerVariables("APPL_PHYSICAL_PATH") : <%=Request.ServerVariables("APPL_PHYSICAL_PATH")%><p> Request.ServerVariables("PATH_INFO") : <%=Request.ServerVariables("PATH_INFO")%><p> Request.ServerVariables("SCRIPT_NAME") : <%=Request.ServerVariables("SCRIPT_NAME")%><p> Request.ServerVariables("URL") : <%=Request.ServerVariables("URL")%><p> Request.ServerVariables("PATH_TRANSLATED") : <%=Request.ServerVariables("PATH_TRANSLATED")%><hr> 上面都是通過ServerVariables提取得出的值,下面就來運(yùn)用mapath把一個(gè)虛擬地址轉(zhuǎn)變?yōu)閷?shí)際的物理地址。<p> Server.MapPath(Request.ServerVariables("URL")) :<%=Server.MapPath(Request.ServerVariables("URL"))%><p> 或者自己隨便寫個(gè)不存在的路徑,同樣能夠執(zhí)行<p> Server.MapPath("cnbruce.asp") : <%=Server.MapPath("cnbruce.asp")%><p> 再來個(gè)“/”的<p> Server.MapPath("/cnbruce.asp") : <%=Server.MapPath("/cnbruce.asp")%><br> Server.MapPath("\cnbruce.asp") : <%=Server.MapPath("\cnbruce.asp")%><p> 你會(huì)發(fā)現(xiàn)物理地址轉(zhuǎn)變到IIS默認(rèn)根目錄下面了。 這就是如6to23之類的站點(diǎn)mappath的問題所在。還是虛擬主機(jī)好,即使是根,也還是自己站點(diǎn)的默認(rèn)存放節(jié)點(diǎn)根。 |
測(cè)試我的地址http://www.cnbruce.com/server.asp
注意測(cè)試的地址和根目錄下的地址,對(duì)應(yīng)的是同一文件夾(這就是虛擬主機(jī)),6to23之類是不會(huì)相同的。
有此些了解,對(duì)路徑的處理應(yīng)該要好多了,再返回我的站點(diǎn),看看我對(duì)數(shù)據(jù)庫(kù)的mappath路徑的處理方法,相信又是一個(gè)理解層次了。
數(shù)據(jù)庫(kù)的mappath路徑的處理方法在:
http://www.cnbruce.com/blog/showlog.asp?cat_id=27&log_id=241
五,Server.CreatObject
Server.CreateObject 這個(gè)方法恐怕是 ASP 中最為實(shí)用,也是最強(qiáng)勁的功能了。它可用于創(chuàng)建已經(jīng)注冊(cè)到服務(wù)器上的 ActiveX 組件實(shí)例。這是一個(gè)非常重要的特性,因?yàn)橥ㄟ^使用 ActiveX 組件能夠使你輕松地?cái)U(kuò)展 ActiveX 的能力,正是使用了 ActiveX 組件,你可以實(shí)現(xiàn)至關(guān)重要的功能,譬如數(shù)據(jù)庫(kù)連接、文件訪問、廣告顯示和其他 VBScript 不能提供或不能簡(jiǎn)單地依靠單獨(dú)使用 ActiveX 所能完成的功能。也正是因?yàn)檫@些組件才使得 ASP 具有了強(qiáng)大的生命力。
呵呵,不過,在我們沒有談及連接數(shù)據(jù)庫(kù)之前,這個(gè)先空著,“要得好,到臨了”:)等我們接觸到數(shù)據(jù)庫(kù)連接的時(shí)候再說不遲。
恩,那今天就主要把Server對(duì)象學(xué)習(xí)了下,感覺好象是每個(gè)都有用的,重要啊。
還有,需要說明的,如果您從本處轉(zhuǎn)載,發(fā)現(xiàn)和本源件有差錯(cuò),比如代碼 、 < 、 >等等,根本就是被執(zhí)行了的。都說明您的站點(diǎn)存在著這些問題。
相關(guān)文章
ASP編程中連接數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)操作的常用代碼
ASP編程中連接數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)操作的常用代碼...2007-11-11ASP中Request對(duì)象獲取客戶端數(shù)據(jù)的順序(容易忽略)
ASP中Request對(duì)象獲取客戶端數(shù)據(jù)的順序(容易忽略)...2006-08-08有關(guān)Server.Mappath詳細(xì)接觸
很多的朋友一而再,再而三的在Server.Mappath上卡殼,cnbruce也是一遍兩遍地重復(fù),還是不能全部解決,所以通過下面的舉例,希望更多的朋友能恍然大悟,透徹明白過來2007-01-01