第12章 asp.net 的 web 應用程式

38
第 12 第 ASP.NET 第 Web 第第第第 • 12-1 ASP.NET 第第第第第第第 • 12-2 Global.asax 第第第第 • 12-3 Application 第第第第第第第 • 12-4 Session 第第第第第第第 • 12-5 Application 第 Session 第第第第第 • 12-6 第第第第第第 Web 第第第第 • 12-7 Web.config 第第 ASP.NET 第第第第

Upload: brendy

Post on 20-Jan-2016

63 views

Category:

Documents


0 download

DESCRIPTION

第12章 ASP.NET 的 Web 應用程式. 12-1 ASP.NET 應用程式的基礎 12-2 Global.asax 檔的使用 12-3 Application 物件的狀態管理 12-4 Session 物件的狀態管理 12-5 Application 與 Session 物件的使用 12-6 在網頁間傳遞 Web 表單內容 12-7 Web.config 設定 ASP.NET 應用程式. 12-1 ASP.NET 應用程式的基礎. 12-1-1 什麼是 ASP.NET 應用程式 12-1-2 網頁間的資料分享 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第12章  ASP.NET 的 Web 應用程式

第 12 章 ASP.NET的Web 應用程式

• 12-1 ASP.NET 應用程式的基礎• 12-2 Global.asax 檔的使用• 12-3 Application 物件的狀態管理• 12-4 Session 物件的狀態管理• 12-5 Application與 Session 物件的使用• 12-6 在網頁間傳遞 Web 表單內容• 12-7 Web.config 設定 ASP.NET 應用程式

Page 2: 第12章  ASP.NET 的 Web 應用程式

12-1 ASP.NET 應用程式的基礎• 12-1-1 什麼是 ASP.NET 應用程式• 12-1-2 網頁間的資料分享• 12-1-3 網頁間資料傳遞的方法

Page 3: 第12章  ASP.NET 的 Web 應用程式

12-1-1 什麼是 ASP.NET 應用程式

• ASP.NET 應用程式屬於一種 .NET Framework 應用程式,這是一種在 Web伺服器執行的應用程式,稱為 Web 應用程式。

• 每一個 ASP.NET 應用程式擁有很多HttpApplication 類別的物件副本,其中一個 HttpApplication 物件負責處理應用程式的 HTTP 請求。

Page 4: 第12章  ASP.NET 的 Web 應用程式

12-1-2 網頁間的資料分享• 網站的分享資料一共有兩種,如下所示:

– 分享給網站所有的使用者(例如:目前線上的使用者數),在 ASP.NET 程式就是所謂的 Application 變數。

– 只針對每位使用者的專屬資料(例如:登入使用者的權限),在 ASP.NET 程式就是Session 變數。

Page 5: 第12章  ASP.NET 的 Web 應用程式

12-1-3 網頁間資料傳遞的方法 - 說明

• ASP.NET 程式間的資料傳遞方法,換個角度來說,就是如何保留使用者狀態的方法,稱為「狀態管理」( State Management),以資料儲存的位置可以分為兩大類,一是將資料儲存在客戶端,一是儲存在伺服端。

Page 6: 第12章  ASP.NET 的 Web 應用程式

12-1-3 網頁間資料傳遞的方法 - 客戶端的狀態管理

使用的方法 說明

Cookies Cookies 是保留在使用者電腦的小檔案,檔案內容就是這些使

用者資訊

ViewState ASP.NET 的 ViewState 功能,在表單送回時能夠在網頁使用ViewState屬性保留使用者資料

Hidden隱藏欄位 使用表單的 Hidden欄位送回表單資料或傳遞資料到其它網頁

QueryString物件集合使用網址 URL 參數,我們可以在 URL 網址加上參數,將資料

傳遞給其它網頁

Page 7: 第12章  ASP.NET 的 Web 應用程式

12-1-3 網頁間資料傳遞的方法 - 伺服端的狀態管理

使用的方法 說明

Application物件 使用 Application物件的變數儲存使用者資料

