Tải bản đầy đủ (.pdf) (128 trang)

Thử nghiệm và đánh giá hiệu năng một số phương pháp truy nhập cơ sở dữ liệu WEB

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.04 MB, 128 trang )


2
MỤC LỤC
LỜI CẢM ƠN 1
MỤC LỤC 2
TÓM TẮT NỘI DUNG Error! Bookmark not defined.
MỞ ĐẦU 4
Chương 1 : Lập trình phân tán truyền thống bằng Java 15
1.1. Sơ lược về ngôn ngữ Java 15
1.2. Khái niệm lập trình phân tán 17
1.3. Các phương pháp lập trình phân tán phi thủ tục 18
1.3.1. Phương pháp lập trình socket trong Java 18
1.3.2. Phương pháp lập trình servlet 25
1.4. Các phương pháp lập trình phân tán hướng thủ tục 32
1.4.1. Lập trình RMI 32
1.4.2. Lập trình CORBA trong Java 38
1.5. Kết luận 48
Chương 2 : Tác tử di động 49
2.1. Tổng quan về tác tử di động 49
2.2. Các khái niệm cơ bản về tác tử di động 50
2.2.1. Tác tử và môi trường 50
2.2.2. Khởi tạo và hủy bỏ tác tử 51
2.2.3. Di chuyển tác tử 52
2.2.4. Giao tiếp giữa các tác tử 54
2.3. Lập trình tác tử di động Java với Aglets 55
2.3.1. Tác tử di động với Java 55
2.3.2. Kiến trúc Aglet 57
2.4. Lập trình tác tử di động Java với JADE 61
2.4.1. Giới thiệu sơ lược về JADE 61
2.4.2. Tạo tác tử 63
2.4.3. Xử lý sự kiện 67


2.4.4. Truyền thông tác tử 70
2.4.5. Di chuyển tác tử 72
2.5. So sánh giữa Aglets và JADE 79
2.6. Kết luận 80
Chương 3 : Các phương pháp truy nhập cơ sở dữ liệu Web 82
3.1. Sơ lược về truy nhập cơ sở dữ liệu Web 82
3.2. Các phương pháp truy nhập cơ sở dữ liệu Web truyền thống 84
3.2.1. Phương pháp Java Socket 84
3.2.2. Phương pháp servlet 85
3.2.3. Phương pháp RMI 87
3.2.4. Phương pháp Java CORBA 88
3.3. Phương pháp sử dụng tác tử di động 91
3.3.1. Sử dụng một tác tử di động truy nhập một cơ sở dữ liệu Web 91
3.3.2. Sử dụng một tác tử di động truy nhập nhiều cơ sở dữ liệu Web 93
3.3.3. Sử dụng hai tác tử di động truy nhập nhiều cơ sở dữ liệu Web 94
3.4. Kết luận 96
Chương 4 : Thử nghiệm và đánh giá hiệu năng 98
4.1. Tiêu chí, môi trường và phương pháp đánh giá 98

3
4.2. Thực hiện đánh giá 98
4.2.1. Thao tác với kích cỡ dữ liệu nhỏ 98
4.2.2. Thao tác với kích cỡ dữ liệu lớn 100
4.3. So sánh phương pháp sử dụng một tác tử và nhiều tác tử di động truy nhập nhiều
cơ sở dữ liệu Web. 104
4.4. Kết luận 106
KẾT LUẬN 107
1. Kết quả luận văn đã đạt được 107
2. Phương hướng tiếp theo 108
Tài liệu tham khảo 109

Phụ lục 1 : Các cổng giao tiếp 111
Phụ lục 2 : Một số giao diện chính của chương trình 112
Phụ lục 3 : Một số đoạn mã nguồn chương trình 120


4

MỞ ĐẦU

Công nghệ Web đã mang lại cho xã hội nhiều lợi ích to lớn trên nhiều lĩnh vực
ngay từ khi nó ra đời, trong đó phải kể đến sự cung cấp thông tin của những trang
Web trên mạng, thông qua các trang Web người ta tìm kiếm được các thông tin
mong muốn một cách thuận lợi, nhanh chóng, chính xác mà không phải lo lắng đến
các trở ngại về khoảng cách không gian và thời gian.
Trong thời đại bùng nổ thông tin hiện nay thì các trang Web tĩnh không còn
đáp ứng được nhu cầu cập nhật thông tin ngày càng cao của con người, vì vậy
chúng đã dần được thay thế bởi các trang Web động. Sự hoạt động của các trang
Web động thường được kết hợp với một cơ sở dữ liệu mà ta thường gọi là cơ sở dữ
liệu Web.
Các phương pháp truy nhập cơ sở dữ liệu Web dựa trên ngôn ngữ lập trình
Java như Java socket, servlet, RMI và Java CORBA [21] đều hoạt động theo mô
hình truyền thông báo và kiến trúc clients/server, chúng có nhược điểm chung phải
duy trì kết nối giữa máy client và máy server trong quá trình truy nhập cơ sở dữ
liệu, dẫn đến chiếm dụng đường truyền và làm lãng phí băng thông.
Những năm gần đây, một công nghệ mới đã ra đời và có những bước phát
triển mạnh mẽ, đó là công nghệ tác tử. Riêng tác tử di động trong nhiều trường hợp
đã chứng tỏ là giải pháp cực kỳ hữu hiệu cho các vấn đề xử lý phân tán. Một trong
các vấn đề về xử lý phân tán được đề cập và giải quyết trong luận văn này là sử
dụng tác tử di động để truy nhập nhiều cơ sở dữ liệu Web.
Tác tử di động là những chương trình có khả năng tự di chuyển cùng với mã

lệnh, dữ liệu và trạng thái hiện thời từ một nơi này đến một nơi khác trên mạng, khi
di chuyển tới đích tác tử di động được khôi phục và hoạt động trở lại. Tác tử di
động không cần duy trì thường xuyên kết nối giữa nó và máy đã gửi tác tử di động

5
đi, do đó tiết kiệm băng thông mạng một cách đáng kể (nhất là đối với các mạng tốc
độ thấp và đắt tiền như mạng không dây).
Công nghệ tác tử di động đã được áp dụng và giải quyết tốt nhiều vấn đề thuộc
nhiều lĩnh vực khác nhau:
 Tác tử di động trong tìm kiếm thông tin trực tuyến [4]: Tác tử di động giúp
cho việc tìm kiếm tài liệu trực tuyến được thực hiện từ một máy tính không có
quyền truy nhập để tìm kiếm tài liệu một cách trực tiếp, phải thông qua một máy
tính trung gian nhưng không cần có sự can thiệp của dùng trên máy tính trung gian.
 Tác tử di động trong truy nhập cơ sở dữ liệu từ trình duyệt Web [21]:
