1 / 38

第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 應用程式. 12-1 ASP.NET 應用程式的基礎. 12-1-1 什麼是 ASP.NET 應用程式 12-1-2 網頁間的資料分享

brendy
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第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應用程式

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

  3. 12-1-1 什麼是ASP.NET應用程式 • ASP.NET應用程式屬於一種.NET Framework應用程式,這是一種在Web伺服器執行的應用程式,稱為Web應用程式。 • 每一個ASP.NET應用程式擁有很多HttpApplication類別的物件副本,其中一個HttpApplication物件負責處理應用程式的HTTP請求。

  4. 12-1-2 網頁間的資料分享 • 網站的分享資料一共有兩種,如下所示: • 分享給網站所有的使用者(例如:目前線上的使用者數),在ASP.NET程式就是所謂的Application變數。 • 只針對每位使用者的專屬資料(例如:登入使用者的權限),在ASP.NET程式就是Session變數。

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

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

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

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

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

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

  11. 12-2-2 Global.asax檔案的使用-檔案存放的路徑 • 在IIS的Web伺服器,Global.asax檔案能夠放在兩個地方,如下所示: • 網站的主目錄:如果將Global.asax檔案放在此目錄(預設是Web應用程式),不論目錄本身,實際或其虛擬子目錄都可以存取檔案內建立的Application和Session變數。 • 虛擬應用程式的主目錄:如果已經將虛擬目錄設定成Web應用程式,虛擬目錄的根目錄也允許擁有自已的Global.asa檔案。

  12. 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事件處理程序。

  13. 12-3 Application物件的狀態管理 • 12-3-1 Application物件 • 12-3-2 網站的訪客計數

  14. 12-3-1 Application物件-說明 • Application物件的目的是建立Application變數,這和一般的程式變數並不相同,它是一個Contents物件集合,此變數可以提供造訪網站的每位使用者一個分享資料的管道,因為Application變數的內容允許網站的每位使用者取得或更改其值。 • Application物件會在第一個Session物件建立後建立,Application物件的範圍直到Web伺服器關機或所有的使用者都離線後才會關閉。

  15. 12-3-1 Application物件-使用 • 不論網站有多少位使用者同時進入,伺服端只會在記憶體保留一份Application變數,其變數的格式如下: Application("Hit_Counter") = 0 • 上述程式碼是將Application變數Hit_Counter設為0,這個變數和ASP.NET程式變數不一樣,它是取得Contents物件集合的元素,變數名稱是一個字串。

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

  17. 12-3-2 網站的訪客計數 • 網站的訪客計數是網站的必備元件,其目的是顯示一共有多少位訪客曾經瀏覽網站,顯示的資訊可以是從開站以來的訪客數,或一段時間之內的訪客數。 • ASP.NET設計訪客計數,只需在Global.asax檔案的Session_Start事件處理程序,使用Application變數記錄訪客計數,就可以輕鬆建立網站的訪客計數功能,其式碼如下所示: Application("Hit_Counter") = Application("Hit_Counter") + 1

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

  19. 12-4-1 Session物件-說明 • 每一個Session物件擁有唯一的Session ID編號,此後在瀏覽ASP.NET程式和即將瀏覽的其它ASP.NET程式的過程,都可以存取此Session物件的變數。 • ASP.NET可以憑藉Session ID判斷使用者是否仍在Session期間,直到Session物件TimeOut屬性設定的時間或執行Abandon方法,當每次讀取新的ASP.NET程式,TimeOut屬性都會歸零重新計算。

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

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

  22. 12-4-2 目前有多少人在線上 • 線上使用者是即時狀態,其最大的問題是如何判斷使用者目前仍在線上,可以指定TimeOut屬性,以決定停留在網站多久時間的使用者算為線上的使用者,如下所示: Session.TimeOut = 5 • 上述程式碼指定的值是分鐘,停留5分鐘的使用者才算是目前線上的使用者,不過因為在Application_Start事件並不能指定TimeOut屬性,所以是放在Session_Start事件。

  23. 12-5 Application與Session物件的使用 • 12-5-1 正確的使用Application和Session變數 • 12-5-2 使用Application和Session物件儲存物件

  24. 12-5-1 正確的使用Application和Session變數 • Session變數的目的是儲存使用者的專屬資料,對於固定內容的變數,就應該採用Application變數。 • 因為Appliction變數是分享給所有使用者,應該將它放在Application_Start的事件處理程序。

  25. 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

  26. 12-6 在網頁間傳遞Web表單內容 • 12-6-1 使用URL參數 • 12-6-2 使用Session變數 • 12-6-3 使用Web表單的類別屬性

  27. 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

  28. 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")

  29. 12-6-3 使用Web表單的類別屬性-第一步 • 程式的開頭是Page指引,如下所示: <%@ Page Language="VB" ClassName="firstStepClass" %> • 事件處理程序的類別屬性,如下所示: Public ReadOnly Property UserName() As String Get Return user.Text End Get End Property Public ReadOnly Property Password() As String Get Return pass.Text End Get End Property

  30. 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

  31. 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區段的自訂錯誤網頁

  32. 12-7-1 Web.config檔案的基礎-說明 • Web.config檔案是ASP.NET應用程式的資源設定檔案,這是一個XML文件,內含各種設定的XML標籤,可以簡化ASP.NET應用程式的相關設定。 • Web.config檔案是儲存在Web伺服器的虛擬目錄,電腦根設定檔案名為【Machine.config】,伺服器所有其它目錄的設定都是繼承此設定檔案,如果需要更改設定就是使用Web.config檔案。

  33. 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>

  34. 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")

  35. 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>

  36. 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>

  37. 12-7-5 compilation區段的編譯設定 • compilation區段是<system.web>的子標籤,可以設定ASP.NET程式預設的編譯方式,如下所示: <configuration> <system.web> <compilation defaultLanguage="VB" debug="true"/> ……… </system.web> </configuration>

  38. 12-7-6 customErrors區段的自訂錯誤網頁 • 在customErrors區段可以指定錯誤網頁,如下所示: <configuration> <system.web> <customErrors mode="RemoteOnly" defaultRedirect="Ch12-7error.htm"/> ……… </system.web> </configuration>

More Related