第11章 ASP.NET的Web應用程式 11-1 ASP.NET應用程式的基礎 11-2 Global.asax檔的使用

Slides:



Advertisements
Similar presentations
本章要点: 掌握HttpRequest对象的应用。 掌握HttpResponse对象的应用。
Advertisements

《计算机网络技术》 asp.net 程序设计 文本类控件 笪静.
Chapter 7 網頁應用程式與狀態管理.
Ch03 VB.NET語法建立ASP.NET 網頁程式設計.
《ASP.NET数据库网站设计教程(C#版)》
發佈ASP.NET 建國科技大學 資管系 饒瑞佶 2016/1 V1.
CH11.
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
LINQ 建國科技大學 資管系 饒瑞佶.
第16章 Windows Form與資料繫結 16-1 資料繫結的基礎 16-2 在專案新增資料來源 16-3 使用資料來源建立單筆編輯表單
Q101 在701 SDX Linux上的標準安裝與使用程序v2
客戶端的檔案上傳 HtmlInputFile檔案控制項 上傳單一檔案 同時上傳多個檔案.
Working with Databases (II) 靜宜大學資管系 楊子青
Google Data API Spreadsheet
Controls.
ASP.NET 網頁製作教本 – 從基本語法學起
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
R教學 安裝RStudio 羅琪老師.
ASP.NET基本設計與操作 建國科技大學 資管系 饒瑞佶 2007年.
第13章 網站的使用者與會員管理 13-1 網站的使用者與會員管理 13-2 ASP.NET的表單基礎驗證
網頁切換移轉 JS vs. ASP.NET.
Ch10 網頁間的資料分享: Application Session 與Cookies的處理
主 讲 教 师:陆有军 Web技术与应用 第四章 内部对象 主 讲 教 师:陆有军
第二章 SPSS的使用 2.1 啟動SPSS系統 2.2 結束SPSS系統 2.3 資料分析之相關檔案 2.4 如何使用SPSS軟體.
Java 程式設計 講師:FrankLin.
FTP檔案上傳下載 實務與運用.
課程名稱:_____________ 指導教授:_____________
XML Web Service 开发 第1章 XML Web Service 第2章 XML Web Service 体系结构
網頁切換移轉 JS vs. ASP.NET.
驗證 Authentication.
表單(Form).
Topic Introduction—RMI
VS.NET 2003 IDE.
第10章 Web應用程式的資料分享 10-1 Web應用程式的基礎 10-2 設定ASP.NET的Web應用程式 10-3 網頁間的資料分享
第4章 ASP.NET的HTTP物件、輸出入與Cookie處理
Ch20. 計算器 (Mac 版本).
Pocket Access.
第18章 個人入口網站的建立 18-1入口網站的基礎 18-2 建立網站的搜尋引擎 18-3 網頁組件的個人化功能
VB2005 DataBase Manipulation Command for Access
第 19 章 XML記憶體執行模式.
表單(Form).
網頁程式概論 建國科技大學資管系 饒瑞佶 2015/9 V1 2016/4 V2 2016/9 V3.
資料來源 2 網路過濾軟體之安裝說明 資料來源 2.
表格(HTML – FORM).
1 Session对象的特性 Session 状态对象 Session 对象常用的方法有: Session 对象常用的属性有:
IIS Internet Information Services
Google協作平台+檔案分享(FileZilla+網路芳鄰)
期末考.
Controls.
個人網路空間 資訊教育.
VS.NET 2003 IDE.
XML Web Service 开发 第1章 XML Web Service 第2章 XML Web Service 体系结构
第1章 ASP.NET基础.
利用 EditorConfig 自訂文字編輯器設定
函數應用(二)與自定函數.
編輯網頁可用那些應用程式? 記事本 Word FrontPage Dreamweaver.
程式移植.
Dreamweaver 進階網頁製作 B 許天彰.
Chapter 15 檔案存取 LabVIEW中的檔案存取函數也可將程式中的資料儲存成Excel或Word檔。只要將欲存取的檔案路徑位址透過LabVIEW中的路徑元件告訴檔案存取函數後,LabVIEW便可將資料存成Excel或Word檔;當然也可以將Excel或Word檔的資料讀入LabVIEW的程式中。
Brief Guide of FrontPage
國立台灣大學 關懷弱勢族群電腦課程 By 資訊工程 黃振修
電子郵件簡報.
連結資料庫 MYSQL.
多站台網路預約系統之 AJAX即時資料更新機制
SQLite資料庫 靜宜大學資管系 楊子青.
Chapter 4 Multi-Threads (多執行緒).
Unix指令4-文字編輯與程式撰寫.
Develop and Build Drives by Visual C++ IDE
InputStreamReader Console Scanner
Presentation transcript:

第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的網站設定工具

11-1 ASP.NET應用程式的基礎 11-1-1 ASP.NET的Web應用程式 11-1-2 網頁間資料分享的基礎 11-1-3 網頁間的資料傳遞方法

11-1-1 ASP.NET的Web應用程式 ASP.NET應用程式是一種.NET Framework應用程式,它是在Web伺服器上執行的應用程式,稱為Web應用程式。ASP.NET應用程式就是HttpApplication類別的物件,負責處理應用程式的HTTP請求。 在IIS的Web伺服器能夠將整個網站,或指定網站目錄建立成Web應用程式。IIS能夠在同一個網站建立多個Web應用程式,每一個虛擬目錄都可以建立成為Web應用程式。

11-1-2 網頁間資料分享的基礎- Session期間 ASP.NET的【Session期間】是指Web應用程式從一頁ASP.NET網頁移到其他ASP.NET網頁過程中所花費的時間,並不是指第11-4節的Session物件。 在ASP.NET是使用Sytem.Web.SessionState名稱空間的類別來管理Session期間的資訊,也就是建立Session物件來保留Session期間的資料。

11-1-2 網頁間資料分享的基礎-網站的資料分享 當使用者進入網站,如果是會員管理網站,在登入後可以取得使用者的瀏覽權限,但是伺服端並不知道目前客戶端有哪些使用者正在瀏覽,和其使用狀態。因為使用者在移至其他網頁時,使用者登入資料並不會自動傳給下一頁網頁。 資料分享主要分為兩種,如下所示: 分享給網站所有使用者:在ASP.NET程式可以使用Application變數進行分享,例如:目前線上的使用者數。 每位使用者的專屬資料:在ASP.NET程式可以使用Session變數進行分享,例如:登入使用者的權限。

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

11-1-3 網頁間的資料傳遞方法-客戶端的狀態管理 客戶端的狀態管理是將資料儲存在使用者電腦,或是直接儲存在ASP.NET程式建立的網頁中,如下表所示:

11-1-3 網頁間的資料傳遞方法-伺服端的狀態管理 伺服端的狀態管理是將資料儲存在伺服器電腦,換句話說,它會佔用Web伺服器的系統資源,如下表所示:

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

11-2-1 Global.asax檔案的架構-新增Global.asax檔案 ASP.NET的Global.asax檔案是ANSI文字檔案,使用Windows記事本或VWD都可以編輯Global.asax檔案內容。 Visual Web Developer可以新增Global.asax檔案。請啟動VWD開啟「Ch11」網站後,執行「檔案/新增/檔案」指令,可以看到「加入新項目」對話方塊。

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>

11-2-1 Global.asax檔案的架構-說明

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()事件處理程序。

11-2-2 Global.asax檔案的使用-執行順序2 當Session期間超過TimeOut屬性的設定(預設20分鐘)或執行Abandon()方法,表示Session期間結束,就觸發Session_End執行Session_End()事件處理程式,處理程序是在關閉Session物件前執行。 Web伺服器如果關機,在關閉Application物件前就會執行Application_End()事件處理程序,當然也會結束所有使用者的Session期間,和執行所有使用者的Session_End()事件處理程序。

11-3 Application物件的狀態管理 11-3-1 Application物件的基礎 11-3-2 網站的訪客計數

11-3-1 Application物件的基礎-什麼是Application物件 Application物件可以建立Application變數,它和一般程式變數不同,Application變數是一個Contents集合物件,此變數可以提供造訪網站的每位使用者一個分享資料的管道,因為Application變數允許網站每位使用者取得或更改其值。 Application物件是在第1個Session物件建立後建立,Application物件的範圍直到Web伺服器關機或所有的使用者都離線後才會刪除。

11-3-1 Application物件的基礎-Application變數的使用 Application("HitCounter") = 1234 上述程式碼將名為Hit_Counter的Application變數設為1234,此變數和ASP.NET程式變數不一樣,它是取得Contents集合物件的元素,變數名稱是字串。

11-3-1 Application物件的基礎-Application狀態管理的同步 ASP.NET應用程式的每位使用者都可以存取Application變數,使用者可以同時讀取Application變數,但是如果有一位更改資料,其他讀取資料,此時資料衝突情況就會發生,為了避免此情況,需要考慮同步問題。 在Application物件提供Lock()和Unlock()方法,可以保障在同一時間內,只允許一位使用者存取Application變數,其程式碼如下所示: Application.Lock() Application("HitCounter")= _ Application("HitCounter")+1 Application.Unlock()

11-3-2 網站的訪客計數-說明 網站的訪客計數是一種必備元件,其目的是顯示有多少位訪客曾經瀏覽網站,顯示資訊可以從開站以來的訪客數,或一段時間內的訪客數。 ASP.NET的訪客計數是在Global.asax檔案的Session_Start()事件處理程序,使用Application變數記錄訪客計數,如下所示: Application("HitCounter")= _ Application("HitCounter")+1 上述Application變數記錄目前的訪客計數,別忘了!使用Lock()和Unlock()方法。

11-3-2 網站的訪客計數-圖例

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

11-4-1 Session物件的基礎-什麼是Session物件 每一個Session物件擁有唯一的Session ID編號,在整個瀏覽ASP.NET應用程式的過程(造訪不同ASP.NET程式時),都可以存取Session物件建立的變數。 在ASP.NET的Web應用程式是使用Session ID判斷使用者是否仍在Session期間,它是直到Session物件TimeOut屬性設定時間到時(預設值20分鐘),或執行Abandon()方法後才會結束Session期間。

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"

11-4-2 目前有多少人在線上 訪客計數是歷史記錄,線上使用者數是目前的即時狀態,如果想知道目前有多少位使用者停留在網站?其最大問題是如何判斷使用者目前仍在線上,我們可以指定TimeOut屬性,以停留在網站多久時間來判斷是否為線上使用者,如下所示: Session.TimeOut = 5 上述程式碼指定值是分鐘,也就是說停留5分鐘的使用者算是目前線上的使用者,不過,Application_Start()事件處理程序並不能指定TimeOut屬性,它是位在Session_Start()事件處理程序。

11-5 Application與Session物件的使用

11-5-1 正確使用Application和Session變數 Session變數不同於Application變數,其儲存資料是使用者專屬資料,換句話說,除非是使用者相關資料,否則使用Session變數只是浪費伺服器的記憶體資源。 Session變數的目的是儲存使用者專屬資料,對於固定內容的變數,應該使用Application變數,因為Appliction變數是分享給所有使用者。

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

11-6 在網頁間傳遞Web表單內容 11-6-1 使用URL參數 11-6-2 使用Session變數 11-6-4 使用PreviousPage物件

11-6-1 使用URL參數-說明 舊版ASP的網頁間資料傳遞除了使用表單外,還可以使用URL網址參數來傳遞資料,在接收網頁是使用QueryString集合物件取得傳遞值,其優點是簡單,但問題是瀏覽程式網址欄會顯示傳遞值。 筆者準備建立擁有2個步驟的Web表單,在輸入使用者名稱和密碼後,按【下一步】鈕在第二頁ASP.NET程式顯示使用者資料。

11-6-1 使用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

11-6-1 使用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

11-6-2 使用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

11-6-2 使用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

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

11-6-3 使用Web表單的類別屬性- 步驟一 步驟一的Web表單擁有2個TextBox控制項,可以輸入使用者資料,程式開頭的Page指引指令,如下所示: <%@ Page Language="VB" ClassName="firstStepClass" %> 按【下一步】鈕執行GotoNextStep()事件處理程序,在<script>標籤的程式碼建立2個屬性UserName和Password,屬性值是TextBox控制項的Text屬性,最後GotoNextStep()程序使用Server.Transfer()方法轉址至步驟二的ASP.NET程式。

11-6-3 使用Web表單的類別屬性- 步驟二 步驟二ASP.NET程式的開頭是Reference指引,如下所示: <%@ Reference Page="Ch11-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

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"/>

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

11-7 使用web.config組態檔 11-7-1 Web組態檔的基礎 11-7-2 appSettings與connectionStrings區段的參數和連結字串 11-7-3 在sessionState區段設定Session狀態 11-7-4 globalization區段的編碼設定 11-7-5 compilation區段的編譯設定 11-7-6 customErrors區段的自訂錯誤網頁

11-7-1 Web組態檔的基礎-說明 Web組態檔web.config是ASP.NET技術Web應用程式的資源設定檔案,它是一份XML文件,內含Web應用程式相關設定的XML標籤,可以用來簡化ASP.NET應用程式的相關設定。 Web組態檔web.config是位在Web應用程式的任何目錄,子目錄如果沒有web.config檔案,就是繼承父目錄web.config檔案的相關設定;如果子目錄擁有web.config檔案,就會覆寫父目錄web.config檔案的相關設定。

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>

11-7-1 Web組態檔的基礎-標籤說明1

11-7-1 Web組態檔的基礎-標籤說明2

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>

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

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>

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>

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

11-7-6 customErrors區段的自訂錯誤網頁-說明 在<system.web>子標籤<customErrors>區段,可以設定ASP.NET程式的自訂錯誤網頁。例如:錯誤代碼HTTP 404,如下圖所示:

11-7-6 customErrors區段的自訂錯誤網頁-指定錯誤網頁 <configuration> <system.web> <customErrors mode="On“ defaultRedirect="Ch11-7error.htm"/> ……… </system.web> </configuration>

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>

11-8 ASP.NET 2.0的網站設定工具 11-8-1 Web介面的網站管理工具 11-8-2 ASP.NET設定工具

11-8-1 Web介面的網站管理工具 在Visual Web Developer提供Web介面的ASP.NET網站管理工具。請啟動VWD開啟Web網站,例如:「Ch11」網站,然後執行「網站/ASP.NET組態」指令,可以開啟瀏覽程式進入Web介面管理工具,如下圖所示:

11-8-2 ASP.NET設定工具 如果電腦有安裝IIS,在安裝.NET Framework 2.0版後,就會在Internet Information Services管理工具新增ASP.NET設定工具。 請啟動Internet Information Services管理工具,在網站虛擬目錄上,執行右鍵快顯功能表的【內容】指令,可以看到「內容」對話方塊。 在【ASP.NET】標籤,按【編輯組態】鈕,可以看到ASP.NET組態設定工具,如下圖所示: