2 Phần B
2.3 Các đối tượng Server
2.3.1 Đối tượng Response
2.3.1.1 Chức năng (Chớnh)
Dựng để trả (write) kết quả về cho mỏy khỏch (Trỡnh duyệt) 2.3.1.2 Một số phương thức dựng:
2.3.1.2.1 Phương thức write
Viết kết quả trả về cho trỡnh duyệt (mỏy khỏch).
+ Cỳ phỏp : Response.write(<Xõu>/<Biểu thức>)
Trong đú <Xõu>là một xõu ký tự, cú thể chứa cỏc thẻ HTML.
Biểu thức cú thể là hằng, biến, hàm, biểu thức chứa cả hằng, biến, hàm. . .. +Vớ dụ:
Gửi xõu “Hello world” về cho trỡnh duyệt.
<%@ Language = vbscript %> <HTML> <BODY> <% Response.write(“Hello world”) <%@ Language = vbscript %> <HTML> <BODY> <% Response.write(“Hello world”) %> </BODY> </HTML>
2.3.1.2.2 Tương đương với: <%@ Language = vbscript%> <HTML> <BODY> Hello world </BODY> </HTML> 2.3.1.3 Phương thức Redirect
Hướng người dựng sang một trang web khỏc. Vớ dụ khi người dựng gừ www.abc.com/Trang1.asp4thỡ chỳng ta cú thể hướng (mở) sang trang Trang2.asp để hiển thị.
+ Cỳ phỏp:
Response.Redirect URL (Địa chỉ/ siờu liờn kết) + Vớ dụ:
Khi người dựng nhập vào trang Trang1.asp, ta sẽ hiển thị trang Trang2.Asp. Khi đú nội dung của trang1.asp sẽ như sau:
<%@ Language = vbscript %> <HTML>
<head>
<meta http-equiv="Content-Type" content="text/HTML; charset=utf-8"> <title>Redirect</title>
</head> <BODY>
.... Bạn phải thăm trang2.asp trước đó !<BR> <% ’... Response.redirect "Trang2.asp" ’... %> </BODY> </HTML>
Một vớ dụ cần sử dụng đến phương thức này đú là, khi người dựng chưa thực hiện đăng nhập và vào ngay trang thao tỏc với CSDL thỡ ta cần redirect đến trang đăng nhập.
2.3.2 Đối tượng Request
Mụ hỡnh nhập liệu từ người dựng và tiếp nhận dữ liệu của webserver: 2 con đường. 1. POST: Gửi cả một form nhập dữ liệu tới webserver
2. GET : Gửi thụng qua liờn kết URL 2.3.2.1 Chức năng
Nhận (lấy / đọc) về cỏc giỏ trị khi người dựngSubmit (gửi) đi. (Vớ dụ khi người dựng điền cỏc thụng tin đăng ký tài khoản và nhấn vào nỳtSubmitthỡ thụng tin đú sẽ được nhận về thụng qua đối tượngRequest).
Cú hai cỏch để người dựng gửi thụng tin đi[U+F0E8]Cú 2 cỏch tương ứng để tiếp nhận (đọc) .
Cỏch 1: Người dựng nhập thụng tin trong cỏc textbox, sau đú gửi cỏc thụng tin trong cỏc textbox này tới một trang asp khỏc. Khi đú người ta gọi cỏch gửi đú là gửi theo kiểu “POST”.
61 Cỏch 2:Thụng tin cú thể gửi tới một trang khỏc bằng cỏch gắn vào sau mỗi URL của trang đú. Vớ dụ để gửi hai thụng tin là HoTen và Tuoi với giỏ trị tương ứng là TK34 và 2 cho trang XuLy.asp thỡ cú thể thực hiện như sau:
XuLy.asp?HoTen=TK34&Tuoi=2
Cỳ phỏp để gắn vào sau trang nhận như sau:
TrangNhan.asp ? Thuộc_Tớnh 1 = Giỏ trị1 & Thuộc_Tớnh 2 = Giỏ trị 2 &. . .. Cỏch gửi này gọi là phương thức gửi kiểu ”GET”
2.3.2.2 Một số thuộc tớnh và phương thức thường dựng 2.3.2.2.1 2.2.1 Thuộc tớnh Form
Dựng để lấy giỏ trị của từng thuộc tớnh mà trang khỏc gửi tới bằng phương thức POST Cỳ phỏp:
Request.Form(“Tờn_Thuộc_Tớnh_Cần_Lấy”)
Vớ dụ: Trang1.asp cú 2 ụ textbox tờn là HoTen và Tuoi. cho phộp người dựng nhập vào và khi người dựng gửi đi (Submit) tới trang Trang2.asp. thỡ trang2.asp sẽ hiển thị lời chào tới người đú. Nội dung 2 file này sẽ như sau:
Trang1.asp
<HTML> <head>
<meta http-equiv="Content-Type" content="text/HTML; charset=utf-8"> <title>Gửi dữ liệu sang trang khỏc</title>
</head> <BODY>
Trang nhập thụng tin :<br>
<FORM name="NhapLieu" action ="Trang2.asp" method="post">
Họ và tờn :<Inputtype ="text" name="HoTen"> <br>
Tuổi :<Inputtype="text" name ="Tuoi"> <br>
<Inputtype="Submit" value="Gửi đi" name="cmdGui"> </ FORM> </BODY> </HTML> Trang2.asp <HTML> <head>
<meta http-equiv="Content-Type" content="text/HTML; charset=utf-8"> <title>Nhận dữ liệu gửi từ trang khỏc</title>
</head> <BODY> <% Dim HT , Tuoi HT = Request.Form(“HoTen”) Tuoi = Request.Form(“Tuoi”)
Response.write(“Chào bạn “ & HT &”. Tuổi của bạn : “ &Tuoi) %>
</BODY> </HTML>
Chỳ ý:
+ Muốn gửi thụng tin trong cỏc điều khiển (cỏc textbox, textarea, checkbox, list. . .) đi thỡ cỏc điều khiển đú phải đặt trong một Form (cặp thẻ<Form> . . ..</Form>) nào đú.
+ Phương thức gửi đi được chỉ định thụng qua thuộc tớnh method. Đặt cho thuộc tớnh này giỏ trị hoặc là POST hoặc là GET.
+ Một trang cú thể gửi (Post) đến chớnh trang đú. Điều này thường được ỏp dụng khi nội dung trang web là đơn giản (vớ dụ trang Login), cũn đối với cỏc trang phức tạp (nhiều xử lý) thỡ nờn gửi đến một trang riờng.
Vớ dụ 2:Cho người dựng nhập vào năm sinh, sau đú tớnh toỏn và hiển thị tuổi của người đú. Cỏch thức ở đõy là : Trang cho người dựng nhập năm sinh và trang để hiển thị kết quả là giống nhau.
Trang TinhTuoi.asp - Version 1
<%@language = vbscript %> <HTML>
<head>
<meta http-equiv="Content-Type" content="text/HTML; charset=utf-8"> <title>Tinh tuoi</title>
</head> <BODY> <%
IFRequest.Form("NamSinh")=""THEN
Response.write(“<formname=Form1 action=’TinhTuoi.asp’ method=POST>”) Response.write (“Nhap nam sinh cua ban :<Inputtype=text name=’NamSinh’>”) Response.write (“<Inputtype=Submitvalue=’Gui di’>”)
Response.write(“</form>”) ELSE
Response.write("Tuoi cua ban la : " & (year(now) -Request.Form("NamSinh"))) END IF
Trang TinhTuoi.asp - Version 2
<%@language = vbscript %> <HTML>
<head>
<meta http-equiv="Content-Type" content="text/HTML; charset=utf-8"> <title>Tinh tuoi</title>
</head> <BODY> <%
IFRequest.Form("NamSinh")=""THEN %>
<FORMname=Form1 action="TinhTuoi.asp" method=POST>
Nhap nam sinh cua ban :<Inputtype=text name="NamSinh"> <Inputtype=Submitvalue="Gui di">
</FORM> <table> <% ELSE
Response.write("Tuoi cua ban la : " & (year(now) -Request.Form("NamSinh"))) END IF
%>
</BODY> </HTML>
Version 3– Sử dụng cỏc trang xử lý riờng biệt
• ý tưởng: Ta tỏch làm 2 trang, một trang "Chuyờn" hiển thị form nhập năm sinh, sau đú gửi tới một trang "chuyờn" xử lý và hiển thị kết quả.
63
• Trang hiển thị form nhập do khụng cú xử lý gỡ, do vậy ta chỉ cần tạo trang đú là trang HTM thụng thường –NhapNamSinh.htm.
• Trang xử lý do phải dựng cỏc cõu lệnh ASP nờn ta sẽ tạo trang ASP- TinhTuoi.asp
TrangNhapNamSinh.htm
<HTML> <head>
<meta http-equiv="Content-Type" content="text/HTML; charset=utf-8"> <title>Nhap nam sinh</title>
</head> <BODY>
<FORMAction="TinhTuoi.asp" method=POST>
Nhap nam sinh cua ban :<Inputtype=text name=NamSinh> <Inputtype=Submitvalue="Gui di">
</FORM> </BODY> </HTML> Trang TinhTuoi.asp <%@language = vbscript %> <HTML> <head>
<meta http-equiv="Content-Type" content="text/HTML; charset=utf-8"> <title>Tinh tuoi</title>
</head> <BODY> <% IFRequest.Form("NamSinh")= ""THEN Response.Redirect("NhapNamSinh.htm") ELSE
Response.write ("Tuoi cua ban la: " & (year(now)-Request.Form("NamSinh"))) END IF
%>
</BODY> </HTML>
Cỏch (version) nào dễ dàng hơn đối với bạn ? 3 version cú ưu và nhược điểm gỡ ? rỳt KL ! 2.3.2.2.2 1.2.2 Thuộc tớnh QueryString
Dựng để đọc dữ liệu do trang khỏc gửi tới thụng qua phương thức GET (Thường là gửi dữ liệu bằng cỏch gắn vào ngay sau liờn kết - URL).
+ Cỳ phỏp đọc dữ liệu gửi đến thụng qua phương thức này như sau: Request.QueryString("Tờn_Thuộc_Tớnh_Cần_Lấy")
+ Vớ dụ 1 : Gửi tới trang TinhTuoi.ASP năm sinh (đặt tờn là NamSinh) cú giỏ trị là 1980 ở dạng GET. Khi đú, Hyperlink gửi đi cú dạng :
http://www.tk34.com/TinhTuoi.asp?NamSinh=1980
Dũng địa chỉ trờn cú thể tạm dịch là "Gửi một thụng tin cú tờn là NamSinh với giỏ trị 1980 đến trang TinhTuoi.ASP
Chỳ ý: Để gửi dữ liệu theo kiểu GET thỡ cú thể gửi bằng cỏch gừ trực tiếp vào hộp địa chỉ (address) của trỡnh duyệt hoặc cú thể xõy dựng một trang riờng, sau đú mới gửi.
Để tiếp nhận và xử lý dữ liệu này, nội dung trang TinhTuoi.aspsẽ như sau: TinhTuoi.asp - Version 1
<HTML> <head>
<meta http-equiv="Content-Type" content="text/HTML; charset=utf-8"> <title>Tinh tuoi</title>
</head> <BODY> <%
IFRequest.QueryString("NamSinh")= ""THEN
Response.write ("Bạn gừ địa chỉ cú dạng: Domain/TinhTuoi.asp?NamSinh=So") ELSE
Response.write ("Tuổi của bạn: " &(year(now)-Request.QueryString("NamSinh"))) END IF
%>
</BODY> </HTML>
Với phiờn bản này, rừ ràng khi muốn gửi dữ liệu cho một trang chỳng ta phải gừ một cỏch thủ cụng !
[U+F0E8] Cú thể gửi theo cỏch này nhưng dễ dàng được hơn khụng ? Vớ dụ như cho người dựng nhập vào cỏc ụ textbox chẳng hạn ?
TinhTuoi.asp - Version 2
<%@language = vbscript %> <HTML>
<head>
<meta http-equiv="Content-Type" content="text/HTML; charset=utf-8"> <title>Tinh tuoi</title>
</head> <BODY> <%
IFRequest.QueryString("NamSinh") = ""THEN %>
<FORM name=Form1 action="TinhTuoi.asp" method=GET>
Nhap nam sinh cua ban :<Inputtype=text name="NamSinh"> <Inputtype=SUBMITvalue="Gui di">
</FORM> <%
ELSE
Response.write ("Tuổi của bạn : " & (year(now)-Request.QueryString("NamSinh"))) END IF
%>
</BODY> </HTML>
65
Figure 2.3
Khi lần đầu tiờn mở trang TinhTuoi.asp
Figure 2.4
Sau khi nhập 1977 vào ụ textbox (hóy để ý trờn thanh địa chỉ)
Vớ dụ 2:Giả lập một ứng dụng để hiển thị cỏc sản phẩm và cho phộp người dựng xem chi tiết mặt hàng khi người dựng click chọn hyperlink tương ứng.
Trong ứng dụng giả lập này, ta sẽ hiển thị 3 đầu mục sản phẩm cú dạng : HDD Seagate 40 GB Xem chi tiết
HDD Seagate 80 GB Xem chi tiết HDD Seagate 160 GB Xem chi tiết
Khi người dựng click vào Hyperlink "Xem chi tiết" ở bờn cạnh mỗi sản phẩm thỡ ta hiển thị thụng tin tương ứng về sản phẩm đú.
[U+F0E8]Khi người dựng chọn một mục thỡ cần phải cú thụng tin gửi trả lại trang xử lý để biết họ đó chọn sản phẩm nào để hiển thị thụng tin phự hợp [U+F0E8] ẩn chứa trong mỗi Hyperlink phải cú những
thụng tin cần thiết, vớ dụ một mó sản phẩm (MaSanPham) chẳng hạn[U+F0E8]Dựng hỡnh thức gửi GET là phự hợp !
TrangShowProduct.asp - Hiển thị sản phẩm và chi tiết sản phẩm: 2 in 1
<HTML> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Hien thi san pham</title>
</head> <BODY> <%
IFRequest.QueryString("MaSanPham") = ""THEN %>
<table border=0 cols=2 width="100%"> <TR>
<TD>HDD Seagate 20 GB</td>
<TD> <a href="ShowProduct.asp?MaSanPham=hdd20">Xem chi tiết</a> </td> </TR>
<TR>
<TD>HDD Seagate 40 GB</td>
<TD> <a href="ShowProduct.asp?MaSanPham=hdd40">Xem chi tiết</a> </td> </TR>
<TR>
<TD>HDD Seagate 80 GB</td>
<TD> <a href="ShowProduct.asp?MaSanPham=hdd80">Xem chi tiết</a> </td> </TR> </table> <% ELSE SELECTCASERequest.QueryString("MaSanPham") CASE "hdd20"
Response.write("ổ cứng Seagate 20 GB, giỏ 40 $") CASE "hdd40"
Response.write("ổ cứng Seagate 40 GB, giỏ 80 $") CASE "hdd80"
??? Request.QueryString("MaSanPham") = "" cú nghĩa gỡ ?
Phiờn bản ở trờn: Sử dụng một trang vừa hiển thị vừa xử lý dữ liệu gửi đến (kiểu 2 in 1). Ta cú thể sử dụng cơ chế 1 in 1, tức là: Trang hiển thị riờng và trang hiển thị chi tiết riờng: Trang HienThiSP.htm
<HTML> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Hiển th sản phẩm</title>
</head> <BODY>
<table border=0 cols=2 width="100%"> <TR>
<TD>HDD Seagate 20 GB</td>
<TD> <a href=" ShowDetail.asp?MaSanPham=hdd20">Xem chi tiết</a> </td> </TR>
<TR>
67
<TD> <a href=" ShowDetail.asp?MaSanPham=hdd40">Xem chi tiết</a> </td> </TR>
<TR>
<TD>HDD Seagate 80 GB</td>
<TD> <a href=" ShowDetail.asp?MaSanPham=hdd80">Xem chi tiết</a> </td> </TR> </table> </BODY> </HTML> Trang ShowDetail.asp <HTML> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Hiển th chi tiết sản phẩm</title>
</head> <BODY> <% IFRequest.QueryString("MaSanPham")<>""THEN SELECTCASERequest.QueryString("MaSanPham") CASE "hdd20"
Response.write("ổcứng Reagate 20 GB, giá 40 $") CASE "hdd40"
Response.write("ổcứng Seagate 40 GB, giá 80 $") CASE "hdd80"
Response.write("ổcứng Seagate 80 GB, giá 100 $") END SELECT
ELSE
Response.write("B1n vào trang ShowProduct.asp trớcđã!<BR>")
Response.write ("<a href = ’HienThiSP.htm’>< < Quay trăe l1i</a>") END IF
%>
</BODY> </HTML>
[U+F0E8]Nhận xột : Gửi dữ liệu theo kiểu POST khi nào ? và GET khi nào ? Một số bài tập: (Sử dụng cả phương phỏp gửi POST và GET)
1. Viết trang web tra cứu từ điển. Cho người dựng nhập vào một từ tiếng Anh, trang web sẽ hiển thị nghĩa tiếng việt tương ứng.
2. Viết trang web thực hiện tớnh toỏn với cỏc phộp toỏn, hàm đơn giản.
2.3.3 Đối tượng server
Là một đối tượng cung cấp một số hàm thường dựng trong ứng dụng. Cú 2 phương thức được cung cấp bởi đối tượng server là Mappath và CreateObject.
2.3.3.1 Phương thức Mappath
Trả về đường dẫn vật lý từ đường dẫn (thư mục) ảo.
+ Vớ dụ: Cú một địa chỉ như sau: http://localhost/HienThiSP.htm5
Figure 2.5
Vị trớ ảo của tệp Hienthisp.htm trờn webserver
Trang web HienThiSP.htm cú đường dẫn ảo là Localhost/HienThiSP.htm.
Đường dẫn vật lý (nằm trờn ổ cứng của trang này) là: c:\inetpub\wwwroot\HienThisp.htm
69
Figure 2.6
Vị trớ vật lý của tệp Hienthisp.htm trờn ổ cứng.
Trong trường hợp này, Server.Mappath(“HienThiSP.htm”) sẽ cho ta kết quả là c:\inetpub\wwwroot\HienThisp.htm.
[U+F0E8]Như vậy hàm Mappath thực hiện ỏnh xạ từ đường dẫn ảo→đường dẫn vật lý.
Hàm này đặc biệt hay dựng khi chỳng ta tham chiếu đến đường dẫn vật lý của cỏc tệp CSDL khi kết nối. Vớ dụ: Trang Mappath_Demo.asp <%@ language = vbscript %> <HTML> <head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <title>Mappath</title>
</head> <BODY>
Duong dan vat ly cua mot so trang web :<br> <% Response.write (server.mappath("HienThiSP.htm")) Response.write ("<BR>") Response.write (server.mappath("/HienThiSP.htm")) Response.write ("<BR>") Response.write (server.mappath("/data/nwind.mdb")) Response.write ("<BR>") %>
</BODY> </HTML>
Kết quả:
Figure 2.7
Kết quả
Lưu ý: Nếu tệp khụng tồn tại hoặc đường dẫn ảo đưa vào sai thỡ hàm trả về sẽ là một xõu gồm đường dẫn tới thư mục wwwroot cộng với xõu đặt trong mappath.
Hỏi : Khụng cần dựng đến Mappath cú được khụng ? 2.3.3.2 Phương thức CreateObject
Tạo ra một số đối tượng. Vớ dụ tạo ra cỏc đối tượng truy xuất đến CSDL. + Cỳ phỏp:
Set<Tờn_Biến>= Server.CreateObject(“Xõu mụ tả đối tượng cần tạo”)
Xõu thường dựng (đối tượng thường được tạo): ADODB.Connection và ADODB.Recordset. + Vớ dụ :
Tạo một đối tượng Connection và đối tượng Recordset Dim Conn, Rs
SetConn = Server.CreateObject("ADODB.Connection") SetRs = Server.CreateObject("ADODB.Recordset")
2.3.4 Đối tượng session – biến sesstion
71 Một phiờn (Session) làm việc là gỡ ?: Mỗi khi mở trỡnh duyệt (lần đầu tiờn) vào website ứng dụng, ta đó tạo ra một phiờn làm việc. Phiờn làm việc kết thỳc khi ta ra khỏi website ứng dụng hoặc khi tất cả cỏc cửa sổ trỡnh duyệt bị đúng.
2.3.4.1 Biến Sesstion
Khi vào một website, người dựng cú thể duyệt rất nhiều trang web của website đú. Nếu muốn lưu trữ thụng tin về khỏch thăm này trong cả phiờn làm việc thỡ cú thể lưu vào cỏc biến, gọi là biến Session.
2.3.4.2 Đối tượng Session
Là đối tượng dựng để quản lý (tạo, đọc, ghi) cỏc biến sesstion và một số thụng số khỏc. + Cỳ phỏp đểtạo biếnSession như sau:
Session(“Tờn_Biến”) =<Giỏ trị>
Lưu ý: Tờn biến phải đặt trong cặp dấu nhỏy kộp.<Giỏ trị>cú thể là xõu ký tự hoặc số. Vớ dụ : Tạo một biến tờn là MaNguoiDung và gỏn giỏ trị là TK34
Session(“MaNguoiDung”) = “TK34”
+ Cỳ phỏp để đọc giỏ trị của một biến sesstion như sau: Session(“Tờn_Biến”)
+ Cỳ phỏp để ghi (thay đổi) giỏ trị của biến session: Session(“Tờn_Biến”) =<Giỏ trị>
Vớ dụ:
Response.write(“Mó người dựng là : “ &Session(“MaNguoiDung”))
Riờng với đối tượng Session, nú cũn cú cỏc sự kiện. Cỏc sự kiện này tự động được gọi mỗi khi một phiờn làm việc được tạo ra. Cỏc sự kiện này cú tờn là On_Start và On_End. Cỏc sự kiện này được đặt trong file Global.asa.
File Global.asa
<script LANGUAGE = "VBScript"RUNAT = Server>
’/// Thủ tục này được gọi khi bắt đầu một phiờn