Đồ án Ứng dụng hát karaoke trên mobile và xây dựng cộng đồng nhạc KAR

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

pdf94 trang | Chia sẻ: lvcdongnoi | Lượt xem: 3070 | Lượt tải: 0download
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:

  • pdfỨng dụng hát karaoke trên mobile và xây dựng cộng đồng nhạc KAR.pdf