Download presentation
Presentation is loading. Please wait.
Published byἹερεμίας Πολίτης Modified 6年之前
1
第11章 ASP.NET的Web應用程式 11-1 ASP.NET應用程式的基礎 11-2 Global.asax檔的使用
11-3 Application物件的狀態管理 11-4 Session物件的狀態管理 11-5 Application與Session物件的使用 11-6 在網頁間傳遞Web表單內容 11-7 使用web.config組態檔 11-8 ASP.NET 2.0的網站設定工具
2
11-1 ASP.NET應用程式的基礎 11-1-1 ASP.NET的Web應用程式 11-1-2 網頁間資料分享的基礎
網頁間的資料傳遞方法
3
ASP.NET的Web應用程式 ASP.NET應用程式是一種.NET Framework應用程式,它是在Web伺服器上執行的應用程式,稱為Web應用程式。ASP.NET應用程式就是HttpApplication類別的物件,負責處理應用程式的HTTP請求。 在IIS的Web伺服器能夠將整個網站,或指定網站目錄建立成Web應用程式。IIS能夠在同一個網站建立多個Web應用程式,每一個虛擬目錄都可以建立成為Web應用程式。
4
11-1-2 網頁間資料分享的基礎- Session期間
ASP.NET的【Session期間】是指Web應用程式從一頁ASP.NET網頁移到其他ASP.NET網頁過程中所花費的時間,並不是指第11-4節的Session物件。 在ASP.NET是使用Sytem.Web.SessionState名稱空間的類別來管理Session期間的資訊,也就是建立Session物件來保留Session期間的資料。
5
11-1-2 網頁間資料分享的基礎-網站的資料分享
當使用者進入網站,如果是會員管理網站,在登入後可以取得使用者的瀏覽權限,但是伺服端並不知道目前客戶端有哪些使用者正在瀏覽,和其使用狀態。因為使用者在移至其他網頁時,使用者登入資料並不會自動傳給下一頁網頁。 資料分享主要分為兩種,如下所示: 分享給網站所有使用者:在ASP.NET程式可以使用Application變數進行分享,例如:目前線上的使用者數。 每位使用者的專屬資料:在ASP.NET程式可以使用Session變數進行分享,例如:登入使用者的權限。
6
網頁間的資料傳遞方法-說明 在ASP.NET程式間的資料傳遞方法,換個角度來說,就是如何保留使用者狀態的方法,稱為「狀態管理」(State Management)。 以資料儲存的位置分為兩大類: 客戶端 伺服端
7
11-1-3 網頁間的資料傳遞方法-客戶端的狀態管理
客戶端的狀態管理是將資料儲存在使用者電腦,或是直接儲存在ASP.NET程式建立的網頁中,如下表所示:
8
11-1-3 網頁間的資料傳遞方法-伺服端的狀態管理
伺服端的狀態管理是將資料儲存在伺服器電腦,換句話說,它會佔用Web伺服器的系統資源,如下表所示:
9
11-2 Global.asax檔的使用 Global.asax檔案的架構 Global.asax檔案的使用
10
11-2-1 Global.asax檔案的架構-新增Global.asax檔案
ASP.NET的Global.asax檔案是ANSI文字檔案,使用Windows記事本或VWD都可以編輯Global.asax檔案內容。 Visual Web Developer可以新增Global.asax檔案。請啟動VWD開啟「Ch11」網站後,執行「檔案/新增/檔案」指令,可以看到「加入新項目」對話方塊。
11
11-2-1 Global.asax檔案的架構-Global.asax檔案架構
Application Language="VB" %> <script Runat="server"> Sub Application_Start(ByVal Sender As Object, _ ByVal E As EventArgs) End Sub Sub Application_End(ByVal Sender As Object, _ Sub Application_Error(ByVal Sender As Object, _ Sub Session_Start(ByVal sender As Object, _ ByVal e As EventArgs) Sub Session_End(ByVal sender As Object, _ </script>
12
11-2-1 Global.asax檔案的架構-說明
13
11-2-2 Global.asax檔案的使用-執行順序1
當使用者請求ASP.NET程式後,就會替每位使用者建立Session期間和Application物件,接著檢查ASP.NET應用程式是否擁有Global.asax檔案。 如果有Global.asax檔案,就將它編譯成繼承HttpApplication類別的物件,然後在執行ASP.NET檔案的程式碼前觸發Application_Start事件,執行Global.asax檔案的Application_Start()事件處理程序,接著建立Session物件,因為Global.asax檔案存在,接著執行Session_Start()事件處理程序。
14
11-2-2 Global.asax檔案的使用-執行順序2
當Session期間超過TimeOut屬性的設定(預設20分鐘)或執行Abandon()方法,表示Session期間結束,就觸發Session_End執行Session_End()事件處理程式,處理程序是在關閉Session物件前執行。 Web伺服器如果關機,在關閉Application物件前就會執行Application_End()事件處理程序,當然也會結束所有使用者的Session期間,和執行所有使用者的Session_End()事件處理程序。
15
11-3 Application物件的狀態管理 Application物件的基礎 網站的訪客計數
16
11-3-1 Application物件的基礎-什麼是Application物件
Application物件可以建立Application變數,它和一般程式變數不同,Application變數是一個Contents集合物件,此變數可以提供造訪網站的每位使用者一個分享資料的管道,因為Application變數允許網站每位使用者取得或更改其值。 Application物件是在第1個Session物件建立後建立,Application物件的範圍直到Web伺服器關機或所有的使用者都離線後才會刪除。
17
11-3-1 Application物件的基礎-Application變數的使用
Application("HitCounter") = 1234 上述程式碼將名為Hit_Counter的Application變數設為1234,此變數和ASP.NET程式變數不一樣,它是取得Contents集合物件的元素,變數名稱是字串。
18
11-3-1 Application物件的基礎-Application狀態管理的同步
ASP.NET應用程式的每位使用者都可以存取Application變數,使用者可以同時讀取Application變數,但是如果有一位更改資料,其他讀取資料,此時資料衝突情況就會發生,為了避免此情況,需要考慮同步問題。 在Application物件提供Lock()和Unlock()方法,可以保障在同一時間內,只允許一位使用者存取Application變數,其程式碼如下所示: Application.Lock() Application("HitCounter")= _ Application("HitCounter")+1 Application.Unlock()
19
網站的訪客計數-說明 網站的訪客計數是一種必備元件,其目的是顯示有多少位訪客曾經瀏覽網站,顯示資訊可以從開站以來的訪客數,或一段時間內的訪客數。 ASP.NET的訪客計數是在Global.asax檔案的Session_Start()事件處理程序,使用Application變數記錄訪客計數,如下所示: Application("HitCounter")= _ Application("HitCounter")+1 上述Application變數記錄目前的訪客計數,別忘了!使用Lock()和Unlock()方法。
20
網站的訪客計數-圖例
21
11-4 Session物件的狀態管理 Session物件的基礎 目前有多少人在線上
22
11-4-1 Session物件的基礎-什麼是Session物件
每一個Session物件擁有唯一的Session ID編號,在整個瀏覽ASP.NET應用程式的過程(造訪不同ASP.NET程式時),都可以存取Session物件建立的變數。 在ASP.NET的Web應用程式是使用Session ID判斷使用者是否仍在Session期間,它是直到Session物件TimeOut屬性設定時間到時(預設值20分鐘),或執行Abandon()方法後才會結束Session期間。
23
11-4-1 Session物件的基礎-Session變數的使用
Session變數是使用者的專屬資料,雖然每位使用者的Session變數名稱相同,但是值可能不同。而且只有該位使用者才能存取自己的Session變數。 例如:使用者hueyan進入網站,建立Session變數的程式碼如下: Session("username") = "hueyan" Session("password") = "1234" 上述Session變數屬於使用者hueyan。接著另一位使用者jane也進入網站,也會替他建立一組Session變數,其程式碼如下: Session("username") = "jane" Session("password") = "4567"
24
目前有多少人在線上 訪客計數是歷史記錄,線上使用者數是目前的即時狀態,如果想知道目前有多少位使用者停留在網站?其最大問題是如何判斷使用者目前仍在線上,我們可以指定TimeOut屬性,以停留在網站多久時間來判斷是否為線上使用者,如下所示: Session.TimeOut = 5 上述程式碼指定值是分鐘,也就是說停留5分鐘的使用者算是目前線上的使用者,不過,Application_Start()事件處理程序並不能指定TimeOut屬性,它是位在Session_Start()事件處理程序。
25
11-5 Application與Session物件的使用
26
11-5-1 正確使用Application和Session變數
Session變數不同於Application變數,其儲存資料是使用者專屬資料,換句話說,除非是使用者相關資料,否則使用Session變數只是浪費伺服器的記憶體資源。 Session變數的目的是儲存使用者專屬資料,對於固定內容的變數,應該使用Application變數,因為Appliction變數是分享給所有使用者。
27
11-5-2 使用Application和Session物件儲存物件
Application和Session變數可以用來儲存Hashtable集合物件,如下所示: 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
28
11-6 在網頁間傳遞Web表單內容 11-6-1 使用URL參數 11-6-2 使用Session變數
使用PreviousPage物件
29
使用URL參數-說明 舊版ASP的網頁間資料傳遞除了使用表單外,還可以使用URL網址參數來傳遞資料,在接收網頁是使用QueryString集合物件取得傳遞值,其優點是簡單,但問題是瀏覽程式網址欄會顯示傳遞值。 筆者準備建立擁有2個步驟的Web表單,在輸入使用者名稱和密碼後,按【下一步】鈕在第二頁ASP.NET程式顯示使用者資料。
30
使用URL參數-步驟一 在步驟一的Web表單擁有2個TextBox控制項,可以輸入使用者資料,按【下一步】鈕執行GotoNextStep()事件處理程序,如下所示: Sub GotoNextStep(Sender As Object, E As Eventargs) Dim url As String url = "Ch11-6-1Second.aspx?username=" & _ user.Text & "&password=" & _ pass.Text Response.Redirect(url) End Sub
31
使用URL參數-步驟二 在步驟二ASP.NET程式的Page_Load()事件處理程序,可以使用QueryString集合物件取得參數值,如下所示: Sub Page_Load(Sender As Object, _ E As Eventargs) name.Text = _ Request.QueryString("username") pass.Text = _ Request.QueryString("password") End Sub
32
使用Session變數-步驟一 步驟一的Web表單擁有2個TextBox控制項,可以輸入使用者資料,按【下一步】鈕執行GotoNextStep()事件處理程序,如下所示: Sub GotoNextStep(Sender As Object, _ E As Eventargs) Session("UserName") = user.Text Session("Password") = pass.Text Response.Redirect( _ "Ch11-6-2Second.aspx") End Sub
33
使用Session變數-步驟二 在步驟二ASP.NET程式的Page_Load()事件處理程序,使用Session變數取得傳遞的變數值,如下所示: Sub Page_Load(Sender As Object, _ E As Eventargs) name.Text = Session("UserName") pass.Text = Session("Password") Session.Remove("UserName") Session.Remove("Password") End Sub
34
11-6-3 使用Web表單的類別屬性- 定義Page類別的屬性
Web表單可以使用Page類別屬性來傳遞表單資料。我們可以使用Page指引的ClassName屬性指定類別名稱,如下所示: Page Language="VB" ClassName="firstStepClass" %> Page指引的CalssName屬性指定類別名稱是firstStepClass,接著可以使用Property指令定義類別的屬性,如下所示: Public ReadOnly Property UserName() As String Get Return user.Text End Get End Property
35
使用Web表單的類別屬性- 步驟一 步驟一的Web表單擁有2個TextBox控制項,可以輸入使用者資料,程式開頭的Page指引指令,如下所示: Page Language="VB" ClassName="firstStepClass" %> 按【下一步】鈕執行GotoNextStep()事件處理程序,在<script>標籤的程式碼建立2個屬性UserName和Password,屬性值是TextBox控制項的Text屬性,最後GotoNextStep()程序使用Server.Transfer()方法轉址至步驟二的ASP.NET程式。
36
11-6-3 使用Web表單的類別屬性- 步驟二 步驟二ASP.NET程式的開頭是Reference指引,如下所示:
Reference Page="Ch 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
37
11-6-4 使用PreviousPage物件- 步驟一
ASP.NET 2.0版可以使用PreviusPage物件執行跨ASP.NET程式的Web表單送回。 步驟一的Web表單擁有2個TextBox控制項,可以輸入使用者資料,在Button控制項使用PostBackUrl屬性指定送回的ASP.NET程式,如下所示: <asp:Button Id="Button" Text="下一步" Runat="server“ PostBackUrl="Ch11-6-4Second.aspx"/>
38
11-6-4 使用PreviousPage物件- 步驟二
在步驟二ASP.NET程式的Page_Load()事件處理程序,使用FindControl()方法取得前一頁ASP.NET的控制項,如下所示: Sub Page_Load(Sender As Object, E As Eventargs) If Not IsPostBack Then Dim txt As TextBox txt = PreviousPage.FindControl("user") name.Text = txt.Text txt = PreviousPage.FindControl("pass") pass.Text = txt.Text End If End Sub
39
11-7 使用web.config組態檔 11-7-1 Web組態檔的基礎
appSettings與connectionStrings區段的參數和連結字串 在sessionState區段設定Session狀態 globalization區段的編碼設定 compilation區段的編譯設定 customErrors區段的自訂錯誤網頁
40
Web組態檔的基礎-說明 Web組態檔web.config是ASP.NET技術Web應用程式的資源設定檔案,它是一份XML文件,內含Web應用程式相關設定的XML標籤,可以用來簡化ASP.NET應用程式的相關設定。 Web組態檔web.config是位在Web應用程式的任何目錄,子目錄如果沒有web.config檔案,就是繼承父目錄web.config檔案的相關設定;如果子目錄擁有web.config檔案,就會覆寫父目錄web.config檔案的相關設定。
41
11-7-1 Web組態檔的基礎-範例 <configuration> <appSettings>
<add key="dbType" value="Access Database"/> </appSettings> <connectionStrings> <add name="provider" connectionString="Microsoft.Jet.OLEDB.4.0;"/> <add name="database" connectionString="/Ch11/Products.mdb"/> </connectionStrings> <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>
42
Web組態檔的基礎-標籤說明1
43
Web組態檔的基礎-標籤說明2
44
11-7-2 appSettings與connectionStrings區段的參數和連結字串-web.config的內容
在Web組態檔的<appSettings>區段可以新增ASP.NET程式所需的參數,可以指定資料庫連結字串,如下所示: <configuration> <appSettings> <add key="dbType" value="Access Database"/> </appSettings> <connectionStrings> <add name="provider" connectionString="Microsoft.Jet.OLEDB.4.0;"/> <add name="database" connectionString="/Ch11/Products.mdb"/> </connectionStrings> </configuration>
45
11-7-2 appSettings與connectionStrings區段的參數和連結字串-Conifguration API的基礎
ASP.NET 2.0版的Configuration API可以存取web.config和machine.config組態檔的設定資料。在ASP.NET程式是使用System.Web.Configuration名稱空間的WebConfigurationManager類別來存取相關設定,如下所示: Dim dbType As String = _ WebConfigurationManager.AppSettings("dbType") Dim pd, db As String pd=WebConfigurationManager.ConnectionStrings( _ "provider").ConnectionString db=WebConfigurationManager.ConnectionStrings( _ "database").ConnectionString
46
11-7-3 在sessionState區段設定Session狀態
ASP.NET的Session狀態管理擁有擴充性,我們可以在web.config檔案的<sessionState>區段設定Session狀態管理,它屬於<system.web>的子標籤,如下所示: <configuration> <system.web> <sessionState cookieless="false" timeout="10"/> ……… </system.web> </configuration>
47
11-7-4 globalization區段的編碼設定
在<system.web>子標籤的<globalization>區段是本地化相關設定,可以設定ASP.NET程式預設的檔案編碼、請求和回應的編碼方式、日期時間格式和數字等本地化等相關設定,如下所示: <configuration> <system.web> <globalization fileEncoding="big5" requestEncoding="big5" responseEncoding="big5" culture="zh-TW"/> ……… </system.web> </configuration>
48
11-7-5 compilation區段的編譯設定
在<system.web>子標籤的<compilation>區段,可以設定ASP.NET程式預設的編譯方式,如下所示: <configuration> <system.web> <compilation defaultLanguage="VB" debug="true"/> ……… </system.web> </configuration>
49
11-7-6 customErrors區段的自訂錯誤網頁-說明
在<system.web>子標籤<customErrors>區段,可以設定ASP.NET程式的自訂錯誤網頁。例如:錯誤代碼HTTP 404,如下圖所示:
50
11-7-6 customErrors區段的自訂錯誤網頁-指定錯誤網頁
<configuration> <system.web> <customErrors mode="On“ defaultRedirect="Ch11-7error.htm"/> ……… </system.web> </configuration>
51
11-7-6 customErrors區段的自訂錯誤網頁-指定錯誤代碼的錯誤網頁
在customErrors區段擁有多個error子標籤,每一個error標籤可以定義HTTP錯誤代碼的自訂錯誤網頁,如下所示: <configuration> <system.web> <customErrors mode="On" defaultRedirect="Ch11-7error.htm"> <error statusCode="404" redirect="NotFoundError.htm"/> </customErrors> </system.web> </configuration>
52
11-8 ASP.NET 2.0的網站設定工具 Web介面的網站管理工具 ASP.NET設定工具
53
Web介面的網站管理工具 在Visual Web Developer提供Web介面的ASP.NET網站管理工具。請啟動VWD開啟Web網站,例如:「Ch11」網站,然後執行「網站/ASP.NET組態」指令,可以開啟瀏覽程式進入Web介面管理工具,如下圖所示:
54
ASP.NET設定工具 如果電腦有安裝IIS,在安裝.NET Framework 2.0版後,就會在Internet Information Services管理工具新增ASP.NET設定工具。 請啟動Internet Information Services管理工具,在網站虛擬目錄上,執行右鍵快顯功能表的【內容】指令,可以看到「內容」對話方塊。 在【ASP.NET】標籤,按【編輯組態】鈕,可以看到ASP.NET組態設定工具,如下圖所示:
Similar presentations