Phương pháp truy nhập cơ sở dữ liệu từ trình duyệt Web giúp đơn giản hóa thao tác
sử dụng cho người dùng, mọi thao tác cài đặt phức tạp được thực hiện tại phía
server và trong suốt đối với người dùng. Người dùng chỉ cần biết địa chỉ của trang
chủ Web và truy nhập vào, một tiểu dụng Java đặc biệt được tải từ máy server về
máy client, sau đó tiểu dụng được người dùng kích hoạt để tạo ra tác tử di động, tác
tử di động được gửi đến nơi có dữ liệu để lấy dữ liệu mang về. Việc sử dụng tác tử
di động sẽ mang lại một số lợi ích:
- Tiết kiệm tài nguyên bộ xử lý
- Tiết kiệm không gian do tác tử di động chỉ hoạt động tại một nơi trong mỗi
thời điểm nhất định.
- Giảm được lưu lượng trên mạng do các đoạn mã của tác tử thường nhỏ hơn
rất nhiều so với khối lượng dữ liệu mà nó xử lý.
 Tác tử di động trong xử lý phân tán [5]: Các tài nguyên trong mạng máy tính
trong đó có dữ liệu được lưu trữ trên nhiều máy khác nhau. Việc xử lý dữ liệu cục
bộ tại một máy có thể không thực hiện được bởi vì chương trình xử lý và dữ liệu
cần xử lý không thuộc cùng một máy. Một phương pháp xử lý mới được đề xuất là

xử lý phân tán. Có nhiều phương pháp xử lý phân tán truyền thống như:

6
- Mã lệnh có thể tham chiếu : Một tiến trình đang hoạt động trên máy này
gửi thông báo đến một máy khác kích hoạt việc thực hiện một mã lệnh nào đó nằm
sẵn trên máy đó. Các mô hình truyền thông báo, gọi thủ tục từ xa và gọi phương
thức từ xa đều thực hiện theo cơ chế này.
- Mã lệnh có thể dịch chuyển : Một tiến trình đang hoạt động trên máy nguồn
gửi thông báo đến máy đích để máy đích thực hiện một mã lệnh nào đó do máy
nguồn chuyển tới.
- Mã lệnh theo yêu cầu : Một tiến trình đang chạy trên máy A gửi một thông
báo đến máy B yêu cầu lấy về để thực hiện trên máy A một mã lệnh nào đó nằm
trên máy B.
- Mã lệnh di động : Một tiến trình đang hoạt động trên máy nguồn di chuyển
đến máy đích và tiếp tục thực hiện ở đó.
Tác tử di động có cái gì đó giống với mã lệnh di động nhưng các khái niệm
này không hoàn toàn đồng nhất với nhau. Mã lệnh di động là một cơ chế thực hiện
phân tán, còn thuật ngữ tác tử di động lại dùng để chỉ các tác tử hoạt động theo
chính cơ chế này. Tác tử di động là những chương trình không bị ràng buộc với nơi
chúng bắt đầu thực hiện. Chúng có thể di chuyển từ nơi này sang nơi khác trên
mạng. Tính di động cho phép chúng đến được những nơi thích hợp nhất cho việc
thực hiện nhiệm vụ. Tác tử có thể được xem như là đối tượng chứa dữ liệu và mã
lệnh, đồng thời có mục đích và tính chủ động nhất định trong hoạt động.
 Tác tử di động trong quản trị mạng Internet [2]: Với tốc độ phát triển như vũ
bão của mạng Internet, hệ thống quản lý mạng trở nên rất phức tạp. Các sự cố trên
mạng luôn luôn có nguy cơ xảy ra: việc tràn dữ liệu trên mạng đòi hỏi người quản
lý giám sát cần đưa ra giải pháp xử lý hữu hiệu. Lỗi cần phải được chẩn đoán một
cách nhanh chóng, chính xác và được tự động sửa hoặc thông báo đến người điều
hành và đưa ra một số khuyến nghị về cách giải quyết. Trong mạng Internet, người
điều hành mạng thường phải làm việc từ xa với rất nhiều thiết bị (thường là ngồi ở

trạm điều hành), để có thể nắm bắt được tính đa dạng của các thành phần mạng thì

7
các ứng dụng quản lý cần làm việc với nhiều giao diện hoặc các công cụ. Các hệ
thống quản lý mạng Internet thường là rất lớn và rất khó để duy trì hoạt động, sau
đây trình bầy một số lĩnh vực trong quản lý mạng Internet sử dụng tác tử di động:
- Quản lý lỗi
Phân tích chuẩn đoán hiện trạng mạng. Các phương thức được sử dụng để mô
hình hoá mạng đều có thể được sử dụng để phân tích chẩn đoán lỗi trong mạng.
Việc phát hiện các lỗi cũng là một quá trình xây dựng một mô hình đặc biệt của
mạng. Nếu các ràng buộc cho sự tìm kiếm phát hiện mô tả các xung đột được coi là
bình thường của các thành phần mạng, thì các tác tử kiểm tra các ràng buộc đó rồi
mới thực hiện chức nǎng phát hiện lỗi. Deglet có thể được sử dụng để phản ứng lại
kết quả phát hiện hoặc đưa ra các vấn đề nghi vấn. Chúng cố gắng thu thập thêm
các thông tin, thực hiện các bài kiểm tra mở rộng hoặc thi hành các tác vụ khôi
phục.
Các ràng buộc không hạn chế cho một thiết bị mạng đơn lẻ nào. Chúng có thể
mã hoá các thuật toán phức tạp với chức nǎng tìm kiếm phát hiện lỗi, và chỉ có giới
hạn về kích cỡ của netlet là liên quan trực tiếp đến khả nǎng di chuyển và khả thông
của mạng. Vấn đề đó có thể được giảm thiểu bằng cách tận dụng các ưu điểm của
Java, các kĩ thuật nén mã, và các phương thức thông minh. Các cơ sở về lý thuyết
hỗ trợ kĩ thuật cho hoạt động tác tử di động cũng đang được các tổ chức quan tâm
xúc tiến nghiên cứu.
Với sự phân bố tác tử, chúng ta có một "xã hội" các tác tử có mối quan hệ với
nhau mà nhu cầu cần thiết là phối hợp để phân chia mức độ thông minh cần thiết
cho việc phân tích và phát hiện lỗi trong mạng. Một số lượng nhất định các loại tác
tử tí hon được đưa vào mạng, mỗi một loại có thể nghiên cứu giải quyết một vấn đề
nào đó, và được giải quyết bằng cách tǎng cường giả thuyết theo sự quan sát của
một số lượng lớn các tác tử cùng loại. Như vậy để có giải pháp giải quyết vấn đề
trong mạng cần kết hợp các giả thuyết được đưa ra bởi mỗi loại tác tử.

Cả hai loại tác tử netlet và deglet cùng tuân theo một cách bảo mật cung cấp

8
trước nào đó có thể được cho phép thực hiện các hoạt động trên các thiết bị mạng .
Mỗi một netlet "tích cực" có thể được sử dụng để giải quyết một vấn đề nào đó một
cách tự động theo cách khôi phục ngay tức thì khi có thể. Người quản lí mạng sẽ
được thông báo về sự kiện xảy ra hoặc được cảnh báo nếu như sự khôi phục tự động
của tác tử không thực hiện được hoặc yêu cầu sự trợ giúp từ phía người điều hành.
Mức độ kĩ thuật của mạng sẽ giảm được phần nào các lỗi xuất hiện trên mạng.
Trong khi với các deglet, mà các tác vụ được uỷ quyền khi cần thiết thông qua sự
giao tiếp của tác tử với thực thể uỷ quyền thì với netlet, chúng có thể được gán cho
các tác vụ dựa theo quyền ưu tiên do người thiết kế tự đặt hoặc được khởi động tự
động như là một phần trong mạng, kết cấu tổ chức và mật độ các netlet được điều
khiển bởi các kĩ thuật bảo mật nào đó (ví dụ, tần suất di chuyển đến các nút mạng
có thể được đo và sử dụng để tái tạo hoặc kết thúc các netlet)
Sự bảo dướng duy trì từ xa với các thành phần mạng hỗn hợp Các tác tử di
động cần phải tương tác với các nút mạng thông qua một giao diện mà tại đó cung
cấp đầy đủ các phương tiện: bảo mật, truy nhập gián tiếp đến tài nguyên của nút
mạng và một số dịch vụ đi kèm khác. Giao diện này được gọi là thành phần quản lý
ảo (VMC-Virtual Managed Component): được thiết kế bởi nhà cung cấp thiết bị.
Nó có thể nằm ngay trong thiết bị hoặc trên proxy trong trường hợp thiết bị không
có khả nǎng chấp nhận tác tử di động. Trong thực tế, nhà cung cấp thiết bị mạng
thường trang bị một phương tiên cho VMC là khả nǎng tải được các dữ liệu về trình
điều khiển thiết bị (driver), và điều này làm cho việc quản lý các thiết bị được dễ
dàng hơn. Khi thiết bị được nối mạng, nó sẽ biết được các phương tiện có sẵn được
quảng bá trong mạng. Ví dụ, một tác tử làm nhiệm vụ tìm kiếm có thể sẽ yêu cầu
một danh sách các thiết bị được hỗ trợ trong mạng, người sử dụng dựa vào danh
sách các thiết bị này để kiểm tra một thiết bị cụ thể, nếu như thiết bị có trong danh
sách thì nó được cài đặt ngay trạm. Nó có thể thi hành trên trình duyệt Web hoặc
như một chương trình độc lập. Applet cung cấp dữ liệu và các chức nǎng thành

phần mà nhà cung cấp đã trang bị phù hợp với thiết bị: có thể đơn giản chỉ là danh
sách thiết bị đơn giản hoặc đồ hoạ của thiết bị phần cứng hoặc các dịch vụ.

9

Nếu thiết bị không cung cấp một applet đại diện, thì người điều hành phải điều
khiển thiết bị hoặc một thiết bị chung nhất (thường gọi là mặc định) được sử dung
thay thế. Đây cũng là giải pháp mà hiện nay các hệ thống quản lý mạng đang áp
dụng trong các tác tử. Một thiết bị không chỉ có phần đại diện được thực thi mà
chúng còn phải thực thi một giao thức truyền thông chẳng hạn như SNMP với
người quản lí, để có thể nhận được hoặc truyền đi các thông số về thiết bị. Chính
điều này một lần nữa đã góp phần làm cho việc quản lí mạng càng thêm lớn, phức
tạp và bất tiện hơn. Chúng ta có thể kết luận giải pháp các applet có thể tải về được
không bị những ràng buộc trên.
Một khía cạnh hấp dẫn nữa cho xu hướng trên được cung cấp bởi các kho
chứa các applet trên máy chủ, ví dụ như máy chủ của nhà cung cấp thiết bị. Và giao
diện VMC được đóng gói cùng thiết bị sẽ chứa một con trỏ trỏ đến applet trên máy
chủ. Một điều hiển nhiên là nhà cung cấp có thể duy trì kho chứa applet, cập nhật và
làm cho nó thuận tiện hơn, ví dụ bằng cách sử dụng các phần mềm. Đó cũng là một
trong những xu hướng hiện nay với các thiết bị plug-n-play.
Một ví dụ khác sử dụng tác tử di động để duy trì bảo dưỡng thiết bị từ xa:
cung cấp dịch vụ video theo yêu cầu. Cùng với sự phát triển của mạng trong tương
lai, mà không phát triển về việc quản lí mạng thì một điều không thể giải quyết
được đó là việc phải gửi các nhà kĩ thuật để giải quyết các lỗi về thiết bị, do có
nhiều các thiết bị được cài đặt nằm rải rác nhiều vùng địa lý-> gây khó khǎn cho
việc quản lí mạng. Để giải quyết vấn đề này chúng ta chỉ cần gửi đi các tác tử, nó sẽ
thực hiện các bài kiểm tra phù hợp và sẽ cố gắng đưa ra các phương án giải quyết
vấn đề nếu có thể, nếu không nó sẽ thông báo để con người can thiệp. Với khả nǎng
tự học thì tác tử có thể tự bồi đắp, làm giàu thêm thư viện kiến thức của mình với
các tác vụ đã thực hiện.

- Quản lí cấu hình

10
Các dịch vụ. Việc cung cấp dịch vụ (tất nhiên ở đây ta không xét khía cạnh
cấp dịch vụ đến người sử dụng) trong mạng viễn thông cũng như mạng Internet hiện
nay tương đối phức tạp và liên quan đến nhiều thành phần. Công việc này sẽ được
giảm nhẹ khi sử dụng các tác tử di động. Ví dụ, cung cấp PVC trong mạng ATM
(giả sử có mạng IPoATM). Người điều hành sẽ mất rất nhiều thời gian với các khái
niệm phức tạp của PVC để có thể thiết lập được kết nối giữa hai tổng đài ATM, đặc
biệt là hai tổng đài do hai hãng khác nhau cung cấp. Một hệ thống tác tử (hình vẽ
[4]) có thể làm nhiệm vụ này một cách tự động: yêu cầu thiết lập PVC được gán cho
deglet. Các dữ liệu cần thiết được trao đổi giữa các EP (endpoint) deglet lấy thông
tin đó qua VMC sử dụng một loại ontology xác định trứơc. Deglet khác lại thông tin
với người điều hành, các dữ liệu cần thiết được thu gom và hoàn thành kết nối.
Các thành phần mạng. Cấu hình một thiết bị yêu cầu một số các thuộc tính
trong mạng và ở thiết bị phải được đặt tương tự như các thành phần mềm được cài
đặt. Ví dụ, một máy in cần có trình điều khiển nằm trên các trạm làm việc để các
trạm này sử dụng chúng. Hiện nay, người quản lý mạng phải thực hiện tất cả các tác
vụ trên một cách thủ công. Với sự phát triển của công nghệ tác tử thì việc sử dụng
các tác tử di động sẽ đem lại một viễn cảnh các thành phần mạng được thực thi theo
xu hướng cắm và chạy (plug-n-play)
Bây giờ ta phân tích kĩ hơn ví dụ nêu ở trên, cài đặt máy in trong mạng. Tác
vụ này liên quan đến mạng doanh nghiệp gồm một số các trạm làm việc với các yêu
cầu khác nhau: các trình điều khiển cần thiết cho máy in sẽ khác nhau giữa các máy
tính sử dụng Windows và OS/2, giữa các máy Maccintosh và Unix. Bây giờ ta lại
giả sử rằng mạng này lại được nối đến Internet. Để sử dụng được máy in thì các
trạm làm việc cần được cung cấp các trình điều khiển hợp lý. Nếu như máy in có đi
kèm tất cả các trình điều khiển yêu cầu hoặc hệ điều hành đã chứa các trình điều
khiển đó thì công việc cài đặt máy in trên mạng không có gì đáng nói cả, và hoán
toàn có thể quản lí được. Còn trong trường hợp không có các trình điều khiển máy

in phù hợp, thì toàn bộ quá trình cài đặt sẽ gặp nhiều khó khǎn. Sự biến đổi về topo
mạng cần được quản lí ngay cả khi các máy in và các trạm làm việc được thêm vào:

11
các máy in phải được cho cấp phép dịch vụ, các hệ điều hành được cập nhật.

Ta có thể mô hình hoá hệ thống quản lí cấu hình sử dụng tác tử như hình.
Trong đó: Execution Agent: tác tử thực thi. Monitoring Agent: tác tử giảm sát chỉ
huy.Reasoning Agent: tác tử phân tích suy luận. DBMS: hệ thống dữ liệu
Trong hình, chúng ta mô tả việc sử dụng các tác tử động và các tác tử tĩnh. VMC
của thiết bị mới, ở đây là máy in, bao gồm cả tác tử làm nhiệm vụ cung cấp dịch vụ.
Trên kết nối tới mạng, một số các deglet hoặc netlet được gửi đi để tìm kiếm phát
hiện các thiết bị mạng đang cần trình điều khiển máy in, sau đó nó liên hệ với trang
Web của nhà cung cấp máy in và phiên bản mới nhất của máy in sẽ được tải về.
VMC của máy in có thể chứa danh sách các thiết bị sử dụng máy in, vì vậy nó có
thể kết hợp để cài đặt các trình điều khiển mới khi cần. Máy in sẽ đǎng kí với nhà
cung cấp, khi có trình điều khiển mới, nó sẽ được tự động gửi cho tác tử cung cấp
dịch vụ cho máy in. Cũng giống như các tác tử làm nhiệm vụ phân tích lỗi, việc
quản lí cấu hình cũng cần sự kết hợp của nhiều loại tác tử đơn giản.
- Quản lí hoạt động mạng
Chúng ta đều biết rằng, các khái niệm về đo kiểm đánh giá chất lượng mạng là
rất khó khǎn khi mà sử dụng một máy chủ tập trung. Trễ trên mạng là một vấn đề
đối với việc đưa ra các quyết định đo kiểm mạng. Thay vì dùng các thành phần
thǎm dò từ xa, một tác tử di động được gửi đi để thực thi sự phân tích ngay tại thành
phần được đo. Các thông tin theo cách này sẽ đúng và chính xác hơn, bởi vì chúng
không chịu ảnh hưởng của trễ trên mạng. Một kết quả tương tự có thể nhận được
khi mà tiến trình điều khiển là một phần của thành phần kiểm tra và cũng là một
phần tĩnh nằm ngay trong thành phần kiểm tra. Song giải pháp với tác tử di động là
đáng quan tâm hơn cả, do nó không đòi hỏi một tài nguyên cố định trên trạm cần
đo. Và tất nhiên việc quản lí sẽ càng đơn giản, do chúng ta hoàn toàn dễ dàng sử

dụng các tác tử tiên tiến nhất mà không mất mấy công sức, trong khi chúng ta sẽ
phải rất khó khǎn để cập nhật cho các tác tử tĩnh nằm ngay tại nơi cần đo.

12
Các công nghệ hot-swapping (trao đổi thông tin nóng) cũng có thể dựa trên
các đoạn mã di động. Các bảng trao đổi đựoc áp dụng để cập nhật cho các tác tử
quản lí giám sát mạng tĩnh. Nếu các tác tử này là các ứng dụng có thể mở rộng, thì
các module chứa các đoạn mã động (extlet) được sử dụng để cập nhật mà không
tạm ngưng các dịch vụ mà ứng dụng đang cung cấp. Các module di động này không
nhất thiết phải nằm ở thành phần cập nhật, mà chỉ tải về khi cần, không giồng như
việc sử dụng các applet trong các trình duyệt Web. Một lần nữa, tác tử di động lại
chứng tỏ ưu điểm: yêu cầu ít tài nguyên hơn, thêm nữa là quá trình xử lí phân tán,
cách xử lí thông minh phối hợp từ các nguồn tài nguyên khác nhau trong quá trình
đo kiểm, đánh giá.
Một ví dụ cho công nghệ trên, đó là khi server được di chuyển đến môi trường
thực thi tốt hơn, việc quyết định di chuyển sẽ yêu cầu một loạt các phân tích thông
minh của nhiều nhân tố như: yêu cầu dịch vụ, tải trên mạng, tỉ lệ lỗi, chẳng hạn
người điều hành có thể di rời dịch vụ khi nhận thấy tỉ lệ lỗi xuất hiện khi truy nhập
dịch vụ của nó là không chấp nhận được. Một trường hợp khác, server cung cấp các
dịch vụ truyền thông trong một hệ thống phân tán có thể được di chuyển nếu như
các yêu cầu dịch vụ tǎng trong một vùng nào đó. Trong tất cả các trường hợp đó,
server là một tác tử di động không có ràng buộc về kích cỡ, có thể là rất lớn.
Tuy nhiên, khi sử dụng tác tử di động trong việc quản lí hoạt động của mạng,
chúng ta sẽ gặp phải một số vấn đề. Khi sử dụng tràn lan các tác tử di động, mà
không được điều khiển, sẽ gây hiện tượng đầy tràn mạng, chiếm một tỉ lệ lớn trong
tài nguyên mạng. Chính vì thế phần nền cho các tác tử di động hoạt động cần có
một số qui tắc ràng buộc về mật độ tác tử.
- Mạng plug-n-play
Việc sử dụng tác tử di động mở ra một hướng mới cho một mạng thống nhất: mạng
plug-n-play, nó có thể tự động xác định được các thiết bị, các thành phần trong

mạng và các yêu cầu của người sử dụng. Như chúng ta đã phân tích ở trên, các tác
tử di động hoàn toàn có thể can thiệp vào các quá trình cấu hình thiết bị mạng, cung

