1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu java mobile và xây dựng ứng dụng minh họa

234 629 10
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 234
Dung lượng 2,7 MB

Nội dung

Tài liệu tham khảo công nghệ thông tin Nghiên cứu java mobile và xây dựng ứng dụng minh họa

Trang 1

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN

KHOA CÔNG NGHỆ THÔNG TIN

BỘ MÔN MẠNG MÁY TÍNH – VIỄN THÔNG

ĐẶNG NGUYỄN KIM ANH – ĐÀO ANH TUẤN

NGHIÊN CỨU JAVA MOBILE

VÀ XÂY DỰNG ỨNG DỤNG

MINH HỌA

KHÓA LUẬN CỬ NHÂN TIN HỌC

Trang 2

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN

KHOA CÔNG NGHỆ THÔNG TIN

BỘ MÔN MẠNG MÁY TÍNH – VIỄN THÔNG

ĐẶNG NGUYỄN KIM ANH – 0112424

NGHIÊN CỨU JAVA MOBILE

VÀ XÂY DỰNG ỨNG DỤNG

MINH HỌA

KHÓA LUẬN CỬ NHÂN TIN HỌC

GIÁO VIÊN HƯỚNG DẪN Thầy NGUYỄN MINH TUẤN

Trang 3

Lời Cảm Ơn!

Sau hơn năm tháng tìm hiểu và thực hiện, luận văn “Nghiên cứu công nghệ Java Mobile và xây dựng ứng dụng minh hoạ” đã cơ bản hoàn thành Để đạt được kết quả này, chúng tôi đã nỗ lực hết sức đồng thời cũng nhận được rất nhiều sự quan tâm, giúp đỡ, ủng hộ của các thầy cô, bạn bè và gia đình

Trước hết, chúng em xin gởi lời cảm ơn chân thành đến Bộ môn Mạng máy tính và Viễn thông, Khoa Công nghệ Thông tin, trường Đại học Khoa học Tự nhiên

và các thầy cô đặc biệt là Thầy Nguyễn Minh Tuấn đã tận tình giúp đỡ, hướng dẫn chúng em hoàn thành luận văn này

Chúng tôi rất cảm ơn các bạn bè trong khoa, các anh chị, các bạn trong cộng đồng Java Việt Nam đã bên cạnh ủng hộ, đóng góp ý kiến cho chúng tôi trong quá trình thực hiện luận văn

Và chúng con cũng xin chân thành cảm ơn gia đình đã luôn động viên, tạo điều kiện tốt nhất cho chúng con học tập và hoàn tất luận văn

Luận văn đã hoàn thành với một số kết quả nhất định, tuy nhiên vẫn không tránh khỏi sai sót Kính mong sự cảm thông và đóng góp ý kiến từ các thầy cô và các bạn

Thành phố Hồ Chí Minh, tháng 7 năm 2005

Đặng Nguyễn Kim Anh - Đào Anh Tuấn

Trang 4

MỤC LỤC

Lời Nói Đầu 1

Phần 1: Kiến thức nền tảng J2ME 5

Chương 1: Tổng quan về J2ME 5

1.1 Giới thiệu J2ME (Java 2 Micro Edition) 5

1.2 Lý do chúng ta cần J2ME 6

1.3 Các thành phần của J2ME: 7

1.3.1 Configuration: 7

1.3.2 Profile: 9

1.3.3 Máy ảo Java 10

Chương 2: Giới thiệu CLDC và MIDP 13

2.1 CLDC 13

2.1.1.Yêu cầu phần cứng: 13

2.1.2.Yêu cầu phần mềm: 13

2.1.3.Máy ảo Java: 13

2.2 MIDP: 16

2.2.1.Yêu cầu phần cứng: 16

2.2.2.Yêu cầu phần mềm: 16

2.2.3.Cấu trúc MID Profile: 16

2.2.4.MIDlet Suite: 18

2.2.5.Môi trường phát triển ứng dụng J2ME 22

Chương 3: Các vấn đề cơ bản của chương trình MIDlet 25

3.1 Cấu trúc cơ bản: 25

3.2 Xây dựng một ứng dụng MIDlet: 25

3.3 Lớp MIDlet: 26

3.4 Lớp MIDletStateChangeException: 28

3.5 Display 28

3.6 Lớp Displayable: 30

3.7 Quản lý các sự kiện (event) 32

3.7.1.Command & CommandListener 33

3.7.2.Item và ItemStateListener 38

Chương 4: Giao diện đồ họa cấp cao 40

4.1 Screen: 42

4.2 Form: 43

4.3 Item: 45

4.3.1.DateField: 46

4.3.2.Gauge: 48

4.3.3.String Item: 51

4.3.4.TextField: 53

4.3.5.ChoiceGroup: 57

4.3.6.Image và ImageItem: 61

4.4 List: 64

Trang 5

4.5 TextBox: 69

4.6 Alert và AlertType: 72

4.6.1.Alert: 72

4.6.2.AlertType: 74

4.7 Ticker: 77

Chương 5: Giao diện đồ họa cấp thấp 78

5.1 Canvas: 78

5.1.1.Hệ toạ độ: 79

5.1.2.Vẽ trên đối tượng Canvas: 79

5.1.3.Bắt sự kiện trong các đối tượng Canvas: 82

5.1.4.Game action: 85

5.1.5.Sự kiện con trỏ: 87

5.2 Graphics: 89

5.2.1.Màu sắc: 90

5.2.2.Nét vẽ: 93

5.2.3.Font chữ: 98

5.2.4.Vẽ các đối tượng hình ảnh (image): 101

5.2.5.Các phương thức tịnh tiến đối tượng: 103

5.2.6.Vùng xén (Clipping regions): 105

Chương 6: Lưu trữ thông tin với RMS 106

6.1 Giới thiệu RMS 106

6.2 Duyệt danh sách Record với RecordEnumeration 115

6.3 Sắp xếp bằng RecordComparator 117

6.4 Lọc record với RecordFilter 119

6.5 Nhận thông điệp khi Record Store thay đổi 121

6.6 Xử lý lỗi khi thao tác với Record Store 122

Chương 7: Kết nối mạng với Generic Connection Framework (GCF) 124 7.1 Giới thiệu GFC 124

7.2 Lược đồ lớp 124

7.3 Kết nối HTTP: 127

7.3.1.Khởi tạo kết nối: 127

7.3.2.Các đặc điểm của kết nối HTTP bằng J2ME: 130

7.3.3.Thông số kết nối: 137

7.4 Kết nối socket Datagram (UDP) 138

7.5 Kết nối TCP socket 141

7.6 Gửi và nhận SMS 144

Phần 2 : Web Service và Ứng dụng "Đăng Ký Học Phần" 149

Chương 8: Giới thiệu Web Service 149

8.1 Ứng dụng phân tán (Distributed Application) 149

8.1.1.Giới thiệu 149

8.1.2.Các vấn đề nảy sinh trong hệ thống ứng dụng phân tán 150

8.1.3.Hạn chế của những mô hình ứng dụng phân tán trước đây 151

Trang 6

8.2.1.Định nghĩa 152

8.2.2.Thành phần cơ bản của Web service: 152

8.2.3.Hoạt động của Web service 152

8.2.4.Ưu điểm của web service 155

8.3 Các thành phần chính của Web Service 157

8.3.1.SOAP (Simple Object Access Protocol) 157

8.3.2.WSDL (Web Service Definition Language) 162

Chương 9: Ứng dụng đăng ký học phần 172

9.1 Đặc tả chương trình: 172

9.1.1 Tổng quan: 172

9.1.2 Các chức năng chính: 172

9.2 Kiến trúc chương trình: 174

9.2.1 Mô hình kết nối: 174

9.2.2 Mô hình bảo mật (mã hoá password): 176

9.3 Phân tích - thiết kế: 177

9.3.1 Mô hình use case: 177

9.3.2 Đặc tả một số use case chính: 178

9.4 Thiết kế mô hình dữ liệu: 183

9.4.1 Mô hình thực thể kết hợp: 183

9.4.2 Các bảng dữ liệu: 183

9.4.3 Chi tiết các bảng dữ liệu: 184

9.4.4 Ràng buộc dữ liệu: 188

9.4.5 Mô hình dữ liệu: 190

9.4.6 Các chức năng store procedures: 190

9.4.7 Thiết kế lớp: 191

9.5 Cài đặt - thử nghiệm: 192

9.5.1 Yêu cầu phần cứng: 192

9.5.2 Yêu cầu phần mềm: 193

9.5.3 Giao diện chương trình: 193

Chương 10: Tổng kết 205

10.1 Kết luận: 205

10.2 Hướng phát triển: 207

Tài liệu tham khảo 210

Phụ Lục A: Hướng dẫn sử dụng công cụ Sun Wireless ToolKit 2.3 211

