一、了解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
}