13
cấp dịch vụ. Nếu xet một ví dụ thực tế, các applet được sử dụng để lấy các dữ liệu
trên mạng về thông tin lưu trữ của thiết bị và của người sử dụng, và khi mạng phát
triển hơn (thêm các dịch vụ, các thiết bị), thì mạng có thể phát hiện và thay đổi dữ
liệu cấu hình. Sử dụng các tác tử di động với tác vụ uỷ quyền: cấu hình và cung cấp
dịch vụ, ta hoàn toàn có thể thực hiện được điều này. Ngoài ra mạng plug-n-play
còn có khả nǎng phát hiện ra lỗi, hoặc các khả nǎng xảy ra ảnh hưởng tới chất lượng
dịch vụ hoặc vấn đề bảo mật, nó có thể tự động sửa chữa.
Luận văn này cài đặt thêm ba phương pháp ứng dụng tác tử di động truy nhập
nhiều cơ sở dữ liệu Web: Sử dụng một tác tử di động truy nhập một sơ sở dữ liệu
Web, sử dụng một tác tử di động truy nhập nhiều cơ sở dữ liệu Web và sử dụng
nhiều tác tử di đông truy nhập nhiều cơ sở dữ liệu Web.
Bố cục của luận văn
Luận văn được trình bầy trong 4 chương. Chương 1 giới thiệu sơ lược về ngôn
ngữ lập trình Java và khái niệm lập trình phân tán truyền thống bằng Java. Trong
chương này trình bầy một số đặc trưng tiêu biểu của ngôn ngữ lập trình Java, các
phương pháp lập trình phân tán trong Java là lập trình hướng thủ tục và phi thủ tục.
Chương 2 trình bầy một số đặc trưng cơ bản nhất của tác tử di động, làm rõ nguyên
lý hoạt động của tác tử di động và các vấn đề liên quan. Chương 3 trình bầy các
phương pháp truy nhập cơ sở dữ liệu Web truyền thống và phương pháp sử dụng tác
tử di động dựa trên Java. Chương 4 thử nghiệm và đánh giá sự thực thi của các
phương pháp truy nhập cơ sở dữ liệu Web đã trình bầy, bằng việc đo thời gian đáp
ứng yêu cầu truy vấn dữ liệu cho phía client của mỗi phương pháp. So sánh thực thi
của hai phương truy nhập nhiều cơ sở dữ liệu Web sử dụng một tác tử và nhiều tác
tử. Tiếp theo chương 4 là kết luận, tổng kết lại các vấn đề đã nghiên cứu và thử
nghiệm, đồng thời đưa ra phương hướng phát triển tiếp theo của luận văn. Phần cuối
cùng trong luận văn là tài liệu tham khảo và phụ lục. Phụ lục 1 trình bầy khái niệm

cổng truyền thông. Phụ lục 2 trình bầy một số giao diện chính của các chương trình

14
sử dụng tác tử di động truy nhập cơ sở dữ liệu Web. Phụ lục 3 trình bầy một số
đoạn mã lệnh trong các phần chính của luận văn.

15
Chương 1 : Lập trình phân tán truyền thống bằng Java
1.1. Sơ lược về ngôn ngữ Java
Java là ngôn ngữ lập trình do hãng Sun Microsystems phát triển và công bố
chính thức vào quý hai năm 1995 [1]. Từ đó, nó đã trở thành một công cụ mạnh mẽ
để phát triển các ứng dụng trên mạng Internet. Ngôn ngữ Java có một số đặc trưng
điển hình sau:
 Tính đơn giản : Ngôn ngữ Java được phát triển từ ngôn ngữ C/C++ và loại bỏ
đi những gì phức tạp của ngôn ngữ này. Ví dụ như trong Java không có khái
niệm đa kế thừa như trong C++. Trình biên dịch và các lớp thư viện có kích
thước rất nhỏ gọn so với các ngôn ngữ lập trình khác.
 Tính hướng đối tượng : Java là ngôn ngữ lập trình thuần hướng đối tượng, do
đó mọi ứng dụng viết trên Java đều phải xây dựng lớp. Trong ngôn ngữ C/C++ ta
có thể xây dựng được hàm dùng chung, không gắn với một lớp thì trong Java chỉ
có thể xây dựng được hàm, gắn với một lớp cụ thể. Việc cho phép đa kế thừa
trong C++ (một lớp con có nhiều lớp cha) gây ra sự khó khăn trong quản lý các
lớp, đã được Java giải quyết bằng khái niệm giao diện.
 Tính phân tán : Trong Java đã thiết kế sẵn hỗ trợ lập trình các ứng dụng phân
tán bằng gói java.net. Ví dụ như với lớp URL của Java, một ứng dụng của
Java có thể dễ dàng được truy xuất từ một máy ở xa. Ngoài ra trong Java còn xây
dựng các lớp thư viện phục vụ cho việc thiết lập kết nối ở mức socket.
 Tính thông dịch : Khác với C/C++, Java là ngôn ngữ lập trình vừa biên dịch
và vừa thông dịch tức là biên dịch mã nguồn và thông dịch để chạy chương trình.
Việc thực hiện chương trình bằng thông dịch giúp tiết kiệm tài nguyên của hệ

thống. Tính chất thông dịch của Java rất có lợi cho việc phát triển các ứng dụng
trên mạng Internet, đó là tiểu dụng Java.

16
 Tính rõ ràng : Ngôn ngữ Java không cho phép khai báo các biến một cách tùy
tiện trong chương trình Java. Biến khai báo trong chương trình Java luôn phải
tường minh. Ví dụ trong C/C++ để khai báo một mảng động chứa số nguyên chỉ
cần khai báo một biến con trỏ số nguyên nhưng trong Java phải khai báo nó là
một mảng số nguyên ngay từ đầu.
 Tính an toàn và bảo mật : Java được thiết kế có khả năng tạo ra một hệ thống
không virus, không bị phá rối nhờ kỹ thuật xác minh mã hóa theo khóa công
khai. Java không hỗ trợ biến con trỏ. Bộ thông dịch - JVM (Java Virtual
Machine) sẽ kiểm soát chặt chẽ các mã byte không cho bất kỳ hành vi truy nhập
trái phép nào được thực hiện.
 Tính độc lập phần cứng : Khi biên dịch file mã nguồn (.java), trình biên
dịch của Java không dịch từ file mã nguồn sang file mã máy mà nó chỉ dịch sang
file mã trung gian (.class) của Java dưới dạng mã byte (bytecode), sau đó tệp
mã byte được thực thi bởi bộ thông dịch được viết riêng cho mỗi hệ thống. Các
ứng dụng của Java chạy trên nền trung tính của máy ảo Java và không phụ thuộc
vào bộ xử lý và hệ điều hành. Máy ảo Java có kích thước rất nhỏ, do đó có thể
cài đặt trên mọi máy mà không chiếm dụng nhiều tài nguyên của hệ thống, điều
này làm cho các hệ thống dễ dàng chấp nhận nó.
 Tính khả chuyển : Do cấu trúc độc lập với phần cứng nên các chương trình
