Mục lục
lời cảm ơn
lời nói đầu
chương 1: Giới thiệu chung
chương 2: Phân tích hệ thống
2.1 Tổng quan
2.2 thiết kế chi tiết
2.3 Cấu trúc tập tin kar/midi
2,4 Công cụ, công nghệ hỗ trợ
Chương 3: thiết kê, thực hiện hệ thống
3.1 Ứng dụng karaoke mobile - phía client
3.2 Hệ thống kara server - phía server
3.3 Kỹ thuật kết nối dữ liệu
Chương 4: Triển khai hệ thống
4.1 Mô hình deply diagramph
4.2 triên khai hệ thống server
4.3 triển khai ứng dụng client
Chương : kết luận và hướng phát triển
tài liệu tham khảo
94 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 3228 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Đồ án Ứng dụng hát karaoke trên mobile và xây dựng cộng đồng nhạc KAR, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
có thể chạy trên
ñiện thọai Nokia, hoặc Motorola. Hiện nay Sun ñã ñưa ra 2 dạng
Configuration:
• CLDC (Connected Limited Device Configuration - Cấu hình thiết bị kết
nối giới hạn): ñược thiết kế ñể nhắm vào thị trường các thiết bị cấp thấp
(low-end), các thiết bị này thông thường là máy ñiện thọai di ñộng và
PDA với khoảng 512 KB bộ nhớ. Vì tài nguyên bộ nhớ hạn chế nên
CLDC ñược gắn với Java không dây (Java Wireless ), dạng như cho
phép người sử dụng mua và tải về các ứng dụng Java, ví dụ như là
Midlet.
• CDC- Connected Device Configuration (Cấu hình thiết bị kết nối): CDC
ñược ñưa ra nhắm ñến các thiết bị có tính năng mạnh hơn dòng thiết bị
thuộc CLDC nhưng vẫn yếu hơn các hệ thống máy ñể bàn sử dụng J2SE.
Những thiết bị này có nhiều bộ nhớ hơn (thông thường là trên 2Mb) và
có bộ xử lý mạnh hơn. Các sản phẩm này có thể kể ñến như các máy
PDA cấp cao, ñiện thoại web, các thiết bị gia dụng trong gia ñình …
Cả 2 dạng Cấu hình kể trên ñều chứa máy ảo Java (Java Virtual Machine)
và tập hợp các lớp (class) Java cơ bản ñể cung cấp một môi trường cho các
ứng dụng J2ME. Tuy nhiên, chúng ta chú ý rằng ñối với các thiết bị cấp thấp,
do hạn chế về tài nguyên như bộ nhớ và bộ xử lý nên không thể yêu cầu máy
ảo hổ trợ tất cả các tính năng như với máy ảo của J2SE, ví dụ, các thiết bị
thuộc CLDC không có phần cứng yêu cầu các phép tính toán dấu phẩy ñộng,
nên máy ảo thuộc CLDC không ñược yêu cầu hỗ trợ kiểu float và double.
CLDC ñịnh nghĩa một bộ các giao tiếp cơ bản cho lập trình ứng dụng và
máy ảo cho những thiết bị hạn chế về tài nguyên như mobile phones, pagers,
và PDA (personal digital assistant). Khi kết hợp với profile như là MIDP, nó
cung cấp Java platform vững chắc cho việc phát triển các ứng dụng mà liên
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 45
quan ñến bộ nhớ có giới hạn, sức mạnh xử lý, và khả năng về ñồ họa bị hạn
chế.
CLDC là thành phần cơ bản của kiến trúc Java 2 Platform, J2ME. Công
nghệ J2ME ñược phổ biến trong phạm vi API như configuration, profiles, and
package tùy chọn. Môi trường ứng dụng J2ME bao gồm configuration như
CLDC và profile như MIDP(Mobile Information Device Profile). Hơn nữa,
các package tùy chọn cung cấp khả năng xác ñịnh cụ thể các chức năng như
gửi thông ñiệp wireless, Mutimedia capture và chức năng phát lại (playback).
Do việc tùy thuộc về phần cứng, cho nên các nhà thiết kế và phát triển sản
phẩm phải chọn những gói thích hợp, sử dụng APIs hỗ trợ truy cập thuận lợi
ñến các component.
CLDC ñược thiết kế ñể mang lại sự tiện ích trên Java platform cho các
thiết bị kết nối mạng mà bị hạng chế về tốc ñộ xử lý, bộ nhớ, và khả năng về
ñồ họa. Như các cấu hình sau:
• Bộ xử lý 16-bit hoặc 32-bit với tốc ñộ clock là 16MHz hoặc cao hơn.
• Tối thiểu 160 KB ñể dùng thư viện CLDC và máy ảo.
• Tối thiểu 192 KB tiêu tốn cho Java platform.
• Tiêu thụ năng lượng thấp, hoạt ñộng nhờ vào năng lượng pin.
• Dùng kết nối wireless hoặc băng thông có giới hạn và không liên tục.
MIDP (Mobile Information Device Profile)
ðịnh nghĩa về Profile: Profile mở rộng Configuration bằng cách thêm vào
các class ñể bổ trợ các tính năng cho từng thiết bị chuyên biệt. Cả 2
Configuration ñều có những profile liên quan và từ những profile này có thể
dùng các class lẫn nhau. ðến ñây ta có thể nhận thấy do mỗi profile ñịnh nghĩa
một tập hợp các class khác nhau, nên thường ta không thể chuyển một ứng
dụng Java viết cho một profile này và chạy trên một máy hỗ trợ một profile
khác. Cũng với lý do ñó, bạn không thể lấy một ứng dụng viết trên J2SE hay
J2EE và chạy trên các máy hỗ trợ J2ME. Sau ñây là các profile tiêu biểu:
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 46
• Mobile Information Device Profile (MIDP): profile này sẽ bổ sung các
tính năng như hỗ trợ kết nối, các thành phần hỗ trợ giao diện người
dùng … vào CLDC. Profile này ñược thiết kế chủ yếu ñể nhắm vào
ñiện thọai di ñộng với ñặc tính là màn hình hiển thị hạn chế, dung
lượng chứa có hạn. Do ñó MIDP sẽ cung cấp một giao diện người dùng
ñơn giản và các tính năng mạng ñơn giản dựa trên HTTP. Có thể nói
MIDP là profile nổi tiếng nhất bởi vì nó là kiến thức cơ bản cho lập
trình Java trên các máy di ñộng (Wireless Java)
• PDA Profile: tương tự MIDP, nhưng với thị trường là các máy PDA với
màn hình và bộ nhớ lớn hơn
• Foundation Profile: cho phép mở rộng các tính năng của CDC với phần
lớn các thư viện của bộ Core Java2 1.3
MIDP 2.0 là phiên bản chỉnh sửa từ MIDP 1.0, và bao gồm một số ñặc
tính mới như là giao diện cho người sử dụng ñược hỗ trợ nhiều hơn, truyền
thông ña phương tiện và game, kết nối tốt hơn, bảo mật hơn.
• Cải tiến giao diện: thông qua kinh nghiệm người dùng, cải thiện khả
năng chuyển ñộng của ứng dụng, và có khả năng mở rộng hơn nữa.
Như là các cải thiện về Screen và Item. Thêm nữa, là các cải tiến về
cách bố trí (layout) ñộng cho việc di chuyển dễ dàng hơn.
• Hỗ trợ Media : âm thanh, video ñược cải tiến; cho phép âm thanh và
video chạy liên tục.
• Hỗ trợ Game: MIDP 2.0 thêm Game API vào tiêu chuẩn xây dựng
game. MIDP Game API bao gồm các chức năng game cụ thể, như là
các sprite và tiled layer và hỗ trợ về ñồ họa. Các chức năng ñược làm
ñơn giản hơn và cải thiện về ñiều khiển tốt hơn nhờ vào ñồ họa và hiệu
năng.
• Mở rộng kết nối: thông thường thì theo chuẩn HTTP, MIDP 2.0 hỗ trợ
thêm HTTPS, datagram, sockets, server sockét, và các serial giao tiếp
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 47
port. Mở rộng này làm cho khả năng kết nối ñơn giản hơn, là tiêu chuẩn
ñể tương thích với các cấu trúc phần mềm ñã tồn tại.
• Bảo mật: MIDP 2.0 thêm vào model bảo mật end-to-end mạnh mẽ,
ñược xây dựng theo các tiêu chuẩn mở, mà có thể bảo vệ mạng, các
ứng dụng và thông tin trên các thiết bị di ñộng. Còn hỗ trợ cả HTTPS
và các tiêu chuẩn ñã tồn tại như SSL và WTLS cho phép chuyển giao
dữ liệu mã hóa. Các domain bảo mật chống lại các truy cập không ñược
xác nhận và chức năng không hợp lệ cho ñến khi các truy cập, chức
năng ñược cho phép và chứng thực.
Máy ảo KVM (K Virtual Machine) :
Cũng giống như trên PC, muốn thực thi một ứng dụng Java, chúng ta cần
phải có một máy áo JVM (Java Virtual Machine). Khi bạn biên dịch mã nguồn
Java thành một lớp (.class) và ñặt chúng vào trong file lưu trữ JAR của Java,
máy ảo JVM sẽ biên dịch file .class này thành mã thự thi, và ñược ñiều khiển
bởi JVM. Các mã trong file .class gọi là mã bytecode.
ðối với thiết bị cấu hình dạng CDC, máy ảo JVM có toàn bộ chức năng
tương ñương với máy ảo phục vụ môi trường J2SE.
ðối với thiết bị cấu hình dạng CLDC, Sun cài ñặt một phiên bản thu nhỏ
hơn dành cho JVM gọi là K Virtual Machine (KVM).
3.1.2. RMS và cấu trúc lưu trữ của thư viện trên mobile
Tìm hiểu về RMS
Hình 10-Tổng quan về mối quan hệ giữa RMS và MIDlet
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 48
RMS (Record Management System – hệ thống quản lý bản ghi) là một tập
hợp các hàm API giúp cho một MIDlet có thể làm việc với hệ thống lưu trữ dữ
liệu nội bộ của ñiện thoại di ñộng. Ở hầu hết tất cả các loại ñiện thoại có hỗ trợ
chuẩn MIDP, RMS là nơi lưu trữ dữ liệu nội bộ duy nhất. Hiện nay, có rất
nhiều loại ñiện thoại có hỗ trợ việc giao tiếp với bộ nhớ ngoài của ñiện thoại,
nhưng việc thao tác với bộ nhớ ngoài của ñiện thoại có tốc ñộ tương ñối chậm,
và hay gặp phiền phức với những hộp thoại xác nhận quyền truy cập, do nó có
cơ chế bảo mật chặt chẽ và phức tạp hơn RMS. Chính vì những lý do ñó,
chúng ta sẽ chọn cách thức lưu dữ liệu trên RMS.
Tiếp theo, chúng ta sẽ cùng tìm hiểu một số thuật ngữ chính trong hệ
thống RMS:
• Record (bản ghi): là ñơn vị lưu trữ dữ liệu chính, duy nhất và nhỏ
nhất mà ta phải truy xuất trong RMS. ðiều quan trọng, RMS không
quy ñịnh kiểu dữ liệu cho một record, record ñó có thể mang bất lỳ
loại dữ liệu nào: từ một số nguyên, số thực, chuỗi, một tấm hình…
nói chung là bất kỳ loại dữ liệu nào mà người lập trình có thể mã hóa
sang chuỗi nhị phân theo một phương thức nào ñó. Tóm lại, dưới góc
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 49
ñộ lập trình, người lập trình sẽ làm việc với record dưới dạng mảng
nhị phân, ñiều này sẽ giúp người lập trình chủ ñộng hơn rất nhiều
trong việc quản lý, kiểm soát dung lượng của bộ nhớ lưu trữ nội bộ
của ứng dụng MIDP theo một cách thức tối ưu về kích thước nhất –
ñiều cực kỳ quan trọng trong việc phát triển ứng dụng cho ñiện thoại
di ñộng.
• Record Store (Kho chứa bản ghi): một record không thể ñứng ñộc
lập và truy xuất trực tiếp ñược, mà nó phải thuộc vào một record nào
ñó. Vậy Record Store là một tập hợp các record và ñược truy xuất
bởi cùng một ứng dụng MIDlet. Người lập trình truy xuất một record
thông qua Record Store, và Record Store sẽ ñảm bảo tính chính xác
của dữ liệu cho thao tác ñọc và ghi 1 record.
Record Store quản lý record thông qua chỉ số, mỗi record có một
số duy nhất và ñược Record Store gán trong quá trình thêm một
record mới vào. Chỉ số nhỏ nhất của một record là 1, chỉ số tiếp theo
là 2… Chỉ số của record là một số tự tăng, khi xóa một record, chỉ số
ñó sẽ không ñược ñiều chỉnh lại. Vì thế, người lập trình nên quản lý
chỉ số một cách cẩn thận và chặt chẽ.
Mỗi Record Store ñược xác ñịnh qua một tên, là một chuỗi
Unicode có ñộ dài không quá 32 ký tự. Tên của Record Store phải là
duy nhất trong một MIDlet suite, nó mang tính nội bộ, có nghĩa là 2
ứng dụng riêng biệt có thể ñặt tên Record Store trùng nhau.
Record Store còn chứa thông tin về phiên bản, và thời gian. Vì
thế ứng dụng có thể biết ñược thời ñiểm cuối cùng mà RMS ñược
truy xuất.
Trong quá trình lập trình, chúng ta sử dụng Record Store thông
qua việc tạo 1 thể hiện (instance) của lớp
javax.microedition.rms.RecordStore
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 50
và tất cả các lớp sử dụng trong việc thao tác với RMS ñều ñược
chứa trong gói
javax.microedition.rms.*
Một số ñặc ñiểm cần lưu ý
Giới hạn dung lượng:
Giới hạn dung lượng của RMS cho tất cả các ứng dụng MIDP tùy thuộc
vào từng dòng máy ñiện thoại. Bản mô tả ñặc ñiểm của MIDP yêu cầu thiết bị
hỗ trợ phải dự trữ ít nhất 8K cho việc ñảm bảo tính ổn ñịnh của hệ thống lưu
trữ. Các thư viện lập trình cung cấp cho người lập trình phương thức ñể lấy ra
dung lượng của hệ thống lưu trữ, và nếu ứng dụng lưu trữ dữ liệu quá lớn
trong khi bộ nhớ ñiện thoại không ñủ thì MIDP sẽ phát sinh lỗi ñể ñảm bảo an
toàn cho hệ thống.
Tốc ñộ truy xuất
RMS ñược lưu trữ trong bộ nhớ ổn ñịnh (persistent memory – tức vẫn giữ
dữ liệu ngay cả khi tắt máy), vì thế nó thường tru xuất chậm hơn so với bộ nhớ
không ổn ñịnh (volatile memory – tức dữ liệu ñược duy trì nhờ ñiện). Và việc
truy xuất ở một sô dòng ñiện thoại sẽ tốn rất nhiều thời gian. ðể tối ưu trong
việc xử lý, người lập trình nên lưu trữ những giá trị thường thao tác vào
volatile memory, và chỉ ghi lại vào RMS khi cần thiết.
Tránh cho ứng dụng rơi vào deadlock
Tình trạng deadlock là tình trạng ứng dụng ñang xử lý một công việc nào
ñó, và làm cho ứng dụng rơi vào trạng thái bị “treo”, ở những thiết bị có tốc ñộ
chậm, việc truy xuất sẽ làm cho ứng dụng “treo” rất lâu, tạo cảm giác sốt ruột
và khó chịu cho người sử dụng. Do ñó, người lập trình thường ñược khuyến
cáo nên ñưa thao tác truy xuất ra một luồng riêng, ñể ứng dụng có thể tiếp tục
ñược thực hiện những công việc khác như hiển thị màn hình chờ ñang trong
trạng thái “chuyển ñộng”, …
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 51
Lỗi ngoại lệ (Exception)
Khi thao tác với RMS, các lỗi ngoại lệ sau có thể ñược phát sinh, nhằm
mục ñích ñảm bảo an toàn cho hệ thống:
• InvalidRecordIDException ñược phát sinh khi người lập trình thực
hiện việc ñọc ghi lên một record thông qua một chỉ số không tồn tại
trong Record Store.
• RecordStoreFullException ñược phát sinh khi người lập trình thực
hiện ghi dữ liệu có dung lượng lớn hơn sức chứa hiện tại của RMS.
• RecordStoreNotFoundException ñược phát sinh khi người lập trình
mở một Record Store không tồn tại trong RMS, thông thường trong
trường hợp này, người lập trình chưa tạo Record Store ñó hoặc bị
nhầm tên Record Store.
• RecordStoreNotOpenException ñược phát sinh khi người lập trình ñọc
ghi vào một Record Store ñã ñóng lại.
• RecordStoreException là lớp cao nhất, nó bao hàm những lỗi phát sinh
trên.
Cấu trúc lưu trữ trong RMS (Record Management System)
Cấu trúc tổng quan của Record Store như sau:
Chỉ mục (Record ID) Dữ liệu
1 Lưu thông tin của thư viên
2 Dữ liệu bài hát
… …
n Dữ liệu bài hát
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 52
Record ñầu tiên trong Record Store lưu trữ thông tin chung của thư viện,
phần data ñược lưu theo dạng dữ liệu chuỗi nhị phân, cụ thể như sau:
ðộ dài Nội dung lưu trữ
4 byte Số lượng bài hát có trong thư viện
Các byte còn lại Bao gồm các nhóm dữ liệu về thông tin bài
hát, số lượng nhóm ñúng bằng số lượng bài
hát ñược nêu ở trên
Thông tin cụ thể của một nhóm dữ liệu thông tin bài hát như sau:
ðộ dài Nội dung lưu trữ
4 byte ID của bài hát, cũng chính là RecordID của
nội dung bài nhạc trong Record Store
4 byte ðộ dài của chuỗi lưu trữ tên bài hát, lưu theo
ñịnh dạng UTF-8 (có giá trị x)
x byte Chuỗi tên bài hát
4 byte ðộ dài của chuỗi lưu trữ chuỗi tên tác giả (có
giá trị y)
y byte Chuỗi tên tác giả
4 byte ðộ dài của nội dung bài hát, tính theo ñơn vị
byte (chỉ dùng cho mục ñích hiển thị ra bên
ngoài)
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 53
3.2.3. Cấu trúc giao diện của KaraMobile
Sơ ñồ màn hình
Những thành phần giao diện chính
Sau ñây là những thành phần chính của ứng dụng trên ñiện thoại di ñộng
ðây là màn hình chào, màn hình thường xuất hiện ñầu
tiên khi ứng dụng ñược khởi tạo, và hiển thị biểu tượng
của ứng dụng với những hiệu ứng ñặc biệt kèm theo.
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 54
ðây là màn hình menu chọn, có 4 mục ñể người sử dụng
lựa chọn.
ðây là dạng hộp thoại hiển thị thông báo cho người sử
dụng. Hộ thoại không sử dụng những button như trong
những ứng dụng của PC, thay vào ñó là tận dụng 2 nút
bấm lệnh (soft key) ở 2 bên. 2 nút này ñều có ở hầu hết
tất cả các loại ñiện thoại.
ðây là dạng màn hình hiển thị danh sách bài hát, dạng
màn hình này sử dụng trong những chức năng cần ñến
việc hiển thị danh sách các bài hát như: bài hát trong thư
viện nội bộ, duyệt bài hát trực tuyến… Phần này có thêm
một nút lệnh “Lựa chọn”, nút lệnh ñó sẽ ñưa ñến một
popup menu chứa những thao tác lệnh ñối với bài hát
ñược chọn.
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 55
ðây là popup menu chứa tập hợp lệnh. Nó giúp cho màn
hình ñiện thoại gọn gàng hơn, và việc truy cập ñến
những chức năng tiện hơn.
ðây là màn hình hiển thị lời bài hát trong quá trình hát
Karaoke.
ðây là màn hình chờ, ñược hiển thị khi có một quá trình
xử lý ñang ñược thực hiện ngầm, và chỉ ẩn khi quá trình
xử lý hoàn tất. Màn hình này giúp cho người dùng ñỡ sốt
ruột khi thực hiện một tác vụ chiếm nhiều thời gian, như
yêu cầu kết nối, hoặc yêu cầu danh sách bài hát về.
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 56
3.2. Hệ thống KaraServer – phía server
3.2.1. Giới thiệu về JSP và Servlet
Giới thiệu JavaServerPages (JSP)
Công nghệ JavaServer Pages (viết tắt là JSP) còn ñược biết ñến với một
tên khác là Java Scripting Preprocessor - tạm dịch là "Bộ tiền xử lý văn
lệnh Java"- là công nghệ Java dựa trên nền J2EE ñể xây dựng những ứng
dụng chứa nội dung trang Web ñộng như: HTML, DHTML, XHTML và
XML. Công nghệ JSP có khả năng tạo ra những trang Web với nội dung linh
hoạt, có vai trò quan trọng trong việc phát triển các ứng dụng Web. Công nghệ
này cho phép người ta nhúng mã Java và một số hành ñộng xử lý ñược ñịnh
trước (pre-defined actions) vào trong nội dung tĩnh của trang.
Một trang JSP (.jsp) là một trang HTML hay XML trong ñó có chứa mã
Java, phần HTML chịu trách nhiệm về việc ñịnh dạng văn bản, mã chương
trình xen lẫn trong văn bản dùng ñể diễn ñạt các thao tác xử lý dữ liệu hoặc
nối kết với CSDL (Database). Trang Web truyền thống (dùng HTML) ñược
trình chủ Web gửi ngay ñến cho máy khách (Client) khi có yêu cầu, còn các
trang JSP phải chạy qua một guồng máy (Engine) riêng biệt, ở ñó phần mã
chương trình ñược tách ra khỏi trang JSP, ñược thi hành và kết quả xử lý ñược
ghi trở vào trang Web ñang xét, tạo thành trang HTML thuần tuý.
Trang JSP khi chạy, mã Java sẽ ñược biên dịch thành JavaServlet và Servlet
này chạy trên máy ảo Java (JVM) ở phía máy chủ (Web Server). Mã Java
ñược biên dịch khi máy khách truy xuất trang JSP lần ñầu tiên. Tập tin .jsp có
cấu trúc giống như tập tin .html truyền thống, nhưng khác ở chỗ là tập tin .jsp
có xen lẫn mã Java. Mã Java ñược tách biệt với phần HTML thông thường
bằng cặp dấu .
Cơ chế hoạt ñộng của JSP
Công nghệ JSP gắn liền với Servlet. Mã Java trong trang JSP ñược biên
dịch thành Servlet khi trình duyệt phía khách (Client) truy xuất trang JSP lần
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 57
ñầu tiên. Quy trình diễn ra như sau : Mã Java ñược tách ra khỏi nội dung bình
thường của trang JSP, tạo thành mã nguồn của Servlet. Kết quả xử lý của
Servlet ñược thay vào chỗ biểu thức JSP trong trang Web ban ñầu (trang Web
mà trình duyệt nhận ñược là trang HTML thuần túy).
Những ñiểm nổi bật của công nghệ JavaServerPages (JSP)
Tận dụng ñược sức mạnh của ngôn ngữ lập trình Java: Từ trước ñến
nay chúng ta ñều biết ñến Java như là một công cụ hỗ trợ ñắc lực trong việc
xây dựng các ứng dụng Web Client - side. Nhưng Java cũng còn là một môi
trường lý tưởng ñể tạo thành phần server cho ứng dụng Web. Do nền tảng của
JSP dựa trên Java nên JSP cũng tận dụng ñược các ưu ñiểm trên. JSP cung cấp
một phương pháp rất mạnh ñể xử lý yêu cầu từ Client, cũng như những ưu việt
trong chế ñộ an toàn, chống rò rỉ bộ nhớ (memory leak) và hỗ trợ chế ñộ xử lý
ña tuyến ñoạn (multithreading). Ngòai ra, môi trường Java ñã ñưa ra rất nhiều
sự mở rộng cho việc phát triển các ứng dụng enterprise. JSP ngày nay ñã là
một thành phần cốt lõi trong môi trường J2EE. Vì vậy, với công nghệ JSP,
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 58
người ta hoàn toàn có thể tạo ra ñược những ứng dụng có quy mô lớn với chất
lượng cao.
Quy trình phát triển, triển khai và duy trì phát triển ứng dụng Web
trở nên dễ dàng và nhanh chóng: JSP ñã làm ñơn giản hóa và tăng tốc quy
trình phát triển ứng dụng Web. Thay cho việc phải viết một chương trình Java,
giờ ñây người ta chỉ cần tạo một trang HTML, thêm các thẻ tựa XML (XML -
like tags) và nếu cần thiết, sử dụng thêm các ñoạn scriptlet. Bằng việc hỗ trợ
các thư viện customized tag và mô hình phát triển dựa trên thành phần
(component - based development), JSP không chỉ làm giảm công sức phải bỏ
ra của những người phát triển mà nó còn cung cấp một cơ sở vững chắc cho
các công cụ phát triển. Khi ñã ñược xây dựng, các trang JSP còn dễ bảo trì bởi
sự tách biệt các xử lý nghiệp vụ (thường ñược ñặt trong các thư viện
customized tag hay các thành phần JavaBeans) ra khỏi giao tiếp, hình thức của
trang.
Tận dụng ñược những thành phần có thể dùng lại (reusable
components): Hầu hết các trang JSP ñều dựa trên những thành phần xuyên
nền (cross-platform components) có thể dùng lại (các thnh phần JavaBeans
hay Enterprise JavaBeans) ñể thực hiện những xử lý nghiệp vụ phức tạp.
Những nhà phát triển có thể trao ñổi hay chia sẻ những thành phần chuyên
trách xử lý chung (common operations), do ñó sẽ làm giảm ñáng kể chi phí khi
xây dựng ứng dụng. Cách tiếp cận dựa trên thành phần của JSP ñã làm tăng
tốc ñộ phát triển ứng dụng và cho phép ñạt ñược kết quả tối ưu trên sản phẩm
sau cùng.
Tách biệt nội dung với giao diện: Với công nghệ JSP, người phát triển
sử dụng các thẻ HTML hay XML ñể thiết kế giao tiếp trang Web, các thẻ JSP
hay các ñoạn scriptlet ñể phát sinh nội dung ñộng của trang (nội dung này phụ
thuộc vào yêu cầu của user). Các xử lý phát sinh nội dung ñược ñóng gói trong
các thẻ hay thành phần JavaBeans và ñược liên kết lại trong scriptlet, sau ñó
ñược thực hiện ở server. Do những xử lý cốt lıi ñă ñược ñóng gói trong các
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 59
thẻ Beans, Web master và page designer có thể hiệu chỉnh và làm việc trên
trang JSP mà không ảnh hưởng ñến xử lý nghiệp vụ của trang. Các ñiều trên
giúp bảo vệ các ñoạn code sở hữu ñộc quyền và vẫn ñảm bảo cho mọi HTML
- based web Browser có thể truy xuất ñến các trang JSP theo yêu cầu.
Sự phát triển mở rộng và hỗ trợ công nghiệp rộng lớn: JSP ñược phát
triển dưới Java Community Process. ðiều này ñảm bảo nó có một sự hỗ trợ
công nghiệp rộng lớn của hầu hết các Web server và Application server. Hơn
nữa, công nghệ này giờ ñây ñă ñược phát triển mở trong dự án của Apache
Software Foundation. Với ñiều này, công nghệ JSP mới nhất sẽ có ñược một
ảnh hưởng tầm cỡ thế giới trong công nghệ thông tin. Sun Microsystems ñược
uỷ nhiệm việc duy trì tính ña nền và mở cửa công nghệ này.
Sự ñộc lập nền: Công nghệ JSP ñưa ra khả năng sử dụng lại ứng dụng
trên bất kỳ nền và server nào (ñây cũng chính là khẩu hiệu nổi tiếng của ngôn
ngữ Java : "Write Once, Run Anywhere"). Nó cung cấp một phương pháp
hướng thành phần, ñộc lập nền trong việc xây dựng ứng dụng Web. Hầu hết
Web server v Application server ñă và ñang ñưa ra những sản phẩm hỗ trợ
công nghệ JSP. Sự hỗ trợ ña nền, rộng lớn này cho phép Web developer viết
code JSP một lần nhưng có thể triển khai khắp mọi nơi.
ðơn giản hóa quá trình phát triển với các thẻ: Web page developer
không phải lúc nào cũng là một lập trình viên thông thạo với ngôn ngữ Script.
Công nghệ JSP ñóng gói nhiều chức năng cần thiết trong việc phát sinh nội
dung ñộng ở dạng dễ sử dụng, các thẻ JSP - specific XML tag. Các thẻ JSP
chuẩn có thể truy xuất và khởi tạo những thành phần JavaBeans, thiết lập hay
nhận về giá trị của thuộc tính, download applet, và thực hiện những xử lý mà
nếu viết code sẽ khó khăn và mất nhiều thời gian. Công nghệ JSP có thể mở
rộng thông qua sự phát triển của các customized tag library. Hiện nay ñă có
khá nhiều các thư viện loại này, từ ñó giúp người phát triển trang Web có thể
làm việc với những công cụ quen thuộc khi thực hiện những xử lý phức tạp.
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 60
Mô hình ứng dụng dụng công nghệ JavaServerPages (JSP): Một trang
JSP sẽ ñược xử lý bởi một JSP Engine (ñược cài ñặt trên Web Server hay
Application Server hỗ trợ công nghệ JSP). JSP Engine nhận yêu cầu từ client
ñến trang JSP và phát sinh những phản hồi từ trang JSP nhận về Client. Những
trang JSP ñược biên dịch thành JavaServlets. JavaServlets là một sự mở rộng
của Java chuẩn, do ñó các nhà phát triển có thể truy xuất ñến môi trường ứng
dụng Java ñầy ñủ với tất cả các sức mạnh và sự linh ñộng vốn có của họ Java.
Khi một trang JSP ñược gọi lần ñầu tin nếu chưa tồn tại sẽ ñược biên dịch
thành một Servlet class và ñược lưu trữ trong bộ nhớ của Server. ðiều này cho
phép sự hồi ñáp nhanh chóng ñối với những yêu cầu tiếp theo ñến trang này.
Trang JSP có thể ñược sử dụng trong nhiều kiến trúc khác nhau và cũng
có thể kết hợp với các Protocol, Components khác nhau. Một vài mô hình có
thể có :
• Mô hình ứng dụng ñơn giản: Trong một ứng dụng ñơn giản Browser sẽ
trực tiếp gọi trang JSP. ðến lượt trang này lại phát sinh một yêu cầu (có
thể thông qua JDBC ñể nhận thông tin từ Database) nhằm tạo ra kết quả
ñáp ứng yêu cầu của Browser. Sau ñó tạo ra trang HTML chuẩn và gửi
trả trang này về cho Browser.
Mô hình này giúp việc lập trình ñơn giản và nhanh chóng. Dễ dàng
phát sinh nội dung dựa trên yêu cầu và trạng thái của tài nguyên. Tuy
nhiên, gặp khó khăn khi có nhiều Client truy xuất ñồng thời những tài
nguyên khan hiếm của hệ thống, do mỗi Client phải thiết lập hay chia sẻ
kết nối ñến ti nguyên.
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 61
VD : Nếu một trang JSP truy xuất một Database, nó có thể tạo ra
nhiều kết nối ñến Database, dẫn ñến ảnh hưởng ñến hiệu suất của
Database.
• Mô hình ứng dụng kết hợp với Servlet: Client gửi yêu cầu trực tiếp
ñến JavaServlet. JavaServlet phát sinh nội dung ñộng, ñóng gói kết quả
có ñược vào trong Bean, tiếp theo gọi trang JSP. Trang JSP này sẽ truy
xuất nội dung ñộng của Bean và gửi kết quả (dữ liệu HTML) ñến
Browser. Phương pháp này tạo nên nhiều thành phần có thể dừng lại và
chia sẻ giữa nhiều ứng dụng.
• Mô hình kết hợp với công nghệ Enterprise JavaBeans: Trang JSP
cũng có thể hoạt ñộng như một MiddleTier trong một kiến trúc
Enterprise JavaBeans. Trong trường hợp này trang JSP tương tác với
những tài nguyên Back-end dựa trên một thành phần Enterprise
JavaBeans.
Chu trình sống của Servlet và JSP
Chu trình sống của servlet bắt ñầu ñược hệ thống gọi nạp vào bộ nhớ cho
ñến khi nó bị loại khỏi trình chủ Web server vì không còn cần ñến nữa. Quá
trình sống của servlet trải qua các giai ñoạn sau:
• Nạp servlet Tùy theo ñiều kiện, một servlet có thể nạp vào bộ nhớ ở 3
thời ñiểm khác nhau: khi server khởi ñộng, khi ngừoi quả trị yêu cầu
hoặc khi trình duyệt triệu gọi servlet từ máy khách. Hầu hết các Web
server ñiều cho phép bạn chọn danh sách servlet sẽ ñược ưu tiên nạp
lúc Web server khởi ñộng. Tuy tốn ít thời gian hơn nhưng sau ñó
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 62
servlet ñã trong trạng thái sẵn sàng có thể phục vụ trình khách bất kỳ
lúc nào.
• Khởi tạo servlet Trình chủ Web server khởi tạo servlet bằng cách gọi
ñến phương thức init () mà servlet cài ñặt. Phương thức này chỉ gọi
một lần duy nhất. Chúng ta có thể lợi dụng cơ hội này ñể khởi tạo các
biến toàn cục mà servlet sẽ sử dụng sau này.
• Thực thi servlet Khi trình duyệt hoặc các trang JSP triệu gọi servlet
thông qua ñịa chỉ URL, trình chủ Web server sẽ chính thức gọi servlet
thực thi thông qua các phương thức như doGet (), doPost () hoặc
service (). Ví dụ khi chúng ta gọi trực tiếp servlet từ ñịa chỉ URL,
phương thức doGet () của servlet sẽ ñược gọi. Nếu chúng ta gọi
servlet thông qua thao tác post cua thẻ thì phương thức doPost
() sẽ ñược gọi. Sau khi các phương thức này ñược gọi thực thi xong,
servlet vẫn giữ lại trong bộ nhớ ñể phục vụ cho các lần triệu gọi tiếp
theo. ðây cũng chính là ưu ñiểm làm cho servlet thực thi nhanh các
ứng dụng CGI.
• Dọn dẹp servlet Servlet không giữ lại trong bộ nhớ vĩnh viễn, sẽ ñến
lúc cần loại servlet khỏi bộ nhớ. Ví dụ như khi nhà quản trị muốn
dừng hệ thống, muốn Webserver khởi ñộng lại ñể giải phóng rác trong
bộ nhớ tăng hiệu suất thực hiện…. Trước khi chấm dứt, Web server sẽ
gọi ñến phương thức hủy destroy () của servlet. ðây là cơ hội ñể
servlet thực hiện một số thao tác dọn dẹp cần thiết như lưu dữ liệu
xuống ñĩa, ghi nhớ trạng thái của servlet ñể phục vụ cho lần khởi ñộng
sau, ñóng kết nối với cơ sở dữ liệu…. Và mặc dù Java có thể tự ñộng
thu gom rác trong bộ nhớ nhưng nếu chúng ta ñã cấp phát một khối
lượng bộ nhớ lớn cho servlet trong quá trình làm việc, chúng ta nên
thực hiện giải phóng chúng trong phương thức destroy ().
Chu trình sống của JSP: tương tự như chu trình sống của servlet, trang
JSP cũng có chu trình sống xác ñịnh tính từ khi hệ thống ñọc biên dịch trang
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 63
JSP, gọi thực thi và loại trang khỏi bộ nhớ. Chu trình sống của JSP trải qua các
giai ñoạn sau:
• Biên dịch trang JSP: Khi trình duyệt yêu cầu trang JSP, ví dụ triệu
gọi trang JSP bằng URL Web server sẽ
kiểm tra trang JSP ñã ñược biên dịch hay chưa. Nếu chưa biên dịch
hoặc ñã biên dịch nhưng trang JSP mới vừa thay ñổi trong mã nguồn
thì Web server sẽ thực hiện biên dịch trang JSP. Quá trình biên dịch
JSP thực tế là chuyển trang JSP thành servlet. File biên dịch . class
của trang sẽ ñược ñặt trong thư mục ñệm. Như chúng ta thấy, quá
trình biên dịch trang chỉ diễn ra một lần. Nếu trang ñã biên dịch và sau
ñó chúng ta không có thay ñổi gì trong trang nguồn thì quá trình biên
dịch sẽ không xảy ra, do ñó tốc ñộ thực thi trang sẽ nhanh hơn. Sau
khi trang ñã ñược biên dịch, mã trang sẽ ñược nạp vào bộ nhớ ñể thực
thi.
• Nạp trang Kể từ giai ñoạn này, quá trình nạp trang tương tư như
servlet. Chỉ có một khác biệt ñó là servlet chỉ ñược nạp một lần trong
khi mã trang JSP mặc dù ñã biên dịch nhưng phải nạp lại nhiều lần
mỗi khi Web server nhận ñược yêu cầu trang từ trình duyệt.
• Khởi tạo Khi nạp mã trang thành công, Web server sẽ gọi ñến phương
thức khởi tạo trang. Và mặc dù, JSP ñược biên dịch ra servlet như
phương thức khởi tạo cho trang JSP lại mang tên jspInit () chứ không
phải là init () như servlet.
• Thực thi Sau quá trình khởi tạo, Web server sẽ gọi ñến phương thức
_jspService (). Phương thức _jspService sẽ chuyển cho chúng ta hai
lớp ñối tượng HttpServletRequest và HttpServletResponse ñể ñọc và
ghi kết xuất trả về trình khách.
• Dọn dẹp Khi trang JSP ñã thực thi xong, trình chủ Web server sẽ gọi
phương thức jspDestroy () ñể giải phóng mã trang khỏi bộ nhớ. Tương
tự như trong servlet, chúng ta có thể cài ñặt phương thức jspDestroy ()
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 64
thực hiện chức năng giảp phóng vùng nhớ hoặc ñóng kết nối trả tài
nguyên về cho hệ thống.
3.2.2. Log4j
Giới thiệu
Chèn các câu log trong ứng dụng là kĩ thuật debug cấp thấp rất ñược ưa
chuộng, nguyên do không phải bất kì hệ thống nào ta cũng có thể dễ dàng
debug ñược. Ví dụ như các ứng dụng multithread, các ứng dụng phân tán. Sử
dụng log giúp ta dễ dàng theo dõi ứng dụng, dễ dàng bắt lỗi khi hệ thống gặp
trục trặc.
Log4j là một thư viện Java cho phép xuất ra các câu lệnh log cho các mục
ñích khác nhau.
Log4j chỉ có 3 khái niệm cơ bản là : Logger ,Appender và Layout . Logger
bắn messages ra appender theo một layout nào ñó ( hay gọi là kiểu dáng ).
Logger tương tự như một thành phần ẩn của ứng dụng bắt những yêu cầu
bắn messages mà ñưa messages ra. Mỗi một lớp trong ứng dụng có thể có một
logger hoặc sử dụng chung logger. Log4j cung cấp một root logger mà tất cả
các logger khác trong chương trình của bạn sẽ kế thừa từ root logger này.
Logger cần biết nơi nào nó sẽ gứi message ñến ñó là lý do mà appender
góp mặt. Log4j hỗ trợ nhiều loại appender tùy thuộc vào mục ñích :
FileAppender - viết ra file, ConsoleAppender - viết ra màn hình,
JDBCAppender viết vào CSDL,.... Nhưng File và Console là hai appender
thường dùng nhiều nhất.
Logger và appender kết hợp lại ñưa message ra nơi cần thiết nhưng ñịnh
dạng message thế nào ? ðó chính là layout.
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 65
Layout ñịnh nghĩa kiểu dáng và nội dung ñưa ra của message. Log4j cung
cấp sẵn một số basic layout mà chúng ta có thể dùng chúng hoặc tự ñịnh
nghĩa layout của mình.
Log4j ñưa ra 5 level log :
• DEBUG.
• INFO
• WARN
• ERROR
• FATAL
Cấu hình
Log4j có thể cấu hình bằng code nhưng thường thì sử dụng file cấu hình
bên ngoài mềm dẻo hơn. Chúng ta có thể cấu hình bằng file .properties hoặc
xml.
Ví dụ một file cấu hình log4j.properties như sau:
Với file .properties cấu hình trên, chúng ta ñịnh nghĩa level ñưa message
ra màn hình ở ñây là INFO, và tên tham chiếu của appender ñược sử dụng
ñịnh nghĩa này cho root logger nên tất cả các logger khác sẽ ñược kế thừa.
ðịnh nghĩa appender : ở ñây sử dụng FileAppender xuất message ra file theo
ñường dẫn. Và ñịnh nghĩa dạng layout cho message ñược xuất ra.
log4j.rootCategory=INFO, A1
log4j.appender.A2=org.apache.log4j.FileAppender
log4j.appender.A2.file=logs/logfile.log
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%-5p %d{ISO8601}
[%t] - %m%n
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 66
Sử dụng
Với file cấu hình .properties trên , sau khi ñặt vào classpath của java,
chúng ta bắt ñầu cấu hình trong code và sử dụng như sau:
PropertyConfigurator.configure("log4j.properties");
Khai báo một logger : Logger.getLogger(); tham số ở ñây là lớp
mà chúng ta sử dụng logger. Ở ñây ví dụ lớp ServiceServlet
Logger log = Logger.getLogger(ServiceServlet.class);
Bây giờ có thể sử dụng log ñể ñưa message ra Appender theo layout ñã
ñịnh nghĩa:
log.info();
log.debug();
log.warn();
log.error();
log.fatal();
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 67
3.2.3. Cấu trúc của trang KaraAdmin
Sơ ñồ trang
Mô tả chi tiết
index.jsp
Khi khởi ñộng server, sẽ hiển thị trang web này ñầu tiên, thông báo cho
người quản trị biết ñã ñăng nhập hay chưa. Nếu chưa ñăng nhập, yêu cầu ñăng
nhập ñể bắt ñầu quản trị hệ thống, nếu ñã ñăng nhập, xuất hiện thông báo.
Khi chưa ñăng nhập:
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 68
ðã ñăng nhập :
login.jsp
Cho phép người quản trị ñăng nhập ñể bắt ñầu quản trị hệ thống, ñăng nhập
với tài khoản ñã ñược tạo ra từ trước
adminHome.jsp
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 69
Trang chủ của người quản trị, sau khi ñăng nhập thành công.Hiển thị các
chức năng của người quản trị trong việc quản trị hệ thống. Bao gồm các chức
năng như :
Quản lý admin : cho phép quản lý các thông tin liên quan ñến các thành viên
quản trị khác như thêm người quản trị mới, xóa một người quản trị khác, thay ñổi
password.
Quản lý Thành viên : cho phép quản lý các thành viên trong hệ thống, theo
dõi sự hoạt ñộng của các thành viên trong hệ thống và có thể tác ñộng ñến các
thành viên nếu cần.
Quản lý Nhạc : cho phép quản lý các bài nhạc mà các thành viên ñăng lên
cộng ñồng, các thông tin liên quan ñến các bài nhạc ñó như nội dung comment
(bình luận) ñi kèm.
Quản lý Comment : cho phép người quản trị thao tác với các comment ñược
các thành viên ñăng lên. Xem xét các nội dung comment ñó và xóa nếu như cảm
thấy ñó là comment vi phạm.
Setting : cho phép người quản trị cài ñặt các thông số như quy ñịnh thời gian
sẽ ñưa các thành viên vào danh sách chờ hay hệ thống sẽ tự ñộng xóa, ñồng thời
quy ñịnh các câu chữ sẽ ñược coi là vi phạm trong nội dung comment.
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 70
manageAdmin.jsp
ðây là trang chính của phần quản trị Admin , mô tả các chức năng có trong
phần Quản trị Admin gồm : thay ñổi password, thêm một admin mới, xóa admin
khác
adminEditPass.jsp
Trang này cho phép người quản trị thay ñổi password của mình khi cần thiết
adminAdd.jsp
Trang này cho phép người quản trị ñang truy cập thêm một người quản trị
mới vào hệ thống, sau ñó cung cấp lại tên truy cập và password cho người quản
trị này
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 71
adminDel.jsp
Trang này cho phép người quản trị xóa tài khoản truy cập của một admin
khác, với ñiều kiện biết ñược mật khẩu truy cập của admin ñó.
manageUser.jsp
ðây là trang chính của phần quản lý thành viên, mô tả các chức năng trong
phần quản lý thành viên gồm : thống kê số lượng thành viên, tìm kiếm thành viên
theo tên ñăng nhập, liệt kê danh sách thành viên trong trạng thái chờ, liệt kê toàn
bộ thành viên trong hệ thống.
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 72
userStatistic.jsp
Trang này thống kê số lượng thành viên trong hệ thống, số lượng thành viên
trong danh sách chờ, số lượng thành viên ñang hoạt ñộng, thể hiện thông tin của
thành viên mới
Từ ñây, người quản trị có thể xem thông tin chi tiết của thành viên mới ñăng
ký tham gia.
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 73
userSearch.jsp
ðây là trang web cho phép người quản trị tìm kiếm một thành viên theo tên
ñăng nhập, hệ thống sẽ tìm kiếm những thành viên có tên truy cập gần giống với
tên người quản trị tìm.
Và kết quả tìm kiếm :
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 74
userWaitingList.jsp
Cung cấp cho người quản trị danh sách các thành viên trong danh sách chờ vì
quá thời gian quy ñịnh nhưng không ñăng nhập
userList.jsp
ðưa ra danh sách toàn bộ thành viên trong hệ thống
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 75
manageMusic.jsp
ðây là trang chính của phần quản lý Nhạc trong hệ thống, bao gồm chức
năng như thống kê số lượng nhạc , tìm kiếm bài nhạc theo tên, và liệt kê tất cả
các bài nhạc trong hệ thống.
musicStatistic.jsp
Trang này cho cung cấp số lượng bài hát trong hệ thống, ñồng thời cho phép
liệt kê các bài nhạc mới, các bài nhạc ñược download nhiều, ñược comment
nhiều trong hệ thống.
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 76
Xem danh sách các bài hát mới ñược ñăng lên
Bài hát ñược comment nhiều
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 77
Và các bài hát ñược download nhiều
musicSearch.jsp
Cho phép người quản trị tìm kiếm bài nhạc theo tên, hệ thống sẽ tìm kiếm
các bài nhạc có tên gần giống với tên mà người quản trị muốn tìm
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 78
Và kết quả tìm kiếm
MusicList.jsp
Cung cấp toàn bộ bài hát trong hệ thống, và hiển thị thành danh sách
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 79
Từ tất cả các trang trong phần quản lý nhạc, ñều có thể xem chi tiết về bài
nhạc ñó và các comment ñi kèm một cách ñầy ñủ nhất, trong ñó, người quản trị
có thể xóa các comment ñi kèm nếu như nhận thấy ñó là comment vi phạm.
manageComment.jsp
ðây là trang chính của phần quản lý comment trong hệ thống, bao gồm hai
chức năng ñó là liệt kê tất cả các comment trong hệ thống và các comment vi
phạm.
commentBlack.jsp
Hiển thị tất cả các comment ñược coi là vi phạm, từ ñây người quản trị có thể
xem chi tiết comment này và xóa comment nếu muốn.
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 80
commentList.jsp
Cung cấp toàn bộ comment trong hệ thống cho người quản trị.
Từ hai phần là xem danh sách comment vi phạm và danh sách toàn bộ
comment, ñều có thể xem chi tiết ñầy ñủ nội dung của một comment, và người
quản trị có thể quyết ñịnh xóa hay không ñối với comment này.
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 81
Setting.jsp
Trang này cho phép người quản trị cài ñặt các thông số cho hệ thống, như số
dòng dữ liệu ñược hiển thị trên một trang web, số tháng quy ñịnh cho các thành
viên không ñăng nhập, sẽ bị liệt vào danh sách chờ, số tháng mà hệ thống sẽ tự
ñộng xóa thành viên không ñăng nhập khỏi hệ thống và các câu chữ mà nếu có
trong comment sẽ bị liệt kê là comment vi phạm.
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 82
3.3. Kỹ thuật kết nối dữ liệu
3.3.1. Giới thiệu chung về kỹ thuật:
Client và Server truyền dữ liệu với nhau thông qua phương thức POST của
giao thức HTTP.
Mỗi gói tin ñược gửi ñi có cấu trúc chung như sau:
+ + + …
Và mỗi gói tin kết quả về có cấu trúc chung như sau:
+ + + …
Trong ñó:
: “KrMb” +
“KrMb”: chuỗi nhận dạng cho hệ thống biết ñó là yêu cầu từ ứng dụng
trong cùng hệ thống gửi lên.
: lưu trữ mã dịch vụ yêu cầu, có ñộ dài 1 byte
: có giá trị 1 byte, ñể báo cho client biết server có ñáp ứng
ñược yêu cầu không, hoặc là có lỗi xảy ra trong quá trình xử lý yêu cầu. Nếu mã
kết quả là 0x00, tức là không có lỗi xảy ra, kèm theo ñó là những dữ liệu trả về
cho client, ngược lại, trả về mã lỗi. Chúng ta sẽ mô tả chi tiết về các mã lỗi ở các
phần sau.
, : bao gồm các dạng dữ liệu như
sau:
• int: chiếm 4 byte
• string: bao gồm 2 byte ñầu lưu trữ ñộ dài của ñoạn dữ liệu lưu
trữ chuỗi, ñược mã hóa theo ñịnh dạng UTF-8
• bytearray: bao gồm 4 byte ñầu lưu trữ ñộ dài của mảng byte,
phần sau là nội dung
Cấu trúc tin gửi lên và trả về của từng dịch vụ như sau:
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 83
Bảng sau mô tả chi tiết về mã các dịch vụ mà KaraServer cung cấp ñể xử lý
yêu cầu từ KaraMobile
Tên dịch vụ Mã dịch vụ Mô tả
signup 0x01 dịch vụ yêu cầu hệ thống ñăng ký một
thành viên mới
signin 0x02 dịch vụ yêu cầu hệ thống kiểm tra việc
ñăng nhập của thành viên bằng việc
kiểm tra sự tồn tại của username và
password
list 0x03 dịch vụ yêu cầu danh sách những bài
hát mới nhất
listhot 0x04 dịch vụ yêu cầu danh sách những bài
hát ñược download nhiều nhất
download 0x05 dịch vụ yêu cầu hệ thống trả về nội
dung của một bài hát cụ thể
upload 0x06 dịch vụ yêu cầu hệ thống lưu nội dung
của tập tin nhạc ñã ñược người dùng
upload lên
listowner 0x07 dịch vụ yêu cầu danh sách những bài
hát của một user do client gửi lên
edituser 0x08 dịch vụ yêu cầu hệ thống cập nhật lại
thông tin của user
editsong 0x09 dịch vụ yêu cầu hệ thống cập nhật lại
thông tin của một bài hát
delsong 0x0a dịch vụ yêu cầu hệ thống xóa một bài
hát của user
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 84
viewsongdetail 0x0b dịch vụ yêu cầu hệ thống gửi về thông
tin chi tiết của một bài hát, bao gồm tất
cả các comment cho bài hát ñó
viewuserdetail 0x0c Dịch vụ yêu cầu hệ thống gửi về thông
tin chi tiết của một user
addcm 0x0d dịch vụ yêu cầu hệ thống thêm một
comment của một user ñối với 1 bài hát
nào ñấy. Vì mỗi User chỉ ñược
comment một lần cho 1 bài hát nên nếu
yêu cầu thêm vào ñã có trong CSDL thì
hệ thống tiến hành thay thế comment ñó
với comment mới.
Bảng mã kết quả trả về khi thất bại
Mã lỗi Service Mô tả
0x01 signup ðã tồn tại thành viên này
0x02 signin Username không tồn tại
0x03 signin Password không ñúng
0x04 - Dữ liệu bị lỗi trong quá trình truyền
3.3.2. Cấu trúc của các thông ñiệp
Tiếp theo, chúng ta sẽ mô tả chi tiết về cấu trúc tin gửi lên và trả về cho từng
dịch vụ
Dịch vụ signup :
Gói tin gửi ñi :
+ + +
Gói tin trả về khi thành công:
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 85
+ 0x00
Dịch vụ signin :
Gói tin gửi ñi :
+ +
Gói tin trả về khi thành công :
+ 0x00 + + + +
Dịch vụ list và listhot :
Gói tin gửi ñi :
+
Gói tin trả về khi thành công:
+ + [ + +
+ ]
Dịch vụ download :
Gói tin gửi ñi :
+ +
Gói tin trả về khi thành công :
+ +
Dịch vụ upload :
Gói tin gửi ñi :
+ + + +
+
Gói tin trả về khi thành công :
+ 0x00
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 86
Dịch vụ listowner:
Gói tin gửi ñi:
+
Gói tin trả về khi thành công:
+ + [ + +
]
Dịch vụ edituser:
Gói tin gửi ñi:
+ + +
Gói tin trả về khi thành công:
+ 0x00
Dịch vụ editsong:
Gói tin gửi ñi:
+ + + +
+
Gói tin trả về khi thành công:
+ 0x00
Dịch vụ delsong:
Gói tin gửi ñi:
+ +
Gói tin trả về khi thành công:
+ 0x00
Dịch vụ viewsongdetail:
Gói tin gửi ñi:
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 87
+ +
Gói tin trả về khi thành công:
+ + + +
+ + + +
[ + + ]
Dịch vụ viewuserdetail:
Gói tin gửi ñi:
+
Gói tin trả về khi thành công:
+ + + + +
Dịch vụ addcm:
Gói tin gửi ñi:
+ + + +
Gói tin trả về khi thành công :
+ 0x00
Bảng mô tả các biến trong các gói tin gửi ñi và trả về
Tên biến Kiễu dữ liệu Mô tả
UserName string Tên ñăng nhập của user
Password string Password ñăng nhập của user
UserInfo string Thông tin chi tiết của user
Upload int Số bài hát mà user này ñã ñưa lên
Level int Cấp bậc của user
RegisterDate string Ngày tham gia của user
ðồ án tốt nghiệp Chương 3 - Thiết kế, hiện thực hệ thống
Trang 88
Quantity int Số lượng bài hát yêu cầu, và số lượng bài
hát trả về, số lượng bài hát trả về sẽ nhỏ
hơn số lượng yêu cầu khi số lượng bài hát
trong CSDL nhỏ hơn số lượng yêu cầu
MusicId int Mã số bài hát
UserPosted string Tên của user upload
MusicName string Tên của bài hát
Composer string Tên của tác giả bài hát
MusicType string Thể loại của bài hát
MusicData bytearray Dữ liệu của bài hát
Download int Số lượng download của một bài hát
UserComment string Tên của người comment trong một bài hát
CommentDate string Ngày comment
Comment string Nội dung của một comment
CountComment int Số lượng comment của một bài hát
ðồ án tốt nghiệp Chương 4 - Triển khai hệ thống
Trang 89
Chương 4 - Triển khai hệ thống
4.1. Mô hình Deploy Diagram
Hình 11 – Deployment Diagram cho hệ thống
4.3. Triển khai hệ thống server
Phần KaraServer sẽ ñược biên dịch và ñóng gói thành tập tin .war. Tập tin .war
ñó sẽ ñược dùng ñể upload lên server hỗ trợ Tomcat. Chúng ta sẽ tiến hành ñăng ký
và triển khai hệ thống tại website
ðầu tiên, chúng ta ñăng ký một tài khoản miễn phí. Vì ñây là tài khoản dùng
thử nên sẽ có những giới hạn: sử dụng tối ña 50MB ổ cứng, băng thông truyền dữ
liệu 1 tháng tối ña 3GB, và chỉ ñược phép tạo tối ña 2 cơ sở dữ liệu.
Sau khi ñăng ký thành công một tài khoản , ở ñây, chúng ta có tài khoản có tên
là karaserver, chúng ta bắt ñầu tạo CSDL cho hệ thống bằng cách import file backup
.sql lên hệ thống trong phpMyAdmin với tên CSDL là tên ñăng nhập vào hệ thống.
ðây là trang chính của phần phpMyAdmin sau khi import thành công CSDL
lên server, tại ñây chúng ta có thể thao tác dễ dàng với CSDL của mình.
ðồ án tốt nghiệp Chương 4 - Triển khai hệ thống
Trang 90
Sau ñó import file .war vào hệ thống, với tên file tạo thành ñường dẫn tới trang
chủ như sau : +
Sau khi import file .war thành công, hệ thống sẽ yêu cầu khởi ñộng lại server và
hướng dẫn cho chúng ta tới trang chủ của mình.
ðồ án tốt nghiệp Chương 4 - Triển khai hệ thống
Trang 91
4.2. Triển khai ứng dụng client
Ứng dụng KaraMobile chạy trên ñược các loại ñiện thoại có hỗ trợ chuẩn MIDP
2.0, và hiển thị tối ưu nhất trên 2 loại ñiện thoại có ñộ phân giải màn hình 240x320,
và 176x220.
Người dùng có thể tải ứng dụng tại ñịa chỉ www.karamobile.net.ms dưới dạng
tập tin .jar, và chép vào ñiện thoại di ñộng thông qua thẻ nhớ, dây cáp, cổng hồng
ngoại hoặc bluetooth.
Sau khi chép vào ñiện thoại, một số dòng ñiện thoại của Nokia S60, hoặc Sony
Ericsson sẽ yêu cầu cài ñặt ứng dụng vào hệ thống; còn lại thì có thể chạy trực tiếp
tập tin .jar.
Ở lần chạy ñầu tiên của ứng dụng, người dùng phải ñợi cho ứng dụng khởi tạo
thư viện nhạc mặc ñịnh, ứng dụng sẽ chép 2 bài nhạc Yêu em âm thầm (Trúc Hồ) và
Yesterday(Beatles) vào thư viện. Thao tác khởi tạo này chỉ thực hiện duy nhất ở lần
chạy ñầu tiên của ứng dụng sau khi ñược cài ñặt hoặc chép từ máy tính sang. Với 2
bài hát mặc ñịnh này, người dùng có thể dùng thử ngay tính năng hát Karaoke mà
không cần phải truy cập vào mạng, hoặc phải tìm một tập tin .kar ñể import vào thư
viện.
ðồ án tốt nghiệp Chương 5 - Kết luận, hướng phát triển
Trang 92
Chương 5 - Kết luận, hướng phát triển
5.1. Những thiếu sót
KaraMobile
• Ứng dụng hiển thị chưa tối ưu trên thiết bị có ñộ phân giải 128x160, hiện
tại chỉ mới hỗ trợ hiển thị tốt ưu trên 2 loại màn hình chuẩn 176x220 và
240x320.
• Phần hát karaoke chỉ có một vài hình nền ñộng, chưa thể hiện ñược nhiều
hiệu ứng. Chưa tạo ñược nhiều hứng thú cho người hát.
• Chưa có chức năng chỉnh tông nhạc, tốc ñộ nhạc.
• Thông tin profile của thành viên chưa nhiều. Nên thành viên chưa thể
hiện ñược mình trên cộng ñồng.
• Giao diện còn ñơn sơ, chưa có nhiều hiệu ứng chuyển màn hình bắt mắt.
• Mật khẩu gửi lên chưa ñược mã hóa.
• Cơ chế paint() trong cấu trúc giao diện của ứng dụng ñang còn ở trạng
thái cập nhật liên tục (khoảng 20 lần cập nhật trên một giây), ñiều này
gây lãng phí tài nguyên ñiện thoại và gây ra sự hao tổn pin ñiện thoại.
• Dữ liệu bài hát gửi ñi và nhận về còn lớn so với tốc ñộ truyền tải GPRS
hiện nay, và chưa có cơ chế nén dữ liệu ñể tiết kiệm chi phí truyền tải
qua mạng.
KaraAdmin
• Giao diện và thiết kế của trang web cho phần admin chưa ñược bắt mắt
• Một số chức năng chưa ñược tiện dụng cho người sử dụng
• Phần thực thi và sử dụng code jsp trong các trang web chưa ñược nhuần
nhuyễn
• Không tránh ñược các lỗi về bảo mật dữ liệu trong quá trình thực thi và
truy cập dữ liệu
ðồ án tốt nghiệp Chương 5 - Kết luận, hướng phát triển
Trang 93
5.2. Hướng phát triển cho tương lai
• Cấu trúc giao diện của ứng dụng sẽ ñược thiết kế lại theo cơ chế khi nào cần
thay ñổi dữ liệu hoặc cần cập nhật mới tiến hành cập nhật và vẽ lại màn hình.
Giúp tiết kiệm tài nguyên hệ thống và ứng dụng chạy sẽ tiết kiệm pin hơn.
• Dữ liệu truyền tải qua mạng sẽ ñược gửi ñi ở dạng nén ñể tiết kiệm chi phí.
• Tăng cường sự bảo mật của ứng dụng, ñảm bảo sự an toàn của thành viên trong
cộng ñồng bằng những biện pháp: mã hóa mật khẩu gửi lên ñể tránh bị ñánh
cắp, mã hóa những câu lệnh SQL trong phần truy cập dữ liệu.
ðồ án tốt nghiệp Danh mục tài liệu tham khảo
Trang 94
Danh mục tài liệu tham khảo
Cấu trúc tập tin MIDI/KAR
J2ME
Databases and MIDP
J2ME 101, Part 3: Inside the Record Management System
Core J2ME™ Technology & MIDP (John W. Muchow, 2001)
JSP/Servlet
Căn bản về JSP (Phạm Hữu Khang) – www.huukhang.com
www.roseindia.net
Core Servlets & JavaServer Pages (Marty Hall)
J2ME to Servlet Communication -
htm
Các nguồn khác
Các bài báo về lịch sử của ñiện thoại di ñộng, về GPRS, 3G trên
www.vietnamet.net, www.tudiencongnghe.com
Các bài viết trên en.wikipedia.com về các vấn ñề và công nghệ liên quan
Các file đính kèm theo tài liệu này:
- Ứng dụng hát karaoke trên mobile và xây dựng cộng đồng nhạc KAR.pdf