Chuong 7-ASP Co Ban

25
Chương 7 CĂN BẢN VỀ ASP I. GIỚI THIỆU VỀ ASP I.1. Trang web động Ngôn ngữ HTML là ngôn ngữ chủ yếu để xây dựng các trang web, ngoài ra ta còn sử dụng các ngôn ngữ kịch bản để tạo nên các trang web tương tác, có thể trao đổi dữ liệu giữa client và server; nhưng những trang web này là tĩnh (static), đã được xây dựng và lưu trữ trên web server. Trong nhu cầu thường ngày, ta cần phải tra cứu một số thông tin theo nhu cầu riêng của mình như điểm thi tuyển sinh, danh bạ điện thoại trực tuyến v.v..., để giải quyết vấn đề này cần phải xây dựng các trang web có thông tin chọn lọc theo yêu cầu của client, những trang web này được gọi là các trang web động (active web page), cách khác: các trang web động không tồn taị sẵn mà chỉ được tạo ra theo yêu cầu của client. Hiện nay có nhiều môi trường để tạo ra các trang web động: CGI, ASP, JSP, PHP, ColdFusion, Perl v.v... I.2. Giới thiệu về ASP I.2.1. ASP (Active Server Page) ASP do Microsoft xây dựng, là môi trường lập trình ứng dụng phía server, hỗ trợ cho việc xây dựng các ứng dụng web. ASP không phải phải là một công nghệ độc lập, nó cho phép liên kết nhiều ứng dụng web gồm các thành phần HTML, VBScript, SQL, ADO (ActiveX Data Objects) và COM (Component Object Model) ASP được hỗ trợ mặc định khi cài đặt IIS(Internet Information Server), trong môi trường hệ điều hành khác cần thiết phải cài đặt thư viện hỗ trợ ASP như Sun Chili!Soft. Những ưu điểm và nhược điểm của ASP: Ưu điểm : Sử dụng ADO để thao tác trên cơ sở dữ liệu thuận lợi, có nhiều đối tượng dựng sẵn hỗ trợ việc lập trình dễ dàng, nhanh chóng. Đặt biệt, ASP có tính mở, nó cho phép người lập trình dùng một ngôn ngữ lập trình khác để xây dựng các component để xử dụng trong môi trường ASP. Nhược điểm : Tốc độ thực hiện chậm hơn công nghệ Java Servlet của Sun, tính bảo mật thấp vì các mã ASP đều có thể đọc được nếu người dùng có quyền truy cập vào web server 92

Transcript of Chuong 7-ASP Co Ban

Page 1: Chuong 7-ASP Co Ban

Chương 7

CĂN BẢN VỀ ASP

I. GIỚI THIỆU VỀ ASP

I.1. Trang web động

Ngôn ngữ HTML là ngôn ngữ chủ yếu để xây dựng các trang web, ngoài ra ta còn sử dụng các ngôn ngữ kịch bản để tạo nên các trang web tương tác, có thể trao đổi dữ liệu giữa client và server; nhưng những trang web này là tĩnh (static), đã được xây dựng và lưu trữ trên web server.

Trong nhu cầu thường ngày, ta cần phải tra cứu một số thông tin theo nhu cầu riêng của mình như điểm thi tuyển sinh, danh bạ điện thoại trực tuyến v.v..., để giải quyết vấn đề này cần phải xây dựng các trang web có thông tin chọn lọc theo yêu cầu của client, những trang web này được gọi là các trang web động (active web page), cách khác: các trang web động không tồn taị sẵn mà chỉ được tạo ra theo yêu cầu của client.

Hiện nay có nhiều môi trường để tạo ra các trang web động: CGI, ASP, JSP, PHP, ColdFusion, Perl v.v...

I.2. Giới thiệu về ASP

I.2.1. ASP (Active Server Page)

ASP do Microsoft xây dựng, là môi trường lập trình ứng dụng phía server, hỗ trợ cho việc xây dựng các ứng dụng web. ASP không phải phải là một công nghệ độc lập, nó cho phép liên kết nhiều ứng dụng web gồm các thành phần HTML, VBScript, SQL, ADO (ActiveX Data Objects) và COM (Component Object Model)

ASP được hỗ trợ mặc định khi cài đặt IIS(Internet Information Server), trong môi trường hệ điều hành khác cần thiết phải cài đặt thư viện hỗ trợ ASP như Sun Chili!Soft.

Những ưu điểm và nhược điểm của ASP:

Ưu điểm : Sử dụng ADO để thao tác trên cơ sở dữ liệu thuận lợi, có nhiều đối tượng dựng sẵn hỗ trợ việc lập trình dễ dàng, nhanh chóng. Đặt biệt, ASP có tính mở, nó cho phép người lập trình dùng một ngôn ngữ lập trình khác để xây dựng các component để xử dụng trong môi trường ASP.

Nhược điểm : Tốc độ thực hiện chậm hơn công nghệ Java Servlet của Sun, tính bảo mật thấp vì các mã ASP đều có thể đọc được nếu người dùng có quyền truy cập vào web server

I.2.2. Trang ASP

Trang ASP là một text file có phần mở rộng là .asp, có cấu trúc như một tệp tư liệu HTML, trong trang ASP còn các thẻ khác để nhúng các mã kịch bản để làm việc với dữ liệu như một ngôn ngữ lập trình thật sự. Khi webserver nhận được yêu cầu từ client về một trang asp, nó sẽ yêu cầu trình xử lý trang asp (ASP engine) để tạo ra một tư liệu HTML gởi về cho client.

Ngôn ngữ kịch bản mặc nhiên trong môi trường ASP là VBScript, ngoài ra có thể sử dụng các ngôn ngữ khác như Perl, Python, Jscript ... nếu webserver có cài đặt bộ xử lý ngôn ngữ này. Một trang ASP thông thường gồm có các thành phần :

Khai báo ngôn ngữ kịch bản được sử dụng :

<%@ language= ngôn_ngữ%>

Các thẻ HTML

Các script cho phía client được đặt trong cặp thẻ <Script> và </Script>

Mã chương trình được đặt trong cặp thẻ <% và %>

Với cấu trúc như vậy, ta có thể xem trang asp là một tư liệu HTML được nhúng phần xử lý viết bằng mã ASP.

Ví dụ :

92

Page 2: Chuong 7-ASP Co Ban

<%@ language = VBScript%><HTML><HEAD><TITLE> Trang ASP </TITLE></HEAD><BODY><P> Trang Web đầu tiên </P><%Response.Write(“Hôm nay ngày :” &Date())%></BODY></HTML>

I.2.3. IIS (Internet Information Server)

IIS là thành phần hạt nhân của web server, nó có nhiệm vụ nhận yêu cầu của client, xử lý và chuyển các trả lời đến client thông qua giao thức HTTP. Ngoài ra nó cũng cung cấp các giao diện lập trình Internet, dịch vụ như FTP.

Mô hình ứng dụng web thể hiện qua công nghệ ASP được minh họa như sau:

Client Server

Request: Page ASP

Response : page HTML

Để thử nghiệm các trang ASP, cần thiết phải cài đặt trình chủ IIS.

Cài đặt trình chủ IIS: Control Panel – Add/Remove Program – Add/Remove Windows Component – Chọn Iternet Information Services

Thiết lập thư mục ảo cho ứng dụng : thiết lập một ánh xạ từ thư mục ảo đến một thư mục vật lý trên đĩa cứng.

Mở IIS – Default Web Site – New... – Virtual Directory

Thiết lập DSN trong ODBC (Open DataBase Connectivity): để tạo kết nối cơ sở dữ liệu cho trang ASP thông qua Database System Name với driver phù hợp với Database.

II. TỔNG QUAN VỀ VBSCRIPT

VBScript là ngôn ngữ kịch bản chính để lập trình ứng dụng web phía server khi sử dụng công nghệ ASP. Các định danh trong VBScript không phân biệt chữ hoa hay chữ thường.

II.1. Chú thích

Sử dụng dấu nháy đơn để bắt đầu một dòng ghi chú. Ví dụ :<%‘In ra chuổi Hello World !Response.Write(“Hello World !”)%>

II.2. Khai báo hằng, biến, mảng Biến trong VBScript không cần xác định kiểu, các biến không cấu trúc được xem là biến vô

hướng, có thể chứa và tự chuyển đổi hầu hết các kiểu dữ liệu. Khai báo biến bằng từ khóa Dim. Ví dụ:<%Dim x, yx = 5y = “2”

93

BrowserBrowser

Web ServerWeb Server

ASPIAPI Data Store

Data Store

Page 3: Chuong 7-ASP Co Ban

Response.Write(x+y)‘ Kết quả in ra màn hình là : 7 %>

Hằng được khai báo bằng từ khóa Const. Ví dụ:<%Const p = 3.14Const str=”Danang College of Education”%>

Mãng được định nghĩa và truy xuất thông qua chỉ số. Ví dụ :<%Dim A(5)‘ Mãng gồm 5 phần tử, phần tử đầu tiên có chỉ số là 0A(0)= 5...A(5) = 0%> Để khai báo mãng động (có thể thay đổi kích thước) : Dim A(). Sau đó ta có thể thay đổi kích

thức qua lệnh REDIM. Ví dụ : ReDim A(6). Nếu muốn áp đặt phải khai báo biến trước khi sử dụng (và đây là điều cần thiết) ta khai báo

trước thẻ <HTML> dòng lệnh <%Option Explicit%> Để hiển thị giá trị một biểu thức trên trang web ta dùng một trong hai phương pháp :Sử dụng phương thức Write của Object Response: Response. Write(bthức)Sử dụng cách viết tắt của Response. Write(bthức) : <% =bthức %>

II.3. Các toán tử

Các toán tử số học : +, -, *, / , mod, \ (chia lấy phần nguyên), ^ (lũy thừa)

Các toán tử so sánh : =, >, <, <=, >= và <>

Các toán tử logic : NOT, AND, OR, XOR

Các toán tử cộng chuổi : + hoặc &

II.4. Các cấu trúc điều khiển

II.4.1. Các lệnh điều khiển rẽ nhánh

if ... then và if ... then ... else select case

Ví dụ 1:<%@ Language = VBScript %><%Dim ngayNgay = #23/07/2005#If ngay<Now then

Response. Write(“Trước đây”)‘Now là hàm trả về ngày hiện tại của hệ thống

ElseResponse. Write(“Sau này”)

End if%>

Ví dụ 2:<%@ Language = VBScript %><%Dim soSo = 7Select case (So mod 2)Case 0

Response.Write(Cstr(so) & ” là một số chẳn”)Case 1

94

Page 4: Chuong 7-ASP Co Ban

Response.Write(Cstr(so) & ” là một số lẻ”)End Select%>

II.4.2. Các lệnh lặp

VBScript cung cấp 4 dạng câu lệnh lặp mà chúng ta đã nghiên cứu trong VB: For ... Next : lặp với số lần xác định For Each... Next : lặp với các phần tử trong một tập hợp Do ... Loop : lặp trong khi điều kiện kiểm tra của Loop còn đúng. Câu lệnh này có 2

biến thể: Do ... While và Do ... Until.

II.5. Hàm và Thủ tục

II.4.1. Hàm

Khai báo một hàm : Function ... End FunctionHàm trả về một giá trị thông qua tên gọi hàm n ên có thể tham gia trong một biểu thức như

một toán hạng.

VBScript có một số hàm dựng sẵn (cách sử dụng tương tự như trong VB):

Các hàm toán học : ATN, COS, SIN, TAN, EXP, LOG, SQR, RND, INT

Các hàm thao tác trên chuổi :INSTR : trả về vị trí bắt đầu của một chuổi con subStr trong một chuổi khác Str. Cú pháp

InStr(subStr, Str).LEN : trả về số ký tự của một chuổi.LCASE : chuyển một chuổi viết thường sang viết hoa, tương tự cho UCASELTRIM : trả về một chuổi đã loại bỏ các ký tự trống phía bên trái. Tương tự, ta có các hàm

RTRIM, TRIMSTRING : trả về một chuổi gồm một số ký tự giống nhau. Ví dụ : String(5,”b”) cho lại chuổi

“bbbbb”LEFT : trả về một chuổi con trong một chuổi Str bắt đầu từ vị trí đầu tiên bên trái cho đến ký

tự thứ num. Cú pháp: LEFT(Str, num). Tương tự ta có hàm RIGHT.MID : trả về một chuổi con gồm num ký tự trong một chuổi Str bắt đầu từ vị trí pos Cú pháp:

MID(Str, pos, num)

Các hàm về ngày giờ: DATE, TIME, NOW, WEEKDAY, WEEKDAYNAME, YEAR, MONTH, DAY, HOUR, MINUTE, SECOND.

DATEDIFF : trả về số ngày tồn tại giữa hai ngàyDATEADD : cộng thêm số ngày trả về số ngày mới

Các hàm chuyển đổi kiểu dữ liệuABS : trả về giá trị tuyệt đối của một số ASC : trả về mã ASCII của một ký tựASCW : trả về mã Unicode của một ký tựCHR : trả về ký tự có mã theo AINSICDATE : trả về giá trị của đối số theo variant có kiểu là DateROUND : làm tròn số

Các hàm kiểm traISARRAY : kiểm tra một biểu thức có phải là một mảng hay không.ISDATE : kiểm tra một biểu thức có phải kiểu Date hay không.ISEMPTY : kiểm tra một biến đã được khởi tạo chưa.ISNULL : kiểm tra một biểu thức có phải là NULL khôngISNUMERIC : kiểm tra một biểu thức có phải là số không

II.4.2. Thủ tục

Khai báo một thủ tục : Sub ... End Sub

95

Page 5: Chuong 7-ASP Co Ban

Gọi một thủ tục : call tên_thủ_tục

Ví dụ : xây dựng hàm chuyển đổi độ C sang độ F<%Function Celsius(fDegrees)

Celsius = (fDegrees-32)*5/9‘ gán giá trị cho hàm

End Function‘ thủ tục in ra cửa sổ trang web kết quả chuyển đổiSub ConvertTemp()

Response. Write(“Nhiệt độ là :”&Celsius(95)&” độ C”)End Sub‘Gọi thủ tụcCall ConvertTemp%>

II.6. Các đối tượng của VBScriptĐối tượng (Object) là tập hợp các thuộc tính, phương thức. Trong VBScript có những đối

tượng được xây dựng sẵn để mở rộng khả năng của ngôn ngữ, hỗ trợ việc xây dựng các kịch bản mạnh hơn.

II.6.1. Đối tượng ERR

Đối tượng ERR chứa các thuộc tính mang thông tin về lỗi của VBScript và các phương thức xử lý lỗi. Khi chương trình phát sinh lỗi, cần nắm bắt và xử lý các lỗi phát sinh bằng cách khai báo dòng lệnh <% On Error Resume Next %> vào đầu trang ASP hay đầu của hàm, thủ tục của người viết script tạo ra.

- Thuộc tính Number, Description : cung cấp mã lỗi và mô tả lỗi HelpFile : tên đường dẫn tệp tin trợ giúp Source : nơi xuất hiện lỗi

- Phương thức: Clear : xoá các thông tin trong đối tượng ERR Raise : tự tạo mã lỗi, khi sử dụng phương thức này người viết script phải cung cấp đầy đủ các

thông tin cho các thuộc tính của đối tượng ERR.

II.6.2. Đối tượng kịch bản DICTIONARY

Đối tượng Dictionary cung cấp phương thức lưu trữ và truy xuất thông tin thuận lợi, tương tự như mãng. Muốn sử dụng đối tượng Dictionary cần phải tạo một thể hiện (instance) của đối tượng này qua lệnh :

CreateObject(“Scripting.Dictionary”)

Để thiết lập chỉ mục và giá trị cho một mục thông tin ta sử dụng phương thức Add với hai tham số : chỉ mục, nội dung hoặc gán nội dung trực tiếp cho từng phần tử của thể hiện.

- Thuộc tính : Count : lưu trữ số phần tử trong thể hiện

- Phương thức : Add : thêm một chỉ mục và nội dung của một phần tử trong thể hiện Remove : loại bỏ một phần tử trong thể hiện. RemoveAll : loại bỏ tất cả các phần tử trong thể hiện. Items : trả về mảng lưu trữ các Item của thể hiện Keys : trả về mảng lưu trữ các chỉ mục của thể hiện

Ví dụ : tạo một thể hiện của đối tượng Dictionary để lưu trữ số điện thoại và tên chủ thuê bao.

96

Page 6: Chuong 7-ASP Co Ban

<%Dim DanhBa, ListOfCustomer, numSet DanhBa = CreateObject(“Scripting.Dictionary”)DanhBa.Add “841323”,” Trường Đại học Sư phạm”DanhBa(“842308”) = “Trường Đại học Bách khoa”‘ Truy xuất thông tinResponse.Write(DanhBa.Item(“841323”))‘ In ra dòng Trường Đại học Sư phạm‘ Ta dùng mảng Keys và thuộc tính Count để duyệt các phần tử của thể hiệnListOfCustomer = DanhBa.Itemsnum = DanhBa.Count - 1For i = 0 to num Response.Write(ListOfCustomer[i]&”<BR>”)%>

II.6.2. Đối tượng FileSystemObject

Đối tượng FileSystemObject cho phép làm việc với tệp tin và thư mục trên webserver. Muốn sử dụng đối tượng FileSystemObject phải tạo một thể hiện của đối tượng này với cú pháp : CreateObject(“Scripting.FileSystemObject”)

- Một số phương thức :CopyFile : sao chép tệp tin. Sử dụng như hệ điều hành DOSVí dụ ta có FS là một thể hiện của FileSystemObject:

FS.CopyFile “C:\*.*” C:\backup”MoveFile, CopyFolder, CreateFolder, DeleteFile, DeleteFolderDriverExists, FolderExists, FileExists : kiểm tra sự tồn tại của một ổ đĩa ,...GetDrive, GetFolder, GetFile : lấy tên ổ đĩa, thư mục, tệp tin chỉ định.

- Các đối tượng và tập hợp của thể hiện đối tượng FileSystemObject