ứng dụng Java chỉ cần viết sao cho chạy được trên máy ảo Java là có thể cài đặt
và chạy tốt trên mọi hệ thống. Mặt khác, các kiểu dữ liệu của Java được định
nghĩa không phụ thuộc vào bộ xử lý hay hệ điều hành mà các ứng dụng được cài
đặt.
 Hiệu quả cao : Về tốc độ thực thi chương trình thì Java chậm hơn một số
ngôn ngữ khác như C/C++ do dùng bộ thông dịch, bù lại với giao diện đồ họa, sự
đơn giản, nhỏ gọn, tính khả chuyển thì có thể nói rằng hiệu quả chung cuộc của

các chương trình Java là đáng khích lệ hơn so với tính phức tạp của C/C++.

17
 Tính đa luồng : Ngôn ngữ Java hỗ trợ lập trình ứng dụng đa luồng, cho phép
thực hiện nhiều tiến trình song song và tương tác với nhau, tránh được tính tuần
tự nhàm chán và lãng phí thời gian do phải chờ đợi.
 Tính linh động : Java là ngôn ngữ động, được thiết kế để thích ứng với một
môi trường đang phát triển, các chương trình Java mang nhiều thông tin thực thi
do đó nó có thể tự mở rộng để liên kết với các lớp mới trên một máy chủ ở xa
qua mạng Internet.
Với các đặc trưng tiêu biểu đã nêu ở trên, ngôn ngữ lập trình Java xứng đáng là một
công cụ lý tưởng để các lập trình viên chọn lựa cho việc phát triển các ứng dụng
phân tán.
1.2. Khái niệm lập trình phân tán
Trước khi các máy tính được kết nối mạng, chúng hoạt động một cách độc lập
với nhau. Các chương trình và dữ liệu cần chương trình xử lý phải đặt trên cùng
một máy, có nghĩa là thông thường người ta phải đem các khối dữ liệu cần xử lý
đến nơi có chương trình để xử lý.
Khi mạng máy tính ra đời các máy tính được kết nối với nhau bởi đường
truyền dữ liệu. Các máy tính trong mạng có thể chia sẻ tài nguyên và thiết bị cho
nhau. Hoạt động của các máy tính trong mạng theo hai mô hình chủ yếu là : peer to
peer và clients/server.
Trong mô hình mạng peer to peer, các máy tính trong mạng có thể cho phép
các máy tính khác trong mạng truy nhập vào tài nguyên của mình nhưng chính nó
cũng có thể có nhu cầu truy nhập tài nguyên của các máy tính khác, tức là nó vừa
đóng vai trò của người cung cấp tài nguyên mạng và cũng là người cần sử dụng tài
nguyên mạng.
Trong mô hình mạng clients/server có một hoặc nhiều máy (tùy thuộc vào nhu
cầu quản trị mạng) làm nhiệm vụ cung cấp một số dịch vụ mạng cho các máy tính


18
khác trong mạng. Việc quản trị tài nguyên mạng tập trung hơn và tính bảo mật tài
nguyên mạng cao hơn trong mạng peer to peer.
Mạng máy tính phát triển mạnh tạo ra một môi trường tốt, thúc đẩy phát triển
lập trình phân tán và xây dựng các ứng dụng phân tán có tính mềm dẻo, linh hoạt,
loại bỏ việc di chuyển các khối dữ liệu cần xử lý một cách thủ công đến nơi xử lý
do việc truy nhập vào dữ liệu từ chương trình xử lý được thực hiện qua mạng.
Các ứng dụng phân tán thường được xây dựng theo mô hình clients/server.
Ngôn ngữ lập trình Java hỗ trợ hai dạng lập trình phân tán: lập trình hướng thủ tục
và phi thủ tục. Lập trình hướng thủ tục trong Java thực chất là các lời gọi phương
thức từ xa còn lập trình phi thủ tục trong Java không sử dụng các lời gọi phương
thức từ xa.
1.3. Các phương pháp lập trình phân tán phi thủ tục
1.3.1. Phương pháp lập trình socket trong Java
1.3.1.1. Lịch sử hình thành socket
Khái niệm socket xuất hiện lần đầu tiên vào năm 1980 tại trường đại học
Berkeley Mỹ, đó là một chương trình được thiết kế để giúp máy tính nối mạng ở
khắp mọi nơi có thể trao đổi thông tin với nhau, ban đầu nó được sử dụng trên các
máy Unix và có tên gọi là Berkeley Socket Interface, tiếp đó cùng với sự phát triển
của các ứng dụng mạng. socket được hỗ trợ trong nhiều ngôn ngữ lập trình và chạy
trên nhiều nền hệ điều hành khác nhau, ví dụ như WinSock dùng cho các ứng dụng
của Microsoft, Socket++ dùng cho các lập trình viên sử dụng Unix …
Một câu hỏi đặt ra là vì sao chúng ta lại sử dụng socket trong truyền thông
giữa các máy tính. Để trả lời câu hỏi này hãy quay lại thời điểm trước khi socket ra
đời, thời kì này trên hệ thống Unix việc vào/ra dữ liệu được thực hiện theo mô hình
3 bước Open-Read/Write-Close, để thực hiện việc vào ra dữ liệu trước hết chương
trình phải tạo ra một kết nối tới tài nguyên mà nó muốn giao tiếp (tài nguyên có thể
là đĩa, bộ nhớ trong, file ). Sau khi kết nối đã được thực hiện, chương trình có thể
trao đổi dữ liệu thông qua các thao tác Read, tức là đưa dữ liệu từ tài nguyên đã kết


19
nối vào chương trình để xử lý hoặc Write, tức là đưa dữ liệu đã xử lý từ chương
trình ra tài nguyên, ví dụ điển hình cho thao tác vào/ra dữ liệu theo mô hình 3 bước
là thao tác với file dữ liệu mà chúng ta khá quen thuộc trong các ngôn ngữ lập trình.
Khi người lập trình muốn thao tác với một file dữ liệu họ tiến hành như sau:
1. Mở file chứa dữ liệu cần sử dụng với các quyền thích hợp.
2. Thực hiện việc đọc dữ liệu từ file ra để xử lý hay đưa dữ liệu đã xử lý ghi
vào file.
3. Đóng file sau khi đã kết thúc sử dụng.
Khi việc trao đổi dữ liệu giữa chương trình với kết nối mạng được đưa vào hệ
thống Unix, người ta mong muốn việc trao đổi dữ liệu giữa các chương trình cũng
sẽ được thực hiện theo mô hình 3 bước trên để tránh cho người lập trình những khó
khăn khi giao tiếp với các tầng bên dưới tầng ứng dụng, để làm được điều đó socket
đã được chọn lựa để sử dụng. Khi hai chương trình muốn giao tiếp với nhau, mỗi
phía sẽ tạo ra một socket, chúng đóng vai trò là các điểm cuối trong một kết nối và
thực hiện nhiệm vụ trao đổi thông tin giữa hai chương trình.
Socket được xem như một tài nguyên hệ thống (dưới góc độ lập trình) mà
chương trình cần giao tiếp, nên chương trình có thể thực hiện giao tiếp với socket
theo mô hình 3 bước giống như việc vào/ra dữ liệu. Như vậy, sự ra đời và phát triển
của socket gắn liền với nhu cầu truyền thông máy tính.
1.3.1.2. Định nghĩa Socket
Có nhiều định nghĩa khác nhau về socket tùy theo cách nhìn nhận của người
sử dụng. Một cách tổng quát nhất có thể định nghĩa Một Socket là một điểm cuối
trong kết nối giữa hai chương trình đang chạy trên mạng.
Theo quan niệm của người phát triển ứng dụng người ta có thể định nghĩa
Socket là một phương pháp để thiết lập kết nối truyền thông giữa một chương trình
yêu cầu dịch vụ và một chương trình cung cấp dịch vụ trên mạng hoặc trên cùng
một máy tính.