Phụ Lục B: Xây dựng và Sử dụng Web Service 217

Phụ Lục C: Giới thiệu các thư viện JSR 222

Trang 7

Danh Sách Các Hình

Hình 1.1 Các thiết bị J2ME hỗ trợ 6

Hình 1.2 Các thành phần của J2ME 7

Hình 1.3 Configurations và các thiết bị 9

Hình 1.4 Cấu trúc chương trình J2ME 11

Hình 1.5 Cấu trúc chương trình MIDP 11

Hình 2.1 Cấu trúc thiết bị MID 17

Hình 3.1 Command Exit 34

Hình 3.2 Command Label 36

Hình 3.3 Ánh xạ soft-button 36

Hình 4.1 Sơ đồ các lớp giao diện đồ hoạ 40

Hình 4.2 Giao diện đối tượng DateField 46

Hình 4.3 Giao diện đối tượng Gauge chế độ tương tác 48

Hình 4.4 Giao diện đối tượng Gauge chế độ không tương tác 49

Hình 4.5 Giao diện đối tượng StringItem 52

Hình 4.6 Giao diện đối tượng TextField 56

Hình 4.7 Giao diện đối tượng ChoiceGroup chế độ một lựa chọn 59

Hình 4.8 Giao diện đối tượng ChoiceGroup chế độ nhiều lựa chọn 60

Hình 4.9 Giao diện đối tượng List dạng menu 67

Hình 4.10 Giao diện đối tượng List cho phép chọn nhiều lựa chọn 68

Hình 4.11 Giao diện đối tượng TextBox 71

Hình 4.12 Giao diện đối tượng Alert 76

Hình 4.13 Giao diện Ticker 77

Hình 5.1 Các phương thức vẽ đường cong 94

Hình 5.2 Các phương thức vẽ hình chữ nhật 95

Hình 5.3 Các phương thức hỗ trợ vẽ Text 97

Hình 5.4 Các định dạng trong Text Graphic 97

Hình 5.5 Các phương thức tạo font 100

Hình 5.6 Vẽ bằng đối tượng Immutable Image 101

Hình 5.7 Vẽ bằng đối tượng Mutable Image 102

Hình 5.8 Các định dạng vị trí trong Graphics 103

Hình 7.1 Lược đồ các lớp trong thư viện GCF 125

Hình 7.2 Kết nối UDP 138

Hình 7.3 Kết Nối TCP 141

Hình 7.4 Lược đồ lớp thư viện WMA 145

Hình 8.1 Hoạt động của Web Service 152

Hình 8.2 Một client truy xuất đến nhiều web services cùng lúc 154

Hình 8.3 Một web service có thể triệu tập đến các web services khác 155

Hình 8.4 Web Service Endpoint 162

Hình 9.1 Kiến trúc chương trình ứng dụng 174

Trang 8

Hình 9.3 Lược đồ use case 177

Hình 9.4 Mô hình thực thể kết hợp ER 183

Hình 9.5 Ràng buộc chu trình 189

Hình 9.6 Mô hình cơ sở dữ liệu 190

Hình 9.7 Mô hình Lớp 192

Hình 9.8 Sơ đồ các màn hình 194

Hình 9.9 Màn hình welcome 195

Hình 9.10 Màn hình đăng nhập 196

Hình 9.11 Confirm 197

Hình 9.12 Menu chức năng 198

Hình 9.13 Màn hình đăng ký học phần lý thuyết 199

Hình 9.14 Màn hình đăng ký học phần thực hành 200

Hình 9.15 Màn hình xem thời khoá biểu 201

Hình 9.16 Màn hình xem kết quả học tập 202

Hình 9.17 Màn hình xem phiếu đăng ký 203

Hình 9.18 Màn hình xem thời khoá biểu 204

Hình 10.1 Hướng phát triển thực tế 207

Hình A.1 Công cụ Sun WirelessToolkit 2.3 211

Hình A.2 Màn hình chính của công cụ 212

Hình A.3 Tạo project mới 212

Hình A.4 Các options cho project 213

Hình A.5 Chỉnh sửa nội dung file Jad và Jar 214

Hình A.6 Biên dich project 215

Hình A.7 Đóng gói ứng dụng 216

Hình B.1 Tạo project Web Service 217

Hình B.2 Khai báo lớp và hàm 218

Hình B.3 Export nhiều hàm cùng lúc 219

Hình B.4 Màn hình thực thi Web Service của IE 219

Hình B.5 File WSDL 220

Hình B.6 Công cụ Stub Generator 221

Hình B.7 Các options của công cụ Stub Generator 221

Trang 9

Danh Sách Các Bảng

Bảng 2.1 Cấu trúc file manifest 19

Bảng 2.2 Cấu trúc file JAD 20

Bảng 3.1 Lớp MIDlet 27

Bảng 3.2 Lớp Display 29

Bảng 3.3 Lớp Displayable 32

Bảng 3.4 Các Command Type 37

Bảng 3.5 Command và CommandListener 38

Bảng 3.6 Item và ItemStateListener 39

Bảng 4.1 Lớp Screen 42

Bảng 4.2 Lớp Form 44

Bảng 4.3 Lớp Item 45

Bảng 4.4 Lớp DateField 46

Bảng 4.5 Lớp Gauge 49

Bảng 4.6 Lớp StringItem 51

Bảng 4.7 Các Ràng Buộc của TextField 53

Bảng 4.8 Lớp TextField 55

Bảng 4.9 Lớp ChoiceGroup 58

Bảng 4.10 Lớp Image 62

Bảng 4.11 Định dạng ImageItem 62

Bảng 4.12 Lớp ImageItem 63

Bảng 4.13 So sánh List và ChoiceGroup 65

Bảng 4.14 Lớp List 66

Bảng 4.15 So sánh TextField và TextBox 69

Bảng 4.16 Lớp TextBox 70

Bảng 4.17 Lớp Alert 73

Bảng 4.18 AlertType 75

Bảng 4.19 Lớp Ticker 77

Bảng 5.1 Truy vấn kích thước Canvas 79

Bảng 5.2 Lớp Canvas 81

Bảng 5.3 Giao tiếp với Application Manager 81

Bảng 5.4 Mã Phím 83

Bảng 5.5 Sự kiện keyPressed 84

Bảng 5.6 Sự kiện Game Action 85

Bảng 5.7 Bắt sự kiện trong Game Action 86

Bảng 5.8 Sự kiện con trỏ 87

Bảng 5.9 Lớp Graphics 90

Bảng 5.10 Các phương thức vẽ 93

Bảng 5.11 Xử lý Text 96

Bảng 5.12 Giá trị Anchor 96

Bảng 5.13 Xử lý Font chữ 98

Bảng 5.14 Các giá trị Font 99

Trang 10

Bảng 5.16 Giá trị Image Anchor 103

Bảng 5.17 Các phương thức tịnh tiến 103

Bảng 5.18 Vùng xén 105

Bảng 6.1 Mô hình Record Store 107

Bảng 6.2 Lớp RecordStore 109

Bảng 6.3 Lớp RecordEnumeration 117

Bảng 6.4 Các giá trị hằng để sắp xếp record 118

Bảng 6.5 Lớp RecordListener 121

Bảng 7.1 Lớp Connector 128

Bảng 7.2 Mode Kết Nối 128

Bảng 7.3 Các Request Method chính 130

Bảng 7.4 Các phương thức set/get Request Method 131

Bảng 7.5 Các phương thức truy vấn HTTP Header 134

Bảng 7.6 Lấy thông số kết nối 137

Bảng 7.7 Lớp DatagramConnection 139

Bảng 7.8 Lớp Datagram 140

Bảng 7.9 Thuộc tính của SocketConnection 142

Bảng 7.10 Lớp SocketConnection 143

Bảng 7.11 Các interfaces chính của WMA 144

Bảng 9.1 Danh sách các Use Case 178

Bảng 9.2 Table ChuyenNganh 184

Bảng 9.3 Table SV 184

Bảng 9.4 Table MonHoc 185

Bảng 9.5 Table GV 185

Bảng 9.6 Table Lop 185

Bảng 9.7 Table Lop_MonLT 186

Bảng 9.8 Table Lop_MonTH 187

Bảng 9.9 Table PhanCongTH 187

Bảng 9.10 Table DangKyLT 187

Bảng 9.11 Table DangKyTH 187

Bảng 9.12 Table ThongBao 188

Trang 11

Các chữ viết tắt, thuật ngữ được sử dụng

API Application Program Interface CDC Connected Device Configuration CLDC Connected Limited Device Configuration

Configuration Đặc tả qui định các thư viện gốc J2ME phải hỗ trợ cho một dòng

phần cứng

DES Thuật toán mã hóa khóa bí mật 64 bits GCF General Connection Framework IIS Internet Information Services-Web server chuẩn trên Windows J2EE Java 2 Enterpise Edition, phiên bản Java cho những dự án lớn J2ME Java 2 Micro Edition, phiên bản Java cho những thiết bị nhỏ

J2SE Java 2 Standard Edition, phiên bản Java ra đời đầu tiên, dành cho

JSR-172 Thư viện truy xuất web service cho ngôn ngữ J2ME

JSR-177 Thư viện mã hóa và bảo mật cho ngôn ngữ J2ME

KVM Máy ảo Java cho môi trường CLDC

MIDlet Tên gọi chung cho các ứng dụng J2ME

MIDP Mobile Information Device Profile

MMS Multimedia Message Service, tin nhắn hình ảnh, âm thanh, video

cho di động

PDA Personal Digital Assistant

Profile Các tập thư viện cấp cao định nghĩa trên nền Configuration

RMS RecordStore Management System, cơ chế lưu trữ của J2ME

Trang 12

SMS Short Message Service, tin nhắn thông thường cho điện thoại di

động

SOAP Simple Object Access Protocol, định dạng thông điệp của Web

Service

Symbian Hệ điều hành cho điện thoại di động của hãng Symbian

UDDI Universal Description, Discovery, and Integration Web Service Giao thức gọi hàm từ xa dựa trên XML và HTTP

WMA Wireless Message API WSDL Web Service Definition Language XML Extensible Markup Language

Trang 13

Java Mobile

Lời Nói Đầu

Mạng điện thoại di động xuất hiện tại Việt Nam từ đầu những năm 1990 và theo thời gian, số lượng các thuê bao cũng như các nhà cung cấp dịch vụ di động tại Việt Nam ngày càng tăng Cùng với sự phát triển của số lượng thuê bao di động là

sự đa dạng hoá các dịch vụ hướng đến thiết bị di động Ngày nay điện thoại di động không chỉ còn mang chức năng gọi điện hay nhắn tin thông thường mà còn là một thiết bị giải trí, tra cứu thông tin rất tiện lợi Do đó, xây dựng các ứng dụng cho điện thoại di động đang là một yêu cầu tất yếu trong xu thế hiện nay Ngành công nghiệp phần mềm cho các thiết bị di động được xem như một mảnh đất màu mỡ và hứa hẹn đem lại nhiều tỉ đô la doanh thu

Hai hướng phát triển ứng dụng trên điện thoại di động phổ biến hiện nay là

sử dụng ngôn ngữ C++ trên nền hệ điều hành Symbian và J2ME Các ứng dụng viết trên nền Symbian có các ưu thế truy cập trực tiếp các tài nguyên của điện thoại cũng như hỗ trợ hệ thống tập tin, thư mục… như máy tính cá nhân vì được hỗ trợ trực tiếp bởi hệ điều hành Tuy nhiên hệ điều hành Symbian lại có kích thước khá lớn nên chỉ có ở các thế hệ điện thoại tương đối cao cấp, và xây dựng ứng dụng dùng Symbian API cũng phức tạp hơn

Đối trọng với Symbian API là công nghệ J2ME với kích thước nhỏ gọn, tiện dụng, được hỗ trợ bởi hầu hết các thế hệ điện thoại mới ra đời, kể cả các điện thoại có hệ điều hành Symbian J2ME không những là một ngôn ngữ hướng đến các thiết bị di động mà còn là ngôn ngữ chính để lập trình trên các thiết bị gia dụng, thẻ tín dụng điện tử và các thiết bị thông minh khác Chúng ta có thể nói đối tượng của ngôn ngữ J2ME là rộng hơn rất nhiều so với C++ trên nền Symbian Tại thời điểm hiện tại, ngôn ngữ J2ME không hỗ trợ được nhiều tính năng như C++ trên Symbian nhưng lại có những ưu điểm trội hơn

J2ME là một ngôn ngữ nhỏ, gọn nhưng rất chặt chẽ và dễ nắm bắt, với những lập trình viên đã có kinh nghiệm với Java việc lập trình với J2ME trở nên rất

Trang 14

Java Mobile

dễ dàng J2ME còn là một ngôn ngữ được các tổ chức mã nguồn mở ủng hộ mạnh