Đối tượng File :Các thuộc tính : Name. DateCreated, DateLastAccessed, DateLastModified, Size, Drive (ổ đĩa

chứa tệp tin), ParentFolderCác phương thức : Copy, Delete và Move

Đối tượng Folder : có các thuộc tính và phương thức như đối tượng File, ngoài ra còn có các thuộc tính SubFolder (tập các thư mục con) và IsRoot (có phải là thư mục gốc hay không)

Đối tượng Drive và tập hợp Drives (tập hợp các ổ đĩa của webserver)Thông qua tập hợp Drives ta có thể truy xuất đến các đối tượng Drive. Đối tượng Drive có các

thuộc tính :- DriveLetter : Tên ổ đĩa- VolumeName : Label của ổ đĩa- FreeSpace : Dung lượng còn trống của ổ đĩa (tính theo byte)- TotalSize : Dung lượng của ổ đĩa (tính theo byte)- IsReady : đĩa đã sẵn sàng truy cập chưa- DriveType : kiểu ổ đĩa (1: Removable, 2: HardDisk, 3: Network Drive, 4: CD, 5: Ram Drive)- FileSystem: loại bảng FAT đang sử dụng - RootFolder : trả về thư mục gốc.

Ví dụ : Viết script để hiển thị thông tin về các ổ dĩa của webserver và các tệp tin, thư mục con của thư mục C:\

<%‘ Thông tin về các ổ đĩaDim Fs, Drv, Drvs‘ Fs : FileSystem ObjectSet Fs = CreateObject(“Sripting.FileSystemObject”)Set Drvs = Fs.DrivesFor each Drv in Drvs

97

Page 7: Chuong 7-ASP Co Ban

If Drv.IsReady = True then Response.Write(“Drive: “&Drv.VolumeName &”<br>”)

Response.Write(“Space Free: “&Drv.FreeSpace&” bytes”+”<br>”)Else

Response.Write(“Drive isn’t ready “+”<br>”)End If

Next‘ Thông tin về các thư mục con và tệp tin của C:\Dim Fo, RootDir, RootFiles‘ Fo : FileObjectSet Drv = Fs.GetDrive(“C:”)Set RootDir = Drv.RootFolderSet RootFiles = RootDir.FilesFor Each Fo in RootFiles

Response.Write(Fo.Name&”<br>”)NextSet Fs = Nothing‘ Giải phóng biến Fs khỏi bộ nhớ%>

Ngoài đối tượng FileSystemObject, VBScript còn có đối tượng TextStream cho phép ta tạo ra một tệp tin hay thêm dữ liệu vào một tệp tin đã tồn tại.

III. CÁC ĐỐI TƯỢNG CỦA ASP

Một đối tượng của ASP là một tập gồm : thuộc tính, phương thức, tập hợp (collection) và sự kiện có thể tác động lên đối tượng.

ASP cung cấp 7 đối tượng dựng sẵn cho lập trình ứng dụng web phía server: Application, ASPError, ObjectContext, Request, Response, Server và Session.

Ngoài ra, ASP còn cung cấp các component dựng sẵn cho các ứng dụng.

(Component là các thành phần các đoạn mã có thể sử dụng lại, các component thường được viết bằng một ngôn ngữ lập trình nào đó như VB, C, Java, v.v..)

III.1. Đối tượng ApplicationĐối tượng Application lưu trữ toàn bộ các biến, các đối tượng của toàn bộ ứng dụng, mỗi ứng

dung chạy trên server chỉ có duy nhất một thể hiện của đối tượng Application, mọi trang ASP của ứng dụng có thể truy xuất các biến, đối tượng được lưu trữ trên đối tượng này. Nói cách khác, đối tượng Application dùng để chia sẻ dữ liệu cho mọi client.

- Để khởi tạo một biến và thêm vào đối tượng Application ta có cú pháp :Application(“tên_biến”) = giá_trị

- Để khởi tạo một đối tượng và thêm vào đối tượng Application ta có cú pháp Application(“tên_đối_tượng”) =Server.CreateObject(“ADOBB.Connection”)

- Các tập hợp của đối tượng Application : Tập hợp Contents : là tập hợp các đề mục được tạo ra và thêm vào đối tượng Application

trong phiên làm việc của client thông qua các câu lệnh script như Server.CreateObject mà không sử dụng thẻ <OBJECT> của HTML .

Cú pháp : Application.Contents(key)Với Key là tên của thuộc tính (biến, đối tượng) cần nhận về.

Ví dụ :<%‘ Khởi tạo các biến, đối tượngApplication(“name”) = “Thiết kế & Lập trình Web”Application(“publishdate”) = “01/01/2005”Application(“author”) = “Ngô Đình Thưởng”

98

Page 8: Chuong 7-ASP Co Ban

Application(“Obj1”) = Server.CreateObject(“ADODB.Connection”)

‘ Truy xuất các biến, đối tượngDim ItemFor Each Item in Application.Contents If IsObject(Application.Contents(Item)) then

Response.Write(Item & “ is a Object <br>”) Else

