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

Luận văn máy tính java mobile và xây dựng ứng dụng minh họa

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


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








TP.HCM, 2005





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
ÀO ANH TUN – 0112451




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




NIÊN KHÓA 2001-2005



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



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


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
8.2. Web Service 152


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



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
Hình 9.2 Mô hình mã hoá password 176


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



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
Bng 5.15 V hình nh 101


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



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

PC thông thng.
JCP T chc Java Community Process
JDK Java Development Kits
JSR
Java Specification Requests, nhng yêu cu cn b sung cho các
phiên bn Java.
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.


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



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
1

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-
) 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
2

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
trình, đóng gói ng dng di đng.

Chng 1.
Tng quan v J2ME : Gii thiu tng quan v J2ME, các đc đim và
các thành phn con.
Chng 2. Gii thiu CLDC và MIDP: Trình bày chi tit v hai thành phn quan
trng ca J2ME dành cho đin thoi di đng, môi trng phát trin ng dng J2ME.
Chng 3.
Các vn đ c bn ca chng trình MIDlet: Chng này s trình bày
nhng đc đim quan trng nht ca mt ng dng J2ME, các bc c bn đ xây
dng ng dng này.
3

Java Mobile
Chng 4. Giao din đ ha cp cao: Trình bày v th vin đ ha cp cao nh
Form, List, TextBox… trong J2ME.
Chng 5.
Giao din đ ha cp thp: Trình bày v lp trình đ ha cp thp, các
phng thc v, x lý font, game action … trong J2ME.
Chng 6.
Lu tr thông tin vi RMS: Trình bày v Record Management System,
mt c ch lu tr riêng ca J2ME.
Chng 7.
Lp trình mng vi GCF: Trình bày v kh nng lp trình mng trong
J2ME.
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
4

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 …
5

Java Mobile
1.2 Lý do chúng ta cn J2ME
Ngày nay ngành công nghip sn xut thit b di đng trên th gii đang phát
trin nhanh chóng. Các thit b di đng ngày càng hin đi hn, “thông minh” hn
và ngày càng có nhiu tính nng ni bt. n c nh chic đin thoi di đng, ngày
nay chúng không ch đn thun đm nhn chc nng hi thoi mà còn có thêm
nhiu chc nng nh chp nh, nghe nhc, xem phim … nh mt “trung tâm gii
trí”. Các thit b gia dng khác nh lò vi ba, TV… cng ngày càng đc trang b
nhng tính nng hin đi hn. Nhu cu phát trin phn mm cho các thit b di
đng, gia dng ngày càng tng cao và đc đánh giá là mt ngành công ngh có th
đem li nhiu t đô la doanh thu. Mt thc t đt ra cho các nhà phát trin phn
mm trên các thit b này là hin nay không có mt chun hóa nào dành cho các nhà
sn xut phn cng. Các thit b trên th trng hin nay rt đa dng và mang nhiu
đc đim cng nh cu hình khác nhau. Trc thc t đó, vic có th chy trên
nhiu môi trng là mt li th rt ln ca ngôn ng Java. Các nhà phát trin Java
đã 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
6

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
7

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.
8

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
9

Java Mobile
– 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
– Ngoài ra còn có Personal Basis Profile, Personal Profile, RMI Profile, Game
Profile.
Lun vn ch yu ch đ cp đn Profile MIDP và các th vin liên quan đ
phc v cho vic vit ng dng trên đin thoi di đng.
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:
10

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à
CLDC và trên cùng là MID Profile. Lúc này khái nim “Vit mt ln, chy bt c
11

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.
12

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.
13

×