Session物件 使用 Session物件的變數儲存使用者資料

資料庫 使用資料庫的記錄資料儲存使用者資料

XML文件或文字檔案 使用 XML文件或文字檔案儲存使用者資料

Page 8: 第12章  ASP.NET 的 Web 應用程式

12-2 Global.asax 檔的使用• 12-2-1 Global.asax 檔案的架構• 12-2-2 Global.asax 檔案的使用

Page 9: 第12章  ASP.NET 的 Web 應用程式

12-2-1 Global.asax 檔案的架構<script language="VB" runat="Server">Sub Application_Start(sender As Object, e As EventArgs) ' 處理應用程式啟動End SubSub Application_End(sender As Object, e As EventArgs) ' 釋放應用程式的資訊End SubSub Session_Start(sender As Object, e As EventArgs) ' 處理 Session 期間的開始End SubSub Session_End(Sender As Object, E As EventArgs) ' 釋放 session 的資源End Sub</script>

Page 10: 第12章  ASP.NET 的 Web 應用程式

12-2-1 Global.asax 檔案的架構 -事件處理程序

事件處理程序 說明

Application_Start 當第一位使用者進入 ASP.NET 程式時,Application_Start 的事件就

觸發,在觸發後就算有成千上萬位使用者進入網站都不會重新觸

發,除非 Web 伺服器關機。程序內容通常是屬於系統設定的Application變數,例如:初始的訪客計數

Application_End 當Web伺服器關機,此事件就會觸發

Session_Start 每一位使用者在執行 ASP.NET 程式前,就觸發此事件,如果有 50

位使用者,就觸發 50 次事件處理程式,每個事件是獨立觸發,如

同瀏覽網頁一般,並不會互相影響,程序內容通常是一些使用者專

屬 Session變數的初始設定

Session_End 使用者在預設的 20 分鐘內沒有進入其它的 ASP.NET 程式,就會觸

發此事件,這個時間是由 TimeOut 屬性設定,程序內容並沒有辦法

處理已經離開網站的使用者,通常屬於一些善後用途的程式碼,例

如:將 Session變數存入資料庫或文字檔案

Page 11: 第12章  ASP.NET 的 Web 應用程式

12-2-2 Global.asax 檔案的使用 -檔案存放的路徑

• 在 IIS的Web 伺服器, Global.asax 檔案能夠放在兩個地方,如下所示:– 網站的主目錄:如果將 Global.asax 檔案放在此目錄

(預設是 Web 應用程式),不論目錄本身,實際或其虛擬子目錄都可以存取檔案內建立的 Application和 Session 變數。

– 虛擬應用程式的主目錄:如果已經將虛擬目錄設定成Web 應用程式,虛擬目錄的根目錄也允許擁有自已的 Global.asa 檔案。

Page 12: 第12章  ASP.NET 的 Web 應用程式

12-2-2 Global.asax 檔案的使用 -執行順序

• 如果有 Global.asax 檔案,它將自動編譯成繼承HttpApplication 類別的 .NET Framework 類別,然後在執行 ASP.NET 檔案的程式碼前觸發 Application_Start 事件,執行 Global.asax 檔案的 Application_Start 事件程序,接著建立 Session 物件,因為 Global.asax 檔案存在,接著執行Session_Start 事件處理程序。

• 當 Session 期間超過 TimeOut 屬性設定或執行 Abandon 方法,就表示 Session 期間結束,就會觸發 Session_End 執行 Session_End 事件處理程式在關閉 Session 物件前執行。

• 當Web 伺服器關機時,就會在關閉 Application 物件前執行 Application_End 事件處理程序。

Page 13: 第12章  ASP.NET 的 Web 應用程式

12-3 Application 物件的狀態管理

• 12-3-1 Application 物件• 12-3-2 網站的訪客計數

Page 14: 第12章  ASP.NET 的 Web 應用程式

12-3-1 Application 物件 - 說明• Application 物件的目的是建立 Application 變數,