mẽ và phát triển rất nhanh chóng, JCP (Java Community Process-

http://www.jcp.org) là một chương trình do Sun thành lập luôn tiếp thu các ý kiến

và đưa ra các đặc tả mới dành cho Java nói chung và J2ME nói riêng Các đặc tả này thường có tiếp đầu ngữ JSR và là các tính năng bổ sung mới cho J2ME

Những JSR quan trọng có thể được nhắc đến như JSR-82 (Bluetooth), JSR

205 (Gửi tin nhắn SMS, MMS), JSR-172 (Web service), JSR-177 (Security and Trust Services), JSR 184 (3D Game)… Các đặc tả này ngày càng phong phú và phần nào phát triển nhanh hơn cả sự phát triển của phần cứng

Thật khó so sánh giữa các dòng ngôn ngữ lập trình với nhau vì mỗi loại đều

có ưu và khuyết điểm riêng Trong luận văn của mình, chúng tôi chọn nghiên cứu

về J2ME vì những ưu điểm khá rõ ràng đã nêu trên, mặt khác chúng tôi cũng muốn thử sức ở một lãnh vực khá mới mẻ là tiếp cận với phần mềm mã nguồn mở

Về chương trình ứng dụng, tính khả thi và thực tế ngày càng được đề cao Chúng tôi nhận thấy xu hướng mở rộng các ứng dụng trên web sang điện thoại di động đang được chú trọng Thương mại điện tử (e-commerce) đang tiến dần sang thương mại di động (m-commerce) Với thực trạng Việt Nam hiện nay, số người sở hữu máy vi tính cá nhân, đặc biệt là máy tính xách tay chưa nhiều nhưng tỉ lệ số người có điện thoại di động lại khá cao Việc chuyển các ứng dụng thương mại từ môi trường web sang môi trường di động sẽ khiến sự tiện dụng tăng cao, số người

sử dụng dịch vụ trực tuyến chắc chắn sẽ tăng nhanh vì đối với nhiều người chiếc điện thoại di động dễ sử dụng hơn rất nhiều so với chiếc máy tính "phức tạp và khó hiểu"

Ứng dụng chúng tôi chọn thực hiện để bước chân vào lãnh vực khá mới mẻ này là ứng dụng "Đăng Ký Học Phần" qua mạng di động Đối với sinh viên khoa công nghệ thông tin, hệ thống đăng ký học phần SMS qua môi trường web là một ứng dụng rất quen thuộc Chúng tôi muốn phát triển ứng dụng của mình như một

mở rộng của hệ thống đăng ký học phần này trên điện thoại di động nhằm hỗ trợ các bạn sinh viên có thể sử dụng các tiện ích của hệ thống mà không cần phải có máy

Trang 15

Java Mobile

tính kết nối mạng Với ứng dụng này, tính tiện dụng của hệ thống đăng ký học phần SMS đã được mở rộng Chỉ cần có một điện thoại di động hỗ trợ GPRS các bạn sinh viên có thể đăng ký học phần ngay cả khi đang về quê ăn tết ở những vùng internet chưa phổ biến nhưng đã phủ sóng di động hay khi đang di chuyển trên tàu xe… Vì một số điều kiện đặc biệt của điện thoại, hiện nay ứng dụng này chỉ chạy trên chương trình giả lập Tuy nhiên, chúng tôi hi vọng trong một tương lai rất gần, khi các thế hệ điện thoại mới có giá thành vừa phải ra đời và hỗ trợ một số công nghệ như WebService, mã hoá… mà chúng tôi đang sử dụng để xây dựng phần mềm thì ứng dụng này có thể được áp dụng rộng rãi trong thực tế cho sinh viên của khoa Cần phải nói thêm, ứng dụng hiện tại hoàn toàn có thể sử dụng được trong thực tế Việt Nam nhưng có một số đòi hỏi về thiết bị khá đắt tiền (xin xem thêm Chương

10, phần Kết Luận), chứ không chỉ mới là lý thuyết trên giấy tờ

Với việc xây dựng thành công hệ thống đăng ký học phần qua mạng điện thoại di động, chúng tôi rất tự tin về việc xây dựng các hệ thống thương mại di động lớn hơn Trong tương lai gần, khách hàng có thể ngồi trên taxi mua vé máy bay, đặt chỗ khách sạn, xem lại tài khoản ngân hàng… với chiếc điện thoại di động nhỏ bé Chiếc điện thoại di động sẽ trở thành một công cụ giao dịch không thể thiếu trong thời đại mới, thời đại của thương mại điện tử toàn cầu

Luận văn được trình bày thành hai phần lớp:

Phần 1: Giới thiệu về lý thuyết nền tảng của J2ME, các thư viện, các kỹ thuật lập

Trang 16

Phần 2: Giới thiệu về Web Service, một công nghệ rất mới để xây dựng các ứng

dụng thương mại điện tử phân tán và giới thiệu chi tiết về ứng dụng cùng những đánh giá, tổng kết

Chương 8 Giới thiệu về ứng dụng phân tán và web service Chương 9 Trình bày chi tiết về ứng dụng "Đăng Ký Học Phần"

Chương 10 Đánh giá, tổng kết các kết quả đạt được và hướng phát triển trong tương lai

Tuy đã đầu tư khá nhiều thì giờ và công sức vào luận văn này nhưng chắc chắn chúng tôi cũng không tránh khỏi những sai sót Rất mong nhận được ý kiến đóng góp và sự thông cảm của quý thầy cô và các bạn! Xin chân thành cảm ơn!

Kim Anh – Anh Tuấn

Trang 17

Java Mobile

Phần 1: Kiến thức nền tảng J2ME Chương 1: Tổng quan về J2ME

1.1 Giới thiệu J2ME (Java 2 Micro Edition)

J2ME là một nhánh của ngôn ngữ lập trình JAVA được phát triển nhằm hướng tới việc lập trình cho các thiết bị “nhỏ” (micro) có bộ nhớ, khả năng hiển thị và xử

lý hạn chế

Ban đầu Java được xây dựng chỉ gồm một phiên bản duy nhất, ngày nay được biết đến với tên J2SE (Java 2 Standard Edition), với phương châm là “viết một lần, chạy trên mọi môi trường” (“Write once, run anywhere”) Java được hình thành trên

ý tưởng xây dựng một ngôn ngữ mà lập trình viên chỉ cần viết một lần duy nhất nhưng ứng dụng có thể chạy trên bất cứ môi trường nào có hỗ trợ máy ảo Java (Java Virtual Machine) Để làm được việc này, Java sử dụng một phương thức biên dịch

mã nguồn tương đối khác so với các ngôn ngữ lập trình truyền thống Bộ biên dịch Java không biên dịch mã nguồn trực tiếp sang mã máy mà biên dịch sang một dạng

mã trung gian mà máy ảo Java hiểu được (mã bytecode) Khi có nhu cầu sử dụng ứng dụng, máy ảo Java sẽ đọc mã trung gian này và dịch ra mã máy và thực thi; nhờ vào quá trình trung gian đó một ứng dụng Java có thể chạy trên bất kỳ môi trường nào có cài đặt máy ảo Java tương thích

Được giới thiệu lần đầu vào năm 1995, ngày nay mục tiêu Java nhắm đến cũng

đã thay đổi khá nhiều Java hiện nay không chỉ nhắm đến họ máy tính để bàn đơn thuần; hai năm sau ngày đầu được ra mắt, một phiên bản Java mới là J2EE (Java 2 Enterprise Edition) đã được giới thiệu nhắm tới việc phát triển các ứng dụng có qui

mô lớn hơn

Phiên bản mới nhất được thêm vào dòng ngôn ngữ Java là J2ME (Java 2 Micro Edition) J2ME nhắm đến việc phát triển ứng dụng cho các ứng dụng có năng lực hạn chế như đầu giải mã kỹ thuật số TV set-top boxes, điện thoại di động …

Trang 18

đã cho ra đời ngôn ngữ J2ME hướng đến việc phát triển phần mềm cho các thiết bị

di động Ngôn ngữ J2ME thực sự là một ngôn ngữ nhỏ gọn, dễ nắm bắt, chặt chẽ và thích hợp cho các thiết bị có khả năng hạn chế Các thiết bị di động trên thị trường hiện nay, đặc biệt là điện thoại di động hầu hết đều hỗ trợ rất tốt ngôn ngữ J2ME và J2ME thực sự đã trở thành một trong những ngôn ngữ phổ biến nhất trong lãnh vực lập trình di động

Hình 1.1 Các thiết bị J2ME hỗ trợ

Trang 19

Java Mobile

1.3 Các thành phần của J2ME:

Hình 1.2 Các thành phần của J2ME

Khái niệm thiết bị di động là tương đối rộng lớn Chúng bao hàm những thiết bị

có kích thước vật lý khác nhau nhiều lần và cho dù cùng kích thước những thiết bị này vẫn có khả năng xử lý cũng như hiển thị khác nhau ( những chiếc điện thoại hiển thị 12,000 pixels cho đến những chiếc PDA 20,000 pixels) Để đáp ứng được nhu cầu khác nhau của những thiết bị này, bản thân ngôn ngữ J2ME cũng được chia thành những thành phần nhỏ hơn

Chúng ta sẽ tìm hiểu hai khái niệm mới là Configurations và Profiles

1.3.1 Configuration:

Để đáp ứng nhu cầu cho nhiều chủng loại thiết bị khác nhau, Sun đã đưa ra khái niệm Configuration Khái niệm Configuration có mối liên hệ chặt chẽ với máy ảo Java Nói chính xác hơn, một Configuration qui định những thành phần và những thư viện gốc của ngôn ngữ Java mà máy ảo phải hỗ trợ cho configuration đó

Việc phân chia thành những Configurations khác nhau chủ yếu dựa vào khả năng bộ nhớ, năng lực hiển thị, năng lực xử lý và khả năng kết nối mạng của các thiết bị Như chúng ta đã biết, các thiết bị di động rất khác nhau về nguồn tài nguyên, về khả năng phần cứng Với những thiết bị có năng lực hạn chế, nếu ta đưa

Trang 20

Java Mobile

quá nhiều thư viện hỗ trợ vào máy ảo trên thiết bị đó sẽ gây chậm hệ thống và dư thừa không cần thiết Với những thiết bị có khả năng cao hơn, chúng ta sẽ đưa thêm nhiều thư viện hỗ trợ vào máy ảo giúp ích cho công việc lập trình của các nhà phát triển Do đó, nhu cầu phân chia thành nhiều Configurations là việc cần thiết

Hiện nay Sun đã đưa ra hai loại Configurations khác nhau:

CDC (Connected Device Configuration):

• 512 kb (minimum) bộ nhớ để chạy Java

• 256 kb (minimum) bộ nhớ cấp phát động

• Kết nối mạng liên tục, băng thông rộng

CLDC(Connected Limited Device Configuration):

• 128 kb (minimum) bộ nhớ để chạy Java

• 32 kb (minimum) bộ nhớ cấp phát động

• Giao diện người dùng hạn chế

• Năng lượng tiêu tốn ít (chủ yếu dùng pin)

• Kết nối mạng Wireless, chậm

Việc phân chia này thực chất cũng chỉ mang tính tương đối Công nghệ hiện nay đang phát triển khá nhanh, và việc phát triển này càng làm cho ranh giới giữa các loại Configuration này trở nên không rõ ràng

Trang 21

Java Mobile

Hình 1.3 Configurations và các thiết bị 1.3.2 Profile:

Configuration thực ra chỉ cung cấp một số rất ít các lớp và người phát triển ứng dụng hầu như không thể chỉ làm việc đơn thuần với các configuration này Ta có thể thấy điều này qua một ví dụ: các configuration không hỗ trợ các công cụ về giao diện (GUI), do đó nếu chỉ dùng configuration thì lập trình viên phải xây dựng tất cả các chức năng giao diện từ đầu Vì lý do này Sun đã linh hoạt và đưa thêm một khái niệm mới nằm ở tầng trên của configuration, đó là Profiles

Ta có thể xem Profile là một mở rộng của khái niệm Configuration Profile định nghĩa các thư viện giúp lập trình viên phát triển phát triển ứng dụng cho một dạng thiết bị nào đó Ví dụ Mobile Information Device Profile (MIDP) định nghĩa các hàm API cho các thành phần giao diện, nhập liệu và xử lý sự kiện, lưu trữ, kết nối mạng và xử lý thời gian,… phù hợp với màn hình hiển thị và khả năng xử lý của các thiết bị di động Profile MIDP được định nghĩa trên nền tảng của CLDC Ngoài ra chúng ta còn một số Profile tiêu biểu khác như

– 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

Trang 22

1.3.3 Máy ảo Java

Như chúng ta đã biết, một chương trình Java sẽ được biên dịch thành mã trung gian sau đó chính máy ảo Java sẽ biên dịch phần mã này sang mã máy để thực thi Máy ảo Java sẽ chịu trách nhiệm việc cung cấp tính năng bảo mật, cấp phát và thu hồi bộ nhớ và quản lý việc điều phối các tiến trình Chúng ta có thể nói chính máy

ảo Java làm cho chương trình của chúng ta “chạy”

Với CDC, máy ảo Java có cùng các đặc tính như J2SE Tuy nhiên, với CLDC, Sun đã phát triển riêng một dạng máy ảo chuyên biệt được gọi là K Virtual Machine, gọi tắt là KVM Chính những hạn chế về tài nguyên của các thiết bị di động đã đề ra nhu cầu về sự ra đời của KVM KVM không phải là một máy ảo Java

“truyền thống”:

• Máy ảo chỉ cần 40-80 kb bộ nhớ

• Chỉ đòi hỏi 20-40 kb bộ nhớ động (heap)

• Có thể chạy với bộ vi xử lý 16-bit và xung nhịp 25 MHz

Đến đây chúng ta có thể hình dung phần nào cấu trúc tổng thể của một chương trình J2ME như sau:

Trang 23

Java Mobile

Hình 1.4 Cấu trúc chương trình J2ME

Nếu chương trình được biên dịch với CDC, chương trình sẽ chạy trên các máy

ảo “truyền thống” và mang các đặc tính như chương trình J2SE

Nếu chương trình được biên dịch với CLDC, chương trình sẽ chạy với máy ảo chuyên biệt KVM và những đặc tính riêng do CLDC đòi hỏi

Với chương trình xây dựng bởi MIDP, chúng ta có cấu trúc chuyên biệt sau:

Hình 1.5 Cấu trúc chương trình MIDP

Tầng dưới cùng là hệ điều hành có hỗ trợ máy ảo Java (KVM), bên trên là

Trang 24

Java Mobile

môi trường nào” của Sun không còn đúng hoàn toàn vì đã xuất hiện máy ảo chuyên biệt KVM Một số chương trình viết bằng MIDP sẽ không chạy trên môi trường J2SE và ngược lại Tuy nhiên chúng ta phải cảm kích các nỗ lực của Sun đã giúp cho Java trở thành một trong những ngôn ngữ có khả năng độc lập với môi trường bên dưới nhất hiện nay, điều này đúng với cả môi trường thiết bị di động

Ở những phần tiếp theo chúng ta sẽ tìm hiểu kỹ hơn về hai thành phần cơ bản của J2ME là Configuration và Profile

Trang 25

Java Mobile

Chương 2: Giới thiệu CLDC và MIDP

2.1 CLDC

2.1.1 Yêu cầu phần cứng:

Khi đề ra yêu cầu về phần cứng việc xem xét các chi tiết như bộ xử lý, bộ nhớ…

và các phần mềm hiện có trên các thiết bị di động là việc vô cùng quan trọng Nhằm mục đích phục vụ tối đa các thiết bị hiện có trên thị trường, CLDC chỉ đề ra các yêu cầu về bộ nhớ và không đề ra yêu cầu nào cho các thành phần khác Yêu cầu tối thiểu để có thể sử dụng CLDC như sau:

• 128 kilobytes để chạy JVM và các thư viện của CLDC Không phân biệt loại

bộ nhớ sử dụng (Rom, Flash,…), bộ nhớ của thiết bị phải bảo lưu được nội dung lâu dài, ngay cả khi ngắt điện Bộ nhớ này thường được gọi là nonvolatile memory

• 32 kilobytes bộ nhớ trống để cấp phát các đối tượng (objects) Bộ nhớ này thường được gọi là volatile memory (hay là “heap”)

2.1.2 Yêu cầu phần mềm:

CLDC có yêu cầu tối thiểu về mặt phần mềm Hệ điều hành phải tương thích với JVM và có chức năng quản lý các ứng dụng Java, bao gồm:

• Cho phép chọn và kích hoạt ứng dụng

• Cho phép gỡ bỏ ứng dụng khỏi thiết bị

2.1.3 Máy ảo Java:

Do các thiết bị di động dùng CLDC thường có tài nguyên hạn chế nên Sun đã đề

ra máy ảo Java KVM phục vụ riêng cho các thiết bị này Máy ảo KVM thực chất là một bộ phận con của các máy ảo trên môi trường J2SE và J2EE nên cũng có nhiều hạn chế và khác biệt so với hai phiên bản trên

Trang 26

Java Mobile

Một số hạn chế:

• Không hỗ trợ kiểu dữ liệu float: Việc sử lý số float đòi hỏi nhiều tài nguyên xử lý, ngoài ra các thiết bị di động không có những cấu hình phần cứng dành riêng cho việc xứ lý số float nên trong J2ME chúng ta không thể khai báo các biến, mảng float, các hàm cũng không nhận tham số và trả về các số float

• Phương thức finalize: Trong J2SE, chúng ta có thể khai báo phương thức finalize (tương tự như phương thức destructor) Garbage Collector sẽ gọi phương thức này trước khi hủy bỏ một đối tượng, phương thức này thường được dùng để thu hồi các tài nguyên hệ thống như sockets, file handles… trước khi đối tượng bị “phá hủy” Tuy nhiên trong J2ME chúng

ta không có phương thức finalize

• Error Handling: Trong J2ME chúng ta vẫn được hỗ trợ các công cụ về bẫy lỗi (chủ yếu thông qua try và catch) Tuy nhiên khả năng về xử lý lỗi của J2ME cũng hạn chế hơn với hai phiên bản còn lại

• Không hỗ trợ việc sử dụng code của các ngôn ngữ lập trình khác

• Không hỗ trợ Reflection: Trong J2SE và J2EE, chúng ta có thể dùng các lớp Reflection để tìm hiểu thông số môi trường máy ảo Java đang thực thi

• Không hỗ trợ ThreadGroup: mỗi thread được quản lý riêng biệt, không còn lớp ThreadGroup Nếu muốn điểu khiển một lúc nhiều threads chúng

ta có thể dùng mảng hoặc Vector

J2ME cũng còn một số điểm khác biệt so với J2SE và J2EE, một trong những khác biệt chính là quá trình Class Verify (tạm dịch là “kiểm tra lớp”) Các lớp trước khi được load sẽ thông qua một quá trình “kiểm tra” về sự hợp lệ và tính nguyên vẹn Đây là một cơ chế quan trọng để bảo đảm an toàn (security) của Java Quá trình này trong J2SE và J2EE có thể chiếm đến 50 kbytes bộ nhớ, trong J2ME chúng được chia thành 2 giai đoạn:

Trang 27

Java Mobile

• Tiền kiểm tra (Pre-verification): Trước khi một lớp được nạp vào thiết bị, một phần mềm sẽ được sử dụng để thêm vào một số thông số bổ sung vào file class Quá trình này giảm thời gian và bộ nhớ cần thiết để máy ảo thực hiện giai đoạn 2 trong quá trình kiểm tra File class sau khi được “tiền kiểm tra” sẽ tăng dung lượng khoảng 5%

• Kiểm tra nội thiết bị (In-device verification): Khi thiết bị nạp các file class

đã được tiền kiểm tra, công cụ kiểm tra trong thiết bị sẽ thực hiện một vài kiểm tra để xác nhận tính hợp lệ của đoạn code Nếu phát hiện một lỗi nào

đó bộ kiểm tra sẽ phát sinh báo cáo và từ chối nạp lớp đối tượng vào bộ nhớ Quá trình này đòi hỏi ít bộ nhớ và tài nguyên hơn nhiều lần so với trong J2SE và J2EE

CLDC không hỗ trợ tất cả các lớp và thư viện được hỗ trợ trong ngôn ngữ Java truyền thống mà chỉ hỗ trợ những thư viện thật sự cần thiết đối với thiết bị di động Ngoài ra trong CLDC chúng ta cũng được hỗ trợ việc truy vấn một số thuộc tính của hệ thống:

• Lấy thông tin về platform của thiết bị:

Runtime rtime= Runtime.getRuntime();

System.out.println("Total memory: " + rtime.totalMemory());

//thông tin về tổng bộ nhớ System.out.println("Free memory: " + rtime.freeMemory());

Trang 28

Java Mobile

2.2 MIDP:

2.2.1 Yêu cầu phần cứng:

• Màn hình ít nhất phải có 96 x 54 pixels

• Có ít nhất một thiết bị nhập liệu: bàn phím hoặc màn hình cảm ứng

• Có ít nhất 128 kilobytes bộ nhớ non-volatile để chạy các thành phần của MID

• Có ít nhất 8 kilobytes bộ nhớ non-volatile để lưu các cấu hình chương trình và dữ liệu

• Có ít nhất 32 kilobytes để chạy Java

• Có kết nối không dây (wireless network)

• Hệ điều hành phải hỗ trợ việc đọc/ghi vào bộ nhớ non-volatile Không đòi hỏi

hệ điều hành phải định nghĩa file system nhưng phải cho phép ghi dữ liệu dạng persistent (không bị mất đi khi tắt máy, ngắt điện)

• Phải hỗ trợ truy xuất mạng, đặc biệt phải có tính năng đọc/ghi dữ liệu thông qua mạng không dây (wireless network)

2.2.3 Cấu trúc MID Profile:

Trang 29

Java Mobile

Hình 2.1 Cấu trúc thiết bị MID

Tầng dưới cùng là phần cứng của thiết bị di động Bên trên phần cứng ta có hệ điều hành điều khiển các hoạt động

Bên trên hệ điều hành ta có thể chia thành 2 phần riêng biệt Chúng ta sẽ thấy phần bên phải là các chương trình native application (tạm dịch là “chương trình nguyên gốc”) Trước khi J2ME ra đời, thông thường đây là loại chương trình duy nhất có trên các thiết bị Đây là loại chương trình được nhà sản xuất đưa sẵn vào máy di động lúc sản xuất như chương trình chọn tiếng chuông, chỉnh thông số điện thoại, chỉnh giờ… Chính nhờ J2ME ra đời chúng ta mới có chức năng cài đặt thêm các chương trình được viết thêm vào điện thoại

CLDC là nền tảng cơ bản cho MID Profile, các chương trình MIDP (MIDP Applications) có thể sử dụng các lớp được cung cấp bởi cả CLDC và MIDP Ngoài

ra chúng ta còn có các lớp OEM (original equipment manufacturer) là các lớp do các nhà sản xuất cung cấp thêm cho điện thoại (các hãng như Nokia, Samsung, Motorola… thường có thêm nhiều lớp cấp cao hỗ trợ cho lập trình viên) và bên trên

là các ứng dụng được xây dựng từ các lớp này, các ứng dụng này thường chỉ chạy trên các điện thoại của hãng đã cung cấp thư viện lơp OEM

Trang 30

Java Mobile

2.2.4 MIDlet Suite:

Chúng ta gọi chương trình Java chạy trên thiết bị di động là một MIDlet MIDlet

sẽ sử dụng các lớp cung cấp bởi CLDC và MIDP Một MIDlet Suite (một bộ MIDlet) chứa một hay nhiều ứng dụng MIDlet được nén chung trong một file JAR (Java Archive)

Cấu trúc file Jar:

Ngoài các file lớp và resource, trong file Jar còn có một tập tin được gọi là manifest Đây là tập tin mô tả nội dung của toàn file Jar Tập tin này có tên manifest.mf và bản thân nó cũng được nén trong file Jar Trong file manifest chúng

ta có thể định nghĩa các thuộc tính của file jar nhưng quan trọng nhất là 6 thuộc tính sau:

Bảng sau mô tả các thuộc tính có thể định nghĩa trong file manifest:

MIDlet-Name Tên của bộ MIDlet Có MIDlet-Version Số phiên bản Có MIDlet-Vendor Cho biết người tạo MIDlet Suite Có

MIDlet-<n> Tham chiếu đến từng MIDlet trong bộ

MIDlet (trong file Jar), mỗi một MIDlet cần một mẫu tin này, mẫu tin này gồm 3 mẫu tin con:

Tên MIDlet

Trang 31

Java Mobile

File Icon MIDlet (có thể không cần) Tên lớp sẽ được nạp khi thực thi MIDlet này

Profile

MicroEdition-Tên profile cần thiết để chạy MIDlet này, thường là MIDP1.0 hoặc MIDP2.0

MicroEdition Configuration

Configuration cần để chạy MIDlet (thường

là CLDC 1.0)

MIDlet-Icon File icon (.pgn) của bộ MIDlet Không MIDlet-Description Mô tả (text) của bộ MIDlet Không MIDlet-Info-URL Địa chỉ trang web nhà phát triển MIDlet Không

Bảng 2.1 Cấu trúc file manifest

Đây là một ví dụ đơn giản của file manifest:

MIDlet-Name: Todo List MIDlet-Version: 1.0 MIDlet-Vendor: Core J2ME MIDlet-1: TodoList, /images/Todo.png, Todo.TodoMIDlet MicroEdition-Profile: MIDP-1.0

MicroEdition-Configuration: CLDC-1.0

File JAD (Java Application Descriptor File):

Bên cạnh file Jar, một bộ ứng dụng MIDlet còn có thêm file JAD (.jad) để cung cấp thông tin về các MIDlet trong file JAR Việc đặt ra file JAD có một số mục đích sau:

• Cung cấp thông tin về nội dung file Jar Từ thông tin này, bộ quản lý ứng dụng trên thiết bị mới quyết định ứng dụng này có thích hợp để chạy trên thiết bị hay không

• Cung cấp các tham số dùng cho MIDlet để tránh thay đổi file JAR File JAR chứa mã ứng dụng nên cần tránh bị thay đổi

Trang 32

MIDlet-<n> Tham chiếu đến từng MIDlet trong bộ

MIDlet (trong file Jar), mỗi một MIDlet cần một mẫu tin này, mẫu tin này gồm 3 mẫu tin con:

Tên MIDlet File Icon MIDlet (có thể không cần) Tên lớp sẽ được nạp khi thực thi MIDlet này

MIDlet-Jar-URL Địa chỉ URL của file Jar Có MIDlet-Jar-Size Kích thước file Jar tính bằng byte Có MIDlet-Data-Size Kích thước tối thiểu tính bằng byte để ghi

các dữ liệu của chương trình (persistent data)

MIDlet-Install-URL nhận thông báo về quá trình cài đặt Không

Bảng 2.2 Cấu trúc file JAD

Ta cũng có thể định nghĩa thêm các thuộc tính riêng, bắt đầu bằng “MIDlet-“ tùy theo mục đích của lập trình viên Những thuộc tính sau phải giống nhau ở file Jad

và file manifest (nằm trong file Jar):

- MIDlet-Name

- MIDlet-Version

Trang 33

Java Mobile

- MIDlet-Vendor

- MIDlet-<n> for each MIDlet

- MIDlet-Jar-URL Nếu các thuộc tính này không giống nhau, ứng dụng sẽ bị thiết bị từ chối Với các thuộc tính còn lại, nếu file Jad và file manifest khác nhau thì thuộc tính trong file Jad sẽ được ưu tiên hơn

Sau đây là một ví dụ đơn giản về file Jad:

MIDlet-Name: Todo List MIDlet-Version: 1.0 MIDlet-Vendor: Core J2ME MIDlet-Jar-URL: http://www.corej2me.com/TodoMIDlet.jar MIDlet-Jar-Size: 17043

MIDlet-1: TodoList, /images/Todo.png, Todo.TodoMIDlet

Ở đây có một câu hỏi được đặt ra: Tại sao phải ghép nhiều ứng dụng MIDlet thành một file nén dạng JAR Mục đích của việc kết hợp này giúp cho các ứng dụng MIDlet được nén chung này có thể chia xẻ chung các tài nguyên với nhau Một ví

dụ có thể đề cập đến là việc chia sẻ chung các Record Store: trong môi trường J2ME chúng ta không có khái niệm file system; mọi nhu cầu lưu trữ dữ liệu được thông qua các Record Trong một bộ MIDlet Suite thì tên các Record phải phân biệt

và các ứng dụng MIDlet cùng chung trong một bộ sẽ có thể chia sẻ các Record này với nhau Điều này khá thuận lợi, nó có thể giúp chúng ta viết các games cùng chia

sẻ danh sách người chơi, danh sách các người chơi có điểm cao nhất…

Khi nạp ứng dụng vào thiết bị ta cùng lúc nạp hai file Jar và Jad; file Jad sẽ là file thực thi và file Jar chứa mã thực thi của chương trình

Trang 34

Java Mobile

2.2.5 Môi trường phát triển ứng dụng J2ME

Phần này chúng ta sẽ tìm hiểu về các phần mềm cần thiết dùng để phát triển một ứng dụng J2ME, cách cài đặt và cấu hình các phần mềm này Ngoài ra chúng ta sẽ nghiên cứu về các tools phát triển được hỗ trợ thêm

Để viết một ứng dụng J2ME chúng ta cần ít nhất 3 chương trình sau:

Java Development Kit (JDK) , version 1.3 hoặc cao hơn (phiên bản mới nhất tính đến lúc luận văn được thực hiện là phiên bản 1.42)

Cài đặt các phần mềm:

• Cài đặt JDK:

File cài đặt JDK có dạng file thực thi (.exe), chúng ta chỉ cần chạy và làm theo các hướng dẫn sẽ cài đặt thành công bộ JDK (giả sử thư mục cài đặt là C:\jdk1.3.1)

Set biến môi trường (Environment Variable):

Việc set biến môi trường giúp chúng ta chạy trình biên dịch từ bất cứ vị trí nào, không cần phải gõ tên và đường dẫn đầy đủ của trình biên dịch

– Vào Control Panel, Chọn System

– Chọn Environment (hoặc Advanced/Environment) – Tìm mục PATH, thêm thư mục \bin của thư mục JDK (ví dụ C:\JDK\bin) vào biến môi trường PATH (PATH=………… ;c:\jdk\bin;)

• Cài đặt CLDC và MIDP:

File CLDC và MIDP có dạng zip, ta giải nén vào chung một thư mục (ví dụ C:\J2ME)

Trang 35

Java Mobile

Thư mục J2ME có dạng:

C:\J2ME j2me_cldc (thư mục chứa CLDC) midp1.0.1.fcs (thư mục chứa MIDP) Sau cùng ta set hai biến môi trường PATH và CLASSPATH như sau:

Ta sẽ xây dựng một ứng dụng J2ME đơn giản để mô phỏng quá trình biên dịch và thực thi, ứng dụng có tên Welcome và file source code có tên Welcome.java

C:\Midlets\Welcome\Welcome.java

• Quá trình biên dịch và Pre-verify:

Để biên dịch ta chuyển đến thư mục chứa ứng dụng (C:\Midlets\Welcome\) và gọi lệnh:

javac -bootclasspath c:\j2me\midp1.0.3fcs\classes Welcome.java hoặc

javac –bootclasspath %CLASSPATH% Welcome.java (CLASSPATH là biến môi trường đã được định nghĩa trước thay cho c:\j2me\midp1.0.3.fcs\classes;.)

Javac là chương trình biên dịch của bộ JDK, thông số -bootclasspath ra lệnh cho chương trình dich lấy các file lớp cơ sở tại thư mục c:\j2me\midp1.0.3fcs\classes (Đây là file lớp cơ sở của MIDP) Nếu không có thông số này, file lớp cơ sở của JDK sẽ được sử dụng, file lớp cơ sở này khác với file của MIDP nên J2ME có thể không sử dụng được

Trang 36

preverify –classpath %CLASSPATH% –d Welcome

Tương tự, thông số classpath chỉ ra vị chí các file class tại thư mục c:\j2me\midp1.0.3fcs\classes và thư mục hiện hành (dấu “.”) Thông số -d chỉ ra thư mục output kết quả là thư mục hiện hành

Quá trình Pre-verify này là bắt buộc, nếu không thực hiện công đoạn này thiết

Trên đây là quá trình cơ bản nhất để biên dịch và thực thi một ứng dụng J2ME,

để sử dụng những tính năng cao hơn (tạo MIDlet Suite chứa nhiều MIDlet, tạo file Jad, file Jar) xin vui lòng xem file hướng dẫn trong đĩa CD đính kèm hoặc xem tài liệu của các bộ biên dịch Để tiết kiệm thời gian, chúng ta thường dùng các công cụ tiện ích như Sun Wireless Toolkit, xin xem phần phụ lục để biết cách sử dụng

Trang 37

Một chương trình MIDlet khi được nạp vào thiết bị có những trạng thái sau:

– Paused: Một chương trình MIDlet sẽ được đưa vào trạng thái paused sau khi thực hiện phương thức khởi tạo (constructor) và trước khi được chương trình quản lý ứng dụng (application manager) trên thiết bị gọi thực thi Trong quá trình hoạt động, chương trình MIDlet cũng có thể bị đưa trở lại trạng thái paused bởi thiết bị (khi cần trả lời cuộc gọi đến …) hoặc bởi chính chương trình MIDlet

– Active: Chương trình MIDlet đang thực thi

– Destroyed: Chương trình MIDlet đã giải phóng tất cả tài nguyên và đã được tắt bởi trình quản lý ứng dụng trên thiết bị

3.2 Xây dựng một ứng dụng MIDlet:

Chúng ta xây dựng một ứng dụng MIDlet bằng cách kế thừa (extends) lớp MIDlet Lớp này thực chất là một interface và chúng ta phải khai báo ba hàm sau đây: startApp(), pauseApp() và destroyApp() Đây là một ví dụ về một chương trình MIDlet đơn giản:

public class Shell extends MIDlet {

Trang 38

Java Mobile

// phương thức khởi tạo (constructor) không bắt buộc phải có

public Shell(){ … }

// Được application manager gọi trước khi thực thi MIDlet

public void startApp(){…}

// Được gọi trước khi tạm dừng MIDlet

public void pauseApp(){ …}

// Được gọi trước khi kết thúc chương trình

public void destroyApp(boolean unconditional){… } }

protected abstract void pauseApp();

protected abstract void destroyApp(boolean unconditional) throws

MIDletStateChangeException;

}

