Bộ giáo dục và đào tạo
Tr−ờng đại học bách khoa Hà nội
---------------------------------------------
Luận văn thạc sĩ khoa học
Ajax và ứng dụng tại công ty
điện thoại Hà nội 1
Ngành: xử lý thông tin và truyền thông
M∙ số: 938
Nguyễn khắc Vinh
Ng−ời h−ớng dẫn khoa học: T.S. Hà quốc trung
Hà nội 2006
-1-
Lời cam đoan
Tên tôi là Nguyễn Khắc Vinh, Học viên lớp Cao học Xử lý thông tin và
truyền thông niên khoá 2004-2006. Tôi cam đoan những nội dung tôi viết
trong luận
93 trang |
Chia sẻ: huyen82 | Lượt xem: 1407 | Lượt tải: 0
Tóm tắt tài liệu Ajax và ứng dụng tại công ty điện thoại Hà Nội 1, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
văn là nghiên cứu của bản thân tôi d−ới sự h−ớng dẫn của T.S Hà
Quốc Trung và không có sự sao chép bất hợp pháp từ nghiên cứu của ng−ời
khác. Nếu sai tôi hoàn toàn chịu trách nhiệm.
Hà Nội, ngày 29 tháng 11 năm 2006
Ng−ời cam đoan:
Nguyễn Khắc Vinh.
-2-
Mục lục
Danh mục các ký hiệu, các chữ viết tắt……………………….6
Danh mục các hình vẽ………………………………………………...7
Lời nói đầu………………………………………………………………...9
Phần 1: Ajax một cách thiết kế web mới
I. Đặt vấn đề………………………………………………………….......11
II.Ajax mở rộng các client……………………………………………….11
2.1 Khía cạnh ng−ời dùng..........................................................................12
2.2 Khía cạnh mạng………………………………………………….…...14
2.3 Các t−ơng tác dị bộ…………………………………………….……..16
III. Các nguyên tắt cơ bản của Ajax…………………...............………..19
3.1 Trình duyệt chứa ứng dụng, không chứa nội dung...............................19
3.2 Server chuyển dữ liệu, không phải nội dung........................................21
3.3 T−ơng tác liên tục giữa ng−ời dùng với ứng dụng ……………….…..21
Phần 2: Các kỹ thuật chính của Ajax
Ch−ơng 1: Các thành phần chính của Ajax………………………….…...23
I. Giới thiệu………………………………………………………………23
II. JavaScript……………………………………………………...............25
III.CSS cách nhìn và cảm nhận.................................................................26
3.1 Chọn lựa CSS…………………………………………………………27
3.2 Đặc tính CSS………………………………………………………….28
IV. DOM và cách thức làm việc với DOM………………………………30
4.1 Làm việc với DOM sử dụng JavaScript………………………………31
4.2 Tìm kiếm node DOM………………………………………………...33
-3-
4.3 Tạo một node DOM.............................................................................33
4.4 Thêm các kiểu dáng cho tài liệu...........................................................34
4.5 Shortcut: Sử dụng đặc tính trong HTML…………………….…..…...35
V. Tải dữ liệu sử dụng kỹ thuật XML…………………………………..36
5.1 IFrames……………………………………………………….………36
5.2 Các đối t−ợng XmlDocument và XmlHttpRequest………..…………38
5.3 Gửi yêu cầu tới server………………………………………………...41
5.4 Sử dụng các hàm gọi ng−ợc để giám sát các yêu cầu………………...41
Ch−ơng II: Cách sử dụng ứng dụng trong Ajax…………………….……44
I. Phát triển và duy trì cơ sở dữ liệu…………………………………….44
1.1 Giới thiệu……………………………………………………………..44
1.2 Refactoring…………………………………………………………...44
1.3 Các mô hình sử dụng refactoring.........................................................45
II. Mô hình MVC: Model-View- Controller…………………………….48
2.1 Giới thiệu……………………………………………………………..48
2.2 Web server MVC…………………………………………………..…49
2.2.1 Các vấn đề nảy sinh với khả năng sử dụng lại các đoạn kịch bản..49
2.2.2 Sắp xếp lại mô hình………………………………………………50
2.2.3 Chia tách nội dung từ thể hiện……………………………………50
Ch−ơng III: Các kỹ thuật chính trong thiết kế ứng dụng……………......52
I. Các mô hình MVC……………………………………………………..52
1.1 MVC dùng trong mô hình lặp……………………………………......52
1.2 Sử dụng MVC tại trình duyệt………………………………………...53
II. View trong một ứng dụng Ajax………………………………….…...55
2.1 Chia tách Logic khỏi View……………………………………….……55
2.2 Chia tách View khỏi Logic…………………………………….………57
III. Bộ điều khiển trong ứng dụng của Ajax……………………….…...57
3.1 Điều khiển sự kiện JavaScript truyền thống……………………….....57
-4-
3.2 Mô hình sự kiện W3C…………………………………………...…...60
IV. Tạo ra View từ các mô hình……………………………………….....61
Ch−ơng IV: Vai trò của Server…………………………………………....62
I. Làm việc với Server…………………………………………………...62
II. Mã ch−ơng trình phía server…………………………………………63
2.1 Các ngôn ngữ ứng dụng thông dụng…………………………………63
2.2 Các kiến trúc N-tier……………………………………………….….64
2.3 Duy trì các mô hình phía client và server…………………………….65
III. Bức tranh toàn cảnh: Thiết kế server thông dụng………………...66
3.1 Làm việc với Framework dựa trên thành phần……………………….66
3.2 Làm việc với kiến trúc h−ớng dịch vụ………………………………..67
3.3 Trao đổi dữ liệu………………………………………………………69
3.3.1 T−ơng tác với client………………………………………………..70
3.3.2 T−ơng tác content-centric……………………………………….…70
3.3.3 Các t−ơng tác script-centric………………………………………..71
3.3.4 T−ơng tác data-centric…………………………………………..…73
IV. Viết cho server………………………………………………………..74
4.1 Sử dụng dạng HTML…………………………………………………75
4.2 Sử dụng đối t−ợng XMLHttpRequest………………………………...77
Phần III. Xây dựng ứng dụng Ajax tại công ty điện
thoại Hà Nội 1
I. Khảo sát và đánh giá hiện trạng…………………………………..….78
1.1 Đặc điểm công ty…………………………………………………….78
1.2 Bài toán……………………………………………………………….78
II. Phân tích hoạt động và kết quả thực hiện…………………………...79
2.1 Hoạt động cập nhật thông tin DSLAM…………....………………….79
2.2 Các mối quan hệ...................................................................................80
-5-
2.3 Kết quả thực hiện công việc………………………………………….81
2.4 Đánh giá kết quả thực hiện……………………………………….......84
Phần IV. triển vọng của Ajax và khó khăn
I. Xây dựng ứng dụng chất l−ợng…………………………………..…85
II. Bảo mật Ajax………………………………………………………...86
III. Các thay thế cho Ajax………………………………………….…......87
3.1 Các giải pháp dựa trên Macro Media Flash………………………....87
3.2 Java Web start và các kỹ thuật có liên quan………………………...88
IV. Những nh−ợc điểm của Ajax………………………………………..88
V. H−ớng phát triển t−ơng lai………………………………………….89
Kết luận và kiến nghị…………………………………………….....90
Tài liệu tham khảo……………………………………………….......92
-6-
Danh mục các ký hiệu, các chữ viết tắt
STT Từ viết tắt Giải nghĩa
1 AJAX Asynchronous JavaScript and XML
2 CGI Common Gateway Interface
3 CSS Cascading Style Sheets
4 DOM Document Object Model
5 DHTML Dynamic HTML
6 HTML Hyper Text Messager
7 HTTP Hyper Text Transfer Protocol
8 ID IDENTIFIER
9 IE Internet Explorer
10 IFRAME Inline Frame
11 J2EE Java/Java 2 Enterprise Edition
12 MVC Model – View – Controller
13 RPC Remote Procedure Call
14 ORM Object Relational Mapping
15 W3C World Wide Web Consortium
16 SQL Query Language
17 SOA Service Oriented Architechture
18 UI User Interface
-7-
Danh mục các hình vẽ, đồ thị
Thứ tự Tên hình Trang
Hình 1.1 Kiến trúc cơ bản của một ứng dụng đơn trên
máy tính để bàn.
13
Hình 1.2 Kiến trúc của các hệ thống client/server và các
kiến trúc n-tier
13
Hình 1.3 Biểu đồ của hàm gọi thủ tục cục bộ 15
Hình 1.4 Biểu đồ của một thủ tục gọi từ xa. 16
Hình 1.5 Biểu đồ của một phản hồi đồng bộ 17
Hình 1.6 Biểu đồ của một phản hồi dị bộ 18
Hình 1.7 Thời gian sống của một ứng dụng web truyền
thống
19
Hình 1.8 Thời gian sống của một ứng dụng Ajax 20
Hình 2.1 Cách thức các dữ liệu làm việc cùng nhau trong
Ajax.
24
Hình 2.2 Cấu trúc cây DOM của một tài liệu HTML 31
Hình 2.3 Chuỗi các sự kiện xử lý dị bộ trong trang web. 38
Hình 2.4 Chu trình thực hiện trong mô hình Facade 46
Hình 2.5 Phân chia trách nhiệm trong mô hình Giám sát 46
Hình 2.6 Mô hình tập lệnh trong ứng dụng sử lý văn bản 47
Hình 2.7 Mô hình singleton 47
Hình 2.8 Thành phần chính trong mô hình MVC 48
Hình 2.9 Cách thức thực hiện một yêu cầu qua mạng 49
-8-
Hình 2.10 Mô hình MVC ứng dụng trong cấu trúc widget
cây.
53
Hình 2.11 Mô hình MVC với các quy mô khác nhau trong
kiến trúc ứng dụng.
54
Hình 2.12 Kiến trúc MVC với mô hình tự lặp 54
Hình2.13 di chuyển phản hồi của tier thể hiện từ server
tới trình duyệt
65
Hình2.14 Lập trình web khi không có framework. 66
Hình 2.15 Kiến trúc của một web framework dựa vào
thành phần
67
Hình 2.16 Hệ thống xử lý tất cả các đối t−ợng và hệ thống
sử dụng Facade xử lý một số ít các đối t−ợng
69
Hình 2.17 Mô hình content-centric 71
Hình 2.18 Kiến trúc Script – centric cho một ứng dụng
Ajax.
73
Hình 2.19 Kiến trúc Data-centric trong ứng dụng Ajax 74
Hình 3.1 Giao diện thống kê DSLAM 81
Hình 32 Giao diện thiết bị tại các vệ tinh 82
Hình 3.3 Các lựa chọn nhập số liệu thiết bị trong một
trạm
83
Hình 3.5 Giao diện nhập và hiển thị với các lựa chọn các
trạm khác nhau
84
-9-
Lời nói đầu
Trong thời đại ngày nay, việc xây dựng một cổng thông tin cho mỗi
doanh nghiệp đang trở thành một nhu cầu tất yếu. Thông qua kênh thông tin
trên trang web, doanh nghiệp có thể quảng bá hình ảnh của mình tới tất cả c−
dân trên mạng cũng nh− tới các đối tác làm ăn.
Với nhu cầu nh− vậy, các công nghệ thiết kế web tĩnh truyền thống nh−
Fronpage, Dreamware không thể đáp ứng đ−ợc những đòi hỏi ngày càng khắt
khe do khả năng xử lý thông tin trong giao diện ng−ời dùng kém, cơ chế bảo
mật đơn giản, cơ sở dữ liệu nghèo nàn không linh hoạt, khả năng cập nhật
thông tin hạn chế.
Để giải quyết các vấn đề đối với web tĩnh, xuất hiện các công nghệ mới,
cho phép cung cấp các trang web động với cơ sở dữ liệu lớn, khả năng cập
nhật nhanh, tốc độ trao đổi thông tin nhanh chóng kịp thời, khả năng bảo mật
−u việt. Có thể kể ra ở đây các công nghệ nh− PHP, JavaScript, .Net…..và một
công nghệ đang dành đ−ợc nhiều sự chú ý trong thời gian gần đây chính là
Ajax với cách thức xử lý và xây dựng web mới.
Với điều kiện công tác tại Công ty Điện thoại Hà Nội 1, thực tế địa bàn
quản lý và yêu cầu công việc của tôi đòi hỏi phải có một cổng thông tin có
khả năng trao đổi thông tin với khối l−ợng lớn, tốc độ cao, thời gian trao đổi
thông tin nhanh chóng kịp thời, đơn giản dễ dàng sử dụng.
Từ thực tế công việc, từ niềm yêu thích Ajax, tôi quyết định chọn đề tài
“Ajax và ứng dụng tại công ty Điện Thoại Hà Nội 1”
Nội dung của đề tài bao gồm:
- Nghiên cứu tổng quan về công nghệ Ajax
- Tìm hiểu cách thức triển khai Ajax với các ứng dụng mạng theo
mô hình client/server.
-10-
- Thiết kế ứng dụng thực tế tại Công ty Điện Thoại Hà Nội 1
Đề tài đ−ợc hoàn thành với sự giúp đỡ nhiệt tình của thầy giáo T.S Hà
Quốc Trung, Giảng viên Khoa Công nghệ thông tin, Tr−ờng ĐH Bách Khoa
Hà Nội, KS Nguyễn Kh−ơng Duy cán bộ Công ty Điện Thoại Hà Nội 1. Mặc
dù đã có nhiều cố gắng trong việc nghiên cứu, s−u tầm, dịch và tổng hợp tài
liệu nh−ng chắc hẳn luận văn không tránh khỏi những thiếu sót. Tôi rất mong
nhận đ−ợc ý kiến đóng góp của các thầy cô, các anh chị cùng toàn thể các
bạn.
Tôi xin chân thành cảm ơn!
-11-
Phần 1: Ajack một cách thiết kế web mới
I. Đặt vấn đề.
Ajax là tên viết tắt của cụm từ (Asynchronous JavaScript + XML). Đây
thực sự không phải chỉ là một cái tên. Có rất nhiều điều thú vị xung quanh
Ajax, cả về khía cạnh kỹ thuật lẫn khía cạnh kinh tế. Về kỹ thuật, Ajax đ−a
vào rất nhiều triển vọng trong các kỹ thuật duyệt web. Google và một vài công
ty khác đã và đang sử dụng Ajax để đáp ứng các nhu cầu của cộng đồng, với
những gì mà ứng dụng web có thể làm đ−ợc.
Trong một vài năm trở lại đây, xuất hiện sự bùng nổ về Internet thế hệ
mới. Đi kèm với nó là sự gia tăng của các dịch vụ web (các ứng dụng web)
phức tạp hơn. Có rất nhiều kỹ thuật khác nhau đ−ợc áp dụng nhằm cung cấp
thông tin tới các client một cách nhanh nhất và hiệu quả nhất. Ajax có thể
thực hiện công việc này khá tốt khi sử dụng lại các kỹ thuật đã đ−ợc cài đặt
trên phần lớn các máy tính hiện đại. Đây chính là khía cạnh khiến Ajax dành
đ−ợc nhiều sự quan tâm trong thời điểm hiện nay.
II. Ajax mở rộng các client.
Khi nhắc đến các ứng dụng trên mạng, điều đầu tiên chúng ta phải tính
chính là cách thức thiết kế các giao diện ng−ời dùng (UI). Việc xây dựng một
giao diện client đa dạng là khá phức tạp so với việc thiết kế một trang web. Để
có đ−ợc một client đa dạng cần phải thoả mãn hai tiêu chí, thứ nhất nó phải là
một client, thứ 2 nó phải đa dạng.
Tính đa dạng đ−ợc nhắc đến ở đây chính là mô hình t−ơng tác của
client. Một mô hình t−ơng tác ng−ời sử dụng đa dạng phải cung cấp, hỗ trợ
đầy đủ các ph−ơng thức giao tiếp tại đầu vào và có những phản hồi trong thời
-12-
gian đúng yêu cầu. Chúng phải thực sự có hiệu quả, giống nh− những ứng
dụng trên máy tính để bàn, ví dụ nh− ch−ơng trình word và excel.
2.1 Khía cạnh ng−ời dùng
Lấy ch−ơng trình bảng tính trong máy tính để bàn làm ví dụ (ch−ơng
trình Excel). Có thể nói, ch−ơng trình này đã cung cấp cho ta khá đầy đủ các
tính năng của bảng tính. Ta có thể thực hiện các t−ơng tác với bảng tính theo
nhiều cách khác nhau. Sau khi thực hiện xong các thao tác, ch−ơng trình cho
ta các tính năng quay trở lại các hoạt động tr−ớc đó thông qua các phím back
hay follow. Tuy vậy, ứng dụng này vẫn không phải là một client đa dạng. Do
đây là một ch−ơng trình ứng dụng chạy trên máy tính để bàn nên các mô hình
dữ liệu và mô hình logic của nó đều đ−ợc thực hiện trong một môi tr−ờng
đóng, ở đó các ch−ơng trình đó có thể nhìn thấy nhau tuy vậy chúng không
thể liên kết đ−ợc với bên ngoài. Mặt khác, theo nh− định nghĩa về một client
thì client là một ch−ơng trình mà có thể kết nối thông tin với các ch−ơng trình
(tiến trình ) độc lập khác, điển hình là các ch−ơng trình chạy trên một server.
Vể căn bản, server có nhiều đặc tính −u điểm hơn so với client cả về kích
th−ớc lẫn tính năng hoạt động, nó có thể l−u đ−ợc rất nhiều thông tin. Ng−ời
sử dụng cuối có thể xem và thay đổi các thông tin trên Client, và nếu một vài
client kết nối tới cùng một server, chúng cho phép chia sẻ dữ liệu với nhau.
Chính vì thế, ứng dụng bảng tính (excel) trên máy tính để bàn không phải là
một client đa dạng.
-13-
Hình 1.1: Kiến trúc cơ bản của một ứng dụng đơn trên máy tính để bàn.
Với máy tính để bàn, ứng dụng chạy trên tiến trình của nó, trong đó mô
hình dữ liệu và logic là có thể nhìn thấy nhau. Một ứng dụng thứ 2 chạy trên
nó sẽ không thể truy cập đ−ợc vào mô hình dữ liệu của ch−ơng trình tr−ớc,
chúng chỉ có thể truy cập vào đó thông qua file hệ thống. Trạng thái của
ch−ơng trình đ−ợc l−u trữ trong một file đơn, và hoàn toàn bị khoá khi ứng
dụng đang chạy, qua đó ngăn chặn tất cả các trao đổi thông tin tức thời.
Hình 1.2 Kiến trúc của các hệ thống client/server và các kiến trúc n-tier
-14-
Với kiến trúc client/server, Server đ−a ra một mô hình chia sẻ dữ liệu,
với mô hình này các client có thể t−ơng tác đ−ợc với nhau. Các client vẫn duy
trì mô hình dữ liệu riêng của nó, dùng cho các truy cập cố định. Một vài client
có thể t−ơng tác với cùng một server, với việc khoá tài nguyên đ−ợc quản lý
tại một mức tiêu chuẩn của các đối t−ợng riêng lẻ hoặc các cơ sở dữ liệu. Một
server cũng có thể là một tiến trình đơn (giống nh− trong mô hình client/server
truyền thống trong những năm đầu của thập niên 90). Trong bất kỳ tr−ờng hợp
nào, từ khía cạnh client, server có một điểm truy cập duy nhất và ta có thể
xem nó nh− là một hộp đen.
Trong một mô hình kiến trúc n-tier, server sẽ giao tiếp với các server
đầu cuối khác nh− là các cơ sử dữ liệu , tạo đ−ờng dẫn tới các lớp trung gian
(các lớp này có thể hoạt động cả ở client và server). Về mặt bản chất các ứng
dụng Ajax đ−ợc đặt tại điểm cuối, hoạt động giống nh− một client.
Tất nhiên, các trình duyệt web là các client, liên kết với web server
thông qua các yêu cầu trang web. Một trình duyệt có một số chức năng đa
dạng, phục vụ cho mục đích quản lý việc duyệt web của ng−ời sử dụng, ví dụ
các nút bấm, danh sách nhớ cũng nh− các nút chức năng dùng để l−u trữ dữ
liệu khác.
Với các trang web hiện đại, ví dụ nh− trang mua bán sách Amazon,
cung cấp cho ta một l−ợng thông tin dồi dào, và cách thức để t−ơng tác với
l−ợng tông tin lớn này là click vào đ−ờng link và điền thông tin vào các form.
Điều này là khá đơn giản và hiệu quả, tạo cho ng−ời dùng cảm giác tiện lợi
khi truy cập vào các trang web kể trên.
2.2 Khía cạnh mạng
Mục đích chính của việc phát triển Internet chính là tạo ra một môi
tr−ờng trong đó tất cả các máy tính trên thế giới kết nối với nhau thành một
máy tính với nguồn tài nguyên rất lớn. Sẽ không còn sự phân biệt giữa các thủ
-15-
tục gọi từ xa cũng nh− thủ tục gọi cục bộ, khi đó sẽ không thể xác định đ−ợc
thiết bị nào đang hoạt động.
Tuy vậy các thủ tục gọi từ xa và thủ tục gọi cục bộ không giống nhau.
Chi phí thông tin trên mạng khá lớn (do chậm và không ổn định). Trong cùng
một miền, rất nhiều máy tính sẽ chung một kết nối mạng để gửi và nhận dữ
liệu. Đây là nguyên nhân dẫn tới tốc độ mạng bị giảm do có quá nhiều tiến
trình vật lý trên đ−ờng dây.
Với mỗi yêu cầu, ta cần mã hoá chúng thành một đối t−ợng, d−ới dạng
một chuỗi dữ liệu. Chuỗi dữ liệu này sau đó đ−ợc chuyển tới giao thức ứng
dụng (HTTP) và đ−ợc gửi đi trên đ−ờng truyền. Tại đầu xa, giao thức ứng
dụng đ−ợc giải mã để tạo ra bản sao của đối t−ợng yêu cầu. Bản sao này sau
đó đ−ợc cung cấp cho mô hình dữ liệu. Để có thể giao tiếp đ−ợc với hàm gọi,
các lớp nối tiếp cũng nh− các lớp giao vận phải tìm đ−ờng đi rất nhiều.
Hình 1.3: Biểu đồ của hàm gọi thủ tục cục bộ
-16-
Hình 1.4: Biểu đồ của một thủ tục gọi từ xa.
Vì vậy, để thực hiện một lệnh gọi qua mạng sẽ là không hiệu quả nếu
nh− gọi một ph−ơng thức cục bộ trong bộ nhớ. Hơn nữa, do tính chất không
đảm bảo của mạng nên công việc này sẽ không hiệu quả và không có độ chính
xác cao. Nhìn chung, trễ mạng tạo ra sự không ổn định cũng nh− gây ra những
lỗi đối với những ứng dụng trong các ứng dụng của thế giới th−c.
2.3 Các t−ơng tác dị bộ
Lấy ví dụ về tiến trình ng−ời mẹ thực hiện trong một buổi sáng. Tiến
trình đó bao gồm việc đánh thức ng−ời con đang ngủ say, mở cửa sổ và cho
mèo ăn sáng. Nếu nh− ng−ời mẹ thực hiện tiến trình trên một cách tuần tự
(đồng bộ) tức là đánh thức và đợi khi ng−ời con dậy hẳn mới đi mở cửa sổ và
cho mèo ăn, quá trình diễn ra một cách chậm chạp và tốn rất nhiều thời gian.
Có thể khi mở cửa sổ xong thì quên mất nhiệm vụ cho mèo ăn. Vậy chúng ta
phải thực hiện tiến trình trên nh− thế nào để đạt đ−ợc những yêu cầu đặt ra ?
Trong thực tế, chúng ta cố gắng thực hiện các phản hồi giao diện ng−ời
sử dụng độc lập với các hoạt động khác đang diễn ra
-17-
Hình 1.5: Biểu đồ của một phản hồi đồng bộ
Trong lĩnh vực tin học, những gì chúng ta làm là tạo ra một xử lý dị bộ
trong một tiến trình riêng rẽ. Mỗi đối t−ợng sẽ thực hiện một tiến trình riêng
của chúng. Trong thời gian này các đối t−ợng sẽ không t−ơng tác với nhau.
Tuy vậy các tiến trình này phải chạy theo một kịch bản nhất định.
Với bất kỳ một giao tiếp ng−ời dùng nào, luôn có một tiến trình dị bộ
quản lý độ dài các tính toán, thực hiện nó trong khi ng−ời dùng đang thực hiện
các thao tác khác. Cần phải khoá ng−ời sử dụng trong khi tiến trình đang thực
hiện. Tuy vậy do tiến trình này có thể đ−ợc thực hiện trong thời gian ngắn nên
việc khoá hoạt động của ng−ời dùng là có thể chấp nhận đ−ợc.
-18-
Hình 1.6: Biểu đồ của một phản hồi dị bộ
Giải pháp ở đây là chúng ta sẽ sử dụng những lệnh gọi từ xa dị bộ. Nếu
nh− HTTP là giao thức hỏi-đáp, trong đó client tạo ra một yêu cầu tài liệu và
server trả lời bằng cách gửi tài liệu, hay nói rằng nó không tìm thấy, đ−a ra
một vị trí thay thế, nói với client sử dụng bản copy của nó…Giao thức hỏi-
đáp là giao thức 1 chiều. Client có thể liên lạc với server nh−ng server không
thể khởi tạo một phiên truyền thông với client, do đó server không thể nào nhớ
đ−ợc client từ một yêu cầu tr−ớc đó. Chính vì thế, đặc tính then chốt của giải
pháp gọi ng−ợc dị bộ là ở chỗ client sẽ tạo ra thông báo 2 lần: một lần khi bắt
đầu chuỗi hoạt động và lần thứ 2 khi chuỗi hoạt động hoàn thành. Điều này
thì HTTP và mô hình ứng dụng web truyền thống không thực hiện cho chúng
ta.
-19-
III. Các nguyên tắc cơ bản của Ajax
3.1 Trình duyệt chứa ứng dụng, không phải chứa nội dung
Trong ứng dụng web truyền thống, trình duyệt là một đầu cuối. Nó
không biết bất kỳ điều gì về ng−ời dùng đang ở đâu trong luồng thông tin. Tất
cả các thông tin đ−ợc l−u trữ trên web server, th−ờng là trong phiên ng−ời
dùng. Các phiên ng−ời dùng phía server th−ờng đ−ợc nhắc đến gần đây, điển
hình là một phần của chuẩn API.
Hình 1.7: Thời gian sống của một ứng dụng web truyền thống.
Hình 1.7 mô tả chu kỳ sống của một ứng dụng web. Tất cả các trạng
thái của hội thoại ng−ời dùng với ứng dụng đ−ợc quản lý trên server web. Khi
ng−ời sử dụng truy cập vào hoặc khởi tạo một phiên, một vài đối t−ợng phía
server sẽ đ−ợc tạo ra. Trong cùng thời điểm này, trang home sẽ đ−ợc load tới
trình duyệt, trong một luồng HTML mà đ−ợc chộn lẫn giữa các thể hiện và dữ
liệu cụ thể của ng−ời dùng cùng với danh sách những vấn đề đã xem gần đây.
Bất cứ khi nào ng−ời dùng t−ơng tác với trang, một tài liệu khác sẽ đ−ợc gửi
tới trình duyệt, chứa cùng dữ liệu. Khi đó trình duyệt sẽ bỏ toàn bộ tài liệu cũ
-20-
đi và thay vào đó là tài liệu mới mà không biết cái mới đó sẽ làm việc nh− thế
nào. Khi ng−ời dùng thoát và đóng trình duyệt, khi đó ứng dụng sẽ đóng lại và
phiên làm việc bị xoá bỏ. Bất kỳ thông tin mà ng−ời dùng cần xem trong
phiên tới sẽ đ−ợc quản lý.
Một ứng dụng Ajax sẽ dịch chuyển một số các đối t−ợng tới trình
duyệt, nh− hình sau:
Hình 1.8: Thời gian sống của một ứng dụng Ajax
Khi ng−ời dùng truy cập vào, một tài liệu phức tạp hơn đ−ợc chuyển tới
trình duyệt, trong đó có một phần lớn là các mã JavaScript. Tài liệu này sẽ tồn
tại trong suốt phiên làm việc của ng−ời dùng, mặc dù có thể nó bị thay thế bởi
các thông tin khác khi ng−ời dùng t−ơng tác với đối t−ợng khác. Do tài liệu
tồn tại trong toàn bộ phiên ng−ời dùng nên nó có thể l−u lại đ−ợc trạng thái tất
cả các trạng thái.
-21-
3.2 Server chuyển dữ liệu, không phải là nội dung.
Nh− đã nói ở trên, ứng dụng web truyền thống cung cấp cả nội dung và
dữ liệu tại tất cả các b−ớc. Khi ng−ời dùng thêm vào một mục, thì việc chúng
ta phải thực hiện là cập nhật lại toàn bộ thông tin. Điều này là rất lãng phí và
không cần thiết. Với Ajax, bằng việc gửi đi các yêu cầu dị bộ tới server và
server chỉ phải gửi lại những dữ liệu t−ơng ứng. ứng dụng có thể thực hiện
công việc này theo nhiều cách, ví dụ nh− gửi trả lại một đoạn JavaScript, một
luồng text hoặc một tài liệu XML nhỏ. Nh− vậy với các cách kể trên hoạt
động hiệu quả hơn và nhỏ gọn so với cách trả về của ứng dụng web truyền
thống.
Trong một ứng dụng Ajax, l−u l−ợng load là rất lớn khi ng−ời dùng truy
nhập vào một server lớn. Chính vì vậy cách thức thực giao tiếp kể trên với
server là khá hiệu quả.
3.3. T−ơng tác liên tục giữa ng−ời dùng với ứng dụng
Một trình duyệt web cung cấp 2 cơ chế đầu vào cho một đối t−ợng: qua
các siêu liên kết (hyperlinks) và qua siêu văn bản (HTML). Các siêu liên kết
có thể đ−ợc xây dựng trên server và đ−ợc tải về tr−ớc với các tham số giao
diện cổng (CGI), đ−ợc chỉ ra tại các trang server động hoặc các serverlet.
Chúng có thể phù hợp với các hình ảnh và các bảng CSS, để cung cấp thông
tin trả về ngay khi con chuột di chuyển. Các siêu liên kết có thể đ−ợc thực
hiện giống nh− các thành phần UI. Các điều khiển Form đ−a ra một tập con cơ
sở của các thành phần giao diện ng−ời dùng máy tính để bàn tiêu chuẩn: các
hộp text, các hộp kiểm, các nút bấm…Tuy vậy không có các điều khiển cây ,
l−ới, các hộp combo-box. Các form cũng giống nh− các siêu liên kết đ−ợc đặt
tại URL phía server. Tuy vậy các siêu liên kết và các form thể hiện đ−ợc đặt
trong hàm JavaScript. Đây là một kỹ thuật thông dụng trong các trang web để
cung cấp định dạng trong JavaScript, kiểm tra các tr−ờng trống, các số nằm
-22-
ngoài dải quy định tr−ớc khi đ−a dữ liệu tới server. Những hàm JavaScript chỉ
tồn tại cùng với trang và chúng sẽ bị thay thế khi trang thay đổi.
Trong khi trang thay đổi, ng−ời dùng vẫn không biết đ−ợc những gì
đang diễn ra. Trang cũ vẫn tồn tại trong một khoảng thời gian, và trình duyệt
vẫn cho phép ng−ời dùng chọn vào bất kỳ đ−ờng dẫn nào họ nhìn thấy, nh−ng
làm nh− vậy sẽ tạo ra những kết quả không chính xác và có thể làm hỏng
phiên làm việc của server. Ng−ời dùng cần chờ đợi cho tới khi trang đ−ợc làm
mới, th−ờng với một tập các lựa chọn t−ơng tự nh− những gì đã có từ tr−ớc.
Sử dụng Ajax, với cơ chế gửi dữ liệu dị bộ, ng−ời dùng có thể thực hiện
các thao tác trên ứng dụng một cách liên tục, tạo cho họ cảm giác thời gian
chờ đợi là rất ngắn và không bị cảm giác khó chịu.
Một thuận lợi nữa của Ajax là ở chỗ chúng ta có thể duy trì các sự kiện
các hoạt động ng−ời dùng trong một phạm vi rộng lớn. Các khái niệm phức
tạp hơn nh− drag-and-drop trở nên đơn giản… Từ khía cạnh sử dụng, sự thoải
mái này là rất quan trọng không chỉ bởi vì nó cho phép chúng ta kiểm tra lại
các hình ảnh mà còn bởi vì nó cho phép chúng ta sử dụng các t−ơng tác ng−ời
dùng cũng nh− các yêu cầu server đ−ợc đầy đủ hơn.
-23-
Phần 2: Các kỹ thuật chính của Ajax
Ch−ơng I: Các thành phần chính của Ajax
I. Giới thiệu:
Ajax không phải là một kỹ thuật đơn, nó đ−ợc hình thành nên từ sự kết
hợp từ 4 kỹ thật khác nhau:
- Javascript: Javascript là một ngôn ngữ kịch bản mục đích chung, đ−ợc
thiết kế ra để nhúng vào trong các ứng dụng. Bộ biên dịch JavaScript trong
các trình duyệt web cho phép thực hiện các hoạt động đ−ợc lập trình sẵn
với rất nhiều khả năng khác nhau. Các ứng dụng Ajax th−ờng đ−ợc viết
trên nền JavaScript.
- Cascading Style Sheets (CSS): CSS đ−a ra cách thức định nghĩa các loại
thành phần một trang web. Các định nghĩa này th−ờng đơn giản và hiệu
quả. CSS còn đ−a ra các cách thức thực hiện khác nhau. Trong một ứng
dụng Ajax, bằng CSS, ta có thể thay đổi đ−ợc kiểu cách của một giao diện
ng−ời dùng.
- Document Object Model (DOM): DOM mô tả cấu trúc của các trang web,
giống nh− là một tập các đối t−ọng có thể ch−ơng trình hoá, mà có thể
đ−ợc kết hợp với JavaScript, Việc viết kịch bản bằng DOM cho phép một
ứng dụng Ajax thay đổi giao diện ng−ời dùng tại những phần làm lại của
một trang.
- Đối t−ợng XMLHttpRequest: đ−ợc sử dụng cho phép các nhà lập trình
web truy vấn dữ liệu từ web server. Định dạng dữ liệu th−ờng là XML, tuy
nhiên nó có thể làm việc với bất kỳ dữ liệu dạng text nào. Trong khi đối
t−ợng XMLHttpRequest là một công cụ linh hoạt để thực hiện truy vấn dữ
-24-
liệu từ server, thì còn có nhiều cách thức khác cũng có khả năng thực hiện
công việc trên.
Trong Ajax, JavaScrip đ−ợc sử dụng để kết nối các phần của ứng dụng với
nhau, định nghĩa các b−ớc làm việc ng−ời dùng và logic hoá công việc của
ứng dụng. Giao diện ng−ời dùng đ−ợc sử dụng và đ−ợc làm mới bằng cách sử
dụng JavaScript có ứng dụng DOM, mô tả và tổ chức lại dữ liệu của ng−ời
dùng, xử lý các t−ơng tác về chuột và bàn phím. CSS cung cấp một cái nhìn
đây đủ và tổng thể về ứng dụng và đối t−ợng XMLHttpRequest đ−ợc sử dụng
để giao tiếp dị bộ với server, nhận các yêu cầu ng−ời dùng và thực hiện cập
nhật dữ liệu trong khi ng−ời dùng làm việc.
Hình 2.1: Cách thức các dữ liệu làm việc cùng nhau trong Ajax.
-25-
Trong hình 2.1, JavaScript định nghĩa các quy tắc làm việc. DOM và CSS
đ−ợc sử dụng để tổ chức lại các xuất hiện của ứng dụng nhằm phù hợp với dữ
liệu chuyển từ server qua đối t−ợng XMLHttpRequest.
Ba trong 4 kỹ thuật trên gồm CSS, DOM và JavaScript đã đ−ợc biết đến
nh− là HTML động hoặc đơn giản là DHTML. Do không có cơ chế quay trở
lại (back) server nên ở DHTML tồn tại rất nhiều vấn đề. Ajax sử dung
DHTML, nh−ng có thêm vào các yêu cầu dị bộ, nhờ đó tăng thời gian sống
của một trang web. Bằng việc cho phép quay trở lại server trong khi đang thực
hiện t−ơng tác mà không gây ra bất kỳ sự gián đoạn nào, Ajax đã tạo ra những
khác biệt lớn mà các kỹ thuật khác không thể thực hiện đ−ợc.
II. JavaScript
Đóng vai trò chính trong các công cụ của Ajax chính là JavaScript.
Một ứng dụng Ajax sẽ download toàn bộ một client vào bộ nhớ. JavaScript
thực hiện việc kết hợp giữa dữ liệu với thể hiện và logic ch−ơng trình.
JavaScript là một ngôn ngữ lập trình mục đích chung. Có thể coi JavaScript là
ngôn ngữ kịch bản mục đích chung với các đặc tính nh− các biến không đ−ợc
khai báo cụ thể d−ới dạng chuỗi, số thực hoặc đối t−ợng, và cùng một biến có
thể đ−ợc đăng ký các loại giá trị khác nhau.
Ví dụ : var x=3.1415926
x=’pi’
ở đây, x vừa đ−ợc khai báo là số, vừa đ−ợc đăng ký là giá trị chuỗi.
Bên cạnh đó JavaScript có tính thông dịch, có nghĩa là mã nguồn đ−ợc thực
hiện một cách trực tiếp. Khi phát triển một ứng dụng JavaScript, ta có thể thay
thế mã nguồn trên web server, và mã nguồn đ−ợc truyền trực tiếp qua mạng
tới trình duyệt web. Thậm chí, ta có thể khai báo biến d−ới dạng sau:
Var x=eval(‘7*5’);
-26-
ở đây chúng ta đã định nghĩa tính toán của chúng ta d−ới dạng text, thay vì 2
số và một thuật toán. Hàm gọi eval() thay thế đoạn JavaScript mà nó chứa, và
trả về giá trị mong muốn. Trong hầy hết các tr−ờng hợp, cách thức này làm
chậm quá trình thực hiện ch−ơng trình, tuy nhiên do linh hoạt nên nó vẫn đ−ợc
sử dụng.
Một đặc tính nữa của JavaScript là tính chung, có nghĩa là ngôn ngữ
phù hợp với phần lớn các thuật toán. Ngôn ngữ JavaScript gốc chứa hỗ trợ cho
các số, chuỗi, ngày tháng, các mảng, các xử lý văn bản và các hàm toán học…
Ta có thể định nghĩa các đối t−ợng có cấu trúc sử dụng JavaScript, đ−a ra các
nguyên tắc thiết kế và trình tự của mã ch−ơng trình. Với môi tr−ờng trình
duyệt web, các phần của một trình duyệt nh− là CSS, DOM và các đối t−ợng
XMLHttpRequest đ−ợc kết hợp với JavaSCript, cho phép nhà quản lý t− động
điều khiển các trang web.
III. CSS cách nhìn và cảm nhận
CSS là một phần quan trọng để thiết kế web. Chúng tìm kiếm tần suất
sử dụng các thành phần trong các ứng dụng web, cũng nh− trong Ajax. Một
bảng biểu đ−a ra cách thức định nghĩa tập trung cho các loại hình ảnh, nhờ đó
có thể đ−ợc áp dụng các định nghĩa này vào các thành phần khác nhau trên
trang web một cách dễ dàng. Bên cạnh đó để quan sát đ−ợc các đối t−ợng
khác nh− nh− màu sắc, đ−ờng bao, ảnh nền, độ trong suốt và kích cỡ, bảng
biểu này có thể định nghĩa cách thức mà các thành phần này đ−ợc tạo ra dựa
trên mối quan hệ với một thành phần khác và dựa trên t−ơng tác ng−ời dùng.
CSS đ−a ra một tài liệu bằng cách định nghĩa các quy tắc, th−ờng là các
file riêng rẽ, đ−ợc đ−a vào trang web đang đ−ợc tạo. Một quy tắc về mô tả
kiểu dáng bao gồm ._.2 phần: phần chọn lựa là phần khai báo. Phần chọn lựa chỉ
định những loại (thành phần) nào sẽ đ−ợc mô tả, phần khai báo sẽ khai báo
đặc tính sẽ đ−ợc áp dụng.
-27-
Ví dụ : h1 {color: red} trong ví dụ này phần chọn lựa đ−ợc áp dụng co tất cả
các tags trong tài liệu, phần khai báo thay đổi đặc tính của loại kiểu dáng đơn.
3.1Chọn lựa CSS
Để định nghĩa một kiểu tag của HTML cung cấp cho một dạng nào đó,
ta có thể giới hạn quy tắc áp dụng áp dụng với một nội dung cụ thể. Có nhiều
cách để chỉ định một nội dung: bằng loại tag HTML, bằng các lớp hoặc bằng
nhận dạng duy nhất .
*)Lựa chọn tag:
Ví dụ để áp dụng luật trên cho các tag mà đ−ợc chứa cùng với một tag
, ta sẽ thay đổi quy tắc nh− sau:
Div h1 {color: red}
Cách thức này cũng đ−ợc nhắc đến nh− là những chọn lựa kiểu thành tố, bởi vì
chúng quyết định liệu khi nào một thành phần DOM đ−ợc mô tả dựa trên
thành phần của nó. Chúng ta cũng định nghĩa các lớp để mô tả những thứ
không thực hiện với một loại tag HTML. Ví dụ, nếu ta định nghĩa một loại lớp
có kiểu callout, xuất hiện d−ới dạng là một hộp có màu sắc, chúng ta có thể
viết nh− sau:
Callout {border: solid blue 1px; background-color: cyan}
Để đăng ký một lớp cho một thành phần, chúng ta chỉ việc khai báo thuộc
tính lớp trong tag HTML. Các thành phần có thể đăng ký nhiều lớp khác nhau.
Ta có thể sử dụng cả 2 loại lớp trong một tài liệu hoặc kết hợp các lớp với các
quy định dựa trên thành tố, để định nghĩa một lớp mà chỉ hoạt động trên một
số loại tag nhất định. Ta cũng có thể sử dụng trong mô tả các chọn lựa cha con
để tạo ra những quy tắc cụ thể.
Div.prose span.highlight {background-color: yellow}
-28-
*) Lựa chọn nhận dạng (ID)
Ta cũng có thể chỉ định những quy tắc mà áp dụng cho một thành phần
với một ID cho tr−ớc, giống nh− việc chỉ định thuộc tính id trong HTML.
Trong HTML, mỗi thành phần sẽ có một ID duy nhất và vì thế những chọn lựa
đ−ợc chỉ định tr−ớc sẽ đ−ợc sử dụng để chọn lựa một thành phần đ−a trên
trang web. Ví dụ, để tạo một nút close phía trên trang, ta có thể định nghĩa nó
nh− sau:
#close {color:red}
CSS cho phép ta định nghĩa các kiểu dựa trên các chọn lựa ảo. Một trình duyệt
web định nghĩa một số l−ợng nhất định các chọn lựa ảo. Ví dụ nh−:
.First-letter{
Font-size: 500%
Color:red
Fload:left
}
hoặc thể hiện theo cách sau:
.P.illuminated:firtst-letter{
Font-size: 500%
Color:red
Float:left
}
3.2 Đặc tính CSS
Bất kỳ thành phần nào trong một trang HTML đều có thể đ−ợc thể hiện
thông qua nhiều cách khác nhau. Ví dụ nh− thành phần phổ biến nhất nh− là
cũng có tới 12 cách thể hiện.
-29-
Văn bản của một thành phần có thể đ−ợc thể hiện d−ới dạng màu sắc, kích
cỡ chữ, độ đậm nhạt và kiểu dáng sử dụng. Các phông chữ có thể có nhiều
chức năng, cho phép thay đổi trong những tình huống phông chữ mong muốn
không cài đặt trên máy client. Để quy định màu sắc, kiểu chữ, chúng ta có thể
định nghĩa một kiểu dáng d−ới dạng nh− sau:
.robotic{
font-size: 14pt;
font-family: courier new, courier, monospace;
font-weight: bold;
color:gray;
}
CSS có thể định nghĩa theo lớp và kích th−ớc (mô hình hộp) của một thành
phần bằng cách chỉ định lề và các thành phần padding khác, theo cách cho cả
4 kích th−ớc hoặc cho từng kích th−ớc khác nhau.
.padded{padding: 4px;}
.ecccentricPadded{
padding-bottom: 8px;
padding-top: 2px;
padding-left:2px;
padding-right:1px;
}
Kích th−ớc của từng thành phần có thể đ−ợc quy định thông qua đặc
tính chiều rộng và độ cao. Vị trí của một thành phần có thể đ−ợc chỉ định theo
vị trí toàn cục hay vị trí quan hệ. Với cách thức chỉ định vị trí toàn cục, thành
phần của trang đ−ợc xác định vị trí bằng cách thiết lập các đặc tính bên trên và
bên trái, trong đó mối quan hệ vị trí của các thành phần sẽ thay đổi theo toàn
bộ trang web.
-30-
Màu nền đ−ợc thiết lập qua đặc tính background-color. Thêm vào đó ta có thể
thiết lập hình ảnh nền thông qua đặc tính background-image.
.titlebar{ background-image: url(image/topbar.png);}
Ta có thể thiết lập đặc tính hiện và ẩn của các thành phần thông qua đặc tính
visibility:hidden hoặc display: none.
IV. DOM Và cách thức làm việc với dom
DOM (Document Object Model- Mô hình đối t−ợng tài liệu) tạo ra một
tài liệu (một trang web) cho thực thể JavaScript. Khi sử dụng DOM, cấu trúc
tài liệu có thể đ−ợc xây dựng một cách tự động. Đây là một đặc tính hết sức
hữu ích khi tiến hành viết một ứng dụng Ajax. Trong một ứng dụng web cơ
bản, mỗi khi có các luồng thông tin HTML mới từ server đến, ta th−ờng làm
mới trang, và ta có thể định nghĩa lại giao diện thông qua việc sử dụng một
bản HTML mới. Trong ứng dụng Ajax, những thay đổi chính tại giao diện
ng−ời dùng sẽ đ−ợc thực hiện thông qua việc sử dụng DOM. Các tag HTML
trong một trang web đ−ợc tổ chức d−ới dạng một cấu trúc cây. Mỗi nút của
cây là một tag HTML, dùng để mô tả tài liệu. T−ơng tự nh− thế tag
sẽ mô tả phần thân tài liệu, đây là một nút của cấu trúc tài liệu mà có thể quan
sát đ−ợc. Trong phần thân này, chúng ta tìm thấy các bảng, các sơ đồ, danh
sách và các loại tag khác.
Một thể hiện DOM của một trang web đ−ợc cấu trúc d−ới dạng cây, bao
gồm các thành phần hoặc các node, mỗi node lại có thể chứa các node con.
Thực thể JavaScript xác minh node gốc của trang web thông qua tài liệu biến
toàn cục, là điểm bắt đầu của tất cả thao tác DOM. Thành phần DOM đ−ợc
định nghĩa bởi W3C. Một thành phần cha sẽ không có hoặc có nhiều thành
phần con và một tập các thuộc tính, đ−ợc l−u trữ d−ới dạng một mảng( bằng
một ký tự khoá ví dụ nh− độ rộng hoặc một kiểu chỉ số nào đó.)
-31-
Hình 2.2: Cấu trúc cây DOM của một tài liệu HTML
Trong hình 2.1, mỗi thành phần là một tag dấu trong HTML. Nh− vậy có thể
coi DOM là một bản sao của HTML. Mối quan hệ ở đây là quan hệ 2 chiều.
Những thay đổi trong DOM sẽ dẫn đên những thay đổi trong HTML và ng−ợc
lại.
4.1 Làm việc với DOM sử dụng JavaScript
Trong nhiều ứng dụng, ta muốn thay đổi giao diện ng−ời dùng khi họ
làm việc, cung cấp các quay ng−ợc đối với các tiến trình cũng nh− với các
hoạt động của họ . Để thực hiện đ−ợc điều này ta có thể thực hiện bằng cách
thay thế nhãn hoặc màu sắc của một thành phần đơn, thông qua việc đ−a ra
một hộp hội thoại, để thay thế những phần màn hình ứng dụng với một tập các
widget mới. Cách thức thông dụng nhất là xây dựng một cấu trúc cây DOM
thông qua việc điền đầy trình duyệt với một HTML (nói theo cách khác, ta
thực hiện viết một trang HTML). Ví dụ, ta muốn đ−a ra một lời chào tới ng−ời
-32-
dùng. Ban đầu trang đ−ợc tải về, ta không biết tên của ng−ời đó, vì thế ta
muốn có thể thay đổi cấu trúc của trang để thêm vào tên ng−ời dùng ở phía
sau, ta có thể thực hiện thêm các node DOM một cách tự động.
Ví dụ:
<link rel= ‘stylesheet’ type=’text/css’
href=’hello.css’/>
<script type=’text/javascript’
src=’hello.js’>
hello
Trong đoạn mã này chúng ta đã đ−a vào 2 thành phần: một CSS và một
file chứa đoạn mã JavaScript. Ta cũng khai báo một giá trị trống với
nhận dạng là ID, thành phần này giúp ta có thể thêm vào các thành phần tiếp
theo một cách tự động.
ở đây, CSS định nghĩa kiểu màu sắc và kiểu chữ khác nhau giữa các
thành phần. Và đoạn JavaScript thực hiện công việc thêm các node mới một
cách tự động giúp chúng ta. Nh− vậy DOM đã đ−ợc xây dựng và ta có thể thực
hiện các công việc trên nó. Ta có thể thay đổi thuộc tính các node, ẩn và hiện
các node cũng nh− tạo ra các node mới.
-33-
4.2. Tìm kiếm node DOM
Điều cần thiết đầu tiên khi muốn làm việc trên một DOM với JavaScript
là phải tìm đ−ợc các thành phần mà ta muốn thay đổi. Nh− đã đề cập ở phần
trên, chúng ta có một node gốc, trong biến toàn cục tài liệu (document) Mọi
node trong DOM đều là node con, cháu của biến tài liệu. Tuy vậy việc vẽ lại
toàn bộ theo cấu trúc cây là khá phức tạp, đặc biệt với những tài liệu có kích
cỡ lớn. Để xử lý vấn đề này, đơn giản chúng ta chỉ cần sử dụng một số các
shortcut. Hầu hết các thành phần đ−ợc sử dụng ở đây đều là một tag với một
ID duy nhất.
Trong file JavaScript ở trên, giả sử ta muốn tìm 2 thành phần: một là
thành phần đồ hoạ và một là tag để thêm vào nội dung. Biết đ−ợc điều
này, ta sẽ thêm vào các thuộc tính ID cho từng thành phần trong HTML :
Và
Bất kỳ node DOM nào đều có một ID đ−ợc đăng ký, và ID này có thể đ−ợc sử
dụng trong một hàm gọi, ví dụ:
Var hello=document.getElementById(‘hello’);
Nh− vậy ta có thể tìm kiếm một node DOM thông qua ID của nó hoặc thông
qua loại tag HTML. Nhìn chung, sử dụng hàm getElementById() an toàn hơn
so với hàm getElementsByTagName().
4.3 Tạo một node DOM
Có một số tr−ờng hợp ta muốn tạp thêm những node mới và thêm chúng
vào tài liệu. Khi đó các ứng dụng JavaScript của DOM sẽ cho chúng ta cách
thức để thực hiện công việc đó.
Lấy ví dụ về đoạn mã Hello.js. Khi tải trang, chúng ta tự động tạo nội dung
cho node DOM với ID ‘empty’. Hàm addNode() sử dụng các ph−ơng thức
-34-
document.createElement() và ph−ơng thức document.createTextNode(). Trong
đó createElement() dùng để tạo thành phần HTML , ví dụ nh− :
Var childEl=document.createElement(“div”);
còn thành phần createTextNode() tạo ra một node DOM t−ơng ứng với đoạn
text, th−ờng thấy trong các tag heading, div, paragraph và các tag về danh
sách
var txtNode=document.createTexxtNode(“some text”);
DOM xử lý các node văn bản một cách riêng rẽ từ các thể hiện của các
thành phần HTML. Các node văn bản không đ−ợc chỉ định kiểu từ tr−ớc và do
đó chúng chiếm rất ít tài nguyên. Cũng có thể chỉ định kiểu cho văn bản trên
thông qua thành phàn DOM chứa nó.
Mỗi một nde đ−ợc tạo ra sẽ phải đ−ợc gắn vào văn bản tr−ớc khi có thể nhìn
thấy nó trong cửa sổ trình duyệt. Ph−ơng thức node DOM appendChidl() thực
hiện chức năng này.
el.appendChild(childEl)
Nh− vậy, với 3 ph−ơng thức createElement(), createTextNode(), và
appendChild() chúng ta đã có thể thêm cấu trúc mới vào một tài liệu.
4.4 Thêm các kiểu dáng cho tài liệu
Chúng ta có thể biến đổi các thành phần trong một trang web thông qua
DOM, ví dụ nh− vị trí, chiều cao, độ rộng, màu sắc, đ−ờng bao… Việc thay
đổi thuộc tính này cho phép chúng ta điều khiển đ−ợc tốt hơn. Bên cạnh đó
trình duyệt web cung cấp chúng ta những tính toán chính xác trên JavaScript
tại giao diện mức thấp.
*) Đặc tính tên lớp (ClassName)
Khi chúng ta định nghĩa các thành phần mà ta tạo trong code, ta có thể
áp dụng CSS, bằng việc sử dụng đặc tính className của node DOM.
-35-
Ví dụ áp dụng quy tắc thể hiện đ−ợc định nghĩa tr−ớc bởi lớp declared cho
node hello trong DOM
Hello.className=’declared’
Nhờ đó ta có thể đăng ký nhiều quy tắc CSS cho một node trong một thời
điểm và có thể quản lý các kiểu phức tạp khác nhau thông qua bảng tính.
*). Đặc tính kiểu loại (style)
Trong một tình huống khác, chúng ta muốn thực hiện thay đổi đối với
một kiểu dáng của một thành phần nào đó, có thể kiểu dáng này đã đ−ợc áp
dụng thông qua CSS. Các node DOM cũng chứa một mảng đ−ợc gọi là style,
chứa tất cả các chi tiết về kiểu dáng của node.
Bằng việc sử dụng các ph−ơng pháp ở trên, chúng ta có thể tạo ra các
node DOM mới cũng nh− kiểu dáng của chúng. Đây chính là một trong những
công cụ hữu hiệu nhất đ−ợc sử dụng trong việc viết web tự động.
4.5 Shortcut: Sử dụng đặc tính trong HTML
Các ph−ơng thức ta đã mô tả ở trên cung cấp điều khiển mức thấp thông
qua DOM API. Mặc dù vậy các hàm createElement() và appendChild() cung
cấp API để xây dựng một tài liệu và nó chỉ phù hợp với các tình huống trong
đó tài liệu đ−ợc tạo ra theo cấu trúc thông th−ờng mà có thể đ−ợc mã hoá
giống nh− một thuật toán. Tất cả các thành phần DOM của trình duyệt web
thông dụng cúng hỗ trợ đặc tính tên là innerHTML, cho phép đăng ký nội
dung thuộc tính của một đối t−ợng theo cách đơn giản. InnerHTML là một
chuỗi, thể hiện một node con giống nh− một dấu HTML. Ví dụ chúng ta có
thể viết lại hàm addNode sử dụng innerHTML nh− sau:
Function addListItemUsingInnerHTML (el, text) {
el.innerHTML+=”div class=’programmed’>”+text+””
-36-
thành phần cũng nh− node văn bản gần đó có thể đ−ợc thêm vào trong
một trạng thái đơn. Cần chú ý tới phần +=, nó không đ−ợc đăng ký một cách
trực tiếp. Khi xoá node có sử dụng ph−ơng thức innerHTML, chúng ta cần
trích và parse chuỗi. InnerHTML ít phù hợp với các ứng dụng đơn kiểu này.
Nếu một node có thay đổi nhiều, khi đó các node DOM sẽ đ−ợc sử dụng.
V. Tải dữ liệu sử dụng kỹ thuật XML
Trong khi làm việc với một ứng dụng, đặc biệt là một ứng dụng của
n−ớc ngoài, ng−ời dùng sẽ phải t−ơng tác liên tục với ứng dụng. Việc duy trì
t−ơng tác một cách liên tục ở đây rất quan trọng. Trong khi thực hiện hoạt
động dài, nếu mọi đối t−ợng bị khóa, hoạt động của ng−ời dùng sẽ bị gián
đoạn. –Ph−ơng thức gọi dị bộ đ−ợc đ−a ra nh− là cách để cải thiện hoạt động
giao diện ng−ời dùng khi thực hiện những phiên giao dịch hoặc các hoạt động
dài. Do tác dụng của trễ mạng nên ta coi tất cả các cuộc gọi tới server đều là
các cuộc gọi dài.
Một thực tế ta phải chấp nhận đó là tài liệu sẽ bị khoá cho tới khi server
trả lời. Để có thể làm việc liên tục với tài liệu ta có một số cách thức thực hiện
một yêu cầu dị bộ tới ng−ời dùng. Hai kỹ thuật đ−ợc sử dụng đó là IFrames,
và trong thời gian gần đây là kỹ thuật XMLHttpRequest.
5.1 IFrames
Iframe là cụm từ viết tắt của: inline, có nghĩa là nó là một phần của
một lớp tài liệu khác có trong một tập Frame. Một IFrame đ−ợc thể hiện bằng
một thành phần trong cây DOM, do vậy ta có thể di chuyển, định lại kích cỡ,
ẩn…trong khi vẫn nhìn thấy trang. B−ớc ngoặt đến khi ng−ời ta bắt đầu nhận
ra rằng một IFrame có thể đ−ợc định dạng sao cho nó hoàn toàn ẩn đi. Điều
này cho phép nó cập nhật dữ liệu trong trang gốc, trong khi ng−ời dùng vẫn
đang hoạt động. Cơ chế để tiếp xúc với server là dị bộ.
-37-
Cũng giống nh− các thành phần DOM khác, ta có thể khai báo một
IFrame trong HTML cho một trang hoặc nó có thể tự động tạo ra khi sử dụng
hàm document.creatElement(). Trong tr−ờng hợp đơn giản, ta chỉ muốn một
IFrame để tải dữ liệu, ta khai báo nó nh− là một phần của tài liệu, tạo một điều
khiển bằng cách sử dụng document.getElementById():
window.onload=function(){
var iframe=document.getElementById(‘dataFeed’);
var src=’datafeeds/mydata.xml’;
loadDataAsynchronously(iframe,src);
}
function loadDataAsynchronously(iframe,src){
……………………………..
}
ở đây IFrame đ−ợc ẩn đi. Ta định dạng ẩn bằng việc thiết lập độ rộng và
chiều cao của nó bằng 0. Ta cũng có thể sử dụng kiểu display : none. Tuy
nhiên. Ta cần đợi tài liệu đ−ợc load hết tr−ớc khi tìm kiếm IFrame qua hàm
gọi getElementById() trong hàm điều khiển window.onload. Ta cũng có thể
tạo các IFrame theo yêu cầu theo cách sau:
function fetchData(){
var iframe=document.creatElement(‘iframe’);
iframe.className=’hiddentDataFeed’;
-38-
document.body.appendChild(iframe);
var src=’datafeeds/mydata.xml’;
loadDataAsynchronously(iframe,src);
}
Điểm thuận lợi ở đây là ta có thể l−u tất cả các mã có liên quan tới việc yêu
cầu dữ liệu tại một địa điểm, tốt hơn là phải duy trì tính đồng bộ ID của node
DOM giữa giữa kịch bản và HTML.
Hình 2.3: Chuỗi các sự kiện xử lý dị bộ trong trang web.
Hoạt động ng−ời dùng liên quan tới một yêu cầu từ một đối t−ợng yêu
cầu ẩn (một Iframe hoặc một đối t−ợng XMLHttpRequest ), đây là một lệnh
gọi tới server dị bộ. Ph−ơng thức trả về rất nhanh, giao diện ng−ời sử dụng bị
khoá trong một thời gian rất ngắn.
5.2 Các đối t−ợng XmlDocument và XMLHttpRequest
Các IFrame có thể đ−ợc sử dụng để yêu cầu dữ liệu.Tuy vậy những
phiên bản trình duyệt web sau này đã đ−a vào các đối t−ợng cho mục đích
truyền dữ liệu dị bộ và chúng thuận tiện hơn so với các IFrame.
-39-
Các đối t−ợng XmlDocument và XMLHttpRequest là những đối t−ợng mở
rộng không chuẩn tắc của DOM đ−ợc phần lớn các nhà trình duyệt web hỗ
trợ. Chúng đ−a ra lộ trình thực hiện các cuộc gọi dị bộ, do chúng đ−ợc thiết kế
để đ−a dữ liệu vào trong môi truờng gốc. Cả hai đối t−ợng trên đều do
Microsoft tạo ra, có trong các đối t−ợng JavaScript trong trình duyệt IE. Các
trình duyệt khác sử dụng các đối t−ợng t−ơng tự, và các lệnh gọi API. Trong
hai loại trên, XMLHttpRequest đ−ợc sử dụng nhiều hơn, cung cấp nhiều điều
khiển hơn. Do đó ta chỉ sử dụng XMLHttpRequest.
Hàm sau đây tạo ra một đối t−ợng XMLHttpRequest
Function getXMLDocument(){
Var xDoc=null;
If (document.implement
&& document.implementation.createDocumnet){
xDoc=document.implementation.createDocumnet(“”,””,null);}
else if (typeof ActiveXObject !=”undefined”){
var msXmlAx==null;
try{
msXmlAx=new ActiveXObject(“Msxml12.DomDocument”);}
catch (e){
msXmlAx=new ActiveXObject(“Msxml.DomDocument”);
}
xDoc=msXmlAx;
}
if (xDoc==null || typeof xDoc.load==”undefined”){
xDoc=null;}
return xDoc;
}
-40-
Hàm trên tạo ra một đối t−ợng XmlDocument với một API mà hầu hết
các trình duyệt ngày nay có thể nhận biết đ−ợc.
Ch−ơng trình kiểm tra xem đối t−ợng có hỗ trợ đặc tính cần thiết để tạo
ra một đối t−ợng XmlDocument. Nếu ch−ơng trình không tìm đ−ợc các hỗ trợ,
ch−ơng trình sẽ trả về đối t−ợng ActiveXlDocument().
Cần chú ý rằng ta có thể kiểm tra các phiên bản cũng nh− thông tin của các
trình duyệt. Nhờ đó giúp cho việc thực hiện kịch bản đ−ợc dễ dàng hơn.
Function getXMLHTTPRequest() {
Var xRequest=null;
If (window.XMLHttpRequest){
xRequest=new XMLHttpRequest();
}else if (typeof ActiveXObject !=”ubdefined”){
xRequest=new ActiveXObject(“Microsoft.XMLHTTP”);
}
return xRequest;
}
Đây là cách thức thực hiện hàm XMLHttpRequest đơn giản hơn. Trong
hàm này ta có sử dụng lệnh phát hiện đối t−ợng để kiểm tra các hỗ trợ đối
t−ợng HttpRequest, nếu không có các hỗ trợ ch−ơng trình sẽ tự động trả về
một ActiveX. Nếu nh− trình duyệt không hỗ trợ cả hai, khi đó ch−ơng trình sẽ
trả về giá trị null.
Nh− vậy, ta có thể tạo ra một đối t−ợng để gửi yêu cầu tới server giúp chúng
ta.
-41-
5.3 Gửi yêu cầu tới server
Việc gửi yêu cầu tới server thông qua đối t−ợng XMLHttpRequest khá
đơn giản. Ta chỉ cần chuyển URL tới trang server mà tạo ra dữ liệu cho chúng
ta. Ví dụ:
Function sendRequest(url,params,HttpMethod){
If (!HttpMethod){
HttpMethod=”POST”;
}
var req=getXMLHTTPRequest();
if (req){
req.open(HttpMethod,url,true);
req.setRequetHeader
(“content-Type”,
“application/x-www-form-urlenclosed”);
req.send(params);
}
}
XMLHttpRequest hỗ trợ một số l−ợng lớn các cú pháp gọi HTTP, bao gồm
các tham số hàng đợi cho các trang đ−ợc tạo tự động (Ví dụ nh− là các tham
số CGI, các tham số ServeletRequest hoặc các argument Forms phụ thuộc vào
sự phat triển của server.)
5.4 Sử dụng các hàm gọi ng−ợc để giám sát các yêu cầu.
B−ớc thứ 2 của quá trình điều khiển truyền thông dị bộ là thiết lập một điểm
gần nhất trong đoạn mã để nhận kết quả của một lệnh gọi khi nó kết thúc. ở
đây ta sẽ đăng ký một hàm gọi ng−ợc, thực chất là một đoạn mã có liên quan
khi có các kết quả, tại một số điểm ch−a chỉ định tr−ớc trong t−ơng lai. Hàm
-42-
window.onload mà chúng ta đề cập ở trên trong đoạn 2.9 là một hàm gọi
ng−ợc.
Các hàm gọi ng−ợc phù hợp với ch−ơng trình đ−ợc điều khiển qua sự
kiện, đ−ợc sử dụng trong hầu hết các công cụ trong giao diện ng−ời dùng – ấn
bàn phím, click chuột… sẽ xảy ra tại những điểm không chính xác trong
t−ơng lai, và các nhà lập trình kiểm soát nó bằng việc viết một hàm để quản lý
các sự kiện đó khi chúng xảy ra. Khi viết các sự kiện giao diện ng−ời dùng
bằng JavaScript, ta đăng ký các hàm onkeypress, onmouseover, cũng nh− các
đặc tính theo tên của đối t−ợng. Khi viết các hàm gọi ng−ợc yêu cầu server,
chúng ta đ−a thêm các đặc tính nh− onload và onreadystatechange.
Một điều khiển hàm gọi ng−ợc (callback fuction ) đơn giản nh− sau:
Var READY_STATE_UNINITIALIZED=0;
Var READY_STATE_LOADING=1;
Var READY_STATE_LOADED=2;
Var READY_STATE_INTERACTIVE=3;
Var READY_STATE_COMPLETE=4;
Var req;
Function sendRequest(url,params,HttpMethod){
If (!HttpMethod){
HttpMethod=”GET”;
}
req=getXMLHTTPRequest();
if (req){
req.onreadystatechange=onreadyStateChange;
req.open(HttpMethod,url,true);
req.setRequestHeader
(“Content-Type”,”application/x-www-form-urlenclose”);
}
}
-43-
function onreadyStateChange(){
var ready=req.readyState;
var data=null
if (ready=READY_STATE_COMPLETE){
data=req.responseText;
}else{
data=”loading…[“+ready+”]”;
}
//…do something with the data…
}
Ta định nghĩa một hàm điều khiển gọi ng−ợc onReadystateChange().
Có một số giá trị cho trạng thái sẵn sàng. Ta đăng ký các biến cho từng giá trị
đó. Trong phần này, ch−ơng trình chỉ kiểm tra giá trị 4, t−ơng ứng với trạng
thái yêu cầu đã hoàn thành.
ở đây, ta khai báo đối t−ợng yêu cầu là biến toàn cục. Nhờ đó giúp ta
duy trì mọi thứ một cách đơn giản trong khi chúng ta đánh địa chỉ cơ chế của
đối t−ợng XMLHttpRequest, tuy nhiên chính điều này sẽ dẫn đến một số vấn
đề cho ta nếu ta cố gằng duy trì một số yêu cầu cùng một lúc. Ta sẽ xử lý vấn
đề này trong phần sau.
-44-
Ch−ơng II: Cách Sử dụng Ajax trong ứng dụng
I. Phát triển và duy trì cơ sở dữ liệu
1.1. Giới thiệu:
Để xây dựng một ứng dụng Ajax hoàn chỉnh, ta cần phải có những công
cụ để thực hiện công việc. Một trong những đối t−ợng cần quan tâm đầu tiên
đó là những cách thức quản lý cơ sở dữ liệu lớn và phức tạp. Do Ajax là một
công cụ đột phá trong lĩnh vực xây dựng web cho nên cần phải quản lý Ajax
theo một cách thức riêng. Cách thức tốt nhất để thực hiện các công việc đó
chính là xây dựng hệ thống dựa trên những mô hình thiết kế.
Công cụ chính mà ta sử dụng là refractoring. Refactoring giúp duy trì
mã ch−ơng trình đ−ợc trong sáng, bảo vệ và cho phép ta đối mặt với những
thay đổi theo yêu cầu mà không sợ bất cứ điều gì. Ta cần nhận thức một điều
rằng refactoring cũng nh− các mô hình thiết kế th−ờng đ−ợc sử dụng tại những
vị trí mà chúng có thể phát huy đ−ợc hiệu quả của mình. Để công việc đ−ợc
thực hiện đạt kết quả mong muốn, yêu cầu quyết yếu là tìm ra đ−ợc những mô
hình thiết kế ứng dụng hiệu quả, dùng đúng lúc, đúng chỗ.
1.2 Refactoring
Trong các đoạn ch−ơng trình, việc thực hiện yêu cầu từ client đến server
thông qua XMLHttpRequest là quan trong nhất. Yêu cầu đó đ−ợc thể hiện qua
hàm senRequest(). SendRequest() kích hoạt hàm initHttpRequest() để tìm đối
t−ợng XMLHttpRequest. Hàm trả về là onReadyState(). Đối t−ợng
XMLHttpRequest đ−ợc định nghĩa là một biến toàn cục, do đó hàm trả về có
thể sử dụng nó. Quá trình điều khiển sau đó bao gồm việc điều khiển các
thông tin trạng thái đối t−ợng yêu cầu và các thông tin gỡ rối.
-45-
Về nguyên tắc, khi thực hiện một yêu cầu tới server, điều ta quan tâm
chính là những kết quả trả về ứng với những hoạt động của ng−ời dùng. Để
đ−a hoạt động của ng−ời dùng vào đoạn ch−ơng trình hiện tại, ta cần phải thay
đổi các xử lý của hàm onReadyState().
Việc sử dụng các biến toàn cục cũng là một vấn đề quan trọng. Nếu nh−
ta thực hiện một vài yêu cầu tới server cùng một lúc, khi đó ta cần phải tạo ra
khả năng đăng ký các điều khiển cho các trả về của từng yêu cầu đó.
Do ta có một danh sách các tài nguyên cần cập nhật, nếu ta tập trung vào một
tài nguyên và bỏ qua các tài nguyên khác. Điều quan trọng ta cần biết chúng
là gì và chúng hoạt động nh− thế nào?
Với lập trình h−ớng đối t−ợng, ng−ời ta xử lý các hàm yêu cầu trong
một đối t−ợng. JavaScript hỗ trợ các loại mã lập trình h−ớng đối t−ợng giúp ta
có thể thực hiện công việc đ−ợc dễ dàng. Gọi đối t−ợng là ContentLoader,
thực hiện tải nội dung từ server. Về lý t−ởng ta có thể tạo ra một đối t−ợng,
chuyển nó vào trong URL, khi đó yêu cầu sẽ đ−ợc gửi đi. Ta có thể chuyển
giá trị mẫu tới phần điều khiển gọi ng−ợc của ng−ời dùng để thực hiện, nếu
nh− tài liệu đ−ợc tải thành công. Trong tr−ờng hợp không thành công, sẽ có
hoạt động khác đ−ợc thực hiện. Lệnh gọi đối t−ợng có thể có dạng nh− sau:
Var loader net.ContentLoader (‘mydata.xml’,parseMyData)
trong đó parseMyData là một hàm gọi ng−ợc đ−ợc sử dụng khi tải dữ liệu
thành công.
1.3. Các mô hình sử dụng refactoring
Trong từng tr−ờng hợp khác nhau ta có những cách thức sắp xếp lại
khác nhau, làm giảm những khó khăn, nhận dạng các đối t−ợng trong giải
pháp mà có thể đ−ợc sử dụng lại đ−ợc.
-46-
Trong một số tr−ờng hợp cụ thể, những mô hình thiết kế nhỏ tỏ ra khá hiệu
quả. Đó là mô hình Cross-browser, mô hình tập lệnh, mô hình singleton. Các
mô hình này còn đ−ợc gọi là các mô hình kiến trúc.
- Cross-browser: các mô hình t−ơng thích và Facade.
Hình 2.4: Chu trình thực hiện trong mô hình Facade
- Quản lý các điều khiển sự kiện: mô hình giám sát
Hình 2.5:Phân chia trách nhiệm trong mô hình Giám sát
-47-
- Sử dụng lại các điều khiển hoạt động ng−ời dùng: Mô hình tập lệnh
Hình 2.6:Mô hình tập lệnh trong ứng dụng xử lý văn bản
- Duy trì chuẩn cho tài nguyên: Mô hình singleton
Hình 2.7: Mô hình singleton
-48-
II. Mô hình MVC: Model-View- Controller
2. 1 Giới thiệu
Mô hình MVC: Mô hình- Khung nhìn - Điều khiển (Model-View-
Controller) là một mô hình giúp ta tổ chức dự án Ajax theo nhiều cách khác
nhau, giúp dễ dàng mã hoá và quản lý các dự án này. MVC đ−ợc sử dụng để
chia tách các phần ch−ơng trình t−ơng tác với ng−ời dùng với phần thực hiện
các công việc khác trong ứng dụng.
Mô hình MVC có 3 vai trò quan trọng trong hệ thống. Model thể hiện các vấn
đề của ứng dụng. Bộ xử lý từ sẽ là mô tả một tài liệu; một ứng dụng bản đồ sẽ
mô tả các điểm trên một l−ới.
View là phần ch−ơng trình mà thể hiện những thứ với ng−ời dùng: dạng
đầu vào, tranh ảnh, dạng text hoặc widgets. View không cần đồ hoạ. Trong
ch−ơng trình đ−ợc cài âm, dạng âm thanh cũng là View.
Yêu cầu đầu tiên đối với MVC là View và Model không trao đổi với
nhau, bởi vì đấy là nơi mà Controller hoạt động. Khi ng−ời dùng ấn một phím
hoặc điền vào một mẫu nào đấy, khi đó View sẽ trao đổi thông tin với bộ điều
khiển. Bộ điều khiển khi đó sẽ thông tin cho Model và mô tả thời điểm những
thay đổi trong View yêu cầu Model cập nhận.
Hình 2.8: Thành phần chính trong mô hình MVC
-49-
Mô hình MVC th−ờng đ−ợc áp dụng cho các ứng dụng web cơ bản theo
những cách đặc biệt. Khi một ứng dụng Ajax đang đ−ợc chạy và yêu cầu dữ
liệu từ server, cơ chế của việc dành dữ liệu là khá giống với cách thức của ứng
dụng web truyền thống .
2. 2 Web server MVC
Nhìn chung, các ứng dụng web đã quá quen với mô hình MVC. Một
ứng dụng web tạo ra một số tách biệt giữa giữa View và Model, do chúng nằm
trên các máy khác nhau. Tuy nhiên ta có thể viết một ứng dụng web mà có
khả năng kết hợp các mô hình này với nhau, tại một số điểm nhất định.
Hầu hết các thành phần của MVC trên Web thực hiện xử lý trang HTML, và
ch−ơng trình mà tạo ra nó ( ví dụ là View ) khác xa so với những gì ng−ời
dùng thực sự nhìn thấy khi trang này yêu cầu. Trong tr−ờng hợp một ứng dụng
Ajax cung cấp dữ liệu cho một client JavaScript, View từ ứng dụng này chính
là tài liệu XML sẽ đ−ợc trả về cho client d−ới dạng đáp ứng HTTP.
Hình 2.9:Cách thức thực hiện một yêu cầu qua mạng
2.2.1 Các vấn đề nảy sinh với khả năng sử dụng lại các đoạn kịch bản.
Trong các ứng dụng web, các thành phần của một ứng dụng th−ờng
đ−ợc lặp đi lặp lại. Với Ajax, công việc của ta đơn giản chỉ là sử dụng lại các
đoạn kịch bản đã có sẵn. Tuy nhiên khi áp dụng các đoạn kịch bản khác nhau
-50-
vào những vị trí khác nhau trong một ứng dụng cũng gặp một số vấn đề nảy
sinh. Bao gồm:
- V−ớng mắt với hàng đợi SQL trong trang. Nếu muốn tìm kiếm theo loại hoặc
từ khoá, cần phải thay đổi lại việc tạo SQL. Ta có thể phải chịu một tập trạng
thái if tích luỹ qua thời gian khi chúng ta càng thêm nhiều chức năng tìm
kiếm, và tất nhiên số l−ợng các tham số tìm kiếm sẽ tăng lên.
- Gặp khó khăn với dạng dữ liệu XML trong trang. Có một vài lý do tại sao ta
muốn thay đổi dạng dữ liệu.
- Khó khăn với cơ sở dữ liệu đ−ợc sử dụng để tạo ra XML. Do ta duy trì một
cơ sở dữ liệu kết nối mở mọi lúc khi đang tạo XML, nên sẽ không có bất cứ
thao tác gì phức tạp trong vòng lặp while(), vì thế kết nối sẽ không đ−ợc lâu,
thậm chí còn xuất hiện hiện t−ợng thắt cổ chai. Cũng nh− vậy, cơ sở dữ liệu để
tạo XML chỉ làm việc khi và chỉ khi ta xử lý cơ sở dữ liệu của chúng ta giống
nh− là cấu trúc dữ liệu phẳng.
2.2.2. Refactoring lại mô hình
Để giải quyết những v−ớng mắc trên, chúng ta thực hiện việc quản lý cơ
sở dữ liệu thông qua các mô hình quan hệ đã đ−ợc chuẩn hoá. Các dữ liệu
cũng nh− mối quan hệ giữa chúng đ−ợc xử lý thông qua các công cụ định bản
đồ quan hệ-đối t−ợng. Chúng ta có các công cụ ORM (Object Relational
Mapping). Một ORM tự động dịch giữa cơ sở dữ liệu và các đối t−ợng trong
bộ nhớ, thực hiện quản lý cơ sở dữ liệu SQL. Các nhà lập trình PHP thích
PEARDB_DataObject, Easy PHP Data Object (EZPDO) hoặc Metastorage.
Các nhà lập trình Java thích .NET.
2.2.3. Chia tách nội dung từ thể hiện
Trong tr−ờng hợp chúng ta phải duy trì nhiều trang web, nếu chúng ta
muốn thay đổi định dạng XML tại một vị trí thì chúng ta phải thay đổi cho
-51-
mọi nơi. Trong tr−ờng hợp phức tạp hơn, nếu chúng ta muốn duy trì nhiều
định dạng, trong đó một cho danh sách ngắn và danh sách chi tiết để mô tả
các khách hàng và định dạng khác cho ứng dụng stock, khi đó chúng ta muốn
định nghĩa từng dạng một và cung cấp một bản đồ trung tâm cho chúng.
Một h−ớng tiếp cận thông dụng là ngôn ngữ tạm thời, là hệ thông mà
chấp nhận tài liệu text chứa một số các markup mà hoạt động nh− là nơi chứ
các biến thực trong suốt quá trình thực hiện. PHP, ASP, và JSP là những ngôn
ngữ tạm thời, đ−ợc viết nh− là nội dung của trang web với mã đ−ợc nhúng,
khác với mã mà nội dung đ−ợc nhúng nhìn thấy trong một Ja._.
Các file đính kèm theo tài liệu này:
- LA3208.pdf