這和一般的程式變數並不相同,它是一個Contents 物件集合,此變數可以提供造訪網站的每位使用者一個分享資料的管道,因為Application 變數的內容允許網站的每位使用者取得或更改其值。

• Application 物件會在第一個 Session 物件建立後建立, Application 物件的範圍直到 Web 伺服器關機或所有的使用者都離線後才會關閉。

Page 15: 第12章  ASP.NET 的 Web 應用程式

12-3-1 Application 物件 - 使用• 不論網站有多少位使用者同時進入,伺服端只

會在記憶體保留一份 Application 變數,其變數的格式如下:Application("Hit_Counter") = 0

• 上述程式碼是將 Application 變數 Hit_Counter設為 0 ,這個變數和 ASP.NET 程式變數不一樣,它是取得 Contents 物件集合的元素,變數名稱是一個字串。

Page 16: 第12章  ASP.NET 的 Web 應用程式

12-3-1 Application 物件 - 同步• 如果有兩位使用者同時讀取 Application 變數,

那沒有關係,如果有一位更改資料,一位讀取資料,此時資料的衝突情況就會發生,為了避免這種情況, Application 的兩個方法【 lock 】和【 unlock】,可以保障在同一時間內只允許一位使用者存取 Application 變數,其程式碼如下所示:Application.Lock()

Application("Hit_Counter") = Application("Hit_Counter") + 1

Application.Unlock()

Page 17: 第12章  ASP.NET 的 Web 應用程式

12-3-2 網站的訪客計數• 網站的訪客計數是網站的必備元件,其目的是

顯示一共有多少位訪客曾經瀏覽網站,顯示的資訊可以是從開站以來的訪客數,或一段時間之內的訪客數。

• ASP.NET 設計訪客計數,只需在 Global.asax檔案的 Session_Start 事件處理程序,使用Application 變數記錄訪客計數,就可以輕鬆建立網站的訪客計數功能,其式碼如下所示:Application("Hit_Counter") = Application("Hit_Counter") + 1

Page 18: 第12章  ASP.NET 的 Web 應用程式

12-4 Session 物件的狀態管理• 12-4-1 Session 物件• 12-4-2 目前有多少人在線上

Page 19: 第12章  ASP.NET 的 Web 應用程式

12-4-1 Session 物件 - 說明• 每一個 Session 物件擁有唯一的 Session ID 編號,

此後在瀏覽 ASP.NET 程式和即將瀏覽的其它ASP.NET 程式的過程,都可以存取此 Session物件的變數。

• ASP.NET 可以憑藉 Session ID判斷使用者是否仍在 Session 期間,直到 Session 物件 TimeOut屬性設定的時間或執行 Abandon 方法,當每次讀取新的 ASP.NET 程式, TimeOut 屬性都會歸零重新計算。

Page 20: 第12章  ASP.NET 的 Web 應用程式

12-4-1 Session 物件 - 使用• Session 變數屬於使用者,每一位使用者都擁有

一組專屬的 Session 變數,雖然每位使用者的Session 變數擁有相同名稱,但是值可能就不同,而且只有該位使用者才能存取自己的 Session變數,例如:使用者 hueyan 登入網站,建立Session 變數的程式碼如下:Session("username") = "hueyan"

Session("password") = "1234"

Page 21: 第12章  ASP.NET 的 Web 應用程式

12-4-1 Session 物件 - 屬性和方法

方法 說明

Abandon 使用者建立的 Session變數都會清除掉,再也不能存取 Session變數值

Remove 刪除指定的 Session變數,參數是 Session變數的名稱字串

屬性 說明

TimeOut 設定和取得超過 Session 期間的時間,從第一次進入 ASP.NET 程式,

到下一次請求的間隔時間,以分鐘計

SessionID 取得使用者唯一的 Session編號,這是唯讀屬性

LCID 網頁使用的指定區域碼的相關設定,這包括日期時間和貨幣等格式

Page 22: 第12章  ASP.NET 的 Web 應用程式

