You are on page 1of 124

Chương I Giới thiệu Internet và Intranet........................................................................

3
1.1. Kiến trúc logic mạng máy tính.........................................................................................3
1.1.1. Khái niệm cơ bản về kiến trúc máy tính...................................................................3
1.1.2. Kiến trúc Peer-to-Peer và các hệ thống tính toán.....................................................4
1.1.3 Kiến trúc khách/chủ cổ điển.......................................................................................5
1.1.4. Kiến trúc khách chủ dựa Web.................................................................................10
1.2. Nền tảng của các Công nghệ mạng................................................................................12
1.2.1. Sự tương tác với Webserver....................................................................................12
1.2.2. Xử lý thông tin phân tán trên nền tảng cả các chương trình dễ biến đổi................15
1.2.3. Truy xuất tới cơ sở dữ liệu quản hệ........................................................................23
Chương II Ngôn ngữ HTML........................................................................................27
2.1 Khái niệm về ngôn ngữ HTML.......................................................................................27
2.2 Lập trình Web với ngôn ngữ HTML...............................................................................27
2.2.1 Các thành phần cơ bản của html..............................................................................27
2.2.2 Cấu trúc tệp HTML..................................................................................................28
2.3 Các tag cơ bản trong HTML...........................................................................................28
2.3.1. Thẻ giải thích..........................................................................................................28
2.3.2 Các thẻ định dạng văn bản.......................................................................................28
2.3.4 Một số kí tự đặc biệt trong HTML...........................................................................31
2.3.5 Các tag dùng thiết kế bảng.......................................................................................32
2.3.6 Các tag tạo Frame....................................................................................................33
2.3.7 Các tag dùng tạo Form.............................................................................................33
Chương III Cascading style sheets...............................................................................35
2.1 Căn bản về CSS (Cascading style sheets).......................................................................35
2.2 Cú pháp CSS...................................................................................................................35
2.2.1 Phần tử chọn – Seclector..........................................................................................35
2.2.2 Các phần tử lựa chọn lớp giả động..........................................................................39
2.2.3 Thuộc tính, miêu tả, qui tắc......................................................................................41
2.3 Bổ sung CSS vào tài liệu HTML...................................................................................44
2.4. Các mô hình trực quan...................................................................................................45
Chương IV Ngôn ngữ kịch bản Javascript...................................................................48
4.1. Giới thiệu ngôn ngữ kịch bản Javascrip.........................................................................48
4.2. Ngôn ngữ kịch bản JavaScript.......................................................................................50
4.2.1 Kiểu dữ liệu..............................................................................................................50
4.2.2 Khai báo biến...........................................................................................................50
4.2.3. Các toán tử JavaScript ............................................................................................51
4.2.4. Các câu lệnh rẽ nhánh và lặp..................................................................................53
4.2.3. Các đối tượng trong JavaScript...............................................................................59
4.2.4. Hàm.........................................................................................................................66
4.2.5. Lập trình hướng đối tượng trong JavaScript...............................................................68
4.2.5.1 Tạo một đối tượng.................................................................................................68
4.2.6. Lập trình với các đối tượng của trình duyệt............................................................69
4.2.7. HTML Forms..........................................................................................................75
Chương V Active Server Pages...................................................................................89
5.1.Giới thiệu công nghệ ASP...............................................................................................89
5.2 Cú pháp và thao tác cơ bản.............................................................................................89
5.2.1. Cách chèn các đoạn mã VBScript vào trong trang web..........................................89
5.2.2. Chú thích.................................................................................................................90
5.2.5. Các toán tử..............................................................................................................91
5.2.4. Hằng và biến...........................................................................................................91

1
5.3. Các câu lệnh...................................................................................................................92
5.3.1. Lệnh rẽ nhánh..........................................................................................................92
5.3.2. Lệnh lặp xác định....................................................................................................93
5.3.3. Vòng lặp không xác định........................................................................................94
5.4 Hàm và thủ tục................................................................................................................96
5.4.1. Hàm.........................................................................................................................96
5.4.2. Thủ tục....................................................................................................................96
5.4.3. Ví dụ sử dụng hàm và thủ tục (Giaỉ phương trình bậc 2 một ẩn số).......................96
5.4.2. MỘT SỐ HÀM THƯỜNG DÙNG TRONG VBSCRIPT......................................97
5.4.3. ĐOẠN MÃ DÙNG CHUNG..................................................................................99
5.5. Tệp cấu hình GLOBAL.ASA.......................................................................................100
5.5.1. Các sự kiện............................................................................................................100
5.5.2. Khai báo đối tượng................................................................................................100
5.5.3. Một file cấu hình Global.asa đơn giản..................................................................101
5.5.2. TẬP HỢP (COLLECTION) TRONG ASP..........................................................101
5.5.2.1. Khái niệm...........................................................................................................101
5.5.2.2. Cách truy cập các phần tử trong tập hợp............................................................102
5.6. Xử lý các FORM dữ liệu............................................................................................103
5.6.1. Mở đầu..................................................................................................................103
5.6.2. Sử dụng phương thức GET...................................................................................103
5.6.3. Sử dụng phương thức POST.................................................................................104
5.7. Các đối tượng cài sẵn trong ASP.................................................................................106
5.7.1. Các đối tượng ASP................................................................................................106
5.7.2. Đối tượng REQUEST...........................................................................................106
5.7.3. Đối tượng RESPONSE.........................................................................................109
5.7.4. Đối tượng APPLICATION...................................................................................110
5.7.5. ĐỐI TƯỢNG SESSION.......................................................................................112
5.7.6. ĐỐI TƯỢNG SERVER........................................................................................114
5.8. COOKIES....................................................................................................................117
5.8.1. Khái niệm COOKIES............................................................................................117
5.8.2. Thiết lập COOKIES..............................................................................................117
5.8.3. Lấy giá trị của COOKIES.....................................................................................117
5.8.4. Thư mục COOKIES..............................................................................................117
5.8.5. Kiểm tra xem COOKIES có dùng khóa không.....................................................118
5.9 Giới thiệu ADO và các kết nối cơ sở dữ liệu................................................................118
5.9.1 Giới thiệu...............................................................................................................118
5.9.2 Kế nối với cơ sở dữ liệu.........................................................................................118
5.9.3 Các đối tượng của ADO.........................................................................................119

2
Chương I Giới thiệu Internet và Intranet
1.1. Kiến trúc logic mạng máy tính
1.1.1. Khái niệm cơ bản về kiến trúc máy tính

Với sự phát triển không ngừng về qui mô và độ phúc tạp của các mô hình mạng máy tính đã
dẫn đến sự phức tạp trong công nghệ vận hành của các mạng này, và hiểu được sự phức tạp
này là yếu tố cần thiết cho phép tổ chức bảo vệ hiệu quả nguồn tài nguyên thông tin. Công
nghệ vận hành của bất kì hệ thống nào đều phụ thuộc vào kiến trúc miêu tả các thành phần
của công nghệ, các chức năng và mỗi quan hệ của chúng.

Rất khó để hiểu và phân tích kiến trúc của hệ thống phúc tạp một cách trọn vẹn. Để giảm độ
phức tạp của sự phân tích, một kiến trúc sẽ được cân nhắc ở các mức khác nhau. Điều này rất
có ích để xem xét mỗi mức với các chức năng trừu tượng ẩn đi hiết tiết của sự thực thi các
thành phần của kiến trúc.

Khi nghiên cứu kiến trúc của các mạng máy tính, việc phân biệt giữa những kiến trúc vật lý
và kiến trúc logic rất cần thiết. Kiến trúc vật lý miểu tả cấu trúc, chức năng và những mối
quan hệ trung gian giữa các giao thức thực thi tại tầng dưới và các tầng giữa trong mô hình
phân lớp chuẩn của sự tương tác mạng (mô hình tham chiếu OSI, một cách cụ thể giao thức
của tầng vật lý, liên kết dữ liệu, mạng, giao vận và tầng phiên). Vì vậy, kiến trúc vật lý không
chỉ phụ thuộc vào kiến trúc, chức năng và mối quan hệ qua lại của phần cứng mạng, mà còn
phụ thuộc sự thực thi phần mềm của các giao thức tại tầng thấp và tầng giữa của mô hình
OSI. Để có thể phân tich chi tiết về kiến trúc vật lý, cần phải xem xét tại tất cả các mức, tương
ứng với tầng vật lý, liên kết dữ liệu, mạng, giao vận và phiên của mô hình phân lớp chuẩn.

Hình. 1.1: Mối quan hệ giữa lớp OSI và kiểu kiến trúc mạng

3
Kiến trúc logic miêu tả cấu trúc, nhiệm vụ và mối quan hệ của phần mềm thực thi các giao
thức ở tầng trên, đặc biệt các giao thức ở tầng trình diễn và tầng ứng dụng. Kiến trúc này
mang lại công nghệ tích hợp và hợp nhất của mạng máy tính và có thể xây dựng các mức trừu
tượng khác nhau của kiến trúc vật lý.

Hiện nay, có một vài loại kiến trúc mạng logic như sau:

 Kiến trúc ngang hàng


 Kiến trúc khách/chủ cổ điển
 Kiến trúc khách chủ dựa vào Web

Sự xuất hiện của các mô hình đều liên quan đến các giai đoạn khác nhau của sự phát triển hệ
thống mạng máy tính. Sự lựa chọn chính xác mô hình cho kiến trúc logic của mạng máy tính
cho phép nhà thiết kế mạng đáp ứng những yêu cầu về tình hiệu quả, độ tin cậy bảo vệ những
nguồn tài nguyên mạng, sự uyển chuyển thiết lập mạng và hơn nữa đó là chi phí nhỏ nhất cho
việc xây dựng và quản trị.

1.1.2. Kiến trúc Peer-to-Peer và các hệ thống tính toán

Bước đầu tiên trong sự tiến triển các hệ thống tính toán xuất hiện từ năm 1940 đến 1970,và
trong thực tế, nó đã quay trở lại ngay sau khi chiếc máy tính đầu tiên được phát minh ra.

Theo nguyên tắc, mỗi một hệ thống tính toán tại thời điểm này đều dựa vào việc sử dụng chia
sẻ của máy tính đa người dùng, khi mà máy tính chưa xuất hiện. Kiến trúc của những hệ
thống tính toán này, vận hành trong chế độ tự trị, được tập trung với các thiết bị đầu cuối kết
nối đến máy tính trung tâm (Hình. 1.2).

Hình. 1.2: Kiến trúc đầu tiển của hệ thống tính toán

Tuy nhiên, nếu các máy tính được kết nối bởi các liên kết truyền thông để tạo thành một
mạng, mạng như vậy có một kiến trúc ngang hàng, trong đó không có các máy tính tận hiến
cung cấp toàn bộ nguồn tài nguyên của chúng cho các máy tính khác trong mạng sử dụng
chung.

Vì vậy, kiến trúc tập trung thuộc về danh mục của một hệ thống tính toán tự trị dựa trên việc
sử dụng chia sẻ một máy tính đã người dùng, trong khi đó kiến trúc ngang hàng thuộc về danh
mục mạng máy tính bao gồm các máy tính có vai trò như nhau, không tồn tại máy tính tận
hiến cấp nguồn tài nguyên của chúng cho việc sử dụng chung.

4
Trong kiến trúc tập trung, tất cả các nguồn tài nguyển của hệ thống tính toán, bao gồm thông
tin, được tập trung trong máy tính trung tâm, được biết như là máy tính lớn (máy tính lớn là
một thành phần tập trung của hệ thống máy tính). Các thiết bị đầu cuối được kết nối đến máy
tính tập trung bằng cáp được sử dụng như phương tiện chính truy cập đển những nguồn tài
nguyên thông tin. Vì một thiết bị đầu cuối là một thiết bị tương đối đơn giản, nó không đòi
hỏi bất kì thao tác đặc biệt nào để thiết lập hay yêu cầu cấu hình phần mềm được thực hiện
bởi người dùng cuối, khi mà không có phần mềm được lưu trữ trong thiết bị đầu cuối. Việc
điều khiển các thiết bị đầu cuối được thiết lập chủ yếu (cetrally) từ máy tính lớn, và tất cả
thiết bị đầu cuối đều có cũng kiểu. Vì vậy, đảm bảo được chương trình chạy trên một thiết bị
đầu cuối bất kì có thể chạy trên tất cả các thiết bị đầu cuối trong cùng một cách.

Về mặt lưu trữ dữ liệu và bảo mật xử lý dữ liệu, sự thuận lợi chính của kiến trúc tập trung đó
là mối quan hệ đơn giản của việc xây dựng và quản trị hệ thống bảo mật thông tin. Điều này
dẫn tới sự tập trung nguồn tài nguyên, vì điều đó mang lại sự dễ dàng để bảo vệ rất nhiều đối
tượng nếu những đối tượng này được xác định ở một nơi hơn là chúng được phân bố ở những
vị trí khác nhau

Mặc dù có nhiều thuận lợi, những hệ thống tính toán đầu tiên có số điều hạn chế như thiếu sự
uyển chuyển hệ thống, không thuận lợi sử dụng đối với người sử dụng cuối và chi phí cao.

Khi sử dụng những hệ thống tính toán với kiến trúc tập trung bắt đầu mất dần đi tầm quan
trọng, mạng ngang hàng trở nên phổ biến hơn, bởi vì chi phí của các mạng này khá thấp. Tuy
nhiên, các mạng ngang hàng hiện nay kết nối các PC hơn nhưng máy tính đa người dùng. Vì
vậy, một thuộc tính chính của mạng ngang hàng đó là thiếu vắng các máy tính tập trung cung
cấp nguồn tài nguyên của chính nó cho việc sử dụng chung.

Những nhược điểm quan trọng của những mạng ngang hàng đó là sự thực thị, bảo mật và sự
an toàn ở mức thức của chúng, cũng như sự phức tạp trong quản trị. Thêm vào đó, những
nhược điểm này tăng lên khi số lượng các máy tính trong mạng tăng. Vì vậy, kiến trúc mạng
ngang hàng thích hợp cho việc kết nối số lượng máy tính ít với yêu cầu về sự an toàn và khả
năng xử lý dữ liệu thấp.

1.1.3 Kiến trúc khách/chủ cổ điển

Những nhược điểm của hệ thống máy tính tập trung và các mạng máy tính ngang hàng gần
đây đã được loại bỏ bởi cấu trúc của các hệ thống máy tính dựa trên kiến trúc khách/chủ. Kiến
trúc này xuất hiện từ khoảng năm 1980, đánh dấu giai đoạn 2 trong tiến trình công nghệ tính
toán. Đặc trưng của của giai đoạn này là sự phân quyền kiến trúc của hệ thống máy tính tự trị
và sự tương kết của chúng trong các mạng máy tính toàn cầu.

Kiến trúc phân quyền kết hợp với những hệ thống tính toán đầu tiên có thể là kết quả của sự
xuất hiện các máy tính cá nhân, khác với các thiết bị đầu cuối đơn, những máy tính cá nhân có
thể thực hiện rất nhiều các chức năng mà trước đây do máy tính trung tâm đảm nhiệm. Kết
quả của sự phân quyền này là có thể tạo nên các hệ thống máy tính toàn cầu hoặc cục bộ phân
tán bao gồm các máy tính cá nhân và các máy tính cung cấp tài nguyên của nó cho các máy
tính khác trong mạng dùng chung. Các máy tính cung cấp tài nguyên của nó được gọi là máy
chủ còn những máy tính sử dụng tài nguyên được chia sẻ gọi là máy khách. Theo đó kiến trúc
hệ thống máy tính phân tán như vậy được biết đến như là kiến trúc khách/chủ (Hình. 1.3). Các
máy tính cá nhân có vai trò máy khách cũng được gọi là các trạm làm việc của mạng.

5
Hình. 1.3: Kiến trúc khánh chủ

Một máy chủ đặc trưng được miểu tả bởi loại tài nguyên mà nó quản lý. Ví dụ, nếu nguồn tài
nguyên là cơ sở dữ liệu thì máy chủ đó được coi như là máy chủ cơ sở dữ liệu, mục đích
chính của nó đó là phục vụ các truy vấn của máy trạm cho việc xử lý dữ liệu. Nếu nguồn tài
nguyên là một hệ thống tệp, máy chủ được biết đến như là máy chủ tệp. và mục đích của nó là
chuyển các tệp tới các máy trạm. Nói chung, các máy chủ có khả năng cung cấp các nguồn tài
nguyên sử dụng chung, bao gồm cơ sở dữ liệu, các hệ thống tệp và một số dịch vụ khác được
thực hiện bởi số các chương trình máy chủ. Thêm vào đó, các máy chủ có thể cung cấp truy
cập tới các thiết bị ngoại vi (ví dụ, máy chủ in ấn có thể cung cấp việc chia sẻ truy cập đến
một máy in).

Chúng ta phân biệt giữa các mô hình kiến trúc khách, mỗi mô hình này tương ứng sự phân
loại thích hợp của các thành phần của kiến trúc phần mềm bên trong các máy tính mạng. Các
thành phần phần mềm phân phối được phân biệt bởi chức năng mà chúng có khả năng cung
cấp.

Các chức năng của bất kì một ứng dụng phần mềm nào có thể được chia thành 3 nhóm sau
đây:

 Các chức năng liên quan tới đầu vào (input) và đầu ra (output)
 Các chức năng ứng dụng, cụ thể tới từng vùng kiến thức (một vùng chuyên để giải
quyết một vấn đề nào đó) của ứng dụng
 Các chức năng quản lý dữ liệu Data mining

Bất kì một ứng dụng phân mềm hiện nay có thể được biểu diển bởi một cấu trúc bao gồm 3
thành phần sau:

 Các thành phần trình diễn, mà nó thực thi giao diện người dùng
 Các thành phần ứng dụng, thực thi các chức năng ứng dụng
 Các thành phần cung cấp truy cập tới các người tài nguyên thông tin, thông tin

Các mô hình của kiến trúc khách chủ dưới đây được xác định, tương ứng với các phương thức
phân phối của 3 thành phần phần mềm chính giữa các trạm làm việc và máy chủ mạng:

 Chỉ có dữ liệu được lưu trữ trên máy chủ (Hình. 1.4).

6
Hình. 1.4: Mô hình truy cập đến dữ liệu từ xa

 Bổ sung dữ liệu, nhà quản lý tài nguyên được xác định trên máy chủ, ví dụ một hệ
quản lý cơ sở dữ liệu (Hình. 1.5).

Hình. 1.5: Mô hình máy chủ điều khiển dữ liệu

 Dữ liệu, quản lý tài nguyên, và các thành phần ứng dụng được tập trung trên máy chủ
(Hình. 1.6).

Hình. 1.6: Mô hình khách/chủ hai lớp

 Các thành phân ứng dụng được lưu trên máy chủ, trong khi dữ liệu và quản lý tìa
nguyên được lưu trong máy chủ khác (Hình. 1.7).

Hình. 1.7: Mô hình khách/chủ ba lớp

Mô hình của kiến trúc khách chủ đầu tiên lưu trữ dữ liệu trên máy chủ, không cung cấp tính
năng hiệu quả cao, vì thông tin được xử lý trên các máy trạm và các tệp chứa thông tin này
phải được truyền cho việc xử lý từ máy chủ trên toàn bộ mạng. Việc truyền khối lượng lớn dữ
liệu trên toàn mạng dẫn tới sự trao đổi thông tin với tốc độ thấp. Tiếp theo, điểu này có thể

7
dẫn tới quá tải trên mạng. Chính vì lí do này, mô hình truy xuất dữ liệu từ xa chỉ có thể được
sử dụng cho các mạng khá nhỏ, với việc xử lý số lượng dữ liệu ít.

Hình 1.5 chỉ ra mô hình thứ 2 của kiến trúc khách chủ, trong đó thông tin đã được lưu trữ trên
máy chủ, đó là hệ thống quản lý tài nguyên (ví dụ DBMS). Đây là mô hình máy chủ điều
khiển dữ liêu. Các thành phần trình diễn và ứng dụng đã được kết hợp và thực thi trên máy
trạm, hỗ trợ các chức năng hiển thị và dữ liệu đầu vào cũng như các chức năng ứng dụng.
Theo quy ước, việc truy cập đến các nguồn tài nguyên thông tin được cung cấp với các thao
tác của ngôn ngữ đặc biệt (ví dụ, SQL trong trường hợp của các cơ sở dữ liệu) hoặc gọi các
chức năng chứa trong các thư viện chương trình chuyên dụng. Các câu truy vấn tạo ra các
nguồn tài nguyên thông tin được gửi tới các trình quản lý tài nguyên. Trình quản lý tài
nguyên xử lý các truy vấn và trả về các khối dữ liệu cho máy trạm.

Ưu điểm của mô hình máy chủ điều khiển dữ liệu so với mô hình truy cập dữ liệu từ xa đó là
thông tin ít được truyền trên mạng hơn. Đó là nhờ có việc lựa chọn các đơn vị thông tin được
yêu cầu từ các tệp không được thực hiện trên máy trạm mà được thực hiện trên máy chủ. Nói
chung, tại thời điểm hiện tại, có rất nhiều công cụ phát triển, cung cấp phát triển ứng dụng
nhanh, sử dụng một giao diện chuẩn, thao tác với DBMS hướng SQL. Điều này cung cấp sự
thống nhất, sự thao tác giữa các thành phần, và rất nhiều sự lựa chọn các công cụ phát triển
phần mềm.

Nhược điểm chính của mô hình điều khiển dữ liệu đó là không có danh giới rõ ràng giữa
thành phần trình diễn và thành phần ứng dụng. Điều này dẫn đến cản trở sự phát triển tiếp
theo của hệ thống tính toán có kiến trúc xây dựng dựa vào mô hình này. Hơn thế nữa, sự thay
đối một thành phần yêu cầu sự thay đổi của toàn bộ hệ thống

Toàn bộ những thuận lợi và bất lợi của mô hình máy chủ điều khiển dữ liệu được liệt kê ở
trên, có thể kết luận rằng dựa vào mô hình này là phù hợp nhất xây dựng những hệ thống tính
toán hướng xử lý nội dung thông tin vừa phải, mà nội dung thông tin này không tăng theo thời
gian. Vì vậy, độ phức tạp của các thành phần áp dụng ứng dụng sẽ không cao.

So với mô hình máy chủ điều khiển dữ liệu, mô hình khách chủ hai lớp thuận tiện hơn để điều
hành. Mô hình này đã được phát triển với giả thuyết rằng, việc thực hiện xử lý trên máy trạm
được giới hạn đối với các chức năng trình diễn, trong khi các chức năng ứng dụng và truy cập
dữ liệu được thực hiện ở phía máy chủ. Những chức năng ứng dụng có thể được thực hiện
trong các chương trình riêng rẽ hoặc trong các thủ tục lưu trữ, được biết đến như là các thủ tục
cơ sở dữ liệu. Những thủ tục này được lưu trữ trong cơ sở dữ liệu và được thực hiện trên máy
chủ, nơi thành phần điều khiển truy xuất dữ liệu, tương đương nhân của DBMS cũng hoạt
động.

Ngược lại với mô hình máy chủ điều khiển dữ liệu, lợi ích của máy chủ tích hợp rất rõ ràng:
đơn giản, hiệu quả cao, quản trị tập trung, và vì vậy giảm bớt việc sự dụng các nguồn tài
nguyên mạng. Từ những lợi ích này, có thể đi đến một kết luận đó là mô hình máy chủ tích
hợp là tối ưu cho các mạng lớn hướng về xử lý số lượng lớn thông tin, hoặc sẽ là mô hình
mong đợi trong thời gian tới.

Khi các thành phần ứng dụng ngày càng phức tạp và sử dụng nhiều nguồn tài nguyên, một
máy chủ riêng biệt (máy chủ ứng dụng) có thể được sử dụng. Chính từ nhu cấu này đem lại
mô hình ba lớp của kiến trúc khách chủ. Lớp đầu tiên chính là máy trạm, lớp thứ là máy chủ
ứng dụng, và lớp ba chính là máy chủ điều khiển dữ liệu. Kiến trúc khách chủ là hai lớp khi
các thành phần ứng dụng được đặt trên máy trạm cùng với thành phần trình diễn (Hình. 1.4,
Hình. 1.5), hoặc trên máy chủ cùng với trình quản lý tài nguyên và dữ liệu (Hình. 1.6).

8
Bên trong khung của máy chủ ứng dụng, một vài chức năng ứng dụng có thể được thực hiện,
mỗi chức năng thiết lập mẫu các dịch vụ riêng biệt, cung cấp một vài chức năng cho bất kì
chương trình có thể và muốn sử dụng chúng. Có một vài máy chủ ứng dụng, mỗi máy chủ
hướng về tập các dịch vụ xác định. Bất ki một chương trình nào sử dụng dịch vụ đều được
xem như là máy chủ. Chi tiết thực hiện các chức năng ứng dụng trên máy chủ ứng dụng được
ẩn đi đối với máy trạm. Các truy vận nhận từ các ứng dụng của máy trạm được đặt trong hàng
đợi kết hợp với các máy chủ xử lý ứng dụng, tách và truyền truy vấn cho việc xử lý theo chế
độ ưu tiên.

Máy trạm có thể có nhiều hơn một thành phần trình diễn. Thành phần trình diễn có thể hỗ trợ
giao diện cho người dùng cuối (tại thời điểm đó, nó hoạt động như thành phần trình diễn); nó
có thể cung cập chuyển dữ liệu từ các thiết bị; và có thể là máy chủ ứng dụng. Cuối cùng cho
phép thựchiện các hệ thống ứng dụng, bao gồm các máy chủ ứng dụng của vài mức. Kiến trúc
của hệ thống như vậy có thể được xem như là một nhân bao xung quanh bởi các vòng đồng
tâm. Nhân bao gồm các máy chủ ứng dụng, mà ở đó các chức năng ứng dụng cơ bản được
thực hiện. Tập biểu tượng nhẫn của các máy chủ ứng dụng hoạt động như các máy trạm liên
quan đến máy chủ của mực trong. Không có sự giới hạn số các mức của các máy chủ ứng
dụng.

Sự hiện diện của các đường rành giới giữa các thành phần của máy chủ phần mềm trong kiến
trúc khách/chủ và sự phân phối cân bằng của các thành phần trong các máy tính của mạng cho
phép mức như vậy mềm dẻo không có hiệu lực trong kiến trúc ngang hàng. Như vậy, nguồn
tài nguyên dành ở mức cao của sự thực thi và khả năng mở rộng và cải tiến chức năng của hệ
thống có thể được thực hiện.

Kiến trúc mạng khách/chủ, xuất hiện ở giai đoạn hai của sự tiến triển các cộng nghệ mạng
máy tính còn được gọi là kiến trúc khách/chủ cổ điển. Sau đây là một số mô tả chức năng của
mô hình này:

 Máy chủ không sinh ra thông tin cuối cùng mà là dữ liệu, dữ liệu này tuy thuộc vào sự
biên dịch bởi các máy trạm
 Các thành phần của hệ thống ứn dụng được phân tán trong các máy tính trên mạng.
 Các giao thức riêng, không tương thích với TCP/IP, có thể được sử dụng giữa các máy
trạm và máy chủ.
 Mỗi máy tính mạng được hướng thực thi các chương trình cục bộ.

Chức năng cuối cùng nảy sinh đó là bảo mật thông tin. Khi chỉ các chương trình cục bộ được
thực hiện trên máy tính, sự di chuyển các chương trình trên mạng trong suốt quá trình xử lý
các truy vấn được thực hiện bởi máy trạm đến máy chủ không xuất hiện. Khả năng thực hiện
các chương trình gây tác hại hoặc sự lây nhiễm máy tính sẽ giảm đi

Về mặt lưu trữ dữ liệu và xử lý bảo mật, kiến trúc khách/chủ có số bất lợi sau:

 Phân phối vật lý của các thành phần của các chương trình ứng dụng và sự hỗn loạn,
không tuân thủ qui tác của các hệ thống tính toán làm phức tạp xây dựng và quản trị
hệ thống bảo mật
 Một phần bảo vệ tài nguyên thông tin lưu trên máy tính cá nhân được miêu tả bởi và
phụ thuộc tăng điểm yếu.
 Việc sử dụng các giao thức riêng cho việc chuyển đổi dữ liệu giữa các máy tính yêu
cầu việc phát triển các công cụ bảo mật riêng như vậy dẫn đến tăng chi phí.

9
 Với việc mất các thiết lập phần mềm của các máy trạm, thực hiện các thủ tục phức tạp
cho việc kết nối lại và phối hợp máy tính này với phần còn lại của hệ thống là cần
thiết, dẫn đến sự tăng thời gian phục hồi lỗi.

1.1.4. Kiến trúc khách chủ dựa Web

Có rất nhiều điều bất lợi đối với các mạng máy tính dựa theo kiến trúc khách chủ cổ điển,
những bất lợi này có thể được loại bỏ bởi bằng cách kết hợp các đặc tính tốt nhất của các hệ
thống tập trung và các hệ thống khách chủ cổ điển. Kiến trúc mới của các mạng máy tính
được gọi là kiến trúc Intranet. Nó còn được gọi là kiến trúc Web hay là kiến trúc khách chủ
dựa vào công nghệ Web. Kiến trúc này là kết quả nghiên cứu trong thời gian dài và phát triển
trong lĩnh vực áp dụng Internet vào trong mạng cục bộ. Sự xuất hiện của kiến trúc Intranet
trong năm 1993 đã được cân nhắc cho việc bắt đầu của giai đoạn 3 trong sự tiến triển của các
hệ thống mạng máy tính.

Chức năng chính của kiến trúc Intranet chính là các chức năng đã bị loại bỏ trong mô hình
máy tính trung tâm trong giai đoạn hai của sự tiến triển các hệ thống tính toán. Nèn tản của
kiến trúc mới này đó là công nghệ.

Công nghệ Web còn được gọi là “các văn bản Web”, mà các văn bản này được lưu trên máy
chủ và được biên dịch và hiển thị bởi chương trình duyệt hoạt động trên máy trạm
workstations (Hình. 1.8). Các chương trình duyệt được gọi là trình duyệt Web.

Hình. 1.8: Kiến trúc khác/chủ dựa vào công nghệ Web

Nói cách khác, một tài liệu Web biểu diễn các tài liệu siêu media, bao gồm các trang Web
được nối với nhau bởi các liên kết. Mỗi một trang Web có thể chứa các đối tượng và các liên
kết tới các trang Web khác. Theo qui luật đã định, một trang Web được biểu diễn bởi một tệp
văn bản, với định dạng xác định mà chỉ rõ các liên kết tới các đối tượng khác và các văn bản
Web, được xác định trên các host mạng khác nhau. Thực ra, về bản chất một văn bản Web
chứa chỉ một trang Web nhưng hợp lý nhất là nó có thể bao gồm số lượng lớn các trang, mà
các trang này thuộc về các văn bản Web khác nhau.

Một trang Web có thể chứa văn bản và hình ảnh. Không giống như văn bản giấy, trang Web
có thể là tương tác với các chương trình máy tính và có thể chứa các liên kiết đến những đối

10
tượng khác. Bất kì link nào chứa trong một trang Web được đánh dấu bởi màu và/hoặc dấu
gạch chân.

Hệ thống các siêu liên kết dành được dựa vào yếu đó đó là các vùng lựa chọn của tài liệu,
được biểu diễn bởi text, ảnh, hoạt động như các liên kết đến các đối tượng được kết nối logic
đến chúng. Vì vậy các đối tượng liên kết có thể được lưu trữ tại vị trí bất kì nào trên mạng
Một trang Web có thể chứa liên kết đến một số kiểu đối tượng sau:

 Các phần khác của một tài liệu Web


 Các tài liệu Web hoặc các tài liệu có định dạng khác (ví dụ tài liệu bảng tính, soạn
thảo), mà các tài liệu này có thể được xác định trên bất kì máy tính nào trên mạng
 Các đối tượng Multimedia, bao gồm các ảnh, âm thanh và video.
 Một chương trình sẽ được thực thi trên máy chủ sau kích vào liên kết
 Một chương trình được truyền tới cho máy trạm bằng trình duyệt từ máy chủ và được
biên dịch và thực thi trên máy trạm
 Các dịch vụ khác, bao gồm e-mail, sao chép các tệp thông qua mạng, tìm kiếm thông
tin vv..

Từ những định nghĩa về tài liệu Web, dễ dàng cho các chương trình điều hướng, thực hiện
trên các máy trạm , không bị hạn chế hiển thị các trang Web và thực hiển truyền tới các đối
tượng khác. Chương trình điều hướng có thể là chương trình thực sự trên máy chủ và thông
dịch hoặc chạy các môdun có khả năng thực thi liên quan tới tài liệu Web trên máy trạm

Việc truyền các tài liệu và các đối tượng từ máy chủ đến máy trạm sau khi các yêu cầu từ
trình duyệt được xử lý bởi một chương trình hoạt động trên máy chủ, chương trình này được
gọi là máy chủ Web. Để nhận được các tài liệu hoặc các đối tượng từ máy chủ Web, trình
duyệt gửi một truy vấn thích hợp tớ cho máy chủ. Nếu có đủ quyền hạn, một kết nối logic
được thiết lập giữa máy trạm và máy chủ. Sau đó, máy chủ xử lý truy vấn, truyền kết quả về
cho trình duyệt Web và hủy bỏ kết nối.

Máy chủ Web hoạt động như là bộ tập trung thông tin làm nhiệm vụ truyền thông tin từ các
nguồn tài nguyên khác nhau và biểu diễn chúng cho người sử dụng trong một cách thức đồng
nhất. Trình duyệt cho phép người sử dụng xem thông tin mà không phụ thuộc vào định dạng
của thông tin.

Để kết nối kiểu dữ liệu phân tán và kiểu dữ liệu khác, các tài liệu Web cho phép cân nhắc
thông tin với yêu cầu đầy đủ chi tiết, làm đơn giản hóa phân tích các nội dung thông tin. Điều
này rất hợp lý để tập trung quan tâm tới khía cạnh quan trọng của dữ liệu, và nghiên cứu tài
nguyên đã lựa chọn một cách chi tiết.

Kiến trúc Intranet có một vài ưu điểm:

The following distinctive features of Intranet architecture should be emphasized:

 Thông tin cuối cùng dành để hiển thị cho người dùng xem bằng chương trình duyệt
được tạo trên máy chủ
 Tất cả nhưng nguồn tài nguyên và hệ thống ứng dụng được tập trung trên máy chủ
 Các giao thức của bộ giao thức TCP/IP sẽ được sử dụng cho việc trao đổi dữ liệu giữa
máy chủ và các máy trạm
 Điều khiển tập trung không chỉ trên máy chủ mà còn cho máy trạm rất thuận lợi, vì
chúng đã được chuẩn về mặt phần mềm
 Các máy trạm có thể thực thi các chương trình từ những máy tính khác trên mạng

11
Tất cả những chức năng này, loại trừ chức năng cuối cùng, trợ giúp giải quyết vấn đề bảo mật
thông tin.

Sự tập trung tất cả nguồn tài nguyên thông tin và các hệ thống ứng dụng trên máy chủ làm
đơn giản trong việc xây dựng và quản trị của hệ thống bảo mật và bảo vệ các đối tượng ở
cùng một nơi sẽ được thực hiện một cách dễ dàng hơn so với kiến trúc phân tán.

Việc sử dụng chuẩn mở TCP/IP cho việc trao đổi thông tin giữa các máy tính trong mạng dẫn
đến việc thống nhất các phương thức tương tác giữa các trạm làm việc và máy chủ. Điều này
không mang lại lợi ích để giải quyết vấn đề của việc cung cấp trong đổi thông tin an toàn giữa
các ứng dụng máy chủ trên các máy tính. Giải pháp cho an toàn tương tác phát triển cho từng
mính tính sẽ thích hợp đối với tất cả ứng dụng.

Sự thuận lợi của điều khiển tập trung của các máy trạm từ máy chủ làm giảm các lỗi không
mong đợi có thể xảy do người dùng, điều hành, và quản lý. Nhưng lỗi như vậy là một trong sự
đe dọa chính đối với àn toàn thông tin, dẫn đến sự phá hoại. Ví dụ, việc nhập dữ liệu đầu vào
không chính xác gây ra ngừng chạy chương trình. Những lỗi này tạo ra chỗ yếu có thể bị khai
thác.

Trong kiến trúc Intranet, giả xử các chương trình xử lý thông tin phân tán vẫn được sử dụng
từ máy chủ có thể được thực hiện trên máy trạm. Hệ thống như vậy của việc xử lý phân tán
cho phép tập trung tất cả các hệ thống ứng dụng trên máy chủ. Tuy nhiên, khả năng các
chương trình thực hiện từ máy chủ trên máy trạm sinh ra nhiều sự đe dọa mới từ an toàn
thông tin (ví dụ, sự đe đọa đó là thay thế chương trình truyền từ máy chủ [1,14]. Ví vậy, khả
năng di trú các chương trình bổ sung thêm nhiều yêu cầu để duy trì bảo mật trên mạng.

1.2. Nền tảng của các Công nghệ mạng


1.2.1. Sự tương tác với Webserver

1.2.1.2 Miêu tả tổng quát

Ngày nay, hầu hết các phương thức phổ biến tương tác với Webserrver chính là kiến trúc
khánh/chủ, dựa vào công nghệ Web. Việc xử lý trao đổi thông tin được sử dụng trong các
công nghệ Web không khác so với việc xử lý trong kiến trúc khánh/chủ chuẩn, mà ở đó
chương trình máy chủ điều khiển việc xử lý các câu truy vấn từ các chương trình khách.

Trong việc xử lý trao đổi thông tin sử dụng trong các công nghệ Web, các chương trình khách
được thực thi trong các chương trình định hướng Web mà được tìm thấy trên các máy trạm,
cũng như các chương trình phụ trợ hoạt động như các trạm. Các trình duyệt Web được sử
dụng biên dịch và hiển thị các tài liệu Web được lưu trữ trên máy chủ, cũng như truy cập tới
các dịch vụ đặc biệt khác (Hình. 1.9), như:

• Sao chép các tệp từ máy chủ về máy trạm và ngược lại (FTP)
• Cung cấp một phiên ảo trên máy chủ (Telnet)
• Truy cấp thực đơn đa cấp tới các nguồn tài nguyên máy tính (Gopher)

12
Hình. 1.9: Lược đồ tổng quát của sự tương tác giữa trình duyệt và máy chủ

Việc truy cập tới các dịch vụ đặc biệt này là khả thi, vì trên thực tế, ngay từ đầu, các chương
trình định hướng Web đã được thiết kế như là các chương trình đa giao thức mà có thể cung
cấp một giao diện chung cho phép truy cập đến rất nhiều các nguồn tài nguyên mạng. Hiện
này, các chương trình định hướng Web phổ biến nhất hiện nay đó là Firefox, Internet
Explorer, Opera, Mozilla, Netscape navigator,… Các chương trình Web phụ trợ được sử dụng
để thu được dữ liệu thống kê từ máy chủ Web cho việc định chỉ số thông tin chứa trong máy
chủ Web, hoặc cho mục đích cập nhật các cơ sở dữ liệu cho các cơ chế tìm kiếm.

Trong lược đồ tương tác với các công nghệ Web, máy chủ Web hoạt động như một chương
trình máy chủ chính. Chương trình này được chạy trên máy chủ và thực hiện xử lý các truy
vấn đến từ các trạm Web. Sự tương tác giữa các trạm Web và các máy chủ Web được thiết lập
theo tập các luật được xác định bởi giao thức truyền siêu liên kết (HTTP). Khi thực thi, máy
chủ Web điều khiển một cổng logic trên mạng, mà cổng này được gán mặc định bằng 80, và
coi như bất kì các thông báo nào gửi tới cổng này được chuyển tới máy chủ Web.

Khi nhận được một truy vấn từ Web client, máy chủ Web thiết lập truyền thông sử dụng
TCP/IP và trao đổi thông với Web client theo giao thức HTTP. Nếu Web client yêu cầu truy
cập thông tin được bảo vệ trên máy chủ Web, máy chủ Web có thể yêu cầu định danh người
dùng và mật khẩu. Các tài liệu Web được bảo vệ sẽ chỉ hiển thị đối với những người dùng có
các quyền truy cập thích hợp.

Các tài liệu nhận được bởi trình duyệt từ máy chủ Web tương ứng với các tệp văn bản được
viết bằng ngôn ngữ đặc biệt, gọi là ngôn ngữ đánh dấu siêu văn bản (HTML). Ngôn ngữ này
bao gồm tập các qui định về định dạng văn bản (trong bất kì một ngôn ngữ nào) và cách hiển
thị trong của sổ của trình duyệt Web. Việc đánh dấu xác định định dạng, cũng như điều khiển
cách liên kết tới bất kì đối tượng và đồ họa sẽ được hiển thị. Cùng với ngôn ngữ đánh dấu, các
chương trình được viết bằng ngôn ngữ kịch bản JavaScript và VBSCript có thể được chèn vào
bên trong tài liệu Web và trình duyệt Web sẽ biên dịch khi nạp và hiển thị tài liệu Web.

Để truy cập tới thông tin mà máy chủ không thể xử lý trực tiếp (ví dụ: truy cập cơ sở dữ liệu),
một hệ thống cổng phần mềm sẽ được sử dụng. Cổng phần mềm, nhận truy vấn từ máy chủ
Web, xử lý truy vấn, hoặc hoạt động như proxy giữa máy chủ Web và máy chủ khác (ví dụ:
máy chủ DBMS). Cổng phần mềm phát triển theo các chuẩn đặc biệt xác định các phương
thức để máy chủ có thể gọi các ứng dụng hoặc các hàm từ các thư viện liên kết động,và hơn

13
thể nữa cách thức của trao đổi thông tin với đối tượng chương trình. Giao diện cổng chung
(CGI-Common Gateway Interface) là một trong nhưng các chuẩn phổ biển này.

1.2.1.2 Xử lý truy vấn từ Web Client

Các bước xử lý bởi máy chủ khi xử lý truy vấn nhận được từ Web Client:

1. Trình duyệt Web hoặc Web client khác, gửi truy vấn đến máy chủ Web, yêu cầu tài
nguyên thông tin. Truy vấn này được gửi trong định dạng HTTP, trong khi địa chỉ của
nguồn tài nguyên yêu cậu được xác định trong định dang URL
2. Sau khi nhận được truy vấn từ máy trạm, mấy chủ Web xác định sự tồn tại của các
nguồn tài nguyên được yêu cầu trong nguồn tài nguyên cục bộ, có nghĩa là trong
nguồn tài nguyên mà máy chủ điều khiển.
3. Nếu nguồn tài nguyên yêu cầu có sẵn, máy chủ Web kiểm tra quyền truy cập vào
nguồn tài nguyên này và nếu quyền truy cập không vi phạm, máy chủ Web trả về nội
dung của nguồn tài nguyên đến cho Web client.
4. Nếu yêu cầu của Web client can thiệp các quyền truy cập tài nguyên, máy chủ Web từ
chối truy vấn và tra về cảnh bảo thích hợp cho client.
5. Nếu nguồn tài nguyên yêu cầu không nằm trong nguồn tai nguyên cục bộ trên máy
chủ Web, máy chủ xác định thông tin về vị trí nguồn tài nguyên từ các tệp cấu hình
của nó, kể cả việc xây dựng lại (Hình. 1.10).

Hình. 1.10: Định hướng truy vấn

6. Nếu máy chủ Web hỗ trợ cây ảo của những máy chủ Web khác, việc tìm kiếm sẽ được
định hướng tới nguồn tài nguyên cần thiết.
7. Nếu máy chủ Web được sử dụng như máy chủ ủy quyền, một mặt nó hoạt động như là
máy chủ Web cho các máy trạm gửi truy vấn tới, mặt khác nó hoạt động như trạm
Web, gửi truy vấn tới các máy chủ (Hình. 1.11).

14
Hình. 1.11: Sử dụng máy chủ Web như máy chủ proxy

8. Sau khi trả về thông tin yêu cầu cho máy trạm, máy chủ Web hủy bỏ kết nối.

Máy chủ Web có thể được sử dụng để giải quyết các vấn đề lớn. Điển hình, các chức năng sau
được hỗ trợ trên các máy chủ:

 Hỗ trợ cơ sơ dữ liệu văn bản phân cấp, xử lý truy vấn và điều khiển truy cập tới thông
tin từ các chương trình phía client
 Tiền xử lý dữ liệu trước khi trả lời một truy vấn
 Tương tác với các chương trình mở rộng và các máy chủ khác, ví dụ, các cơ chế tìm
kiếm

Phần lớn các mô hình máy chủ Web như Netscape's Enterprise Server, Microsoft's Internet
Information Server bổ sung giao thức mã hóa Secure Socket Layer (SSL), duy trì sự riêng tư,
tính toàn vẹn, tính xác thực của dữ liệu truyền trên mạng. Giao thức SSL cũng được bổ sung
trong các trình duyệt Web. Chức năng này cung cấp một môi trường an toàn cho việc sử dụng
công nghệ Web trong các mạng máy tính.

1.2.2. Xử lý thông tin phân tán trên nền tảng cả các chương trình dễ biến đổi

Một trong các chức năng quan trọng của kiến trúc Intranet đó là việc xử lý thông tin phân tán
trên nền tảng của những chương trình dễ biến đổi. Chương trình hướng Web chạy trên máy
trạm không chỉ hiển thị các trang Web và thực hiện các chuyển tiếp tới các nguồn tài nguyên
khác mà nó có thể kích hoạt các chương trình trên máy chủ, thông dịch và thực thi chúng, khi
tài liệu Web được thực thi những đòi hỏi. Các chương trình này được truyền cùng với tài liệu
từ máy chủ. Kiểu xử lý thông tin phân tán này đảm bảo ràng bộc của toàn bộ hệ thống ứng
dụng trên máy chủ

Có 3 kiểu chương trình chính có thể được kết hợp với tài liệu Web và truyền tới máy trạm để
thực thị:

 Java applet được thực thi bởi công nghệ Java


 Các chương trình được viết bằng các ngôn ngữ kịch bản như JavaScript, VBScript,
VRML
 Các thành phần ActiveX, liên quan tới công nghệ ActiveX

15
Thực tế là, tồn tại một vài loại chương trình dễ biến đổi có thể được miểu tả bởi các khả năng
chức năng khác nhau của chúng, và hơn thể nữa bởi sự cạnh tranh giữa các công ty trong lĩnh
vực chương trình và các côn nghệ mạng như Sun Microsystems, Netscape và Microsoft
corporations, và các công ty khác.

1.2.2.1 Công nghệ Java

Java được thiết kế bởi Sun Microsystem vào những năm 1990, đáp ứng đòi hỏi các chương
trình máy tính hướng môi trường mạng và tích hợp công nghệ Web. Động lực phía sau công
nghệ Java đưa ra các yêu cầu kết hợp của sự dễ biến đổi, độc lập phần cứng và các nền tảng,
an toàn và tin cậy trong việc xử lý thông tin.

Java là ngôn ngữ lập trình hướng đối tượng dựa vào nền tảng của ngôn ngữ C++, loại bỏ đi
nhưng chức năng không cần thiết, bổ sung thêm chức năng cung cấp sự an toàn và tin cậy của
thao tác điện toán phân tán. Có rất nhiều chức năng trong Java vay mượn từ ngôn ngữ đối
tượng C và Samlltalk. Để giảm độ phức tạp lập trình và số lỗi trong mã, Java đưa ra sự chính
xác của kiểu dữ liệu, hướng đội tượng một cách chặt chẽ. Tất cả phần tử dữ liệu được lưu
trong các đối tượng, và tất cả hàm bao gồm các phương của vài đối tượng. Kiểu đơn vị thông
tin chính xác cho phép phát hiện lỗi kết nối kiểu dữ liệu không tương thích tại bược biên dịch.

Hướng tiếp cận module đối với thiết kế chương trình, thực thi trong ngôn ngữ và sự đơn giản
của ngôn ngữ, không những cho phép phát triển nhanh các chương trình mới mà còn cập nhật
ứng dụng được viết trước đó và kiểm tra trong Java. Hơn thế nữa, Java đưa ra việc cập nhật
hiệu quả cho các chương trình cũ được viết bằng ngôn ngữ lập trình khác. Việc bổ sung các
phần tử ngôn ngữ chuẩn, Java bao gồm số các thư viện, từ đó có thể xây dựng các hệ thống
tính toán với mọi độ phức tạp. Tập hợp các chuẩn thư viên có thể được bổ sung liên tục với
các hàm mới.

Máy ảo Java, nó thực thị các chương trình Java thông qua bộ thông dịch, độc lập phần cứng
và hệ điều hành. Xử lý thông tin một cách an toàn và tin cậy được tách riêng khỏi máy ảo.
Kiến trúc máy ảo, sự trình diễn của các mục dữ liệu và hệ thống câu lệnh được xác định Bộ vi
xử lý Java ảo cung cấp môi trường đầy đủ cho việc thực thi một chương trình Java. Vì thế, tất
cả chương trình Java phải đáp ứng các đặc tả của bộ vi xử lý trừu tượng, bộ vi xử lý trừu
tượng xác định tập các chỉ thị độc lập máy tính của nó, kiểu dữ liệu, và các thanh ghi được xử
dụng. Nguồn của chương trình Java được dịch thành mã độc lập máy gọi là mã byte, sau được
được biên dịch bởi bộ vi xử lý trừu tượng, được thực hiện bởi bộ vi xử lý Java ảo

Biên dịch chương trình Java dành cho sự thực thi trên máy trạm trong môi trường của trình
duyệt gọi là applet Java hoặc đơn giản hơn là applet. Theo bản chất của applet, mọi applet đại
diện chương trình nhỏ, trong đó một vài chức năng bắt buộc sẽ được xác định. Applet được
nạp từ máy chủ thông qua mạng và được thực thi trong trình môi trường trình duyệt (Hình.
1.12). Các liên kết đến applet được xác định trong tài liệu Web, những applet không chứa
trong thành phần tài liệu Web. Thay vào đó, applet được lưu trữ ở tệp riêng biệt trên máy chủ.

16
Hình. 1.12: Truyền và thực thi các chương trình Java độc lập máy

Sự độc lập của mã byte Java đối với phần cứng và hệ điều hành có khả năng thực hiện được
bởi sự thực hiện chương trình của bộ vi xử lý Java ảo. Điều này dùng cho thông dịch các
applet cho từng nền tảng

Mã byte của các chương trình Java có một số chức năng sau:

 Mã dễ dãng thông dịch trực tiệp mã máy cho bất kì nền tảng phần cứng nào.
 Chiều dài trung bình của câu lệnh trong mã byte ngắn tối thiểu, vì thế giảm độ phức
tạp và kích cỡ của applet Java khi so sánh với các chương trình thực thi bình thường
 Mỗi mã byte của chương trình chứa thông tin đây đủ chương trình cho phép mã này
được kiểm tra một cách an toàn cho việc thực thi.

Mã byte được phát triển làm giảm chiều dài trung bình của chương trình một mức hợp lý nhất.
Bộ vi xử lý Java ảo có kiến trúc ngăn xếp và thành ghi nhỏ và thường xử dụng định địa chỉ
gián tiếp. Vì thế, phần lớn các câu lệnh chiếm byte đơn. Nói chung, các bộ vi xử lý Java có
tập các chỉ thị cho từng kiểu dữ liệu. Do vậy, chiều dài trung bình của câu lệnh Java chỉ có 6
byte. Chiều dài trung bình của câu lệnh cho bộ vi xử lý RISC sắp xỉ 4 byte.

Hai chức năng quan trọng được quy định cho tốc đô cao thực thi an toàn và tin cậy của applet

 Kiểm tra mã byte để đảm bảo sự toàn vẹn và hợp thức của các chỉ thị trước khi thực
thi.
 Điều khiển vào khóa các thao tác trong suốt thời gian thông dịch mã byte

Việc nạp và kiểm tra các mã byte thực hiện bởi chức năng đầu tiên, quản lý bảo mật của bộ vi
xử lý Java ảo thực hiện bởi chức năng thứ hai. Quản lý bảo mật truy cập tới các tệp và nhóm
thiết bị ngoại vị bằng applet và thực hiện các chức năng hệ thống như cấp phát bộ nhớ.

Vi xử lý Java ảo cung cấp sự thực thị và các chức năng khác tác động độ tin cậy xử lý thông
tin, ví dụ “tập hợp dữ liệu vô nghĩa” tương đương với việc giải phóng bộ nhớ. Nói chúng,
Java bôm gồm các chức năng có ích đối với các thao tác chính xác cho các đội tượng và
nguồn tài nguyển trong các tính huống không mong đợi.

Chu kì phần mềm applet tương tự như các chương trình viết bằng ngôn ngữ khác. Tiến trình
thực hiện applet khác với tiến trình của các chương trình thông thường khác (Hình. 1.13).

17
Hình. 1.13: Chuẩn bị và thực thi Applet Java

Ví applet và các thành phần khác của hệ thống ứng dụng được lưu trên máy chủ, hệ thống hỗ
trợ việc quản trị một cách dễ dãng hơn. Vì thế, đảm bảo sử dụng lâu dài các chường trình cập
nhật hàng ngày.

Không chỉ các applet đại diện các chương trình luôn biến đổi có thể được viết bằng ngôn ngữ
Java – các chương trình ứng dụng cũng có thể được viết bằng Java. Tuy nhiên để dành được
mức thực thi cao, mã nguồn của chương trình nên được biên dịch, không thành mã byte
nhưng mã độc lập với máy cho phép thực hiện trực tiếp bởi các bộ vi xử lý máy trạm.

Hiện nay, có rất nhiều công cụ phát triển cho applet và ứng dụng Java, bao gồm Microsoft
Visual J++, Symantec Cafe, Borland Jbuilder, Sun Microsystems Java Workshop, và một số
công cụ khác.

1.2.2.2 Các công nghệ dựa vào sử dụng các ngôn ngữ kịch bản

Những công nghệ cho phát triển và ứng dụng của các chương trình biến đổi dựa vào sử dụng
nhưng ngôn ngữ kịch bản xuất hiện xong xong với công nghệ Java. Sự khác biệt quan trong
giữa công nghệ kịch bản và Java chính là sự thông dịch theo dòng lệnh của chương trình kịch
bản, thực hiện biên dịch thành mã byte trước khi thực thi. (Để thực thi, các chương trình Java
di động phải được biên dịch thành mã byte.) Chức năng của bộ biên dịch chương trình di
động viết bằng các ngôn ngữ kịch bản được thực hiện bởi trình duyệt Web.

Bản chất của ngôn ngữ kịch bản (hay còn gọi ngôn ngữ macro) dễ dàng gở rối và phát triển
chương trình. Các ngôn ngữ kịch bản chính hiện thời dành cho viết chương trình biến đổi bao
gồm:

 Ngôn ngữ kịch bản JavaScript, được phát triển bởi Netscape và Sun Microsystems, và
ngôn ngữ VBSCript của Microsoft.
 Ngôn ngữ mô tả thực tế ảo (Virtual Reality Modeling Language), được phát triển bởi
Silicon Graphics.

18
Ban đầu, JavaScript xuất hiện trong trình duyệt Netscape Navigator 2.0 dưới cái tên
LiveScript. Sau đó, Netscape loại bỏ tên này và bắt đầu làm việc với Sun Microsystems và đi
đến đồng ý sử dụng Java. JavScript không đại diện ngôn ngữ Java, hai ngôn ngữ này có một
vài điểm chung, có khả năng gọi lẫn nhau. (Bảng 1.1).

Bảng 1.1: Các đặc tả của Java và JavaScript


Java JavaScript
Chương trình phải được dịch thành mã byte Chương trình được thông dịch ở phía
để thực thi ở phía client client ngay khi khởi tạo
Hướng đối tượng. Applets bao gồm các đối Dựa đối tượng. Không có lớp cho cơ chế
tượng miêu tả sử dụng các lớp cũng với tính thừa kế
thừa kế
Các Applet được gọi từ các trang Web, nhưng Chương trình được gòi từ các trang
được lưu trữ riêng trong các tệp (nằm ngoài Web, nhưng được xây dựng bên trong tài
văn bản Web) liệu Web
Tất cả kiểu dữ liệu và biến phải được miêu ta Các kiểu dữ liệu và biến không cần phải
trước khi xử dụng. khai báo
Ràng buộc tính. Các liên kết đối tượng phải Ràng buộc động. Các liên kết đối tượng
tồn tại tại bược biên dịch được kiểm tra trong xuốt quá trình thực
thi

Không thể ghi vào đĩa hoặc thực hiện các Không thể ghi vào đĩa hoặc thực hiện
chức năng hệ thống các chức năng hệ thống

Javascript là ngôn ngữ thông dịch, đơn giản, dựa vào các hàm hướng đối tượng. Sự dễ dàng là
nguyên nhân … Bản chất hướng đối tương của Javascript được chứng tỏ bởi khả năng của
hoạt động với các cửa sổ trình duyệt, thanh trạng thái và các đơn vị khác của giao diện trình
duyệt và các đối tượng mạng trong hệ đẳng cấp. Javascript không phải phong phú như ngôn
ngữ Java, nhưng nó thuận lợi hơn, hiệu quả hơn cho một số các tác vụ liên quan đến xử lý các
tài liệu Web và cho sự tương tác với người dùng khi hiển thị các tác vụ đó. Đây là ngôn ngữ
với số lượng lớn về cậu lệnh và chức năng được xây dựng sẵn. Các chương trình được viets
bằng Javascript có thể cung cấp các hộp đối thoại, thực hiện các phép toán học, chơi được các
tệp video, audio, tạo ra các tài liệu, xử lý các đối tượng button trong form và rất nhiều đối
tượng khác. Cùng với sự trợ giúp của JavaScript, có thể thiết lập các thuộc tính va đặc tính
của nhưng thư viên nhị phân Java, và hơn thể nữa là các mô dun chương trình được bổ sung
vào trong trình duyệt

Các câu lệnh JavaScript được viết trực tiếp trong trang Web, và được thực hiện bởi trình
duyệt trong khi trang này được nạp, hoặc trong khi các thao tác mà người dùng thực hiện
tương tác với trang Web (ví dụ, khi click vào các đối tượng bằng chuột, vị trí của con trỏ
chuột tại vị trí liên kết, hoặc nhập dữ liệu trong các trường của mẫu HTML). Cũng như bất kì
công nghệ hay ngôn ngữ nào được sử dụng trong mạng máy tính, xử lý thông tin an toàn là
yêu tiên hàng đầu. Mặc dù Javascript không được xem là ngôn ngữ có tính bảo mật cao, nó
đáp ứng được phần lớn các yêu cầu này. Một vài chức năng dẫn đến việc dễ bị tấn công
không tồn tại trong ngôn ngữ Javascript, chính vì vậy cung cấp tính bảo mật theo một cách
thức không trực tiếp. Các chương trình được viết trong JavaScript, cũng như trong Java, bị
ngăn cấm thực hiện các thao tác đối với các tệp cục bộ. Vì vậy, một chương trình không có
khả năng thay đổi hoặc dành được quyền truy cập tới dữ liệu của người dùng. Nói chung,
JavaScript không hỗ trợ các chức năng mạng. Ví dụ, một chương trình không thể mở cổng
TCP/IP, và chỉ có khả năng nạp các đối tượng tới địa chỉ đã cho và tạo ra dữ liệu truyền đến
máy chủ Web. Các trình duyệt cho phép người dụng thiết lập các mức an toàn và điều khiển

19
các mức này, vì vậy các chương trình được viết bằng JavaScript chỉ có thể tập trung vào một
vùng xác định thông tin.

Những bất lợi của Javascript đó là tốc độ thực thị tương đối thấp, bởi vì bản chất thông dịch
của ngôn ngữ. Bất lợi này cũng chính là đặc tính của các ngôn ngữ lập trình biên dịch.

Một vấn đề quan trọng cần chú ý đó là phiên bản của Netscape và Microsoft là khác nhau. Sự
khác nhau có thể dẫn tới sự không tương thích. Vì vậy, khi viết các ứng dụng trong Javascript,
cần kiểm trả sự tương thích dịch vụ trong môi trường của chương trình

Microsoft VBScript tương tự như Javascript trong rất nhiều khía cạnh. VBScript là tập con
của ngôn ngữ Visual Basic, hướng tới lập trình cho các trang Web. Có thể phát triển rất nhiều
đối tượng bao gồm các thành phần chương trình của các ngôn ngữ khác, trong trang Web
trong khi sử dụng VBScript. Ví dụ, applet Java và các điều khiển ActiveX có thể được lưu
trong trang Web, để dễ dàng tương tác với người sử dụng

Không giống như Javascript và VBScript, ngôn ngữ VRML, được thiết kế bởi Silicon
Graphics, được định hướng cụ thể trợ giúp tạo ra các chương tình thông dịch giả lập thế giới
ảo 3D. Các trình thông dịch VRML được gắn vào bên trong trình duyệt, tương tự như các mô
dun chương trình. Các mã nguồn của chương trình trong ngôn ngữ VRML được lưu trong tệp
VRML riêng và được gọi bởi liên kết từ văn bản Web khi đó nó được xem trong trình duyệt.
Kích vào liên kết như vậy dẫn tới mở của sổ riêng, cho phép người dùng thưởng thức chương
trình.

1.2.2.3 Công nghệ ActiveX

ActiveX là tập hợp các công nghệ của Microsoft tập trung vào việc bổ sung, tích hợp và thống
nhất các phương thức biểu diễn và xử lý thông tin hiện thời trong mạng máy tính. Công nghệ
này được xây dựng sẵn phù hợp với kiến trúc Web. Ý tưởng của các công nghệ ActiveX nằm
ở cách thức giống nhau của việc truy cập tới tất cả các nguồn tài nguyên thông tin (hình 1.14).
Công nghệ Web được lựa chọn như là nền tảng cho cách thức đồng nhất của việc truy cập.

Hình. 1.14: Truy cập đồng bộ đến các nguồn tài nguyên thông tin mạng

20
Theo triết lý ActiveX, trình duyệt Web sẽ trở thành một phần không thể thiếu của hệ điều
hành. Hơn thế nữa, các phương thức để dành được truy cập đến bất kì thông tin trên máy tính
của người dùng, trên máy chủ của mạng cục bộ hoặc trên Internet sẽ là giống nhau, trong suốt
đối với người dùng. Khái niệm này được thực hiện trong phiên bản trình duyệt Internet
Explorer 4.0

Về mặt phát triển các chương trình hay biến động, một mặt tập các công nghệ ActiveX là sự
lựa chọn thay thế công nghệ Java và JavaScript, mặt khác nó là phần bổ sung thiết yếu cho
các công nghệ Java và Javascript. ActiveX không những cung cấp sự phát triển và thực thi
của các chương trình di động, mà còn thực hiện nhiều khả năng bổ sung như gọi các hàm để
xem và sửa Word, Excel, PowerPoint từ môi trường Web. ActiveX tạo ra tập hợp các hàm
API ( Application programming Interface - thực hiện cả phía trạm và chủ) có hiệu lực với các
nhà lập trình và tác giả của tài liệu Web.

ActiveX hỗ trở các kiểu chương trình di động sau, mà có thể được gắn vào tài liệu Web và
truyền đến máy trạm để thực thi (hình 1.1.5)

 Các điều khiển ActiveX


 Java applets
 Các chương trình được viết trong các ngôn ngữ kịch bản như JavaScript, VBScript và
VRML

Hình. 1.15: Sự di chuyển của các chương trình trong khi sử dụng công nghệ ActiveX

Những công nghệ cho việc phát triển và sử dụng các điều khiển ActiveX, và ngoài ra các
chương trình được viết trong ngông ngữ Macro VBScript được phát triển bởi Microsoft.

Hệ thống rộng lớn phần mềm của Microsoft hoạt động trên máy chủ đảm bảo tính hiệu quả
của các công nghệ ActiveX, đặc biệt trên hệ điều hành Windows NT và IIS. Sự tương tác máy
chủ Web IIS với các ứng dụng, hệ thống quản lý cơ sở dữ liệu (DBMS) được cung cấp thông
qua giao diện ISAPI (Internet server API) và CGI (Common gateway Interface) thực thi
trong IIS.

Điều khiển ActiveX miêu tả các chương trình có khả năng thực thi, mà các chương trình này
có thể được nạp từ máy chủ để thực hiện trên máy trạm. Cũng như cách dùng Java applet, các
liên kết đến các chương trình được xác định trong văn bản Web. Điều khiển ActiveX không
chứa các thành phần cấu tạo tài liệu Web. Chúng được lưu trữ trong tệp riêng trên máy chủ.

21
Sự khác biệt của các thành phần điều khiển ActiveX so với Java applets:

 Các chương trình ActiveX Controls bao gồm mã có khả năng thực thi, phụ thuộc vào
nèn tảng “phần cứng-hệ điều hành). Mã byte của Java applet độc lập nền tảng.
 Các đơn vị nạp của ActiveX Controls giữ nguyên trên hệ thống máy trạm, ngược lại,
nó được nạp mồi khi Java applet được yêu cầu.
 Khi các chương trình ActiveX Controls không làm theo cách thức tương tư như Java
applets dưới điều khiển của việc quản lý bảo mật, các chương trình có thể dành được
truy cập tới đĩa và thực hiện các chức năng khác cho các ứng dụng

Vì các chương trình ActiveX Control là các ứng dựng đã được lập trình, các ứng dụng này có
thể được phát triển và có thể thực hiện các thao tác cùng với sự trợ giúp của bất kì ngôn ngữ
lập trình nào. Vì mục đích này, các công cụ phát triển như Visual C++, Visual Basic, Delphi,
Visual J ++ và một số ngôn ngữ khác có thể được sử dụng. Microsoft đã phát triển một gói
công cụ được gọi là Microsoft ActiveX Developent Kit (MADK)

Các thành phần ActiveX, cũng như các chương trình được viết bằng ngôn ngữ Javascript và
VBScript có thể gọi các hàm API AcitveX để biểu diện số dịch vụ như sau:

 Tạo ra tính hiệu qua đa phương tiện chất lượng cao


 Mở và xủa đổi các tài liệu điện tử, bằng việc gọi các ứng dụng hỗ trợ chuẩn nhúng và
liên kết đối tượng (OLE- Object linking, and embedding)
 Truy xuất tới hệ điều hành để tối ưu các tham số thực thi của chương trình dành được
từ máy chủ

Những chương trình được viết bằng JavaScript và VBScript có thể tự động tương tác giữa
nhiều đối tượng, bao gồm Java applets, thành phần ActiveX và các chương trình khác trên
máy trạm, cho phép các đối tượng làm việc với nhau như là một phần của sự tích hợp, không
gian Web động. Có thể tạo ra ngôn ngữ macro tùy biết, và bổ sung bộ thông dịch vào trình
duyệt IE, cùng với sự trợ giúp của thư viện liên kết động (DLL).

So sánh với Java, công nghệ ActiveX có những điểm lợi và bất lợi. Điểm bất lợi chính là mức
bảo mất thấp về mặt xử lý thông tin phân tán. Các thành phần ActiveX nạp trong máy trạm có
thể truy cấp tới bất kì phần nào của hệ thống, tương tự như đối với các ứng dụng thông
thường. Trong framework ActiveX, Microsoft đã thực hiện bảo vệ sự riêng tư dựa trên sự
chứng nhận số. Nhưng chứng nhận này cung cấp tính xác thực xác nhận các thành phần
chương trình được nạp từ mạng. Tuy nhiên, việc xác nhận tính xác thực không có nghĩa là xác
nhận tính bảo mật. Về khía cạnh bảo mật , lược đồ bảo mật của Activẽ có thể không hiệu quả
khi người dùng nạp thành phần ActiveX từ Internet, đặc biệt nếu các thành phần này không rõ
nguồn gốc.

Cũng vào thời điểm đó, không giống như Java applets, các thành phần ActiveX cho phép thực
hiện các hàm phù hợp phát triển chương trình ứng dụng. Chức năng này là điểm lợi cho mạng
công ty, với điều kiện phải giới hạn tính bảo mật thích hợp được thiết lập (ví dụ, đồng ý cho
phép nạp các điều khiển ActiveX từ máy chủ công ty)

Về mặt thực thi, vì Java là ngôn ngữ thông dịch, Java applet được thực hiện trên máy ảo của
hệ thốn máy trạm với tốc độ thấp hơn so với các điều khiển ActiveX Controls. Nhưng, về khía
cạnh khác, Java applets rất cô đọng, vì thế nó được nạp rất nhanh. Nạp các điều khiển
ActiveX yêu cầu nhiều thời gian hơn. Cần phải để ý rằng các chương trình Activex Control
lưu lại trong hệ thống máy trạm, ngược lại nạp tất các Java applet mỗi lần mới. Liên quan đến

22
độ an toàn, thuộc tính này là một bất lợi, khi nó phân tán sự tập trung của hệ thống ứng dụng.
Nhưng nếu quan tam về khả năng thực hiện, đó là lợi thế của ActiveX so với Applet

Vì độc lập với phần cứng và OS, ActiveX ở vị trí thứ hai đối vớivới công nghệ Java. Mặc dầu
phát biểu của Microsoft đó là ActiveX cung cấp đa nền hộ trợ cho Macintosh, Windows, và
các hệ điều hành Unix, công nghệ ActiveX hoạt động trên các nền tảng Windows tốt nhất, bởi
vì chúng được phát triển cho việc sử dụng các hàm xây dựng trong các hệ điều hành
Windows. Do đó, ActiveX có thể được xử dụng đối với toàn bộ khu vực trong hoạt động
mạng dưới sự điều khiển của các hệ điều hành Windows.

1.2.3. Truy xuất tới cơ sở dữ liệu quản hệ

Trong kiến trúc khách/chủ dựa vào công nghệ Web, máy chủ Web đóng vai trò như trung tâm
thông tin, cung cấp thông tin từ nhiều nguồn mà sau đó, nó sẽ đệ trình tới người dùng theo
một cách thống nhất, với sự trợ giúp của trình duyệt. Sự tích hợp ngay thông tin không đồng
nhất được thực hiện trong thời gian mường tượng và biên dịch các tài liệu Web. Các thủ tục
này được thực hiện bởi trình duyệt trong thời gian tương tác với máy chủ Web, cũng như với
máy chủ khác cho việc đề trình các nguồn tài nguyên thông tin.

Sự tương tác của trình duyệt với máy chủ của hệ thống quản lý cơ sở dữ liệu (DBMS server)
có thể được thiết lập trong 2 cách sau:

 Truy cập đến máy chủ DBMS thông quá máy chủ Web
 Truy cập trực tiếp tới máy chủ DBMS

1.2.3.1 Truy xuất tới máy chủ DBMS thông qua máy chủ Web

Để trình duyệt có thể truy cập tới máy chủ DBMS thông qua máy chủ Web, hệ thống các
cổng chương trình được sử dụng (Hình. 1.16). Các cổng chương trình nhận truy vấn từ máy
chủ Web, hoạt động như máy chủ ủy quyền giữa máy chủ Web và máy chủ DBMS. Các cổng
chương trình đã được phát triển dựa vào các chuẩn đặc biết xác định cách thức gọi các ứng
dụng hoặc các hàm DLL bởi máy chủ Web, hơn nữa xác định cách thức trao đổi thông tin với
các đố tượng chương trình này. Một trong chuẩn phổ biến nhất của kiểu này đó là Common
Gateway Interface (CGI), FastCGI

23
Hình. 1.16: Truy xuất đến DBMS thông qua chương trình CGI

1.2.3.2 Giao diện CGI

Một chương trình CGI thích hợp phục vụ như một cổng chương trình giữa máy chủ Web và
máy chủ DBMS, rất có ích cho sự truy cập của trình duyệt đến máy chủ DBMS thông quá
máy chủ Web, theo các chuẩn CGI.

Các ứng dụng CGI hoạt động động lập với máy chủ Web và thực hiện nhờ lời gọi từ việc xử
lý của các văn bản Web bởi trình duyệt Web. Chương trình CGI tương tác với máy chủ Web
bằng cách trao đổi các biến môi trường ở cả 2 phía thông qua các kênh vào/ra của các ứng
dụng đã định sẵn.

Vì các chương trình CGI làm việc độc lập, có giao diện phổ biến và đơn giản, các nhà phát
triển văn bản Web có khả năng tạo các chương trình CGI trong bất kì ngôn ngữ hỗ trợ các
thao tác vào/ra tệp chuẩn. Hơn thế nữa, cũng với việc phát triển động lập, CGI có thể tạo các
ứn dụng có thể dễ dàng truyền từ máy chủ Web tới máy chủ khác. Đặc biệt, có các chương
trình CGI được thiết kế cho sự tương các của các máy chủ Web với các DBMS khác (ví dụ,
chương trình WebDBC)

Các form HML cho phép người dùng truy vấn tới cơ sở dữ liệu, được sử dụng như là giao
diện giữa trình duyệt và máy chủ DBMS. Các form này chứa trong các tài liệu Web. Chương
trình CGI thu được thông tin từ máy chủ Web thông qua các biến môi trường hoặc đầu vào
chuẩn. Điều này phụ thộc vào phương thức truy cập được sử dụng tại thời điểm dữ liệu truyền
giữa trình duyệt và máy chủ Web. Sau đó, chương trình CG truy cập máy chủ DBMS thông
qua trình điều khiển Open Database Connectivity (ODBC) và trả về câu trở lời đến truy vấn
máy chủ Web, thông qua đầu ra chuẩn

Trình điều khiển ODBC cung cấp một phương thức duy nhất truy cấp tới các DBMS khác
nhau bằng ngôn ngữ truy vấn chuẩn (SQL). Bởi các ứng dụng chuẩn ODBC, trình điều khiển
ODBC chỉ có thể sử dụng SQL và tương tác với DBMS hỗn hợp. Không thể truy xuất tới
DBMS nếu không có trình điều khiển ODBC, nhưng trong trường hợp này, chương trình
CGSI sẽ được hướng điều hành DBMS xác định trên máy chủ.

Vì vậy, các nhà phát triển ứng dụng CGI không cần thiết biết về tổ chức của một máy chủ
Web. Hơn thế nữa, điều này không cần thiết để sử dụng các ngôn ngữ phức tạp như C++.

24
Chương trình CGI có thể được viết bằng ngôn ngữ phổ biến như Perl. Yêu cầu chính đó là
tuân thủ theo quy đinh chuẩn CGI.

Một trong nhược điểm của chuẩn CGI đó là khả năng xử lý truy vấn quá chậm trong khi sự
đòi hỏi ngày càng lớn. Mỗi lần chương trình CGI được gọi, nó phải được nạp vào đĩa (tương
đương với một lần chạy mới) và điều này làm ảnh hưởng tới khả năng thực thi của chúng. Sau
khi chương trình kết thúc, nó sẽ giải phóng các nguồn tài nguyên nó đã sử dụng trước đó.

1.2.3.3 Giao diện FastCGI và API

Để tránh gặp phải các vấn đề liên quan tới tốc độ của CGI, rất nhiều nhà cung cấp máy chủ
Web đã bổ sung thêm các API thích hợp. Hãng Microsot phát triển giao diện ISAPI (Internet
Server API), còn hãng Netscape đưa ra giao diện NSAPI (Netscape Server API)

Những giao diện này được tích hợp vào trong máy chủ Web, cho phép người dùng theo dõi,
quản lý truy cập đối với dữ liệu và tiến trình được sử dụng liên tục. Những chương trình có
giao diện ISAPI được biên dịch trong tệp DU. Các tệp này được nạp trong bộ nhớ trong lúc
gọi các tệp này lần đầu tiên và sẽ không cần thiết sinh ra một tiến trình mới cho lần gọi tiếp
theo của những chương trình này. Các hàm giao diện NSAPI được nạp trong khoảng trống
tiến trình của máy chủ. Do vậy, vào lúc gọi tới các hàm này, không có tiến trình nào được
sinh ra. Do là giao diện API, chương trình sử dụng nó có thể loại bỏ tiến trình mở kết nối tới
DBMS, vì vậy truy vấn tiếp theo tới cơ sở dữ liệu không phải mất thời gian chờ đợi để mở và
đóng một kết nối

Tuy nhiên, sử dụng các giao diện API của các máy chủ Web rất ít điểm lợi. Phần lớn các ứng
dụng không thể chuyển từ một API này sang API khác, và hiếm khả năng chuyển các ứng
dụng tới các nền tảng khác. Hơn thế nữa, phần lớn các ứng dụng máy chủ Web vẫn được phát
triển cho giao diện CGI, vì vậy việc chuyển sang các ứng dụng dựa vào API là một quyết định
đứng đắn về phương diện tài chính. Để giải quyết vấn đề CGI, có thể sử dụng đặc tả FastCGI.
Đặc tả này xuất phát từ yếu tố đó là ứng dụng sử dụng chế đế tham số và truyền dữ liệu được
sử dụng trong CGI nhưng không xóa bộ nhớ và giữ nguyên lưu trữ trong khi xử lý đầu vào

Chính vì vậy, những ứng dụng dựa vào FastCGI, các chương trình giống CGI, làm việc không
quan tâm đến máy chủ Web, và được chạy thông qua các liên kiết chuẩn trong những tài liệu
Web. Những, giống như những chương trình dựa vào API, những chương trình FastCGI hoạt
động liên tục. Khi một chương trình hoàn thành xử lý truy vấn tiếp theo, nó vẫn duy trì mở và
đợi truy vấn mới.

Khi một trình duyệt dành được truy cập đến cơ sở dữ liệu quan hệ thông qua giao diện CGI,
một lược đồ được tạo ra trong đó 3 máy chủ được sử dụng: máy chủ Web, chương trình
FastCGI và máy chủ cơ sở dữ liệu. Máy chủ Web nhận truy vấn từ trình duyệt, truyền truy
vấn tới chương trình CGI, chương trình CGI truy xuất lần lượt tới máy chủ cở sở dữ liệu. Kết
quả trả về thông qua đường dẫn trở về.

1.2.3.4 Truy xuất tới máy chủ DBMS

Để truy xuất trực tiệp từ trình duyệt tới máy chủ DBMS, có thể sử dụng Java kí sinh (Hình.
1.17) (Java Applets), những điều khiển ActiveX (Hình. 1.18), và những môdun chương trình
chuyên dụng kết nối đến trình duyệt (plugin)

For direct access from the Web browser to the DBMS server, you can use both Java applets
and ActiveX controls and specialized program modules connected to the browser (plug-ins).

25
Hình. 1.17: Truy xuất đến DBMS cùng với sự trợ giúp của Appet

Hình. 1.18: Truy xuất đến DBMS cùng với sự trợ giúp của ActiveX control

Giao diện kết nối cơ sở dữ liệu Java (JDBC) được phát triển để sử dụng các Java applet truy
cập tới máy chủ DBMS khác nhau. Việc đưa ra giao diện được định hướng hỗ trợ tương tác
với máy chủ DBMS, không chỉ cho Java applet thực thị trên máy trạm chủ mà cho phép
chương trình Java thực thi trên máy chủ

Truy cập từ trình duyệt tới máy chủ DBMS cũng có thể được thực hiện bởi kiều khiển
ActiveX, cũng như trường hợp sử dụng Java applet, truy vấn và truyền chương trình thích hợp
trên máy trạm, và được thực thị trên máy trạm. Trong trường hợp này, sự tương tác với máy
chủ DBMS sẽ được thực hiện thông qua giao diện ODBC.

Để sử dụng các môdun chương trình chuyên dụng kết nối đến trình duyệt (plugin) cho phép
truy cập từ trình duyệt Web đến máy chủ DBMS, cần cài đặt chương trình thích hợp trên máy
trạm. Sau đó, sự tương tác máy chủ DBMS sẽ nhân ra phần mềm đã cài đặt đó và dành được
điều khiển từ trình duyệt Web, trong khi xử lý lời gọi thích hợp trong tài liệu Web. Để tránh
sự không tương thích, sự tương tác của các môdun chương trình kết nối với máy chủ DBMS
cũng như với các thành phần ActiveX nến được thực hiện thông qua giao diện ODBC.

26
Chương II Ngôn ngữ HTML
2.1 Khái niệm về ngôn ngữ HTML
HTML (Hypertext Markup language) là ngôn ngữ định dạng siêu liên kết,cho phép định dạng
văn bản, bổ sung hình ảnh, và video, cũng như lưu tất cả vào một trong tập tin dưới dạng văn
bản hay dưới dạng mã ascii.
Tên gọi ngôn ngữ dánh dấu siêu văn bản phản ánh đúng thực chất của công cụ này
– Markup : HTML là ngôn ngữ của các thẻ đánh dấu - Tag. Các thẻ này xác định
cách thức trình bày đoạn văn bản tương ứng trên màn hình.
– Language : HTML là một ngôn ngữ tương tự như các ngôn ngữ lập trình, tuy
nhiên đơn giản hơn. Nó có cú pháp chặt chẽ để viết các lệnh thực hiện việc trình
diễn văn bản. Các từ khoá có ý nghĩa xác định được cộng đồng Internet thừa nhận
và sử dụng. Ví dụ b = bold, ul = unordered list, ...
– Text : HTML đầu tiên và trước hết là để trình bày văn bản và dựa trên nền
tảng là một văn bản. Các thành phần khác như hình ảnh , âm thanh, hoạt
hình .. đều phải "cắm neo" vào một đoạn văn bản nào đó.
– Hyper : HTML cho phép liên kết nhiều trang văn bản rải rác khắp nơi trên
Internet. Nó có tác dụng che dấu sự phức tạp của Internet đối với người sử
dụng, có thể đọc mà không cần biết đến văn bản đó nằm ở đâu, xây dựng
phức tạp như thế nào. Sự phát triển có tính bùng nổ của Internet trong thời
gian vừa qua một phần lớn là nhờ vào WWW.

 Hyperlink: dùng để liên kết các tài liệu này đến tài liệu khác hoặc liên kết đối với bất
kì đối tượng nào trên Web như văn bản, hình ảnh, âm thanh. Chỉ cần click chuột vào
siêu liên kết, tài liệu được liên kết sẽ được hiển thị

2.2 Lập trình Web với ngôn ngữ HTML


2.2.1 Các thành phần cơ bản của html

Thể (tag): là một tập các ký hiệu được định nghĩa trong HTML có ý nghĩa đặc biệt. Thẻ bắt
đầu bằng ký hiệu < và kết thức bởi ký hiệu >

• Cú pháp <tênthể thuộctính=“giátrị”,…>Nội dung</tênthể>


• Ví dụ: <bg clear = “left”> Nôi dung</bg>

Phần tử (element): có 2 loại phần tử trong HTML

• Phần tử chứa nội dung: bao gồm thể đóng và thẻ mở


o Ví dụ: <p>Nội dung </p>
• Phần tử rỗng: bao gồm 1 thể
o Ví dụ: <br>

27
Thuộc tính(properties): mỗi thể bao gồm một hoặc nhiều thuộc tính đi kèm. Thuộc tính được
nhập vào ngày trước dấu ngoặc đóng(>) của thẻ. Có thể sử dụng nhiều thuộc tính trong một
thể. Thuộc tính này kế tiếp thuộc tính khác, phân cách nhau bởi khoảng trắng.

• Ví dụ: <table border=“1”>


Giá trị: Ngoài các thuộc tính không có giá trị còn có các thuộc tính của tag có giá trị. Ví dụ:
thuộc tính CLEAR của tag <BR> có ba giá trị lựa chọn: left,right, all.
Thể lồng nhau: dùng để chỉnh sửa cách trình bày nội dung trong một trang Web. Trật tự sắp
xếp của những tag lồng nhau đó là thể được mở đầu tiên sẽ là thẻ đóng sau cùng
• Ví dụ: <H1> Phần <I>Nội dung</I><H1>
Khoảng trắng: Trình duyệt bỏ qua các khoảng trắng.
Tên tệp tin: phải đặt tên tệp tin với phần mở rộng là “.htm” hoặc “.html” điều này giúp trình
duyệt định ra loại tài liệu khi duyệt. Để tạo một trang Web, chúng ta có thể sử dụng bất kỳ
một trình soạn thảo nào để tạo ra một trang Web

2.2.2 Cấu trúc tệp HTML

Một trang Web luôn bắt đầu bằng thể <HTML> và kết thúc bởi thể </HTML>
Các trang Web được chia thành 2 phần
• Phần đầu: được đặt giữa hai thẻ <HEAD> và thể </HEAD> - định ra tiêu đề, nội
dung của tiêu để.
• Phần thân: đặt giữa 2 thể <BODY> và </BODY> - chứa nội dung của trang Web
Ví dụ:
<html>
<head>
<title>Tiêu đề trang Web</title>
</head>
<body>
Xin chào mừng đến với khóa học HTML
</body>
</html>

2.3 Các tag cơ bản trong HTML


2.3.1. Thẻ giải thích

• Tác dụng: Giải thích hoặc chú thích các dòng lệnh. Trình duyệt sẽ không hiển thị nội
dung nằm giữa các thẻ ghi chú
• Cú pháp: <!– Nội dung chú thích-->