Ba hàm được nêu ở trên là ba hàm bắt buộc chúng ta phải xây dựng khi tạo ứng dụng MIDlet Lớp MIDlet được chứa trong package javax.microedition.midlet Sau đây là danh sách các hàm thường dùng trong lớp MIDlet:

abstract void destroyApp (boolean unconditional)

Hàm này được gọi khi có nhu cầu tắt MIDlet Đây

là nơi giải phóng các tài nguyên đã dùng

abstract void pauseApp() Hàm này được gọi để giải phóng các tài nguyên

Trang 39

Java Mobile

trước khi tạm dừng chương trình

abstract void startApp() Được gọi khi MIDlet sắp được đưa vào trạng thái

thực thi (active state)

final void notifyDestroyed() Báo cho application manager biết chương trình

MIDlet đã giải phóng tài nguyên và cần được tắt (sau khi gọi destroyApp)

final void notifyPause() Báo cho application manager biết chương trình

MIDlet đã giải phóng tài nguyên và muốn vào trạng thái tạm dừng (sau khi gọi pauseApp)

final void resumeRequest() Báo cho application manager ta cần đưa MIDlet

vào trạng thái hoạt động trở lại (Sau đó application manager sẽ gọi startApp)

final String getAppProperty

(String key)

Lấy các thông số của chương trình (từ file jad và file manifest)

Bảng 3.1 Lớp MIDlet

Ở đây chúng tôi xin mô tả hai quá trình quan trọng nhất của một ứng dụng MIDlet

là quá trình khởi nạp và quá trình thoát ứng dụng:

– Quá trình nạp:

• User chọn kích hoạt ứng dụng MIDlet

• Application manager khởi tạo các biến, gọi phương thức khởi tạo (constructor)

• Ứng dụng MIDlet sau khi được nạp vào bộ nhớ sẽ được đưa vào trạng thái paused (nhưng hàm pauseApp() sẽ không được gọi)

• Application manager gọi hàm startApp() Thực chất hàm startApp() sẽ được gọi mỗi khi ứng dụng được đưa vào trạng thái thực thi (active); khi ta tạm ngưng ứng dụng và có nhu cầu kích hoạt trở lại hàm này cũng được gọi

– Quá trình thoát:

Trang 40

Java Mobile

• Hàm destroyApp() được gọi, hàm này phải bảo đảm việc giải phóng tài nguyên

• Hàm notifyDestroyed() được gọi để báo cho application manager ứng dụng

đã giải phóng hết tài nguyên và sẵn sàng bị tắt

3.4 Lớp MIDletStateChangeException:

Khi tìm hiểu về package javax.microedition.midlet, còn một lớp quan trọng chúng ta phải chú ý đến là lớp MIDletStateChangeException Ứng dụng MIDlet có hai hàm có khả năng tạo ra (throw) Exception này là hàm destroyApp() và hàm startApp()

Như chúng ta đã biết, trước khi ứng dụng được đưa vào trạng thái active thì hàm startApp() sẽ được gọi Nếu trong quá trình gọi hàm này dẫn đến phát sinh lỗi (thiết

bị hết tài nguyên, tài nguyên cần dùng đang bị ứng dụng khác chiếm…) thì MIDletStateChangeException sẽ được tạo ra Trong quá trình thoát, hàm destroyApp() cũng có thể phát sinh exception này, ví dụ như khi chúng ta thoát mà chương trình đang nhận dữ liệu hết sức quan trọng từ network ta có thể phát sinh exception để dừng việc thoát

Ta xem xét hàm destroyApp(boolean condition):

Tham số condition ở đây có một ý nghĩa khá thú vị, nếu tham số này là true dù chúng ta có phát sinh exception MIDletStateChangeException thì ứng dụng vẫn thoát; chỉ khi nào tham số này là false thì exception MIDletStateChangeException mới có khả năng hủy việc thoát chương trình

3.5 Display

Ứng dụng của chúng ta chắc chắn có nhu cầu xuất dữ liệu ra màn hình Việc này trong một ứng dụng MIDlet do một đối tượng thuộc lớp display đảm nhiệm

Lớp này nằm trong package javax.microedition.lcdui, package này chứa hầu như tất

cả các lớp phục vụ cho việc phát triển giao diện của ứng dụng

Chúng ta sẽ xem xét một số hàm quan trọng nhất của lớp Display:

Ngày đăng: 23/11/2012, 08:09

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
7. Kim Topey,Java Web Service in A Nutshell, O'Reilley, 2003 Khác
8. Michael Juntao Yuan, Enterprise J2ME™: Developing Mobile Java Application, Prentice Hall PTR, 2003 Khác
9. MSDN Training, Developing XML Web Services using Microsoft Visual C#, Microsoft, 2001 Khác
10. Roger Riggs, Programming Wireless Devices with the Java™ 2 Platform Micro Edition, Addision Wesley, 2003 Khác
11. Vartan Piroumian, Wireless J2ME™ Platform Programming, Prentice Hall PTR, 2002Web Sites Khác

HÌNH ẢNH LIÊN QUAN

Hình 1.2 Các thành phần của J2ME - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 1.2 Các thành phần của J2ME (Trang 19)
Hình 1.2 Các thành phần của J2ME - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 1.2 Các thành phần của J2ME (Trang 19)
Hình 1.3 Configurations và các thiết bị 1.3.2  Profile:  - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 1.3 Configurations và các thiết bị 1.3.2 Profile: (Trang 21)
Hình 1.3 Configurations và các thiết bị - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 1.3 Configurations và các thiết bị (Trang 21)
Hình 1.5 Cấu trúc chương trình MIDP - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 1.5 Cấu trúc chương trình MIDP (Trang 23)
Hình 1.4 Cấu trúc chương trình J2ME - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 1.4 Cấu trúc chương trình J2ME (Trang 23)
Hình 1.5 Cấu trúc chương trình MIDP - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 1.5 Cấu trúc chương trình MIDP (Trang 23)
Hình 2.1 Cấu trúc thiết bị MID - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 2.1 Cấu trúc thiết bị MID (Trang 29)
Hình 2.1 Cấu trúc thiết bị MID - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 2.1 Cấu trúc thiết bị MID (Trang 29)
Bảng sau mơ tá cáe thuộc tính cĩ thể định nghĩa trong file manifest: - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Bảng sau mơ tá cáe thuộc tính cĩ thể định nghĩa trong file manifest: (Trang 30)
Bảng sau mô tả các thuộc tính có thể định nghĩa trong file manifest: - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Bảng sau mô tả các thuộc tính có thể định nghĩa trong file manifest: (Trang 30)
Bảng 2.1 Cấu trúc file manifest - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Bảng 2.1 Cấu trúc file manifest (Trang 31)
Bảng 2.2 Cấu trúc file JAD - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Bảng 2.2 Cấu trúc file JAD (Trang 32)
Bảng 3.1 Lớp MIDIet - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Bảng 3.1 Lớp MIDIet (Trang 39)
Bảng 3.1 Lớp MIDlet - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Bảng 3.1 Lớp MIDlet (Trang 39)
Bảng 3.2 Lớp Display - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Bảng 3.2 Lớp Display (Trang 41)
Bảng 3.2 Lớp Display - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Bảng 3.2 Lớp Display (Trang 41)
Hình 3.2 Command Label - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 3.2 Command Label (Trang 48)
BACK Dùng đề đi ngược lại màn hình trước đĩ. - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
ng đề đi ngược lại màn hình trước đĩ (Trang 49)
Bảng 3.4 Các Command Type - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Bảng 3.4 Các Command Type (Trang 49)
Hình 4.3 Giao diện đối tượng Gauge chế độ tương tác - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 4.3 Giao diện đối tượng Gauge chế độ tương tác (Trang 60)
Hình 4.5 Giao diện đối tượng Stringltem - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 4.5 Giao diện đối tượng Stringltem (Trang 64)
Hình 4.6 Giao diện đối tượng TextField - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 4.6 Giao diện đối tượng TextField (Trang 68)
Hình 4.7 Giao diện đối tượng ChoiceGroup chế độ một lựa chọn - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 4.7 Giao diện đối tượng ChoiceGroup chế độ một lựa chọn (Trang 71)
Hình 4.7 Giao diện đối tượng ChoiceGroup chế độ một lựa chọn - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 4.7 Giao diện đối tượng ChoiceGroup chế độ một lựa chọn (Trang 71)
Hình 4.8 Giao diện đối tượng ChoiceGroup chế độ nhiều lựa chọn - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 4.8 Giao diện đối tượng ChoiceGroup chế độ nhiều lựa chọn (Trang 72)
Bảng 4.10 Lớp Image - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Bảng 4.10 Lớp Image (Trang 74)
Bảng 4.13 So sánh List và ChoiceGroup - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Bảng 4.13 So sánh List và ChoiceGroup (Trang 77)
Bảng 4.14 Lớp List - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Bảng 4.14 Lớp List (Trang 78)
Hình 4.10 Giao diện đối tượng List cho phép chọn nhiều lựa chọn - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 4.10 Giao diện đối tượng List cho phép chọn nhiều lựa chọn (Trang 80)
tượng được gán khi khởi tạo. Chức năng cuộn màn hình được hỗ trợ nếu - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
t ượng được gán khi khởi tạo. Chức năng cuộn màn hình được hỗ trợ nếu (Trang 81)
Hình 4.11 Giao diện đối tượng TextBox - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 4.11 Giao diện đối tượng TextBox (Trang 83)
Hình 4.12 Giao diện đối tượng Alert - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 4.12 Giao diện đối tượng Alert (Trang 88)
Ticker là lớp hỗ trợ hiển thị chuỗi ký tự cuộn liên tục trên màn hình. Đối tượng - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
icker là lớp hỗ trợ hiển thị chuỗi ký tự cuộn liên tục trên màn hình. Đối tượng (Trang 89)
Bảng 5.6 Sự kiện GameAction - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Bảng 5.6 Sự kiện GameAction (Trang 97)
Bảng 5.7 Bắt sự kiện trong GameAction VD:  - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Bảng 5.7 Bắt sự kiện trong GameAction VD: (Trang 98)
Hình 5.1 Các phương thức vẽ đường cong Hình  chữ  nhật  gồm  4  loại:  - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 5.1 Các phương thức vẽ đường cong Hình chữ nhật gồm 4 loại: (Trang 106)
Bảng 5.12 Giá trị Anchor - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Bảng 5.12 Giá trị Anchor (Trang 108)
Bảng 5.14 Các giá trị Font - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Bảng 5.14 Các giá trị Font (Trang 111)
Hình Š.5 Các phương thức tạo font - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
nh Š.5 Các phương thức tạo font (Trang 112)
Hình 5.5 Các phương thức tạo font - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 5.5 Các phương thức tạo font (Trang 112)
Hình 5.7 Vẽ bằng đối tượng Mutable Image - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 5.7 Vẽ bằng đối tượng Mutable Image (Trang 114)
Hình 5.8 Các định dạng vị trí trong Graphics - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 5.8 Các định dạng vị trí trong Graphics (Trang 115)
//xố màn hình - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
x ố màn hình (Trang 116)
Bảng 6.1 Mô hình Record Store - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Bảng 6.1 Mô hình Record Store (Trang 119)
Hình 7.1 Lược đồ các lớp trong thư viện GCE - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 7.1 Lược đồ các lớp trong thư viện GCE (Trang 137)
Bảng 7.1 Lớp Connector - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Bảng 7.1 Lớp Connector (Trang 140)
Bảng 7.5 Các phương thức truy vẫn HTTP Header - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Bảng 7.5 Các phương thức truy vẫn HTTP Header (Trang 146)
Hình 7.3 Kết Nối TCP - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 7.3 Kết Nối TCP (Trang 153)
Hình-7.4 Lược đồ lớp thư viện WMA - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
nh 7.4 Lược đồ lớp thư viện WMA (Trang 157)
Hình 8.3 Một web service cĩ thể triệu tập đến các web serviees khác - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 8.3 Một web service cĩ thể triệu tập đến các web serviees khác (Trang 167)
Hình 9.1 Kiến trúc chương trình ứng dụng - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 9.1 Kiến trúc chương trình ứng dụng (Trang 186)
9.2.2 Mơ hình bảo mật (mã hố password): - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
9.2.2 Mơ hình bảo mật (mã hố password): (Trang 188)
Hình 9.2 Mô hình mã hoá password - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 9.2 Mô hình mã hoá password (Trang 188)
9.3.1 Mơ hình use case: - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
9.3.1 Mơ hình use case: (Trang 189)
Bảng 9.4 Table MonHoc 943.4  GV:  - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Bảng 9.4 Table MonHoc 943.4 GV: (Trang 197)
Hình 9.17 Màn hình xem phiếu đăng ký - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 9.17 Màn hình xem phiếu đăng ký (Trang 215)
Hình 9.18 Màn hình xem thời khoá biểu - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
Hình 9.18 Màn hình xem thời khoá biểu (Trang 216)
Hình B.1 Tạo project Web Service - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
nh B.1 Tạo project Web Service (Trang 229)
Hình B.2 Khai báo lớp và hàm - Nghiên cứu java mobile và xây dựng ứng dụng minh họa
nh B.2 Khai báo lớp và hàm (Trang 230)

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w