ASP.NET網頁設計範例教本

Download Report

Transcript ASP.NET網頁設計範例教本

Ch08 ASP.NET的HTTP物件
網頁程式設計
大綱
Response物件
Request物件
Server物件
2
Response物件
常用的Response物件的方法
Response.Write()
Response.Redirect()
緩衝區處理




Response.BufferOutput
Response.End()
Response.Flush()
Response.Clear()
快取處理
設定輸出內容的資料類型
3
輸出HTML標籤與文字內容-說明
Response.Write()方法可以在ASP.NET程式
將任何資料型態輸出到瀏覽程式顯示,換
句話說,輸出的內容可以是字串、HTML標
籤或變數,而且不論變數資料為何,都是
使用字串形式輸出到瀏覽程式,如下所示:
Response.Write(title & "<br/>")
Response.Write("歡迎使用ASP.NET設計動態網頁<br/>")
4
輸出HTML標籤與文字內容-簡化寫法
Response.Write()方法擁有另一種形式,可
以直接插入HTML標籤,以便更改標籤的屬
性或內容,如下所示:
<%=title%>
「<%=」和「%>」符號間就是輸出變數title內容,
屬於Response.Write()方法的簡化寫法。
5
輸出文字檔案
Response.WriteFile方法可將文字檔案中的
所有內容,輸出到網頁上
Response.WriteFile(“檔案名稱”)
檔案名稱需使用 相對位址 或 絶對位址 的
寫法
6
轉向到其它的網頁或ASP.NET程式
Response.Redirect()方法可以在執行ASP.NET
程式時,轉向到其它的網址或網站的其它網頁
或ASP.NET程式,因為轉向到其它網頁,所以
執行此方法後的指令或HTML標籤並不會顯示,
如下所示:
Response.Redirect("Ch9-1-1.aspx")
參數允許使用完整的URL網址或同一個網站檔
案的相對路徑,也可以是其它HTML文件,如
下:
Response.Redirect("../Ch08/Ch8-1-1.aspx")
Response.Redirect("http://www.hinet.net")
7
中斷ASP.NET程式的執行
ASP.NET程式主要是使用Response.Write()方法
輸出網頁內容,如果程式需要中斷輸出,只需在
程式的中斷點插入Response.End()方法,其程式
碼如下:
………
Response.End()
..……..
輸出指令前的HTML標籤或執行的ASP.NET程式,
Response.End()方法後的程式碼或HTML標籤就不會執行
或顯示,因為ASP.NET會使用緩衝區,此方法會將緩衝區
的內容送到瀏覽程式顯示。
8
範例1:轉向到其他網頁,中斷程式
1. <html>
2.
<head>
3.
<title>Response物件的練習</title>
4.
<Script language="VB" runat="Server">
5.
Sub button_click(o As Object, e As Eventargs)
6.
If s1.Items(0).Selected Then
7.
Response.Redirect("Ex09_01_01.aspx")
8.
Else
9.
If s1.Items(1).Selected Then
10.
Response.WriteFile("Ex09_01_01.txt")
11.
Else
12.
Response.End
13.
End If
14.
End If
15.
End Sub
16.
</Script>
17. <head>
18. <body>
19.
<Form runat="server">
20.
<asp:DropDownList id="s1" runat="server">
21.
<asp:ListItem text="轉向另一頁" value="轉向" />
22.
<asp:ListItem text="輸出文字檔內容" value="輸出" />
23.
<asp:ListItem text="結束" value="結束" />
24.
</asp:DropDownList>
25.
<asp:button id="b1" text="送出" OnClick="button_click" runat="server" />
26.
</Form>
27. </body>
28. </html>
9
檢查網頁瀏覽者是否連線
當網頁瀏覽者從伺服端執行一個耗時的程
式,有可能因等得不煩而切斷連線,此時
伺服端並不會因為網頁瀏覽者的斷線,而
自動停止當初網頁瀏覽者執行的程式
可以利用Response.IsClientConnected方法
取得網頁瀏覽者是否已斷線
If Response.IsClientConnected = False Then
Response.End()
End If
10
ASP.NET緩衝區的用途-說明
Web伺服器在執行ASP.NET程式碼時,可以選擇
將處理的結果馬上輸出到瀏覽程式,或是先輸出
到暫放的緩衝區,等到ASP.NET程式執行完後,
才送到瀏覽程式顯示,如下圖所示:
Response.BufferOutput = False
ÂsÄýµ{¦ ¡
¿é¥X
°õ ¦æASP.NETµ{ ¦¡
Web¦ ø ªA¾¹
ASP.NETµ{¦ ¡
¿é¥X
Response.BufferOutput = True
½w½Ä°Ï
Response.End()
Response.Flush()
11
ASP.NET緩衝區的用途-輸出到緩衝區
當遇到下列的3種情況才會將輸出的內容送
到瀏覽程式,如下所示:



執行完ASP.NET程式後。
執行到Response.End()方法中斷ASP.NET程式
的執行,此時已執行的部分就會送出。
執行到Response.Flush()方法馬上將緩衝區的
內容送出。
12
設定是否使用緩衝區-說明
Response.BufferOutput屬性可以指定是否
使用緩衝區,預設值True,表示使用,如
果不使用緩衝區,請設為False,如下所示:
Response.BufferOutput = False
程式碼表示ASP.NET程式不使用緩衝區,
一旦程式沒有使用緩衝區,在執行轉向時,
就會出現標題寫入錯誤。
13
設定是否使用緩衝區-錯誤訊息
14
馬上輸出緩衝區的內容
ASP.NET程式預設使用緩衝區,換句話說,其輸
出的內容是先送到緩衝區,等到程式執行完成後,
才將緩衝區的內容一起送到瀏覽程式顯示,如果
需要將目前的緩衝區內容,在尚未執行完
ASP.NET程式前強迫輸出到瀏覽程式,可以使用
Response.Flush()方法,如下所示:
Response.Flush()
當ASP.NET程式執行到上述方法,馬上就會將目
前緩衝區的內容都送到瀏覽程式顯示。
15
清除緩衝區的內容
如果伺服器緩衝區的內容已經不需要了,
或是根本不需要將緩衝區內容輸出到瀏覽
程式顯示,我們可以在ASP.NET程式使用
Response.Clear()方法清除緩衝區內容,不
過這並不含HTTP通訊協定的標頭資料,如
下所示:
Response.Clear()
在執行上述Response.Clear()方法後,和上
一次執行Response.Flush()方法間輸出的網
頁內容就會被清除掉。
16
ASP.NET輸出快取的處理
「快取」(Caching)是一種技術可以將網
頁輸出或是應用程式本身的資料暫時儲存
在客戶或伺服端,以便當重複請求相同資
訊的網頁時,可以加速網頁的顯示,特別
適用在多次網頁請求,而且都是請求相同
網頁內容的情況。
17
輸出快取的用途-說明
「輸出快取」(Output Cache)是當第一
次編譯執行ASP.NET程式時,先將執行結
果的網頁內容儲存在輸出快取,然後再輸
出到瀏覽程式,當有其它請求時,如果程
式沒有更改或已經是快取中已經存在網頁,
就直接從快取將網頁資料送到客戶端,如
此可以增加網頁瀏覽的效率。
18
輸出快取的用途-儲存位置
輸出快取可以將資料儲存在伺服端、客戶端或
Proxy伺服器,以客戶端快取為例,是將網頁內容
保留在使用者電腦「C:\Documents and
Settings\Joe Chen\Local Settings\Temporary
Internet Files」的快取資料夾。
19
設定保留在快取的時間
Response.Expires屬性可以設定和取得網頁保留
在瀏覽程式快取的分鐘數,如果使用者在保留期
限前請求此網頁,顯示的是儲存在快取的網頁,
如果超過期限,才會連線伺服器取得最新的網頁
內容,其程式碼如下所示:
Response.Expires = 3
程式碼設定保留的時間為3分鐘,如果設為0表示
不保留在快取。
20
設定在快取保留的期限
Response.ExpiresAbsolute屬性可以指定
和取得網頁保留期限的日期和時間,其程
式碼如下所示:
Response.ExpiresAbsolute = #12/31/2006#
屬性值是Date資料型態,請使用#符號括起,
上述的保留期限是2006年底。
21
ASP.NET的快取處理-說明
在ASP.NET程式可以使用Response.Cache屬性
取得網頁輸出快取的HttpCachePolicy物件,內含
數種方法可以控制ASP.NET網頁的輸出快取,如
下表所示:
方法
說明
SetExpires(DateTime)
指定快取的期限
SetCacheability(HttpCacheability)
指定快取控制的方式
22
ASP.NET的快取處理-範例
ASP.NET程式的快取設定需要位在Page物件的
Page_Load事件處理程序,如下所示:
Sub Page_Load(Sender As Object, e As Eventargs)
Dim dtDay As Date = Today
Response.Cache.SetExpires(DateAdd("D", 5, dtDay))
Response.Cache.SetCacheability(HttpCacheability.Public)
End Sub
Page_Load事件處理程序使用Response.Cache屬性取得物
件,然後使用SetExpires()方法設定期限,使用DateAdd()函
數新增5天,換句話說,期限是目前日期加上5天。
23
ASP.NET的快取處理-SetCacheability()方法參數
參數值
說明
HttpCacheability.NoCache 使用伺服端或 Proxy 伺服器的快取
HttpCacheability.Private
只使用客戶端快取,不包括 Proxy 伺服器,此為
預設值
HttpCacheability.Public
可以使用客戶端或 Proxy 伺服器的快取
HttpCacheability.Server
只使用伺服端快取
24
設定輸出文件內容的資料類型-說明
Response物件是使用HTTP通訊協定傳送資料到
瀏覽程式,雖然通訊協定與資料類型並沒有關係,
不過在傳送資料前,需要設定資料種類
Response.ContentType屬性,其值就是MIME資
料類型。
text/html為預設值,如果需要輸出成其它的文件
類型時,我們可以設定MIME資料類型,其程式碼
如下所示:
Response.ContentType = "text/xml"
程式碼指定傳送的內容為XML文件。
25
設定輸出文件內容的資料類型MIME資料類型
MIME 資料類型
說明
text/html
HTML 文件的網頁檔案
text/xml
XML 文件的檔案
text/plain
ASCII 一般的文字檔,瀏覽程式並不會直譯內容
image/jpeg
JPEG 格式的圖片檔
image/gif
GIF 格式的圖片檔
26
取得網頁的編碼方式
Response物件的Charset和
ContentEncoding屬性都可以取得或指定網
頁的編碼方式,如下所示:
Response.Write(Response.Charset & "<br>")
Response.Write(Response.ContentEncoding.Enco
dingName)
程式碼分別可以顯示編碼方式的字元集,
其差異在第2列程式的ContentEncoding屬
性可以取得Encoding物件,
EncodingName屬性是完整的編碼名稱。
27
Request物件
取得伺服器系統資訊
瀏覽程式的資訊
Request表單處理
28
伺服器系統資訊的內容-說明
Web伺服器的系統資訊是Request物件的集
合物件ServerVariables
這個集合物件可以取得伺服器的系統資訊。
29
伺服器系統資訊的內容-常用的
Server變數1
Server 變數
說明
ALL_HTTP
傳送到瀏覽程式 HTTP 通訊協定的檔頭內容
ALL_RAW
傳送到瀏覽程式的所有原始資料
APPL_MD_PATH
Web 應用程式的伺服器路徑
APPL_PHYSICAL_PATH Web 應用程式的實際路徑
AUTH_PASSWORD
使用者認證的密碼
AUTH_TYPE
伺服端的認證方法
AUTH_USER
使用者認證的使用者名稱
CONTENT_LENGTH
傳送給伺服器內容的長度
CONTENT_TYPE
傳送內容的資料型態為 GET、POST 或 PUT
GATEWAY_INTERFACE 伺服端的 CGI 版本
30
伺服器系統資訊的內容-常用的
Server變數2
LOCAL_ADDR
伺服器的 IP 位址
PATH_INFO
目前 ASP.NET 程式檔的路徑
PATH_TRANSLATED
目前 ASP.NET 程式檔的實際路徑
QUERY_STRING
URL 的參數資料
REMOTE_ADDR
使用者端的 IP 位址
REMOTE_HOST
使用者端的主機名稱
REQUEST_METHOD
HTTP 的請求方式是 GET 或 POST
SCRIPT_NAME
目前 ASP.NET 程式檔案的虛擬路徑
SERVER_NAME
伺服器的網域名稱或 IP 位址
SERVER_PORT
HTTP 的埠號
SERVER_PROTOCOL
HTTP 的版本
SERVER_SOFTWARE
伺服器的軟體和版本
31
Request.ServerVariables取得系統資訊
如果需要取得指定的系統資訊,也就是取得環境
變數的值,請直接使用Request物件的
ServerVariables集合物件,如下所示:
IPAddress = Request.ServerVariables("REMOTE_ADDR")
strPath = Request.ServerVariables("PATH_INFO")
如果需要顯示伺服器所有的環境變數,可以使用
For Each迴圈取得所有的環境變數,如下:
For Each ServerVar In Request.ServerVariables
strValue = Request.Servervariables(ServerVar)
Next
32
瀏覽程式的相關資訊-說明
在ASP.NET是使用Request物件的Browser屬性達
到相同的功能。
因為客戶端瀏覽程式連線Web伺服器時,「HTTP
使用者代理人標頭」(HTTP User Agent Header)
資訊會傳送給伺服器,這個標頭資訊的內容是瀏
覽程式的相關資訊,在ASP.NET程式可以使用
Request物件取得集合物件,如下所示:
Dim hbc As HttpBrowserCapabilities = Request.Browser
例如:承上例,要取得瀏覽程式的名稱:
hbc.Browser
33
瀏覽程式的相關資訊-屬性1
屬性
說明
Type
瀏覽程式的種類, IE 為 Internet Explorer , Netscape 為
Netscape Navigator
Browser
瀏覽程式的名稱
Version
瀏覽程式的版本
MajorVersion
版本小數點前的主版本編號
MinorVersion
版本小數點後的次版本編號
Platform
使用的作業系統平台
34
瀏覽程式的相關資訊-屬性2
Frames
瀏覽程式是否支援框架頁
Tables
瀏覽程式是否支援表格
Cookies
瀏覽程式是否支援 Cookies
VBscript
瀏覽程式是否支援 VBScript
Javascript
瀏覽程式是否支援 JavaScript
JavaApplets
瀏覽程式是否支援 Java Applets
ActiveXControls
瀏覽程式是否支援 ActiveX 控制項
35
Server物件
建立COM元件
取得伺服端的路徑
伺服端的轉址功能
執行其他ASP.NET程式
36
ASP.NET建立COM元件-說明
雖 然 ASP.NET 技 術 可 以 使 用 . NET
Framework龐大的類別物件,不過我們還
是可以自行使用COM元件來擴充ASP.NET
功能,不只如此,如果使用者熟悉VB.NET、
C++或Delphi等開發工具,使用者還可以自
行建立COM元件,輕鬆擴充ASP.NET程式
的功能。
37
ASP.NET建立COM元件-使用
在ASP.NET程式建立外部COM元件前,需要在伺服
器先安裝好元件,在安裝好後才能使用
Server.CreateObject()方法建立所需的物件(一個元
件可能內含數個物件),例如:舊版ASP 3.0的
FileSystemObject物件,如下所示:
fso = Server.CreateObject("Scripting.FileSystemObject")
38
取得伺服器路徑
Web伺服器的目錄架構屬於虛擬目錄,其路徑也是
虛擬路徑,如果想取得目前執行ASP.NET程式的虛
擬目錄,請使用ServerVariables集合物件的
PATH_INFO參數,如下所示:
Request.ServerVariables("PATH_INFO")
配合Server.MapPath()方法就可以轉換成實際路徑,
其程式碼如下所示:
strPath = Server.MapPath(Request.ServerVariables("PATH_INFO"))
如果需要取得指定ASP.NET程式或檔案的實際路徑,
如下所示:
strPath = Server.MapPath("/Ch10/Ch10-4-1.aspx")
39
伺服端網頁轉向-說明
Server.Transfer() 方 法 可 以 取 代
Response.Redirect() 方 法 , 因 為
Response.Redirect()需要與瀏覽程式進行
較多次的通訊,需要先傳送訊息給瀏覽程
式,告訴瀏覽程式需要載入新網址URL,
瀏覽程式在接受請求後,再送一次URL請
求 到 Web 伺 服 器 , 最 後 伺 服 器 才 處 理 新
URL來送回HTML文件。
40
伺服端網頁轉向-使用
Response.Redirect()方法浪費較多的頻寬
在瀏覽程式和伺服器間的通訊,
Server.Transfer()方法轉向操作完全在伺服
端完成,並不會浪費頻寬,其使用方式和
Response.Redirct()方法幾乎相同,如下所
示:
Server.Transfer("Ch10-4-2.aspx")
程式碼將會轉向到ASP.NET程式Ch10-42.aspx。
41
伺服端執行網頁
Server.Execute()方法和Transfer()方法很相似,
不過Execute()方法有些像VB.NET語言的主程式
呼叫副程序,當轉向的ASP.NET程式執行完成後,
還會回到呼叫轉向的ASP.NET程式,其程式碼如
下所示:
……
Server.Execute("Ch10-4-4s.aspx")
……
程式碼在執行轉向到ASP.NET程式Ch10-44s.aspx,在執行完後還會回到上述程式碼,執行
Server.Execute()方法的下一列程式碼。
42
Server Side Include
「SSI」(Server Side Include)指令可以
在伺服端插入一些資訊到HTML文件或
ASP.NET程式,用來設定訊息、環境變數、
執行程式檔、取得檔案資訊或插入純文字
檔的內容。
43
SSI的指令說明-指令
SSI 指令
說明
#config
設定傳給瀏覽程式的錯誤訊息、日期或檔案尺寸等格式
#echo
在 HTML 文件插入系統環境變數
#exec
執行程式檔或 DOS 指令輸出執行的結果
#flastmod
在 HTML 文件插入指定檔案的最近修改日期
#fsize
在 HTML 文件插入指定檔案的尺寸
#include
在 HTML 文件或 ASP.NET 程式插入檔案,檔案可以包含 HTML
標籤或 ASP.NET 程式碼
44
SSI的指令說明-使用
Include指令可以讓我們在ASP.NET程式插入
HTML標籤或其它ASP.NET程式碼檔案,Include
指令一共有2種Include virtual和Include file,需要
插在<% .. %>符號外,如下所示:
<!--#include virtual="/somefile.aspx"-->
程式碼使用檔案的虛擬路徑,插入的ASP.NET程
式是位在Web伺服器的主目錄,如果是include
file指令,如下所示:
<!--#include file="somefile.aspx"-->
45
使用SSI 插入HTML文件
Include指令可以在ASP.NET程式插入HTML文件,
其主要的目的是用來建立一致化的網頁編排,例
如:在ASP.NET程式的開頭和結束分別插入2個
檔案,如下所示:
<html>
<head></head>
<body>
<!-- #include file="Ch10-5-2h.htm" -->
……..
<!-- #include file="Ch10-5-2f.htm" -->
</body>
</html>
46
使用SSI插入ASP.NET函式庫
如果有很多個ASP.NET程式需要使用同一個函數
或程序,我們可以將程序和函數抽出成為函式庫
檔案,通常的副檔名為.inc,然後使用SSI的
Include指令插入其它的ASP.NET程式。
ASP.NET程式馬上就可以使用這些程序和函數,
如同使用ASP.NET函式庫,如下所示:
<!-- #include file="Ch10-5-3.inc" -->
include指令插入ASP.NET程式檔案,這個指令需
要在「<%」和「%>」外。
47