2.3.2 Các thẻ định dạng văn bản

• Định dạng chữ


 Cú pháp <FONT Face = “fontname1,fontname2,..></Font>
 Trong đó:
o fontname1 là phông chữ được chọn
o fontname2 được sử dụng khi trên máy người dùng không tôn tài fontname1
o Ví dụ: <font face = “Arial, Time new roman”, bold>
• Định dạng kích thước chữ: dùng để định kích thước cho toàn bộ văn bản
28
 Cú pháp: <Basefont size = “n”>
 n mang giá trị từ 1 đến 7. Giá trị mặc định là 3.
• Định màu cho văn bản
 Cú pháp: <Font color = “Giá trị”></Font>
 Color: là màu dùng cho chữ. Giá trị màu có thể gõ bằng chữ hoặc hệ số hexa (16)
 Ví dụ: <Font color=“red”> Lớp lập trình Web </font>
<Font color=“#FF000”> Lớp lập trình Web</font>

• Định dạng chữ


 Thẻ <B>nội dụng</B> hoặc <Strong>Nội dung</Strong>
 Thẻ <I>nội dụng</i> hoặc <em>nội dụng</em>
• Định dạng chỉ số trên mà dưới
 Chỉ số trên: <SUP></SUP>
 Ví dụ: AX2+BX+C =0
AX<SUP>2</SUP>+BX+C=0
 Chỉ số dưới: <SUB></SUB>
- Ví dụ: C+02=C02
C+O<SUB>2</SUB>=CO<SUB>2</SUB>
• Phân đoạn văn bản
 Cú pháp <P thuộc tính=“giá trị”>
 Thuộc tính align: canh đoạn văn bản. Align có thể nhận các giá trị sau
– Left: nội dụng trong đoạn được canh trái
– Righ: nội dung trong đoạn được canh phải
– Center: nội dung trong đoạn được canh giữa
• Thẻ phân cấp đề mục: Trong HTML cho phép sử dụng 6 cấp đề mục trong trang Web
 Cú pháp: <Hn>Nội dung</Hn> với n mang giá trị từ 1 tới 6
 Ví dụ:
 <H1> Giám đốc </H1>
 <H2> Phó giám đốc </H2>
 <H3> Nhân viên </H>
• Chèn hình ảnh vào trang Web
 Cú pháp: <IMG SRC= “tên tập tin chứa hình ảnh>
 Tên tệp tin chứa hình ảnh có cả đường dẫn thư mục. Nếu tệp tin hình ảnh được đặt
cùng thư mục với thư mục chứa trang Web thì không cần đường dẫn thư mực
 Ví dụ <IMG SRC=“images/anh1.jpg”>
• Thêm đường viên xung quanh hình ảnh
 Cú pháp: <IMG SRC=“tên file” Border=“n”>
 Với n là độ dày của đường biên ảnh, tính bằng pixel
 Ví dụ <IMG SRC=“images/anh1.jpg” border=“2”>
• Canh chỉnh hình ảnh
 Cú pháp: <IMG align=“giá trị”>Nội dung
 Giá Trị:
o left: hình ảnh nằm bên trái màn hình
o right: hình ảnh nằm bên phải màn hình
o center: hình ảnh nằm giữa màn hình
o Ví dụ <image src="IBM.jpg" align=“left">Xin chào
• Thêm chữ xung quanh hình ảnh
 Cú pháp: <IMG SRC=“tên file” align=“giá trị”> Nội dung
 Giá trị

29
o Top: ví trí văn bản nằm ở phái trên hình ảnh
o middle: vị trí văn bản nằm ở giữa hình ảnh
o bottom: vị trí văn bản nằm ở dưới hình ảnh
• Chèn ảnh nèn
<html>
<body background="background.jpg">
<h3>Look: A background image!</h3>
<p>Both gif and jpg files can be used as HTML backgrounds.</p>
<p>If the image is smaller than the page, the image will repeat itself.</p>
</body>
</html>

• Đường kẻ ngang trang Web


 Thẻ <HR>: dùng để kẽ đường ngang trên trang Web, giúp trang Web rõ ràng hơn.
 Cú pháp:
o <HR size=“n” width=“w” align=“giá trị”>
 Size: độ dày/mỏng của đường kẻ tính bằng pixel
 Width: chiều rộng của đường kẻ tính bằng pixel
 Align: canh đường kẻ. Có 3 giá trị left,right, center

• Định màu nền cho trang Web


 Để đình mầu nền cho trang Web, bổ sung thuộc tính bgcolor vào trong thẻ BODY
 Cú pháp <BODY bgcolor=“color”>
 Color là màu cần định cho trang Web
• Định ảnh nền cho trang Web
 Dùng hình ảnh làm nền cho toàn trang Web thày vì sử dụng màu nền
 Cú pháp <BODY background=“tên tệp”>
 Tên tệp là tên tệp tin hình ảnh càn làm nền cho trang Web
• Xuống dòng trong trang Web
 Cú pháp <BR>
• Tạo danh sách theo thứ tự
 Cú pháp
<OL Type = X START=n>
<LI> Nội dung mục 1
<LI> Nội dung mục 2
…..
<LI> Nội dung mục N
</OL>
 Trong đó X đỉnh kiểu ký hiệu sẽ được sử dụng trong danh sách
o A là chữ hoa
o a danh sách được đanh theo thứ tự chữ thường
o I,I,1
o N là giá trị bắt đầu của danh sách
• Tạo dấm tròn (bullet) cho danh sách
 Cú pháp
<UL Type=“kiểu chấm tròn”>
<LI> Nội dung mục 1
<LI> Nội dung mục 2
…..
<LI> Nội dung mục N

30
</UL>
 Trong đó “kiểu chấm tròn” mang một trong 3 giá trị sau:
o disc: kiểu dấu chấm tròn đậm
o Circle: kiểu dấu chấm tròn rỗng
o Square: kiểu dấu chấm vuông đặc
• Tạo danh sách định nghĩa: là loại danh sách có dạng một từ hay một cụm từ kèm theo
nội dung dài, rất thích hợp giải thích ý nghĩ của nội dung
 Cú pháp: sử dụng các thẻ <DL>, <DT>, <DD>
o <DL>: để tạo danh sách định nghĩa
o <DT> :đánh dấu thuật ngữ được định nghĩa trong danh sách
o <DD>: giải thích thuật ngữ ở trên

 Ví dụ
<DL>
<DT><B>Hướng công nghệ phần mềm></B>
<DD>
Đào tạo ra những lập trình viên, đáp ứng nhu cầu cần thiết của xã hội
</DD>
</DL>

2.3.3 Tạo liện kết (link)


Liên kết là đặc trưng WWW, cho phép người dùng chuyển từ mục này sang mục khác trong
cùng một trang hoặc chuyển sang một trang Web này sang một trang Web khác
a. Liên kết trong cùng một trang Web: cho phép liên kết đến các mục bên trong một trang
Web.
• Các bước thực hiện
 Tạo một điểm neo (bookmark)
o Cú pháp: <a name=“tên điểm neo cần tạo”>NDung</A>
 Tạo liên kết đến điểm neo
o Cú pháp: <a href=“#tên điểm neo cần liên kết đến”</A>
o Dấu # báo cho trình duyệt biết liên kết này là nội bộ

 Ví dụ:
`
b.Tạo liên kết đến các trang Web khác
 Cú pháp <A href=“URL”>Nội dung</A>
o Ví dụ
 <a herf=http://www.vimaru.edu.vn>DHHH</A>
o Thuộc tính
 Target=“giá trị”: mở liên kết ở vị trí nào?phụ thuộc giá trị
– _blank:nạp liên kết vào một cửa sổ trống mới
– _parent: nạp liên kết vào cửa sổ cha gần nhất của trang Web
hiện thời
– _self: nạp liên kết vào cùng cửa sổ với trang Web hiện hành
– _top: nạp liên kết vào cửa sổ cao nhất

2.3.4 Một số kí tự đặc biệt trong HTML

31
HTML dùng các kí từ < và > để mở và đóng 1 thể, do đó không thể hiện các ký tự đặc biệt
này. Vì vậy cần có một nhóm ký tự thay thế

2.3.5 Các tag dùng thiết kế bảng

• Cú pháp:
 <Table ></Table>: Bắt đầu một bảng mới với các thuộc tính đi kèm
 Thuộc tính:
o Bgcolor: đình màu nền cho bảng
o Border: định đò dày, mảnh của đường viền
o Bordercolor: định màu cho đường viền
o Bordercolordark: định màu sậm cho phần hắt bóng của đường viền
o Cellpadding: định khoảng cách giữa nội dung và đường viền
o Cellspacing: định khoảng cách giữa các ô
o Frame: hiển thị đường viền ngoài
o Height: định chiều cao bảng
o Width: định chiều rộng bảng
o Rules: hiển thị đường viền trong
 <TR>Nội dung</TR> bắt đầu một hàng mời trong bảng với các thuộc tính:
o Align/valigh: canh chỉnh nội dung hàng theo phương ngang/dọc
o Bgcolor: thay đổi màu nền của bảng

 <TH></TH>,<TD></TD>: bắt đầu một đề mục mới cho bảng vớic ác thuộc tính
sau
o Align/valigh: canh chỉnh nội dung hàng theo phương ngang/dọc
o Bgcolor: thay đổi màu nền của ô
o Colspan: mở rộng ô qua nhiều cột
o Rowspan: kéo dài ô xuống nhiều hàng
o Nowrap: giữ nội dung ô nằm trên một dòng

32
o Width, height: đình chiều rộng, cao cho ô
 Tạo khung viền cho bảng
o <Table border=“n”>
 Thay đổi màu khung
o <Table bordercolor=“mầu”>
 Thiết lập độ rộng
o <table width = “giá trị”>
 Thiết lập tiêu đề cho bảng
o <caption>Nội dung</caption>

2.3.6 Các tag tạo Frame

Khung (Frame) là thành phần cơ bản của Web, một trang Web có thể được chia thành nhiều
khung, mỗi khung sẽ chứa một trang Web riêng
a. Tạo Frame có dạng hàng
• Cú pháp:
<Frameset rows=“a,*,b”>
<frame name=“tên frame” src=“tên tệp tin sẽ hiển thị”>
<frame name=“tên frame” src=“tên tệp tin sẽ hiển thị”>
</Frameset>
• Trong đó:
o a: chiều cao frame đầu tiên
o *:chiều cao của frame thứ 2 là khoảng trống còn lại
o b:chiều cao của frame thứ 3
b.Tạo Frame có dạng cột
• Cú pháp:
<Frameset cols=“a,*,b”>
<frame name=“tên frame” src=“tên tệp tin sẽ hiển thị”>
<frame name=“tên frame” src=“tên tệp tin sẽ hiển thị”>
</Frameset>
o Scorlling = “yes/no”: ẩn/hiện thanh cuộn
o Frameboder=“yes/no”: ẩn/hiện viền khung
o Border=“n”: chỉnh độ dày/mỏng của viền khung
o Noresize: không cho thay đổi kích thước của khung

2.3.7 Các tag dùng tạo Form

Form là thành phần giao tiếp cơ bản giữa người duyệt Web với người tạo Web. Dữ liệu được
nhập vào Form thông qua các hộp điều khiển.
Cú pháp: <FORM>…</FORM>
• Tạo Textbox
o Cú pháp: <input type = “text” name=” name” value = “value” size = n
maxlength = n>
o Trong đó: “name” là chuỗi kí tự nhận diễn dữ liệu nhập vào, “value” là dữ liệu
đầu tiên hiển thị trong Textbox và được gửi đến máy chủ khi người duyệt

33
không gõ thông tin gì, size định kích thước của Textbox, maxlength giới hạn
số kí tự nhập vào Textbox
• Tạo Textboxx với vùng văn bản chứa nhiều dòng
o Cú pháp: <textarea name = “name” rows = “n”, cols = “m” wrap><textarea>
o Trong đó “name” là chuỗi kí tự nhận diện dữ liệu nhập vào, n là chiều cao của
vùng văn bản tính bằng dòng (mặc định = 4), m là chiều rộng của vùng văn
bản tính bằng kí tự (mặc định = 40).
• Tạo nút Radio button: Radio là nút chì được họn một trong số đó, không thể chọn lựa
hai nút cùng lúc
o Cú pháp <input type = “radio name = “name” value = “data” checked>
• Tạo ô chọn (checkbox): khác với Radio, checkbox cho phép chọn nhiều nút trong một
nhóm.
o Cú pháp <input type = “checkbox” name = “set” value = “value” checked>
• Tạo nút Push button (nút nhấn)
o Cú pháp<input type = “button” value = “nhãn”>
o Để tạo nút nhấn khi người dùng nhấn vào, dữ liệu của các điều khiển khác đều
được đặt giá trị mặc định lúc khởi tạo, có thể chỉ định thuộc tính type =”reset”
trong tag <input>. Tạo nút nhấn đề kết thục việc nhập dữ liệu của một Form, ta
chỉ định thuộc tính type = “submit” trong thẻ <input>
• Tạo Dropdown Listbox: là danh sách chứa nhiều mục
o Cú pháp

34
Chương III Cascading style sheets
2.1 Căn bản về CSS (Cascading style sheets)
CSS là một chuẩn để định dạng các trang Web. CSS mở rộng ngôn ngữ HTML truyền thống
với hơn 70 thuộc tính về kiểu dáng có thể áp dụng cho các thẻ HTML.Với CSS, các nhà lập
trình Web có thêm nhiều lựa chọn về màu sắc, khoảng cách, vị trí, biên, lề, con trỏ.
Ví dụ:
<html>
<span style=”cursor:hand;”>
Chuyển con trỏ thành bàn tay
</span>
</html>

2.2 Cú pháp CSS


Cú pháp của CSS được tạo nên bởi 3 thành phần:
- Phần tử chọn (thường là một thẻ HTML) (Selector)
- Thuộc tính (Property)
- Giá trị (Value)
Cú pháp của CSS được thể hiện như sau:

Selector {
Thuộc tính 1: giá trị;
Thuộc tính 2: giá trị;
……
Thuộc tính n: giá trị;
}
Selector thường là các thẻ HTML mà bạn muốn định nghĩa thêm. Property là thuộc tính mà
bạn muốn thay đổi; mỗi một thuộc tính cần phải có một giá trị. Một thuộc tính và giá trị của
nó được phân cách nhau bởi dấu hai chấm (:). Hai cặp thuộc tính-giá trị được phân cách nhau
bởi dấu chấm phảy (;). Toàn bộ các cặp thuộc tính-giá trị của một thẻ HTML được đặt trong
cặp dấu ngoặc nhọn ({}).

2.2.1 Phần tử chọn – Seclector

a. Dùng các phần tử HTML làm phần tử chọn: là cách tuyệt vời để áp dụng CSS nếu muốn tất
cả các phần tử thuộc một kiểu nào đó xuất hiện với cùng một định dạng. Cách làm này là
cứng nhắc nhất trong 3 cách nhưng nó là cách tốt nhất để đảm bảo tính nhất quán của việc
định dạng suốt tài liệu. Một trong những cách dùng HTML làm phần từ chọn thường đuợc
dùng là định dang các siêu liên kết trong tài liệu.

<STYLE TYPE=”text/css”>
<!--
A {text-decoration:none;}
-->
</STYLE>

35
Ví dụ

body{color: black} /*Phần chữ trong thẻ body sẽ có màu đen*/


hay:
p {text-align: center} /*tất cả các thẻ <P> trong trang HTML sẽ được canh giữa.*/
hay định nghĩa nhiều thuộc tính:
p
{
text-align: center;
color: red;
font-family: arial
}
Style sheet giới thiệu một số tùy chọn để các nhà thiết kế có thêm quyền điều khiển style cho
các phần tử
a. Dùng CLASS làm phần tử chọn
Bằng việc tạo ra các lớp, có thể định nghĩa nhiều kiểu thể hiện khác nhau cho cùng một thẻ
HTML và áp dụng mỗi lớp vào một vị trí cần thiết trên trang web. Có 2 cách thức dùng
CLASS:
Các CLASS gắn với 1 thẻ cụ thể
Ví dụ: Trên trang web có 3 loại đoạn văn: Đoạn văn canh lề trái, đoạn văn canh lề giữa và
đoạn văn canh lề phải. Khi đó có thể định nghĩa 3 lớp riêng biệt cho 3 loại đoạn văn này như
sau:

p.trai {text-align: left}


p.phai {text-align: right}
p.giua {text-align: center}

Tiếp theo, trong trang HTML sử dụng như sau:

<p class="trai">Đoạn văn này được canh lề trái.</p>


<p class="phai">Đoạn văn này được canh lề phải.</p>
<p class="giua">Đoạn văn này được canh lề giữa.</p>

Chú ý:
- CSS phân biệt chữ hoa và chữ thường giống như C++ do đó khi viết cần phải cẩn thận
trong việc sử dụng chữ hoa, chữ thường.
- Trong trang HTML, chỉ được phép khai báo 1 thẻ thuộc duy nhất một lớp. Trái điều này mặc
dù trình duyệt không báo lỗi nhưng các lớp sẽ không hoạt động được.
Ví dụ về sử dụng lớp sai:

<p class="trai" class="phai">Đây là đoạn định nghĩa sai</p>

Các ví dụ ở trên là ví dụ về việc tạo các lớp bị "gắn chặt" với một thẻ nào đó, tức là không sử
dụng được lớp này trong thẻ khác. Theo các khai báo ở trên, ví dụ dưới đây sẽ không hoạt
động:

<td class="trai">Ví dụ này không hoạt động</td>

Các CLASS không gắn với một thẻ cụ thể (có thể gắn với hầu như tất cả các thẻ):

36
Có thể tạo ra một lớp mà lớp đó có thể gắn vào hầu như bất cứ thẻ nào trên trang web bằng
cách bỏ tên thẻ ở đầu đi nhưng nhớ giữ lại dấu chấm (.)
Ví dụ:
Định nghĩa một lớp "giua" có thể gắn với bất cứ thẻ nào

.giua{text-align="center"}

và trong trang HTML ta sử dụng như sau:

<p class="giua">Đoạn văn này được canh lề giữa.</p>


<td class="giua">Câu này cũng được canh lề giữa.</p>

b. Dùng ID làm phần tử chọn


Tương tự như các lớp, các định danh cũng cho phép chia các thẻ thành nhiều loại khác nhau.
Tuy nhiên trên thực tế thì Định danh khác với lớp!!! Một lớp có thể áp dụng nhiều lần ở
nhiều vị trí trên trang web, tuy nhiên 1 định danh chỉ có thể áp dụng được duy nhất cho 1 thẻ
và tên của định danh phải là duy nhất trên 1 trang web. Qui tắc cho Style dùng ID làm phần tử
chọn bắt đầu bằng dấu thăng (#)

Các ví dụ:
1. Đoạn mã dưới đây có thể áp dụng cho thẻ <P> có ID là para1

p#para1
{
text-align: center;
color: red
}

Khi sử dụng như sau:

<P id="para1">Đoạn văn bản</p>

2. Đoạn mã dưới đây có thể có hiệu lực cho thẻ đầu tiên có ID là xyz:

*#xyz {color: green}

Khi sử dụng:

<p id="xyz">Đoạn văn bản</P>

3. Đoạn mã dưới đây chỉ có thể áp dụng cho thẻ <P> đầu tiên:

p#wer345 {color: green}

Khi sử dụng:

<p id="wer345">Đoạn văn bản</p>

Và đoạn dưới đây không có hiệu lực:

37
<h1 id="wer345">Đoạn văn bản không được áp dụng</p>

c. Các phần tử chọn theo ngữ cảnh

Nếu chúng ta muốn tìm kiếm ví dụ về mỗi quan hệ cha-con giữa một đoạn paragraph cùng với
phần tử em bên trong paragraph, chúng ta xem các phần tử chọn con làm việc như thế nào.
Trong ví dụ này, phần tử em và nội dụng của nó thừa kế các chức năng luật từ cha nó – phần
tử p

Nếu chúng ta muốn gán luật kiểu khác cho phần tử con, chúng ta có thể sử dụng cú pháp cung
cấp bởi phần từ con. Đặt phần tử cha trước, sau đó là phần tử con, cùng với khoảng trống giữa
2 phần tử:

p em

Sau đó, có thể viết bất kì thứ gì trong khối miêu tả sẽ được áp dụng đối với các phần tử con.

d. Các phần tử chọn CLASS giả (Pseudo Class Selectors)

Được sử dụng đối với các kiểu liên kết, ngoài ra còn được sử dụng cho các mục đích khác
như bổ sung hiệu ứng cho các thẻ. Sức mạnh của loại phần tử này sẽ được phát huy đối với
các liên kết đó là sự kết hợp của các phần tử với phần tử lớp để tạo ra các kiểu đa liên kết mà
có thể áp dụng cho một trang.

Phần tử lớp giả lập liên kết bắt đầu bằng mấu neo (anchor), tiếp theo là dấu “:”, cuối cùng là
tên lớp giả lập. Một số phần tử lựa chọn lớp giả lập liên kết qui ước như sau:

a:link
a:visited
a:hover
a:active

Có thể viết các luật cho mỗi phần tử chọn lớp và chúng có thể ứng dụng đến toàn bộ các liên
kết

Chúng ta có thể kết hợp các phần tử chọn trong một lớp, lớp này cho phép tạo ra kiểu đa liên
kết. Để thực hiện điều này, chúng ta bắt đầu bằng anchor, tiếp theo là dấu “.”, sau đó là tên
lớp, dấu “:”, và lớp giả lập. Ví dụ

a.main:link
a.subnav:link
a.footer:link

Trong ví dụ này, các liên kết trong các lớp của main, subnav, và footer có thẻ có các qui tắc
luật khác nhau tạo cho chúng

e. Các phần tử chọn phần tử giả lập (Pseudo Element Selectors)

Có bốn phần tử trợ giúp nhà lập trình dành được mục tiêu in ấn được mô tả bảng dưới đây:

38
Các phần tử chọn giả lập trong CSS2
Phần tử chọn Mục đích
:first-line Để lựa chọn và áp dụng tới dòng đầu tiển trong phần tử đã định sẵn
:first-letter Để lựa chọn và áp dụng kiểu đến kí tự đầu tiên trong phần tử
:before Cho phép xác định nội dụng trong tờ kiểu dáng được chèn phía trước phần
tử định sẵn
:after Cho phép xác định nội dung trong tờ kiểu dáng được chèn sau phần tử định
sẵn

Để áp dụng kiểu khác nhau đến dòng đầu tiên trong paragraph, sử dụng cú pháp phần tử giả
lập:

p:first-line

Nếu muốn bổ sung nội dung sau hoặc trược một phần tử, cần phải định nghĩ nội dung trong tờ
kiểu dáng.

Để sinh ra nội dung sử dụng phần lựa lựa chọn giả lập trước và sau, chúng ta định nghĩa phần
tử đến luật sẽ được áp dụng, phần tử giả lập trứoc, sau, thuộc tính nội dung, và nội dung trong
dấu nháy kép

h1:after {
content: "header note"
}

Kết quả: Câu “hearder note” xuất hiện sau h1

f. Nhóm các phần tử lựa chọn - Selector Groups

Nhóm phần tử lựa chọn cho phép người dùng nhóm các phần tử lựa chọn với nhau khi muốn
gán các phần tử lựa chọn này những thuộc tính giống nhau. . Ví dụ dưới đây sẽ nhóm tất cả
các thẻ Header lại, định nghĩa chúng sẽ có màu xanh, và sử dụng font arial hoặc sans-serif:

h1, h2, h3 {font-family: Arial, sans-serif; color: green }

2.2.2 Các phần tử lựa chọn lớp giả động

Cho phép bổ sung phần tử lựa chọn giả thông minh đối với bất kì thẻ nào hơn là các liên kết.

Bảng dưới đây sẽ chỉ ra 3 phần tử lớp giả lập động và chức năng của chúng

Phần tử Mục đích


chọn
:hover Áp dụng các qui tắc kiểu dáng khi chuột di qua một phân tử được lựa chọn
:active Áp dụng kiểu khi một phân tử được nhấp chuột
:focus Áp dụng kiểu khi một phần tử có focus bàn phím (khi con trỏ được đặt trong
hộp text box của form)
Các phần tử lựa chọn con

39
Các phần tử ngữ cảnh cho phép tạo mẫu phần tử con tách biệt với phần tử cha. Phần tử này áp
dụng khi cần lồng ghép các phần tử. Ví dụ, chúng ta có nhiều phần tử em trong phần tử
division, div và paragraph trong division này có thể có các phần tử strong.

Ví dụ: nếu viết phần lựa ngữ cảnh sau:

div strong

tất cả các phần tử strong trong div – thậm trí trong các phần tử paragraph (cháu)-sẽ bị ảnh
hưởng bởi tính thừa kế

Các phần tử con chỉ cho phép lựa chọn con. Điều này có nghĩa là, chúng ta có thể được đảm
bảo rằng chỉ có các phần tử em bên trong div,chứ không phải trong các cấu trúc khác lồng bên
trong div sẽ bị ảnh hưởng. Để làm được điều này, chúng ta bắt đầu bằng việc sử dụng phần tử,
ở bên phải dấu > và phần tử con trong vấn đề:

div>em

Chúng ta có thể nhận thấy sự phúc tạp. Nếu chúng ta muốn lựa chon phần tử em trong phần tử
paragraph bên trong phần tử div, thì viết như sau:

div>p>em

Tất cả phần tử con trong phần tử paragraph, không được nằm bên ngoài, sẽ đuwocj định dạng
trong quí tắc kế tiếp theo

Các phần tử con First

Một phần tử con first cho phép …. Kiểu phần tử lựa chọn này chỉ áp dụng đốiv ứoi con đầu
tiên của phần tử định sẵn. Để áp dụng kiểu này đến con đầu tiển, cung cấp phần tử cha cộng
với cú pháp phần tử lựa chọn con đầu tiên

p:first-child

Bất kì qui tắc nào chúng ta viết cho phần từ lựa chọn này sẽ được áp dụng đến phần tử con
đầu tiển của tất cả paragraph

Phần tử lụa chọn kề cận

Phần tử này trợ giúp định dạng các phần từ cùng một cha. Các phần tử cùng một cha là các
phần tử nằm trong cùng một mức của cây tà liệu và chia sẽ một cha chung. Ví dụ

<p>I find books by <a http://www.marthagrimes.com/">Martha Grimes</a>


to be the quintessential escapist experience. A good mystery and a
<a href="http://www.adagioteas.com/">cup of tea</a> on a rainy day is
true relaxation.</p>

Phần tử lựa chọn thuộc tính

Kiểu phần tử lựa chọn thuốc cho phép lựa chọn các phần tự dựa vò thuộc tính mà các phần tử
có. Ví dụ, nếu chúng ta có một liên kết trong URL, có thể tạo bởi phần tử này thay vì phần tử
anchor của chính no. Mội thực thể của URL được định dạng theo qui tắc kết hợp với phần tử
lựa chọn thuộc tính

40
Có bốn kiểu dáng có sẵn cho phần tử như miểu tả ở bảng dưới đây

Các mức điều khiển có thể dành được bởi kiểu phần tử lựa chọn này ít gây ngạc nhiên.

Table 2.3: Attribute Matching


Cú pháp Mục đích
[att] Áp dụng kiểu đốiv ứoi thuộc tính đưa ra, không quan tâm tới giá trị
[att=val] Áp dụng kểu đối với thuộc tính đưa xa trong giá trị xác định
[att~=val] Áp dụng kiểu đến bất kì thuộc này nào trong giá trị phần cách bởi dấu cách
[att|=val] Áp dụng kiểu đến bất kì thuộc này nào trong giá trị phần cách bởi dấu |

2.2.3 Thuộc tính, miêu tả, qui tắc

Các thuộc tính trong CSS thuộc ba danh mục:

• Visual bất kì thuộc tính nào ảnh hưởng đến sự biểu diển trực quan của tài liệu như
font, nền và màu
• Aural Các thuộc tính liên quan tới kiểu tai, như chức năng âm thanh.
• Paged Các thuộc tính liên quan đến trang media như in và màn hình

Ví dụ:

font-family: Arial, sans-serif


color: blue

Các thuộc tính tốc kí

Các thuộc tính này còn có tên khác là nhóm là cách thức viết tắt các quy tắc kiểu. Cso một vài
thuộc tính tốc kí khi so sánh với các thuộc tính đầy đủ. Thuộc tính rút gọn, thuộc tính có thể
thay thế nhau và nhóm media thuộc vào được miêu tả như sau

Tốc kí Các thuộc tính Nhóm media


background background-attachment visual

background-color

background-image

background-position

background-repeat
border border-color visual

border-style

border-width
border-bottom border-bottom-color visual

border-bottom-style

41
Tốc kí Các thuộc tính Nhóm media

border-bottom-width
border-left border-left-color visual

border-left-style

border-left-width
border-right border-right-color visual

border-right-style

border-right-width
border-top border-top-color visual

border-top-style

border-top-width
cue cue-before aural

cue-after
font font-family visual

font-size

font-style

font-weight

font-variant

line-height
list-style list-style-image visual

list-style-position

list-style-type
margin margin-top visual

margin-right

margin-bottom

margin-left
outline outline-color visual, interactive

outline-style

outline-width
padding padding-top visual

42
Tốc kí Các thuộc tính Nhóm media

padding-right

padding-bottom

padding-left
pause pause-after aural

pause-before

Chúng ta đã từng viết kiểu tốc kí khi nhóm các phần tử lựa chọn lại ví dụ:

h1 h2 h3

Ví dụ: chúng ta thương miêu tả phần tử paragraph như sau:

p {
font-family: Arial, sans-serif;
font-size: 16px;
font-weight: bold;
font-style: normal;
line-height: 15px;
color: black;
}

Chúng ta có thể lựa chọn sử dụng thuộc tính font, thay thế bằng thuộc tính tốc kí

p {
font: bold normal 16px/15px Arial, sans-serif;
}

Mối quan tâm hàng đầu khi nhóm đó là thứ tự của giá trị. Một ví dụ cho điều này đó là khi
làm việc với thuộc tính margin: chúng ta phải đưa ra giá trị theo thứ tự top,right,left, và
bottom

body {
margin: .10in .75in. .75in. .10in;
}
Chú thích trong CSS
Bạn có thể bổ xung các chú thích cho đoạn mã của mình trong CSS. Các đoạn chú thích sẽ
được trình duyệt bỏ qua. Đoạn chú thích được tạo ra tương tự như trong C++ (đặt bắt đầu
bởi /* và kết thúc bởi */)
Ví dụ:

/* Đây là đoạn chú thích*/


p
{
text-align: center;
/* Và đây là một đoạn chú thích khác */
color: black;
font-family: arial
}

43
2.3 Bổ sung CSS vào tài liệu HTML
CSS phá bỏ rào cản HTML bằng cách cho phép có thêm nhiều đặc tả thuộc tính chuẩn để
phục vụ cho việc dàn trang và định dạng. Những thuộc tính này được áp dụng vào trong tài
liệu mà không pháo vỡ cấu trúc HTML đã có sẵn.
Có 2 bước để bổ sung kiểu dáng CSS vào tài liệu: Khai báo style và áp dụng style cho các
phần tử HTML
Áp dụng CSS vào trang HTML
Có 4 cách áp dụng CSS và trong tài liệu:
• Dùng inline style
• Nhúng các style sheet
• Liên kết với một style sheet
• Bao gộp một style sheet
Dùng inline style: là cách dùng style ngay trong câu lệnh, bạn thêm thuộc tính STYLE vào
một phần tử HTML nào đó theo cú pháp như sau:
<tag STYLE=”property:value;property:value….”></tag>
Ví dụ:
<html>
<body>
<b style="color:navy;">
Màu xanh nước biển.
</b>
</body>
</html>
Một inline style có thể áp dụng cho bất cứ thẻ nào và chỉ có tác dụng trên chính thẻ đó. Dùng
inline style làm cho tài liệu rõ ràng hơn nhưng có thể dẫn đến việc viết mã quá nhiều. Ngoài
ra nó làm cho các đoạn mã dư thừa, khó bảo trì.
Nhúng style sheet
Để nhúng một style sheet, cần định nghĩa một khối (phân biệt bởi các thể <STYLE type =
“text/css”> và </STYLE>) được đặt trong phần HEAD của tài liệu. Khối này là một tập các
style rule (qui tắc về kiểu dáng), trong đó mỗi qui tắc định nghĩa style cho một phần tử hay
mộ nhóm các phần tử HTML
Một style rule có 2 phần:
• Một selector (phần tử chọn) để định danh một phần tử hay một nhóm các phân từ
HTML
• Một khai báo về thuộc tính về kiểu dáng được áp dụng cho selector đó.
• Cú pháp tổng quát: selector {property:value;property:value;…}
CSS không phân biệt chữ hòa và chữ thưừong nhưng bạn phải đảm bảo luôn dùng đúng cú
pháp. Mỗi style rule phải bắt đầu bằng một selector hay một nhóm các selector, theo sau là
một dấu mở ngoặc nhọn, tiếp theo là các khai báo thuộc tính về style. Mỗi khai báo cho một
style kết thúc bằng dấu chấm phẩy và mỗi thuộc tính được phân cách với giá trị của nó bằng
dấu hai chấm, và cuối cùng là một dấu ngoặc nhọn.
<head>
<style type="text/css">
<!--
B {text-transform: lowercase; font-size:18px}
P { border: silver thick solid; background-color:turquoise;}

44
-->
</style>
</head>
<body>
<p>
Mỗi đoạn sẽ có viền
<b>Đậm</b>
màu bạc
</p>
</body>
Cách dùng style sheet nhúng luôn uyển chuyển và dễ bảo trì hơn cách dùng inline style.
Chẳng hạn muốn thay đổi màu của P trong tài liệu, chỉ cần thay đổi một thứ: giá trị tương ứng
với thuộc tính “background-color”
Liên kết đến style sheet
Có thể lưu style sheet trong một tập tin riêng biêt và liên kết nó đến một hay nhiều tài liệu, sử
dụng thẻ <LINK> trong phần <HEAD>:
<LINK REL=”stylesheet” type=”text/css” href=”mystyles.css”>
Style sheet được liên kết chứa những khai báo về style, hoạt động giống như style sheet
nhúng, chhỉ khác là những style rule không đóng trong cặp thẻ <style type
=”text/css”></style>. Việc liên kết đến một style sheet bên ngoài cho phép nhà phát triển áp
dụng style sheet cho nhiều tài liệu khác nhau.
Bao gộp một style sheet
Một style sheet bên ngoài có thể được bao gộp (import) vào trong tài liệu bằng cách dùng
thuộc tính @import trong style sheet:
@import:url(mystyles.css);
Thẻ @import nên đặt ở đầu khối style hay đối với một sheet liên kết thì là ở trước bất cứ một
khai báo nào. Những qui tắc được bao gộp trong style sheet sẽ được áp dụng trước những qui
tắc khác định nghĩa chứa style sheet
Các cách dùng style
• Inline style: dùng cho văn bản riêng lẻ
• Style nhúng: định dáng một hay nhiều tài liệu ở tầm vực toàn cục
• Kết hợp inline để bổ sung cho style nhúng hay điều chỉnh nó cho một vài phần tử
cụ thể

2.4. Các mô hình trực quan


CSS làm việc trên mô hình định dạng trực quan cung cấp trong các đặc tả CSS. Mô hình này
trợ giúp định nghĩ cách thức trình duyệt xử lý cây tài liệu

Mô hình trực quan cung cấp ý nghĩa cho mọi phần tử trong cây để sinh ra một hộp. Nó còn
được tham chiếu như là mô hình hộp.

45
Mô hình hộp

Mô hình hộp tin tưởng vào các qui tắc quản trị để hiển thị một cách chính xác. Việc thực thi
mô hình box có sự khác biệt trong các trình duyệt chính

Có 2 kiểu chính của các phần tử :

Block-Level Elements là một trong phần tử được định dạng như một hộp. Nó có thể chứa các
phần tử nằm bên trong và các phần tử block-level khác. Đặc biệt, các phần tử này bất đầu trên
một trong mới. Ví dụng bao gồm: h1-h6, p, form, table, ol, ul.

Inline Elements xuất hiện bên trong nội dung, và có thể chứa văn bản hoặc các phần tử inline
khác. Ví dụ: a, em, strong, img, input.

Phần tử block-level sinh ra hộp chính. Hộp này có khả năng chứa các hộp khác hoặc các phần
tử block-level khác.

Bên trong phần tử inline, các hộp nằm theo chiều ngang được biết như là hộp đường

Tất cả hộp được chia thành các vùng sau:

Content area (text, objects) Vùng nội dung có đỉnh nội dung bao quanh nội dung thực sự
phần tử.

Padding Các đỉnh xung quanh padding của hộp

Borders Đỉnh border xác định border của hộp

Margins Đỉnh mép margin xung quanh margin hộp và được định nghĩa bởi đỉnh: left, right,
top, bottom.

Nếu một margin có độ rộng bằng 0, nó trở thành đỉnh border. Nếu đỉnh borger có độ dày bằng
0, nó trở thành đỉnh của padding. Nếu padding có độ dày bằng 0, nó trở thành đỉnh content

46
Có vài cách thức chung để bố trí các phần tử CSS như sau:

• Static Hộp tĩnh có chảy tràn dựa vào khối của nó hoặc chức năng inline.
• Float Hộp động dịch chuyển từ trái qua phải.
• Absolute position Hộp tuyệt đối được tổ chức đặc biệt sử dụng ranh giới theo tòa
độ x-y.
• Relative position Hộp tương đối được tổ chức liên quan đến nơi họp được mong
đợi bên trong luồng dữ liệu.

47
Chương IV Ngôn ngữ kịch bản Javascript
4.1. Giới thiệu ngôn ngữ kịch bản Javascrip
JavaScript là ngôn ngữ dưới dạng kịch bản có thể gắn với các file HTML để bổ sung tính
tương tác của Web. Nó không đuợc biên dịch mà được trình duyệt thông dịch. JavaScipt là
ngôn ngữ dựa trên đối tượng nhưng nó không phải là ngôn ngữ hướng đối tượng do không hỗ
trợ các lớp hay tính thừa kế.
Có 1 số ngôn ngữ khác cũng có khả năng bổ sung tính tương tác cho Web nhưng tất cả chúng
đều khác ở 1 số điểm:
• Script CGI (common gateway interface): Các Script rất mạnh nhưng chúng nằm trên
máy chủ nên có 1 số nhược điểm như: kết nối giữa trình duyệt Web và máy chủ sẽ
giới hạn tốc độ tương tác trên Web của bạn, máy chủ Web có thể bị quá tải nếu có
nhiều người sử dụng đồng thời, không phải mọi người đều có thể truy cập đến các
vùng trên máy chủ Web mà có thể chạy Script CGI vì các Script có thể làm ngưng trệ
máy chủ...
• Java: Mặc dù có tên tương tự nhau nhưng chúng ko phải là ngôn ngữ giống nhau.
Javascript được Netscape tại ra để cung cấp tính tương tác cho Web còn Java dược
Sun viết như là 1 ngôn ngữ lập trình có thể làm việc trên tất cả hệ điều hành.
• Vbscript: Đây có lẽ là ngôn ngữ gần gũi nhất với JS nhưng nó có 1 hạn chế là chỉ làm
việc trên IE (Nó là ngôn ngữ độc quyền của MS).
Các giới hạn của JavaSript (JS).
• JavaScript không thể giao tiếp với máy chủ: hai công việc chủ yếu của máy chủ mà
Javascript không thể thực hiện được là việc tập hợp thông tin từ người dùng và giao
tiếp với các máy khác, cũng như không thể gửi mail với JavaScript vì muốn gửi mail
thì phải giao tiếp với máy chủ và tất nhiên JAVASCRIPT không thực hiện được điều
này
• -JavaScript không thể tạo các hình ảnh đồ họa: 1 trong các giới hạn của JAVASCRIPT
là nó không thể tạo các hình ảnh đồ họa của riêng nó mà chỉ làm việc với các hình ảnh
có sẵn theo nhiều cách.
• JAVASCRIPT làm việc khác nhau trên các trình duyệt khác nhau.
Những việc Javascript có thể thực hiện
• Javascript cung cấp cho người thiết kế HTML một công cụ lập trình –
• JavaScript có thể đặt văn bản động trong trang HTML
• JavaScript có thể tương tác với các sự kiện
• JavaScript có thể đọc và ghi các phần tử HTML
• JavaScript có thể được sử để xác định tính hợp lệ của dữ liệu
Để chèn một đoạn script trong trang HTML, sử dụng thẻ <script>. Sử dụng thuộc tính thể để
định nghĩa ngôn ngữ kịch bản:

<script type="text/javascript">

Sau đó là các câu lệnh Javascript. Ví dụ document.write

document.write("Hello World!")

Cuối cùng là thể : </script>

48
Kịch bản trong một trang sẽ được thực thi ngay khi trang đó được nạp trong trình duyệt. Điều
này không phải lúc nào cùng cần thiết. Thỉnh thoảng cần thực hiện script khi một trang được
nạp, lúc khác khi sử dụng trigger một sự kiện. Các đoạn script có thể được đặt ở các vị trí sau:
• Đăt Script trong phần head: Script được thực thi khi chúng được gọi hoặc khi có
một sự kiện được trigger thì sẽ đặt script ở phần head. Khi đặt script ở phần head, điều
này sẽ đảm bảo rằng, script được nạp trước khi sử dụng nó.
<html>
<head>
<script type="text/javascript">
Câu lệnh
</script>
</head>
• Đặt Script trong phần body: script được thư thi khi một trang nạp. Khi đặt ở phần này,
scipt sinh ra nội dung của trang.
<html>
<head>
</head>
<body>
<script type="text/javascript">
Câu lệnh
</script>
</body>
• Đăt Script trong cả phần body và phần head: Có thể đặt không giới hạn số script trong
tài liệu, có thể đặt ở phần body và phần head.
<html>
<head>
<script type="text/javascript">
Câu lệnh
</script>
</head>
<body>
<script type="text/javascript">
Câu lệnh
</script>
</body>

Thỉnh thoảng, muốn chạy cùng một đoạn script cho nhiều trang, để không phải viết lại đoạn
mã trong từng trang đó, có thể viết đoạn mã đó trong một tệp riêng với phần mở rộng là “.js”.
Ví dụ viết cậu lệnh dưới đây và lưu trong tệp xxx.js:
document.write("Script chứa ở tệp riêng biệt ")
Để sử dụng tệp này, sử dụng thuộc tính “src”
<html>
<head>
</head>
<body>
<script src="xxx.js"></script>
</body>

49
</html>

4.2. Ngôn ngữ kịch bản JavaScript


4.2.1 Kiểu dữ liệu

- Kiểu dữ liệu số:


• Số nguyên: biễu diễn từ -253 tới -253
• Số thực:
- Kiểu văn bản (chuỗi): bắt đầu bằng dấu (“) hoặc (‘)
Ví dụ: “Hello World” , ‘Hello World’, “Peter O’Toole” , “Peter O\’Toole”, 'Hello "Paul"',
"Hello "Paul"", "Hello \"Paul\""
Ngoài ra còn có các kiểu kí tự đặc biệt sau đây:
Kí tự đăc biệt Kí tự đại diện
\b Phím lùi
\f Form feed
\n Dòng mới
\r Phím xuống dòng
\t Tab
\' Nháy đơn
\" Nháy kép
\\ Dấu chéo ngược
\xNN NN là số hexa xác định kí tự trong tập kí tự Latin-1
- Kiểu Boolean: Có 2 giá trị Yes hoặc No, True hoặc False

4.2.2 Khai báo biến

Biến là những đại lượng mà giá trị của nó có thể thay đổi trong quá trình xử lý. Trong toán
học, biến thường được dùng để lưu trữ các con số, còn trong tin học biến thường được dùng
để lưu trữ thông tin.

a. Cách đặt tên biến


• Tên biến phân biệt chữ hoa và chữ thường
• Tên biến bắt đầu bằng kí tự hoặc dấu gạch dưới character
• Không được có khoảng trắng giữa các kí tự

b. Khai báo biến


Sử dụng từ khóa var để khai báo 1 biến:
var strname = giá trị
Hoặc không cần dùng từ khóa var
strname = some value

50
c. Gán giá trị cho biến
var strname = "Hege"
Hoặc:
strname = "Hege"

d. Thời gian sống của biến


Khi miêu tả biến trong hàm, biến có thể được truy cập bên trong hàm đó. Khi thoát khỏi hàm,
biến cũng được giải phóng. Biến này như được gọi là biến cục bộ.
Nếu khai báo biến bên ngoài hàm, tất cả các hàm trong trang có thể truy cập tới biến này.
Thời gian sống của biến này bắt đầu từ khi ta khai báo và kết thúc khi trang được đóng. Biến
này được gọi là biến toàn cục.

4.2.3. Các toán tử JavaScript

a. Các Toán tử số học


Toán tử Miêu tả Ví dụ Kết quả
+ Cộng x=2 4
x+2
- Trừ x=2 3
5-x
* Nhân x=4 20
x*5
/ Chia 15/5 3
5/2 2.5
% Modulus (phần dư) 5%2 1
10%8 2
10%2 0
++ Tăng x=5 x=6
x++
-- Giảm x=5 x=4
x--

b. Các toán tử gán


Toán tử Ví dụ Diễn giải
= x=y x=y
+= x+=y x=x+y
-= x-=y x=x-y
*= x*=y x=x*y
/= x/=y x=x/y
%= x%=y x=x%y

c. Các toán tử so sánh


Toán tử Miêu tả Ví dụ
== Bằng 5==8 trả về giá trị false
!= Không bằng 5!=8 trả về giá trị true

51
> Lớn hơn 5>8 trả về giá trị false
< Nhỏ hơn 5<8 trả về giá trị true
>= Lớn hơn hoặc bằng 5>=8 trả về giá trị false
<= Nhỏ hơn hoặc bằng 5<=8 trả về giá trị true

d. Các toán tử logic


Toán tử Miêu tả Ví dụ
&& Và x=6
y=3
(x < 10 && y > 1) trả về giá trị true
|| Hoặc x=6
y=3
(x==5 || y==5) trả về giá trị false
! Phủ định x=6
y=3
!(x==y) trả về giá trị true

e. Toán tử chuỗi


txt1="What a very"
txt2="nice day!"
txt3=txt1+txt2

Ví dụ:

<html>
<body>
<script language="JavaScript" type="text/javascript">
var string1 = "Hello"; var string2 = "Goodbye";
alert(string1); alert(string2);
string2 = string1;
alert(string1); alert(string2);
string1 = "Now for something different";
alert(string1);alert(string2);
</script>
</body>

f.Chuyển đổi kiểu:


Để chuyển đổi kiểu dữ liệu, Javascript hỗ trợ hai hàm sau
• Hàm parseInt(): chuyển chuỗi sang số nguyên
Eg: parseInt(“123”) = 123; parseInt(“1234abc”) = 1234
• Hàm parseFloat(): chuyển chuỗi sang số thực

Ví dụ:
<html>
<body>
<script language="JavaScript" type="text/javascript">
var myString = "56.02 degrees centigrade";
var myInt;
var myFloat;
document.write("\"" + myString + "\" is " + parseInt(myString) +

52
" as an integer" + "<br>");
myInt = parseInt(myString);
document.write("\"" + myString + "\" when converted to an integer equals " + myInt +
"<br>");
myFloat = parseFloat(myString);
document.write("\"" + myString +
"\" when converted to a floating point number equals " + myFloat);
</script>
</body>
</html>

Kết quả:
"56.02 degrees centigrade" is 56 as an integer
"56.02 degrees centigrade" when converted to an integer equals 56
"56.02 degrees centigrade" when converted to a floating point number equals 56.02
Trong một số trường hợp, một số chuỗi không thể chuyển đổi thành số ví dụ như các chuỗi
không chứa bất kì một số nào cả. Chuyện gì xảy ra nếu chúng ta chuyển đổi chuỗi đó.

Ví dụ:
<html>
<body>
<script language="JavaScript" type="text/javascript">
var myString = "degrees centigrade";
var myInt;
var myFloat;
document.write("\"" + myString + "\" is " + parseInt(myString) +
" as an integer" + "<br>");
myInt = parseInt(myString);
document.write("\"" + myString + "\" when converted to an integer equals " + myInt +
"<br>");
myFloat = parseFloat(myString);
document.write("\"" + myString + "\" when converted to a floating point number equals " +
myFloat);
</script>
</body>
</html>
Kết quả:
"degrees centigrade" is NaN as an integer
"degrees centigrade" when converted to an integer equals NaN
"degrees centigrade" when converted to a floating point number equals NaN
NaN: not a number
NaN là giá trị được trả về bởi hàm isNaN(). NaN chỉ nhận một trong 2 giá trị True hoặc False
Ví dụ:
myVar1 = isNaN(“Hello”);. Giá trị NaN = False
myVar2 = isNaN(“123”);. Giá trị NaN = True

4.2.4. Các câu lệnh rẽ nhánh và lặp

Trong JavaScript có 3 câu lệnh điều kiện


• if câu lệnh

53
• if...else câu lệnh
• switch câu lệnh

a. Câu lệnh If and If...else câu lệnh


Cú pháp câu lệnh if
if (điều kiện)
{
Câu lệnh thực hiện nếu điều kiện đúng
}
Ví dụ
<script type="text/javascript">
//If the time on your browser is less than 10,
//you will get a "Good morning" greeting.
var d=new Date()
var time=d.getHours()

if (time<10)
{
document.write("<b>Good morning</b>")
}
</script>
Cú pháp câu lệnh If..else
if (điều kiện)
{
Câu lệnh thực hiện nếu điều kiện đúng
}else
{
Câu lệnh thực hiện nếu điều kiện sai
}
Ví dụ:
<script type="text/javascript">
//If the time on your browser is less than 10,
//you will get a "Good morning" greeting.
//Otherwise you will get a "Good day" greeting.
var d = new Date()
var time = d.getHours()

if (time < 10)


{
document.write("Good morning!")
}
else
{
document.write("Good day!")
}
</script>

Cú pháp câu lệnh If..else if

54
if (điều kiện)
{
Câu lệnh thực hiện nếu điều kiện đúng
}else if (điều kiện)
{
Câu lệnh thực hiện nếu điều kiện sai
} ……
Else
{
}
Ví dụ:
<html>
<body>
<script language="JavaScript" type="text/javascript">
var myAge = Number(prompt("Enter your age",30));
if (myAge >= 0 && myAge <= 10)
{
document.write("myAge is between 0 and 10<br>");
}
if ( !(myAge >= 0 && myAge <= 10) )
{
document.write("myAge is NOT between 0 and 10<br>");
}
if ( myAge >= 80 || myAge <= 10 )
{
document.write("myAge is 80 or above OR 10 or below<br>");
}
if ( (myAge >= 30 && myAge <= 39) || (myAge >= 80 && myAge <= 89) )
{
document.write("myAge is between 30 and 39 or myAge is between 80 and 89");
}
</script>
</body>
</html>

if (myAge >= 0 && myAge <= 10)


{
document.write("myAge is between 0 and 10");
}
else if ( (myAge >= 30 && myAge <= 39) || (myAge >= 80 && myAge <= 89) )
{
document.write("myAge is between 30 and 39 " +
"or myAge is between 80 and 89");
}
else
{
document.write("myAge is NOT between 0 and 10, " +
"nor is it between 30 and 39, nor is it between 80 and 89");
}

55
b. Cậu lệnh rẽ nhánh
Cú pháp
switch (biểu thức)
{
case nhãn1:
Mã được thực hiện nếu biểu thức = nhãn1
break
case label2:
Mã được thực hiện nếu biểu thức = nhãn2
break
default:
Mã được thực hiện nếu biểu thức khác với nhãn1 và nhãn2
}
Ví dụ:
<script type="text/javascript">
//You will receive a different greeting based
//on what day it is. Note that Sunday=0,
//Monday=1, Tuesday=2, etc.
var d=new Date()
theDay=d.getDay()
switch (theDay)
{
case 5:
document.write("Finally Friday")
break
case 6:
document.write("Super Saturday")
break
case 0:
document.write("Sleepy Sunday")
break
default:
document.write("I'm looking forward to this weekend!")
}
</script>

c. Toán tử điều kiện


JavaScript chứa toán tử điều kiện gán giá trị cho biến dựa vào một vài điều kiện
Cú pháp
variablename=(điều kiện)?giá trị 1: giá trị 2
Ví dụ
Greeting=(visitor=="PRES")?"Dear President ":"Dear "

d. Vòng lặp
• while
Câu lệnh while sẽ thực hiện các câu lệnh đến khi nào điều kiện đúng
while (điều kiện)

56
{
Mã thực thi
}

Ví dụ:
<html>
<body>
<script type="text/javascript">
i=0
while (i <= 5)
{
document.write("The number is " + i)
document.write("<br>")
i++
}
</script>
<p>Explanation:</p>
<p><b>i</b> equal to 0.</p>
<p>While <b>i</b> is less than , or equal to, 5, the loop will continue to run.</p>
<p><b>i</b> will increase by 1 each time the loop runs.</p>
</body>
</html>

• do...while
Câu lệnh while sẽ thực hiện các câu lệnh đến khi nào điều kiện đúng
Do
{
Mã thực thi
}
while (điều kiện)

Ví dụ:
<html>
<body>
<script type="text/javascript">
i=0
do
{
document.write("The number is " + i)
document.write("<br>")
i++
}
while (i <= 5)
</script>
<p>Explanation:</p>
<p><b>i</b> equal to 0.</p>
<p>The loop will run</p>
<p><b>i</b> will increase by 1 each time the loop runs.</p>
<p>While <b>i</b> is less than , or equal to, 5, the loop will continue to run.</p>
</body>
</html>

57
• for
Câu lệnh for thực hiện với số lần cho trước
for (giá trị khởi tạo; điều kiện; tăng)
{
Mã thực thi
}
Ví dụ 1
<html>
<body>
<script type="text/javascript">
for (i = 0; i <= 5; i++)
{
document.write("The number is " + i)
document.write("<br>")
}
</script>
<p>Explanation:</p>
<p>The for loop sets <b>i</b> equal to 0.</p>
<p>As long as <b>i</b> is less than , or equal to, 5, the loop will continue to run.</p>
<p><b>i</b> will increase by 1 each time the loop runs.</p>
</body>
</html>

var loopCounter;
for (loopCounter = 1; loopCounter <= 3; loopCounter++)
<html>
<body>
<script language="JavaScript" type="text/javascript">
var degFahren = new Array(212, 32, -459.15);
var degCent = new Array();
var loopCounter;

for (loopCounter = 0; loopCounter <= 2; loopCounter++)


{
degCent[loopCounter] = 5/9 * (degFahren[loopCounter] - 32);
}

for (loopCounter = 2; loopCounter >= 0; loopCounter--)


{
document.write("Value " + loopCounter + " was " + degFahren[loopCounter] +
" degrees Fahrenheit");
document.write(" which is " + degCent[loopCounter] +
" degrees centigrade<br>");
}
</script>
</body>
</html>

Trong một số trường hợp lấy giá trị của các phần tử trong mảng mà không quan tâm tới chỉ
mạng mảng, chúng ta có thể sủ dụng vòng lặp for với cú pháp như sau:

58
for (chỉ sổ in tênmảng)
{
Câu lệnh
}
Ví dụ:
var myArray = new Array("Paul","Paula","Pauline");
var loopCounter;
for (loopCounter = 0; loopCounter < 3; loopCounter++)
{
document.write(myArray[loopCounter]);
}

var elementIndex;
for (elementIndex in myArray)
{
document.write(myArray[elementIndex]);
}

Các câu lệnh break và continue


<script language="JavaScript" type="text/javascript">
var degFahren = new Array(212, "string data", -459.67);
var degCent = new Array();
var loopCounter;

for (loopCounter = 0; loopCounter <= 2; loopCounter++)


{

if (isNaN(degFahren[loopCounter]))
{
alert("Data '" + degFahren[loopCounter] + "' at array index " +
loopCounter + " is invalid");
break;
}

degCent[loopCounter] = 5/9 * (degFahren[loopCounter] - 32);


}
Hoặc
if (isNaN(degFahren[loopCounter]))
{
alert("Data '" + degFahren[loopCounter] + "' at array index " +
loopCounter + " is invalid");

continue;
}

4.2.3. Các đối tượng trong JavaScript

4.2.3.1 Đối tượng mảng


Đối tượng mạng được sử dụng lưu trữ tập các giá trị trong một tên biến. Mỗi giá trị là một
phần tử của mạng và có một chỉ số

59
Để tạo ra một thực thể của Array, sử dụng từ khóa (new)
var family_names=new Array(3)
var family_names=new Array("Tove","Jani","Stale")
Để tham chiếu tới các phần tử của mảng, sử dụng tên mảng và chỉ số mảng. Chỉ số bắt đầu
bằng 0.
family_names[0]="Tove"
family_names[1]="Jani"
family_names[2]="Stale"
mother=family_names[0]
father=family_names[1]
Các thuộc tính của mạng và method được miêu tả dưới đây. NN: Netscape, IE: Internet
Explorer
Properties (Các thuộc tính)
Cú pháp: object.property_name
Thuộc tính Miêu tả NN IE
Constructor Chứa hàm tạo ra mẫu ban đầu của đối tượng 4 4
Length Trả về số phần tử của mảng 3 4
Prototype Cho phép bổ sung thuộc tính vào mảng 3 4
Phương thức Methods
Cú pháp: object.method_name()
Phương thức Miêu tả NN IE
concat() Nối hai hoặc nhiều mạng thành một mảng mới 4 4
join(dấu phân cách) Đặt tất cả các phần tử của mạng trong một 3 4
chuỗi phân cách nhau bởi dấu phân cách (dấu
phẩy được sử dụng mặc định)
pop() Loại bỏ và trả về phần tử cuối cùng của mảng 4 5.5
push("phần tử 1 ","phần tử 2") Bổ sung một hoặc nhiều phần tử vào cuối 4 5.5
mảng và trả về giá trị length của mạng
Reverse() Đảo ngược thứ tự các phần tử trong mảng 3 4
shift() Loại bỏ và trả về giá trị đầu tiên của mạng 4 5.5
slice(bắt đầu[,kết thúc]) Tạo ra một mảng mới từ một mảng cũ 4 4
sort() Sắp xếp các phần tử của mảng 3 4
splice(chỉ số,số phần Bổ sung hoặc loại bỏ các phần tử của mảng 4 5.5
tử[,el1,el2])
toSource() Trả về chuỗi biểu diễn mã nguồn của mảng 4.0 4
6
toString() Trả về chuỗi biểu diễn biểu diễn số phần tử của 3 4
mạng
unshift("phần tử 1,” phần tử 1”) Bổ sung một hoặc nhiều phần tử đến đầu mảng 4 5.5
và trả về length mới
valueOf() Trả về giá trị gốc của mảng 4 3

Ví dụ:
<html>
<body>
<script language="JavaScript" type="text/javascript">
var myArray = new Array();

60
myArray[0] = "Bob";
myArray[1] = "Pete";
myArray[2] = "Paul";
document.write("myArray[0] = " + myArray[0] + "<br>");
document.write("myArray[2] = " + myArray[2] + "<br>");
document.write("myArray[1] = " + myArray[1] + "<br>");
myArray[1] = "Mike";
document.write("myArray[1] changed to " + myArray[1]);
</script>
</body>
</html>

Mảng 2 chiều và nhiều chiều

Chỉ số 0 1 2
0 Name1 Name2 Name3
1 Age1 Age2 Age3
2 Address1 Address2 Address3

<html>
<body>
<script language="JavaScript" type="text/javascript">
var personnel = new Array();

personnel[0] = new Array();


personnel[0][0] = "Name0";
personnel[0][1] = "Age0";
personnel[0][2] = "Address0";

personnel[1] = new Array();


personnel[1][0] = "Name1";
personnel[1][1] = "Age1";
personnel[1][2] = "Address1";

personnel[2] = new Array();


personnel[2][0] = "Name2";
personnel[2][1] = "Age2";
personnel[2][2] = "Address2";

document.write("Name : " + personnel[1][0] + "<br>");


document.write("Age : " + personnel[1][1] + "<br>");
document.write("Address : " + personnel[1][2]);

</script>
</body>
</html>

4.2.3.2 Đối tượng Boolean


Đối tượng Boolean là một trình bao bọc đối tượng cho giá trị boolean và được sử dụng để
chuyển đổi giá trị không phải là Boolean sang giá trị boolean.

61
Nếu đối tượng boolean không có giá trị khởi tạo hoặc bằng 0, null, “”, false và NaN, giá trị
khởi tạo là false ngược lại bằng true.
var b1=new Boolean()
var b2=new Boolean(0)
var b3=new Boolean(null)
var b4=new Boolean("")
var b5=new Boolean(false)
var b6=new Boolean(NaN)
var b1=new Boolean(true)
var b2=new Boolean("true")
var b3=new Boolean("false")
var b4=new Boolean("Richard")
Các thuộc tính và method được miêu tả dưới đây:
Các thuộc tính
Cú pháp: đốitượng.tênthuộctính
Thuộc tính Miêu tả NN IE
constructor Chứa hàm tạo mẫu của đối tượng 4 4
prototype Cho phép bổ sung thuộc tính và phương thức cho đối 3 4
tượng
Các phương thức
Cú pháp: object.method_name()
Method Description NN IE
toString() Chuyển đổi giá trị Boolean sang string. Phương thức 4 4
này được gọi tự động bởi Javascript bất kì khi nào đối
tượng Boolean được sử dụng trong tính hướng yêu cầu
một chuỗi
valueOf() Trả về giá trị nguyên thủy (“true” hoặc “false”) của đối 4 4
tượng Boolean

Ví dụ:
<html>
<body>
<script type="text/javascript">
var b1=new Boolean( 0)
var b2=new Boolean(1)
var b3=new Boolean("")
var b4=new Boolean(null)
var b5=new Boolean(NaN)
var b6=new Boolean("false")
document.write("0 is boolean "+ b1 +"<br />")
document.write("1 is boolean "+ b2 +"<br />")
document.write("An empty string is boolean "+ b3 + "<br />")
document.write("null is boolean "+ b4+ "<br />")
document.write("NaN is boolean "+ b5 +"<br />")
document.write("The string 'false' is boolean "+ b6 +"<br />")
</script>
</body>
</html>

62
4.2.3.3 Đối tượng Date
Đối tượng Date được sử dụng làm việc với ngày tháng và thời gian.
Để tạo ra một thực thể của đối tượng Date và gán giá trị tới biến “d”, thực hiện các bước sau:
var d=new Date()
Sau khi tạo được thực thể đối tượng Date, có thể truy cập tới tất cả các method của đối tượng
Date thông qua biến “d”.
Để trả về ngày hiện thời trong tháng của đối tượng Date, có thể viết như sau:
d.getDate()
Đối tượng Date có thể có các tham số như sau:
new Date(milliseconds)
new Date(dateString)
new Date(yr_num, mo_num, day_num [, hr_num, min_num, sec_num, ms_num])
• milliseconds - the number of milliseconds since 01 January, 1970 00:00:00
• dateString - the date in a format that is recognized by the Date.parse method
• yr_num, mo_num, day_num - the year, month or day of the date
• hr_num, min_num, sec_num, ms_num - the hours, minutes, seconds and milliseconds
Nếu sử dụng Date(), JavaScript tạo ra một đối tượng cho ngày hiện thời theo thời gian trên
máy cục bộ
var d=new Date("October 12, 1988 13:14:00")
var d=new Date("October 12, 1988")
var d=new Date(88,09,12,13,14,00)
var d=new Date(88,09,12)
var d=new Date(500)
Các thuộc tính
Cú pháp: object.property_name
Thuộc tính Miêu tả NN IE
constructor Chứa hàm tạo mẫu của đối tượng 4 4
prototype Cho phép bổ sung thuộc tính cho đối tượng date 3 4
Các phương thức
Cú pháp: object.method_name()
Phương thức Miêu tả NN IE
Date() Trả về đối tượng Date 2 3
getDate() Trả về ngày của đối tượng Date ( từ 1-31) 2 3
getDay() Trả về ngày của đối tượng Date (từ 0-6. 0=Sunday, 2 3
1=Monday, vv.)
getMonth() Trả về giá trị tháng của đối tượng Date (từ 0-11. 2 3
0=January, 1=February, vv.)
getFullYear() Trả về giá trị năm của đối tượng Date (bốn chữ số) 4 4
getYear() Returns the year of a Date object (from 0-99). Use 2 3
getFullYear instead !!
getHours() Trả về giá trị Giờ 2 3
getMinutes() Trả về giá trị phút 2 3
getSeconds() Trả về gí trị giây 2 3

63
parse() Trả về giá trị chuỗi 2 3
setDate() Thiết lập giá trị ngày của tháng 2 3
setFullYear() Thiết lập giá trị năm 4 4
setHours() Thiết lập giá trị giờ 2 3
setMilliseconds() Thiết lập giá trị milli giây 4 4
setMinutes() Thiết lập giá trị phút 2 3
setMonth() Thiết lập giá trị tháng 2 3
setSeconds() Thiết lập giá trị giây 2 3
setTime() Thiết lập giá trị milli giây 2 3
setYear() Thiết lập giá trị năm (00-99) 2 3

Ví dụ:
<html>
<body>
<script type="text/javascript">
var d=new Date()
var weekday=new
Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday")
var monthname=new
Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")
document.write(weekday[d.getDay()] + " ")
document.write(d.getDate() + ". ")
document.write(monthname[d.getMonth()] + " ")
document.write(d.getFullYear())
</script>
</body>
</html>
Kết quả: hiển thị ngày đầy đủ

4.2.3.5 Đối tượng Math


Đối tượng toán học được xây dựng sẵn chứa hằng số và hàm. Không cần phải tạo ra đối tượng
Math trước khi sử dụng nó.
Ví dụ: Để lưu trữ số ngẫu nhiên từ 0 tới 1 trong biến "r_number":
r_number=Math.random()

r_number=Math.round(8.6)
Các thuộc tính
Cú pháp: object.property_name
Thuộc tính Miêu tả NN IE
E 2 3
LN2 2 3
LN10 2 3
LOG2E 2 3
LOG10E 2 3
PI 2 3
SQRT1_2 2 3
SQRT2 2 3
Các phương thức

64
Cú pháp: object.method_name()
Phương thức Miêu tả NN IE
abs(x) 2 3
acos(x) 2 3
asin(x) 2 3
atan(x) 2 3
atan2(y,x) 2 3
ceil(x) 2 3
cos(x) 2 3
exp(x) 2 3
floor(x) 2 3
log(x) 2 3
max(x,y) 2 3
min(x,y) 2 3
pow(x,y) 2 3
random() 2 3
round(x) 2 3
sin(x) 2 3
sqrt(x) 2 3
tan(x) 2 3

4.2.3.6 Đối tượng String


Đối tượng String được sử dụng với các văn bản. Các thuộc tính và phương thức được miêu tả
dưới đây:
Các thuộc tính
Cú pháp: object.property_name
Phương thức Miêu tả NN IE
constructor Chứa hàm tạo mẫu của đối tượng 4 4
Length Trả về số các kí tự trong chuỗi 2 3
Các phương thức
Cú pháp: object.method_name()
Phương thức Miêu tả NN IE
big() Trả về cơ chữ lớn 2 3
blink() Trả về chuỗi nhấp nháy 2
bold() Trả về chuỗi đậm 2 3
charAt(index) Trả về kí tự tại vị trí xác định 2 3
charCodeAt(i) Trả về Unicode của kí tự tại vị trí xác định 4 4
concat() Cộng chuỗi 4 4
Fontcolor() Định màu chuỗi 2 3
fontsize() Định kích cỡ chuỗi 2 3
fromCharCode() Trả về giá trị kí tự trong bảng mã Unicode 4 4
indexOf() Trả về vị trí xuất hiện đầu tiên của chuỗi xác định trong 2 3
chuỗi khác. Giá trị = -1 nếu không xuất hiện
italics() Định kiểu chữ nghiêng 2 3
lastIndexOf() Trả về vị trí xuất hiện đầu tiên của chuỗi xác định trong 2 3
chuỗi khác. Giá trị = -1 nếu không xuất hiện. Phương

65
thức này thực hiện từ phải qua trái
link() Trả về chuỗi như một hyperlink 2 3
match() Tương tự như indexOf và lastIndexOf, nhưng nó trả về 4 4
chuỗi, hoặc “null” thay vì giá trị số
replace() Thay thế giá trị kí tự 4 4
search() Trả về giá trị nguyên nếu chứa kí tự 4 4
slice() Trả về chuỗi chứa chỉ số kí tự 4 4
small() Định dạng chữ nhỏ 2 3
split() Chia chuỗi thành các mảng chuỗi 4 4
strike() Định dạng gạch ngang chuỗi 2 3
sub() Chỉ số dưới 2 3
substr() Trả về các kí tự xác định. Ví dụ 14,7 trả về 7 kí tự từ 14 4 4
kí tự (bắt đầu từ 0)
Substring() Trả về các kí tự xác định. Ví dụ 7,14 trả về các kí tự từ 7 2 3
trở lên trừ 14 (bắt đầu từ 0)
sup() CHỉ số trên 2 3
toLowerCase() Chuyển đổi sang chữ thường 2 3
anchor("anchorname") Trả về neo 2 3
toUpperCase() Chuyển đổi sang chữ hoa 2 3
Ví dụ:
html>
<body>

<script type="text/javascript">
var str="W3Schools is great!"
document.write(str.substr(2,6))
document.write("<br /><br />")
document.write(str.substring(2,6))
</script>
<p>
Phương thức substr() tra về một phần của chuỗi. Nếu ghi là (2,6), chuỗi trả về sẽ bắt đầu từ kí
tự thứ 2 đến 6
</p>
<p>
The substring() method also returns a specified part of a string. If you specify (2,6) it returns
all characters from the second character (start at 0) and up to, but not including, the sixth
character.
</p>
</body>
</html>

4.2.4. Hàm

4.2.4.1. Khai báo hàm


Để tạo ra một hàm cần phải định nghĩa tên hàm và các đối số của hàm:

function myfunction(các đối số)


{
Câu lệnh
}

66
function myfunction() // Hàm không có đối số
{
Câu lệnh
}

Đối số là các biến được sử dụng trong hàm. Giá trị của biến sẽ được đặt giá trị khi có lời gọi
hàm.
Bằng cách đặt các hàm ở phần Head trong văn bản, đảm bảo được ràng tất cả các mã trong
hàm được lạp trước khi có lời gọi hàm.
Một số hàm trả giá trị về tới biểu thức:
function result(a,b)
{
c=a+b
return c
}

4.2.4.2. Lời gọi hàm


Một hàm không được thực hiện trước khi nó được gọi. Có thể gọi hàm cùng với các đối số
hoặc không tùy thuộc vào cách khai báo hàm:
myfunction(các đối số) hoặc myfunction()
Câu lệnh Return
Các hàm sẽ trả về giá trị phải sử dụng câu lệnh return. Câu lệnh return chỉ ra giá trị được trả
về nơi mà hàm được gọi.
function total(a,b)
{
result=a+b
return result
}
sum=total(2,3)

Ví dụ 1:
<html>
<head>
<script type="text/javascript">
function myfunction()
{
alert("HELLO")
}
</script>
</head>
<body>
<form>
<input type="button" onclick="myfunction()" value="Call function">
</form>
<p>By pressing the button, a function will be called. The function will alert a message.</p>
</body>
</html>

Ví dụ 2:
<html>
67
<head>
<script type="text/javascript">
function myfunction(txt)
{
alert(txt)
}
</script>
</head>
<body>
<form>
<input type="button" onclick="myfunction('Hello')" value="Call function">
</form>
<p>By pressing the button, a function with an argument will be called. The function will alert
this argument.</p>
</body>
</html>

Ví dụ 3:
<html>
<body>
<script language="JavaScript" type="text/javascript">
function convertToCentigrade(degFahren)
{
var degCent;
degCent = 5/9 * (degFahren - 32);
return degCent;
}
var degFahren = new Array(212, 32, -459.67);
var degCent = new Array();
var loopCounter;
for (loopCounter = 0; loopCounter <= 2; loopCounter++)
{
degCent[loopCounter] = convertToCentigrade(degFahren[loopCounter]);
}
for (loopCounter = 2; loopCounter >= 0; loopCounter--)
{
document.write("Value " + loopCounter + " was " + degFahren[loopCounter] +
" degrees Fahrenheit");
document.write(" which is " + degCent[loopCounter] +
" degrees centigrade<br>");
}
</script>
</body>
</html>

4.2.5. Lập trình hướng đối tượng trong JavaScript


4.2.5.1 Tạo một đối tượng

• Để tạo một đối tượng, chúng ta sử dụng câu lệnh new

68
Cú pháp: var myVariable = new tênđốitượng(các tham số lựa chọn);
Các tham số lựa chọn phụ thuộc vào khai báo các Contructor

Ví dụ:

var myArray = new Array();


var myArray = new Array("Paul", "Paula", "Pauline");
var myDate = new Date();
var myDate = new Date("1 Jan 2000");
• Trong kiểu dữ liệu nguyên thủy, biến lưu trữ giá trị thực sự
var myNumber = 23;
có nghĩa biến myNumber lưu giá trị 23. Tuy nhiên các biến được gán tới các đối tượng sẽ
không lưu trữ giá trị thực sự và chỉ tham chiếu tới địa chỉ bộ nhớ chứa dữ liệu.
var myArrayRef = new Array(0, 1, 2);
var mySecondArrayRef = myArrayRef;
myArrayRef[0] = 100;
alert(mySecondArrayRef[0]);
• Sử dụng các thuộc tính của đối tượng
myArray.length
var myVariable = myArray.length;
alert(myArray.length);
myArray.length = 12;
• Gọi phương thức của đối tượng
myArray.sort();
• Kiểu nguyên thủy and Đối tượng
Thực chất ra các đối tượng String, Number và Boolean tương đương với các kiểu dữ liệu
nguyên thủy string, number, Boolean. Ví dụ để tạo ra một đối tượng String chứa dòng
text."I'm a String object,"
var myString = new String("I'm a String object");
var lengthOfString = myString.length; Trả về số kí tự trong đối tượng
Sử dụng kiểu nguyên thủy:
var mySecondString = "I'm a primitive string";

4.2.6. Lập trình với các đối tượng của trình duyệt

69
Trình duyệt được tạo bởi các đối tượng. Khi Jscript chạy trên nền trình duyệt, chúng ta cso thể
truy cập vào các đối tượng của trình duyệt chính xác như chúng ta truy cập vào các đối tượng
của Jscript.
Trình duyệt đưa ra rất nhiều đối tượng, ví dụ như đối tượng window tương ứng với của sổ của
trình duyệt. Chúng ta đã từng sử dụng 2 phương thức của đối tượng này đó là alert() và
prompt(). Các đối tượng khác cũng có hiệu lực đối với trình duyệt chính là bản thân trang,
được biểu diễn bởi đối tượng văn bản (document object). Quay trở lại các phần trước chúng ta
sử dụng thuộc tính bgColor của đối tượng document để thay đổi mầu nền của trang web.
Chúng ta sử dụng phương thức write() của đối tượng để viết thông tin ra trang web.
Rất nhiều đối tượng khác được sử dụng trong mã HTML như là đối tượng img của thẻ <img>
Tập hợp các đối tượng mà trình duyệt cung cấp sử dụng cho Jscript được gọi là Brower
Object Model (BOM).

4.2.6.1 Giới thiệu các đối tượng trình duyệt


Trong phần này chúng ta xem xét các đối tượng của BOM có hiểu lực đối với tất cả các trình
duyệt. BOM cung cấp rất nhiều đối tượng, nhưng chỉ khoảng 10% được sử dụng.

Một trang web được biểu diễn ở trong BOM bởi đối tượng document.

4.2.6.2 Đối tượng Windows

Đối tượng window là đối tượng toàn cục, có nghĩa là chúng ta không phải sử dụng tên của nó
để truy cập các thuộc tính và phương thức. Các hàm và biến cục bộ được tạo ra như các thuộc

70
tínhv à đối tượng toàn cục. Ví dụ, hàm alert() thực chất là phương thức của đối tượng
window.

alert("Hello!"); hoặc window.alert("Hello!");


Cả hai trình duyệt bao gồm các đối tượng document, navigator, history, screen, và location.
• Đối tượng Document: biểu diễn các trang
• Đối tượng navigator: lưu thông tin về trình duyệt
• Đối tượng screen: chứa thông tin về khả năng hiển thị của máy trạm
• Đối tượng location: lưu trư chie tiết về vị trị trang hiện thời.
Sử dụng đối tượng window
Một ví dụ đơn giản sử dụng các thuộc tính và phương thức của đối tượng window đó là tác
độngv vào thanh trang thái của document
Để thay đối thông báo mặc địnhc của thanh trang thái của window, chúng ta sử dụng thuộc
tính “defaultStatus” property.
window.defaultStatus = "Hello and Welcome";
hoặc defaultStatus = "Hello and Welcome";
<html>
<head>
<script language="JavaScript" type="text/JavaScript">
window.defaultStatus = "Hello and Welcome";
</script>
</head>
</html>
Trong một số trường hợp nếu chúng ta khai báo biến trùng với tên đối tượng hoặc thuộc tính
của BOM không xảy ra lỗi những không nhận được kết quả chính xác
var defaultStatus;
defaultStatus = "Welcome to my website";
Trong trường hợp này chúng ta hoặc sử dụng tên biến khác hoặc cú pháp chính tắc để truy cấp
thuộc tính của window
var defaultStatus;
window.defaultStatus = "Welcome to my website";

4.2.6.3 Đối tượng history


Đối tượng history theo dõi những trang mà người sử dụng đã duyệt qua. Danh sách các trang
được gọi từ stack history của các trình duyệt. Nó cho phép người sử dụng bấm vào phím Back
hoặc Forward của trình duyệt để thăm lại những trang vừa duyệt.
Giống như đối tượng Array của Jscript, đối tượng history có thuộc tính chiều dài (length). Đối
tượng history có phương thức back() và forward(), go() …..
history.go(-2); Quay trở lại 2 mức
history.go(3);.Tiến lên 3 mức

Note: go(-1) tương đương với back() , và go(1) tương đương forward().

71
4.2.6.4 Đối tượng location
Đối tượng location lưu trữ rất nhiều thông tin có tích về vị trị hiện thời của trang. Không chỉ
lưu trữ vẻ URL cho trang mà server lưu trang đó, số cổng kết nối server, giao thức được sử
dụng. Những thông tin này tương đương với các thuộc tính href, hostname, port, và giao thức
của đối tượng location
Để lấy được vị trí trang hiện thời, có thể sử dụng các phương thức của đối tượng vị trí để thay
đổi vị trí và làm tươi trang hiện thời.

4.2.6.5 Thay đổi vị trị (Changing Locations)


Chúng ta có thể duyệt các trang khác theo 2 cách. Hoặc sử dụng thuộc tính href để chỉ tới
trang khác, hoặc có thể sử dụng phương thức relplace(). Kết quả của hai cách này tương tự
như nhau. Sự khác nhau đó là replace() xóa bỏ trang hiện thời trong stack history và thay vào
đó là giá trị mới.
window.location.replace("myPage.htm");
window.location.href = "myPage.htm";
Đối tượng navigator
Thực chất đối tượng navigator thuộc tính của đối tượng window.

4.2.6.6 Đối tượng screen


Thuộc tính đổi tượng screen của đối tượng window chứa rất nhiều thông tin khả năng hiển thị
của máy trạm. Các thuộc tính của nó bao gồm các thuộc tính chiều cao, độ rộng, xác định ra
vùng dọc, ngang của screen

4.2.6.7 Đối tượng document


Cùng với đối tượng window, đối tượng document là một trong đối tượng quan trọng và chung
nhất được sử dụng trong BOM. Thông qua đối tượng này, có thể truy cập tới các thuộc tính và
phương thức của một vài đối khác định nghĩa bởi các thẻ HTML.
Các thuộc tính và phương thức trong các phiên bản trình duyệt khác nhau rất nhiều, trong
phần này chúng ta tập trung các thuộc tính và phương thức chung nhất đối với tất cả các trình
duyệt
Đối tượng document có các thuộc tính kết hợp với nó, thực chất là các mảng. Những thuộc
tính chính đó là các mảng forms, images và links. IE4 và 5 hỗ trỡ thêm một số các thuộc tính
mảng khác như là tất cả thuộc tính mạng lá mảng của các thể biểu diễn bởi các đối tượng
trong trang. Còn NN hỗ trợ các thuộc tính mảng không được hỗ trở bởi IE ví dụ như các mảng
thẻ.
a. Sử dụng đối tựong document
Ví dụ: thiết lập màu nền dựa vào chế độ màn hình của máy trạm
<html>
<body>
<script language="JavaScript" type="text/JavaScript">
switch (window.screen.colorDepth)
{
case 1:
case 4:
72
document.bgColor = "white";
break;
case 8:
case 15:
case 16:
document.bgColor = "blue";
break;
case 24:
case 32:
document.bgColor = "skyblue";
break;
default:
document.bgColor = "white";
}
document.write("Your screen supports " + window.screen.colorDepth +
"bit color");
</script>
</body>
</html>
Giá trị thuộc tính colorDepth trả về các giá trị 1, 4, 8. 15, 16, 24, 32. Chúng biểu diễn số các
bit được gán cho mỗi pixel trên màn hình.
b. Mảng các ảnh - The images Array
<img ALT="USA" name=myImage src="usa.gif">
Mỗi ảnh trong trang có một đối tượng img được tạo ra. Các đối tượng được lưu trong mạng
images. Mảng này là thuộc tính của document. Ảnh đầu tiên trong trang được truy vấn thông
qua images[0].
Có thể gán biến tham chiếu tới đối tượng img trong mảng images.
var myImage2 = document.images[1];
Chúng ta có thể truy cấp các đối tượng img trong mảng images bằng tên. Ví dụ, đối được bởi
thẻ <img>, có tên là myImage, có thể được truy cập trong thuộc tính mảng ảnh của đối tượng
document như sau:
document.images["myImage"]
Bởi vì thuộc tính document.images là một mảng, nó có các thuộc tính tự của đối tượng mảng
Jscritp như thuộc tính length. Ví dụ, nếu chúng ta muôn biết có bao nhiêu ảnh ở trong trang,
chúng ta có thể sử dụng document.images.length.
<html>
<body>
<img name=img1 src="" border=0 width=200 height=150>
<script language="JavaScript" type="text/JavaScript">
var myImages = new Array("usa.gif","canada.gif","jamaica.gif","mexico.gif");
var imgIndex = prompt("Enter a number from 0 to 3","");
document.images["img1"].src = myImages[imgIndex];
</script>
</body>
</html>
c.Mảng links

73
Đối với mỗi thẻ hyperlink <A> định nghĩa với thuộc tính href, trình duyệt tạo ra một đối
tượng A. Thuộc tính quan trọng nhất của đối tượng A đó là href, tương ứng với thuộc tính của
thẻ. Sử dụng thuộc tính này, chúng ta có thể tim các điểm liên kết ở đâu và có thể thay đổi
điều này thập chi sau khi trang đó được nạp
Tập hợp các đối tượng trong trang chứa bên trong mảng links[], tương tư như đối tương img
trong mảng images[]
d. Code kết nối tới các sự kiện trang Web
Các sự kiện xuất hiện khi có một hành động nào xảy ra. Ví dụ như người sử dụng bâm vào
trang, siêu liên kết hoặc di chuyển con trỏ tới một dòng text nào đó gây ra các sự kiện.
e. Xử lý các sự kiện như các thuộc tính:
<html>
<body>
<A href="somepage.htm" name="linkSomePage">
Click Me
</A>
</body>
</html>

<A href="somepage.htm" name="linkSomePage" onclick="alert('You Clicked?')">


Click Me
</A>

<html>
<body>
<script language="JavaScript">
function linkSomePage_onclick()
{
alert('You Clicked?');
return true;
}
</script>
<A href="somepage.htm" name="linkSomePage"
onclick="return linkSomePage_onclick()">
Click Me
</A>
</body>
</html>
Một vài sự kiện không liên kết trực tiếp tới hành động của người sử dụng. Ví dụ, đối tượng
window có sự kiện load, xảy ra khi trang được nào và một sử dụ unload xảy ra khi trang
unload (có thể chuyển tới một trang khác hoặc trình duyệt bị đóng lại). Các sự kiện này nằm
trong tag <body>.
<body language=JavaScript onload="myOnLoadfunction()"
onunload="myOnUnloadFunction()">

f. Xử lý các sự kiện như các thuộc tính


Theo cách thức kết nối tới các sự kiện, chúng ta cần phải định nghĩa hàm sẽ được thực hiện
khi sự kiện xuất hiện. Sau đó, thiết lập thuộc tính xử lý xự kiển của đối tượng đến hàm đã địn
nghĩa.

74
Ví dụ minh họa:
<html>
<body>
<script language="JavaScript">
function linkSomePage_onclick()
{
alert('This link is going nowhere');
return false;
}
</script>
<A href="somepage.htm" name="linkSomePage">
Click Me
</A><P>
<A href="otherpage.htm" name="linkOtherPage">
Click Me
</A><p>
<script language="JavaScript" type="text/JavaScript">
window.document.links[0].onclick = linkSomePage_onclick;
</script>
</body>
</html>
Hiển thị ảnh ngẫu nhiên khi một trang được nạp
<html>
<head>
<script language="JavaScript">
var myImages = new Array("usa.gif","canada.gif","jamaica.gif","mexico.gif");
function changeImg(imgNumber)
{
var imgClicked = document.images[imgNumber];
var newImgNumber = Math.round(Math.random() * 3);
while (imgClicked.src.indexOf(myImages[newImgNumber]) != -1)
{
newImgNumber = Math.round(Math.random() * 3);
}
imgClicked.src = myImages[newImgNumber];
return false;
}
</script>
</head>
<body>
<A href="" name="linkImg1" onclick="return changeImg(0)">
<img name=img0 SRC="usa.gif" border=0 >
</A>
<A href="" name="linkImg2" onclick="return changeImg(1)">
<img name="img0" SRC="mexico.gif" border="0" >
</A>
</body>
</html>

4.2.7. HTML Forms

75
Các Form cung cấp cách thức nhóm các phần tử tương tác HTML với nhau với cùng một mục
đích. Ví dụ, một form chứa các phần tử cho phép người sử dụng nhập dữ liệu ví dụ như đăng
kí hòm thư miễn phí.
Cú pháp:
<form các thuộc tính >
Các thẻ (các điều khiển như input, button)
</form>

Thuộc tính Giá trị Miêu tả DTD


action URL Một URL định nghĩa nơi gửi dữ liệu khi mà phím STF
submit được bấm

Các thuộc tính lựa chọn

Thuộc tính Giá trị Miêu tả DTD


accept Hiển thị kiểu nội dung STF
accept-charset charset_list Danh sách tách biệt dấu “,” của tập kí tự từ STF
dữ liệu form. Giá trị mặc định là "unknown"
enctype mimetype Kiểu mime sử dụng mã hóa nội dung của STF
form
method get Phương thức HTTP gửi dữ liệu đển URL STF
post hoạt động. Mặc định là get
method="get": Phương thức này gửi nội
dung form trong URL: URL?
name=value&name=value. Chú ý: nếu giá
trị form không phải là kí tự ASSCII hoặc
vượt quá 100 kí tự, cần phải dùng
method="post".
method="post": PHương thức này gửi nội
dụng trong phần body của yêu cầu. Chú ý:
hầu hết các trình duyệt không để đánh dấu
các yêu cầu post
name form_name Xác định tên duy nhất của form TF
target _blank Đích mở URL. TF
_self _blank – mở URL trong cửa sổ mới
_parent _self – mở URL ngay trong cùng frame
_top _parent – mở trong frameset cha
_top – mở trong body của cửa sổ

Các thuộc tính chuẩn

id, class, title, style, dir, lang, xml:lang

Ví dụ:
<form name="myForm">
</form>
Mảng các form

76
<html>
<head>
<script language="JavaScript" type="text/javascript">
function window_onload()
{

var numberForms = document.forms.length;


var formIndex;
for (formIndex = 0; formIndex < numberForms; formIndex++)
{
alert(document.forms[formIndex].name);
}
}
</script>
</head>
<body language=JavaScript type="text/javascript" onload="window_onload()">

<form name="form1">
<p>This is inside form1</p>
</form>
<form name="form2">
<p>This is inside form2</p>
</form>
<form name="form3">
<p>This is inside form3</p>
</form>
</body>
</html>
Các thuộc tính và phương thức khác của form
Có thể truy cập vào các điều khiển trong form bằng thuộc tính elements[] của đối tượng form.
Mảng này giống như thuộc tính mảng forms[] của đối tượng document. Mảng elements[] chúa
tất cả các đối tượng tương ứng với các phần tử tương tác HTML bên trong form, ngoại trừ sự
kiện <input type=image>.
Các thuộc tính rất có ích cho việc lặp các phần tử trong mẫu. Ví dụ, có thể lập mỗi phần tử để
kiểm tra tính hiệu lức của dữ liệu nhấp vào trước khi gửi đi.
Thuộc tính elements[] của đối tượng có thuộc tính length cho phép biết được có bao nhiều
phần tử trong form. Đối tượng form cũng có thuộc tính length cho phép biết được số các phần
tử trong form. document.myForm.length tương đương document.myForm.elements.length.
Khi submit dữ liêu tới server, chúng ta thường sử dụng button submit, tuy nhiên đối tượng
Form có một method submit(), thực hiện gần giống như phím submit. Sự khác nhau đó là xử
lý sự kiện onsubmit không được gọi khi sử dụng phương thức submit() của đối tượng
method()
Các phân tử HTML trong Form
Hầu hết các phần tử được tạo ra đều sử dụng tag <input>. Một trong thuộc tính quan trọng của
input đó là thuộc tính type. Thuộc tính này xác định phần từ sẽ là gì.
Các phương thức và thuộc tính chung

77
Thuộc tính name: sử dụng giá trị thuộc tính này để tham chiếu tới phân tử trong script.
Thuộc tính value: trả về giá trị của phần tử.
Thuộc tính form: trả về giá trị của form mà phần tử nằm bên trong.
Thuộc tính type: trả về thuộc tính của phần tử
Phương thức focus() và blur(): Nếu có một phẩn tử được focus, bất kì gõ phím bất kỳ sẽ được
gửi tới phần tử này. Trong trường hợp focus vào phím nếu gõ phím enter tương đương với xử
lý sự kiện onclick.
Người sử dụng có thể thiết lập focus bằng cách sử dụng click vào hoặc sử dụng phím tab để
lựa chọn. Tuy nhiên, người lập trình có thể quyết định phần tử nào được focus bằng cách sử
dụng phương thức focus() của đối tượng element. Ví dụ, nếu chúng ta có một text box cho
người sử dụng đưa vào tuổi. Trong trường hợp người sử dụng đưa vào giá trị là kí tự, chúng ta
có thể yêu cầu nhập lại. Phương thức blur() đối ngược với phương thức focus().
Đối với các phương thức focus() và blur(), tất cả các đối tượng của phần tử có xử lý sự kiện
onfocus và onblur.
Các phần tử Button
Cú pháp <input type=””, ….>
<input type="button" name="myButton" value="Click Me">

<html>
<head>
<script language=JavaScript>
var numberOfClicks = 0;
function myButton_onclick()
{
numberOfClicks++;
window.document.form1.myButton.value = 'Button clicked ' + numberOfClicks +
' times';
}
</script>
</head>
<body>
<form name=form1>
<input type='button' name='myButton' value='Button clicked 0 times'
onclick="myButton_onclick()">
</form>
</body>
</html>
onmouseup và onmousedown
<html>
<head>
<script language=JavaScript>
function myButton_onmouseup()
{
document.form1.myButton.value = "Mouse Goes Up"
}
function myButton_onmousedown()
78
{

document.form1.myButton.value = "Mouse Goes Down"


}
</script>
</head>
<body>
<form name=form1>
<input type='button' name='myButton' value=' Mouse Goes Up '
onmouseup="myButton_onmouseup()"
onmousedown="myButton_onmousedown()">
</form>
</body>
</html>
Các phím Submit và Reset
<input type="submit" value="Submit" name="submit1">
<input type="reset" value="Reset" name="reset1">
Khi click vào phím submit, dữ liệu từ form mà phím nằm cùng sẽ tự động gửi tới sever, mà
không cần bắt kỳ một script nào cả. Tương tự cũng như vậy khi click vào phím reset, tất cả
các phần tử trong form sẽ bị xóa bỏ và hiển thị giá trị mặc định. Phím submit và reset tương
đương với đối tượng Submit và Reset, có thuộc tính, phương thức, và sự kiện giống như đối
tượng Button
Phần tử Text
Cú pháp <input type=”text” ….>
<input type="text" name="myTextBox" size=10 maxlength=15 value="Hello World">
Phương thức select(), parseINt() hoặc parseFloat() hoặc Number()
Sự kiện của object Text: onchange, onselect, onkeydown, onkeypress, và onkeyup
<input type="text" name=txtReadonly value="Look but don't change"
onfocus="window.document.form1.txtReadonly.blur()"
READONLY=true>

Ví dụ form đơn giản kiểm tra dữ liệu đầu vào


<html>
<head>
<script language=JavaScript>
function butCheckForm_onclick()
{
var myForm = document.form1;
if (myForm.txtAge.value == "" || myForm.txtName.value == "")
{
alert("Please complete all the form");
if (myForm.txtName.value == "")
{
myForm.txtName.focus();
}
else
{
myForm.txtAge.focus();
}

79
}
else
{
alert("Thanks for completing the form " + myForm.txtName.value);
}
}
function txtAge_onblur()
{
var txtAge = document.form1.txtAge;
if (isNaN(txtAge.value) == true)
{
alert("Please enter a valid age");
txtAge.focus();
txtAge.select();
}
}
function txtName_onchange()
{
window.status = "Hi " + document.form1.txtName.value;
}
</script>
</head>
<body>
<form name=form1>
Please enter the following details:
<p>
Name:
<br>
<input type="text" name=txtName onchange="txtName_onchange()">
<br>
Age:
<br>
<input type="text" name=txtAge onblur="txtAge_onblur()" size=3 maxlength=3>
<br>
<input type="button" value="Check Details" name=butCheckForm
onclick="butCheckForm_onclick()">
</form>
</body>
</html>
Hộp text mậtkhẩu

<input name=password1 type=password>


Hộp text ẩn
<input type="hidden" name=myHiddenElement>
Phần tử textarea
<textarea name=myTextArea cols=40 rows=20>Hello World
Line 2
</textarea>
Theo dõi dự kiện

80
Để trơ giúp minh họa các sự kiện như phím lên, xuống, bấm phím bất kì.. làm việc như thế
nào, ví dụ dưới đây minh họa điều đó
<html>
<head>
<script language=JavaScript>
function DisplayEvent(eventName)
{
var myMessage = window.document.form1.textarea2.value;
myMessage = myMessage + eventName;
window.document.form1.textarea2.value = myMessage;
}
</script>
</head>

<body>
<form name=form1>
<textarea rows=15 cols=40 name=textarea1
onchange="DisplayEvent('onchange\n');"
onkeydown="DisplayEvent('onkeydown\n');"
onkeypress="DisplayEvent('onkeypress\n');"
onkeyup="DisplayEvent('onkeyup\n\n');"></textarea>
<textarea rows=15 cols=40 name=textarea2></textarea>
<br><br>
<input type="button" value="Clear Event TextArea"
name=button1 onclick="window.document.form1.textarea2.value=''">
</form>
</body>
</html>
Checkboxes và Phím Radio
<input type="checkbox" name=chkDVD checked value="DVD">

<input type="radio" name=radCPUSpeed checked value="1 GHz">


For example, to create a group of three radio buttons, our HTML would be
<input type="radio" name=radCPUSpeed checked value="800 MHz">
<input type="radio" name=radCPUSpeed value="1 GHz">
<input type="radio" name=radCPUSpeed value="1.5 GHz">
Ví dụ:
<html>
<head>
<script language=JavaScript>
var radCpuSpeedIndex = 0;

function radCPUSpeed_onclick(radIndex)
{
var returnValue = true;
if (radIndex == 1)
{
returnValue = false;
alert("Sorry that processor speed is currently unavailable");
// Next line works around a bug in IE that doesn't cancel the

81
// Default action properly
document.form1.radCPUSpeed[radCpuSpeedIndex].checked = true;
}
else
{
radCpuSpeedIndex = radIndex;
}
return returnValue;
}
function butCheck_onclick()
{
var controlIndex;
var element;
var numberOfControls = document.form1.length;
var compSpec = "Your chosen processor speed is ";
compSpec = compSpec + document.form1.radCPUSpeed[radCpuSpeedIndex].value;
compSpec = compSpec + "\nWith the following additional components\n";
for (controlIndex = 0; controlIndex < numberOfControls; controlIndex++)
{
element = document.form1[controlIndex];
if (element.type == "checkbox")
{
if (element.checked == true)
{
compSpec = compSpec + element.value + "\n";
}
}
}
alert(compSpec);
}
</script>
</head>
<body>
<form name=form1>
<p> Tick all of the components you want included on your computer <br><br>
<table> <tr>
<td>DVD-ROM</td>
<td><input type="checkbox" name="chkDVD" value="DVD-ROM"></td>
</tr> <tr>
<td>CD-ROM</td>
<td><input type="checkbox" name="chkCD" value="CD-ROM"></td>
</tr> <tr>
<td>Zip Drive</td>

<td><input type="checkbox" name="chkZip" value="ZIP Drive"></td>


</tr>
</table>
<p>
Select the processor speed you require <table>
<tr>
<td><input type="radio" name="radCPUSpeed" checked
onclick="return radCPUSpeed_onclick(0)" value="3.8 GHz"></td>

82
<td>3.8 GHz</td> <td><input type="radio" name="radCPUSpeed"
onclick="return radCPUSpeed_onclick(1)" value="4.8 GHz"></td>
<td>4.8 GHz</td>
<td><input type="radio" name="radCPUSpeed"
onclick="return radCPUSpeed_onclick(2)" value="6 Ghz"></td>
<td>6 GHz</td> </tr>
</table>
</p> <input type="button" value="Check Form" name="butCheck"
onclick="return butCheck_onclick()">
</form>
</body>
</html>
Phần tử select
<select> and </select> tags.
<select name=theDay size=5>
<option value=0 selected>Monday
<option value=1>Tuesday
<option value=2>Wednesday
<option value=3>Thursday
<option value=4>Friday
<option value=5>Saturday
<option value=6>Sunday
</select>
Thẻ <option> Monday chứa từ được lựa chọn, tạo ra lựa chọn mặc định khi trang được nạp.
Giá trị của các option được định nghĩa bởi số.
Nếu muốn tạo thành hộp danh sách rơi xuống, chúng ta cần thay đổi thuộc tính size trong thẻ
<select> thành 1: <select name=theDay size=5>
Nếu muốn người dùng lựa chọn nhiều hơn một giá trị trong danh sách tại một thời điểm, cần
bổ sung thêm thuộc tính multiple.
Thẻ <select> tạo ra đối tượng Select. Đối tượng này có thuộc tính mảng options[], và mảng
này tao ra các đối tượng Option, mỗi một phần tử <option> trong phần tử <select> kết hợp
với đối tượng Select. Ví dụ: ở ví dụ trước, nếu phần tử <select> chứ trong form (tên form là
theform) thì:
Document.theform.theday.options[0] tham chiếu tới giá trị đầu tiên (Monday)
Đối tượng Option có index, text và thuộc tính giá trị. Thuộc tính index trả về vị trị của option
trong mảng options[]. Thuộc tinh text được hiển thị trong danh sách, còn thuộc tính value xác
định giá trị cho option.
Ví dụ
var theDayElement = window.document.form1.theDay;
document.write("There are " + theDayElement.length + "options<br>");
var optionCounter;
for (optionCounter = 0; optionCounter < theDayElement.length; optionCounter++)
{
document.write("Option text is " + theDayElement.options[optionCounter].text)

document.write(" and its value is ");

83
document.write(theDayElement.options[optionCounter].value);
document.write("<br>")
}
Bố sung mới option
- Tạo ra đối tượng mới Option
- Bổ sung vào mảng options[] phần tủ option
var myNewOption = new Option("TheText","TheValue");
document.theForm.theSelectObject.options[0] = myNewOption;
Loại bỏ option: gán bằng giá trị null
document.theForm.theSelectObject.options[0] = null;
Ví dụ
<html>
<head>
<script language=JavaScript>
function butRemoveWed_onclick()
{
if (document.form1.theDay.options[2].text == "Wednesday")
{
document.form1.theDay.options[2] = null;
}
else
{
alert('There is no Wednesday here!');
}
}
function butAddWed_onclick()
{
if (document.form1.theDay.options[2].text != "Wednesday")
{
var indexCounter;
var days = document.form1.theDay;
var lastoption = new Option();
days.options[6] = lastoption;
for (indexCounter = 6;indexCounter > 2; indexCounter--)
{
days.options[indexCounter].text = days.options[indexCounter - 1].text;
days.options[indexCounter].value = days.options[indexCounter - 1].value;
}
var option = new Option("Wednesday",2);
days.options[2] = option;
}
else
{
alert('Do you want to have TWO Wednesdays?????');
}
}
</script>
</head>
<body>
<form name=form1>

84
<select name=theDay size=5>
<option value=0 selected>Monday
<option value=1>Tuesday
<option value=2>Wednesday
<option value=3>Thursday
<option value=4>Friday
<option value=5>Saturday
<option value=6>Sunday
</select>
<br>
<input type="button" value="Remove Wednesday" name=butRemoveWed
onclick="butRemoveWed_onclick()">
<input type="button" value="Add Wednesday" name=butAddWed
onclick="butAddWed_onclick()">
<br>
</form>
</body>
</html>
Bổ sung Option mới trong IE
Trong IE< có rất nhiều thuộc tính bổ sung, phương thức và sự kiện được kết hợp với đối
tượng. Mảng options[] có phương thức add() và remove() cho phép bổ sung và loại bỏ option.
Trước khi bổ sung, cần phải tạo trước bằng cách sử dụng toán tử new
PHương thức add() có 2 tham số: giá trị và thứ tự
Ví dụ
function butAddWed_onclick()
{
if (document.form1.theDay.options[2].text != "Wednesday")
{
var option = new Option("Wednesday",2);
document.form1.theDay.options.add(option,2);
}
else
{
alert('Do you want to have TWO Wednesdays?????');
}
}
Ví dụ sử dụng phương thức remove()
function butRemoveWed_onclick()
{
if (document.form1.theDay.options[2].text == "Wednesday")
{
document.form1.theDay.options.remove(2);
}
else
{
alert('There is no Wednesday here!');
}
}
Các sự kiện phần tử lựa chọn

85
Các phần tử lựa Select có 3 sự kiện: onblur, onfocus và onchange.
Ví dụ
<html>
<head>
<script language=JavaScript>
function writeOptions(startNumber, endNumber)
{
var optionCounter;
for (optionCounter = startNumber; optionCounter <= endNumber; optionCounter++)
{
document.write('<option value=' + optionCounter + '>' + optionCounter);
}
}
function writeMonthOptions()
{
var theMonth;
var monthCounter;
var theDate = new Date(1);
for (monthCounter = 0; monthCounter < 12; monthCounter++)
{
theDate.setMonth(monthCounter);
theMonth = theDate.toString();
theMonth = theMonth.substr(4,3);
document.write('<option value=' + theMonth + '>' + theMonth);
}
}
function recalcDateDiff()
{
var myForm = document.form1;
var firstDay = myForm.firstDay.options[myForm.firstDay.selectedIndex].value;
var secondDay =
myForm.secondDay.options[myForm.secondDay.selectedIndex].value;
var firstMonth =
myForm.firstMonth.options[myForm.firstMonth.selectedIndex].value;
var secondMonth =
myForm.secondMonth.options[myForm.secondMonth.selectedIndex].value;
var firstYear =
myForm.firstYear.options[myForm.firstYear.selectedIndex].value;
var secondYear =
myForm.secondYear.options[myForm.secondYear.selectedIndex].value;
var firstDate = new Date(firstDay + " " + firstMonth + " " + firstYear);
var secondDate = new Date(secondDay + " " + secondMonth + " " + secondYear);
var daysDiff = (secondDate.valueOf() - firstDate.valueOf());
daysDiff = Math.floor(Math.abs((((daysDiff / 1000) / 60) / 60) / 24));
myForm.txtDays.value = daysDiff;
return true;
}
function window_onload()
{
var theForm = document.form1;
var nowDate = new Date();

86
theForm.firstDay.options[nowDate.getDate() - 1].selected = true;
theForm.secondDay.options[nowDate.getDate() - 1].selected = true;
theForm.firstMonth.options[nowDate.getMonth()].selected = true;
theForm.secondMonth.options[nowDate.getMonth()].selected = true;
theForm.firstYear.options[nowDate.getFullYear()- 1970].selected = true;
theForm.secondYear.options[nowDate.getFullYear() - 1970].selected = true;
}
</script>
</head>
<body language=JavaScript onload="return window_onload()">
<form name=form1>
<p>
First Date<br>
<select name=firstDay size=1 onchange="return recalcDateDiff()">
<script language=JavaScript>
writeOptions(1,31);
</script>
</select>
<select name=firstMonth size=1 onchange="return recalcDateDiff()">
<script language=JavaScript>
writeMonthOptions();
</script>
</select>
<select name=firstYear size=1 onchange="return recalcDateDiff()">
<script language=JavaScript>
writeOptions(1970,2010);
</script>
</select>
</p>
<p>
Second Date<br>
<select name=secondDay size=1 onchange="return recalcDateDiff()">
<script language=JavaScript>
writeOptions(1,31);
</script>
</select>
<select name=secondMonth size=1 onchange="return recalcDateDiff()">
<script language=JavaScript>
writeMonthOptions();
</script>
</select>
<select name=secondYear size=1 onchange="return recalcDateDiff()">
<script language=JavaScript>
writeOptions(1970,2010);
</script>
</select>
</p>
Total difference in days
<input type="text" name=txtDays value=0 readonly>
<br>
</form>
</body>

87
</html>

88
Chương V Active Server Pages
5.1.Giới thiệu công nghệ ASP
ASP là công nghệ cho phép tạo ra những trang web động có khả năng giao tiếp với người
dùng bằng cách lập trình script ở trên máy chủ. Mã nguồn của những chương trình này
thường được viết bằng ngôn ngữ VBScript và được nhúng vào các thẻ đặc biệt trong HTML.
Những trang web này sẽ được dịch ở máy chủ và gửi kết quả là những trang HTML thông
thường về phía người dùng.
Công nghệ ASP được gói trọn trong thư viện liên kết động nhỏ (khoảng 300KB) có tên là
ASP.DLL, thư viện này được nằm trong bộ nhớ của server và khi bất kì người sử dụng nào có
yêu cầu đến một file .ASP thì lưới lọc ISAPI này sẽ quản lý phần biên dịch. ASP sẽ nạp tất cả
các DLLs cần thiết vào bộ nhớ, thực thi các mã phía máy chủ có liên quan đến Active Server
Pages và kết quả tạo ra là một trang web dưới hạng HTML. Kết quả này được mãy chủ gửi về
phía trình duyệt của máy khách.

5.2 Cú pháp và thao tác cơ bản


5.2.1. Cách chèn các đoạn mã VBScript vào trong trang web

a. Chèn các đoạn mã


Để các đoạn mã trong file ASP có thể thực hiện được thì các trang web này phải có phần mở
rộng là ASP. Trong trang web có viết các mã ASP thì các đoạn mã phải được đặt giữa cặp kí
hiệu <%đoạn mã ASP ở đây %>. Cặp kí hiệu này là ranh giới của các ActiveX Scripting
Engine biết rằng đoạn mã này cần phải biên dịch và trong phần khai báo đó ta có thể viết các
mã ASP.
* Chương trình ví dụ đầu tiên (Hello world). Soạn thảo chương trình sau và ghi vào thư
mục gốc của web server với tên Hello.ASP

Trong ví dụ trên thì dòng số 6 và dòng số 8 dùng để khai báo bắt đầu và kết thúc đoạn script.
Dòng 7 là nội dung của script.
Lệnh Response.Write("Hello World") để gửi dữ liệu về phía máy trạm. Dòng 7 sẽ gửi tới
browser chữ Hello World.
Kết quả khi duyệt trang web này ở địa chỉ

89
b. Chèn các biểu thức.
Ngoài cách sử dụng các đoạn mã như trên ASP còn cho phép ta chèn giá trị các biểu thức một
cách nhanh chóng bằng cách sử dụng <%=biểu thức%>. Ta có thể xem qua ví dụ sau:

Kết quả:

5.2.2. Chú thích

Chú thích là một phần không thể thiếu trong ngôn ngữ, nó làm cho mã lệnh trở nên dễ đọc đối
với người lập trình. Chú thích trong ASP được đặt sau dấu nháy đơn (') hoặc sau chuỗi Rem.
Ví dụ: ta sẽ thấy hai vị trí chú thích ở dòng 7 và 8

90
5.2.5. Các toán tử

Các toán tử trong VBScript gần giống các toán tử trong ngôn ngữ lập trình Turbo Pascal. Chỉ
có một số toán tử khác biệt được thể hiện trong bảng sau
TOÁN TỬ BIỂU DIỄN VÍ DỤ KẾT QUẢ VÍ DỤ
Mũ ^ 2^3 2*2*2 = 8
Chia lấy phần nguyên \ 8\3 2
Cộng chuỗi & hoặc + "Hello" & "World" "HelloWorld"
Gán giá trị cho biến = a=5 biến a có giá trị 5
Gán giá trị cho biến kiểu Set <biến> = set Conn =
đối tượng <đối tượng> Server.CreateObject
("ADODB.Connection")

5.2.4. Hằng và biến

a. Khai báo hằng


Hằng trong VBScript được định nghĩa sau từ khóa Const. Tương tự như các ngôn ngữ khác ta
chỉ có thể sử dụng giá trị của hằng mà không thể thay đổi giá trị của hằng.
Cú pháp:
Const <TênBiến> = <Giá trị>
Ví dụ dưới đây khai báo hằng ở ba kiểu khác nhau:

b. Khai báo biến


Trong VBScript các biến và hằng đều không cần phải quy định kiểu, kiểu của các biến này là
Variant và nó có thể gán cho bất kì một kiểu nào. Việc khai báo biến bắt đầu bằng từ khóa
Dim. Cú pháp:

91
Dim <tên biến1>, <tên biến 2>,...
Ví dụ:

Chú ý: Việc khai báo biến trong VBScript là không bắt buộc. Nếu ta sử dụng một biến chưa
được khai báo thì coi như biến mới sẽ được tự động tạo mới. Để bắt buộc khai báo biến trước
khi sử dụng ta sử dụng lựa chọn Option Explicit.

c. Khai báo mảng


Để khai báo một biến mảng có ta sử dụng lệnh Dim với cú pháp:
Dim <Tên biến mảng>(n)
Khi đó mảng được khai báo với các phần tử được đánh số từ 0 đến n. Ta có thể truy cập vào
các phần tử của mảng bằng cách: <tên mảng>(chỉ số)
Ví dụ:

Ta cũng có thể khai báo một mảng chưa xác định số phần tử bằng cách bỏ chỉ số n trong khai
báo thông thường. Khi muốn dùng mảng thật sự ta phải khai báo lại bằng lệnh ReDim.
Ví dụ:

5.3. Các câu lệnh


5.3.1. Lệnh rẽ nhánh

a. Lệnh rẽ nhánh dạng khuyết

92
b. Lệnh rẽ nhánh đầy đủ

c. Lệnh rẽ nhánh mở rộng

d. Lệnh Select Case


Dạng 1 Dạng 2

5.3.2. Lệnh lặp xác định

a. Lặp với số lần định trước


Dạng 1:

Dạng 2

Ví dụ
Mã lệnh LAP.ASP Kết quả

93
b. Vòng lặp For Each ... Next (Lặp trong các phần tử của một nhóm)

Mã lệnh LAP1.ASP Kết quả

5.3.3. Vòng lặp không xác định

a. Lệnh While...wend hoặc Do...Loop (Lặp khi điều kiện đúng)

Mã lệnh LAP2.ASP Kết quả

94
b. Lệnh Do Until (Thực hiện cho đến khi điều kiện đúng)

Mã lệnh LAP3.ASP Kết quả

c. Lệnh lặp Do...Loop While/Until (Thực hiện lệnh trước khi kiểm tra điều kiện)

95
5.4 Hàm và thủ tục
5.4.1. Hàm

a. Định nghĩa một hàm:

- Public hoặc Private: Kiểu của hàm có thể loại bỏ nếu không cần thiết.
- Exit Funtion: Thoát khỏi hàm mà không thực hiện tiếp phần sau của lệnh này.
- Các tham số nếu có phải được đặt cách nhau bởi dấu phảy (,) và không khai báo kiểu. Khi
gọi hàm các tham số này phải được truyền vào đủ số lượng và theo đúng thứ tự đã khai báo.
- Trả về giá trị cho hàm bằng cách: <tên hàm> = <giá trị>

b. Gọi một hàm đã được định nghĩa:


Cú pháp
<tên hàm>[(Các tham số nếu có)]
Hoặc Call <tên hàm>[(Các tham số nếu có)]
Ta có thể gán giá trị một hàm cho một biến bằng cách
<Tên biến> = <Tên hàm>[(Các tham số nếu có)]

5.4.2. Thủ tục

a. Định nghĩa thủ tục:

- Public hoặc Private: Kiểu của thủ tục có thể loại bỏ nếu không cần thiết.
- Exit Sub: Thoát khỏi thủ tục mà không thực hiện tiếp phần sau của lệnh này.
- Các tham số nếu có phải được đặt cách nhau bởi dấu phảy (,) và không khai báo kiểu.
Khi gọi thủ tục các tham số này phải được truyền vào đủ số lượng và theo đúng thứ tự
đã khai báo.

b. Gọi một thủ tục đã được định nghĩa:


Cú pháp
<tên thủ tục>[(Các tham số nếu có)]
hoặc
Call <tên thủ tục>[(Các tham số nếu có)]

5.4.3. Ví dụ sử dụng hàm và thủ tục (Giaỉ phương trình bậc 2 một ẩn số)

Chương trình ví dụ: PTBac2.ASP


96
Kết quả khi duyệt trang web này với a=1, b=2, c=1

5.4.2. MỘT SỐ HÀM THƯỜNG DÙNG TRONG VBSCRIPT

HÀM CHỨC NĂNG VÍ DỤ KẾT QUẢ

HÀM TOÁN HỌC


Abs(x) |x| Abs(-1) 1

97
Sqr(x) x Sqr(4) 2
HÀM CHUYỂN ĐỔI KIỂU
CBool(Biến) Chuyển kiểu biến thành kiểu
bool
CByte(Biến) Chuyển kiểu biến thành kiểu
byte
CCur(Biến) Chuyển kiểu biến thành kiểu
Currency
CDate(Biến) Chuyển kiểu biến thành kiểu
ngày tháng
CInt(Biến) Chuyển kiểu biến thành kiểu
nguyên
CStr(Biến) Chuyển kiểu biến thành kiểu
chuỗi
HÀM THỜI GIAN
Date() Ngày tháng năm hiện tại
Now() Thời điểm hiện tại
Second(BTthời gian) Lấy giây của BTThờiGian
Minute(BTthời gian) Lấy phút của BTThờiGian
Hour(BT thời gian) Lấy giờ của BTThờiGian
Day(BT thời gian) Lấy ngày của BTThờiGian
WeekDay((BTThờiGian) Ngày trong tuần của
BTThờiGian
Month(BTThờiGian) Lấy tháng của BTThờiGian
Year(BT thời gian) Lấy năm của BTThờiGian
WeekDayName(n) Tên của ngày thứ n trong tuần WeekDayName(2) Monday
MonthName(n) Tên của tháng thứ n trong năm MonthName(6) June
HÀM KIỂM TRA
IsDate(Biểu thức) Có phải là biểu thức ngày
không
IsEmpty(Biểu thức) Biểu thức có rỗng không? BT
rỗng là BT chưa chứa giá trị
IsNull(Biểu thức) Biểu thức có giá trị là NULL
không?
IsNumeric(Biểuthức) Biểu thức có là số không
IsObject(Biểu thức) Biểu thức có là đối tượng
không?
HÀM XỬ LÝ CHUỖI
LCase(Chuỗi) Chuyển chuỗi thành chữ LCase("heLLo") "hello"
thường
UCase(Chuỗi) Chuyển chuỗi thành chữ hoa UCase("heLLo") "HELLO"
Left(Chuỗi, n) Lấy n kí tự bên trái chuỗi Left("heLLo",2) "he"
Right(Chuỗi, n) Lấy n kí tự bên phải chuỗi Right("heLLo",2) "Lo"
Len(Chuỗi) Độ dài của chuỗi Len ("heLLo",2) 5
LTrim(Chuỗi) Cắt hết kí tự trắng bên trái LTrim(" heLLo ") "heLLo "
chuỗi
RTrim(Chuỗi) Cắt hết kí tự trắng bên phải RTrim(" heLLo ") " heLLo"
chuỗi
Trim(Chuỗi) Cắt hết kí tự trắng hai đầu Trim(" heLLo ") "heLLo"
chuỗi
MỘT SỐ HÀM KHÁC
Asc(kí tự) Mã kí tự ASCII của biến ASC("A") 65
98
Chr(n) Kí tự có mã ASCII là n Chr(65) "A"

5.4.3. ĐOẠN MÃ DÙNG CHUNG

Khi tiến hành xây dụng chương trình ở nhiều trang khác nhau, để tránh phải gõ lại, cập
nhật khi có thay đổi các đoạn mã trong mỗi trang người ta có thể sử dụng lại các đoạn mã ở
các trang khác để chèn vào trang hiện thời.
Cú pháp:
<!-- INCLUDE FILE="tên file" -->
hoặc
<!-- INCLUDE VIRTUAL="tên file" -->
Nếu sử dụng INCLUDE VIRTUAL thì thư mục chứa file cần chèn vào phải là
một thư mục ảo trên server và phần mở rộng của file phải là .INC, còn nếu dùng
INCLUDE FILE thì phải chỉ ra đường dẫn vật lý của file cần chèn.

99
5.5. Tệp cấu hình GLOBAL.ASA
Global.asa là một file được đặt trong thư mục gốc của một ứng dụng web, nó là file
được thực thi chỉ một lần đầu tiên vào lúc trình duyệt đầu tiên phát yêu cầu đến ứng dụng
web. Lúc này Global.asa được web server tìm trên thư mục gốc của ứng dụng và thực thi nó.
File này thường được dùng để nạp các cấu hình cần thiết, khai báo đối tượng và đặt các thủ
tục đáp ứng sự kiện.

5.5.1. Các sự kiện

a. Sự kiện Application_OnStart
Sự kiện Application_OnStart phát sinh khi người dùng đầu tiên gửi yêu cầu đến ứng
dụng web. Application_OnStart chỉ xảy ra một lần đối với người đầu tiên. Muốn sự kiện này
xảy ra lại chỉ có cách khởi động lại IIS.
Viết lệnh đáp ứng sự kiện này thường dùng để khởi tạo giá trị các biến ở mức toàn cục
và hiệu lực với mọi người dùng chẳng hạn như: số người ghé thăm trang web, đường dẫn đến
CSDL,...

b. Sự kiện Session_OnStart
Phát sinh khi người dùng yêu cầu trang đầu tiên trong ứng dụng từ trình duyệt. Ta sử
dụng sự kiện này để khởi tạo các gía trị biến, các đối tượng cần thiết.
Sự kiện này có thể xảy ra nhiều lần với mỗi người dùng

c. Sự kiện Session_OnEnd
Sự kiện này phát sinh khi phiên làm việc của người dùng chấm dứt nghĩa là nó hết hạn
hoặc người dùng đóng cửa sổ trình duyệt lại.
Trong sự kiện này ta thường viết các thủ tục để xóa các biến nhớ hoặc có thể lưu lại các
trạng thái thông tin nếu cần.
Tương tự như sự kiện Session_OnStart, sự kiện Session_OnEnd cũng có thể xảy ra
nhiều lần với mỗi người dùng.

d. Sự kiện Applicaton_OnEnd
Sự kiện này phát sinh khi ứng dụng ASP được tải xuống bằng MMC (Microsoft
Management Console), hoặc khi ứng dụng bị ngừng một cách vô thức bởi một lý do nào đó
(dịch vụ web bị ngừng trên web server)
Tương tự như Application_OnStart, Application_OnEnd chỉ phát sinh một lần duy nhất,
các mã lệnh được viết để xử lý sự kiện này sẽ được gọi sau cùng. Ta thường dùng sự kiện này
để lưu lại các giá trị cần thiết ngay trước khi dịch vụ web ngừng làm việc.

5.5.2. Khai báo đối tượng

File cấu hình Global.asa là nơi duy nhất ta có thể khai báo các đối tượng COM bằng cặp
thẻ <OBJECT>...</OBJECT>
Cú pháp

100
Nếu ta sử dụng trình soạn thảo VisualInterDev trong bộ VisualStudio thì việc thêm các
đối tượng vào Global.asa rất đơn giản, thao tác còn lại chỉ là kéo-thả. Ta cần lưu ý rằng các
đoạn mã trên không đặt trong <%...%>
- Scope là phạm vi của biến: là Application hoặc Session
- ID: Tên ta đặt cho đối tượng
- ProgID hoặc ClassID là định danh của đối tượng COM ta muốn chèn.
Ví dụ về chèn một đối tượng

5.5.3. Một file cấu hình Global.asa đơn giản

5.5.2. TẬP HỢP (COLLECTION) TRONG ASP

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ó.

101
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


Thuộc tính này trả về tổng số phần tử trong một tập hợp.

102
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 đó.
FORMGET.HTM

103
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.
FORMPOST.HTM

104
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

105
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.

106
Để đư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

- Kết quả PTBAC2.HTM

107
- 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.

108
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
- Trang LOGIN.HTM:

109
- Kết quả:

- Trang LOGIN.ASP

5.7.4. Đối tượng APPLICATION

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.
110
* 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

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


Thông thường, ta nên sử dụng phối hợp Lock và UnLock như sau

111
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
và các Session với từng người sử dụng là khác nhau.

5.7.5.2. Các thuộc tính

a. SessionID
SessionID trả lại số định danh của Session. Số này là duy nhất cho mỗi Session. Ta có
thể xem qua ví dụ sau:

112
Kết quả

Nếu ta mở một cửa sổ trình duyệt mới rồi mở trang này ta sẽ nhận được một SessionID
mới.

b. CodePage
Thiết đặt trang mã để hiển thị các nội dung động trong script hiện thời.

c. TimeOut
Thiết đặt thời gian hết hạn của một Session (đơn vị thời gian được tính là phút) mặc
định là 20 phút.
Cú pháp: Session.TimeOut = <số phút>.

5.7.5.4. Các phương thức


Phương thức trực tiếp trong đối tượng Session là phương thức Abandon.
Chức năng: hủy bỏ toàn bộ các đối tượng trong đối tượng Session giải phóng bộ nhớ
cho web server. Chỉ có phiên làm việc nào thực hiện Abandon thì dữ liệu về phiên làm việc
ấy mới bị giải phóng, các phiên làm việc khác giữ nguyên.

5.7.5.5. Các sự kiện


Đối tượng Session có hai sự kiện đó là
+ Session_OnStart
+ Session_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.5.6. Ví dụ
Trong ví dụ ở mục 2 bài 4 về Login.Asp sẽ xảy ra trường hợp người dùng biết được địa
chỉ của trang default.asp và gõ thẳng địa chỉ trang này vào cửa sổ trình duyệt khi đó form
login sẽ bị bỏ qua. Ta sẽ kiểm soát vấn đề này bằng biến Session như sau
File LOGIN.ASP

113
Phần đầu File DEFAULT.ASP

5.7.6. ĐỐI TƯỢNG SERVER

Đối tượng Server cung cấp một vài chức năng hỗn hợp mà chúng ta có thể sử dụng
trong các ứng dụng ASP. Mặc dù hầu hết các chức năng của đối tượng này đều khó hiểu và ít
khi được sử dụng nhưng có một phương thức CreateObject và thuộc tính ScriptTimeOut của
đối tượng Server là vô giá. Chúng ta sẽ sử dụng các phương thức và thuộc tính này trong
script của mình.
Đối tượng Server như tên của nó ngụ ý như đại diện cho chính máy phục vụ web và
nhiều chức năng mà nó cung cấp hoàn toàn là chức năng của bản thân máy phục vụ web sử
dụng khi xử lý các yêu cầu từ máy khách và trả lời từ máy phục vụ.

5.7.6.1. Thuộc tính ScriptTimeOut


Chức năng: Khoảng thời gian tối đa cho phép một script chạy trên Server.
Cú pháp: Server.ScriptTimeOut = <Khoảng thời gian>
Khoảng thời gian được tính bằng giây, giá trị mặc định là 90 và đây cũng chính là
khoảng thời gian tối thiểu.
Ví dụ:
Server.ScriptTimeOut = 120

5.7.6.2. Các phương thức

a. Phương thức CreateObject


Chức năng: Tạo ra một đối tượng hoạt động trên Server.
Cú pháp: Server.CreateObject(ProgID)
Trong đó ProgID là định danh của mỗi đối tượng
Chú ý: Khi gán một biến cho một đối tượng ta cần phải dùng từ khóa Set
Ví dụ:

114
b. Phương thức HTMLEncode
Chức năng: Mã hóa kí tự. Do trong ASP có một vài kí tự có ý nghĩa đặc biệy như <, >, ',
", &,... do đó trong HTML cũng như ASP muốn sử dụng các kí tự này phải mã hóa chúng.
Ngoài ra, một số ngôn ngữ ngoài sử dụng các kí tự cơ bản còn sử dụng thêm một số bộ kí tự
mở rộng như tiếng Việt, Pháp,... Các kí tự này phải được mã hóa trong các trang HTML, ASP
thì các chương trình mới có thể hiển thị đúng đắn. Việc mã hóa này được thực hiện bởi
HTMLEncode do Server cung cấp.
Ví dụ:
HTMLENCO.ASP

Kết quả:

Đoạn mã HTML được tạo ra khi xem nguồn trên trình duyệt:

c. Phương thức MapPath

115
Chức năng: Chuyển đường dẫn logic thành đường dẫn vật lý trên ổ đĩa server. Chức
năng này thường được dùng trong các thao tác truy nhập trực tiếp file.
Cú pháp: Server.MapPath(<đường dẫn logic>)
Ví dụ: nếu ta có file MAPPATH.ASP nằm trên thư mục gốc của web server và đường
dẫn đến thư mục gốc của web server là E:\Inetpub\wwwroot\ thì khi đó
Server.MapPath("MapPath.asp") sẽ là E:\Inetpub\wwwroot\MapPath.asp. Điều đó thể hiện
cụ thể qua chương trình dưới đây:
Mã lệnh MAPPATH.ASP Kết quả

d. Phương thức URLEncode:


Chức năng: Mã hóa các chuỗi URL (Tương tự như HTMLEncode nhưng ở đây là mã
hóa các chuỗi URL).
Cú pháp. Server.URLEncode(url)
Ví dụ: URLENCO.ASP

Kết quả

116
5.8. COOKIES
5.8.1. Khái niệm COOKIES

Cookies là những mẩu thông tin nhỏ được ghi trên các máy trạm. Khả năng tạo Cookies
phụ thuộc vào tính năng của trình duyệt. Cookies được dùng để xác định user.
Nếu sử dụng IE chúng ta có thể xem thấy các files Cookies được ghi trong thư mục tạm
thời của IE, mặc định là C:\WINDOWS\Temporary Internet Files

5.8.2. Thiết lập COOKIES

5.8.2.1. Đặt giá trị cho Cookies


Để đặt giá trị cho Cookies ta sử dụng tạp hợp Cookies của đối tượng Response. Cú pháp
như sau:
Response.Cookies("<Tên Cookie>") = <Giá trị>
Nếu tên Cookie chưa tồn tại thì một tên mới sẽ được tạo ra và lấy giá trị ngược
lại sẽ đổi giá trị của Cookie thành giá trị mới.
Trong các phiên bản web Server cũ, việc viết các Cookies phải được đặt trước bất cứ
một lệnh xuất kết quả ra client nào, trái điều này script sẽ bị lỗi.
Ví dụ:

5.8.2.1. Đặt thời hạn cho cookies


Theo mặc định, các Cookies sẽ hết hạn và tự động xóa khỏi máy trạm khi người dùng
đóng trình duyệt. Nhưng chúng ta có thể chỉ ra ngày tháng hết hạn cho mỗi cookies
Để đặt giờ hết hạn cho Cookies ta sử dụng:
Response.Cookies("<Tên Cookie>").Expires = <Ngày tháng>
Ví dụ:

5.8.3. Lấy giá trị của COOKIES

Để lấy giá trị của Cookies ta sử dụng tập hợp Cookies của đối tượng Request. Cú pháp
như sau:
Request.Cookies("<tên Cookie>")
Ví dụ:

5.8.4. Thư mục COOKIES

Là một nhóm các Cookies có cùng tên nhưng được phân biệt nhau bởi khóa. Sử dụng
khóa cùng Cookies tương tự như sử dụng mảng hai chiều Array[n, m] nhưng n=1 và m≥ 1

117
* Cú pháp:
- Thiết lập: Response.Cookies("<tên Cookie>")(<Tên khóa>) = <Giá trị>
- Đọc: Request.Cookies("<tên Cookie>")(<Tên khóa>)
* Ví dụ thiết lập Cookies

5.8.5. Kiểm tra xem COOKIES có dùng khóa không

Ta có thể kiểm tra xem một Cookie có sử dụng khóa không bằng hàm HasKeys của đối
tượng Cookies với cú pháp như sau

Request.Cookies("<Tên Cookie>").HasKeys
Phương thức này trả ra giá trị true nếu Cookies có dùng khóa và false trong trường hợp
ngược lại.

5.9 Giới thiệu ADO và các kết nối cơ sở dữ liệu


5.9.1 Giới thiệu

ADO là kỹ thuật mới do Microsoft phát triển để làm việc với cơ sở dữ liệu (CSDL), được
dùng để cung cấp các khả năng kết nối và xử lý trên CSDL.
Việc xử dụng ADO để truy xuất và xử lý CSDL trong trang ASP có thể chia làm các bước
chính sau:
• Kết nối với CSDL thông qua OLEDB hoặc ODBC
• Xây dựng truy vấn dữ liệu và yêu cầu thực hiện câu truy vấn để thực hiện thao tác xử
lý trên CSDL
• Xử lý các kết quả trả về từ câu truy vấn
• Ngắt kết nối với CSDL, giải phóng các tài nguyên của hệ thống đã dùng

5.9.2 Kế nối với cơ sở dữ liệu

5.9.2.1 Tạo kết nối thông qua OLEDB và ODBC


Connection String là một chuỗi kí tự được dùng để lưu trữ thông tin về dữ liệu như sau:
• Thông tin về hệ quản trị CSDL
• Thông tin về vị trí đặt CSDL
• Mô hình kết nối CSDL: ADO cho phép thông qua OLEDB hoặc ODBC
Bảng liệt kê kết nối OLEDB và ODBC
Data source OLEDB
Microsoft Access Provider=Microsoft.Jet.OLEDB4.0;Data source = path đến .mdb

118
Microsoft SQL Provider=SQLOLEDB.1;Data source = path đến CSDL trên máy chủ
Data source ODBC
Microsoft Access Driver={Microsoft Access Driver (*.mdb)};DBQ = đường dẫn đến
tệp .mdb
Microsoft SQL Driver={SQL Server.1 };Server= đường dẫn đến CSDL trên server

5.9.2.2 Tạo kết nối thông qua DNS


Có thể xây dựng connection string bằng cách tạo Data source Name (DNS) trong ODBC. Một
DNS chứa các thông tin sau:
• Tên của DNS
• Tệp tin CSDL mà nó trỏ tới
• Con trỏ chỉ đến các driver kết nốivới tệp tin CSDL
• UserID và password để truy xuất data store
• Các thông tin cần thiết khác cho kết nối

5.9.3 Các đối tượng của ADO

ADO có các đối tượng Connection, Conmmand, Recordset, Record, Stream và tập hợp Errors
Fields, Properties, Parameters.
• Đối tượng Connection: cho phép kết nối với CSDL. Nó chứa 3 thông tin
 Cơ sở dữ liệu
 Giao thức (driver/provider) để trao đổi thông tin
 Username và password
• Đối tượng Command: thực hiện các cậu lệnh SQL
• Đối tượng Recordset: Chứa tập hợp các dữ liệu được rút gọn từ CSDL. Cho phép thay
đổi dữ liệu như thêm, xóa, sửa dữ liệu hay di chuyển bản ghi.
• Đối tượng Record: lưu trữ một hàng (bản ghi) trong Recordset, một thư mục hay tập
tin trong File system
• Đối tượng Stream: quản lý dữ liệu dạng nhĩ phân, nó được dùng quản lý dữ liệu
BLOB (Binary Large Object) như hình ảnh hay mảng dữ liệu lớn

5.9.3.1 Đối tượng Connection

5.9.3.1.1 Kết nối CSDL qua đối tượng Connection


Để thiết lập kết nối CSDL, càn thực hiện bược sau:
• Tạo một thực thể và đối tượng Connection từ phía server bằng câu lệnh :
Server.CreateObject(“ADODB.Connection”)

119
• Sử dụng phương thức Open để mở kết nối CSDL. Tham số của phương thức này lấy
từ chuỗi Connection String, chuỗi này tương ứng với CSDL.
Khi cần kết nối cố định cho tất cả các trang ta có thể thiết lập tầm vực cho đối tượng
Connection bằng cách viết các thủ tục sau trong tệp tin global.asa
• Ở mức Application:
• Ở mức Session:

5.9.3.1.2 Thao tác dữ liệu thông qua đối tượng Connection


Đối tượng Connection cung cấp phương thức Execute để thực hiện câu lệnh truy vấn
Cú pháp: objConn.Excute CommandText, RecordAffected, Options
CommandText: câu lệnh SQL, tên bảng hay Stored Procedure
Options: quy định loại CommandText
Hằng Giá trị Loại của CommnadText
adCmdUnknown 0 Mặc định, không xác định loại CommnadText
adCmdText 1 CommandText là câu lệnh SQL
adCmdTable 2 CommandText là tên bảng
adCmdStore 4 CommandText là stored procedure hay câu truy vấn

5.9.3.2 Đối tượng Command


Để thao tác và thay đổi cơ sở dữ liệu bằng Command, thực hiệnc các bước sau:
• Khai báo và khởi tạo thực thể (instance) của đối tượng Command
• Khởi tạo các thuộc tính đối tượng
ActiveConnection Chứa đối tượng Connection đã được khai báo
CommandText Chứa câu lệnh SQL hay tên bảng
CommandType Chứa các thuộc tính qui định cho
CommandText
CommandTimeout THời gian thực hiện câu lệnh, nếu việc thực
hiện vượt thời gian đã định, nó sẽ thông báo
lỗi
Prepard True/False: True cho phép biên dịch trước khi
thực hiện câu lệnh, falsse ngược lại
Execute Thực thi câu lệnh

Giá trị của thuộc tính CommandType


Thuộc tính Mô tả

120
adCmdType Câu lệnh SQL
adCMDTable Tên bảng
adCmdStoreProc Stored Procuedure hay câu truy vấn
adCmdUnknown Giá trị mặc định

5.9.3.3 Xử lý dữ liệu thông qua đối tượng Recordset


Các phương thức của đối tượng Recordset
Phương thức Diễn giải
Addnew Tạo mới Record
Cancel Hủy thao tác đang thực thi
Close Đóng Recordset và đối tượng liên quan
Delete Xóa record hay tập record hiện thời
Find Tìm một record thỏa mãn điều kiện
MoveFirset Đưa vị trị của record hiện hành về record đầu
tiên
MoveLast Đưa vị trị của record hiện hành về record cuối
cùng
MoveNext Đưa vị trị của record hiện hành về record tiếp
theo
MovePrivious Đưa vị trị của record hiện hành về record
trước đó
Open Mở một recordset
Requery Cập nhật lại dữ liệu bằng cách thực hiện lại
cậu lệnh truy vấn ban đầu
Resync Làm tuơi lại dữ liệut rong đối tượng Recorset
hiện thời
Save Lưu Recordset vào tệp
Seek Tìm chỉ mục Recordset
Update Lưu thay đổi
GetRows Lấy nhiều record đưa vào một mảng
GetString Trả về recordset dưới dạng chuỗi

a. Phương thức Open


Cú pháp: objRs.Open Source, Connection, CursorType, Locktype, Options

121
b. Phương thức Addnew: Cho phép tạo một bản ghi mới, gán dữ liệu mới cho các field của
các bản ghi và nó chỉ được cập nhật vào CSDL khi ta gọi phương thức Update hay
Updatebatch
c. Phương thức Update: Phương thức này dùng để cập nhật bản ghi hiện thời trong CSDL
d. Phương thức Delete: phương thức này cho phép xóa bản ghi trong Recordset
Cú pháp: objRs.Delete <tham số>
e. Phương thức Close: Ngắt kết nối với CSDL

5.9.3.3.1 Lưu trữ dữ liệu trả về


ADO sử dụng đối tượng Recordset để lưu trữ kết quả trả về từ câu truy vấn dữ liệu SELEcT.
Vì kết quả trả về của một câu truy vấn SELECT có nhiều bản ghi, cho nên có thể xem
Recordset như mảng các bản ghi
Có 2 cách lấy dữ liệu từ câu truy vấn đặt vào biến Recordset
Thực hiện phương thức Exexute của đối tượng Connection như câu lệnh truy vấn và trả về kết
quả cho Recordset. Ví dụ: Set rs = Conn.Execute(strSQL)
Tạo một thực thể cho đối tượng Recordset và sử dụng phương thức Open, kết hợp với đối
tượng Connection đã tạo.

5.9.3.3.2 Hiển thị dữ liệu trả về


Khi muốn lấy dữ liệu của một trường trong bản ghi hiện hành, lấy chuỗi tên của trường đó
như là đối số cho đối tượng Recordset hay đối số của thuộc tính Fields của đối tượng
Recordset. Ví dụ objRS(“HOTEN”) hay objRS.Fields(“HOTEN”).
Khi muốn dịch chuyển qua lại đến các bản ghi được lưu trong đối tượng Recordset, sử dụng
phương thức MoveNext, MovePrevious, MoveFirst, MoveLast và phải đi kèm với việc kiểm
tra bản ghi hiện thời đang ở vị trí đầu hay cuối bản ghi. Để làm điều đó, dùng thuộc tính BOF
hoặc EOF để kiểm tra.

5.9.3.4 Đối tượng Record


Đối tượng này lưu trữ bản ghi trong Recordset, một thực mục hay tệp tin trong File System.
Để sử dụng đối tượng này cần phải khai báo thực thể cho đối tượng Recordset
Dim objRec
Set objRec = Server.CreateObject (“ADODB.Record”)
Đối tượng Recordset có các phương thức sau:
Phương thức Diễn giải
Cancel Hủy thực hiện trên Record
Close Đóng đối tượng Record
CopyRecord Copy tệp hay thư mục
DeleteRecord Xóa một tệp hoặc thư mục

122
GetChildren Trả về một đối tượng Recordset, mỗi dòng
của Recordset lưu trong tệp hoặc thư mục
MoveRecord Di chuyển một tệp hay một thư mục
Open Mở một đối tượng Record tồn tại, tạo mới
một tệp hoặc thư mục

a. Phương thức Open


Sau khi tạo thực thể của Record, có thể dùng phương thức này để open, tạo mới một tệp hay
tạo mới một thư mục:
Cú pháp:
objRec.Open Source,ActiveConnection,[Model],[CreateOption],[Option],[user],[Passwd])

b. Phương thức CopyRecord; dùng để chép một tệp hay một thư mục đến nơi khác.
Cú pháp: objRec.CopyRecord (Source, Destionation, Username, Password,opt,async)

c.Phương thức DeleteRecord xóa một tệp hoặc thư mục chỉ định
Cú pháp: objRec.DeleteRecord(Source,Async)

5.9.3.5 Đối tượng Stream


Dùng để lưu trữ luồng dữ liệu dạng text hoặc nhị phân. Trước khi sử dụng cần phải khai báo
Set objStream = Server.CreateObject(“ADODB.Stream”)
Các phưong thức Stream:

Close Đóng đối tượng Stream


Copyto Chép một số kí tự hoặc byte từ đối tượng Stream này sáng đối tượng
Stream khác
Flush Gửi nội dung của đối tượng Stream
LoadFromFile Lấy nội dung của một đối tượng vào đối tượng Stream
Open Mở một đối tượng stream từ URL hay đối tượng Record
Read Đọc số lượng byte trong đối tượng Stream chứa dữ liệu nhị phân
ReadText Đọc số kí tự trong đối tượng Stream chứa nội dung là text
SaveToFile Lưu nội dụng đối tượng Stream vào tệp
SetEOS Thiết lập thuộc tính của EOS đối với vị strí hiện thời
SkipLine Bỏ qua một dòng khi đọc một Text Stream
Write Ghi một số lượng byte của dữ liệu nhị phần và đối tượng Stream
WriteText Ghi dữ liệu dạng Text vào đối tượng Stream

123
124

You might also like