I. File Global.asa
b. Session.StaticObjects hoặc Session.StaticObjects(Key)
5.5. Đối tợng Application
Một ứng dụng bao gồm các file có thể truy nhập thông qua một th mục ảo xác định và các th mục con của nó.
Đối tợng Application thể hiện toàn bộ một ứng dụng ASP. Chúng ta có thể sử dụng ứng dụng này để chia sẻ thông tin cho tất cả các ng- ời dùng trong một ứng dụng.
Đối tợng Application đợc bắt đầu khi có một yêu cầu đầu tiên một trang web bất kỳ từ th mục ảo tại Web server và tồn tại cho đến khi Webserver ngừng hoạt động.
Thuộc tính của đối tợng Application bao gồm Application.Contents Collection và Application.StaticObjects Collection
* Thuộc tính Contents
Khi muốn khởi tạo đối tợng Application và gán giá trị, ta sử dụng cú pháp sau:
Application.Contents("key")=Value
Ví dụ 5.5.1. Khai báo đối tợng Application có tên là Counter để đếm số ngời truy cập và khởi tạo giá trị này bằng 0 trong tập tin Global.asa
Sub Application_OnStart()
Application("CurrentUser")=0
Application.Contents("Counter")=0 End Sub
Sau đó mỗi lần ngời sử dụng mở mới một trình duyệt (một phiên làm việc mới đợc tạo ra) tăng giá trị đối tợng này 1.
Sub Session_OnStart()
Application("CurrentUser") = Application("CurrentUser") +1
Application.Contents("Counter")=Application.Conten ts("Counter")+1
//Response.Write "New Session is created" End Sub
Ví dụ 5.5.2.
<% Application("name") = "Application Maker" Application("publishdate") = "05/15/01"
Application("author") = "DevGuru" Set Application("Obj1") =
Server.CreateObject("ADODB.Connection") For Each Item in Application.Contents
If IsObject( Application.Contents(Item)) Then
Response.Write Item & " is an object.<BR>"
Else
Response.Write Item & "=" & Application.Contents(Item) & "<BR>" End If Next %> Kết quả: name=Application Maker publishdate=05/15/01 author=DevGuru OBJ1 is an object Ph
ơng thức của tập hợp Contents
• Application.Contents.Remove (Name|Integer) Loại bỏ mục nào đó trong collection
Application.Contents
• Name chỉ ra tên mục sẽ xoá, bao bằng cặp dấu nháy.
• Integer chỉ ra vị trí mục trong collection sẽ đợc xoá.
Giá trị này bắt đầu từ 1
Ví dụ 5.5.3.
<%
Application("name") = "Application Maker" Application("publishdate") = "05/15/01" Application("author") = "DevGuru" Set Application("Obj1") = Server.CreateObject("ADODB.Connection") Application.Contents.Remove(1) Application.Contents.Remove("publishdate") For Each Item in Application.Contents
If IsObject(Application.Contents(Item)) Then Response.Write Item & " is an object.<BR>" Else
Response.Write Item & "="
&Application.Contents(Item) & "<BR>" End If
Next %>
Kết quả:
author=DevGuru Obj1 is an object.
• Application.Contents.RemoveAll
Loại bỏ tất cả các mục trong collection Application.Contents
Thêm cặp dấu ngoặc () <
%Application.Contents.RemoveAll( )%> * Thuộc tính StaticObjects
Tập thuộc tính StaticObjects chứa đựng tất cả các đối tợng đợc tạo bằng thẻ <Object> trong phạm vị đối tợng Application với cú pháp nh sau:
Application.StaticObjects(key)
Ta có thể sử dụng Collection để lấy giá trị chỉ định của một thông tin cho đối tợng hay truy cập đến nhiều thuộc tính bằng vòng lặp trên tất cả các đối tợng.
Ví dụ 5.5.4. Truy cập thuộc tính StaticObjects.
<html> <head>
<title> Welcome to My Web </title> </head>
<body>
<h4>Application Object</h4> <hr size=1 color=red><br> <table border=0>
<tr><td><b>Application.StaticObjects</b></td></tr >
<%
Dim strKey
For Each strKey In Application.StaticObjects
Next %>
</table> </body> </html>
Ví dụ 5.5.5. Truy cập thuộc tính StaticObjects.
---Global.asa---
<OBJECT RUNAT=Server SCOPE=Application ID=MyInfo
PROGID="MSWC.MyInfo"> </OBJECT>
<OBJECT RUNAT=Server SCOPE=Application
ID=MyConnection PROGID="ADODB.Connection"> </OBJECT>
<OBJECT RUNAT=Server SCOPE=Application
ID=MyADRot PROGID="MSWC.ADRotator"> </OBJECT>
---File.asp---
<%
For Each Item In Application.StaticObjects Response.Write Item & "<BR>"
Next %> Kết quả: MyInfo MyConnection MyADRot
5.5.2. Sự kiện
ứng với hai hoạt động bắt đầu và kết thúc một đối tợng Application ta có hai sự kiện trong đối tợng Application, đó là : Application_OnStart ( khởi tạo các thông tin phục vụ cho một ứng dụng khi ứng dụng bắt đầu) và Application_OnEnd ( đợc kích hoạt khi ứng dụng kết thúc )
Cú pháp của sự kiện Application_OnStart:
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnStart
' Nơi chèn đoạn Script cần thiết cho việc khởi tạo một ứng dụng End Sub
Sub Application_OnEnd
' Nơi chèn đoạn Scipt cần thiết cho việc kết thúc một ứng dụng End Sub
</SCRIPT>
Chú ý. Phải khai báo ngôn ngữ script đợc sử dụng trong các đoạn script sự kiện trong dòng đầu tiên của file global.asa
• Các đối tợng của ASP trong phần này chỉ có SERVER và APPLICATION
---Global.asa---
<script Language="VBScript" RUNAT=Server>
Sub Application_OnEnd() End Sub Sub Application_OnStart() Application("NumSession") = 0 Application("NumVisited") = 0 Session.Timeout = 10 End Sub Sub Session_OnEnd() Application("NumSession") = Application("NumSession") - 1 End Sub Sub Session_OnStart() Application("NumSession") =
Application("NumSession") + 1 Application("NumVisited") = Application("NumVisited") + 1 End Sub </script> ---File1.asp---
<% Response.Write "You are " &
Application("NumSession") & " of " & Application("NumVisited") & " users."%>
Kết quả:
You are 1 of 1 users. 5.5.3. Phơng thức
Vì đối tợng Application có thể đợc chia sẻ thông tin giữa các ngời dùng do đó để đảm bảo những ngời dùng đó không thể cùng một lúc thay đổi nội dung của một biến trong đối tợng Application nó có hai phơng thức là Lock và Unlock.
Phơng thức
ý nghĩa
Lock
Phơng thức Lock ngăn cản các client khác cùng một lúc thay đổi giá trị của một biến do đối tợng Application lu trữ
Unlock Phơng thức Unlock cho phép các client có thể sửa đổicác thuộc tính của đối tợng Application .
* Phơng thức Lock
Phơng thức dùng để ngăn chặn ngời sử dụng thay đổi giá trị của biến lu trong đối tợng Application và đảm bảo rằng chỉ một ngời sử dụngtại thời điểm đó có thể truy cập và cập nhật đối tợng này.
Application.Lock()
Nếu ta không gọi phơng thức Unlock ngay sau đó, Server sẽ không cho phép ngời sử dụng khai thác cập nhật giá trị trên những
đối tợng Application đã bị khoá cho đến khi kết thúc phiên làm việc hay hết thời gian sử dụng.
* Phơng thức UnLock
Phơng thức Unlock dùng để phục hồi lại những đối tợng Application đã bị khoá trớc đó bằng phơng thức Lock, nhằm cho phép nhiều ngời sử dụng có thể thay đổi giá trị của biến lu trong đối tợng này và bảo đảm rằng có nhiều ngời sử dụng tại thời điểm đó có thể truy cập và nhập nhật đối tợng này.
Application.UnLock() 5.6. Đối tợng Server
Cho phép truy nhập tới các phơng thức và thuộc tính trên máy chủ. Tập hợp Thuộc tính Phơng thức
ScripTimeOut -- CreateObjectHTMLEncode
- MapPath
- URLEncode
Cú pháp:
Server.Thuộc tính|Phơng thức
5.6.1. Thuộc tính ScriptTimeout
Server.ScriptTimeout
Đó là thời gian tối đa để trang script chạy trên máy chủ. Nếu không đặt giá trị cho thuộc tính này thì giá trị mặc định của nó là 90 giây.
Nếu script nhập vào một vòng lặp vô hạn thì server sẽ kết thúc script đó để tránh bị overload bởi việc chạy liên tục các tiến trình sinh ra. Thời gian trớc khi script bị kết thúc đợc định nghĩa bởi thuộc tính này.
<% Server.ScriptTimeout = 150 %>
<% timeout = Server.ScriptTimeout %> 5.6.2. Phơng thức
Phơng thức ý nghĩa
CreateObject Tạo một thể hiện của đối tợng cụ thể trên Server
Execute Cho phép gọi trang ASP khác trong một trang ASP
GetLastError Mô tả đối tợng lỗi ASP, chỉ có ý nghĩa trớc khi file asp gửi nội dung tới Client
HTMLEncode Gắn một đoạn mã HTML vào một xâu đã đợc định dạng.
MapPath Xác định đờng dẫn vật lý trên máy chủ khi xét đết đờng dẫn ảo.
Transfer Chuyển tới trang ASP khác từ một trang ASP. Thông tin trạng thái hiện tại trong trang đầu tiên sẽ đợc chuyển tới trang thứ hai
URLEncode Cho phép gắn một đoạn mã URL
* Phơng thức CreateObject
Phơng thức này (không có gía trị trả về) dùng để tạo đối tợng thành phần trên Server với cú pháp.
Server.CreateObject(progId)
Trong đó, tham số Progid chỉ định loại đối tợng cần tạo với định dạng Vendor.]Component[ .Version].
Chẳng hạn, ta tạo đối tợng ADODB. Connection,
ADODB.RecordSet, MSWC.AdRotator,... nh sau: <% Set myAd=Server.CreateObject(MSWC.AdRottator) Set myCon=Server.CreateObject(ADODB.Connection) Set myRst=Server.CreateObject(ADODB.RecordSet)
%>
Chẳng hạn đoạn mã sau dùng để kết nối CSDL <% Set myconn =
Server.CreateObject("ADODB.Connection") %> Chẳng hạn, ta sử dụng phơng thức này để khởi tạo đối tợng
Scripting.FileSystemObject đọc danh sách tập tin trong
mục của ứng dụng Web nh ví dụ 5.6.1.
Ví dụ 5.6.1. Sử dụng phơng thức CreateObject
<html> <head>
<title> Welcome to My Web </title> </head>
<body>
<h4>Server Object</h4> <hr size=1 color=red><br> <table border=1> <tr class=text> <td>FileName</td><td>DateCreated</td> <td>Size</td></tr> <% Dim fs,f,ff,path Set fs = Server.CreateObject("Scripting.FileSystemObject") path=request.ServerVariables("APPL_PHYSICAL_PATH") Set f = fs.GetFolder(path) set ff = f.files
For Each FileName In ff %>
<tr class=text>
<td><%= FileName.DateCreated%></td> <td><%= formatnumber(FileName.size,1)%></td></tr> <%next%> </td></tr> </table> </body> </html>
Khi gọi trang CreartObject.asp trên trình duyệt, ta sẽ nhận đợc danh sách các tập tin trong th mục ứng dụng Web nh sau
* Phơng thức Execute
Phơng thức Execute (không có giá trị trả về) dùng để gọi một tập tin .asp và xử lí nó nh một phần của kịch bản ASP với cú pháp nh sau:
Server.Execute(Path)
trong đó, tham số Path là đờng dẫn và tên tậo tin asp cần thực thi. Nói cách khác, phơng thức Execute tơng tự nh gọi thủ tục trong nhiều ngôn ngữ lập trình khác.
* Phơng thức HTMLEncode
Phơng thức HTMLEnCode dùng để mã hoá HTML thành chuỗi với cú pháp nh sau:
Khi mã hoá chuỗi HTML sang chuỗi bình thơng nếu gặp các ký tự nh sau sẽ chuyển sang các ký tự tơng ứng:
- Ký tự < chuyển thành <
- Ký tự > chuyển thành >
- Ký tự & chuyển thành &
- Dấu nháy đôi " chuyển thành "
Khi ta khai báo một thẻ TextArea cho phép ngời sử dụng nhập đoạn mã có thẻ HTML bên trong nội dung, sau khi ngời sử dụng nhấn nút Submit sang trang kế tiếp, thay vì trình bày nội dung đó trên màn hình, chúng xuất hiện thẻ HTML trên trang Web.
Để xem chuỗi nhập có thẻ HTML trình bày nh những gì ta khai báo trên trang Web, ta phải sử dụng phơng thức HTMLEncode.
Ví dụ
<% Response.Write Server.HTMLEncode("The tag for a table is: <Table>")%>
Kết quả:
The tag for a table is: <Table> Kết quả ở Browser:
The tag for a table is: <Table>
* Phơng thức MapPath
Phơng thức MapPath ánh xạ đờng dẫn ảo thành đờng dẫn vật lý cho một tập tin trên Server với cú pháp nh sau:
Server.MapPath(path)
trong đó, tham số path là chuỗi thực hiện đờng dẫn tơng đối của tập tin trên ứng dụng Web, phơng thức sẽ trả về chuỗi hiện thực đờng dẫn vật lý của tập tin đó.
Phơng thức này không kiểm tra sự tồn tại thực sự của đờng dẫn. Nếu bắt đầu bằng dấu / hoặc \ → đờng dẫn ảo. Còn không bắt đầu bằng ký tự đó → đờng dẫn tơng đối.
Ví dụ 5.6.2.
<html> <head>
<title> Welcome to My Web </title> </head>
<BODY>
The path of this file is <% Response.Write Server.MapPath("test.asp")%>
The path of the file1 is <% Response.Write Server.MapPath("\test.asp")%>
The path of the file2 is <% Response.Write Server.MapPath("test\test.asp") %>
The path of the file3 is <% Response.Write Server.MapPath("\") %>
</BODY> </HTML>
Kết quả:
The path of this file is C:\VANBANG2\ASP\Example\test.asp The path of the file1 is d:\inetpub\wwwroot\test.asp
The path of the file2 is C:\VANBANG2\ASP\Example\test\test.asp The path of the file3 is d:\inetpub\wwwroot
* Phơng thức Transfer
Phơng thức transfer gửi tất cả các thông tin mà nó đã xử lý từ trang ASP hiện hành sang trang ASP khác với cú pháp nh sau:
Server.Transfer(path)
Trong đó, tham số Path là đờng dẫn của tập tin ASP cần chuyển điều khiển. Ví dụ, chúng ta khai báo ttrang ASP có sử dụng phơng thức Transfer nh ví dụ 5.6.2.
Ví dụ 5.6.3: Sử dụng phơng thức Transfer. <html>
<title> Welcome to HuuKhang.com </title>
</head> <body>
<h4>Server Object</h4> <hr size=1 color=red><br> <b>Server.Transfer</b> <table border=0>
<tr>
<td valign=top>Transfer</td></tr>
<tr><td valign=top>Request.QueryString: <%=Request.QueryString("i")%></td></tr> <tr><td> <%=Server.Transfer("ex6-1.asp")%></td> </tr> </table> </body> </html> Ví dụ 5.6.4: ---CallingAsp.asp--- <%
Application("name") = "Application Maker" Application("publishdate") = "05/15/01" Application("author") = "DevGuru" Set Application("Obj1") = Server.CreateObject("ADODB.Connection") Server.Transfer("CalledAsp.asp") %> ---CalledAsp.asp--- <%;
Response.Write "Output from CalledAsp.asp" For Each Item in Application.Contents
If IsObject( Application.Contents(Item)) Then Response.Write Item & " is an object.<BR>"
Response.Write Item & "=" & Application.Contents(Item) & "<BR>" End If Next %> Kết quả: Kết quả từ CalledAsp.asp name=Application Maker publishdate=05/15/01 author=DevGuru OBJ1 is an object. * Phơng thức URLEncode
Tơng tự nh phơng thức HTMLEncode, phơng thức URLEncode để dùng mã hoá URL thành chuỗi với cú pháp nh sau:
Server.URLEncode(str)
Khi mã hoá chuỗi URL sang chuỗi bình thờng nếu gặp các ký tự nh sau, sẽ chuyển sang ký tự tơng ứng:
- Ký tự khoảng trắng chuyển thành dấu +
- Ký tự không thuộc ký tự chữ và số sẽ chuyển thành số Hexadecimal. Ví dụ: <% Response.Write Server.URLEncode("http://www.issi.net")%> Kết quả: http%3A%2F%2Fwww%2Eissi%2Fnet
Khi ta gửi lên QueryString chuỗi có các thẻ HTML hay các ký tự đặc biệt khi gọi trang Web, chuỗi này có thể hiển thị dới dạng thẻ HTML thay vì chuỗi cần trình bày. Chẳng hạn, ta khai báo trang ex7.asp nh ví dụ 5.6.3 bằng cách sử dụng đối tợng Request để lấy giá trị từ tham số Str trên URL.
Ví dụ 5.6.3. Lấy giá trị từ QueryString: <html>
<title> Welcome to HuuKhang.com </title> </head>
<body>
<h4>Server Object</h4> <hr size=1 color=red><br> <b>Server.URLEncode</b> <table border=0>
<tr>
<td valign=top>URLEncode</td></tr> <tr><td valign=top>Str: <%=Request.QueryString("str")%></td></tr> </table> </body> </html> * Phơng thức Execute
Cho phép gọi trang ASP khác trong một trang ASP. Khi trang đ- ợc gọi tới hoàn thành các công việc của nó, sẽ trở lại tiếp tục thực hiện trang ASP gọi tới nó. Hiệu quả giống nh các hàm, thủ tục (subroutines). Phơng pháp có hiệu quả tơng tự include.
Server.Execute(Path)
Trong đó, tham số Path là đờng dẫn tơng đối hoặc vật lý của tập tin ASP cần chuyển điều khiển. Toàn bộ xâu này đợc đặt trong dấu nháy.
Ví dụ 5.6.4:
---CallingAsp.asp--- <HTML>
<BODY>
How now <%Server.Execute("CalledAsp.asp") %> cow?
</BODY> </HTML>
---CalledAsp.asp---
<%
Response.Write "pink" %>
Kết quả :
How now pink cow?
* Phơng thức GetLastError
Trả lại đối tợng ASPError, đối tợng này có 9 thuộc tính chỉ đọc cung cấp thông tin chi tiết về lỗi.
Server.GetLastError Ví dụ 5.6.5:
<%
Dim objErrorInfo
Set objErrorInfo = Server.GetLastError Response.Write("ASPCode = " & objErrorInfo.ASPCode) Response.Write("ASPDescription = " & objErrorInfo.ASPDescription) Response.Write("Category = " & objErrorInfo.Category) Response.Write("Column = " & objErrorInfo.Column) Response.Write("Description = " & objErrorInfo.Description) Response.Write("File = " & objErrorInfo.File) Response.Write("Line = " & objErrorInfo.Line) Response.Write("Number = " & objErrorInfo.Number) Response.Write("Source = " & objErrorInfo.Source) %>
Phần 3. ASP và Cơ sở dữ liệu