12-4-2 目前有多少人在線上• 線上使用者是即時狀態,其最大的問題是如何判斷使用者目前仍在線上,可以指定 TimeOut屬性,以決定停留在網站多久時間的使用者算為線上的使用者,如下所示:Session.TimeOut = 5

• 上述程式碼指定的值是分鐘,停留 5 分鐘的使用者才算是目前線上的使用者,不過因為在Application_Start 事件並不能指定 TimeOut 屬性,所以是放在 Session_Start 事件。

Page 23: 第12章  ASP.NET 的 Web 應用程式

12-5 Application與 Session 物件的使用

• 12-5-1 正確的使用 Application和 Session 變數

• 12-5-2 使用 Application和Session 物件儲存物件

Page 24: 第12章  ASP.NET 的 Web 應用程式

12-5-1 正確的使用 Application和 Session 變數

• Session 變數的目的是儲存使用者的專屬資料,對於固定內容的變數,就應該採用 Application 變數。

• 因為 Appliction 變數是分享給所有使用者,應該將它放在 Application_Start 的事件處理程序。

Page 25: 第12章  ASP.NET 的 Web 應用程式

12-5-2 使用 Application和Session 物件儲存物件

• Application和 Session 變數不只可以儲存數值或字串,在上一節還用來儲存 Hashtable的Collection 物件,如下所示:Dim userArray As Hashtable = New Hashtable(5)

Application("UserList") = userArray

• 不只如此,還可以儲存 ADO.NET 物件,例如:DataView 物件,如下所示:Dim objView As DataView = New DataView(objDs.Tables(0))

Application("Source") = objView

Page 26: 第12章  ASP.NET 的 Web 應用程式

12-6 在網頁間傳遞 Web 表單內容

• 12-6-1 使用 URL參數• 12-6-2 使用 Session 變數• 12-6-3 使用 Web 表單的類別屬性

Page 27: 第12章  ASP.NET 的 Web 應用程式

12-6-1 使用 URL參數• 舊版 ASP 的網頁間資料傳遞除了使用表

單外,還可以使用 URL 網址傳遞的參數,在接收網頁只需使用 QueryString 物件集合,就可以取得傳遞值,其優點是簡單,但問題是瀏覽程式可以看到傳遞值。Sub Page_Load(sender As Object, e As Eventargs)

name.Text = Request.QueryString("username")

pass.Text = Request.QueryString("password")

End Sub

Page 28: 第12章  ASP.NET 的 Web 應用程式

12-6-2 使用 Session 變數• 第一步的 ASP.NET 事件處理程序,如下所示:

Sub GotoNextStep(Sender As Object, e As Eventargs) Session("UserName") = user.Text Session("Password") = pass.Text Response.Redirect("Ch12-6-2Second.aspx")End Sub

• 使用 Response.Redirect 方法轉向到第二步的ASP.NET 程式。使用 Session 變數取得傳遞的變數值,如下所示:name.Text = Session("UserName")pass.Text = Session("Password")Session.Remove("UserName")Session.Remove("Password")

Page 29: 第12章  ASP.NET 的 Web 應用程式

12-6-3 使用 Web 表單的類別屬性 - 第一步

• 程式的開頭是 Page指引,如下所示:<%@ Page Language="VB" ClassName="firstStepClass" %>

• 事件處理程序的類別屬性,如下所示:Public ReadOnly Property UserName() As String Get Return user.Text End GetEnd PropertyPublic ReadOnly Property Password() As String Get Return pass.Text End GetEnd Property

Page 30: 第12章  ASP.NET 的 Web 應用程式

12-6-3 使用 Web 表單的類別屬性 - 第二步

• 程式的開頭是 Reference指引,如下所示:<%@ Reference Page="Ch12-6-3.aspx" %>

• 其 Page_Load 事件處理程序的程式碼,如下:Sub Page_Load(sender As Object, e As Eventargs)

If Not IsPostBack Then

Dim fs As firstStepClass = Context.Handler

name.Text = fs.UserName

pass.Text = fs.Password

End If

End Sub

Page 31: 第12章  ASP.NET 的 Web 應用程式

12-7 Web.config 設定 ASP.NET應用程式

• 12-7-1 Web.config 檔案的基礎• 12-7-2 appSetting區段應用程式參數• 12-7-3 在 sessionState區段設定

Session 狀態• 12-7-4 globalization區段的編碼設定• 12-7-5 compilation區段的編譯設定• 12-7-6 customErrors區段的自訂錯誤網

Page 32: 第12章  ASP.NET 的 Web 應用程式

12-7-1 Web.config 檔案的基礎 -說明

• Web.config 檔案是 ASP.NET 應用程式的資源設定檔案,這是一個 XML文件,內含各種設定的 XML標籤,可以簡化 ASP.NET 應用程式的相關設定。

• Web.config 檔案是儲存在 Web 伺服器的虛擬目錄,電腦根設定檔案名為【Machine.config】,伺服器所有其它目錄的設定都是繼承此設定檔案,如果需要更改設定就是使用 Web.config 檔案。

Page 33: 第12章  ASP.NET 的 Web 應用程式

12-7-1 Web.config 檔案的基礎 -範例

• <configuration> <appSettings> <add key="provider" value="Microsoft.Jet.OLEDB.4.0;"/> <add key="database" value="/Ch12/Products.mdb"/> </appSettings> <system.web> <sessionState cookieless="false" timeout="10"/> <globalization fileEncoding="big5" requestEncoding="big5" responseEncoding="big5" culture="zh-TW"/> <compilation defaultLanguage="VB" debug="true"/> <customErrors mode="RemoteOnly"/> </system.web></configuration>

Page 34: 第12章  ASP.NET 的 Web 應用程式

12-7-2 appSetting區段的應用程式參數

• Web.config 檔案的 <appSettings>區段可以新增ASP.NET 應用程式所需的參數,它屬於 <configuration>標籤的子標籤,如下所示:<configuration> <appSettings> <add key="provider" value="Microsoft.Jet.OLEDB.4.0;"/> <add key="database" value="/Ch12/Products.mdb"/> </appSettings> <system.web> ……… </system.web></configuration>

• 在ASP.NET 程式可以使用 System.Configuration 名稱空間的ConfigurationSettings 類別取得參數,如下所示:Dim provider As String = ConfigurationSettings.appSettings("provider")Dim database As String = ConfigurationSettings.appSettings("database")

Page 35: 第12章  ASP.NET 的 Web 應用程式

12-7-3 在 sessionState區段設定Session 狀態

• ASP.NET的 Session 狀態管理比 ASP 擁有更多的擴充性,在 Web.config 檔案的 <sessionState>區段可以設定如何管理 Session 狀態,這是<system.web> 的子標籤,如下所示:<configuration>

<system.web>

<sessionState cookieless="false" timeout="10"/>

………

</system.web>

</configuration>

Page 36: 第12章  ASP.NET 的 Web 應用程式

12-7-4 globalization區段的編碼設定

• globalization區段是 <system.web> 的子標籤,可以設定ASP.NET 程式預設的檔案、請求回應的編碼方式、日期時間格式和數字等本地化的相關設定,如下所示:<configuration> <system.web> <globalization fileEncoding="big5" requestEncoding="big5" responseEncoding="big5" culture="zh-TW"/> ……… </system.web></configuration>

Page 37: 第12章  ASP.NET 的 Web 應用程式

12-7-5 compilation區段的編譯設定

• compilation區段是 <system.web> 的子標籤,可以設定 ASP.NET 程式預設的編譯方式,如下所示:<configuration>

<system.web>

<compilation defaultLanguage="VB" debug="true"/>

………

</system.web>

</configuration>

Page 38: 第12章  ASP.NET 的 Web 應用程式

12-7-6 customErrors區段的自訂錯誤網頁

• 在 customErrors區段可以指定錯誤網頁,如下所示:<configuration>

<system.web>

<customErrors mode="RemoteOnly"

defaultRedirect="Ch12-7error.htm"/>

………

</system.web>

</configuration>