Các đối tượng trong ASP

Một phần của tài liệu Quản lý cơ sở dữ liệu trên mạng Internet bằng mô hình cơ sở dữ liệu phân tán (Trang 87)

a. Tổng quan về các đối tượng REQUEST Và RESPONSE

Hai đối tượng được sử dụng nhiều nhất trong ASP là Request và Response. Chúng dùng để truy xuất và quản lý sự trao đổi giữ liệu giữa browser (máy khách) và Web Server (máy chủ). Dữ liệu nạp từ máy khách có thể truyền đến máy chủ thông qua đối tượng Request. Ngược lại, thông tin phản hồi từ máy chủ đến máy khách có thể thực hiện nhờ đối tượng Response.

Dữ liệu gửi lên máy chủ thường viết ở 2 chỗ:

+ Trên các ô điều khiển của một Form

+ Trong dòng tham số của một siêu liên kết, ví dụ:

<A HREF = "De_cuong.asp?Mon=tin hoc&Lop=tin 41">Mon Tin hoc</a> Chú ý: Tên biến trong dòng tham số (trong ví dụ này là Mon và Lop) không được chứa dấu cách. Giá trị các biến là chuỗi ký tự bất kỳ, bao gồm cả dấu cách.

Thông tin phản hồi từ máy chủ là một chuỗi ký tự, được viết như sau: Response.Write Chuỗi_ký_tự

Ví dụ:

Response.Write “Hà Nội"

Cũng cần lưu ý: Máy khách sẽ nhận được từ máy chủ các dòng lệnh HTML. Để hiển thị kết quả nhận được, máy khách cần dùng một trình duyệt WEB.

b. Đối tượng Request

*. Các collection (tập hợp) của Request.

Đối tượng Request cung cấp 5 tập hợp, dùng để chứa dữ liệu được gửi từ máy khách, đó là Querystring, Form, Cookies, ClinentCertificate và ServerVariables.

+ Tập Querystring:

Chứa các cặp tên giá trị trong tham số của một siêu liên kết.

Hoặc chứa giá trị các ô điều khiển của mẫu hiểu được đệ trình bằng phương

thức Get (đây là phương thức mặc định)

+ Tập Form:

Chứa giá trị các ô điều khiển của mẫu biểu được đệ trình bằng phơng thức Post + Cookies:

Chứa giá trị của các cookie được gửi từ máy khách. + Tập ClientCertificate:

Chứa giá trị các trường (field) hay mục (entry) được gửi từ máy khách. + Tập ServerVariables:

Chứa giá trị các header HTTP được gửi từ máy khách. Dưới đây chỉ xét 2 tập hay dùng là: Querystring và Forrn.

*. Các thuộc tính của Request

Đối tượng Request có một thuộc tính là TotalByes, cho biết số byte người dùng gửi lên Trình chủ.

c. Đối tượng Response * Phương thức write

Phương thức hay dùng nhất của đối tượng này là Write, dùng để gửi về (phản hồi) máy khách một chuỗi ký tự, cách viết như sau:

Response.Write Chuỗi_ký_tự

dụ.Xét trang ASP (tệp đuôi ASP) sau:

<HTML>

<h1> Vi du 1 </h1> <%

For i= 1 to 3 (adsbygoogle = window.adsbygoogle || []).push({});

Response.Write “<font size = “ + Cstr(i) +”>” + “Ha Noi <br>" Next

Sau khi thực hiện, tệp asp sẽ gửi về máy khách (client) trang HTML sau: <HTML>

<h1> Vi du 1 </h1>

<Font size =1l>Ha Noi <br> <Font size = 2>Ha Noi <br> <Font size = 3>Ha Noi <br> </HTML>

* Phương thức Redirect (không hỗ trợ trong Personal Web Server)

Phương thức này cho phép gửi trực tiếp tới một trang asp khác và có thể truyền dữ liệu cho trang được gọi thông qua tham số. Cách viết theo mẫu sau:

Response.Redirect "Thu2.asp?Ho+ten=Vu Quynh Anh&que+quan=Ha Noi" Câu lệnh này sẽ chỉ thị Browser nạp trang Thu2.asp và truyền 2 tham số cho nó. Trong trang Thu2.asp có thể dùng các câu lệnh sau để hiển thị giá trị của các tham số nhận được:

Response.write “Ho ten: " & Request.Querystring("Ho ten") & "<br>" Response.write “Que:”&Repuest.QueryString(“Que quan”)&”<br>”

Câu lệnh này thường dùng để chọn trang cần gọi tuỳ theo nút lệnh nào được chọn, theo mẫu:

Select Case Request.Form(“butsubmit"). Case "Next” Response.Redirect "Page_3.asp" Case "Prev” Response.Redirect "Page_1.asp" Case “cancel" Response.Redirect "Main.asp” End Select

* Tập hợp cookies (không hỗ trợ trong Personal Web Server)

Dùng để tạo ra các giá trị cookie. Các giá trị này được lưu trữ trên máy trạm và được gửi tới các trang asp khác nằm trên cùng thư mục với trang tạo ra chúng. Ví dụ:

Response.Cookies("Username") = "Nguyễn Đăng Hoàng" Response.Cookies("Password”) = “3483456"

d. Tập Form và Querystring của đối tượng Request * Kỹ thuật chung để truy xuất các tập hợp ASP

Hầu hết các tập hợp ASP đều giống các tập hợp thông thường của Visual Basic. Chúng là một mảng giá trị mà có thể truy nhập bằng một khoá chuỗi (không phân biệt chữ hoa, chữ thường) cũng như một chỉ số nguyên.

Giả sử trong trang Web chứa mẫu biểu:

<Form Action="Showrequest.asp" Method = "post"> Họ đệm: <Input Type="Text" Name= "Ho Dem"> Tên: <Input Type="Text" Name= "Ten">

<Input Type="Submit" Value= "Send"> </form>

Khi đó chúng ta có thể nhận các giá trị nhập vào các ô điều khiển "Ho Dem” và "Ten" bằng cách sử dụng chuỗi khoá (chính là tên các ô điều khiển):

Request.Form("ho dem") - Giá trị của ô "ho dem" Request.Form("ten") - Giá trị của ô “ten"

Hoặc dùng chỉ số:

Request.Form(1) - Giá trị của ô đầu tiên Request.Form(2) - Giá trị của ô thứ hai

Tuy nhiên không nên dùng chỉ số, vì mỗi khi thay đổi thứ tự các ô, hoặc thêm bớt các ô thì phải thay đổi chỉ số.

Chú ý: Tên các ô điều khiển có thể chứa dấu cách. Xét trang "Thu3.asp" sau:

<HTML>

<Form Action="Thu3.asp" Method = "Post"> <Table Border= 1 >

<TR>

<TH>Ho dem:</TH>

<TH> <Input Type=”text” name=”ho dem”> </td> </TR>

<TR> (adsbygoogle = window.adsbygoogle || []).push({});

<TH Align-lefl>ten:</TH>

<TD> <Input Type="Text” Name= "Ten"> </TD> </TR>

<TR>

<TD Colspan=2 Align=center>

<Input Type="Submit" Value= "Send"> </TD>

</TR> </table> </form> <%

Response.write Request.Foml("ho dem")+"<br>" Response.write Request.Form("ten")+"<br>" end if

%>

</HTML>

Khi thực hiện sẽ nhận được 2 ô với các nhãn là “Ho dem" và "Ten". Hãy nhập họ đệm và tên vào đó, rồi chọn nút "Send" (kích nút trái chuột vào nút này). Khi đó kết quả sẽ như sau:

+ Nội dung các ô trên mẫu biểu là rỗng

+ Bên dưới mẫu biểu sẽ xuất hiện họ đệm và tên mà ta gõ vào.

Nhận xét:

1. Ví dụ trên minh hoạ cách dùng bảng trong mẫu biểu, để trình bày cho thẳng hàng, thẳng cột.

2. Lưu ý 2 điều sau:

- Lần thực hiện đầu tiên (của trang asp), thì giá trị các ô điều khiển (trên mẫu biểu) là rỗng (Empty)

- Mỗi khi gọi lại hãy gọi mới một trang asp thì các ô điều khiển bị xoá (có giá trị Empty)

*.Truy xuất toàn bộ tập hợp ASP

Có thể lấy toàn bộ các giá trị của một tập hợp đưa vào một biến chuỗi, bằng cách gán tập hợp cho biến chuỗi đó. Ví dụ:

ndform = Request.Form

Nếu thực hiện trong trang Thu3.asp (xem 5.4.1) và nhập vào các ô điều khiển các giá trị: Tran Van và Thu Ha, thì biến ndform chứa chuỗi sau:

"Ho+Dem=Tran+Van&Ten=Thu+Ha" Chú ý:

Các giá trị được cung cấp theo kiểu từng cặp: tên/giá trị (control_name/control_value), các cặp được phân tách nhau bởi dấu &, các dấu

cách trong tên và giá trị được thay bằng dấu +

* Duyệt qua các giá trị một tập hợp ASP

Có 2 cách để duyệt qua một tập hợp ASP, tương tự như ta vẫn làm đối với các tập hợp (collection) trong VB. Mỗi tập hợp có thuộc tính count cho biết số phần tử

chứa trong tập hợp. Ta có thể dùng thuộc tính count để duyệt qua tất cả các phần tử bằng chỉ số nguyên như sau:

For i=1 to Request.Form.Count

Response.Write Request.Form(i) & "<br>" Next

Cách thứ hai là dùng For Each theo mẫu: For Each phan_thu In Request.Form (adsbygoogle = window.adsbygoogle || []).push({});

Response.Write phan_thu & " - " & Request.Form(phan-tu) & "<br>" Next

* Các phần tử nhiều giá trị tập hợp ASP

Một phần tử của tập hợp ASP có thể chứa nhiều giá trị. Đó là trường hợp nhiều ô điều khiển có cùng thuộc tính name, nhưng khác thuộc tính value, ví dụ:

<Form Action="Show_request.asp" Method = “post"> <Input Type = "Text" Name = “cacmon">

<Input Type = "Text" Name = “cacmon"> <Input Type = “Text” Name = “cacmon"> <Input Type = “submit" Value = “send"> </form>

Khi truy xuất phần tử Request.Form(”cacmon") ta nhận được một chuỗi dạng: “giá_trị1, giá_trị2, giá_trị3"

Nếu nhập Toán và Lý vào các Text box thứ nhất và thứ ba, để trống Text boxt thứ 2. thì giá trị của phần tử Request.Form("Cacmon") là: “Toán,,Lý"

Để duyệt qua các giá trị của một ô điều khiển, ta dùng thuộc tính Count của ô điều khiển đó như sau:

For Each phan_thu In Request.Form If Request.Form(phan_tu).Count > 1 then Response.Write phan_tu & "<BR>"

For i - 1 To Request.Form(phan_tu).Count

Response.Write thanh phan " & i & " Gia trị= " Request.Form(phan-tu)(i) & "<BR>"

Next

else

Response.Write phan_tu & “=” & Request.Form(phan_tu) & <BR>" End if

Next

Kết quả của đoạn chương trình trên như sau: CacMon:

Thanh phan 1 Gia tri= Toan Thanh phan 2 Gia tri= Thanh phan 3 Gia tri= Ly

e. Các ô điều khiển khác (trên mẫu biểu)

Ô điều khiển kiểu Radio (hay phím lựa chọn)

Các ô điều khiển cùng tên thường được sử dụng trong các phím lựa chọn theo mẫu. <Form Action="Show_request.asp" Method = "Post">

<Input Type = "Radio" Name=”color", Value="Red" > Mầu đỏ <BR> <Input Type = "Radio" Name=”color", Value="Blue" > Mầu xanh <BR> <Input Type = “Radio" Name = “color", Value="Yellow" > Máu vàng <BR>

<Input Type = “Submit" Value =”send"> form>

Bởi vì người dùng chỉ có thể chọn một giá trị, nên trình duyệt chỉ gửi giá trị của ô được chọn. Ví dụ nếu chọn "Mầu xanh” thì:

Request.Form(“color") = "Blue"

Chú ý nếu ta bỏ qua thuộc tính Value, thì trình duyệt sẽ trả về giá trị on.  Ô điều khiển kiểu Checkbox

Trong trường hợp Checkbox cũng tương tự, xét mẫu biểu với các Checkbox khác tên và không có Value:

<Form action=”Show_request.asp" Method “port"> I enjoy:

input Type = “Checkbox" Name=”Reading" Cheched > Reading &nbps; <Input Type = “Checkbox" Name=”Eating" > Eating&nbps;

<Input Type=”Checkbox" Name = "Sleeping" > Sleeping <Input Type=”Submit” value=”Send”>

</form> (adsbygoogle = window.adsbygoogle || []).push({});

Giả sử người dùng đánh dấu chọn vào CheckBox thứ 1 và thứ 3 thì khi Submit form, các ô thứ 1 và thứ 3 sẽ có giá trị on:

Request.Form(“reading”)=on Request.Form(“sleeping”)=on

Bây giờ xét các trường hợp các Check box cùng tên và có value: <Form action=”Show_request.asp” method=”Post”>

Hãy chọn các màu yêu thích:

<Input Type = “checkbox" Name = “Mau” Value="Red" > Đỏ &nbps; <Input Type = “checkbox" Name= "Mau” Value="Blue" > Xanh &nbps, <Input Type="Checkbox" Name= "Mau” Value="Yellow"> Vàng

<Input Type = “submit" Value = “send"> </form>

Request.Form(“mau”) = "Red,Yellow"

Nếu dùng đoạn chương trình để duyệt các giá trị như mô tả thì nhận được kết quả: Mau:

Thanh phan 1 Gia tri=Red Thanh phan 2 Gia tri= Yellow

Chú ý quan trọng: Khác với Textbox rỗng, ô Checkbox không chọn sẽ không trả về bất cứ giá trị nào kể cả chuỗi rỗng.

Ô điều khiển kiểu Listbox

Bây giờ xét ô điều khiển Select dùng để tạo các Listbox: <Form Action_"Show_request.asp" Method = "Post” <Select Name="Mau” Size=5 Multiple>

<Option Value = “Blue”> Xanh <Option Value = “Red”> Do <Option Value = “Magenta”> Tim <Option Value = “Yellow”> Vang <Option Value = “White”> Trang </select>

<Input Type=”submit" Value=”send"> </form>

Giả sử người dùng chọn các mục 2, 3 và thì khi submit ô “mau” sẽ có giá trị: Request.Form(“mau”) = Red,Magenta,White

Chúng ta thấy Listbox hoạt động giống như các Checkbox cùng tên. Thực sự có thể xem một Listbox (tạo bởi Select) tương tự như một dẫy các Checkbox cùng tên. Tuy nhiên, Listbox có một đặc tính thú vị: Nó có các giá trị ngầm định. Nếu bỏ qua thuộc tính Value, thì giá trị ngầm định của nó sẽ là chuỗi thể hiện (nhãn). Cụ thể trường hợp trên sẽ là:

Request.Form(“mau”) = Do,Tim,Trang Ô điều khiển kiểu Submit và Image

Chúng ta đã biết HTML gồm các loại button sau:

<INPUT TYPE="SUBMIT>, <INPUT TYPE="RESET">, <INPUT TYPE="IMAGE">, <INPUT TYPE_"BUTTON"> và <BUTTON>...</BUTTON>

Các điều khiển kiểu BUTTON không ảnh hưởng trực tiếp trên một mẫu biểu. Thậm chí khi submit một mẫu biểu thì browser cũng sẽ không đưa bất kỳ giá trị nào

của các điều khiển BUTTON cho Server. Điều này cũng tương tự với ô điều khiển kiểu RESET.

Tuy nhiên các điều khiển kiểu SUBMIT và IMAGE thì khác, khi đệ trình một mẫu biểu thì các giá trị của chúng được Browser gửi lên Server. Ví dụ xét một form thường gặp trong các ứng dụng Wizard cho phép user đi đừng bước duyệt qua các trang hay huỷ bỏ thao tác duyệt:

form Action="Show_request.asp" Method = "post">

<Input Type = "Submit" Name = "butsub" Value="Next" > <Input Type = "Submit" Name = butsub" Value="Prev" > <Input Type_"Submit" Name_"butsub" Value="Cancel" > </form>

Chúng ta có thể sử dụng nhiều button kiểu SUBMIT có cùng tên trên một trang. Khi truy xuất giá trị của nó sẽ bằng giá trị button nào được nhấn. Trong ví dụ trên, thì:

Request.Form("butsub") sẽ bằng "Next" hoặc prev" hoặc cancel" tuỳ thuộc người dùng chọn button thứ nhất, thứ 2 hoặc thứ 3. Đoạn chương trình xử lý các button cùng tên có thể viết theo mẫu sau:

Select Case Request.Form(“butsub") Case "Next" Response.Write "Chọn Next" Case "Prev" Response.Write “chọn Prev" Case “cancel" Response.Write “chọn Cancel" End Select

Chúng ta cũng có thể sử dụng nhiều button kiểu SUBMIT có tên khác nhau và dựa trên nguyên tắc: button được nhấn sẽ có giá trị đưa vào tập hợp Form của đối tượng Request. Các button kiểu này thường có giá trị (nhãn) là một dấy dấu cách, vì vậy thường dùng một text (văn bản) kề bên để phân biệt. Ví dụ:

<Form Action="Show_request" Method="Post">

<Input Type="Submit" Name="butnext" Value=”&nbsp;&nbsp;"> Next Page <Input Type="Submit" Name="butprev" Value=”&nbsp;&nbsp;"> Previous Page <Input Type="Submit" Name="butcancel" Value=”&nbsp;&nbsp;"> Main Menu </form> (adsbygoogle = window.adsbygoogle || []).push({});

Một button nếu không được nhấn sẽ không có giá trị trong tập Request.Form, tức là khi truy xuất sẽ trả về chuỗi rỗng, vì vậy có thể dáng cách sau để kiểm tra

if len(request.Form("butnext")) then Response.write "Next Page" end if

if len(request.Form("butprev”)) then Response.write "Previous Page" end if

if len(request.Form("butcancel")) then Response.write "Main Menu”

end if

Khi một button được chọn, giá trị của nó là "&nbsp;&nbsp;" nên chiều dài > 0, các button khác không được chọn sẽ có giá trị là chuỗi rỗng và chiều dài = 0.

f. Sự khác nhau giữa Form và Querystring

Thường có 2 cách để gọi đến một trang ASP là: Sử dụng siêu liên kết và đệ trình (submit) từ Form. Để gửi dữ liệu đến trang được gọi bằng siêu liên kết, có thể gắn một hay nhiều cặp tên/giá_trị vào URL của trang được gọi. Khi đó các cặp này query string của yêu cầu và có thể truy xuất bằng ASP qua tập hợp Request.Querystring.

Các giá trị xuất hiện trong Request.Querystring được truy xuất tương tự như trong Request.Form mà ta đã nói ở các phần trên. Giả sử có URL và query string sau:

http://mysite.com/test1.asp?Hodem=Nguyen Thi &Ten=Kieu Dung Khi đó ta có thể truy xuất đến Request.Querystring như sau:

Request.Querystring("Hodem") có giá trị: "Nguyen Thi" Request.Querystring(“Ten") có giá trị: "Kieu Dung"

Chú ý: Nếu tên chứa dấu cách, thì dấu cách phải thay bằng bằng dấu + (trong

tham số sau URL).

Để gửi dữ liệu đến trang được gọi bằng cách submit, có thể sử dụng các ô điều khiển trên Form. Nói cách khác, trang được gọi có thể nhận được các giá trị của các ô điều khiển mà người sử dụng nạp vào trước khi submit. Dữ liệu có thể được gửi bằng phương thức Get (mặc định) hoặc Post. Nếu sử dụng Get thì trình duyệt sẽ lấy các giá trị trong tất cả các ô điều khiển để xây dựng thành query string và gắn vào URL của trang được gọi. Khi trang này mở (đến Server) các giá trị của query string nằm trong tập Request.Querystring.

Ngược lại nếu sử dụng phương thức Post, trình duyệt đưa giá trị các ô điều khiển vào trong HTTP header gửi đến Server và các giá trị của nó có thể truy nhập qua tập hợp Request.Form.

Nói chung nên sử dụng phương thức Post trong các Form. Thứ nhất, chiều dài của chuỗi URL bị giới hạn nên nếu dùng query string sẽ có nguy cơ bị tràn và bị cắt bớt. Thứ hai, query string đưa các giá trị tường minh vào URL và sẽ được ghi lại trong file log khi đi qua Server, điều mà chúng ta không thích lắm.

Nhận xét về việc sử dụng dữ liệu: Một trang được gọi có thể sử dụng dữ liệu do trang gọi cung cấp thông qua tập hợp Request.Form hoặc Request.Querystring và một khoá chuỗi (chính là tên ô điều khiển của Form hoặc tên biến trong URL), ví dụ:

Request.Form(“Ho ten") - nếu dùng Post

Request. Querystring("Ho ten") - nếu dùng Get

Có một nhận xét như sau: Nếu chỉ dùng Request và khoá chuỗi thì luôn nhận

được dữ liệu cần thiết, bất kể nó được gửi bằng cách gì. Ví dụ:

Request (“ho ten") - dùng Post hoặc Get

Cũng nên nhận xét thêm: Cách viết này có ưu điểm ngắn gọn, nhưng tốc độ truy nhập lại chậm.

g. Sử dụng Cookie

* Tạo và sử dụng cookie

Cookie là những mẫu văn bản nhỏ được lưu trên máy khách bởi trình duyệt và được gửi đến máy chủ (Server).

Có 2 kiểu cookie: một giá trị (single value) và nhiều giá trị (multiple value). Để tạo cookie một giá trị, dùng câu lệnh:

Response.Cookies("item-name") = “item_value" Để tạo cookie nhiều giá trị, dùng các câu lệnh:

Response.Cookies("item-name")(“sub_item-name_1") =“sub_itemalue_1" Response.Cookies(“item-name")(“sub_item-name_n") = “sub_itemalue_n" Để đặt domain, đường dẫn và ngày hết hạn (expiry date) cho cookie dùng các câu lệnh:

Response.Cookies(“item-name").Domain=”domain-url". Response.Cookies(“item-name").Path=”virtual_path” Response.Cookies("item-name").Expires=#date# (adsbygoogle = window.adsbygoogle || []).push({});

Thông thường trình duyệt (browser) chỉ gửi cookie đến các trang nằm trong cùng thư mục với trang tạo ra cookie. Bằng cách đặt thuộc tính Path, chúng ta có thể gửi cookie tới các trang nằm trong thư mục quy định trong Path. Nếu muốn tất cả các trang trong web site đều có thể nhận được cookie thì ta đặt Path bằng “/”.

Một phần của tài liệu Quản lý cơ sở dữ liệu trên mạng Internet bằng mô hình cơ sở dữ liệu phân tán (Trang 87)