20

Đối với người lập trình, họ nhìn nhận socket như một giao diện nằm giữa tầng
ứng dụng và tầng khác trong mô hình truyền thông tham chiếu OSI có nhiệm vụ
thực hiện việc giao tiếp giữa chương trình ứng dụng với các tầng bên dưới của
mạng.

Hình 1.1. Mô hình OSI rút gọn
Các lập trình viên thường gặp khó khăn trong việc tạo ra socket riêng bởi vì
cho dù sử dụng servlet, CGI hay PHP,…, rất có thể sẽ không bao giờ mở được cổng
một cách tường minh, vì lẽ đó các lập trình viên thường sử dụng thư viện socket
được hỗ trợ sẵn bởi các ngôn ngữ lập trình. Như vậy các socket vẫn tồn tại để kết
nối các ứng dụng của người dùng, nhưng phần chi tiết của socket được ẩn trong
những lớp sâu hơn để các lập trình viên không phải bận tâm đến nó.
1.3.1.3. Nguyên lý hoạt động của socket
Hai chương trình ứng dụng muốn trao đổi dữ liệu với nhau qua mạng, mỗi ứng
dụng sẽ tạo ra một socket và trao đổi dữ liệu với nhau bằng cách đọc và ghi từ
socket của mình, để hiểu rõ cách thức trao đổi dữ liệu của các socket chúng ta hãy
xem xét nguyên lý hoạt động của chúng.
Trước hết, chúng ta xem làm thế nào các socket có thể xác định đựợc nhau.
Khi một chương trình tạo ra một socket, một thông tin định danh dạng số sẽ được
gán cho socket, thông tin định danh này còn được là cổng
1
. Việc gán số hiệu cổng
này cho socket có thể được thực hiện bởi chương trình (bằng tay) hoặc bởi hệ điều

1
phụ lục 1

21
hành (tự động), tùy thuộc vào loại socket được sử dụng (socket được sử dụng cho
phía client hay server). Mỗi gói tin được socket gửi đi có chứa hai thông tin để xác

định đích đến của gói tin:
- Một địa chỉ mạng, để xác định hệ thống (thường là máy tính) sẽ nhận gói tin.
- Một số hiệu cổng để thông báo cho hệ thống đích biết socket nào trên nó sẽ
nhận dữ liệu.
Nhờ hai thông tin này mà gói tin được truyền đến đúng máy tính đích (nhờ
vào địa chỉ mạng) và được dữ liệu được chuyển đến đúng socket đích (nhờ vào số
hiệu cổng của socket).
Các socket thường làm việc theo cặp trong quá trình được các chương trình sử
dụng để trao đổi dữ liệu với nhau qua mạng, một socket đóng vai trò là server,
socket còn lại đóng vai trò như client. Socket phía server được xác định một cổng
cho kết nối mạng, sau đó chờ nghe yêu cầu mà client gửi tới nó trên cổng này, do đó
các chương trình client phải biết trước số hiệu cổng của socket server mà nó cần kết
nối tới. Ví dụ dịch vụ FTP server tạo ra một socket để lắng nghe yêu cầu của client
tại cổng có số hiệu cố định là 21, vì vậy một chương trình client muốn giao tiếp với
FTP server nó cần phải kết nối đến socket có số hiệu cổng 21. Như vậy số hiệu cổng
của socket phía server được xác định bởi chương trình, ngược lại cổng cho socket
phía client được xác định bởi hệ điều hành. Khi một socket phía client gửi một gói
tin cho socket phía server thì trong gói tin đó có chứa hai thông tin về địa chỉ mạng
của hệ thống client và số hiệu cổng của socket phía client, nên phía server hoàn toàn
có thể gửi thông tin trả lời cho client dựa vào hai thông tin này. Quá trình trao đổi
dữ liệu của hai chương trình ứng dụng qua mạng thông qua các socket có thể được
mô tả bằng các bước sau:
1. Chương trình phía server tạo ra một socket, socket này được chương trình
gắn với một số hiệu cổng cố định trên server. Sau khi đựợc tạo ra , socket server sẽ
chờ nghe yêu cầu từ phía client trên số hiệu cổng này.

22
2. Chương trình phía client có nhu cầu kết nối tới chương trình server, nó cũng
tạo ra một socket, socket này được hệ điều hành gán cho một số hiệu một cổng
2

.
Chương trình phía client sẽ cung cấp cho socket của nó hai thông tin địa chỉ mạng,
số hiệu cổng của socket phía server và yêu cầu thực hiện kết nối (nếu chương trình
sử dụng socket hỗ trợ giao thức hướng kết nối TCP) hoặc truyền dữ liệu (nếu
chương trình sử dụng socket hỗ trợ giao thức không hướng nối UDP).
3. Chương trình phía server và chương trình phía client trao đổi dữ liệu với
nhau bằng cách đọc từ socket hoặc ghi vào socket của mình. Các socket ở hai đầu
kết nối nhận dữ liệu từ chương trình ứng dụng và đóng gói thành gói tin để gửi đi
hoặc nhận gói tin gửi đến và chuyển dữ liệu cho chương trình ứng dụng, việc này
thực hiện được bởi vì các socket ở hai đầu kết nối biết địa chỉ mạng và số hiệu cổng
của nhau.
Ở bước thứ hai chúng ta thấy chương trình ứng dụng phải lựa chọn giao thức
mạng mà nó sử dụng để trao đổi dữ liệu, tùy theo chúng ta sử dụng giao thức nào
(TCP hay UDP) mà cách thức xử lý yêu cầu của client có thể khác nhau. Sau đây
chúng ta sẽ xem xét chi tiết cách thức trao đổi dữ liệu của socket tương ứng với
từng loại giao thức mạng.
 Socket hỗ trợ giao thức mạng TCP
- Phía Server: Khi một dịch vụ trên máy server hoạt động, nó sẽ tạo ra một
socket, socket này được dịch vụ đăng ký với máy server một số hiệu cổng cố định
và nó lắng nghe yêu cầu kết nối từ phía client trên cổng này.

Hình 1.2. Dịch vụ phía server lắng nghe yêu cầu kết nối từ client

2
phụ lục 1

