ASP入門(十三)-Server對象


Server 對象用於處理服務器上的一些特殊任務,例如,創建組件實例、獲取文件路徑、執行ASP腳本文件等。

Server 對象是體現 ASP 強大功能的一個對象,之前介紹的對象都是針對獲取、請求以及簡單存儲信息而設計的,之所以說它強大,有兩個原因第一可以通過 Server 對象創建服務器上所具有的組件的實例,從而擴展 ASP 功能;第二 Server 對象可以執行服務器上的 ASP 文件,從而使得一些大型系統的架構變得簡單。

Server 的屬性

Server 對象只有一個屬性 ScriptTimeout,設置或返回當前頁面執行的超時時間()。

設定完畢后,當當前頁面在服務器上的執行時間超過這個時間,則會強制終止當前頁面的運行。因此如果某個頁面可能運行時間較長的話,就需要手動來增大這個值,來保證頁面可以正常執行完畢。

下面的例子(Server_ScriptTimeout.asp)演示如何設置及取回 ScriptTimeout 值,主要代碼如下:

<h3>如果不設定ScriptTimeout屬性,IIS中默認值為 <%=Server.ScriptTimeout%></h3>
<h3>手動屬性設置為200秒,現在值為 <%=Server.ScriptTimeout%></h3>

顯示結果如下,IIS默認的 ScriptTimeout 屬性值為 90 秒。

20150815001

Server 的方法

方法 描述
CreateObject(progID) 創建由 progID 標識的對象的一個實例
Execute(path) 停止當前頁面的執行,把控制轉到 path 中指定的網頁。在該頁面執行完畢后,控制傳遞回原先的頁面,並繼續執行 Execute 后面的語句。
GetLastError() 返回 ASPError 對象,描述發生錯誤的原因
HTMLEncode(string) 對字符串進行 HTML 轉義
MapPath(path) 返回在 Path 中指定的文件或資源的完整物理路徑和文件名
Transfer(path) 停止當前頁面的執行,把控制轉到 path 中指定的頁面
URLEncode(string) 對字符串進行 URL 轉義

CreateObject 方法,用於創建服務器上的組件的實例。最常用的就是創建數據庫操作組件的ADO的實例,我們手頭剛剛創建了一個 Access 數據庫 ServerInfo.accdb,這個數據庫有一個名為 ServerMethods 的表,表里面記錄了 Server 對象的方法(Method 字段)及描述信息(Description 字段),如下圖:

20150815002

我們的例子(Server_CreateObject.asp)主要是讀取出表的全部內容,部分代碼如下:

<%
Dim oConn, sConnString, sDBPath, oRs, sql
'數據庫文件名
sDBPath = "ServerInfo.accdb"
'數據連接字符串
sConnString = "Provider=Microsoft.ACE.OLEDB.15.0;Data Source=" & Server.MapPath(sDBPath)
'創建 Connection 對象的實例 oConn
Set oConn = Server.CreateObject("ADODB.Connection")
'調用 oConn 的 Open 方法來打開連接
oConn.Open sConnString
'SQL語句,查詢所有記錄
sql = "SELECT * FROM ServerMethods"
'建立 ADODB.RecordSet 對象實例 oRs
Set oRs = Server.CreateObject("ADODB.RecordSet")
'通過SQL語句獲得記錄集
oRs.Open sql, oConn
Do While Not oRs.EOF
  Response.Write("<tr>")
  Response.Write("<td>" & oRs("Method") & "</td>")
  Response.write("<td>" & oRs("Description") & "</td>")
  Response.Write("</tr>")
  oRs.MoveNext
Loop
oRs.Close
Set oRs = Nothing
oConn.Close
Set oConn = Nothing
%>

運行效果如下:

20150815003

在這段代碼中我們用到了兩次 CreateObject,如下代碼:

...
'創建 Connection 對象的實例 oCon
Set oConn = Server.CreateObject("ADODB.Connection")
...
'建立 ADODB.RecordSet 對象實例 oRs
Set oRs = Server.CreateObject("ADODB.RecordSet")
...

在后面的介紹會詳細介紹數據庫方面的知識。


Execute、Transfer 方法

兩者的作用都是停止當前頁面的運行,並傳遞到另外一個一面,其不同在於,Execute 方法是在另外一個頁面執行完畢后回到現在的頁面繼續向下執行,而 Transfer 方法是在另外一個頁面執行完畢后即停止運行了。

我們下面的例子將說明 Execute 和 Transfer 方法的區別,我們 建立兩個 ASP 文件(File1.asp 和 File2.asp)

File1.asp 代碼如下:

...
<h3>Server.Execute演示</h3>
<%
Response.Write("I am in File 1!<br>")
Server.Execute("File2.asp")
Response.Write("I am back in File 1!")
%>
<hr>
<h3>Server.Transfer演示</h3>
<%
Response.Write("I am in File 1!<br>")
Server.Transfer("File2.asp")
Response.Write("I am back in File 1!")
%>
...

File2.asp 代碼如下:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
Response.Write("I am in File 2!<br>")
%>

執行 File1.asp 后,效果如下:

20150815004


Response.Redirect 和 Server.Transfer 方法比較

首先兩者都是將頁面的控制權轉移到另外的頁面進行處理。但是還是有不同的地方。

1、Redirect 方法是在HTTP頭中輸出代碼,讓瀏覽器重新請求要轉向的目標頁面,而 Server.Transfer 方法則是在服務器上直接將當前的控制權轉給目標頁面,在客戶端並不會意識到當前的頁面已經發生了變化。

2、Redirect 方法可以重定向到任何的 URL,而 Transfer 方法是在服務器上轉移控制權,因此只可以 Transfer 到本地服務器存在的頁面。

3、在使用 Transfer 方法時,會將當前頁面的事務以及 Request 各個集合相應傳遞到目標頁面,而 Redirect 方法僅僅是通知瀏覽器開啟一個新的請求。


URLEncode 和 HTMLEncode 方法

兩者都是對某個字符串進行轉義的操作。

下面的代碼(ServerEncode.asp)展示了兩個轉義方法的區別和效果:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>HTMLEncode 和 URLEncode 的應用</title>
</head>
<body>
<p>
<%
Response.write(Server.HTMLEncode("The image tag: <img>"))
%>
</p>
<p>
<%
Response.Write(Server.URLEncode("http://www.baidu.com"))
%>
</p>
</body>
</html>
在 Firefox 中運行效果如下:
20150815005

在 Firefox 中“查看頁面源代碼”中我們發現 “<img>” 之所以能正常顯示,而不被識別成 HTML 標簽,是將 “<”符號轉義為”&lt;“,將”>”符號轉義為”&gt;“。

20150815006

而 URLEncode 則是把空格轉化為+號,非字母數字符號轉義為十六進制表示。


MapPath 方法

在上面的 CreateObject 方法講解中,有一條語句用到了 MapPath 方法,代碼如下:

'數據庫文件名
sDBPath = "ServerInfo.accdb"
'數據連接字符串
sConnString = "Provider=Microsoft.ACE.OLEDB.15.0;Data Source=" & Server.MapPath(sDBPath)

此方法用戶獲得服務器上指定文件在服務器上的物理路徑。例如上面提到的 ServerInfo.accdb 的路徑是啥?

我們通過實例(ServerMapPath.asp)展示,主要代碼如下:

<%=Server.MapPath("ServerInfo.accdb")%>

在 Firefox 中運行后,返回了服務器上的完整路徑,如下:

20150815007


示例代碼下載

Server.rar


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM