ASP.NET網頁製作徹底研究

Download Report

Transcript ASP.NET網頁製作徹底研究

第5章 ASP.NET的基本輸出入
與Cookie處理
•
•
•
•
•
•
•
•
5-1 HTTP通訊協定的特性
5-2 HTTP物件Server物件
5-3 基本輸出的Response物件
5-4 基本輸入的Request物件
5-5 Cookies的處理
5-6 伺服器與瀏覽程式資訊
5-7 Include指令的使用
5-8 ASP.NET程式的除錯模式
5-1 HTTP通訊協定的特性
• HTTP通訊協定是一種Client/Server架構,其特
性如下所示:
– HTTP通訊協定不會持續的保持連接:當瀏覽程式
提出請求時才會建立連接,在請求後就斷線等待回
應,每一次的請求和回應都需要先建立連線。
– HTTP通訊協定不會保留狀態:因為HTTP通訊協定
並不會保持連線,所以在連線時,伺服端和客戶端
互相知道對方,一旦請求結束,就互不相干。
– HTTP通訊協定與資料類型無關:任何種類的資料
都可以透過HTTP通訊協定傳送到客戶端,資料種
類的定義是MIME資料類型。
5-2 HTTP物件與Server物件
• 5-2-1 HTTP物件的說明
• 5-2-2 Server物件的屬性
• 5-2-3 Server物件的方法
5-2-1 HTTP物件的說明-1
• Response物件:即HttpResponse類別,可以輸
出網頁內容的標籤或處理Cookies,然後送到瀏
覽程式顯示網頁內容,或是控制網頁的轉向,
從一頁網頁轉向至指定的下一頁。
• Request物件:即HttpRequest類別,可以讀取表
單欄位送出的資料或URL參數、Cookies和取得
伺服器的變數。
• Server物件:即HttpServerUtility類別,可以建
立COM物件、執行其它ASP.NET程式和HTML
和處理URL編碼。
5-2-1 HTTP物件的說明-2
• Application物件:即HttpApplication類別,瀏覽
網站的所有使用者都可以透過此物件取得一些
共同的資料,例如:網站的訪客計數。
• Session物件:即HttpSessionState類別,對於瀏
覽網站的每位使用者,可以使用此物件保留使
用者的專屬資料,例如:使用者登入網站的使
用者名稱(Username)和密碼(Password)。
5-2-2 Server物件的屬性
• Server物件的屬性只有兩個,可以用來取得
Web伺服器名稱和設定或取得逾時時間,其相
關屬性如下表所示:
屬性
說明
MachineName 取得 Web 伺服器的名稱字串
ScriptTimeout
設定和取得執行 ASP.NET 的逾時時間,以秒為單位
5-2-3 Server物件的方法Server.MapPath方法
• Server.MapPath方法是將伺服器的虛擬路徑轉
換為實際硬碟的檔案路徑。例如:取得
ASP.NET程式和網站虛擬目錄的實際路徑,其
程式碼如下所示:
Dim path As String
path = Server.MapPath("/Ch05/Ch5-2-2.aspx")
path1 = Server.MapPath("/")
• 網站的虛擬目錄,其程式碼如下所示:
path2 = Server.MapPath("/Ch05")
• 上述程式碼取得目錄【/Ch05】的實際路徑。
5-2-3 Server物件的方法Server.CreateObject方法
• Server.CreateObject方法可以建立伺服器的COM
元件,例如:舊版ASP的FileSystemObject物件,
如下所示:
<%
Dim fso, file As Object
Dim str As String
' 建立FileSystemObject物件
fso = Server.CreateObject("Scripting.FileSystemObject")
file = fso.OpenTextFile(Server.MapPath("Ch5-2-3.txt"), 1, False)
str = file.ReadAll()
Response.Write("檔案內容: " & str & "<br>")
%>
5-2-3 Server物件的方法Server.Transfer方法
• Server.Transfer轉向方法可以取代下一節
的Response.Redirect方法,Server.Transfer
方法的轉向操作完全在Web伺服器完成,
並不會浪費頻寬,其使用的方式和
Response.Redirct幾乎相同,如下所示:
Server.Transfer("Ch5-2-2.aspx")
• 上述程式碼將會轉向到ASP.NET程式
Ch5-2-2.aspx。
5-2-3 Server物件的方法Server.Execute方法
• Server.Execute方法像主程式呼叫副程式,當轉
向執行完成後,還會回到呼叫的程式,例如:
ASP.NET程式【Ch5-2-3Execute.aspx】,其程
式碼如下所示:
Response.Write("這是ASP.NET的")
Server.Execute("Ch5-2-3Sub.aspx")
Response.Write("所提供的功能<p>")
• 轉向的ASP.NET程式【Ch5-2-3Sub.aspx】,其
程式碼如下所示:
Response.Write("Server物件")
• 當瀏覽程式載入【Ch5-2-3Execute.aspx】後,
其執行的結果是顯示一段完整的字串內容。
5-2-3 Server物件的方法Server.HtmlEncode和HtmlDecode
方法
• Server.HtmlEncode方法可以將指定的字串使用
HTML編碼方式加碼後輸出,然後使用
Server.HtmlDecode方法進行解碼,如下所示:
Dim str As String
' 加碼
str = Server.HtmlEncode("<p>ASP.NET網頁製作徹底研究</p>")
Response.Write(str & "<br>")
' 解碼
str = Server.HtmlDecode(str)
Response.Write(str & "<br>")
• 上述程式碼將HTML標籤<p>加碼後顯示,然
後使用Decode方法解碼。
5-2-3 Server物件的方法Server.UrlEncode和UrlDecode方法
• Server.UrlEncode方法可以將指定的字串使用
URL的編碼方式加碼輸出,如果URL參數需要
傳遞特殊符號,例如:「#」、「?」和「&」
字元,就需要使用此方法進行加碼處理,如下:
<a href="Ch5-2-3Url.aspx?name=陳會安? & #">沒有編碼</a>
<a href="Ch5-2-3Url.aspx?name=<%=Server.UrlEncode("陳會
安? & #")%>">有編碼</a>
• 上述兩個HTML標籤<a>,第一個沒有編碼,
第二個有編碼。
5-3 基本輸出的Response物件
•
•
•
•
5-3-1 輸出網頁到瀏覽程式
5-3-2 輸出圖片到瀏覽程式
5-3-3 緩衝區的處理
5-3-4 IIS輸出與瀏覽程式快取的
控制
5-3 基本輸出的Response物件
• ASP.NET程式輸出的物件是Response物件,
這個物件就是HttpResponse類別,屬於
ASP.NET程式十分重要的物件,Response
物件的屬性,主要是控制輸出的資料類
型和緩衝區,物件的資料集合是Cookies。
5-3-1 輸出網頁到瀏覽程式Response.Write方法
• Response.Write方法可以將任何資料型態的資料
輸出到瀏覽程式顯示,換句話說,就是輸出成
HTML標籤,ASP.NET範例程式碼如下所示:
<%
Dim str As String = "星期日"
Response.Write("<p>今天是" & str &"</p>")
%>
• 上述程式碼使用Response.Write方法輸出字串,
這個字串是一個完整的HTML標籤。
5-3-1 輸出網頁到瀏覽程式Response.Redirect方法
• Response.Redirect可以將網頁轉向到其它的網
址或網頁,因為這個指令會轉向到其它的網頁,
所以網頁內容並沒有顯示的機會,其它多餘的
HTML標籤都可以刪除掉,如下所示:
<%
Response.Redirect("Ch5-3-1Write.aspx")
%>
5-3-2 輸出圖片到瀏覽程式Response.ContentType屬性
• HTTP通訊協定基本上與資料類型無關,
不過在傳送資料前,我們可以設定或取
得傳送的資料類型,即ContentType屬性,
其定義是第5-1節的MIME資料類型,其
程式碼如下所示:
Response.ContentType = "image/gif"
• 上述程式碼指定傳送的內容是GIF圖片檔。
5-3-2 輸出圖片到瀏覽程式Response.BinaryWrite方法
• 當HTTP通訊協定傳送的內容設定成前述
圖片的二進位資料時,我們並不是使用
Write方法,而是使用BinaryWrite方法輸
出二進位資料,其程式碼如下所示:
• <%
Response.BinaryWrite(buffer)
%>
5-3-2 輸出圖片到瀏覽程式Response.Charset屬性
• Response.Charset可以取得或指定網頁的
編碼方式,例如:中文Big5,如下所示:
Response.Charset = "big5"
5-3-2 輸出圖片到瀏覽程式Response.WriteFile方法
• Response.WriteFile方法可以將指定的檔
案內容作為HTTP通訊協定的輸出內容,
如下所示:
Response.WriteFile("Ch5-3-2.txt")
• 上述指定是將Ch5-3-2.txt的檔案內容輸出
到瀏覽程式。
5-3-3 緩衝區的處理Response.BufferOutput屬性
• Response.BufferOutput屬性可以指定是否
使用緩衝區,預設是True,表示使用,
如果不使用緩衝區,請設為False,如下
所示:
Response.BufferOutput = False
• 上述程式碼表示ASP.NET程式不使用緩
衝區,一旦程式使用緩衝區就不會出現
前述標題寫入的錯誤,此屬性需要配合
之後的方法使用。
5-3-3 緩衝區的處理Response.End方法
• Response.End方法可以在執行ASP.NET程式時,
中斷程式的執行,並且觸發
Application_EndRequest事件,只需在ASP.NET
程式需要中斷的地方加入此程式碼,如下所示:
………
Response.End()
..……..
• 上述ASP.NET程式中位在指令Response.End之
後的程式碼就不會執行,而且會將緩衝區的內
容送到瀏覽程式顯示。
5-3-3 緩衝區的處理Response.Flush方法
• Response.Flush方法可以將目前緩衝區的
內容強迫送到瀏覽程式,也就是清空緩
衝區的內容,其程式碼如下所示:
Response.Flush()
• 當ASP.NET執行到上述程式碼,不論是
否完全輸出到緩衝區,都會強迫將目前
緩衝區的內容送到瀏覽程式,而且可以
重複使用此方法送出緩衝區的內容。
5-3-3 緩衝區的處理Response.Clear方法
• Response.Clear方法可以清空緩衝區的內容,但
是不含HTTP通訊協定的檔頭,使用此方法可
以避免看到Clear方法之前的網頁內容,如下所
示:
Response.Clear()
• 上述程式碼可以清除緩衝區的內容,如同
Response.ClearContent方法,如果需要清除
HTTP檔頭,請使用下列方法,如下所示:
Response.ClearHeaders()
5-3-4 IIS輸出與瀏覽程式快取
的控制-說明
• 「快取」(Caching)是一種技術可以將網頁輸出或應
用程式資料暫時儲存在客戶或伺服端,以便當重複請
求相同資訊的網頁時,可以加速網頁的顯示,特別適
用在多次網頁請求,而且都是請求相同網頁內容的情
況。
– 客戶端快取是將網頁內容保留在使用者電腦的快取資料夾,
如果快取中已經擁有網頁,就直接顯示網頁內容,Response物
件的屬性可以設定網頁檔案儲存在快取資料夾的保留時間。
– IIS的「輸出快取」(Output Cache)是當第一次編譯ASP.NET
程式時,先將執行的結果儲存在輸出快取,然後輸出到瀏覽
程式,當有其它請求時,如果程式沒有更改或快取中已經存
在網頁,就直接從快取將網頁資料送到客戶端,如此可以增
加網頁瀏覽的效率。
5-3-4 IIS輸出與瀏覽程式快取
的控制- Response.Expires屬性
• Response.Expires屬性可以設定和取得網
頁保留在瀏覽程式快取的分鐘數,如果
使用者在保留期限前請求此網頁,顯示
的是儲存在快取的網頁,如果超過期限,
才會連線伺服器取得最新的網頁內容,
其程式碼如下所示:
Response.Expires = 3
• 上述程式碼設定保留的時間為3分鐘,如
果設為0表示不保留在快取。
5-3-4 IIS輸出與瀏覽程式快取的控
制-Response.ExpiresAbsolute屬性
• Response.ExpiresAbsolute屬性可以指定和
取得網頁保留期限的日期和時間,其程
式碼如下所示:
Response.ExpiresAbsolute = #December 31, 2002 24:00:00#
• 上述屬性值是DateTime資料型態,請使
用#符號括起,上述的保留期限是2002年
底。
5-3-4 IIS輸出與瀏覽程式快取
的控制-Response.Cache屬性
• 如果需要將ASP.NET程式新增到輸出快取,可
以直接使用OutputCache指引指令定義快取期限
的規則,如下所示:
<%@ OutputCache Duration=60 VaryByParam="none"
Location="Any" %>
• 上述指引指令的屬性說明,如下所示:
– Duration屬性:指定網頁儲存在輸出快取的時間,
以秒為單位。
– VaryByParam屬性:指定那些網頁擁有不同的URL
參數,需要新增至快取。
5-4 基本輸入的Request物件
• 5-4-1 Form和QueryString的物件集合
• 5-4-2 使用表單欄位傳送資料
• 5-4-3 使用URL傳遞資料
5-4 基本輸入的Request物件
• Request物件的主要目的是接收資料,物件屬性
取得的都屬於物件集合,如下表所示:
屬性
說明
Form
取得表單欄位的內容
QueryString
取得 URL 參數的內容
Cookies
取得客戶端的 Cookies 資料
Browser
取得瀏覽程式的資訊
ServerVariables
取得伺服器系統變數的值
ClientCertificate
取得客戶端使用者的認證資料
5-4-1 Form和QueryString的物件
集合-說明
• ASP.NET屬於伺服端技術,換句話說,只能在
Web伺服器的伺服端電腦執行此程式,並沒有
辦法提供使用者介面輸入資料,這個部分需要
靠客戶端的網頁傳送資料,以便輸入程式所需
的資料,輸入的方式如下所示:
– HTML表單網頁:使用表單欄位以HTTP通
訊協定的檔頭傳遞。
– URL參數:從瀏覽程式輸入的網址參數傳遞,
其總長度只有1024個字元。
5-4-1 Form和QueryString的物件
集合- Form物件集合
• 如果網頁表單使用POST方法傳遞資料,
其作法是將傳遞的資料在編碼後,透過
HTTP通訊協定的檔頭傳送到Web伺服器,
在伺服端使用Form物件集合取出資料,
其語法如下所示:
Request(("FieldName")
Request.Form("FieldName")
5-4-1 Form和QueryString的物件
集合- QueryString資料集合
• 如果網頁表單使用GET方法傳遞資料,其作法
是將傳遞的資料編碼後,透過URL網址後的字
串傳送到Web伺服器,參數是位在問號之後,
如果參數不只一個,請使用「&」符號分隔,
如下所示:
http://localhost/Ch5-4-3.aspx?fname1=value1&fname2=value2
• 當瀏覽程式輸入上述網址,在按下Enter鍵後,
伺服端是使用QueryString物件集合取出資料,
如下所示:
Request(("FieldName")
Request.QueryString(" FieldName")
5-4-1 Form和QueryString的物件
集合-設定中文的編碼方式
• ASP.NET預設的編碼方式是Unicode的UTF-8,傳遞中
文資料時,請在虛擬目錄建立名為【Web.config】的
ASP.NET資源設定檔,其檔案內容是一份XML文件,
如下所示:
<configuration> <system.web>
<globalization
Globalization標籤指定預設的編碼方
fileEncoding="big5"
requestEncoding="big5" 式和語系,fileEncoding屬性設定
responseEncoding="big5" .aspx檔案的編碼方式,
requestEncoding和responseEncoding
culture="zh-TW"
屬性設定Request物件取得資料和
/>
Response物件送出資料的編碼方式
</system.web>
,culture屬性為各國語系的設定,
</configuration>
以此例big5是中文編碼。
5-4-2 使用表單欄位傳送資料
• 網頁表單欄位是ASP.NET的資料輸入介
面,在建立好網頁表單後,可以撰寫
ASP.NET程式碼取得表單欄位的資料。
5-4-3 使用URL傳遞資料
• 除了使用表單方式傳遞資料外,還可以
使 用 超 連 結 URL 參 數 方 式 傳 送 資 料 給
ASP.NET程式。
5-5 Cookies的處理
• 5-5-1 Cookies的基礎
• 5-5-2 Cookies的操作函數
5-5-1 Cookies的基礎
• Cookies就是一種儲存客戶端資訊的方法。
– Cookies儲存的資料夾
• Cookies是儲存在客戶端,也就是儲存在瀏覽程式所在的電
腦。
– Cookies的使用
• 個人資訊。
• 個人化的內容。
• 網站購物車。
– Cookies的問題
• 雖然Cookies可以建立複雜的Web應用程式,但是在使用時
仍然有一些注意事項。
5-5-2 Cookies的操作函數
• 在ASP.NET程式處理Cookies是使用
Request和Response物件的Cookies物件集
合,也就是HttpCookieCollection物件,
主要的操作分為三種,如下所示:
– 新增Cookie:在使用者電腦新增Cookie,儲
存所需的資料。
– 刪除Cookie:刪除使用者電腦的Cookie,在
作法上只是將有效期限設定成過期。
– 取得Cookie內容:當瀏覽程式進入網站時,
取得Cookie資料。
5-5-2 Cookies的操作函數addCookie程序:新增Cookie
• 在CookiesLib.inc使用addCookie程序,如下:
addCookie(cName, cKey, cvalue, cExpires)
• 上述程序需要四個參數,依序是Cookie名稱、Cookie資
料目錄的鍵名,Cookie值的字串,最後一個參數設定
Cookie的有效期限,以日數為單位,以今天的日期加
上cExpires參數的日數。
• 在ASP.NET是使用Response物件的Cookies物件集合新
增Cookie,其程式碼如下所示:
Response.Cookies(cName)(cKey) = cValue
• 上述程式碼擁有鍵名,如果沒有鍵名需要使用
HttpCookie物件的Value屬性,其程式碼如下所示:
Response.Cookies(cName).Value = cValue
5-5-2 Cookies的操作函數deleteCookie程序:刪除Cookie
• 在CookiesLib.inc使用deleteCookie程序的
方式,如下所示:
deleteCookie(cName)
• 上述程序只有一個參數的Cookie名稱,
刪除Cookie只是將Expires屬性的有效日
期設為過期的一年前,如下所示:
Response.Cookies(cName).Expires =
DateTime.Now.AddDays(-365)
5-5-2 Cookies的操作函數getCookie函數:取得Cookie值
• 在CookiesLib.inc使用getCookie函數,如下:
value = getCookie(cName, ckey)
• 上述函數需要參數的Cookie名稱和鍵名,函數
傳回值是Cookie值的字串。取得Cookie值是使
用Request物件的Cookies物件集合,如下所示:
Request.Cookies(cName)(cKey)
• 上述程式碼擁有鍵名,如果沒有鍵名需要使用
HttpCookie物件的Value屬性取得其值,其程式
碼如下所示:
Request.Cookies(cName).Value
5-5-2 Cookies的操作函數showCookie程序:顯示Cookie資料
• 在CookiesLib.inc提供showCookie程序,可以顯
示指定Cookie名稱的詳細資料,其主要的目的
是作為Cookie處理的除錯用途,如下所示:
showCookie(cName)
• 上述程序的參數是Cookie名稱,可以顯示
Cookie的詳細資料,也就是HttpCookie物件的
屬性Name、Expries、Domain、Path和Secure,
如果擁有Key鍵名,還可以使用下列迴路顯示
Cookie各鍵名的值。
5-6 伺服器與瀏覽程式資訊
• 5-6-1 Web伺服器的系統資訊
• 5-6-2 取得瀏覽程式資訊
• 5-6-3 取得客戶端的憑證資料
5-6-1 Web伺服器的系統資訊
• Web伺服器的系統資訊是Request物件的物件集
合ServerVariables,這個資料集合可以取得伺服
器的系統資訊,Server變數的使用方法是使用
Request物件的ServerVariables物件集合,如下
所示:
IPAddress = Request.ServerVariables("REMOTE_ADDR")
strPath = Request.ServerVariables("PATH_INFO")
• 上述程式碼的參數是需要取得的變數字串,可
以取得指定Server變數,以此例為使用者的IP
位址和目前ASP.NET程式的虛擬路徑。
5-6-2 取得瀏覽程式資訊
• 在ASP.NET可以使用Request物件的Browser屬性取得
HttpBrowserCapabilities物件達到相同的功能。
• 因為客戶端瀏覽程式連線Web伺服器時,「HTTP使用
者代理人標頭」(HTTP User Agent Header)資訊會傳
送給伺服器,這個標頭資訊的內容是瀏覽程式的相關
資訊,在ASP.NET程式可以使用Request物件取得物件
集合,如下所示:
Dim hbc As HttpBrowserCapabilities = Request.Browser
• 上述程式碼在取得HttpBrowserCapabilities物件後,可
以使用屬性取得瀏覽程式支援的功能。
5-6-3 取得客戶端的憑證資料
• Request.ClientCertificate屬性可以取得客
戶端憑證欄位的資料,如下所示:
Dim hcc As HttpClientCertificate = Request.ClientCertificate
• 上述程式碼在取得HttpClientCertificate物
件後,可以使用屬性取得客戶端憑證的
資料。
5-7 Include指令的使用
• Include指令可以讓我們直接呼叫位於其它檔案
的函式,如果函式庫檔案CookiesLib.inc存放在
Web伺服器的主目錄,此時的Include指令的程
式碼,如下所示:
<!--#include virtual="/CookiesLib.inc"-->
• Include virtual指令是使用Web伺服器虛擬目錄
的主目錄作為根路徑的相對路徑,如果是使用
Include file指令,如下所示:
<!--#include file="../CookiesLib.inc"-->
5-8 ASP.NET程式的除錯模式
• 在ASP.NET程式檔案開頭加上Page指引
的Debug屬性,如下所示:
<%@ Page Language="VB" Debug="True" %>
• 上述程式碼指出使用的程式語法是
VB.NET,Debug屬性True表示開啟除錯
模式,此時在執行ASP.NET,當伺服端
產生錯誤,就可以顯示進一步的除錯資
料。