23
- Phía client: Nó biết địa chỉ mạng của máy server mà dịch vụ đang chạy trên
đó và số hiệu cổng socket server đang chờ nghe yêu cầu, khi muốn kết nối đến
server, nó cũng tạo ra một socket chứa địa chỉ mạng của máy client và số hiệu cổng

của ứng dụng chạy trên máy client, đồng thời ứng dụng client sẽ cung cấp cho
socket của nó địa chỉ mạng của máy server và số hiệu cổng của dịch vụ mà nó cần
kết nối tới và yêu cầu socket thực hiện kết nối.
Khi server nhận được yêu cầu kết nối từ client, nếu chấp nhận nó sẽ tạo ra một
socket mới được gán một số hiệu cổng bởi hệ điều hành nhưng khác với số hiệu
cổng mà nó đang chờ nghe yêu cầu từ phía client, sở dĩ server làm như vậy bởi vì
nó cần duy trì số hiệu cổng cũ để tiếp tục lắng nghe yêu cầu từ phía client, trong
khi nó cần thêm một socket mới để trả lời yêu cầu của phía client, sau đó dịch vụ
phía server sẽ gửi thông báo chấp nhận kết nối cho client cùng thông tin về số hiệu
cổng mới của socket mà nó dùng để giao tiếp với phía client.

Hình 1.3. Server trả lời yêu cầu của client trên một cổng mới
Với ứng dụng client, nếu kết nối được chấp nhận nghĩa là socket của nó đã
được tạo ra thành công và nó có thể sử dụng socket để giao tiếp với dịch vụ trên
máy server bằng cách đọc và ghi socket theo cách giao tiếp với một tài nguyên
thông thường trên máy tính.
 Socket hỗ trợ giao thức mạng UDP
- Phía Server: Khi một dịch vụ trên máy server hoạt động nó sẽ tạo ra một
socket, dịch vụ sẽ đăng ký cho socket một số hiệu cổng cố định với máy server và
lắng nghe yêu cầu từ phía client trên cổng này.


24
- Phía client: Nó biết địa chỉ mạng của máy server mà dịch vụ đang chạy trên đó và
số hiệu cổng socket server đang chờ nghe yêu cầu từ phía client, khi muốn giao tiếp
với dịch vụ trên máy server, ứng dụng phía client cũng tạo ra một socket chứa địa
chỉ máy client và số hiệu cổng của ứng dụng chạy trên máy client, đồng thời ứng
dụng phía client sẽ cung cấp cho socket của nó địa chỉ mạng của máy server và số
hiệu cổng của dịch vụ mà nó cần giao tiếp.
Khi ứng dụng phía client muốn truyền tin đến dịch vụ trên server nó sẽ chuyển

dữ liệu cho socket của mình, socket này sẽ chuyển thẳng gói tin mà ứng dụng phía
client muốn gửi tới dịch vụ trên server dưới dạng một datagram có chứa địa chỉ máy
server và số hiệu cổng mà socket server chờ nghe yêu cầu. Như vậy không hề có
một kết nối nào được thực hiện giữa ứng dụng phía client với dịch vụ trên server và
server cũng không cần tạo ra một socket mới để trả lời client, mà server dùng ngay
socket ban đầu của nó để trả lời yêu cầu của phía client.
1.3.1.4. Hỗ trợ lập trình socket trong Java
Ngôn ngữ lập trình Java hỗ trợ các lớp thư viện lập trình mạng chứa trong gói
java.net, dưới đây là cấu trúc của gói:

Hình 1.4. Cấu trúc của gói java.net

25
- Lớp InetAddress : Biểu diễn địa chỉ IP của mạng Internet. Trong lớp này
quan trọng nhất là hai phương thức getHostName() và getAddress() dùng
để ánh xạ giữa địa chỉ IP và tên host.
- Lớp ServerSocket : Biểu diễn socket dùng cho phía server.
- Lớp Socket: Biểu diễn socket dùng cho cả hai phía server và client, lớp
Socket được sử dụng với giao thức mạng TCP.
- Lớp DatagramSocket: Biểu diễn socket cho cả hai phía client và server,
lớp DatagramSocket được sử dụng với giao thức mạng UDP.
Java đã xây dựng sẵn các lớp thư viện hỗ trợ cho cả hai loại socket làm việc
với giao thức TCP và UDP, chi tiết xem bảng sau:
Loại giao thức
Lớp phía client
Lớp phía server
Hướng kết nối (TCP)
Socket
ServerSocket
Không hướng nối (UDP)

DatagramSocket
DatagramSocket
Hình 1.5. Các lớp socket trong Java
1.3.2. Phương pháp lập trình servlet
1.3.2.1 Khái niệm servlet
Servlet là một ứng dụng Java chạy phía server. Servlet có thể được nhúng trên
nhiều server khác nhau. Servlet được sử dụng rộng rãi trong các HTTP server.
Servlet là một thay thế hiệu quả cho CGI scripts, chúng cung cấp một cơ chế dễ
dàng tạo ra các tài liệu động và chạy nhanh hơn. Đặc trưng của servlet là lập trình
phía server với các API đặc thù hệ thống, chúng được viết bằng Servlet API, một
chuẩn mở rộng của Java, do đó servlet được dùng để xử lý các yêu cầu HTTP từ
phía client.
Servlet là đối tượng nhúng trên trình chủ Web, thực hiện xử lý yêu cầu và tạo
ra các trang Web động trả về máy khách. Để chạy được servlet cần có các trình chủ
Web hiểu Java và hỗ trợ triệu gọi servlet như Tomcat, JRun, Web logic, JWS,

26
jsdk , mặc dù vậy để biên dịch và tạo ra các lớp servlet (.class) chúng ta chỉ cần
đến trình biên dịch của bộ JDK (Java Development Kit), có bổ sung thêm gói
servlet.jar của trình Web chủ tương ứng mà không cần đến chính các trình
chủ Web.
1.3.2.2. Cấu trúc servlet
Các lớp thư viện của servlet nằm trong gói phần mềm servlet.jar, gói
phần mềm này không được tích hợp sẵn trong bộ JDK mà nó được cung cấp bởi các
trình chủ web như Tomcat, jsdk, , trong đó có các lớp thư viện cần thiết như
GenericServlet, HttpServlet hỗ trợ cho người lập trình có thể xây dựng
các ứng dụng servlet được kế thừa từ những lớp servlet thư viện hiện có. Việc đầu
tiên để xây dựng một ứng dụng servlet là chọn một lớp servlet thư viện hiện có để
kế thừa. Ví dụ như kế thừa từ lớp GenericServlet, đây là lớp cơ bản nhất và là
thủy tổ của các lớp servlet.







Hình 1.6. Các lớp suy diễn được từ lớp GenericServlet
Việc khai báo một ứng dụng servlet được kế thừa từ lớp GenericServlet
được thực hiện như sau :
public class helloWordServlet extends GenericServlet
{

}
Servlets
GenericServlet
HttpServlet
MyServlet

×