一、瞭解Server對象
Server對象提供對伺服器上的方法和屬性的訪問以及進行HTML編碼的功能。這些功能分別由Server對象相應的方法和屬性完成。
二、Server對象的常用屬性
(1).MachineName
(2).ScriptTimeout:屬性用於設定指令碼程式執行的時間,適當地設定指令碼程式的ScriptTimeout可以提高整個Web應用程式的效率。文法如下:
Server.ScriptTimeout=time;(以s(秒)為單位)
ScriptTimeout屬性的最短時間預設為90 s。對於一些邏輯簡單、主動式內容較少的指令碼程式該值已經足夠。但在執行一些主動式內容較多的指令碼程式時,就顯得小了些。比如訪問資料庫的指令碼程式,必須設定較大的ScriptTimeout屬性值,否則指令碼程式就不能正常執行完畢。
複製代碼 代碼如下:Response.Write("伺服器機器名:" + Server.MachineName);//伺服器機器名:IBM
Response.Write("逾時時間為:" + Server.ScriptTimeout);//逾時時間為:30000000
三、Server對象的主要方法
四、Server對象的常見應用:
(1).執行其他ASP.NET網頁
使用Server對象的Execute方法可以在當前頁面中執行同一Web伺服器上的另一頁面,當該頁面執行完畢後,控制流程程將重新返回到原頁面中發出Server.Execute方法調用的位置。被調用的頁面應是一個.aspx網頁,因此,通過Server.Execute方法調用可以將一個.aspx頁面的輸出結果插入到另一個.aspx頁面中。Server.Execute方法文法如下:
Server.Execute (path)
在WebForm1頁面中:
複製代碼 代碼如下:protected void Page_Load(object sender, System.EventArgs e)
{
Response.Write("<P>調用 Execute 方法之前</P>");
Server.Execute("Page2.aspx");//使用Server.Execute(Path)執行其他ASP.NET頁面。這裡將Page2.aspx的輸出結果插入到當前頁面
//Server.Execute("http://www.163.com");//程式不能執行,必須是相對路徑
Response.Write("<P>調用 Execute 方法之後</P>");
}
在page.aspx頁面中複製代碼 代碼如下:protected void Page_Load(object sender, System.EventArgs e)
{
Response.Write("這是page2.aspx網頁");
}
則運行結果為:
(2).將流程式控制制轉移到其他ASP.NET網頁
使用Server對象的Transfer方法可以終止當前頁的執行,並將執行流程轉入同一Web伺服器的另一個頁面。被調用的頁面應是一個.aspx頁面,在頁面跳轉過程中,Request等對象儲存的資訊不變,這意味著從頁面A跳轉到頁面B後可以繼續使用頁面A中提交的資料。此外,由於Server.Transfer方法調用是在伺服器端進行的,用戶端瀏覽器並不知道伺服器端已經執行了一次頁面跳轉,所以實現頁面跳轉後瀏覽器地址欄仍將儲存頁面A的URL資訊,這樣還可以避免不必要的網路通訊,從而獲得更好的效能和瀏覽效果。Server.Transfer方法如下:
Server.Transfer(path)
提示:參數path指定在伺服器上要執行的新頁的URL路徑,在此URL後面也可以附加一些查詢字串變數的成對的名稱和數值
在WebForm1頁面中:
複製代碼 代碼如下:protected void Page_Load(object sender, System.EventArgs e)
{
Response.Write("<P>調用 Transfer 方法之前</P>");
//Response.Redirect("Page2.aspx");
Server.Transfer("Page2.aspx");
//使用Server.Transfer(path)終止當前頁的執行,所以執行到這一行就終止了,也就是說後面的不再執行;
//然後將執行流程轉入同一Web伺服器的另一個頁面。也就是page2.aspx頁面中了。在頁面跳轉過程中,Request等對象儲存的資訊不變
//這意味著從頁面A跳轉到頁面B後可以繼續使用頁面A中提交的資料:那麼在page2.apsx頁面中就能輸出Server.Transfer(path)之前的資料了。
//Server.Transfer("www.163.com");//這樣不行,只能是虛擬路徑
Response.Write("<P>調用 Transfer 方法之後</P>");
}
在Page2頁面: 複製代碼 代碼如下:protected void Page_Load(object sender, System.EventArgs e)
{
Response.Write("<P>這是 Page2.aspx 的執行結果</P>");
}
則運行結果:
如果我們換成了Response.Redirect("Page2.aspx");則只能實現頁面跳轉功能了。
引述:ASP.NET頁面傳值的三種方式
複製代碼 代碼如下:(1).使用QueryString
(2).使用Session變數
(3).使用Server.Transfer
(3).將虛擬路徑轉換為物理檔案路徑
在Web表單頁中經常需要訪問檔案或檔案夾,此時往往要求將虛擬路徑轉換為物理檔案路徑。MapPath方法將指定的相對或虛擬路徑映射到伺服器上相應的物理目錄上。Web伺服器中的多個Web應用程式一般都按照各自不同的功能存放於不同的目錄中。
使用虛擬目錄後,用戶端仍然可以利用虛擬路徑存取網頁,這就是互連網使用者在瀏覽器中常見的網頁的URL,但此時使用者無法知道該網頁的實際路徑(實際存放位置)。但如果確實需要知道某網頁檔案的實際路徑,則可利用MapPath方法。MapPath方法的文法如下:
Server.MapPath(Path)
注意:其中參數Path表示指定要映射物理目錄的相對或虛擬路徑。執行MapPath方法後,將返回與path相對應的物理檔案路徑。
解惑:相對路徑、絕對路徑、實體路徑、虛擬路徑
複製代碼 代碼如下:(1).相對路徑:相對目前的目錄的路徑、或相對某個目錄的路徑,這裡主要體現“相對”的概念
(2).絕對路徑:從網站的根路徑為最高層開始的路徑,如:C:\Website\web1\index.html
(3).實體路徑:實際磁碟中的路徑,可以是相對路徑、也可以是絕對路徑
(4).虛擬路徑:是伺服器映射出來的路徑,如/myweb
(這裡引用了CSDN博友:flytosea8的解釋:連結地址:http://bbs.csdn.net/topics/70115404)
虛擬路徑、實體路徑
用IIS舉個例子:
WEB服務類別目錄是d:\test
那麼用HTTP訪問網站根目錄的時候,其實訪問的是d:\test,那麼其中虛擬路徑就是\(根),實體路徑就是d:\test
一般虛擬路徑、實體路徑的提法在WEB、FTP服務中比較多見。
相對路徑和絕對路徑就比較廣泛了,哪兒都看得到
相對路徑:比如D:\TEST1\TEST2\TEST3
那麼TEST2是TEST1的下級路徑,TEST2又是TEST3的上級路徑,所以上級路徑或者下級路徑都是相對而言的。一般上級路徑可以用..來表示,當前路徑可以用.來表示。
絕對路徑:比如c:\根路徑都是絕對了,任何路徑相對於根路徑都有一個絕對的最近的路徑,也是絕對路徑。
如果你想想別人指路的話,就可以悟出什麼是相對的,什麼是絕對的
相對的指路方法:從“這兒”向前走,右拐就到了
絕對的指路方法:汽車站向東100米(如果汽車站是絕對的位置),絕對的指路方法不依賴於指路的人在什麼地方
複製代碼 代碼如下:protected void Page_Load(object sender, System.EventArgs e)
{
Response.Write("Web網站的根目錄為:"+Server.MapPath("/")+"<br>");
Response.Write("當前虛擬目錄的實際路徑為:"+Server.MapPath("./")+"<br>");//E:\asp.net\Server對象\code\
Response.Write("當前網頁的實際路徑為:"+Server.MapPath(Request.FilePath)+"<br>");//E:\asp.net\Server對象\code\WebForm1.aspx
Response.Write("當前網頁的實際路徑為:"+Server.MapPath("webform2.aspx")+"<br>");//E:\asp.net\Server對象\code\WebForm2.aspx
}
(4).字串的編碼與解碼
在某些情況下,可能需要在網頁中顯示“段落標記<p>”之類的內容,而不希望瀏覽器將其中的<p>解釋為HTML語言中的段落標記;在上述場合,應當調用Server對象的HtmlEncode方法對要在瀏覽器中顯示的字串進行編碼
有時候,在傳遞參數時,是將資料附在網址後面傳遞,但是如果遇到一些如“#”等特殊字元的時候,就會讀不到這些字元後面的參數。所以需要在傳遞特殊字元的時候,需先將要傳遞的內容先以UrlEncode編碼,這樣才可以保證所傳遞的值可以被順利讀到。
另外有些伺服器對中文不能很好的支援,這時候也需要利用UrlEncode對其進行編碼,以被伺服器所識別。
複製代碼 代碼如下:HtmlEncode||HtmlDecode:
protected void Page_Load(object sender, System.EventArgs e)
{
Response.Write(Server.HtmlEncode("粗體標記為:<B>粗體文字</B>"));//HtmlEncode對字串進行HTML編碼並返回編碼後的字串,所以這個原樣輸出
Response.Write("<br>");
Response.Write(Server.HtmlDecode("粗體標記為:<B>粗體文字</B>"));//HtmlDecode對字串進行HTML解碼並返回解碼後的字串,所以這個後面加粗
}
複製代碼 代碼如下:UrlEncode||UrlDecode:
protected void Page_Load(object sender, System.EventArgs e)
{
Response.Write("<A href='1.aspx?data=" + Server.UrlDecode("name@#163.com") + "'>沒有編碼的參數內容</A><br>");//在1.aspx頁面輸出:name@
Response.Write("<A href='1.aspx?data=name@#163.com'>沒有編碼的參數內容</A><br>");//在1.aspx頁面輸出:name@
Response.Write("<A href='1.aspx?data=" + Server.UrlEncode("name@#163.com") + "'>編碼的參數內容</A><br>");//在1.aspx頁面輸出:name@#163.com
Response.Write(Server.UrlDecode("name@#163.com"));//對字串進行URL解碼,這裡輸出:name@#163.com
Response.Write("<br>");
Response.Write(Server.UrlEncode("name@#163.com"));//對字串進行URL編碼,這裡輸出:name%40%23163.com
Response.Write("<br>");
Response.Write(Server.UrlDecode("中文"));//輸出:中文
Response.Write("<br>");
Response.Write( Server.UrlEncode("中文"));//輸出:%e4%b8%ad%e6%96%87
Response.Write("<br>");
Response.Write(Server.UrlEncode("english"));//輸出:english
Response.Write("<br>");
Response.Write(Server.UrlDecode("english"));//輸出:english
}