Response.Write(Item & “=” & Application.Contents(item) & “<br>” End IfNext%>

Đối tượng StaticObjects : là tập hợp các đề mục được tạo ra và thêm vào đối tượng

Application trong phiên làm việc của client thông qua sử dụng thẻ <OBJECT> của HTML .

Ví dụ : Giả sử ta có tệp tin Global.asa (sẽ nghiên cứu sau) và truy xuất các thông tin đã cài đặt thông qua tệp tin này.

--- 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ả hiển thị ra màn hình :MyInfoMyConnectionMyADRot

- Các phương thức của đối tượng Contents Remove : Xoá bỏ một đề mục trong tập hợp ContentsVí dụ : Application.Remove(1)

‘ Xoá bỏ Item “name”Application.Remove(“author”)

RemoveAll : Xoá bỏ mọi đề mục trong tập hợp Contents

- Các phương thức của đối tượng Application : Lock : Khoá toàn bộ ứng dụng, ngăn chặn các client khác thay đổi giá trị của biến dùng

chung trong đối tượng Application. Nếu phương thức UnLock không được gọi thì server tự động thực hiện lệnh này sau khi sử lý xong các script hay time out.

UnLock : Cho phép client thay đổi giá trị của các biến trong đối tượng Application đã bị Lock trước kia.

Ví dụ :Application.LockApplication(“publishdate”) = “15/08/2005”Application.UnLock

- Các sự kiện Applìcation_OnStart : xảy ra khi bắt đầu ứng dụng web.

99

Page 9: Chuong 7-ASP Co Ban

Applìcation_OnEnd : xảy ra khi kết thúc ứng dụng web.

Ví dụ : ta có tệp tin Global.asa như sau:

<Script Language = “VBScript” RunAt = Server>

Sub Application_OnStar()Application(“NumSession”)=0Application(“NumVisited”)=0

End Sub

Sub Application_OnEnd()Calculate_Stats()

End Sub

Sub Session_OnStar()Application(“NumSession”) = Application(“NumSession”) + 1Application(“NumVisited”) = Application(“NumVisited”) + 1' Set objCon=Server.CreateObject("ADODB.Connection")' Câu lệnh trên có thể đưa vào Application_OnStart()

End Sub

Sub Session_OnEnd()Application(“NumSession”) = Application(“NumSession”) - 1

End Sub

</Script>--- File.asp ---<%Response.Write “You are “ & Application(“NumSession”) & “ of “ && Application(“NumVisited”) & “ users”%>

III.2. Đối tượng AspError

Đối tượng AspError chỉ chứa các thuộc tính chỉ đọc, mô tả chi tiết các lỗi trong quá trình sử dụng các đối tượng của ASP.

- ASPCode : trả về mã lỗi được phát sinh do IIS- ASPDescription : trả về một chuổi mô tả chi tiết về lỗi- Category : trả về một chuổi mô tả chi tiết về lỗi được phát sinh từ IIS do quá trình sử dụng một đối tượng hay script không đúng.- Column : Trả về một số nguyên chỉ vị trí xảy ra lỗi trong tệp tin ASP- File : Trả về tên tệp ASP bị xuất hiện lỗi.

III.3. Đối tượng ObjectContext

Đối tượng ObjectContext chỉ chứa các phương thức dùng để điều khiển các giao tác (transaction) của ASP mà các giao tác này được quản lý bởi trình MTS (Microsoft Transaction Server ). Muốn sử dụng đối tượng này phải khai báo dòng lệnh ở dòng đầu tiên của trang ASP như sau .

<% @Transaction = “Required” %>

Các phương thức :- SetAbort : xác định giao tác không hoàn thành và nguồn tài nguyên có thể không được cập

nhật.- SetComplete : ngược lại với phương thức SetAbort. Khi phương thức SetComplete được gọi

thì webserver sẽ bỏ qua bất kỳ lệnh SetAbort được gọi trước đó.

Các sự kiện :- OnTransactionAbort : xảy ra khi giao tác bị huỷ bỏ- OnTransactionCommit : xảy ra khi giao tác được hoàn thành.

100

Page 10: Chuong 7-ASP Co Ban

Đối tượng này chủ yếu sử dụng khi có sự tương tranh cơ sở dữ liệu bởi nhiều client. Chúng ta sẽ minh hoạ về đối tượng này trong chương 9,Kết nối cơ sở dữ liệu.

III.4. Đối tượng Response

Đối tượng Response dùng để gởi tất cả các thông tin vừa được server xử lý trả về cho client. Chúng ta có thể xử dụng đối tượng này để giao tiếp với người sử dụng.

- Các thuộc tính : Buffer : giá trị mặc định là false, nếu thuộc tính này là true thì web server chỉ trả kết quả cho

client khi tất cả các script được xử lý hoặc phương thức Flush hay End được gọi.Cú pháp: Response.Buffer = False | TrueVí dụ :<%Response.Buffer = TRUEx=0Do x = x+1 Response.Write Cstr(x ) & "<BR>"Loop while x<10%>

CacheControl : quy định proxy server có được lưu kết quả do trang ASP này phát sinh hay không. Giá trị mặc định là không (private)

Cú pháp: Response.CacheControl = Private | Public

ContentType : quy định dạng dữ liệu do web server trả về cho client. Giá trị mặc định là Text/HTML. Ví dụ sau đây quy định dữ liệu trả về dưới dạng một WorkSheet của Exel:

<% Response.ContentType = "application/vnd.ms-excel" %><HTML><HEAD></HEAD><BODY><TABLE><TR><TD>2</TD><!--- Cell : A1 ---><TD>4</TD><!--- Cell : B1 ---></TR><TR><TD>5</TD><!--- Cell : A2 ---><TD>6</TD><!--- Cell : B2 ---></TR></TABLE></BODY></HTML>

Expires : Chỉ định thời gian Cookies lưu trên trình duyệt của client. Cú pháp : Response.Expires = minutes. Thuộc tính ExpiresAbsolute chỉ định thời gian (dạng M/D/Y h:m:s) Cookies lưu trên trình duyệt của client, ví dụ :

Response.ExpiresAbsolute = #May 15, 2005 18:00:00#

IsClientConnected : kiểm tra client có còn kết nối với web server không. Ví dụ sau đây sẽ kiểm tra client nếu còn kết nối với server thì tiếp tục xử lý cơ sở dữ liệu :

<%‘ Phần kết nối cơ sở dữ liệu sẽ trình bày ở chương 9set connDB=server.createobject("adodb.connection")connDB.Open "books", "", ""mySQL="select * from books"Set rsBookSrch = Server.CreateObject("ADODB.Recordset")rsBookSrch.Open mySQL, connDB, adOpenStatic, adLockPessimistic%><HTML><HEAD></HEAD><BODY><%Do until (rsBookSrch.eof or Response.IsClientConnected=false) Response.Write rsBookSrch.Fields("Title") %> <br> <% rsBookSrch.MoveNextLoop

101

Page 11: Chuong 7-ASP Co Ban

rsBookSrch.CloseconnDB.Close%></BODY></HTML>

- Các phương thức :

BinariWrite : dùng để truyền dữ liệu dạng nhị phân cho client---File1.asp---<HTML><HEAD></HEAD><BODY><form action="File2.asp" method="POST">Name:<input type="Text" name="name" ><BR>Age:<input type="Text" name="age" ><BR>Sex:<input type="Text" name="Sex" ><BR><input type="Submit" name="submit" value="submit"><BR></form></BODY></HTML> ---File2.asp----<% bytecount = Request.TotalBytesbinread = Request.BinaryRead(bytecount)Response.BinaryWrite binread%>

Giả sử dữ liệu nhập lần lượt là An, 25, Female. Kết quả hiển thị :name=An&age=25&Sex=Female&submit=submit

Clear : xoá tất cả dữ liệu trong vùng đệm. Muốn sử dụng phương thức này phải thiết lập Response.Buffer = True.

End : Khi thực hiện phương thức này, server dừng xử lý các script và trả về cho client tất cả dữ liệu đã xử lý được.

Flush : Gởi tất cả dữ liệu trong vùng đệm cho client. Muốn sử dụng phương thức này phải thiết lập Response.Buffer = True.

Redirect : Chuyển hướng trình duyệt của client đến một URL khác. Ví dụ :---File1.asp---<% Response.Buffer = true %><HTML><BODY><%Response.Write "This is File1.asp and switching to File2.asp"Response.ClearResponse.Redirect "File2.asp" %></BODY></HTML> ---File2.asp---<HTML><BODY><%Response.Write "This is File2.asp" %></BODY></HTML>

Write : Ghi thông tin cho client.

- Các tập hợp : Cookies : tập hợp Cookies dùng để thiết lập giá trị cho biến cookies, nếu cookies không tồn

tại thì webserver tạo ra một cookie trên máy client Cú pháp : Response.Cookies(name) [key | .Attribute] = valueTrong đó :

- name : tên cookies muốn tạo ở máy client

102

Page 12: Chuong 7-ASP Co Ban

- key : là tham số tuỳ chọn, nếu giá trị này được thiết lập thì cookies được xem như một cookies từ điển

- Attribute : bao gồm những thông tin liên quan đến cookie như : Domain, đây là thuộc tính chỉ ghi cho biết domain tạo cookie này. Expires : quy định ngày hết hạn cookie. Haskeys: cho biết cookie có chứa item hay không.

Ví dụ :

<%For Each objCK In Request.Cookies Response.Write objCK & " = " & Request.Cookies(objCK) & "<br>"Next%>

III.5. Đối tượng RequestĐối tượng Request nhận tất cả các thông tin mà trình duyệt của client gởi đến web server

thông qua một yêu cầu HTTP ( HTTP request), các thông tin này được lưu trữ trong 5 kiểu tập hợp của đối tượng Request. Các biến có thể được truy cập trực tiếp bằng cách gọi Request(Var), không thông qua tên tập hợp; trong trường hợp này Web server tìm thông tin trong các tập hợp theo thứ tự: QueryString, Form, Cookies, ClientCertificate và ServerVariable.

- Các thuộc tính:TotalBytes : trả lại tổng số byte trong phần thân của HTTP request đã được gởi đến server Ví dụ :--- file1.html ----<HTML><HEAD></HEAD><BODY><FORM ACTION="File2.asp" METHOD="POST">Name:<INPUT TYPE="Text" NAME="name" > <BR>Age: <INPUT TYPE="Text" NAME="age" > <BR>Sex: <INPUT TYPE="Text" NAME="sex" > <BR><INPUT TYPE="Submit" NAME="submit" VALUE="submit"><BR></FORM></BODY></HTML>-------------------File2.asp------------------<% Dim ByteCountByteCount = Request.TotalBytesResponse.Write("ByteCount = " & ByteCount & " bytes")%>

Kết quả in ra trang web phụ thuộc vào dữ liệu cụ thể trong Form. Ví dụ nhập: Name = Quan, Age = 56, và Sex = male.

Ta có : ByteCount = 39 bytes

- Các phương thức:BinaryRead(Count) : trả về số byte đã được gởi đến web server từ browser như là một phần

của POST request. Khi phương thức này được thực hiện xong, biến Count trả về số byte đã được đọc. Giá trị của count tương đương với Request.TotalBytes.

Ví dụ :<% Dim ByteCount, BinReadByteCount = Request.TotalBytesBinRead = Request.BinaryRead(ByteCount)...Response.BinaryWrite(BinRead)%>

- Các tập hợp: QueryString : Tập hợp QueryString cho phép lấy thông tin gởi đến web server bằng phương

thức GET với biểu mẫu HTML hay dữ liệu gắn với URL khi trang web được yêu cầu.

103

Page 13: Chuong 7-ASP Co Ban

Cú pháp : Request.QueryString.Form(“element”)hoặc : Request.QueryString(“element”)

Ví dụ :

--- File1.asp ----<HTML><HEAD></HEAD><BODY><A HREF="File2.asp?language=ASP&type=general">

Query sample</A></BODY></HTML> ---- File2.asp ----<% For Each item In Request.QueryString Response.Write(item&" = "&Request.QueryString(item)&VbCrLf)Next%>

Kết quả in ra trang web language = ASPtype = general

Form : tập hợp Form chứa các phần tử của <FORM> gởi đến web server thông qua phương thức POST.

Cú pháp : Request.Form(“element”) [“index”]Trong đó element là tên của một phần tử của <FORM>Ví dụ :---- File1.asp ----<HTML><HEAD></HEAD><BODY><form action="File2.asp" method="POST">Name: <input type="Text" name="Name" ><br>Company:<input type="Text" name="Company" ><br>Position: <input type="Text" name="Position" ><br>Address: <textarea name="Address" rows="3"></textarea><br>Phone: <input type="Text" name="Phone" ><br><input type="Submit" name="Submit" value="Submit"></form></BODY></HTML>

----- File2.asp----<HTML><HEAD></HEAD><BODY><% Response.Write Request.Form("Name")%> works for <% Response.Write Request.Form("Company") %> at address <% Response.Write Request.Form("Address") %> as a <% Response.Write Request.Form("Position") %>.<br></BODY></HTML>

Giả sử ta nhập dữ liệu lần lượt là : Lê Văn Duẫn, Softech, 15A Quang Trung, Đà Nẵng, Web DesignerKết quả hiển thị trên trang web: Lê Văn Duẫn works for Softech at address 15A Quang Trung, Đà Nẵng as a Web

Designer

ClientCertificate : tập hợp này được lưu trong trường client certificate và gởi kèm trong một HTTP request. Nếu browser dùng giao thức SSL3.0 để kết nối với server và server yêu cầu certificate thì browser mới gởi trường này, ngược lại ClientCertificate có giá trị EMPTY

104

Page 14: Chuong 7-ASP Co Ban

ServerVariables : chứa tất cả thông tin về biến môi trường và ta sử dụng những biến này để truy cập vào HTTP header.

Cú pháp : Request. ServerVariables (EnvironmentVariable) Ví dụ :<%IPAddress = Request.ServerVariables("REMOTE_ADDR")Software = Request.ServerVariables("SERVER_SOFTWARE")Protocol = Request.ServerVariables("SERVER_PROTOCOL")Response.Write "Your IP Address is " & IPAddress & " and your server is running " & Software & " under " & Protocol & "protocol."%>

Kết quả hiển thị trên trang web: Your IP Address is 127.0.0.1 and your server is running Microsoft-IIS/5.1 under HTTP/1.1

protocol.

Để liệt kê các biến môi trường được lưu trữ trong tập hợp ServerVariables, ta có đoạn script :

<%for each key in Request.ServerVariablesresponse.write(key+": "+Request.ServerVariables(key)+"<br>")next%>

III.6. Đối tượng ServerĐối tượng Server cung cấp các thuộc tính và các phương thức dùng để truy cập web server.- Các thuộc tính : ScriptTimeOut : quy định thời gian lớn nhất mà các lệnh script còn được thực hiện, giá trị

mặc nhiên là 90 giây.

- Các phương thức : CreateObject : tạo một thể hiện (instance) của một đối tượng dùng trong trang ASP hay tạo

một đối tượng thuộc dạng COM của Windows thực thi phía web server, đây là phương thức quan trọng nhất của đối tượng Server.

Cú pháp : Server.CreateObject(ObjectID)Ví dụ : Server.CreateObject(“ADODB.Connection”)

Execute : cho phép ta gọi một trang ASP khác từ một trang ASP. Ví dụ:

---CallingAsp.asp---<HTML><BODY>How now <%Server.Execute("CalledAsp.asp")%> cow?</BODY></HTML>

---CalledAsp.asp---<%Response.Write "pink"%>Kết quả sẽ hiển thị : How now pink cow?

GetLastError : phương thức này trả lại đối tượng ASPError mô tả các lỗi xảy ra về các loại Script, runtime. Ví dụ :

<%Dim objErrorInfoSet 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)

105

Page 15: Chuong 7-ASP Co Ban

Response.Write("File = " & objErrorInfo.File)Response.Write("Line = " & objErrorInfo.Line)Response.Write("Number = " & objErrorInfo.Number)Response.Write("Source = " & objErrorInfo.Source)%>

HTMLEncode : dùng để mã hoá một chuổi HTML để khi nó hiển thị trong trình duyệt, trình duyệt sẽ không dịch HTML như là các lệnh trình bày văn bản.

Cú pháp : Server.HTMLEncode(string) Ví dụ :

<% Response.Write Server.HTMLEncode("The tag for a table is: <Table>") %>

Kết quả mã hoá : The tag for a table is: &lt;Table&gt; Kết quả hiển thị trên trang web: The tag for a table is: <Table>

URLEncode : mã hoá chuổi string theo quy tắc chuyển đổi của URL hiểu được bởi các trình duyệt phía máy client.

Ví dụ :

<% Response.Write Server.URLEncode("http://www.ud.edu.vn") %>

Kết quả hiển thị trên trang web: http%3A%2F%2Fwww%2Eud%2Eedu%2Evn

MapPath : chuyển đường dẫn URL ảo thành đường dẫn vật lý của ổ đĩa trên web server.Ví dụ : Giả sử ta có test.asp đặt trong virtual folder là ASP và thư mục vật lý là E:\

Documents and Settings\Administrator\My Documents\My Webs\ASP

<HTML><BODY>The path of this file is : <br> <% Response.Write Server.MapPath("test.asp") %></BODY></HTML>

Kết quả hiển thị trên trang web: The path of this file is :E:\Documents and Settings\Administrator\My Documents\My Webs\ASP\test.asp

Transfer : phương thức này cho phép truyền toàn bộ thông tin từ trang ASP này sang trang ASP khác.

Ví dụ : trang ASP Calling.asp sẽ truyền toàn bộ thông tin chứa trong các đối tượng sang trang Called.asp.

----Calling.asp----<%Application("name") = "Giáo trình thiết kế & Lập trình Web"Application("publishdate") = "01/01/05"Application("author") = "Ngô Đình Thưởng"Set Application("Obj1") = Server.CreateObject("ADODB.Connection")

Server.Transfer("CalledAsp.asp")%>

----Called.asp----<%;Response.Write "Output from Called.asp" +”<br>”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 IfNext

106

Page 16: Chuong 7-ASP Co Ban

%>

Kết quả hiển thị do trang Called.asp phát sinh

Output from Called.asp :name = Giáo trình thiết kế & Lập trình Webpublishdate = 01/01/2005author = Ngô Đình ThưởngOBJ1 is an object.

III.7. Đối tượng SessionĐối tượng Session là đối tượng được web server tự động khởi tạo khi trang web đầu tiên của

ứng dụng được người sử dụng gọi, đối tượng Session được dùng để lưu lại các thông tin của các người dùng tại một phiên làm việc như tên, id v.v., đối tượng này sẽ tồn tại cho đến khi bị huỷ hay hết hiệu lực (time out)

Cú pháp : Session.Collecton | Property | Method

- Các thuộc tính : CodePage : để yêu cầu webserver mã hoá dữ liệu trong các hằng, biến chuổi theo bảng mã

sẽ được dùng để hiển thị tại client. Ví dụ sau đây yêu cầu webserver mã hoá các chuổi dữ liệu theo bảng mã UTF-8:

<% Session.CodePage = 65001 %>‘ dùng cho toàn bộ các trang trong session hiện hành, nếu muốn chỉ xác định ‘ codepage cho một trang hiện hành :<%@ CodePage = 65001 %>

Để có thông tin về codepage của các ngôn ngữ khác, có thể xem thông tin tại website http://msdn.microsoft.com/ library/ default.asp? url= /workshop/ author/ dhtml/ reference/ charsets/charset4.asp

LCID : xác định Id của địa chỉ (LoCation IDentifier) sẽ sử dụng nội dung động. LCID là một con số duy nhất một vị trí địa lý hay vùng miền, đây là thuộc tính để quy định cách hiển thị khuôn dạng ngày giờ, tiền tệ, dấu thập phân, dấu phân cách lớp nghìn trên trang web.

Ví dụ :

<% Session.LCID = 3079Response.Write "This is the LCID for this page " & Session.LCID & "<BR>"Response.Write "This is the Time and Date format for the above LCID: " & NOW() & "<BR>"%>

Kết quả hiển thị:This is the LCID for this page now 3079This is the Time and Date format for the above LCID 27.07.05 14:01:33 LCID của nước Pháp là 1036.

SessionID : là một con số kiểu LongInteger được phát sinh bởi webserver khi một session được tạo. Mỗi người dùng sẽ có có một SessionID không giống nhau. Khi webserver bị stop và start trở lại thì những SessionID phát sinh lần sau có thể trùng với SessionID phát sinh trước khi bị stop.

TimeOut : thời gian tồn tại của một Session, tính bằng phút, giá trị mặc định là 20 phút. Trong khoảng thời gian TimeOut nếu người sử dụng không Refresh hay không truy cập một trang khác của ứng dụng thì Session kết thúc.

- Các tập hợp : Contents : chứa tất cả các đề mục mà chúng ta thiết lập cho đối tượng Session mà không sử

dụng thẻ HTML <Object>.Cú pháp : Session.Contents(key)

107

Page 17: Chuong 7-ASP Co Ban

Trong đó key là tên của thuộc tính cần nhận về.

StaticObjects :chứa tất cả các đề mục mà chúng ta thiết lập cho đối tượng Session bằng cách sử dụng thẻ HTML <Object> khi xây dựng tệp cấu hình ASP Global.asa

Ví dụ : ‘----Global.asa----<OBJECT RUNAT=Server SCOPE=Session ID=MyInfo PROGID="MSWC.MyInfo"></OBJECT> <OBJECT RUNAT=Server SCOPE=Session ID=MyConnection PROGID="ADODB.Connection"></OBJECT> <OBJECT RUNAT=Server SCOPE=Session ID=MyADRot PROGID="MSWC.ADRotator"></OBJECT> ---File.asp----<%For Each Item In Session.StaticObjectsResponse.Write Item & "<BR>"Next%>

Kết quả hiển thị trên trang web:

MyInfoMyConnectionMyADRot

- Các phương thức : Abandon : dùng để hủy đối tượng Session và giải phóng tài nguyên của webserver. Ví dụ:

<%Response.Write "Your SessionID is " & Session.SessionIDSession("Application") = "EducationSite"Session.AbandonResponse.Write "The Application name is " & Session("Application")%>

Contents.Remove : xoá bỏ một mục nội dung trong tập hợp ContentsVí dụ :<%Session("name") = "Session Duty"Session("publishdate") = "01/01/05"Session("author") = "Education"

Session.Contents.Remove(1)Session.Contents.Remove("publishdate")

For Each Item in Session.Contents Response.Write Item & "=" & Session.Contents(Item) & "<BR>"Next%>

Contents.RemoveAll : xoá bỏ tất cả nội dung trong tập hợp Contents

- Các sự kiên : Session_OnEnd : sự kiện này xảy ra khi một Session được tạo ra, server xử lý thủ tục này

khi thực thi yêu cầu một trang, Session_OnEnd là nơi thuận tiện cho việc thiết lập các biến.

Session_OnStart : sự kiện này xảy ra khi Session bị huỷ bởi phương thức Abandon hoặc time out. Các thủ tục Session_OnStart, Session_OnEnd phải được đặt trong tệp Global.asa.

Ví dụ :

108

Page 18: Chuong 7-ASP Co Ban

---Global.asa----<script Language=VBScript RUNAT=Server>Sub Application_OnEnd()End Sub Sub Application_OnStart()Application("NumSession") = 0Application("NumVisited") = 0End Sub Sub Session_OnEnd()Application("NumSession") = Application("NumSession") - 1End Sub Sub Session_OnStart()Application("NumSession") = Application("NumSession") + 1Application("NumVisited") = Application("NumVisited") + 1End Sub </script>

-----File1.asp----Response.Write "You are " & Application("NumSession") & " of " & Application("NumVisited") & " users."

IV. TỔNG KẾT CHƯƠNGASP cung cấp cho VBScript các đối tượng để tạo ra các kịch bản trên máy chủ, cho phép ta

tạo ra các ứng dụng web động và tương tác. ASP dễ học, dễ bảo trì, có thể tích hợp các công nghệ sẵn có của Microsoft, chạy được trên nhiều hệ điều hành khác Windows nhờ thư viện hỗ trợ ASP do Sun cung cấp (Sun Chili!Soft). Trong việc thao tác cơ sở dữ liệu Access, SQL Server thì ASP tỏ ra nhanh và hiệu quả hơn các môi trường khác.

ASP cung cấp 7 đối tượng: Session, Application, Request, Response, Server, AspError và ObjectContent để xây dựng kịch bản máy chủ bằng ngôn ngữ kịch bản VBScript hay JScript.

Hiện nay Microsoft đưa ra ASP.NET cùng với ADO.NET chạy trên nền FrameWork.Net với nhiều cải tiến quan trọng, cung cấp nhiều chức năng phong phú, mạnh mẽ. Ngôn ngữ lập trình chính trong môi trường này là C# (một chủ bài của Microsoft đối đầu với ngôn ngữ lập trình Java của Sun)

1. Using Active server pages, QUE; download tại http://cntt.dhsphn.edu,vn; 2005 (website của khoa Công nghệ thông tin-Trường ĐHSP Hà Nội)

2. Lê Đình Hy, Giáo trình Thiết kế và lập trình ứng dụng web với ASP; Nxb Thống Kê, 2004

109

Page 19: Chuong 7-ASP Co Ban

110