BÀI 5 : CÁC ĐỐI TƯỢNG VÀ QUẢN LÝ TRẠNG THÁI
3. Đối tượng Server
Đối tượng Server thể hiện các phương thức tiện ích đa dạng để chuyển đổi điều khiển giữa các trang, giải mã HTML text, nhận thông tin lỗi, … Đối tượng Server thuộc lớp HttpServerUtility thuộc không gian miền System.Web
- Lớp HttpServerUtility cung cấp các phương thức cho các tác vụ như tiến trình xử lý các u cầu, mã hóa và giải mã các chuỗi URL, truy cập các thông tin lỗi,…
Lớp HttpServerUtility cung cấp hai thuộc tính:
+ MachineName: Trả về tên Server mà ứng dụng đang chạy. Public ReadOnly PropertyMachineName() AsString
+ ScriptTimeout: Lấy hoặc thiết lập thời gian (tính bằng giây) mà một Request timeout đã xác định.
Public PropertyScriptTimeout() AsInteger
Ví dụ:
Response.Write("Time Out:" + Server.ScriptTimeout.ToString) Một số phương thức của lớp HttpServerUtility thường được sử dụng đó là:
+ Execute: Là phương thức xử lý trang Web được chỉ định trên ngữ cảnh (context) của current Request.
Public SubExecute(ByValpathAsString)
path: Là URL path cần được thực thi.
+ HtmlEncode: Là phương thức mã hóa chuỗi ký tự để hiển thị trên trình duyệt. Có hai dạng hàm:
Public Function HtmlEncode(ByValsAs String) As String Dùngđể mã hoá chuỗi s và trả về chuỗi đã mã hóa.
str = "Xin chào </br>"
strE = Server.HtmlEncode(str) Response.Write("Bản gốc:" + str) Response.Write("Bản mã:" + strE)
Public Sub HtmlEncode(ByVal s As String, ByVal output As System.IO.TextWriter)>> Dùngđể mã chuỗi s và trả về chuỗi đã mã hóa cho output.
Ví dụ:
Dim out As New System.IO.StreamWriter("E:\Test.txt") Server.HtmlEncode("Xin chao <Message>", out) Server.HtmlDecode("Xin chao <Message>", out) out.Flush()
+ MapPath: Là một hàm trả về đường dẫn vật lý.
Public Shared FunctionMapPath(ByValvirtualPathAsString) AsString
Ví dụ: Response.Write(Server.MapPath("\Testing")) + UrlEncode: Là phương thức mã hóa chuỗi URL: Public Function UrlEncode(ByVal s As String) As String
Public Sub UrlEncode(ByVal s As String, ByVal output As System.IO.TextWriter)
2.2.4. Đối tượng Application
Đối tượng Application được sử dụng để tham chiếu đến thể hiện của lớp HttpApplicationState. Application State (trạng thái ứng dụng) lưu trữ toàn bộ thông tin sử dụng qua lại giữa nhiều phiên giao dịch (Session) và các yêu cầu (request). Đối tượng Application nắm hầu hết các thông tin được sử dụng cho nhiều trang của ứng dụng.
Lớp HtttpApplicationState thuộc không gian miền System.Web. Lần đầu tiên Client yêu cầu tài nguyên URL từ thư mục ảo của ứng dụng ASP.NET thì một thể hiện của lớp HttpApplicationState được tạo.
a) Các thuộc tính của đối tượng Application: Đối tượng Application sẽ thể hiện các thuộc tính của lớp HtttpApplicationState. Một vài các thuộc tính quan trọng của lớp này là:
- AllKeys: Truy xuất các Access Keys từ tập các trạng thái ứng dụng. Đoạn code sau minh họa cách sử dụng thuộc tính AllKeys.
DimstrKeys(Application.Count)As StringstrKeys = Application.AllKeys - Contents: truy xuất tham chiếu đến đối tượng HttpApplicationState. Application.Contents.RemoveAll()
- Count: đếm và truy xuất số các đối tượng. intObj=Application.Count
- Item: Truy xuất đến một đối tượng cụ thể trong tập hợp HttpApplicationState. Application.Item("User") ="Huongct"
Response.Write(Application("User") &"<br>") Response.Write(Application(0) &"<br>")
Chú ý: Cách truy xuất Application.Item("User") tương đương với Application("User") và tương đương với Application(0) trong đó 0 là chỉ số Index của đối tượng đầu tiên trong tập hợp.
b) Phương thức của lớp “HttpApplicationState: Sau đây là một số phương thức quan trọng của lớp HttpApplicationState:
- Add: Là phương thức thêm một đối tượng mới vào tập trạng thái ứng dụng. Public Sub Add(ByVal name As String, ByVal value As Object)
Đoạn code sau minh họa cách sử dụng phương thức Add Application.Add(“UserName”, “Huongct”)
- Clear: Là phương thức xóa tất cả đối tượng trong tập trạng thái ứng dụng. Cú pháp của phương thức Clear là:
Public Sub Clear()
Đoạn code sau minh họa cách sử dụng phương thức: Application.Clear()
- Remove: Là phương thức xóa một đối tượng chỉ định trong tập trạng thái ứng dụng. Cú pháp của phương thức là:
Public Sub Remove(ByVal name As String)
Đoạn code sau minh họa cách sử dụng phương thức: Application.Remove(“UserName”);
- RemoveAll Method: Là phương thức xóa tất cả đối tượng trong tập trạng thái ứng dụng. Cú pháp của phương thức là:
Public Sub RemoveAll()
Đoạn code sau minh họa cách sử dụng phương thức: Application.RemoveAll();
- RemoveAt Method: Là phương thức xóa một đối tượng chỉ định trong tập trạng thái ứng dụng. Cú pháp của phương thức là:
Public Sub RemoveAt(ByVal index As Integer)
Đoạn code sau minh họa cách sử dụng phương thức: Application.RemoveAt(0);
c) Phương thức “Lock” và “UnLock”
Phương thức Lock():
Khi nhiều người dùng cùng truy cập vào một ứng dụng ASP.NET, ứng dụng không thể cho phép họ đồng thời truy cập thay đổi cùng một dữ liệu. Để làm được điều này, ta cần khóa các biến dữ liệu. Phương thức Lock(), thuộc lớp HttpApplicationState, ngăn cản người dùng khác thay đổi các biến lưu trữ trong đối tượng Application. Cú pháp của phương thức Lock():
Public Sub Lock()
Phương thức UnLock():
Phương thức UnLock(), thuộc lớp HttpApplicationState, được sử dụng để mở khóa cho các biến lưu trữ trong đối tượng Application. Các biến khi đã được mở khóa thì các người dùng khác có thể thay đổi chúng.
Phương thức Lock() được mở tương ứng bởi phương thức UnLock(). Trong trường hợp không gọi phương thức UnLock(), .NET Framework tự động xóa Lock() khi Request được hoàn thành, hoặc Request đến thời gian TimeOut, hoặc khi xuất hiện ngoại lệ (Request fail).
Cú pháp của phương thức UnLock(): Public Sub UnLock()
Ví dụ: Sử dụng các phương thức trên.
Application.Lock()
Application("VisitorsCount")= Application("VisitorsCount")+1 Application.UnLock()
2.2.5. Đối tượng Session
Khi có nhu cầu truyền giá trị từ trang này sang trang khác trong một phiên làm việc, ta sử dụng đối tượng Session. Bằng các sử dụng phương thức và thuộc tính của đối tượng này. Ta có thể khởi tạo, gán giá trị, truy cập và huỷ đối tượng này trong một phiên
làm việc nhằm quản lý người sử dụng khi họ truy cập vào Web Site. Web Server sẽ tự động tạo ra đối tượng Session khi chúng chưa tạo ra, đối tượng này sẽ có chu trình sống cho đến khi một trong các điều kiện sau xảy ra:
- Người sử dụng đóng trình duyệt, tức là đóng cửa sổ cuối cùng của cùng một trình duyệt.
- Khi thời gian sống (expiry) của chúng hết hạn.
- Chúng ta khai báo huỷ bỏ đối tượng Session bằng các phương thức của chúng. Ðối tượng Session được cài đặt trong lớp HttpSessionState thuộc không gian tên System.Web.SessionState.
a) Session Variables (Các biến Session)
Các biến Session được được sử dụng để lưu trữ thông tin về phiên làm việc của một người dùng. Các thông tin này có thể sử dụng cho tất cả các trang trong ứng dụng. Thông thường, thông tin được lưu trữ trong các biến Session là UserName, Password,… Các biến Session được xóa ngay khi phiên làm việc với Website của người dùng kết thúc.
Session Variables được lưu trữ trong lớp SessionStateItemCollection thuộc không gian miền System.Web.SessionState. Các biến này được thể hiện thơng qua thuộc tính System.Web.HttpContext.Session.
- Thuộc tính SessionID: Sessions được nhận dạng bởi Session Identifiers, với giá trị duy nhất. Session Identifiers được đọc thơng qua thuộc tính SessionID. Khi trạng thái của Session được Enable, mỗi request một trang trong ứng dụng đều được kiểm tra giá trị SessionID. Nếu giá trị SessionID khơng được cung cấp thì một Session mới được khởi tạo. Sau đó SessionID được gửi cho Session tới Browse cùng với Response. Theo mặc định, giá trị của SessionID được lưu trữ trên một Cookie. Đoạn code sau minh họa sử dụng thuộc tính SessionID
Response.Write(“SessionID:“+Session.SessionID)
- Phương thức Clear: Là phương thức xóa tất cả đối tượng trong tập Session State. Cú pháp của phương thức Clear là:
Public Sub Clear()
Đoạn code sau minh họa cách sử dụng phương thức: Session.Clear()
- Phương thức Remove: Là phương thức xóa một đối tượng chỉ định trong tập Session State. Cú pháp của phương thức là:
Public Sub Remove(ByVal name As String)
Đoạn code sau minh họa cách sử dụng phương thức: Session.Remove(“UserName”);
- RemoveAll: Là phương thức xóa tất cả đối tượng trong tập Session State. Cú pháp của phương thức là:
Public Sub RemoveAll()
Đoạn code sau minh họa cách sử dụng phương thức: Session.RemoveAll();
- RemoveAt: Là phương thức xóa một đối tượng chỉ định trongtập Session State. Cú pháp của phương thức là:
Public Sub RemoveAt(ByVal index As Integer)
Đoạn code sau minh họa cách sử dụng phương thức: Session.RemoveAt(0);
c) Session State Events
ASP.NET 2.0 cung cấp 2 sự kiện cho phép quản trị Session đó là: - Session_OnStart Event
- Session_OnEnd Event
d) File “Global.asax”
Global.asax file được xem như là file ứng dụng ASP.NET. File này chứa code cho việc trả lời ứng dụng hoặc các modul sự kiện trong một vị trí trung tâm. File Global.asax là file lựa chọn, nó được tạo chỉ khi nếu cần điều điều các sự kiện của ứng dụng hoặc Session.
2.2.6. Cookies
a) Tạo và đọc Session Cookies
Một Session được định nghĩa là một khoảng thời gian bắt đầu và kết thúc tương tác của người dùng với ứng dụng. Các thông tin của Session như Login, Logout và các trang được viếng thăm được lưu trữ trên file temporary, được gọi là Session Cookies.
Một Cookie là một file temporary (tạm) hoặc file permanent (thường xuyên) được sử dụng bởi ứng dụng Web để lưu trữ thông tin người sử dụng. Các Session Cookies có một khoảng thời gian giới hạn, quá thời hạn đó người dùng phải Login lại.
Một Session Cookie có thể xem như là một cookie tạm thời. Session Cookies được lư trữ tạm trên bộ nhớ. Khi trình duyệt bị đóng, các session cookies này khơng được giữ lại. Do đó, lần tiếp theo, người dùng này viếng thăm cùng một site thì anh ta được đối sử giống như một người khách mới.
Thay vì tập hợp các thơng tin từ máy tính của người sử dụng, session cookies thường được sử dụng cho các ứng dụng Web mà trong đó các người dùng cần được nhận dạng để họ có thể di chuyển từ trang này sang trang khác.
Ví dụ sau minh họa cách tạo và đọc Session Cookie: protected void btnAdd_Click(object sender, EventArgs e) { Response.Cookies["Login"]["User"] = txtUser.Text; }
protected void btnView_Click(object sender, EventArgs e) {if (Request.Cookies["Login"] == null)
{Response.Write("Không Cookies");} else
{Response.Write("Thông tin Cookies:" + Request.Cookies["Login"]["User"]);
}}
b) “Persistent” Cookies
Xét các trang Login của các dịnh vụ e-mail phổ biến như Hotmail và Yahoo mail. Khi bạn Login vào mail thì bạn được nhắc có lưu thơng tin login trên máy tính khơng, nếu bạn chọn Yes thì các thông tin này được lưu trữ trên Cookie. Lần Login tiếp theo thì các thơng tin này sẽ được tự động xuất hiện tương ứng đúng vị trí.
Các Cookies lưu trữ thơng tin mà được ghi nhớ thông qua nhiều phiên giao dịch được gọi là Persistent Cookies (Cookie bền).
Persistent Cookies được xem như là các cookies thường xuyên hay các cookies lưu trữ. Các Persistent Cookies có thời gian sống (Expiry date) và được lưu trữ trên đĩa cứng của người sử dụng cho đến khi hết thời gian sống hoặc cho đến khi được xóa thủ cơng.
Ví dụ sau minh họa cách tạo Persitent Cookie:
HttpCookie userInfoCookie=new HttpCookie("UserInfo");
userInfoCookie.Values["UserName"]="Huongct"; userInfoCookie.Values["LastVisit"] = DateTime.Now.ToString(); userInfoCookie.Expires = DateTime.Now.AddDays(15); Response.Cookies.Add(userInfoCookie); // Đọc Cookies if (Request.Cookies["UserInfo"] == null)
{Response.Write("Không Persitent Cookies ");} else
{Response.Write("Persitent Cookies :" + Request.Cookies["UserInfo"]["UserName"]); }
2.3. Biến và các cấu trúc điều khiển:
.NET Framework cung cấp nhiều ngôn ngữ lập trình khác nhau, mỗi một ngơn ngữ có cách khai báo biến và cấu trúc điều khiển khác nhau. Trong giáo trình này ta sử dụng Visual Basic.NET để minh họa.
2.3.1. Khai báo biến
Ta thực hiện khai báo biến theo cú pháp sau:
Dim <Tên biến> AS <Kiểu dữ liệu>
Trong trang ASP.NET, theo mặc định biến phải được khai báo trước khi được sử dụng. Ta có thể khơng khai báo biến mà vẫn sử dụng chúng trong trang ASP.NET bằng cách gán giá trị false (mặc định là true) cho Page Explicit theo
cú pháp sau: <%@ Page Explicit=False%>
Các kiểu biến được cho trong bảng sau:
CLR (Common Language
Runtime) Type Visual Basic Type C# Type
Boolean Boolean bool
Byte Byte byte
Char Char char
DateTime Date DateTime
Decimal Decimal decimal
Double Double double
Int32 Integer int
Int64 Long long
Object Object Object
SByte SByte sbyte
Int16 Short short
Single Single float
UInt32 UInteger uint
UInt64 ULong ulong
UInt16 UShort ushort
Để chuyển đổi kiểu dữ liệu ta sử dụng:
- Hàm Ctype theo có pháp sau: CType(expression,typename)
Trong đó expressionlà biểu thức cần chuyển đổi sang kiểu typename. - Sử dụng phương thứcParsecủa hầu hết các kiểu dữ liệu: Dim Age As Integer
Age = Integer.Parse(AgeTextBox.Text)
- Trong trường hợp chuyển đổi sang kiểu chuỗi ta sử dụng theo phương thức ToString() theo cú pháp sau:
DiminstanceAs AppDomain DimreturnValueAs String
returnValue=instance.ToString
2.3.2. Các cấu trúc điều khiển a) Cấu trúc rẽ nhánh If…Then
Ta sử dụng cấu trúc If …Then theo một trong các cú pháp sau: - If condition Then [statement]
-If condition Then [statements] End If -If condition Then [statements]
[ElseIf elseifcondition Then
[elseIfStatements]] [Else [elseStatements]] End If
Trong đó:
+ condition: Là biểu thức điều kiện, trả về giá trị True hoặc False.
+ statement: Là một câu lệnh được thực hiện khi biểu thức điều kiện condition nhận giá trị True.
+ statements: Là một câu lệnh, hoặc nhiều câu lệnh được thực hiện khi biểu thức điều kiện condition nhận giá trị True.
+ elseifcondition: Tương tự như condition.
+ elseifstatements: Là một câu lệnh được thực hiện khi biểu thức điều kiện elseifcondition nhận giá trị True.
+ elsestatements: Là các câu lệnh được thực hiện khi tất cả các biểu thức điều kiện là false.
Chú ý:Ta có thể sử dụng khối các câu lệnh if lồng nhau.
Ví dụ.Sử dụng cấu trúc rẽ nhánh If…Then <scriptrunat="server">
Protected Sub Page_Load(ByVal sender As Object,ByVal e As System.EventArgs) Dimx, y, aAs Integer
x = 25 y = 5
Ifx < yThena = y - x Else
End If
Response.Write("Trị tuyệt đối của x-y: "& a) End Sub
</script>
b) Cấu trúc rẽ nhánh Select Case…
Select [ Case ]testexpression
[ Caseexpressionlist
[statements] ] [ Case Else [elsestatements] ]
End Select Trong đó:
+ testexpression: Là biểu thức giá trị có thể liệt kê được, giá trị thuộc một trong các loại dữ liệu sau: Boolean, Byte, Char, Date, Double, Decimal, Integer, Long, Object, Short, Single, String.
+ expressionlist: Là danh sách các giá trị mà testexpression có thể nhận, có
thể là hằng hoặc biểu thức, chúng cách nhau dấu. Biểu thức trong Case có nhận một trong các dạng sau:
expression1 To expression2
[Is]comparisonoperator expression expression
Từ khóa To để chỉ một khoảng giá trị, Is dùng để so sánh. Ví dụ như: Case 1 To 4,5,6,7 To 9,11,13, Is > MaxNumber
+ statements: Một hay nhiều câu lệnh trong Case.
+ elsestatements: Một hay nhiều câu lệnh trong Case Else.
c) Cấu trúc lặp Do …Loop
Lặp lại một khối câu lệnh trong khi biểu thức điều kiện là True hoặc cho đến khi điều kiện đạt giá trị True. Ta sử dụng cú pháp sau:
Do { While | Until } condition
[statements] [ Exit Do ] [statements] Loop hoặc Do [ statements ] [ Exit Do ] [ statements ] Loop { While | Until } condition
Trong đó:
+ While: được khai báo trừ khi Untilđược sử dụng. Lặp cho đến khi
conditionlà False.
+ Until: được khai báo trừ khi Whileđược sử dụng. Lặp cho đến khi
conditionlà True.
+ condition: Là biểu thức Boolean.
+ statements: Là một câu lệnh hoặc khối câu lệnh lặp lại. + Exit Do: Là câu lệnh thốt khỏi vịng lặpDo loop.
d) Cấu trúc While … End While
Cấu trúc này lặp một khối câu lệnh trong khi điều kiện là True, theo cú pháp sau. While condition [ statements ] [ Exit While ] [ Statements ] End While Trong đó:
+ condition: Là biểu thức Boolean.
+ statements: Là một câu lệnh hoặc khối câu lệnh lặp lại. + Exit While: Dùng để thốt khỏi vịng lặp.
Ví dụ :Sử dụng cấu trúc While… End While <scriptrunat="server">
Protected SubPage_Load(ByValsenderAs Object,ByValeAsSystem.EventArgs) DimcounterAs Integer= 0
Whilecounter < 10 counter += 1
Response.Write(counter.ToString &"<BR>") End While
End Sub </script>
e) Cấu trúc With … End With
Cấu trúc With … End With được dùng thực hiện với một chuỗi câu lệnh cùng tham chiếu đến một đối tượng hoặc cấu trúc. Sử dụng theo cú pháp sau:
Withobject
[statements] End With
Ví dụ:Sử dụng cấu trúc With… End With <%@PageLanguage="VB"%>
<scriptrunat="server">
Protected SubPage_Load(ByValsenderAs Object,ByValeAsSystem.EventArgs) With Me.lblLabel
.Text ="Cấu trúc With ...End With" .ForeColor = Drawing.Color.Blue .BorderColor = Drawing.Color.Violet .BackColor = Drawing.Color.BlueViolet End With End Sub </script> <htmlxmlns="http://www.w3.org/1999/xhtml" > <headrunat="server"> <title>Untitled Page</title> </head> <body>
<formid="form1"runat="server">
<div>
<asp:LabelID="lblLabel"runat="server"Text="My lable" BorderColor="Violet"></asp:Label></div>
</form> </body> </html>
f) Cấu trúc lặp For Each …Next
Cấu trúc lặp For Each …Next dùng để lặp các câu lệnh đối với mỗi phần tử element trong một tập hợp group. Chúng được sử dụng theo cú pháp sau:
For Eachelement[ Asdatatype] Ingroup
[statements] [ Exit For ] [statements]
Next [element] Trong đó:
+ element :là biến dùng để duyệt các phần tử trong một tập hợp.
+ datatype : Kiểu của element và phải được khai báo nếu chưa khai báo trước đó, kiểu của nó cùng kiểu với các phần tử của tập hợp.
+ group :Chỉ một tập hợp các phần tử mà các câu lệnh lặp trên đó. + statements :Một hoặc nhiều câu lệnh.
+ Exit For :Dùng để thốt khỏi vịng lặp For Each
g) Cấu trúc lặp For …Next
Đây là cấu trúc lặp chỉ định được số lần lặp, được sử dụng theo cú pháp sau đây: Forcounter[ Asdatatype] =startToend
[ Stepstep] [statements] [ Exit For ]
[statements] Next [counter] Trong đó:
+ counter:Đây là biến đếm điều khiển q trình lặp.