5.5.2.1. Khái niệm
Tập hợp là một khái niệm thường xuyên phải sử dụng trong ASP. Hiểu một cách đơn giản, tập hợp là một số các biến, đối tượng thuộc cùng một đối tượng nào đó. Trong ASP đa số các đối tượng đều có các tập hợp bên trong nó.
5.5.2.2. Cách truy cập các phần tử trong tập hợp
Một tập hợp trong ASP có tính chất như một mảng các giá trị. Chúng ta có thể truy cập thông qua một khóa hoặc một số nguyên coi như chỉ số của mảng đó. Một tập hợp thông thường có 3 thuộc tính cơ bản đó là Item, Key và Count trong đó thuộc tính Item là "thuộc tính mặc định" nghĩa là trong một số trường hợp ta có thể không cần thiết viết tên thuộc tính này khi truy cập.
a. Thuộc tính Item
Được dùng để truy cập đến một phần tử nào đó trong tập hợp. Ta có thể xác định vị trí của phần tử đó bằng một chuỗi hay có thể là một số.
Ví dụ: Ta có thể truy cập vào tập hợp QueryString của đối tượng Request như sau:
hoặc ta có thể
Vì thuộc tính Item là thuộc tính mặc định của tập hợp nên ta có thể bỏ qua thuộc tính này cho đơn giản trong khi viết như sau:
b. Thuộc tính Key
Thuộc tính này trả ra tên cụ thể của một phần tử trong tập hợp. Ta có công thức:
- Nếu i là chỉ số của phần tử trong một tập hợp A thì name = A.Key(i) là tên của phần tử này. Khi đó cách viết A.Item(i) và A.Item(Name) là hoàn toàn tương đương.
c. Thuộc tính Count
5.6. Xử lý các FORM dữ liệu
5.6.1. Mởđầu
Các form dữ liệu là nơi người dùng có thể nhập dữ liệu vào và gửi về phía Server. Một form chứa một hoặc nhiều điều khiển và người sử dụng có thể nhập các giá trị vào. Sau khi nhập xong dữ liệu người sử dụng sẽ ra lệnh gửi form đi, form chứa các dữ liệu này sẽ được gửi tới địa chỉ được chỉ định trong form để xử lý. Kết quả trả về cho người dùng phụ thuộc vào trình xử lý trên server.
Để định nghĩa một form ta sử dụng đoạn mã
Phương thức: Cách thức gửi form đi, có thể sử dụng GET hoặc POST
5.6.2. Sử dụng phương thức GET
5.6.2.1. Định nghĩa form dùng phương thức GET
Để định nghĩa form dùng phương thức GET ta dùng đoạn mã sau
Ví dụ
5.6.2.2. Đặc điểm form dạng GET
Khi định nghĩa form dạng GET thì các dữ liệu mà form gửi đến trình xử lý sẽ được gửi đi theo phương thức GET. Nghĩa là các dữ liệu này sẽ được đưa thêm vào phần sau của chuối URL trên trình duyệt.
Với cách làm này có đôi phần tiện dụng vì ta có thể nhập giá trị các biến trực tiếp lên URL của trình xử lý. Tuy nhiên có một nhược điểm là dung lượng kí tự có thể nhập lên URL là khá nhỏ (dưới 2000 kí tự). Do đó người ta chỉ dùng cách này khi lượng thông tin cần truyền là đơn giản, dung lượng ít.
5.6.2.3. Cách lấy dữ liệu từ form dạng GET
Để lấy dữ liệu từ form dạng GET người ta dùng tập hợp QueryString của đối tượng Request.
Cú pháp: Request.QueryString("<tên điều khiển>")
Chi tiết về đối tượng này sẽ được đề cập trong các bài sau. Ta có thể tam hiểu thông qua ví dụ sau đây:
5.6.2.4. Ví dụ
Trong ví dụ này ta làm một form cho phép người sử dụng nhập thông tin về Họ và tên rồi gửi về trình xử lý theo phương thức GET, trình xử lý sẽ hiện một câu thông báo chào người đó.
Sau khi nhập dữ liệu trên trình duyệt và nhấn Gửi đi chú ý chuỗi trên URL
5.6.3. Sử dụng phương thức POST
5.6.3.1. Định nghĩa form dùng phương thức POST
Để định nghĩa form dạng POST ta dùng đoạn mã sau
Ví dụ:
5.6.3.2. Đặc điểm form dạng POST
Khi định nghĩa form dạng POST các dữ liệu sẽ được gửi thẳng đến trình xủ lý theo phương thức POST, không qua URL do đó lượng dữ liệu được gửi đi là không hạn chế.
Người ta thường dùng phương thức POST để truyền các dữ liệu lớn.
5.6.3.3. Cách lấy dữ liệu từ form dạng POST
Để lấy dữ liệu từ form được gửi đến theo phương thức POST người ta dùng tập hợp FORM của đối tượng Request.
Cú pháp: Request.Form("<tên điều khiển>")
Chi tiết về đối tượng này sẽ được đề cập trong các bài sau. Ta có thể tam hiểu thông qua ví dụ sau đây:
5.6.3.4. Ví dụ
Trong ví dụ này ta làm lại ví dụ trong phần 2.4 của bài này nhưng có khác là dữ liệu trong form được gửi đi theo phương thức POST.
Sau khi nhập dữ liệu trên trình duyệt và nhấn Gửi đi chuỗi trên URL không có dữ liệu của form
5.7. Các đối tượng cài sẵn trong ASP
5.7.1. Các đối tượng ASP
Thực chất ASP được xây dựng trên cơ sở hướng đối tượng và nó có một tập các đối tượng được cài đặt sẵn làm cơ sở cho người lập trình, có các đối tượng tiện ích (có thể cài đặt hoặc không) và bản thân chúng cũng có những đối tượng cho riêng mình đó là các đối tượng ActiveX/COM
Một số đối tượng cài sẵn thông dụng: o Request
o Response o Application o Session o Server
Các đối tượng có các tập hợp, các thuộc tính và các phương thức, để truy cập vào một thuộc tính hoặc một phương thức nào đó của đối tượng ta sử dụng:
<Tên đối tượng>.<Tên tập hợp | thuộc tính | phương thức>
Ví dụ:
Response.Write("Hello World")
5.7.2. Đối tượng REQUEST
Một trong những mục đích của ASP là cho phép nhận thông tin từ phía client và người sử dụng. Đối tượng Request được dùng để nhận các thông tin đó được dễ dàng. Đối tượng Request quản lý các thông tin được gửi từ phía web browser lên server như dữ liệu của các form, cookies...
Đối tượng Request giúp chúng ta truy cập vào đoạn đầu và thân các yêu cầu HTTP của người sử dụng. Đây là đối tượng rất quan trọng vì ta phải thông qua nó để nhận được và đáp ứng các yêu cầu người sử dụng đưa ra. Sử dụng đối tượng Request chúng ta mới có thể xây dựng được trang web động và thực hiện được các hoạt động khác có ý nghĩa hơn ở máy chủ như cập nhật các dữ liệu ở máy khách vào cơ sở dữ liệu...
5.7.2.1. Một số tập hợp thông dụng trong đối tượng Request
TÊN TẬP HỢP MIÊU TẢ
QueryString(<tên biến>) Chứa các giá trị được gửi lên từ các yêu cầu HTTP Get (hiểu đơn giản là từ các URL)
Form(<Tên form>) Chứa các giá trị trong form được gửi đến (với điều kiện form phải sử dụng phương pháp POST Cookies(<Tên cookie>) Chứa các thông tin của các cookies được gửi trong
yêu cầu HTTP
ServerVariables(<tên biến>) Chứa danh sách các giá trị của các biến môi trường đã được xác định trước
a. Tập hợp QueryString
Tập hợp QueryString cho phép ta lấy thông tin từ máy khách gửi đến, có thể là một form được gửi theo phương pháp GET hoặc dữ liệu được gắn với URL khi trang web được yêu cầu.
Để đưa được các biến vào chương trình, sau phần cuối của địa chỉ thông thường ta thêm dấu (?) rồi sau đó đến từng cặp <tên biến> = <giá trị> được phân cách nhau bởi dấu (&).
Ví dụ: để truyền ba biến a, b, c có giá trị lần lượt là 1, 2, 1 về trang PTBAC2.ASP trên server thì chuỗi URL khi đó như sau.
http://localhost/ptbac2.asp?a=1&b=2&c=1
Tập hợp này có tính năng tương đối hạn chế về số lượng các kí tự có thể gửi được trong tiêu đề và trong yêu cầu HTTP. Giới hạn dữ liệu này ở khoảng dưới 2000 kí tự. Nêu số lượng kí tự vượt quá số lượng giới hạn thì chúng sẽ không được sử dụng mặc dù script vẫn chạy.
Ví dụ: ta quay lại ví dụ Giải phương trình bậc 2 ở bài trước. Các biến a, b, c được lấy vào trong chương trình bằng cách lấy từ QueryString.
Và các biến này được truyền vào từ URL của trình duyệt:
b. Tập hợp Form
Tập hợp này cho phép nhận thông tin đầu vào từ các form được gửi đến thông qua phương thức POST. Phương thức này có ưu điểm hơn phương thức GET ở chỗ là có thể truyền được lượng dữ liệu lớn.
* Ví dụ: Ta có thể sửa lại chương trình giải phương trình bậc 2 trong phần trên để cho phép người sử dụng nhập dữ liệu từ trang PTBAC2.HTM và gửi dữ liệu sang trang
GIAIPTB2.ASP để xử lý như sau: - Mã lệnh PTBAC2.HTM
- Mã lệnh phần đọc dữ liệu trong GIAIPTB2.ASP
- Kết quả
Giải thích chi tiết cho phương pháp này sẽ được đề cập ở phần sau.
c. Tập hợp Cookies
Cookies là những mẩu thông tin nhỏ được lưu trên máy trạm thông thường các Cookies được sử dụng để xác định các người sử dụng truy cập trang web.
Chi tiết về Cookies sẽ được đề cập trong một phần riêng về Cookies.
d. Tập hợp ServerVariables
ServerVariables là một tập các giá trị của HTTP header được gửi từ client cùng với giá trị một số biến môi trường của webserver. Các thành phần trong tập này đều là giá trị chỉ đọc.
5.7.2.2. Thuộc tính
Đối tượng Request chỉ có một thuộc tính duy nhất đó là TotalBytes cung cấp thông tin về số bytes dữ liệu mà người dùng chuyển lên web server. Thuộc tính này ít được sử dụng trừ trường hợp xử lý đặc biệt trên server như upload file từ phía client.
5.7.3.3. Phương thức
Đối tượng Request chỉ có một phương thức là BinaryRead phương thức này rất ít được sử dụng và thường không được dùng đến nên ta không đề cập cụ thể ở đây.
5.7.3. Đối tượng RESPONSE
Cùng với đối tượng Request, đối tượng Response cho phép chúng ta quyền kiểm soát thông tin từ server được gửi trả về trình duyệt. Hai đối tượng Request và Response tạo thành một cặp cho phép tạo nên sự giao tiếp client-server.
5.7.3.1. Các tập hợp
Đối tượng Response chi có duy nhất một tập hợp đó là tập hợp Cookies. Tập hợp này cho phép chúng ta tạo nên các Cookies trên máy trạm.
Chi tiết về Cookies sẽ được đề cập trong một phần riêng về Cookies.
5.7.3.2. Một số thuộc tính
TÊN THUỘC TÍNH MIÊU TẢ
Buffer = [True | False] - Điều khiển thông tin được xử lý trước khi gửi về cho client + Nếu được đặt là True thì tất cả các script trên trang phải được chạy trước khi gửi kết quả về client
+ Nếu được đặt là False (giá trị mặc định) thì những kết quả sẽ được gửi về client ngay sau khi mỗi dòng được thực hiện xong.
Charset(charset_name) Đặt tên tập hợp các kí tự
ContentType="Kiểu" Thiết đặt nội dung HTTP. Có một số kiểu phổ biến + Text/HTML (Mặc định)
+ Image/gif + Image/jpeg + Text/plain
Expires = Số phút Đặt thời gian một trang web được cất trên browser trước khi nó hết hạn.
Nếu đặt =0 trang này sẽ không bao giờ được lưu lại trên browser.
5.7.3.3. Một số phương thức
TÊN PHƯƠNG THỨC MIÊU TẢ
Write(Chuỗi kí tự) Gửi chuỗi kí tự về trình duyệt
Redirect(Địa chỉ mới) Chuyển địa chỉ trình duyệt sang một địa chỉ mới
Chú ý: Trong một số phiên bản cũ của web server ta không được thực hiện bất cứ một lệnh viết nào lên trình duyệt trước khi thực hiện lệnh này. Nếu làm trái điều này sẽ gây ra lỗi.
End Kết thúc việc thực hiện scripts, trả về client giá trị hiện tại Flush Gửi ngay lập tức giá trị được lưu trong buffer về trình duyệt.
Lệnh này đòi hỏi Response.Buffer phải được đặt là true, nếu không sẽ gây ra lỗi run-time error.
Clear Xóa ngay lập tức toàn bộ giá trị output được lưu trong buffer. Lệnh này đòi hỏi Response.Buffer phải được đặt là true, nếu không sẽ gây ra lỗi run-time error.
Ví dụ:
Trong ví dụ dưới đây có 2 trang web, một trang là trang LOGIN.HTM, trên trang này có một form cho phép người dùng nhập tên và mật khẩu. Khi nhấn submit, các thông tin được gửi sang trang LOGIN.ASP. Nếu tên truy nhập đúng là "user" và mật khẩu đúng là
"password" thì trình duyệt tự động chuyển sang trang DEFAULT.ASP, ngược lại trình duyệt quay về trang LOGIN.HTM
- Kết quả:
- Trang LOGIN.ASP
5.7.4. Đối tượng APPLICATION 5.7.4.1. Khái niệm 5.7.4.1. Khái niệm
Một ứng dụng trên web là một tập hợp các trang có thể truy cập thông tin qua một thư mục ảo xác định nào đó. Các trang này làm việc cùng nhau để thực hiện một mục đích hoặc một công việc nào đó. Và đối tượng Application dùng để tạo ra mối liên kết giữa các trang này.
Do đối tượng Application dùng để chia sẻ thông tin giữa các trang nên Application là toàn cục với mọi trang trong web. Và là toàn cục với tất cả client sử dụng trang web này, việc thay đổi một thuộc tính của Application tại một vị trí sẽ tạo ra sự thay đổi ở tất cả các vị trí khác.
Các biến Application chỉ được tạp ra trong Global.asa nhưng có thể được truy nhập và sửa đổi bởi bất cứ một trang nào trong web.
Đối tượng Application được khởi tạo vào lúc máy khách đầu tiên yêu cầu bất kì một file nào trong thư mục ảo của web.
* Ví dụ sử dụng Application
5.7.4.2. Các tập hợp của đối tượng Application
a. Contents(Key):
Tập hợp này chứa tất cả các biến được giới hạn ở mức độ ứng dụng và các đối tượng được bổ xung vào ứng dụng hiện tại thông qua các script.
Tập hợp này là tập hợp mặc định của Application nên hai cách viết sau đây là hoàn toàn tương đương:
Application("dbTimeOut") = 15
và
Application.Contents("dbTimeOut") = 15
Tập hợp này có các thuộc tính Item, Key, Count, Chi tiết xem lại bài tập hợp
b. StaticObject(Key):
Thuộc tính này dùng để truy xuất các đối tượng được định nghĩa trong tập hợp. Tập hợp này có các thuộc tính Item, Key, Count, Chi tiết xem lại bài tập hợp
5.7.4.3. Các phương thức
a. Phương thức Lock
Phương thức này dùng để ngăn cản không cho người dùng khác thay đổi giá trị các biến trong tập hợp Application. Sử dụng phương thức này để giải quyết vấn đề tương tranh giữa các người sử dụng.
Phương thức này sẽ khóa toàn bộ đối tượng Application (ta không thể thay đổi được bất cứ một thuộc tính nào) do đó ta phải sử dụng phương thức này trong thời gian ít nhất có thể.
* Cú pháp: Application.Lock b. Phương thức UnLock
* Chức năng: Tháo khóa ta đã đặt bằng phương thức Lock ở trên * Cú pháp: Application.UnLock
c. Cách sử dụng Lock và UnLock
Ví dụ:
5.7.4.4. Các sự kiện
Đối tượng Application chỉ có hai sự kiện là + Application_OnStart
+ Application_OnEnd
Đây là hai sự kiện được xử lý trong file cấu hình Global.asa đã được đề cập ở Bài 3
5.7.4.5. Vấn đề lưu trữ dữ liệu bằng đối tượng Application
Về bản chất, đối tượng Application cũng là một biến nằm trong bộ nhớ của máy chủ, ta không nên lưu trữ dữ liệu lâu dài trong đối tượng Application. Dữ liệu trên biến Application sẽ bị mất sau khi sự kiện Application_OnEnd xảy ra.
Nếu ta muốn lưu trữ lại những dữ liệu nào đó của Application thì ta cần viết các mã lệnh xử lý lưu trữ (đưa các giá trị biến này vào trong những dữ liệu chắc chắn nằm trên bộ nhớ ngoài như file, cơ sở dữ liệu...) trong thủ tục đáp ứng sự kiện Application_OnEnd. Đến khi ứng dụng được khởi động lại, ta cần đọc lại các giá trị đã lưu vào bộ nhớ trong thủ tục đáp ứng sự kiện Application.OnStart
5.7.5. ĐỐI TƯỢNG SESSION
Đối tượng Session được sử dụng để lưu trữ thông tin về một phiên làm việc của người sử dụng hay những thay đổi về phiên làm việc đó. Những biến nằm trong đối tượng Session giữ toàn bộ thông tin về người sử dụng và nó có thể sử dụng ở trên một máy trạm và có hiệu lực trên tất cả các trang trong một web.
Máy phục vụ web tìm ra người sử dụng bằng một giá trị SessionID duy nhất, biến Session này được gán cho người sử dụng kể từ khi người đó bắt đầu phiên làm việc của mình trên web browser. SessionID được lưu trên máy khách bằng cách viết một Cookie chứa SessionID trên máy người sử dụng. Cookie này sẽ được gửi về phía server mỗi khi người sử dụng đưa ra yêu cầu, để nhận ra sự tồn tại của người sử dụng này máy chủ phải đi tìm SessionID trong bộ nhớ và so sánh nó với SessionID trong Cookie vừa nhận được.
5.7.5.1. Các tập hợp của đối tượng Session.
Tương tự đối tượng Application, đối tượng Session có hai tập hợp đó là Contents và
StaticObjects. Phương pháp sử dụng và truy cập tương tự như đối với Application tuy nhiên với đối tượng Session ta có thể thêm, bớt, thay đổi các giá trị của Session từ bất kì vị trí nào