You are on page 1of 234

TRNG I HC KHOA HC T NHIN KHOA CNG NGH THNG TIN B MN MNG MY TNH VIN THNG

NG NGUYN KIM ANH O ANH TUN

NGHIN CU JAVA MOBILE V XY DNG NG DNG MINH HA

KHA LUN C NHN TIN HC

TP.HCM, 2005

TRNG I HC KHOA HC T NHIN KHOA CNG NGH THNG TIN B MN MNG MY TNH VIN THNG

NG NGUYN KIM ANH O ANH TUN

0112424 0112451

NGHIN CU JAVA MOBILE V XY DNG NG DNG MINH HA

KHA LUN C NHN TIN HC

GIO VIN HNG DN Thy NGUYN MINH TUN

NIN KHA 2001-2005

Li Cm n!
Sau hn nm thng tm hiu v thc hin, lun vn Nghin cu cng ngh Java Mobile v xy dng ng dng minh ho c bn hon thnh. t c kt qu ny, chng ti n lc ht sc ng thi cng nhn c rt nhiu s quan tm, gip , ng h ca cc thy c, bn b v gia nh. Trc ht, chng em xin gi li cm n chn thnh n B mn Mng my tnh v Vin thng, Khoa Cng ngh Thng tin, trng i hc Khoa hc T nhin v cc thy c c bit l Thy Nguyn Minh Tun tn tnh gip , hng dn chng em hon thnh lun vn ny. Chng ti rt cm n cc bn b trong khoa, cc anh ch, cc bn trong cng ng Java Vit Nam bn cnh ng h, ng gp kin cho chng ti trong qu trnh thc hin lun vn. V chng con cng xin chn thnh cm n gia nh lun ng vin, to iu kin tt nht cho chng con hc tp v hon tt lun vn. Lun vn hon thnh vi mt s kt qu nht nh, tuy nhin vn khng trnh khi sai st. Knh mong s cm thng v ng gp kin t cc thy c v cc bn. Thnh ph H Ch Minh, thng 7 nm 2005

ng Nguyn Kim Anh - o Anh Tun

MC LC
Li Ni u...................................................................................................... 1 Phn 1: Kin thc nn tng J2ME ................................................................ 5 Chng 1: Tng quan v J2ME.................................................................... 5
1.1 Gii thiu J2ME (Java 2 Micro Edition).......................................................5 1.2 L do chng ta cn J2ME..............................................................................6 1.3 Cc thnh phn ca J2ME:............................................................................7 1.3.1 Configuration:.............................................................................................7 1.3.2 Profile: ........................................................................................................9 1.3.3 My o Java ..............................................................................................10

Chng 2: Gii thiu CLDC v MIDP ...................................................... 13


2.1. CLDC ..........................................................................................................13 2.1.1. Yu cu phn cng: ..................................................................................13 2.1.2. Yu cu phn mm: ..................................................................................13 2.1.3. My o Java:.............................................................................................13 2.2. MIDP:..........................................................................................................16 2.2.1. Yu cu phn cng: ..................................................................................16 2.2.2. Yu cu phn mm: ..................................................................................16 2.2.3. Cu trc MID Profile:...............................................................................16 2.2.4. MIDlet Suite: ............................................................................................18 2.2.5. Mi trng pht trin ng dng J2ME.....................................................22

Chng 3: Cc vn c bn ca chng trnh MIDlet ......................... 25


3.1. Cu trc c bn: ..........................................................................................25 3.2. Xy dng mt ng dng MIDlet:................................................................25 3.3. Lp MIDlet: ................................................................................................26 3.4. Lp MIDletStateChangeException:............................................................28 3.5. Display.........................................................................................................28 3.6. Lp Displayable: .........................................................................................30 3.7. Qun l cc s kin (event).........................................................................32 3.7.1. Command & CommandListener...............................................................33 3.7.2. Item v ItemStateListener.........................................................................38

Chng 4: Giao din ha cp 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

Chng 5: Giao din ha cp thp........................................................ 78


5.1. Canvas: ........................................................................................................78 5.1.1. H to :..................................................................................................79 5.1.2. V trn i tng Canvas:........................................................................79 5.1.3. Bt s kin trong cc i tng Canvas:..................................................82 5.1.4. Game action:.............................................................................................85 5.1.5. S kin con tr:.........................................................................................87 5.2. Graphics: .....................................................................................................89 5.2.1. Mu sc:....................................................................................................90 5.2.2. Nt v:.......................................................................................................93 5.2.3. Font ch:...................................................................................................98 5.2.4. V cc i tng hnh nh (image): .......................................................101 5.2.5. Cc phng thc tnh tin i tng:.....................................................103 5.2.6. Vng xn (Clipping regions):.................................................................105

Chng 6: Lu tr thng tin vi RMS.................................................... 106


6.1. 6.2. 6.3. 6.4. 6.5. 6.6. Gii thiu RMS .........................................................................................106 Duyt danh sch Record vi RecordEnumeration ....................................115 Sp xp bng RecordComparator..............................................................117 Lc record vi RecordFilter ......................................................................119 Nhn thng ip khi Record Store thay i ..............................................121 X l li khi thao tc vi Record Store.....................................................122

Chng 7: Kt ni mng vi Generic Connection Framework (GCF) 124


7.1. Gii thiu GFC..........................................................................................124 7.2. Lc lp ...............................................................................................124 7.3. Kt ni HTTP:...........................................................................................127 7.3.1. Khi to kt ni: .....................................................................................127 7.3.2. Cc c im ca kt ni HTTP bng J2ME: ........................................130 7.3.3. Thng s kt ni: ....................................................................................137 7.4. Kt ni socket Datagram (UDP) ...............................................................138 7.5. Kt ni TCP socket ...................................................................................141 7.6. Gi v nhn SMS ......................................................................................144

Phn 2 : Web Service v ng dng "ng K Hc Phn" .................... 149 Chng 8: Gii thiu Web Service........................................................... 149
8.1. ng dng phn tn (Distributed Application) ..........................................149 8.1.1. Gii thiu ................................................................................................149 8.1.2. Cc vn ny sinh trong h thng ng dng phn tn.........................150 8.1.3. Hn ch ca nhng m hnh ng dng phn tn trc y....................151 8.2. Web Service ..............................................................................................152

8.2.1. nh ngha ..............................................................................................152 8.2.2. Thnh phn c bn ca Web service:.....................................................152 8.2.3. Hot ng ca Web service....................................................................152 8.2.4. u im ca web service .......................................................................155 8.3. Cc thnh phn chnh ca Web Service ....................................................157 8.3.1. SOAP (Simple Object Access Protocol) ................................................157 8.3.2. WSDL (Web Service Definition Language) ..........................................162

Chng 9: ng dng ng k hc phn .................................................. 172


9.1 c t chng trnh:..................................................................................172 9.1.1 Tng quan:..............................................................................................172 9.1.2 Cc chc nng chnh: .............................................................................172 9.2 Kin trc chng trnh: .............................................................................174 9.2.1 M hnh kt ni: .....................................................................................174 9.2.2 M hnh bo mt (m ho password): ....................................................176 9.3 Phn tch - thit k:....................................................................................177 9.3.1 M hnh use case: ...................................................................................177 9.3.2 c t mt s use case chnh:.................................................................178 9.4 Thit k m hnh d liu: ..........................................................................183 9.4.1 M hnh thc th kt hp: ......................................................................183 9.4.2 Cc bng d liu:....................................................................................183 9.4.3 Chi tit cc bng d liu:........................................................................184 9.4.4 Rng buc d liu:..................................................................................188 9.4.5 M hnh d liu: .....................................................................................190 9.4.6 Cc chc nng store procedures:............................................................190 9.4.7 Thit k lp:............................................................................................191 9.5 Ci t - th nghim:.................................................................................192 9.5.1 Yu cu phn cng: ................................................................................192 9.5.2 Yu cu phn mm: ................................................................................193 9.5.3 Giao din chng trnh:..........................................................................193

Chng 10: Tng kt ............................................................................... 205


10.1 Kt lun: ....................................................................................................205 10.2 Hng pht trin: ......................................................................................207

Ti liu tham kho ...................................................................................... 210 Ph Lc A: Hng dn s dng cng c Sun Wireless ToolKit 2.3 ...... 211 Ph Lc B: Xy dng v S dng Web Service....................................... 217 Ph Lc C: Gii thiu cc th vin JSR ................................................... 222

Danh Sch Cc Hnh


Hnh 1.1 Cc thit b J2ME h tr ..............................................................................6 Hnh 1.2 Cc thnh phn ca J2ME............................................................................7 Hnh 1.3 Configurations v cc thit b ......................................................................9 Hnh 1.4 Cu trc chng trnh J2ME......................................................................11 Hnh 1.5 Cu trc chng trnh MIDP .....................................................................11 Hnh 2.1 Cu trc thit b MID .................................................................................17 Hnh 3.1 Command Exit ...........................................................................................34 Hnh 3.2 Command Label .........................................................................................36 Hnh 3.3 nh x soft-button......................................................................................36 Hnh 4.1 S cc lp giao din ho ..................................................................40 Hnh 4.2 Giao din i tng DateField...................................................................46 Hnh 4.3 Giao din i tng Gauge ch tng tc ............................................48 Hnh 4.4 Giao din i tng Gauge ch khng tng tc .................................49 Hnh 4.5 Giao din i tng StringItem .................................................................52 Hnh 4.6 Giao din i tng TextField ...................................................................56 Hnh 4.7 Giao din i tng ChoiceGroup ch mt la chn ...........................59 Hnh 4.8 Giao din i tng ChoiceGroup ch nhiu la chn.........................60 Hnh 4.9 Giao din i tng List dng menu..........................................................67 Hnh 4.10 Giao din i tng List cho php chn nhiu la chn .........................68 Hnh 4.11 Giao din i tng TextBox...................................................................71 Hnh 4.12 Giao din i tng Alert ........................................................................76 Hnh 4.13 Giao din Ticker.......................................................................................77 Hnh 5.1 Cc phng thc v ng cong ...............................................................94 Hnh 5.2 Cc phng thc v hnh ch nht ............................................................95 Hnh 5.3 Cc phng thc h tr v Text ................................................................97 Hnh 5.4 Cc nh dng trong Text Graphic.............................................................97 Hnh 5.5 Cc phng thc to font.........................................................................100 Hnh 5.6 V bng i tng Immutable Image ......................................................101 Hnh 5.7 V bng i tng Mutable Image ..........................................................102 Hnh 5.8 Cc nh dng v tr trong Graphics .........................................................103 Hnh 7.1 Lc cc lp trong th vin GCF .......................................................125 Hnh 7.2 Kt ni UDP.............................................................................................138 Hnh 7.3 Kt Ni TCP.............................................................................................141 Hnh 7.4 Lc lp th vin WMA.....................................................................145 Hnh 8.1 Hot ng ca Web Service.....................................................................152 Hnh 8.2 Mt client truy xut n nhiu web services cng lc.............................154 Hnh 8.3 Mt web service c th triu tp n cc web services khc...................155 Hnh 8.4 Web Service Endpoint..............................................................................162 Hnh 9.1 Kin trc chng trnh ng dng.............................................................174 Hnh 9.2 M hnh m ho password .......................................................................176

Hnh 9.3 Lc use case ......................................................................................177 Hnh 9.4 M hnh thc th kt hp ER ...................................................................183 Hnh 9.5 Rng buc chu trnh .................................................................................189 Hnh 9.6 M hnh c s d liu ..............................................................................190 Hnh 9.7 M hnh Lp.............................................................................................192 Hnh 9.8 S cc mn hnh ..................................................................................194 Hnh 9.9 Mn hnh welcome...................................................................................195 Hnh 9.10 Mn hnh ng nhp...............................................................................196 Hnh 9.11 Confirm ..................................................................................................197 Hnh 9.12 Menu chc nng.....................................................................................198 Hnh 9.13 Mn hnh ng k hc phn l thuyt....................................................199 Hnh 9.14 Mn hnh ng k hc phn thc hnh ..................................................200 Hnh 9.15 Mn hnh xem thi kho biu ................................................................201 Hnh 9.16 Mn hnh xem kt qu hc tp ...............................................................202 Hnh 9.17 Mn hnh xem phiu ng k.................................................................203 Hnh 9.18 Mn hnh xem thi kho biu ................................................................204 Hnh 10.1 Hng pht trin thc t ........................................................................207 Hnh A.1 Cng c Sun WirelessToolkit 2.3 ...........................................................211 Hnh A.2 Mn hnh chnh ca cng c ...................................................................212 Hnh A.3 To project mi .......................................................................................212 Hnh A.4 Cc options cho project ...........................................................................213 Hnh A.5 Chnh sa ni dung file Jad v Jar ..........................................................214 Hnh A.6 Bin dich project .....................................................................................215 Hnh A.7 ng gi ng dng..................................................................................216 Hnh B.1 To project Web Service .........................................................................217 Hnh B.2 Khai bo lp v hm................................................................................218 Hnh B.3 Export nhiu hm cng lc......................................................................219 Hnh B.4 Mn hnh thc thi Web Service ca IE ...................................................219 Hnh B.5 File WSDL...............................................................................................220 Hnh B.6 Cng c Stub Generator ..........................................................................221 Hnh B.7 Cc options ca cng c Stub Generator.................................................221

Danh Sch Cc Bng


Bng 2.1 Cu trc file manifest.................................................................................19 Bng 2.2 Cu trc file JAD .......................................................................................20 Bng 3.1 Lp MIDlet ................................................................................................27 Bng 3.2 Lp Display ...............................................................................................29 Bng 3.3 Lp Displayable.........................................................................................32 Bng 3.4 Cc Command Type ..................................................................................37 Bng 3.5 Command v CommandListener ...............................................................38 Bng 3.6 Item v ItemStateListener..........................................................................39 Bng 4.1 Lp Screen.................................................................................................42 Bng 4.2 Lp Form ...................................................................................................44 Bng 4.3 Lp Item ....................................................................................................45 Bng 4.4 Lp DateField ............................................................................................46 Bng 4.5 Lp Gauge .................................................................................................49 Bng 4.6 Lp StringItem...........................................................................................51 Bng 4.7 Cc Rng Buc ca TextField ...................................................................53 Bng 4.8 Lp TextField ............................................................................................55 Bng 4.9 Lp ChoiceGroup ......................................................................................58 Bng 4.10 Lp Image................................................................................................62 Bng 4.11 nh dng ImageItem ..............................................................................62 Bng 4.12 Lp ImageItem ........................................................................................63 Bng 4.13 So snh List v ChoiceGroup ..................................................................65 Bng 4.14 Lp List....................................................................................................66 Bng 4.15 So snh TextField v TextBox ................................................................69 Bng 4.16 Lp TextBox............................................................................................70 Bng 4.17 Lp Alert..................................................................................................73 Bng 4.18 AlertType.................................................................................................75 Bng 4.19 Lp Ticker ...............................................................................................77 Bng 5.1 Truy vn kch thc Canvas......................................................................79 Bng 5.2 Lp Canvas ................................................................................................81 Bng 5.3 Giao tip vi Application Manager ...........................................................81 Bng 5.4 M Phm.....................................................................................................83 Bng 5.5 S kin keyPressed ....................................................................................84 Bng 5.6 S kin Game Action.................................................................................85 Bng 5.7 Bt s kin trong Game Action .................................................................86 Bng 5.8 S kin con tr...........................................................................................87 Bng 5.9 Lp Graphics .............................................................................................90 Bng 5.10 Cc phng thc v .................................................................................93 Bng 5.11 X l Text................................................................................................96 Bng 5.12 Gi tr Anchor ..........................................................................................96 Bng 5.13 X l Font ch.........................................................................................98 Bng 5.14 Cc gi tr Font ........................................................................................99 Bng 5.15 V hnh nh............................................................................................101

Bng 5.16 Gi tr Image Anchor .............................................................................103 Bng 5.17 Cc phng thc tnh tin .....................................................................103 Bng 5.18 Vng xn................................................................................................105 Bng 6.1 M hnh Record Store..............................................................................107 Bng 6.2 Lp RecordStore......................................................................................109 Bng 6.3 Lp RecordEnumeration .........................................................................117 Bng 6.4 Cc gi tr hng sp xp record...........................................................118 Bng 6.5 Lp RecordListener .................................................................................121 Bng 7.1 Lp Connector .........................................................................................128 Bng 7.2 Mode Kt Ni ..........................................................................................128 Bng 7.3 Cc Request Method chnh......................................................................130 Bng 7.4 Cc phng thc set/get Request Method...............................................131 Bng 7.5 Cc phng thc truy vn HTTP Header................................................134 Bng 7.6 Ly thng s kt ni ................................................................................137 Bng 7.7 Lp DatagramConnection .......................................................................139 Bng 7.8 Lp Datagram ..........................................................................................140 Bng 7.9 Thuc tnh ca SocketConnection...........................................................142 Bng 7.10 Lp SocketConnection ..........................................................................143 Bng 7.11 Cc interfaces chnh ca WMA.............................................................144 Bng 9.1 Danh sch cc Use Case ..........................................................................178 Bng 9.2 Table ChuyenNganh ................................................................................184 Bng 9.3 Table SV ..................................................................................................184 Bng 9.4 Table MonHoc .........................................................................................185 Bng 9.5 Table GV .................................................................................................185 Bng 9.6 Table Lop.................................................................................................185 Bng 9.7 Table Lop_MonLT ..................................................................................186 Bng 9.8 Table Lop_MonTH..................................................................................187 Bng 9.9 Table PhanCongTH .................................................................................187 Bng 9.10 Table DangKyLT...................................................................................187 Bng 9.11 Table DangKyTH ..................................................................................187 Bng 9.12 Table ThongBao ....................................................................................188

Cc ch vit tt, thut ng c s dng


API CDC CLDC Configuration DES GCF IIS J2EE J2ME J2SE JCP JDK JSR JSR-172 JSR-177 KVM MIDlet MIDP MMS PDA Profile RMS Application Program Interface Connected Device Configuration Connected Limited Device Configuration c t qui nh cc th vin gc J2ME phi h tr cho mt dng phn cng. Thut ton m ha kha b mt 64 bits General Connection Framework Internet Information Services-Web server chun trn Windows Java 2 Enterpise Edition, phin bn Java cho nhng d n ln. Java 2 Micro Edition, phin bn Java cho nhng thit b nh. Java 2 Standard Edition, phin bn Java ra i u tin, dnh cho PC thng thng. T chc Java Community Process Java Development Kits Java Specification Requests, nhng yu cu cn b sung cho cc phin bn Java. Th vin truy xut web service cho ngn ng J2ME. Th vin m ha v bo mt cho ngn ng J2ME. My o Java cho mi trng CLDC. Tn gi chung cho cc ng dng J2ME. Mobile Information Device Profile. Multimedia Message Service, tin nhn hnh nh, m thanh, video cho di ng. Personal Digital Assistant. Cc tp th vin cp cao nh ngha trn nn Configuration. RecordStore Management System, c ch lu tr ca J2ME.

SMS SOAP Symbian UDDI Web Service WMA WSDL XML

Short Message Service, tin nhn thng thng cho in thoi di ng. Simple Object Access Protocol, nh dng thng ip ca Web Service. H iu hnh cho in thoi di ng ca hng Symbian. Universal Description, Discovery, and Integration Giao thc gi hm t xa da trn XML v HTTP. Wireless Message API Web Service Definition Language Extensible Markup Language

Java Mobile

Li Ni u
Mng in thoi di ng xut hin ti Vit Nam t u nhng nm 1990 v theo thi gian, s lng cc thu bao cng nh cc nh cung cp dch v di ng ti Vit Nam ngy cng tng. Cng vi s pht trin ca s lng thu bao di ng l s a dng ho cc dch v hng n thit b di ng. Ngy nay in thoi di ng khng ch cn mang chc nng gi in hay nhn tin thng thng m cn l mt thit b gii tr, tra cu thng tin rt tin li. Do , xy dng cc ng dng cho in thoi di ng ang l mt yu cu tt yu trong xu th hin nay. Ngnh cng nghip phn mm cho cc thit b di ng c xem nh mt mnh t mu m v ha hn em li nhiu t la doanh thu. Hai hng pht trin ng dng trn in thoi di ng ph bin hin nay l s dng ngn ng C++ trn nn h iu hnh Symbian v J2ME. Cc ng dng vit trn nn Symbian c cc u th truy cp trc tip cc ti nguyn ca in thoi cng nh h tr h thng tp tin, th mc nh my tnh c nhn v c h tr trc tip bi h iu hnh. Tuy nhin h iu hnh Symbian li c kch thc kh ln nn ch c cc th h in thoi tng i cao cp, v xy dng ng dng dng Symbian API cng phc tp hn. i trng vi Symbian API l cng ngh J2ME vi kch thc nh gn, tin dng, c h tr bi hu ht cc th h in thoi mi ra i, k c cc in thoi c h iu hnh Symbian. J2ME khng nhng l mt ngn ng hng n cc thit b di ng m cn l ngn ng chnh lp trnh trn cc thit b gia dng, th tn dng in t v cc thit b thng minh khc. Chng ta c th ni i tng ca ngn ng J2ME l rng hn rt nhiu so vi C++ trn nn Symbian. Ti thi im hin ti, ngn ng J2ME khng h tr c nhiu tnh nng nh C++ trn Symbian nhng li c nhng u im tri hn. J2ME l mt ngn ng nh, gn nhng rt cht ch v d nm bt, vi nhng lp trnh vin c kinh nghim vi Java vic lp trnh vi J2ME tr nn rt

Java Mobile

d dng. J2ME cn l mt ngn ng c cc t chc m ngun m ng h mnh m v pht trin rt nhanh chng, JCP (Java Community Processhttp://www.jcp.org) l mt chng trnh do Sun thnh lp lun tip thu cc kin v a ra cc c t mi dnh cho Java ni chung v J2ME ni ring. Cc c t ny thng c tip u ng JSR v l cc tnh nng b sung mi cho J2ME. Nhng JSR quan trng c th c nhc n nh JSR-82 (Bluetooth), JSR 205 (Gi tin nhn SMS, MMS), JSR-172 (Web service), JSR-177 (Security and Trust Services), JSR 184 (3D Game) Cc c t ny ngy cng phong ph v phn no pht trin nhanh hn c s pht trin ca phn cng. Tht kh so snh gia cc dng ngn ng lp trnh vi nhau v mi loi u c u v khuyt im ring. Trong lun vn ca mnh, chng ti chn nghin cu v J2ME v nhng u im kh r rng nu trn, mt khc chng ti cng mun th sc mt lnh vc kh mi m l tip cn vi phn mm m ngun m. V chng trnh ng dng, tnh kh thi v thc t ngy cng c cao. Chng ti nhn thy xu hng m rng cc ng dng trn web sang in thoi di ng ang c ch trng. Thng mi in t (e-commerce) ang tin dn sang thng mi di ng (m-commerce). Vi thc trng Vit Nam hin nay, s ngi s hu my vi tnh c nhn, c bit l my tnh xch tay cha nhiu nhng t l s ngi c in thoi di ng li kh cao. Vic chuyn cc ng dng thng mi t mi trng web sang mi trng di ng s khin s tin dng tng cao, s ngi s dng dch v trc tuyn chc chn s tng nhanh v i vi nhiu ngi chic in thoi di ng d s dng hn rt nhiu so vi chic my tnh "phc tp v kh hiu". ng dng chng ti chn thc hin bc chn vo lnh vc kh mi m ny l ng dng "ng K Hc Phn" qua mng di ng. i vi sinh vin khoa cng ngh thng tin, h thng ng k hc phn SMS qua mi trng web l mt ng dng rt quen thuc. Chng ti mun pht trin ng dng ca mnh nh mt m rng ca h thng ng k hc phn ny trn in thoi di ng nhm h tr cc bn sinh vin c th s dng cc tin ch ca h thng m khng cn phi c my

Java Mobile

tnh kt ni mng. Vi ng dng ny, tnh tin dng ca h thng ng k hc phn SMS c m rng. Ch cn c mt in thoi di ng h tr GPRS cc bn sinh vin c th ng k hc phn ngay c khi ang v qu n tt nhng vng internet cha ph bin nhng ph sng di ng hay khi ang di chuyn trn tu xe V mt s iu kin c bit ca in thoi, hin nay ng dng ny ch chy trn chng trnh gi lp. Tuy nhin, chng ti hi vng trong mt tng lai rt gn, khi cc th h in thoi mi c gi thnh va phi ra i v h tr mt s cng ngh nh WebService, m ho m chng ti ang s dng xy dng phn mm th ng dng ny c th c p dng rng ri trong thc t cho sinh vin ca khoa. Cn phi ni thm, ng dng hin ti hon ton c th s dng c trong thc t Vit Nam nhng c mt s i hi v thit b kh t tin (xin xem thm Chng 10, phn Kt Lun), ch khng ch mi l l thuyt trn giy t. Vi vic xy dng thnh cng h thng ng k hc phn qua mng in thoi di ng, chng ti rt t tin v vic xy dng cc h thng thng mi di ng ln hn. Trong tng lai gn, khch hng c th ngi trn taxi mua v my bay, t ch khch sn, xem li ti khon ngn hng vi chic in thoi di ng nh b. Chic in thoi di ng s tr thnh mt cng c giao dch khng th thiu trong thi i mi, thi i ca thng mi in t ton cu. Lun vn c trnh by thnh hai phn lp: Phn 1: Gii thiu v l thuyt nn tng ca J2ME, cc th vin, cc k thut lp trnh, ng gi ng dng di ng. Chng 1. Tng quan v J2ME : Gii thiu tng quan v J2ME, cc c im v cc thnh phn con. Chng 2. Gii thiu CLDC v MIDP: Trnh by chi tit v hai thnh phn quan trng ca J2ME dnh cho in thoi di ng, mi trng pht trin ng dng J2ME. Chng 3. Cc vn c bn ca chng trnh MIDlet: Chng ny s trnh by nhng c im quan trng nht ca mt ng dng J2ME, cc bc c bn xy dng ng dng ny.

Java Mobile

Chng 4. Giao din ha cp cao: Trnh by v th vin ha cp cao nh Form, List, TextBox trong J2ME. Chng 5. Giao din ha cp thp: Trnh by v lp trnh ha cp thp, cc phng thc v, x l font, game action trong J2ME. Chng 6. Lu tr thng tin vi RMS: Trnh by v Record Management System, mt c ch lu tr ring ca J2ME. Chng 7. Lp trnh mng vi GCF: Trnh by v kh nng lp trnh mng trong J2ME. Phn 2: Gii thiu v Web Service, mt cng ngh rt mi xy dng cc ng dng thng mi in t phn tn v gii thiu chi tit v ng dng cng nhng nh gi, tng kt. Chng 8. Gii thiu v ng dng phn tn v web service Chng 9. Trnh by chi tit v ng dng "ng K Hc Phn" Chng 10. nh gi, tng kt cc kt qu t c v hng pht trin trong tng lai. Tuy u t kh nhiu th gi v cng sc vo lun vn ny nhng chc chn chng ti cng khng trnh khi nhng sai st. Rt mong nhn c kin ng gp v s thng cm ca qu thy c v cc bn! Xin chn thnh cm n! Kim Anh Anh Tun

Java Mobile

Phn 1: Kin thc nn tng J2ME Chng 1: Tng quan v J2ME


1.1 Gii thiu J2ME (Java 2 Micro Edition)

J2ME l mt nhnh ca ngn ng lp trnh JAVA c pht trin nhm hng ti vic lp trnh cho cc thit b nh (micro) c b nh, kh nng hin th v x l hn ch. Ban u Java c xy dng ch gm mt phin bn duy nht, ngy nay c bit n vi tn J2SE (Java 2 Standard Edition), vi phng chm l vit mt ln, chy trn mi mi trng (Write once, run anywhere). Java c hnh thnh trn tng xy dng mt ngn ng m lp trnh vin ch cn vit mt ln duy nht nhng ng dng c th chy trn bt c mi trng no c h tr my o Java (Java Virtual Machine). lm c vic ny, Java s dng mt phng thc bin dch m ngun tng i khc so vi cc ngn ng lp trnh truyn thng. B bin dch Java khng bin dch m ngun trc tip sang m my m bin dch sang mt dng m trung gian m my o Java hiu c (m bytecode). Khi c nhu cu s dng ng dng, my o Java s c m trung gian ny v dch ra m my v thc thi; nh vo qu trnh trung gian mt ng dng Java c th chy trn bt k mi trng no c ci t my o Java tng thch. c gii thiu ln u vo nm 1995, ngy nay mc tiu Java nhm n cng thay i kh nhiu. Java hin nay khng ch nhm n h my tnh bn n thun; hai nm sau ngy u c ra mt, mt phin bn Java mi l J2EE (Java 2 Enterprise Edition) c gii thiu nhm ti vic pht trin cc ng dng c qui m ln hn. Phin bn mi nht c thm vo dng ngn ng Java l J2ME (Java 2 Micro Edition). J2ME nhm n vic pht trin ng dng cho cc ng dng c nng lc hn ch nh u gii m k thut s TV set-top boxes, in thoi di ng

Java Mobile

1.2

L do chng ta cn J2ME

Ngy nay ngnh cng nghip sn xut thit b di ng trn th gii ang pht trin nhanh chng. Cc thit b di ng ngy cng hin i hn, thng minh hn v ngy cng c nhiu tnh nng ni bt. n c nh chic in thoi di ng, ngy nay chng khng ch n thun m nhn chc nng hi thoi m cn c thm nhiu chc nng nh chp nh, nghe nhc, xem phim nh mt trung tm gii tr. Cc thit b gia dng khc nh l vi ba, TV cng ngy cng c trang b nhng tnh nng hin i hn. Nhu cu pht trin phn mm cho cc thit b di ng, gia dng ngy cng tng cao v c nh gi l mt ngnh cng ngh c th em li nhiu t la doanh thu. Mt thc t t ra cho cc nh pht trin phn mm trn cc thit b ny l hin nay khng c mt chun ha no dnh cho cc nh sn xut phn cng. Cc thit b trn th trng hin nay rt a dng v mang nhiu c im cng nh cu hnh khc nhau. Trc thc t , vic c th chy trn nhiu mi trng l mt li th rt ln ca ngn ng Java. Cc nh pht trin Java cho ra i ngn ng J2ME hng n vic pht trin phn mm cho cc thit b di ng. Ngn ng J2ME thc s l mt ngn ng nh gn, d nm bt, cht ch v thch hp cho cc thit b c kh nng hn ch. Cc thit b di ng trn th trng hin nay, c bit l in thoi di ng hu ht u h tr rt tt ngn ng J2ME v J2ME thc s tr thnh mt trong nhng ngn ng ph bin nht trong lnh vc lp trnh di ng.

Hnh 1.1 Cc thit b J2ME h tr

Java Mobile

1.3

Cc thnh phn ca J2ME:

Hnh 1.2 Cc thnh phn ca J2ME Khi nim thit b di ng l tng i rng ln. Chng bao hm nhng thit b c kch thc vt l khc nhau nhiu ln v cho d cng kch thc nhng thit b ny vn c kh nng x l cng nh hin th khc nhau ( nhng chic in thoi hin th 12,000 pixels cho n nhng chic PDA 20,000 pixels). p ng c nhu cu khc nhau ca nhng thit b ny, bn thn ngn ng J2ME cng c chia thnh nhng thnh phn nh hn. Chng ta s tm hiu hai khi nim mi l Configurations v Profiles. 1.3.1 Configuration: p ng nhu cu cho nhiu chng loi thit b khc nhau, Sun a ra khi nim Configuration. Khi nim Configuration c mi lin h cht ch vi my o Java. Ni chnh xc hn, mt Configuration qui nh nhng thnh phn v nhng th vin gc ca ngn ng Java m my o phi h tr cho configuration . Vic phn chia thnh nhng Configurations khc nhau ch yu da vo kh nng b nh, nng lc hin th, nng lc x l v kh nng kt ni mng ca cc thit b. Nh chng ta bit, cc thit b di ng rt khc nhau v ngun ti nguyn, v kh nng phn cng. Vi nhng thit b c nng lc hn ch, nu ta a

Java Mobile

qu nhiu th vin h tr vo my o trn thit b s gy chm h thng v d tha khng cn thit. Vi nhng thit b c kh nng cao hn, chng ta s a thm nhiu th vin h tr vo my o gip ch cho cng vic lp trnh ca cc nh pht trin. Do , nhu cu phn chia thnh nhiu Configurations l vic cn thit. Hin nay Sun a ra hai loi Configurations khc nhau: CDC (Connected Device Configuration): 512 kb (minimum) b nh chy Java 256 kb (minimum) b nh cp pht ng. Kt ni mng lin tc, bng thng rng. CLDC(Connected Limited Device Configuration): 128 kb (minimum) b nh chy Java 32 kb (minimum) b nh cp pht ng. Giao din ngi dng hn ch Nng lng tiu tn t (ch yu dng pin) Kt ni mng Wireless, chm. Vic phn chia ny thc cht cng ch mang tnh tng i. Cng ngh hin nay ang pht trin kh nhanh, v vic pht trin ny cng lm cho ranh gii gia cc loi Configuration ny tr nn khng r rng.

Java Mobile

Hnh 1.3 Configurations v cc thit b 1.3.2 Profile: Configuration thc ra ch cung cp mt s rt t cc lp v ngi pht trin ng dng hu nh khng th ch lm vic n thun vi cc configuration ny. Ta c th thy iu ny qua mt v d: cc configuration khng h tr cc cng c v giao din (GUI), do nu ch dng configuration th lp trnh vin phi xy dng tt c cc chc nng giao din t u. V l do ny Sun linh hot v a thm mt khi nim mi nm tng trn ca configuration, l Profiles. Ta c th xem Profile l mt m rng ca khi nim Configuration. Profile nh ngha cc th vin gip lp trnh vin pht trin pht trin ng dng cho mt dng thit b no . V d Mobile Information Device Profile (MIDP) nh ngha cc hm API cho cc thnh phn giao din, nhp liu v x l s kin, lu tr, kt ni mng v x l thi gian, ph hp vi mn hnh hin th v kh nng x l ca cc thit b di ng. Profile MIDP c nh ngha trn nn tng ca CLDC. Ngoi ra chng ta cn mt s Profile tiu biu khc nh PDA Profile: tng t MIDP, nhng vi th trng l cc my PDA vi mn hnh v b nh ln hn

Java Mobile

Foundation Profile: cho php m rng cc tnh nng ca CDC vi phn ln cc th vin ca b Core Java2 1.3 Ngoi ra cn c Personal Basis Profile, Personal Profile, RMI Profile, Game Profile. Lun vn ch yu ch cp n Profile MIDP v cc th vin lin quan phc v cho vic vit ng dng trn in thoi di ng. 1.3.3 My o Java Nh chng ta bit, mt chng trnh Java s c bin dch thnh m trung gian sau chnh my o Java s bin dch phn m ny sang m my thc thi. My o Java s chu trch nhim vic cung cp tnh nng bo mt, cp pht v thu hi b nh v qun l vic iu phi cc tin trnh. Chng ta c th ni chnh my o Java lm cho chng trnh ca chng ta chy. Vi CDC, my o Java c cng cc c tnh nh J2SE. Tuy nhin, vi CLDC, Sun pht trin ring mt dng my o chuyn bit c gi l K Virtual Machine, gi tt l KVM. Chnh nhng hn ch v ti nguyn ca cc thit b di ng ra nhu cu v s ra i ca KVM. KVM khng phi l mt my o Java truyn thng: My o ch cn 40-80 kb b nh Ch i hi 20-40 kb b nh ng (heap) C th chy vi b vi x l 16-bit v xung nhp 25 MHz. n y chng ta c th hnh dung phn no cu trc tng th ca mt chng trnh J2ME nh sau:

10

Java Mobile

Hnh 1.4 Cu trc chng trnh J2ME Nu chng trnh c bin dch vi CDC, chng trnh s chy trn cc my o truyn thng v mang cc c tnh nh chng trnh J2SE. Nu chng trnh c bin dch vi CLDC, chng trnh s chy vi my o chuyn bit KVM v nhng c tnh ring do CLDC i hi. Vi chng trnh xy dng bi MIDP, chng ta c cu trc chuyn bit sau:

Hnh 1.5 Cu trc chng trnh MIDP Tng di cng l h iu hnh c h tr my o Java (KVM), bn trn l CLDC v trn cng l MID Profile. Lc ny khi nim Vit mt ln, chy bt c

11

Java Mobile

mi trng no ca Sun khng cn ng hon ton v xut hin my o chuyn bit KVM. Mt s chng trnh vit bng MIDP s khng chy trn mi trng J2SE v ngc li. Tuy nhin chng ta phi cm kch cc n lc ca Sun gip cho Java tr thnh mt trong nhng ngn ng c kh nng c lp vi mi trng bn di nht hin nay, iu ny ng vi c mi trng thit b di ng. nhng phn tip theo chng ta s tm hiu k hn v hai thnh phn c bn ca J2ME l Configuration v Profile.

12

Java Mobile

Chng 2: Gii thiu CLDC v MIDP


2.1. CLDC
2.1.1. Yu cu phn cng:

Khi ra yu cu v phn cng vic xem xt cc chi tit nh b x l, b nh v cc phn mm hin c trn cc thit b di ng l vic v cng quan trng. Nhm mc ch phc v ti a cc thit b hin c trn th trng, CLDC ch ra cc yu cu v b nh v khng ra yu cu no cho cc thnh phn khc. Yu cu ti thiu c th s dng CLDC nh sau: 128 kilobytes chy JVM v cc th vin ca CLDC. Khng phn bit loi b nh s dng (Rom, Flash,), b nh ca thit b phi bo lu c ni dung lu di, ngay c khi ngt in. B nh ny thng c gi l nonvolatile memory. 32 kilobytes b nh trng cp pht cc i tng (objects). B nh ny thng c gi l volatile memory (hay l heap).

2.1.2.

Yu cu phn mm:

CLDC c yu cu ti thiu v mt phn mm. H iu hnh phi tng thch vi JVM v c chc nng qun l cc ng dng Java, bao gm: Cho php chn v kch hot ng dng Cho php g b ng dng khi thit b 2.1.3. My o Java:

Do cc thit b di ng dng CLDC thng c ti nguyn hn ch nn Sun ra my o Java KVM phc v ring cho cc thit b ny. My o KVM thc cht l mt b phn con ca cc my o trn mi trng J2SE v J2EE nn cng c nhiu hn ch v khc bit so vi hai phin bn trn.

13

Java Mobile

Mt s hn ch: Khng h tr kiu d liu float: Vic s l s float i hi nhiu ti nguyn x l, ngoi ra cc thit b di ng khng c nhng cu hnh phn cng dnh ring cho vic x l s float nn trong J2ME chng ta khng th khai bo cc bin, mng float, cc hm cng khng nhn tham s v tr v cc s float. Phng thc finalize: Trong J2SE, chng ta c th khai bo phng thc finalize (tng t nh phng thc destructor). Garbage Collector s gi phng thc ny trc khi hy b mt i tng, phng thc ny thng c dng thu hi cc ti nguyn h thng nh sockets, file handles trc khi i tng b ph hy. Tuy nhin trong J2ME chng ta khng c phng thc finalize. Error Handling: Trong J2ME chng ta vn c h tr cc cng c v by li (ch yu thng qua try v catch). Tuy nhin kh nng v x l li ca J2ME cng hn ch hn vi hai phin bn cn li. Khng h tr vic s dng code ca cc ngn ng lp trnh khc Khng h tr Reflection: Trong J2SE v J2EE, chng ta c th dng cc lp Reflection tm hiu thng s mi trng my o Java ang thc thi. Khng h tr ThreadGroup: mi thread c qun l ring bit, khng cn lp ThreadGroup. Nu mun iu khin mt lc nhiu threads chng ta c th dng mng hoc Vector. J2ME cng cn mt s im khc bit so vi J2SE v J2EE, mt trong nhng khc bit chnh l qu trnh Class Verify (tm dch l kim tra lp). Cc lp trc khi c load s thng qua mt qu trnh kim tra v s hp l v tnh nguyn vn. y l mt c ch quan trng bo m an ton (security) ca Java. Qu trnh ny trong J2SE v J2EE c th chim n 50 kbytes b nh, trong J2ME chng c chia thnh 2 giai on:

14

Java Mobile

Tin kim tra (Pre-verification): Trc khi mt lp c np vo thit b, mt phn mm s c s dng thm vo mt s thng s b sung vo file class. Qu trnh ny gim thi gian v b nh cn thit my o thc hin giai on 2 trong qu trnh kim tra. File class sau khi c tin kim tra s tng dung lng khong 5% Kim tra ni thit b (In-device verification): Khi thit b np cc file class c tin kim tra, cng c kim tra trong thit b s thc hin mt vi kim tra xc nhn tnh hp l ca on code. Nu pht hin mt li no b kim tra s pht sinh bo co v t chi np lp i tng vo b nh. Qu trnh ny i hi t b nh v ti nguyn hn nhiu ln so vi trong J2SE v J2EE. CLDC khng h tr tt c cc lp v th vin c h tr trong ngn ng Java truyn thng m ch h tr nhng th vin tht s cn thit i vi thit b di ng. Ngoi ra trong CLDC chng ta cng c h tr vic truy vn mt s thuc tnh ca h thng: Ly thng tin v platform ca thit b: System.getProperty("microedition.platform") Ly thng tin v bng m mc nh: System.getProperty("microedition.encoding") Ly trng tin v version v tn ca configuration: System.getProperty("microedition.configuration") Ly thng tin v Profile: System.getProperty("microedition.profiles") Ngoi ra chng ta c th truy cp lp Runtime ly cc thng s v thit b nh: Runtime rtime= Runtime.getRuntime(); System.out.println("Total memory: " + rtime.totalMemory()); //thng tin v tng b nh System.out.println("Free memory: " + rtime.freeMemory()); //thng tin v b nh trng

15

Java Mobile

2.2. MIDP:
2.2.1. Yu cu phn cng: Mn hnh t nht phi c 96 x 54 pixels C t nht mt thit b nhp liu: bn phm hoc mn hnh cm ng. C t nht 128 kilobytes b nh non-volatile chy cc thnh phn ca MID C t nht 8 kilobytes b nh non-volatile lu cc cu hnh chng trnh v d liu C t nht 32 kilobytes chy Java C kt ni khng dy (wireless network)

2.2.2. Yu cu phn mm: Mc d h iu hnh ca tng thit b c th khc nhau nhng phi p ng c cc yu cu ti thiu sau: H iu hnh phi h tr vic x l ngt, x l exception v h tr x l ha bitmap xut d liu ra mn hnh H iu hnh phi nhn c tn hiu nhp liu (input) v chuyn d liu cho my o Java H iu hnh phi h tr vic c/ghi vo b nh non-volatile. Khng i hi h iu hnh phi nh ngha file system nhng phi cho php ghi d liu dng persistent (khng b mt i khi tt my, ngt in). Phi h tr truy xut mng, c bit phi c tnh nng c/ghi d liu thng qua mng khng dy (wireless network).

2.2.3. Cu trc MID Profile:

16

Java Mobile

Hnh 2.1 Cu trc thit b MID Tng di cng l phn cng ca thit b di ng. Bn trn phn cng ta c h iu hnh iu khin cc hot ng. Bn trn h iu hnh ta c th chia thnh 2 phn ring bit. Chng ta s thy phn bn phi l cc chng trnh native application (tm dch l chng trnh nguyn gc). Trc khi J2ME ra i, thng thng y l loi chng trnh duy nht c trn cc thit b. y l loi chng trnh c nh sn xut a sn vo my di ng lc sn xut nh chng trnh chn ting chung, chnh thng s in thoi, chnh gi Chnh nh J2ME ra i chng ta mi c chc nng ci t thm cc chng trnh c vit thm vo in thoi. CLDC l nn tng c bn cho MID Profile, cc chng trnh MIDP (MIDP Applications) c th s dng cc lp c cung cp bi c CLDC v MIDP. Ngoi ra chng ta cn c cc lp OEM (original equipment manufacturer) l cc lp do cc nh sn xut cung cp thm cho in thoi (cc hng nh Nokia, Samsung, Motorola thng c thm nhiu lp cp cao h tr cho lp trnh vin) v bn trn l cc ng dng c xy dng t cc lp ny, cc ng dng ny thng ch chy trn cc in thoi ca hng cung cp th vin lp OEM.

17

Java Mobile

2.2.4. MIDlet Suite: Chng ta gi chng trnh Java chy trn thit b di ng l mt MIDlet. MIDlet s s dng cc lp cung cp bi CLDC v MIDP. Mt MIDlet Suite (mt b MIDlet) cha mt hay nhiu ng dng MIDlet c nn chung trong mt file JAR (Java Archive). Cu trc file Jar: Ngoi cc file lp v resource, trong file Jar cn c mt tp tin c gi l manifest. y l tp tin m t ni dung ca ton file Jar. Tp tin ny c tn manifest.mf v bn thn n cng c nn trong file Jar. Trong file manifest chng ta c th nh ngha cc thuc tnh ca file jar nhng quan trng nht l 6 thuc tnh sau: MIDlet-Name MIDlet-Version MIDlet-Vendor MIDlet-<n> (mi mt MIDlet cn mt mu thng tin ny) MicroEdition-Profile MicroEdition-Configuration

Nu 1 trong 6 thng tin ny thiu th thit b s t chi chy cc ng dng trong file Jar ny. Bng sau m t cc thuc tnh c th nh ngha trong file manifest: Thuc tnh MIDlet-Name MIDlet-Version MIDlet-Vendor MIDlet-<n> Mc ch Tn ca b MIDlet S phin bn Cho bit ngi to MIDlet Suite MIDlet (trong file Jar), mi mt MIDlet cn mt mu tin ny, mu tin ny gm 3 mu tin con: Tn MIDlet Bt buc C C C

Tham chiu n tng MIDlet trong b C

18

Java Mobile

File Icon MIDlet (c th khng cn) Tn lp s c np khi thc thi MIDlet ny MicroEditionProfile MicroEdition Configuration MIDlet-Icon MIDlet-Description MIDlet-Info-URL Tn profile cn thit chy MIDlet ny, C thng l MIDP1.0 hoc MIDP2.0 Configuration cn chy MIDlet (thng C l CLDC 1.0) File icon (.pgn) ca b MIDlet M t (text) ca b MIDlet a ch trang web nh pht trin MIDlet Bng 2.1 Cu trc file manifest y l mt v d n gin ca 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): Bn cnh file Jar, mt b ng dng MIDlet cn c thm file JAD (.jad) cung cp thng tin v cc MIDlet trong file JAR. Vic t ra file JAD c mt s mc ch sau: Cung cp thng tin v ni dung file Jar. T thng tin ny, b qun l ng dng trn thit b mi quyt nh ng dng ny c thch hp chy trn thit b hay khng. Cung cp cc tham s dng cho MIDlet trnh thay i file JAR. File JAR cha m ng dng nn cn trnh b thay i. Khng Khng Khng

19

Java Mobile

Danh sch cc thuc tnh trong file Jad: Thuc tnh MIDlet-Name MIDlet-Version MIDlet-Vendor MIDlet-<n> Mc ch Tn ca b MIDlet S phin bn Cho bit ngi to MIDlet Suite MIDlet (trong file Jar), mi mt MIDlet cn mt mu tin ny, mu tin ny gm 3 mu tin con: Tn MIDlet File Icon MIDlet (c th khng cn) Tn lp s c np khi thc thi MIDlet ny MIDlet-Jar-URL MIDlet-Jar-Size MIDlet-Data-Size a ch URL ca file Jar Kch thc file Jar tnh bng byte cc d liu ca chng trnh (persistent data) MIDlet-Description MIDlet-DeleteConfirm MIDlet-InstallNotify Bng 2.2 Cu trc file JAD Ta cng c th nh ngha thm cc thuc tnh ring, bt u bng MIDlet- ty theo mc ch ca lp trnh vin. Nhng thuc tnh sau phi ging nhau file Jad v file manifest (nm trong file Jar): MIDlet-Name MIDlet-Version URL nhn thng bo v qu trnh ci t Khng M t MIDlet (dng text) Thng bo nhc nh khi xa MIDlet Khng Khng C C Bt buc C C C

Tham chiu n tng MIDlet trong b C

Kch thc ti thiu tnh bng byte ghi Khng

20

Java Mobile

MIDlet-Vendor MIDlet-<n> for each MIDlet MIDlet-Jar-URL

Nu cc thuc tnh ny khng ging nhau, ng dng s b thit b t chi. Vi cc thuc tnh cn li, nu file Jad v file manifest khc nhau th thuc tnh trong file Jad s c u tin hn. Sau y l mt v d n gin 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 mt cu hi c t ra: Ti sao phi ghp nhiu ng dng MIDlet thnh mt file nn dng JAR. Mc ch ca vic kt hp ny gip cho cc ng dng MIDlet c nn chung ny c th chia x chung cc ti nguyn vi nhau. Mt v d c th cp n l vic chia s chung cc Record Store: trong mi trng J2ME chng ta khng c khi nim file system; mi nhu cu lu tr d liu c thng qua cc Record. Trong mt b MIDlet Suite th tn cc Record phi phn bit v cc ng dng MIDlet cng chung trong mt b s c th chia s cc Record ny vi nhau. iu ny kh thun li, n c th gip chng ta vit cc games cng chia s danh sch ngi chi, danh sch cc ngi chi c im cao nht Khi np ng dng vo thit b ta cng lc np hai file .Jar v .Jad; file .Jad s l file thc thi v file .Jar cha m thc thi ca chng trnh

21

Java Mobile

2.2.5. Mi trng pht trin ng dng J2ME Phn ny chng ta s tm hiu v cc phn mm cn thit dng pht trin mt ng dng J2ME, cch ci t v cu hnh cc phn mm ny. Ngoi ra chng ta s nghin cu v cc tools pht trin c h tr thm. vit mt ng dng J2ME chng ta cn t nht 3 chng trnh sau: Java Development Kit (JDK) , version 1.3 hoc cao hn (phin bn mi nht tnh n lc lun vn c thc hin l phin bn 1.42) http://java.sun.com/products/jdk/ Connected, Limited Device Configuration (CLDC): http://java.sun.com/products/cldc Mobile Information Device Profile(MIDP): http://java.sun.com/products/midp/ Ghi ch: y xem Microsoft Windows nh h iu hnh mc nh c s dng, nu ngi dng s dng h iu hnh khc th phi c mt s iu chnh ph hp vi h iu hnh . Ci t cc phn mm: Ci t JDK: File ci t JDK c dng file thc thi (.exe), chng ta ch cn chy v lm theo cc hng dn s ci t thnh cng b JDK (gi s th mc ci t l C:\jdk1.3.1) Set bin mi trng (Environment Variable): Vic set bin mi trng gip chng ta chy trnh bin dch t bt c v tr no, khng cn phi g tn v ng dn y ca trnh bin dch. Vo Control Panel, Chn System. Chn Environment (hoc Advanced/Environment) Tm mc PATH, thm th mc \bin ca th mc JDK (v d C:\JDK\bin) vo bin mi trng PATH (PATH=..;c:\jdk\bin;) Ci t CLDC v MIDP: File CLDC v MIDP c dng zip, ta gii nn vo chung mt th mc (v d C:\J2ME).

22

Java Mobile

Th mc J2ME c dng: C:\J2ME j2me_cldc (th mc cha CLDC) midp1.0.1.fcs (th mc cha MIDP) Sau cng ta set hai bin mi trng PATH v CLASSPATH nh sau: PATH=C:\jdk1.3.1\bin;C:\j2me\j2me_cldc\bin;C:\j2me\midp1.0.3fcs\bin; CLASSPATH=C:\j2me\midp1.0.3fcs\classes;. (du "." ch th mc hin hnh) Lc ny ta cng c xy dng ng dng J2ME. Chng ta c nhiu cng c h tr cho qu trnh bin dch v thc thi MIDlet nhng ban u chng ta s tm hiu cch s dng nhng cng c c bn nht v l cng c chun ca J2ME. Qu trnh bin dch v thc thi ng dng J2ME phi qua mt s thao tc bng dng lnh (command lines), chng ta gi s th mc cha m ngun l th mc C:\Midlets. Ta s xy dng mt ng dng J2ME n gin m phng qu trnh bin dch v thc thi, ng dng c tn Welcome v file source code c tn Welcome.java C:\Midlets\Welcome\Welcome.java Qu trnh bin dch v Pre-verify: bin dch ta chuyn n th mc cha ng dng (C:\Midlets\Welcome\) v gi lnh: javac -bootclasspath c:\j2me\midp1.0.3fcs\classes Welcome.java hoc javac bootclasspath %CLASSPATH% Welcome.java (CLASSPATH l bin mi trng c nh ngha trc thay cho c:\j2me\midp1.0.3.fcs\classes;.) Javac l chng trnh bin dch ca b JDK, thng s -bootclasspath ra lnh cho chng trnh dich ly cc file lp c s ti th mc c:\j2me\midp1.0.3fcs\classes (y l file lp c s ca MIDP). Nu khng c thng s ny, file lp c s ca JDK s c s dng, file lp c s ny khc vi file ca MIDP nn J2ME c th khng s dng c.

23

Java Mobile

Sau qu trnh ny file Welcome.class s c to ra v mc ch chung th mc vi file m ngun. Sau khi c file class ta cn thc hin vic pre-verify ( c cp phn trc ca lun vn). Ta thc thi dng lnh: preverify -classpath c:\j2me\midp1.0.3fcs\classes;. -d . Welcome hoc preverify classpath %CLASSPATH% d . Welcome Tng t, thng s classpath ch ra v ch cc file class ti th mc c:\j2me\midp1.0.3fcs\classes v th mc hin hnh (du .). Thng s -d ch ra th mc output kt qu l th mc hin hnh. Qu trnh Pre-verify ny l bt buc, nu khng thc hin cng on ny thit b di ng s t chi thc thi ng dng Thc thi ng dng MIDlet: Ta thc thi cu lnh: midp -classpath . Welcome Thng s class path ch ra th mc cha file cn thc thi, y l th mc hin hnh, tn ng dng l Welcome (file Welcome.class c pre verify). Trn y l qu trnh c bn nht bin dch v thc thi mt ng dng J2ME, s dng nhng tnh nng cao hn (to MIDlet Suite cha nhiu MIDlet, to file Jad, file Jar) xin vui lng xem file hng dn trong a CD nh km hoc xem ti liu ca cc b bin dch. tit kim thi gian, chng ta thng dng cc cng c tin ch nh Sun Wireless Toolkit, xin xem phn ph lc bit cch s dng.

24

Java Mobile

Chng 3: Cc vn c bn ca chng trnh MIDlet


3.1. Cu trc c bn:
Chng ta gi chung cc chng trnh J2ME l MIDlet. Cc chng trnh MIDlet ny u c k tha t lp MIDlet. Khng ging nh chng trnh trn my PC, cc chng trnh MIDlet khng cn hm main() thc thi. Trc ht chng ta s xem xt v vng i (lifecycle) ca cc ng dng MIDlet. Mt chng trnh MIDlet khi c np vo thit b c nhng trng thi sau: Paused: Mt chng trnh MIDlet s c a vo trng thi paused sau khi thc hin phng thc khi to (constructor) v trc khi c chng trnh qun l ng dng (application manager) trn thit b gi thc thi. Trong qu trnh hot ng, chng trnh MIDlet cng c th b a tr li trng thi paused bi thit b (khi cn tr li cuc gi n ) hoc bi chnh chng trnh MIDlet. Active: Chng trnh MIDlet ang thc thi. Destroyed: Chng trnh MIDlet gii phng tt c ti nguyn v c tt bi trnh qun l ng dng trn thit b.

3.2. Xy dng mt ng dng MIDlet:


Chng ta xy dng mt ng dng MIDlet bng cch k tha (extends) lp MIDlet. Lp ny thc cht l mt interface v chng ta phi khai bo ba hm sau y: startApp(), pauseApp() v destroyApp(). y l mt v d v mt chng trnh MIDlet n gin: public class Shell extends MIDlet {

25

Java Mobile

// phng thc khi to (constructor) khng bt buc phi c

public Shell(){ }
// c application manager gi trc khi thc thi MIDlet

public void startApp(){}


// c gi trc khi tm dng MIDlet

public void pauseApp(){ }


// c gi trc khi kt thc chng trnh

public void destroyApp(boolean unconditional){ } }

3.3. Lp MIDlet:
Nh cp, mi ng dng ca ta u k tha t lp MIDlet. Lp ny c khai bo nh sau: public abstract class MIDlet { protected abstract void startApp() throws MIDletStateChangeException; protected abstract void pauseApp(); protected abstract void destroyApp(boolean unconditional) throws MIDletStateChangeException; } Ba hm c nu trn l ba hm bt buc chng ta phi xy dng khi to ng dng MIDlet. Lp MIDlet c cha trong package javax.microedition.midlet Sau y l danh sch cc hm thng dng trong lp MIDlet: Phng thc: abstract void destroyApp (boolean unconditional) abstract void pauseApp() M t: Hm ny c gi khi c nhu cu tt MIDlet. y l ni gii phng cc ti nguyn dng. Hm ny c gi gii phng cc ti nguyn

26

Java Mobile

trc khi tm dng chng trnh. abstract void startApp() final void notifyDestroyed() c gi khi MIDlet sp c a vo trng thi thc thi (active state). Bo cho application manager bit chng trnh MIDlet gii phng ti nguyn v cn c tt. (sau khi gi destroyApp) final void notifyPause() Bo cho application manager bit chng trnh MIDlet gii phng ti nguyn v mun vo trng thi tm dng (sau khi gi pauseApp) final void resumeRequest() Bo cho application manager ta cn a MIDlet vo trng thi hot ng tr li. (Sau application manager s gi startApp). final String getAppProperty (String key) Ly cc thng s ca chng trnh (t file jad v file manifest). Bng 3.1 Lp MIDlet y chng ti xin m t hai qu trnh quan trng nht ca mt ng dng MIDlet l qu trnh khi np v qu trnh thot ng dng: Qu trnh np: User chn kch hot ng dng MIDlet Application manager khi to cc bin, gi phng thc khi to (constructor). ng dng MIDlet sau khi c np vo b nh s c a vo trng thi paused (nhng hm pauseApp() s khng c gi). Application manager gi hm startApp(). Thc cht hm startApp() s c gi mi khi ng dng c a vo trng thi thc thi (active); khi ta tm ngng ng dng v c nhu cu kch hot tr li hm ny cng c gi. Qu trnh thot: User chn thot chng trnh

27

Java Mobile

Hm destroyApp() c gi, hm ny phi bo m vic gii phng ti nguyn. Hm notifyDestroyed() c gi bo cho application manager ng dng gii phng ht ti nguyn v sn sng b tt.

3.4. Lp MIDletStateChangeException:
Khi tm hiu v package javax.microedition.midlet, cn mt lp quan trng chng ta phi ch n l lp MIDletStateChangeException. ng dng MIDlet c hai hm c kh nng to ra (throw) Exception ny l hm destroyApp() v hm startApp(). Nh chng ta bit, trc khi ng dng c a vo trng thi active th hm startApp() s c gi. Nu trong qu trnh gi hm ny dn n pht sinh li (thit b ht ti nguyn, ti nguyn cn dng ang b ng dng khc chim) th MIDletStateChangeException s c to ra. Trong qu trnh thot, hm destroyApp() cng c th pht sinh exception ny, v d nh khi chng ta thot m chng trnh ang nhn d liu ht sc quan trng t network ta c th pht sinh exception dng vic thot. Ta xem xt hm destroyApp(boolean condition): Tham s condition y c mt ngha kh th v, nu tham s ny l true d chng ta c pht sinh exception MIDletStateChangeException th ng dng vn thot; ch khi no tham s ny l false th exception MIDletStateChangeException mi c kh nng hy vic thot chng trnh.

3.5. Display
ng dng ca chng ta chc chn c nhu cu xut d liu ra mn hnh. Vic ny trong mt ng dng MIDlet do mt i tng thuc lp display m nhim. Lp ny nm trong package javax.microedition.lcdui, package ny cha hu nh tt c cc lp phc v cho vic pht trin giao din ca ng dng. Chng ta s xem xt mt s hm quan trng nht ca lp Display:

28

Java Mobile

Phng thc: static Display getDisplay(MIDlet m) Displayable getCurrent() void setCurrent (Alert alert, Displayable nextDisplayable) void setCurrent (Displayable nextDisplayable) boolean isColor() int numColors()

M t: Ly i tng Display ca MIDlet Ly i tng Displayable hin thi (s cp sau) To i tng alert (s cp sau)

Cho bit thit b c h tr mu hay khng? C bao nhiu mu c h tr? Bng 3.2 Lp Display

Mt MIDlet s c mt v ch mt i tng Display iu khin vic th hin d liu. i tng Display khng c phng thc khi to m c khi to trc tip t phng thc static ca lp. V d: Display display=Display.getDisplay(this); Tham s u vo l mt MIDlet, y chng ta gi hm t lp k tha t MIDlet nn c th truyn vo con tr this. Thc ra cng dng chnh ca Display l cho php hin th i tng no ln mn hnh hin thi. Cc i tng c th hin th ln mn hnh l cc i tng thuc lp Displayable (s c gii thiu sau), v d nh form, TextBox, Canvas,Screen Ta xt v d sau: public class Vidu extends MIDlet { Form mainForm; Vidu{ mainForm=new Form(.); }

29

Java Mobile

public void startApp() { Display display=Display.getDisplay(this); Display.setCurrent(mainFrom); . } . } Ban u ta khi to mt form th hin ln mn hnh, sau khi ng dng MIDlet c np vo b nh constructor c gi to form. Sau , phng thc startApp() c gi, trong phng thc ny ta chn Form mainForm th hin ln mn hnh bng lnh setCurrent. Khi ng dng b tm ngng (paused) v phc hi tr li (resume) th hm startApp() cng c gi v form li c th hin trn mn hnh. n y chng ta c th hnh dung c phn no tc dng ca i tng Display.

3.6. Lp Displayable:
Nh cp, mt ng dng MIDlet ch c mt i tng Display duy nht v i tng Display ny dng th hin cc i tng Displayable ln mn hnh. Nh tn ca lp Displayable cho chng ta thy, y l cc i tng c kh nng hin th thng tin ln mn hnh thit b. Lp Displayable bao gm 2 lp con l lp Screen v lp Canvas. C th chng c nh ngha nh sau: abstract public class Displayable; public abstract class Canvas extends Displayable; public abstract class Screen extends Displayable;

30

Java Mobile

Lp Screen cn c chia thnh nhng lp con nh hn nh: TextBox, List, Form v Alert. y l nhng lp giao din cp cao (v phn ln cc cng vic th hin ca cc lp ny c ci t sn). Cc i tng ca lp Canvas c gi l nhng i tng ha cp thp, cc lp ny cho php chng ta x l cc giao tc ha tng di, x l mu sc v ch yu dng trong qu trnh vit games. nhng phn sau chng ta s tm hiu k hn v cc lp giao din cp thp ln cp cao. * To mt i tng Displayable: Thng thng chng ta khng to trc tip mt i tng thuc lp Displayable m s dng cc lp con ca n. vit cc ng dng ha ta thng k tha t lp Canvas: public class GameScreen extends Canvas { draw images, shapes, text } Khi xy dng cc ng dng tin ch (t dng n cc chc nng ha) ta s dng cc lp ha cp cao nh Form, TextBox hoc k tha t cc lp ny. Cc hm chnh ca lp Displayable: Phng thc: void addCommand(Command cmd) void removeCommand (Command cmd) void setCommandListener (CommandListener l) M t: Thm mt i tng Command vo i tng Displayable Xa b mt i tng Command t i tng Displayable Thm CommandListener vo i tng Displayble

31

Java Mobile

boolean isShown()

Kim tra i tng Displayable c c th hin trn thit b hay khng? Bng 3.3 Lp Displayable

*Ghi ch: Cc i tng Command v CommandListener s c cp chi tit phn sau. Ti thi im ny chng ta c th hnh dung mt Command nh mt nt n iu khin trong ng dng ca chng ta, CommandListener c tc dng chuyn cc s kin khi ngi dng kch hot mt Command n lp x l ca ng dng. bt c cc s kin c chuyn ti khi ngi dng kch hot mt Command, ng dng ca chng ta phi ci t hm commandAction. V d nh sau: public void commandAction(Command c, Displayable s) { if (c == cmExit) { destroyApp(true); notifyDestroyed(); } }

3.7. Qun l cc s kin (event)


Ngy nay, vic x l s kin l mt trong nhng vn c bn nht ca mt chng trnh. C th ni, trong th gii phn mm ngy nay khng mt chng trnh no li khng c kh nng tng tc vi ngi dng, do vic qun l cc s kin pht sinh l mt vn m bt c phn mm no cng phi thc hin. Qu trnh x l cc s kin pht sinh bao gm 3 qu trnh c bn: Phn cng (thit b di ng) phi cm nhn c khi c mt s kin pht sinh: ngi dng n mt phm, mt cable c cm vo hay rt ra.

32

Java Mobile

Phn mm trn thit b (h iu hnh) phi nhn bit c c s kin pht sinh H iu hnh chuyn thng tin v s kin cho ng dng, bt u t y l cng vic ca nhng lp trnh vin J2ME. Ty theo cc thng tin v s kin m chng ta phi a ra cc gii php thch hp Trong phn ny chng ta s ch nghin cu v cc s kin c pht sinh nhng ng dng s dng cc chc nng ha mc cao (Form, TextBox), cn cc s kin pht sinh nhng ng dng s dng cc th vin ha mc thp nh cc games s c cp sau. Thc cht nhn c thng bo t h iu hnh v cc s kin pht sinh lp ng dng chnh ca chng ta phi ci t (implement) cc listener. Trong J2ME h tr sn cho chng ta 2 listener l CommandListener v ItemStateListener. Lp CommandListener c hm commandListener() v tng ng lp ItemStateListener c hm itemStateChange(), y l 2 hm chng ta cn ci t nhn bit cc s kin xy ra. Trc khi i su vo x l cc s kin chng ta s tm hiu 2 tc nhn chnh pht sinh mt s kin l Command v Item. 3.7.1. Command & CommandListener Ta nh ngha Command l mt i tng gi thng tin v mt s kin (Event). Ni mt cch n gin nht th command nh mt nt n (button) trn ng dng di ng, khi ta chn nt ny th s pht sinh mt s kin tng ng.

33

Java Mobile

Hnh 3.1 Command Exit Trong v d trn ta thy Command Exit tng ng vi mt nt n trn in thoi. Vic xem mt Command tng ng vi mt nt n trn thit b l mt quan nim nhm n gin ha vn nhng khng hon ton chnh xc. Nu chng ta xem xt cc hn ch v kch thc v mn hnh v s lng nt n c trn thit b th vn s tr nn phc tp hn, c nhng form s lng command c th nhiu hn s nt n chc nng trn thit b, lc ny cc command c t chc theo dng menu. Trc tin, ta s tm hiu cc cng vic phi lm thm mt command vo ng dng: To mt command lu gi thng tin v event Thm command ny vo Form, TextBox hay Alert (cc i tng displayable) Thm mt listener vo cc Form hay TextBox trn. Khi pht hin mt event c kch hot, b listener s gi hm commandListener() v truyn cc thng tin v event lm thng s cho hm. Sau y l mt on code v d: public class TestCommand extends MIDlet implements CommandListener {

34

Java Mobile

private Form fmMain; // To mt form private Command cmExit; // To mt command thot khi ng dng ... fmMain = new Form("Core J2ME"); // Khi to form cmExit = new Command("Exit", Command.EXIT, 1); // Khi to command ... fmMain.addCommand(cmExit); // Thm command vo form fmMain.setCommandListener(this); // Thm b listener cho form ... //hm dng bt cc s kin public void commandAction(Command c, Displayable s) { if (c == cmExit)//nu l command exit, thot chng trnh { destroyApp(true); notifyDestroyed(); } } } Qua v d trn ta thy vic to mt command v x l n tng i n gin. im quan trng cn ch l lp ng dng ca ta phi ci t mt b listener (trong v d trn ta implements CommandListener) v phi cung cp hm commandListener x l cc events. Khi chng ta to mt Command c ba thng s cn cung cp:

35

Java Mobile

Label: on vn bn c xem nh nhn ca command. Nh trong hnh 3.1, Exit l nhn ca command. Nh trong hnh 3.2, ta thy y cng l label ca command nhng c th hin dng khc: dng menu.

Hnh 3.2 Command Label Type: Tht thun tin nu ta c th nh x mt command vi mt nt trn thit b (ta gi l soft-button). Gi s ta c mt command tn help v nh x c vi HELP Button trn thit b th tht trc quan v d dng cho ngi dng. Thng s Type gip chng ta lm chuyn ny: Ta chn Command.HELP. Nu thit b khng c nt help, thng s ny khng c ngha v command c i x nh cc command thng thng. Tuy nhin, ta cn lu khi ta tt type l Command.HELP th khng c ngha khi ta chn command ny cc hng dn s c pht sinh m ta cn phi lm vic ny trong hm commandAction(). Thng s type ch gip vic nh x cc nt soft-button c d dng.

Hnh 3.3 nh x soft-button

36

Java Mobile

Cc type c h tr: Gi tr BACK CANCEL EXIT HELP ITEM M t Dng i ngc li mn hnh trc . Dng hy cng vic ang thc hin Dng thot chng trnh Cung cp thng tin tr gip Dng nh x mt Command vi mt item trn mn hnh. Gi s khi ta dng giao din List, khi chn mt item ta c th gn item ny vi mt command pht sinh mt s kin no . OK SCREEN Xc nhn mt yu cu no hoc thot khi mn hnh thng bo. Thng thng thit b khng c cc soft button tng ng vi cc command dng ny. Vic th hin cc command s ty vo tng thit b (s c cc v d) STOP Dng mt cng vic ang thc hin. Bng 3.4 Cc Command Type Nh cp, cc type ch c ngha khi thit b c mt nt tng ng dnh ring cho type ny (nh nt help ca thit b hnh 3.3). Priority: u tin, dng sp xp cc command t trn xung di hay tri sang phi khi c th hin chung dng menu. Hnh 3.2 th hin command Upload c u tin cao hn command Download. Gi tr ny cng cao th u tin cng thp. Sau y l cc hm chnh ca lp Command v CommandListener (hai lp ny nm trong package javax.microedition.lcdui). Lp javax.microedition.lcdui.Command C php Command (String label, int cmdType, int priority) int getCommandType() bn trn Cho bit Type ca Command ngha Hm khi to, cc thng s c trnh by

37

Java Mobile

int getLabel() int getPriority() void commandAction(Command c, Displayable d)

Cho bit Label ca Command Cho bit u tin Lp javax.microedition.lcdui.CommandListener c gi khi command c nm trn i tng Displayable d pht sinh mt s kin Bng 3.5 Command v CommandListener

3.7.2. Item v ItemStateListener S kin (event) khng ch c pht sinh thng qua kch hot commands m cn c th c pht sinh thng qua cc items. Mt item l mt b phn c th gn km ln trn cc form. ChoiceGroup, DateField, Gauge v TextField l cc dng khc nhau ca Item v mi dng u c th pht sinh cc s kin (chng ta s tm hiu v cc items ny trong phn Ha Cp Cao). Items ch c th c s dng nh mt thnh phn ca form, khc vi Commands c th c s dng trong Form, TextBox, List v Canvas. Khi chng ta thm mt Item vo Form, x l c cc s kin pht sinh ta phi ci t mt Listener ( y l ItemStateListener). Khi c mt thay i trn Item (v d nh ta chn mt mc trong ChoiceGroup hay thay i d liu ca mt DateField) th i tng listener s c thng bo c mt s kin pht sinh cng cc thng tin v s kin ny. S kin ny s kch hot hm itemStateChanged() c chng ta ci t. Hin ti MIDP h tr cc loi Items sau: ChoiceGroup, DateField, Gauge, ImageItem, StringItem v TextField. y c mt ngoi l l hai loi StringItem v ImageItem khng h tr pht sinh s kin mc d chng l lp con ca lp Item. Chng ta ci t mt listener trong lp Form, khi mt Item pht sinh s kch hot hm itemStateChanged(), tuy nhin khng phi khi chng ta thay i gi tr nhiu items cng lc th itemStateChanged() s c gi by nhiu ln. y c mt lut c ra:

38

Java Mobile

Nu mt Item b thay i, hm itemStateChanged() phi c gi i vi Item ny trc khi nhng thay i trn nhng Item sau c nhn bit. Nu chnh bn thn MIDlet thay i gi tr mt Item (gi s chng ta dng m lnh thay i ch khng phi do ngi dng), hm itemStateChanged() khng c gi. Nu thit b nhn bit c ngi dng chuyn t Item ny sang Item khc (chuyn focus) th hm itemStateChanged() phi c gi trc khi chuyn sang Item k tip. Sau y l cc hm quan trng khi s dng Item: Lp javax.microedition.lcdui.Item C php String getLabel() void setLabel(String label) void itemStateChanged(Item item) Ly nhn ca Item t nhn cho label c gi khi gi tr item thay i ngha

Lp javax.microedition.lcdui.ItemStateListener Bng 3.6 Item v ItemStateListener

39

Java Mobile

Chng 4: Giao din ha cp cao


MIDP h tr thit k giao din di hai cp : Giao din cp cao (high-level interfaces): ch yu dng cho cc chng trnh ng dng. cp ny, MIDP cung cp sn cc thnh phn giao din thng dng (nh textbox, choicegroup, alert...) v h tr vic hin th cc thnh phn giao din ny ln mn hnh thit b. Ngi vit chng trnh ch cn gi cc phng thc hin th c cung cp m khng cn quan tm n cc phng thc ho c s dng bn di. Giao din cp thp (low-level interfaces): ch yu s dng trong cc chng trnh games. Cc lp ho cp ny cung cp cc phng thc v trc tip cc i tng ho (nh im, ng thng, ng trn...)ln mn hnh v bt s kin phm bm. Tt c cc lp h tr ho c ng gi trong package javax.microedition.cldui. Trong , lp Screen v cc lp k tha t n l cc thnh phn giao din cp cao; lp Canvas thuc phn giao din cp thp.

Hnh 4.1 S cc lp giao din ho

40

Java Mobile

public class Display public abstract class Displayable public abstract class Screen extends Displayable public abstract class TextBox extends Screen public abstract class List extends Screen public abstract class Item public class ChoiceGroup extends Item implements Choice public class DateField extends Item public class TextField extends Item public class Gauge extends Item public class ImageItem extends Item public class StringItem extends Item pubilc abstract class Canvas extends Displayable public class Command public class Ticker public class Graphics public interface Choice

41

Java Mobile

4.1. Screen:
Lp Screen khng c s dng trc tip nh mt i tng trong chng trnh m cc lp con ca n (Textbox, List, Alert, Form) mi l cc thnh phn hin th trn mn hnh. Ti mt thi im ch c duy nht mt i tng thuc mt trong cc lp ny hin th trn mn hnh. y l im khc bit khi so snh vi cc lp con ca lp Item sau ny. Lp Screen cng nh ngha sn mt i tng Ticker kt buc vi n. i tng ny th hin mt chui k t t ng cun lin tc t phi sang tri mn hnh. Cc phng thc v chc nng tng ng ca lp Screen: Lp Screen: javax.microedition.lcdui.Screen Phng thc String getTitle () void setTitle (String s) Ticker getTicker () void setTicker (Ticker ticker) Chc nng Ly tiu ca Screen Gn tiu cho Screen Ly bin Ticker ca Screen Gn bin Ticker cho Screen Bng 4.1 Lp Screen

42

Java Mobile

4.2. Form:
Form l lp thng dng nht trong cc i tng Displayable. Nu khi s dng Texbox, List, Alert, ta ch c th hin th mt i tng duy nht ti mt thi im th khi s dng Form, chng ta c th hin th nhiu i tng c chc nng tng t ti cng mt thi im. lm c iu ny, ta ch cn to mt i tng thuc lp Form v gn vo i tng ny mt hay nhiu i tng thuc lp con ca lp Item (TextField, DateField, ChoiceGroup, Gauge, ImageItem, StringItem). Lp Form cng h tr sn chc nng cun mn hnh nu thit b khng hin th ht tt c cc Item trong mt mn hnh. Lp Form h tr sn cc phng thc thm, xo, sa cc thnh phn trong Form mt cch d dng. Khi gn mt i tng thnh phn - mt i tng thuc lp con ca Item - vo Form, ta s nhn c mt gi tr tr v tng ng vi ch mc ca thnh phn trong Form. Vi ch mc ny, ta c th tham chiu n thnh phn ny khi cn tra cu hay thay i thng tin i tng. Cc phng thc v chc nng tng ng ca lp Form: Lp Form: javax.microedition.lcdui.Form Phng thc Form (String title) Form (String title, Item[] items) int append (Image image) int append (Item item) int append (String string) void delete (int itemNum) void insert (int itemNum, Item item) Item getItem (int ItemNum) void set (int itemNum, Item item) Chc nng Khi to mt Form Khi to mt Form v thm cc Item vo Form Thm mt bin Image vo Form Thm mt bin Item vo Form Thm mt bin String vo Form Xo mt Item khi bit ch mc ca n Chn mt Item vo v tr ch mc cho trc Ly mt bin Item khi bit ch mc ca n Thay bin Item ch mc cho trc bng bin Item mi

43

Java Mobile

void setItemStateListener( ItemStateListener iListener) int size ()

Thm bin Listener vo Form Ly s Item trong Form Bng 4.2 Lp Form

44

Java Mobile

4.3. Item:
Mt Item l mt thnh phn c th thm vo Form. Cc lp con ca Item gm: ChoiceGroup, DateField, TextField, Gauge, ImageItem v StringItem. Item thng c dng chung vi lp ItemStateListener. Khi mun bt s kin ca 1 Item, ta ch cn kt buc Item vi 1 bin listener thuc lp ItemStateListener. Bin listener ny s lng nghe cc s kin v t gi phng thc itemStateChanged() khi Item kt buc vi n c s thay i. Trong phng thc ny, ta c th vit x l cho cc s kin cn bt ca Item. Vd: to 1 DateField cho Form v gn bin listener bt s kin: private Form fmMain; private DateField fdToday; ... fmMain = new Form (Core J2ME); dfToday = new DateField (Today: , DateField.DATE); ... public void itemStateChanged(Item item) { if (item == dfToday)
//x l

} Cc phng thc v chc nng tng ng ca lp Item: Lp Item: javax.microedition.lcdui.Item Phng thc String getLabel () void setLabel (String label) Chc nng Ly nhn ca Item Gn nhn cho Item Bng 4.3 Lp Item

45

Java Mobile

4.3.1. DateField: Dng hin th mt i tng ngy gi (java.util.Date) v cho php ngi dng thay i gi tr ngy gi ny bng cc phm bm ca thit b di ng. Giao din DateField d dng, khi to mi mt i tng DateField, ta c th la chn cho php ngi dng ch thay i gi tr ngy thng, gi pht hay c hai :

Hnh 4.2 Giao din i tng DateField Cc phng thc v chc nng tng ng ca lp DateField: Lp DateField: javax.microedition.lcdui.Date Phng thc DateField (String label, int mode) DateField (String label, int TimeZone timeZone) Date getDate () void setDate (Date date) int getInputMode () void setInputMode () Chc nng Khi to mt i tng DateField mode, Khi to mt i tng DateField vi mi gi cho trc Ly gi tr ngy thng ca i tng Gn gi tr ngy thng ca i tng Ly thng tin kiu nhp liu Gn kiu nhp liu Bng 4.4 Lp DateField C th chn 1 trong 3 kiu nhp liu cho i tng DateField: DATE: ch cho php ngi dng thay i gi tr ngy thng TIME: ch cho php ngi dng thay i gi tr gi pht

46

Java Mobile

DATE_TIME: cho php ngi dng thay i gi tr c ngy thng ln gi pht VD:
//to 1 bin DateField cho php ngi dng nhp ngy thng

DateField dfDate = new DateField(Ngay thang,DateField.DATE);


//gn ngy thng hin thi cho bin dfDate

dfDate.setDate(new Date());
//cho php ngi dng thay i thng tin ngy thng v gi pht

dfDate.setInputMode(DateField.DATE_TIME);
.... //ly thng tin ngy thng ca bin dfDate (thng ly gi tr mi m ngi dng va nhp )

Date dNewDate=new Date; dNewDate=dfDate.getDate();

47

Java Mobile

4.3.2. Gauge: Gauge dng biu din tin hon thnh mt vic no (download, upload...) hoc cp t thp n cao (ca m lng, kh...). Gauge c trng bi hai gi tr: gi tr hin hnh v gi tr cc i cho php. Gi tr hin hnh ny lun c duy tr gia 0 v gi tr cc i. Gauge gm hai dng: Ch tng tc (Interactive mode): Trong ch ny, i tng Gauge s c v dng cc thanh song song c chiu cao tng dn biu th cc cp t thp n cao. Ngi s dng c th iu chnh gi tr hin thi ca Gauge bng cc phm bm. VD: iu chnh m lng cao thp.

Hnh 4.3 Giao din i tng Gauge ch tng tc Ch khng tng tc (Non-interactive mode): i tng c biu din dng cc thanh song song c chiu cao bng nhau, ngi dng khng c php thay i gi tr ca n. Ngi lp trnh s lp trnh cho i tng ny t ng cp nht gi tr theo thi gian.

48

Java Mobile

Hnh 4.4 Giao din i tng Gauge ch khng tng tc Cc phng thc v chc nng tng ng ca lp Gauge: Lp Gauge: javax.microedition.lcdui.Gauge Phng thc int maxValue, int initValue) int getValue () void setValue (int value) int getMaxValue () void setMaxValue (int maxValue) boolean isInteractive () Ly gi tr hin thi ca Gauge Gn gi tr cho i tng Gauge Ly gi tr cc i cho php ca Gauge Gn gi tr cc i cho php cho Gauge Kim tra Gauge c thuc ch tng tc khng Bng 4.5 Lp Gauge VD:
//to 1 bin Gauge cho php ngi dng iu chnh m thanh (ch tng tc)

Chc nng

Gauge (String label, boolean interactive, Khi to mt i tng Gauge

Gauge gVolume= new Gauge (Volume, true, 6, 2);


//gn Gauge vo Form

fmMain.append(gVolume); fmMain.setCommandListener(this);

49

Java Mobile

//to 1 bin Gauge biu din tin trnh Download (ch khng tng tc):

Gauge gDownload = new Gauge(Download Progress, false, 20,1);


//gn Gauge vo Form

fmMain.append(gDownload); fmMain.setCommandListener(this);
//cp nht gi tr lin tc cho Gauge bng cch s dng 1 bin timer //khong cch mi ln cp nht l 1000 mili giy

Timer tTimer = new Timer(); DTTask ttTimerTask = new DTTask(); //class DTTask extends TimerTask tTimer.scheduleAtFixedRate (ttTimerTask, 0, 1000);
//lp DDTask c vit bn trong MIDlet

private class DTTask extends TimerTask{ public final void run () {


//nu gi tr hin ti ca gDownload < gi tr cc i th tip tc tng, khng th dng li

if (gDownload.getValue() < gDownload.getMaxValue()) gDownload.setValue(gDownload.getValue()+1); else cancel(); } }


//xo b nh thi

50

Java Mobile

4.3.3. String Item: i tng StringItem dng hin th 1 on vn bn ln mn hnh. Ngi dng ch c php xem m khng c thay i ni dung on vn bn ny. Cc phng thc v chc nng tng ng ca lp StringItem: Lp StringItem: javax.microedition.lcdui.StringItem Phng thc StringItem (String label, String text) String getText () void setText (String text) Chc nng Khi to mt i tng StringItem Ly ni dung on vn bn Gn ni dung on vn bn cn hin th Bng 4.6 Lp StringItem ly gi tr nhn (label) hay thay i ni dung nhn c th dng cc phng thc getLabel(), setLabel(String label) ca lp Item. VD:
//to mt i tng StringItem

StringItem siText = new StringItem(User: , John);


//gn vo form

fmMain.append(siText); ...
//sau mun hin th 1 ni dung khc, ch cn thay i label v text ca i tng, //khng cn to 1 i tng StringItem mi.

siText.setLabel(UserID: ); siText.setText(12345);

51

Java Mobile

Hnh 4.5 Giao din i tng StringItem i tng lp String cng c th append() vo Form hin th 1 on vn bn nhng khng c hai phn nhn v ni dung ring bit nh StringItem. Tu yu cu ca chng trnh m ngi lp trnh c th la chn i tng ph hp s dng.

52

Java Mobile

4.3.4. TextField: Lp TextField c s dng khi ng dng cn ngi dng nhp liu. Khng ch nhp d liu text m cn c th nhp s, password, a ch... h tr cho ngi lp trnh, MIDP nh ngha sn mt s cc rng buc (constraints) i tng t ng kim tra tnh hp l ca d liu nhp vo. Cc rng buc ny l cc hng lp ca lp TextField gm: o EMAILADDR: ngi dng ch c php nhp d liu ng chun ca mt a ch email. o NUMERIC: ch c php nhp s (c th l m hay dng), nu mun gii hn cc gi tr c php nhp th ng dng phi t x l. o PASSWORD: d liu nhp vo s c hin th ln mn hnh vi dng cc du *. o o PHONENUMBER: d liu nhp phi ng chun ca s in thoi. URL: d liu nhp phi c dng 1 URL

v c th c s dng khi kim tra rng buc cho i tng TextBox. Cc rng buc ny c biu din vi dng mt s nguyn kiu int, gi tr c cp trong bng sau: Tn rng buc ANY EMAILADDR NUMERIC PHONENUMBER URL PASSWORD CONSTRAINT_MASK 0 1 2 3 4 65536 (0x10000) 65635 (0xFFFF) Gi tr Biu din nh phn 00000000 00000000 00000000 00000000 00000000 00000001 00000000 00000000 00000010 00000000 00000000 00000011 00000000 00000000 00000100 00000001 00000000 00000000 00000000 11111111 11111111

Bng 4.7 Cc Rng Buc ca TextField Cc gi tr ca rng buc l cc s nguyn lin tc nn cc rng buc ny phi s dng c lp, khng c kt hp vi nhau v c th gy sai st.

53

Java Mobile

Vd:

TextField.EMAILADDR | TextField.NUMERIC = OR = 00000000 00000000 00000001 00000000 00000000 00000010 ----------------------------------------00000000 00000000 00000011 = TextField.PHONENUMBER

Ngoi tr PASSWORD c th kt hp vi mt trong cc rng buc cn li bng ton t OR m khng gy nhm ln cho chng trnh. Vd: TextField.ANY | TextField.PASSWORD = OR = 00000000 00000000 00000000 00000001 00000000 00000000 -----------------------------------------00000001 00000000 00000000

MIDP cng cung cp sn gi tr CONSTRAINT_MASK c th d dng kim tra li rng buc no c s dng bng cch dng ton t AND gia gi tr rng buc ca i tng TextField v CONSTRAINT_MASK Vd: tfPassword.getConstraints() TextField.CONSTRAINT_MASK AND c p rng buc no. 00000001 00000000 00000000 00000000 11111111 11111111 -----------------------------------------00000000 00000000 00000000 Sau ly gi tr ny so snh vi cc rng buc bit i tng TextField

54

Java Mobile

Cc phng thc v chc nng tng ng ca lp TextField: Lp TextField: javax.microedition.lcdui.TextField Phng thc int maxSize, int constraints) void delete (int offset, int length) void insert (String src, int pos) int length, int position) offset, int length) void setString (String text) int getChars (char[] data) String getString () int getConstraints () int getMaxsize () void setMaxsize (int maxSize) int getCaretPosition () int size () Chc nng s k t ti a ngi dng c th nhp v constraints l cc rng buc khi nhp Xa length k t t v tr offset Chn chui src vo TextField t v tr pos chui data vo TextField t v tr position t v tr offset trong chui data Gn gi tr text cho TextField ly gi tr TextField ra mt mng k t ly gi tr TextField Ly gi tr rng buc ca TextField Ly kch thc ti a ca TextField Gn kch thc ti a ca TextField Ly v tr con tr hin thi Ly kch thc tht ca TextField (s k t hin ti ca TextField) Bng 4.8 Lp TextField VD:
//to cc i tng TextField nhp a ch mail, s in thoi

TextField (String label, String text, Khi to i tng TextField vi maxSize l

void insert (char[] data, int offset, Chn cc length k t t v tr offset trong void setChars (char[] data, int Gn gi tr cho TextField bng length k t

void setConstraints (int constraints) Gn gi tr rng buc cho TextField

TextField tfAddr = new TextField (Addr:,,20,TextField.EMAILADDR); TextField


//gn vo Form

tfPhone

new

TextField

(Phone:,

10,

TextField.PHONENUMBER);

55

Java Mobile

fmMain.append (tfAddr); fmMain.append (tfPhone);

Hnh 4.6 Giao din i tng TextField

56

Java Mobile

4.3.5. ChoiceGroup: Lp ChoiceGroup c s dng biu din mt danh sch cc kh nng cho ngi dng la chn. ChoiceGroup k tha t interface Choice, gm hai dng: Cho php chn nhiu kh nng (Multiple ): Th hin danh sch cc kh nng ln mn hnh dng checkbox v cho php ngi nh du check ln cc la chn. Ch c php chn mt kh nng (Exclusive ): Th hin danh sch cc kh nng ln mn hnh cng cc radio button v ch cho php ngi dng chn duy nht mt kh nng. Cc phng thc v chc nng tng ng ca lp ChoiceGroup: Lp ChoiceGroup: javax.microedition.lcdui.ChoiceGroup Phng thc ChoiceGroup (String label, int choiceType) Khi to i l choiceType Chc nng tng ChoiceGroup la vi chn loi

Choice.EXCLUSIVE hay Choice.MULTIPLE Vi Exclusive ChoiceGroup phn t u tin t ng c gn l phn t c chn. ChoiceGroup (String label, int choiceType, String[] strElements, Image[] iElements) int append (String strPart, Image iPart) int delete (int position) void insert (int position, String strPart, Image iPart) void set (int position, String strPart, Image iPart) Gn gi tr v biu tng cho phn t v tr position Khi to i tng ChoiceGroup, cho trc cc kh nng la chn v biu tng ca tng kh nng Thm mt phn t (1 kh nng) vo ChoiceGroup (vo cui danh sch) Xo phn t v tr position ca ChoiceGroup Chn mt phn t vo v tr position

57

Java Mobile

String getString (int position) Image getImage (int position) int getSelectedIndex () void setSelectedIndex (int position, boolean selected)

Ly gi tr ca phn t v tr position Ly biu tng ca phn t v tr position Ly v tr ca phn t c chn MULTIPLE: gn gi tr c chn hay khng (selected) cho phn t v tr position EXCLUSIVE: gn gi tr cho phn t v tr position l c chn (khng ph thuc gi tr selected)

int getSelectedFlags (boolean[] selectedArr) void setSelectedFlags (boolean[] selectedArr) boolean isSelected (int position) int size ()

Lu thng tin kt qu la chn vo mng Gn kt qu la chn cho i tng ChoiceGroup Kim tra phn t v tr position c c chn khng Ly s phn t ca ChoiceGroup

Bng 4.9 Lp ChoiceGroup *Bt s kin cho i tng ChoiceGroup: C th dng hai cch bt s kin cho i tng ChoiceGroup: ItemStateListener: khi Form cha i tng ChoiceGroup gi phng thc setItemStateListener() th khi ngi dng chn vo bt c kh nng no, phng thc itemStateChanged() s c gi thc hin. Cch ny nn dng cho ChoiceGroup dng ch cho php chn mt kh nng hoc mt s trng hp c bit CommandListener: Khi gn i tng ChoiceGroup vo Form th to thm mt Command (tn l OK chng hn). Khi ngi dng chn xong th nhn chn Command ny v chng trnh s gi phng thc commandAction() x l. Cch ny c th s dng bt s kin cho c hai loi ChoiceGroup cng nh cc i tng Item khc. Vd:

58

Java Mobile

//To mt i tng ChoiceGroup ch cho php chn mt kh nng:

ChoiceGroup

cgExclusive

new

ChoiceGroup(

Email

Options,

Choice.EXCLUSIVE);
//ln lt thm cc phn t cho i tng, khng km biu tng

cgExclusive.append(Read, null); cgExclusive.append(Forward, null); int iReplyIndex = cgExclusive.append(Reply, null); cgExclusive.append(Delete, null);
//gn Reply l phn t c chn

cgExclusive.setSelectedIndex(iReplyIndex, true);
//gn vo Form

fmMain.append(cgExclusive); fmMain.setItemStateListener(this); ....


//bt s kin

public void itemStateChanged(Item item) { if (item==cgExclusive) { ... } }

Hnh 4.7 Giao din i tng ChoiceGroup ch mt la chn

59

Java Mobile

//to 1 i tng ChoiceGroup cho php chn nhiu kh nng:

ChoiceGroup

cgMultiple

new

ChoiceGroup(

Multiple

Choice,

Choice.MULTIPLE);
//ln lt thm cc phn t cho i tng, khng km biu tng

cgMultiple.append(Auto Indent, null); cgMultiple.append(Replace Tabs, null); cgMultiple.append(Wrap Text, null);


//to 1 command OK bt s kin

Command cmOK = new Command (OK, Command.Screen, 1);


//gn vo Form

int iChoiceGroupIndex = fmMain.append(cgMultiple); fmMain.addCommand(cmOK); fmMain.setCommandListener(this); ....


//x l s kin

public void commandAction (Command c, Displayable d) { if (c==cmOK) { ... } }

Hnh 4.8 Giao din i tng ChoiceGroup ch nhiu la chn

60

Java Mobile

4.3.6. Image v ImageItem: 4.3.6.1. Image:

Cha d liu nh ho, gm hai dng : C nh (Immutable): thng c np t resource ca ng dng, t file hay chuyn t dng Image c th thay i (Mutable) sang. Dng hnh nh ny ch yu c dng lm biu tng cho cc thnh phn ho khc nh ChoiceGroup, Form, List, Alert....Mt khi to i tng kiu Immutable Image th khng th thay i hnh nh c na. C th thay i (Mutable): c th thay i mt cch d dng. Khi to i tng kiu Mutable Image, mt vng nh trng s c cp pht da trn kch thc khi khai bo. Khi mun hin th Image dng ny ln mn hnh phi gi phng thc paint() ca lp Canvas s c cp trong phn ho cp thp. Cc phng thc v chc nng tng ng ca lp Image: Lp Image: javax.microedition.lcdui.Image Phng thc name) source) data, int offset, int length) resource i tng Image source khc d liu (ly length bytes t v tr offset ca mng byte data) static Image createImage (int to mt i tng Mutable Image, cho trc width, int height) Graphics getGraphics () kch thc di rng ca nh Ly i tng Graphics tng ng ca Mutable Image Chc nng static Image createImage (String To mt i tng Immutable Image t static Image createImage (Image To mt i tng Immutable Image t mt static Image createImage (byte[] To mt i tng Immutable Image t mng

61

Java Mobile

int getHeight () int getWidth () boolean isMutable ()

Ly chiu cao ca i tng Image Ly chiu rng ca i tng Image kim tra i tng c l Mutable Image khng Bng 4.10 Lp Image

4.3.6.2.

ImageItem:

Lp ImageItem cung cp cc phng thc iu khin v sp xp cc i tng Image c gn trong Form. Lp ImageItem cung cp sn cc nh dng v tr sn cho hnh nh, bao gm: nh dng LAYOUT_DEFAULT LAYOUT_LEFT LAYOUT_RIGHT LAYOUT_CENTER Gi tr nh phn 00000000 00000000 00000000 00000001 00000000 00000010 00000000 00000011 ngha dng nh dng mc nh ca thit b canh tri canh phi canh gia xung hng trc khi v Image LAYOUT_NEWLINE_AFTER 00000010 00000000 xung hng sau khi v Image. Bng 4.11 nh dng ImageItem Cc nh dng trn c th dng kt hp vi nhau trong mt i tng ImageItem bng php ton OR . Vd: ImageItem.LAYOUT_RIGHT ImageItem.LAYOUT_NEWLINE_AFTER logical OR 00000000 00000010 00000010 00000000 00000010 00000010 --------------------------------------

LAYOUT_NEWLINE_BEFORE 00000001 00000000

62

Java Mobile

Cc phng thc v chc nng tng ng ca lp ImageItem: Lp ImageItem: javax.microedition.lcdui.ImageItem Phng thc img, int layout, String altText) Chc nng Image img, vi nh dng layout, v chui thay th altText(chui ny dng thay th cho image khi khng th hin c ln mn hnh thit b) Image getImage () void setImage (Image img) int getLayout() void setLayout (int layout) String getAltText () void setAltText () Vd:
//to Immutable Image t File v hin th trong Form

ImageItem (String label, Image To mt i tng ImageItem t i tng

Ly i tng Image ca ImageItem Gn i tng Image cho ImageItem Ly gi tr nh dng ca ImageItem Gn gi tr nh dng cho ImageItem Ly gi tr chui thay th Gn gi tr chui thay th Bng 4.12 Lp ImageItem

Image img = Image.createImage(image.png);


//.png (Portable NetWork Graphics) l nh dng file nh trong thit b di ng

ImageItem

imageItem

new

ImageItem

(null,

img,

ImageItem.LAYOUT_CENTERImageItem.LAYOUT_NEWLINE_BEFORE,null); fmMain.append(imageItem);
//to i tng ChoiceGroup c cc biu tng tng ng cho cc kh nng la chn

Image image[] = { Image.createImage(/up.png), Image.createImage(/down.png), Image.createImage(/help.png)} ; String options[] = {Upload, Download, Help};
//To i tng ChoiceGroup dng mng

ChoiceGroup cgImage = new ChoiceGroup (Select option, Choice.EXCLUSIVE, options, images);

63

Java Mobile

4.4. List:
List dng hin th cc danh sch cc kh nng cho ngi dng la chn. List gm 3 dng: Multiple: cho php ngi dng la chn nhiu kh nng, tng t Multiple ChoiceGroup. Exclusive: cho php ngi dng la chn duy nht mt kh nng, tng t Exclusive ChoiceGroup. Implicit: ch hin th danh sch cc kh nng la chn dng menu. * Bt s kin cho cc i tng List: bt s kin cho i tng List, phi gn i tng trng thi lng nghe, ngha l s dng phng thc setCommandListener() cho i tng List ny. Sau bt s kin v x l s kin trong phng thc commandAction(). Exclusive v multiple List khng t ng gi s kin. Do , ta phi gn mt command (vd: command Save)vo i tng List ly trng thi ca i tng sau khi ngi dng la chn. Khi ngi dng chn command Save tc ngi dng chn xong cc kh nng, ta s bt s kin ny v x l s kin trong phng thc commandAction(). Implicit List gi s kin mi khi ngi dng la chn mt phn t trong List. Khi , nu gn listener cho i tng th s kin pht sinh s gi phng thc commandAction(). * So snh gia lp List v lp ChoiceGroup: Ging nhau: Khc nhau: C hai u k tha t interface Choice C hai u cho php to i tng h tr mt la chn duy nht(radio button ) hoc nhiu la chn (checkbox). C th thm cc i tng Command khc hin th cng lc trn mn hnh h tr vic bt s kin.

64

Java Mobile

ChoiceGroup Hin th trn ChoiceGroup l 1 phn ca mn hnh Form. Ngha l c th c cc thnh phn giao din khc c hin th ng thi vi ChoiceGroup Phn loi ChoiceGroup gm 2 dng: MULTIPLE (check box), EXCLUSIVE (radio button) Bt s kin 2cch: ItemStateListener: gi phng thc itemStateChanged()) khi ngi dng la chn mt phn t bt k. CommandListener: gn mt Command lng nghe v gi phng thc commandAction() khi c s kin pht sinh Bng 4.13 So snh List v ChoiceGroup Cc phng thc v chc nng tng ng ca lp List: Lp List: javax.microedition.lcdui.List Phng thc List (String title, int listType)

List List l thc th duy nht hin th trn mn hnh.

List gm 3 dng: MULTIPLE (check box), EXCLUSIVE (radio button) v IMPLICIT (menu) Ch c 1 cch duy nht l dng CommandListener. List gi commandAction() bt s kin (Implicit List t gi hm ny khi ngi dng chn 1 phn t bt k, 2 dng List cn li phi thm 1 command bt)

Chc nng To mt i tng List rng (cha c cc phn t) vi listType thuc 1 trong 3 dng: Choice.IMPLICIT, Choice.EXPLICIT, Choice.MULTIPLE.

List (String tile, int listType, String[] strElements, Image[]

To mt i tng List cho trc phn t v biu tng di dng mng strElements v

65

Java Mobile

imElements ) int append (String strPart, Image imPart) void delete (int position) void insert (int position, String strPart, Image imPart) void set (int position, String strPart, Image imPart) String getString (int position) Image getImage (int position) int getSelectedIndex () void setSelectedIndex (int position, boolean selected)

imElements. Thm mt phn t vo cui danh sch Xo mt phn t v tr position Chn mt phn t vo v tr position Gn gi tr (thay th bng phn t mi) cho phn t v tr position Ly gi tr phn t v tr position Ly biu tng phn t v tr position Ly v tr phn t c chn MULTIPLE: gn gi tr c chn hay khng (selected) cho phn t v tr position EXCLUSIVE, IMPLICIT: gn gi tr cho phn t v tr position l c chn (khng ph thuc gi tr selected)

int getSelectedFlags (boolean[] selectedArr) void setSelectedFlags (boolean[] selectedArr) boolean isSelected (int position) int size ()

Lu thng tin kt qu la chn vo mng Gn kt qu la chn cho i tng List Kim tra phn t v tr position c c chn khng Ly s phn t ca List Bng 4.14 Lp List

VD: //to i tng Implicit List vi cc phn t cho trc:


//to mng cc phn t

String options[]={Next, Previous, New};


//to mng cc biu tng

Image images[]={Image.createImage(/next.png),

66

Java Mobile

Image.createImage(/prev.png), Image.createImage(/new.png),} List lsImplicit = new List (Document option:, Choice.IMPLICIT, options, images);
//gn i tng vo trng thi lng nghe

lsImplicit.setCommandListener(this);
//bt s kin v x l

public void commandAction(Command c, Displayable s) { if (c == List.SELECT_COMMAND) { switch (lsImplicit.getSelectedIndex()) { case 0: System.out.println("Next"); break; case 1: System.out.println("Previous"); break; case 2: System.out.println("New"); break; } } }

Hnh 4.9 Giao din i tng List dng menu

67

Java Mobile

//to i tng Multiple hay Exclusive List:

List lsMultiple = new List (Multiple choice, Choice.MULTIPLE); List lsExclusive = new List (Exclusive choice, Choice.Exclusive); //thm command Save bt s kin Command cmSave = new Command (Save, Command.SCREEN, 1); lsMultiple.addCommand(cmSave);
//gn i tng trng thi lng nghe

lsMultiple.SetCommandListener(this);
//bt s kin

public void commandAction (Command c, Displayable d) { if (c==cmSave) { // x l s kin } }

Hnh 4.10 Giao din i tng List cho php chn nhiu la chn

68

Java Mobile

4.5. TextBox:
TextBox l dng giao din dnh cho ngi dng nhp liu, tng t TextField. * So snh gia lp TextBox v lp TextField: Ging nhau: C hai lp u s dng chung cc kiu rng buc ca lp TextField (gm TextField.ANY, TextField.EMAILADDR, TextField.NUMERIC, TextField.PASSWORD, TextField.PHONENUMBER, TextField.URL) S k t nhp vo c th nh hn hay bng s k t ti a ca i tng c gn khi khi to. Chc nng cun mn hnh c h tr nu mn hnh khng hin th ton b ni dung nhp. Khc nhau: TextField Hin trn hnh Bt s kin TextBox th TextField l 1 phn ca Form. TextBox l thc th duy nht mn Ngha l c th c cc thnh phn hin th trn mn hnh. giao din khc c hin th ng thi vi TextField 2 cch: CommandListener ItemStateListener Ch c th thm mt Command v dng CommandListener lng nghe v bt s kin

Bng 4.15 So snh TextField v TextBox Cc phng thc v chc nng tng ng ca lp TextBox: Lp TextBox: javax.microedition.lcdui.TextBox Phng thc TextBox (String title, String text, int maxSize, int constraints) void delete (int offset, int length) void insert (String source, int Chc nng To mt i tng TextBox vi maxSize l s k t ti a c php nhp v constraints l cc rng buc nhp liu. Xa length k t t v tr offset Chn chui source vo TextBox t v tr

69

Java Mobile

position) void insert (char[] data, int offset, int length, int position) void setChars (char[] data, int offset, int length) void setString (String text) int getChars (char[] data) String getString () int getConstraints () void setConstraints (int constraints) int getMaxSize () void setMaxSize (int maxSize) int getCaretPosition () int size () VD:
//to mt i tng TextBox:

position Chn cc length k t t v tr offset trong chui data vo TextBox t v tr position Gn gi tr cho TextBox bng length k t t v tr offset trong chui data Gn gi tr text cho TextBox ly gi tr TextBox ra mt mng k t ly gi tr TextBox Ly gi tr rng buc ca TextBox Gn gi tr rng buc cho TextBox Ly kch thc ti a ca TextBox Gn kch thc ti a ca TextBox Ly v tr con tr hin thi Ly s k t ca d liu nhp vo TextBox Bng 4.16 Lp TextBox

TextBox tbName = new TextBox (Pls enter your name, null, 20, TextField.ANY);
//gn command Save bt s kin

Command cmSave = new Command (Save, Command.SCREEN, 1); tbName.addCommand(cmSave);


// lng nghe s kin

tbName.SetCommandListener(this);
//bt s kin

public void commandAction (Command c, Displayable d) { if(c==cmSave) {


//x l s kin

...

70

Java Mobile

} }

Hnh 4.11 Giao din i tng TextBox

71

Java Mobile

4.6. Alert v AlertType:


4.6.1. Alert: i tng Alert c dng mt hp thoi hin th thng bo n ngi dng, c th c hin th hnh nh km theo hoc khng. Mt i tng Alert gm 3 thnh phn: tiu , ni dung thng bo v hnh nh nh km. Alert gm hai loi: Khng gii hn thi gian hin th (Modal): Alert hin th trn mn hnh cho n khi ngi dng bm nt tt. Gii hn thi gian hin th (Timed): Alert ch hin th trn mn hnh trong thi gian nht nh v t ng tt khi n hn. Cc phng thc v chc nng tng ng ca lp Alert: Lp Alert: javax.microedition.lcdui.Alert Phng thc Alert (String title) Chc nng To mt i tng Alert vi kiu mc nh ca thit b Alert (String title, String strText, To i tng Alert vi tiu title, ni Image iImage, AlertType atType) dung strText, hnh iImage v loi atType cho trc Image getImage () void setImage () String getString () void setString (String str) int getDefaultTimeout() int getTimeout () Ly i tng Image ca Alert Gn i tng Image cho Alert Ly ni dung thng bo ca Alert Gn ni dung thng bo cho Alert Ly thi gian Alert c php hin th (timeout) mc nh ca thit b Ly thi gian Alert c php hin th void setTimeout (int miliseconds) Gn gi tr thi gian Alert c php hin

72

Java Mobile

th tnh theo mili giy AlertType getType() void setType(AlertType type) Ly kiu ca Alert Gn kiu cho Alert Bng 4.17 Lp Alert Mi thit b c dng Alert cng nh thi gian hin th Alert mc nh. Dng phng thc getDefaultTimeout() ca lp Alert kim tra, nu gi tr tr v l Alert.FOREVER th dng mc nh l khng gii hn thi gian hin th (Modal) nu khng th chnh l thi gian hin th mc nh ca Alert tnh theo n v mili giy v Alert mc nh l loi gii hn thi gian hin th. C hai cch hin th Alert ln mn hnh: Dng phng thc Display.setCurrent (Alert, Displayable) : Khi Modal Alert b ngi dng tt hay Timed Alert ht thi hn hin th th i tng Displayable s c hin th ln mn hnh. VD: Form fmMain =new Form (Form Main); Alert alTest = new Alert (Alert); alTest.setTimeout(Alert.FOREVER); ... display.setCurrent(alTest, fmMain); Dng phng thc Display.setCurrent (Alert): i tng Displayable ang c hin th trc khi gi phng thc ny s c gi hin th li sau khi i tng Alert ht hn. VD: Alert alTest = new Alert (Alert); alTest.setTimeout (Alert.FOREVER); ... display.setCurrent (alTest);

73

Java Mobile

Lp Alert l lp con ca Screen, Screen l lp con ca Displayable nhng i tng Alert khng c php gi trc tip mt s hm sau ca lp Displayable: addCommand(Command) removeCommand(Command) setCommandListener(CommandListener)

iu ny ngha l i tng Alert khng c php gn thm nt (i tng Command ) cng nh khng x l v bt s kin. i tng ny ch c chc nng gi thng bo n ngi dng ch khng the nhn phn hi t ngi dng. Nu i tng Alert gi cc hm ny th s b pht sinh Exception IllegalStateException.

4.6.2. AlertType: AlertType l lp nh ngha sn cc loi Alert cho thit b, h tr m thanh tng ng khiAlert hin th. Gm nm loi: Bo gi (alarm) Nhc li (confirmation) Bo li (error) Thng bo (info) Cnh bo (warning) Nu i tng Alert c gn loi Alert trc th m thanh tng ng ca loi Alert ny s c pht khi i tng hin th ln mn hnh. VD: Alert alWarning = new Alert (Alert, Message, null, AlertType.WARNING); hay Alert alTest =new Alert (Alert, Message, null, null); alTest.setType(AlertType.WARNING);

m thanh ca Alert c th c chi bng mt trong hai cch:

74

Java Mobile

Pht m thanh Alert trc tip m khng cn to mt i tng Alert ngha l ch pht m thanh thng bo m khng hin th ln mn hnh, bng cch dng phng thc: AlertType.<Type>.playSound (Display); cch ny c th dng khi ch cn bo cho ngi dng bit v s kin m khng cn hin th thng tin trc tip ln mn hnh. Cc s kin khc nhau c th c thng bo bng cc m thanh khc nhau. VD: AlertType.CONFIRMATION.playSound(fmMain); Hay AlertType.ALARM.playSound(fmMain);

Cc loi AlertType c nh ngha trc: Gi tr ALARM CONFIRMATION ERROR INFO WARNING ngha Bo gi hoc nhc nh Thng bo hon tt 1 cng vic no Bo li Thng bo chung Khuyn co Bng 4.18 AlertType Lp AlertType ch h tr mt phng thc duy nht l boolean playSound (Display display) gi thc hin chc nng play sound ca i tng AlertType. VD: //to mt i tng Alert c km hnh nh v m thanh dng thng bo khi hin th Image img = Image.createImage(/coffee.png); Alert alAlert= new Alert (Hello, Its time for coffee, img, AlertType.INFO);
//gn kiu Modal Alert

alAlert.setTimeout(Alert.FOREVER); .

75

Java Mobile

//gi hin th Alert

display.setCurrent(alAlert, fmMain);

Hnh 4.12 Giao din i tng Alert

76

Java Mobile

4.7. Ticker:
Ticker l lp h tr hin th chui k t cun lin tc trn mn hnh. i tng Ticker c th c gn vo bt k i tng Screen no, k c Alert. V tr chui k t trn hay di mn hnh, cng nh tc cun ph thuc vo c t MIDP. Cc phng thc v chc nng tng ng ca lp Ticker: Lp Ticker: javax.microedition.lcdui.Ticker Phng thc Ticker (String strText) String getString () void setString (String strText) VD: //to i tng Ticker Ticker tkMessage = new Ticker (Wellcome to J2ME, have a nice day!!!); //gn vo form fmMain.setTicker(tkMessage); Chc nng To mt i tng Ticker vi ni dung chui cun strText cho trc Ly chui k t ca Ticker Gn chui k t cho Ticker Bng 4.19 Lp Ticker

Hnh 4.13 Giao din Ticker

77

Java Mobile

Chng 5: Giao din ha cp thp


ho cp thp trong J2ME c h tr ch yu qua hai lp chnh l Canvas v Graphics. Lp Canvas c dng mt phng c kch thc c nh v nhng g v ln phng ny s c hin th cho ngi dng. Lp Canvas cng h tr cc phng thc bt s kin cp thp Lp Graphics cung cp nhng i tng v ln Canvas (hay c gi l nhng ng cnh ha (graphics context)). Lp Graphics h tr v cc i tng ng thng, ng trn, hnh ch nht, text cng nh cc phng thc chn mu v font ch.

5.1. Canvas:
Canvas l lp con ca lp Displayable (ngang cp vi lp Screen), ngha l c th gn thm cc i tng Command vo Canvas bt s kin nh Form. Khi s dng, khng to trc tip mt i tng Canvas m xy dng mt lp k tha lp ny v x l cc chc nng ho ca chng trnh bn trong lp con ny. VD: class MyFirstCanvas extends Canvas implements CommandListener{

Command cmdExit =new Command(Exit, Command.EXIT, 1); addCommand(cmdExit); setCommandListener(this);

} MyFirstCanvas mfcCanvas = new MyFisrtCanvas(this); display.setCurrent(mfcCanvas);

78

Java Mobile

5.1.1. H to : Tng t h to trong lp trnh Windows, gc to (0,0) nm gc tri trn ca mn hnh. Tung y tng dn theo chiu dc t trn xung, honh x tng dn theo chiu t tri sang phi. dy mc nh ca cc i tng ho trong J2ME l 1 pixel. i tng Canvas c trng bi 2 gi tr l chiu di v chiu rng. Hai gi tr ny l c nh cho cc i tng Canvas khc nhau c to lp trong cng mt thit b v ph thuc vo loi thit b di ng. Cc phng thc ca lp Canvas truy vn cc gi tr ny: Lp Canvas: javax.microedition.lcdui.Canvas Phng thc int getWidth () int getHeight () Chc nng Ly gi tr rng i tng Canvas Ly gi tr di i tng Canvas Bng 5.1 Truy vn kch thc Canvas

5.1.2. V trn i tng Canvas: Canvas v Screen l hai lp con ca lp Displayable nn cng k tha phng thc abstract paint() ca lp cha. Trong khi phng thc paint() trong lp Screen v cc lp con ca n c dng sn v cc i tng ho cp cao(title, ticker, form, textbox, list, alert) ln mn hnh th trong lp Canvas, phng thc ny vn c khai bo vi t kho abstract, ngha l phi vit x l cho phng thc ny lp con ca Canvas (lp k tha m ta xy dng v ln mn hnh). abstract public class Displayable { abstract void paint(Graphics g); }

79

Java Mobile

public abstract class Canvas extends Displayable { protected abstract void paint(Graphics g); } public abstract class Screen extends Displayable { abstract void paintContent(Graphics g); paint(Graphics g){
// gn tiu //gn i tng Ticker

paintContent(g); } } public class Form extends Screen { void paintContent(Graphics g){ } } public class TextBox extends Screen { void paintContent(Graphics g) { } } public class List extends Screen implements Choice { void paintContent(Graphics g){ } } public class Alert extends Screen{ void paintContent(Graphics g){ } }

80

Java Mobile

Cc phng thc h tr v ca lp Canvas: Lp Canvas: javax.microedition.lcdui.Canvas Phng thc abstract void paint (Graphic g) final void repaint () width, int height) final void serviceRepaints() boolean isDoubleBuffered () Chc nng v i tng g ln Canvas yu cu v Canvas to gc tri trn; width, height l kch thc vng cn v li) x l cc yu cu v cn treo kim tra thit b c h tr hai buffer khng Bng 5.2 Lp Canvas Phng thc paint() c dng x l cc s kin v trong i tng Canvas. Nhng khi cn yu cu thit b v li mn hnh th khng gi trc tip phng thc ny m gi phng thc repaint(). Phng thc repaint() ny s gi hm paint() v li ton b hay mt phn mn hnh. Phng thc serviceRepaint() yu cu tt c cc yu cu v trc phi c thc hin ngay. Do , khi gi phng thc ny cc tin trnh khc s b block cho n khi tt c cc phng thc v c thc hin. Cc phng thc h tr giao tip vi Application Manager: Lp Canvas: javax.microedition.lcdui.Canvas Phng thc void showNotify () void hideNotify () Chc nng c gi trc khi application manager v i tng canvas ln mn hnh c gi sau khi application manager xo i tng canvas khi mn hnh Bng 5.3 Giao tip vi Application Manager Cc phng thc ny c khai bo trong lp Canvas vi kiu protected

final void repaint (int x, int y, int yu cu v mt vng ca Canvas ((x,y) l

81

Java Mobile

protected void showNotify(){ }; protected void hideNotify(){ }; v c gi bi application manager trc khi v v sau khi xo i tng canvas ln mn hnh. Do , khng gi trc tip cc phng thc ny trong chng trnh. M ch nn vit code trong cc phng thc ny cp pht, khi to cc bin cng nh to lp hay hy cc tin trnh x l cho vic v cc i tng ln Canvas.

5.1.3. Bt s kin trong cc i tng Canvas: i tng canvas c th h tr bt s kin di hai cp : bt s kin cp cao: thm mt hay nhiu i tng Command vo i tng Canvas v bt s kin thng qua cc Command ny (dng CommandListener) bt s kin cp thp: bt s kin cc phm s trn thit b cng nh cc s kin con tr, s kin trong game 5.1.3.1 Bt s kin cp cao: Lp Canvas cng l lp con ca Displayable nh lp Screen do cng k tha cc phng thc h tr Command nh lp Screen, gm:
addCommand(Command)

isShown() removeCommand(Command) setCommandListener(CommandListener) VD: class TestCanvas extends Canvas implements CommandListener { private Command cmExit; ... cmExit = new Command("Exit", Command.EXIT, 1); addCommand(cmExit); setCommandListener(this);
// Exit MIDlet

82

Java Mobile

... public void commandAction(Command c, Displayable d) { if (c == cmExit) {...} } } 5.1.3.2 Bt s kin cp thp: S dng m phm(key code) M phm l cc gi tr nguyn gn cho cc phm tng ng trong thit b di ng. Cc m phm ny c gn vi cc tn tng ng cho d nh nh: public static final int KEY_NUM0 = 48; public static final int KEY_NUM1 = 49; Bng m phm cc phm bn phm ITU-T (0-9, *, #) Lp Canvas: javax.microedition.lcdui.Canvas Tn KEY_NUM0 KEY_NUM1 KEY_NUM2 KEY_NUM3 KEY_NUM4 KEY_NUM5 KEY_NUM6 KEY_NUM7 KEY_NUM8 KEY_NUM9 KEY_STAR KEY_POUND Bng 5.4 M Phm Gi tr 48 49 50 51 52 53 54 55 56 57 42 35

83

Java Mobile

Lp Canvas h tr vic bt s kin cc phm ny bng cc phng thc: Lp Canvas: javax.microedition.lcdui.Canvas Phng thc void keyPressed (int keyCode) void keyReleased (int keyCode) void keyRepeated (int keyCode) Chc nng c gi khi ngi dng nhn phm c gi khi ngi dng nh phm c gi khi ngi dng nhn 1 phm nhiu ln (mt s thit b khng h tr phng thc ny) boolean hasRepeatEvents () String getKeyName () kim tra thit b c h tr nhn 1 phm nhiu ln khng ly tn phm tng ng ca m phm Bng 5.5 S kin keyPressed Cc phng thc keyPressed(), keyReleased() v keyRepeated() c khai bo trong lp Canvas vi thuc tnh protected. protected void keyPressed (int keyCode){ }; protected void keyReleased (int keyCode){ }; protected void keyRepeated (int keyCode){ }; Do , mun bt s kin no th ta ch cn khai bo phng thc tng ng trong lp k tha Canvas v vit code x l cho phng thc . Vd: protected void keyPressed(int keyCode) { switch (keyCode) { KEY_NUM1: break; KEY_NUM2: break; } }

84

Java Mobile

5.1.4. Game action: MIDP cng h tr lp trnh game bng cch nh ngh sn mt b cc phm bm x l s kin game. Mi s kin game cng c gn bi mt s nguyn nh s kin phm bm. Cc s kin chnh bao gm cc s kin sang tri, sang phi, ln, xung v bn. Vi cc loi in thoi c h tr cc phm di chuyn th cc s kin ny s c gn trc tip cho cc phm . Nu khng, c th gn cc s kin ny vi cc phm s 2, 4, 6, 8, 5. Lp Canvas: javax.microedition.lcdui.Canvas Tn s kin UP DOWN LEFT RIGHT FIRE GAME_A GAME_B GAME_C GAME_D M t di chuyn ln trn di chuyn sang tri di chuyn sang phi bn Tu chn Tu chn Tu chn Tu chn 1 2 5 8 9 10 11 12 Gi tr di chuyn xung di 6

Bng 5.6 S kin Game Action

85

Java Mobile

Cc phng thc s dng cho lp trnh game: Lp Canvas: javax.microedition.lcdui.Canvas Phng thc int getKeyCode (int gameAction) int getGameAction xc nh hnh ng game tng ng vi m phm cho trc (int keyCode) Bng 5.7 Bt s kin trong Game Action VD:
//ly m phm tng ng cho cc hnh ng trong game:

Chc nng ly m phm tng ng vi hnh ng game

int keyFire = getKeyCode(FIRE); int keyRight = getKeyCode(RIGHT);


//ly loi hnh ng game x l

protected void keyRepeated (int keyCode) { switch (getGameAction (keyCode)) { case Canvas.FIRE: break; case Canvas.LEFT: break; } } Mt hnh ng game c th gn cho nhiu phm bm, chng hn gn cho c phm chc nng (tri, phi, ln, xung) ln cc phm s. Khi , ngi dng c th bm phm chc nng sang tri hay phm s 4 u pht sinh s kin game LEFT nh nhau.

86

Java Mobile

5.1.5. S kin con tr: MIDP cng h tr cc phng thc lp trnh trn thit b di ng c s dng con tr nh chut hay mn hnh cm ng. Lp Canvas: javax.microedition.lcdui.Canvas Phng thc boolean hasPointerEvents() Chc nng kim tra thit b c h tr con tr khng chuyn ng ca con tr khng void pointerDragged(int x, int y) void pointerPressed(int x, int y) void pointerReleased(int x, int y) c gi khi ngi dng r con tr, (x,y) l to con tr. c gi khi ngi dng nhn nt con tr c gi khi ngi dng nh con tr Bng 5.8 S kin con tr Cc s kin con tr cng c x l tng t cc s kin phm bm. Nu thit b c h tr x l s kin con tr, cc phng thc pointerDragged(), pointerPressed(), pointerReleased() s c gi khi ngi dng r, nhn nt hay nh con tr. Cc phng thc pointerDragged(), pointerPressed(), pointerReleased() cng c khai bo trong lp Canvas vi thuc tnh protected nn nu mun x l s kin con tr cho chng trnh phi khai bo hm vi tn tng ng trong lp con ca chng trnh v vit x l bn trong VD: protected void pointerPressed(int x, int y) {
// xc nh v tr im u

boolean hasPointerMotionEvents() kim tra thit b c kh nng nhn cc

startx = x; starty = y; } protected void pointerDragged(int x, int y) {


// xc nh v tr im hin ti

87

Java Mobile

currentx = x; currenty = y; repaint(); } protected void pointerReleased (int x, int y) {


//xc nh v tr im cui

endx = x; endy = y; repaint(); }

88

Java Mobile

5.2. Graphics:
i tng Graphics dng v ln mn hnh Canvas. Lp Graphics cung cp sn trn 30 phng thc h tr v cc i tng hnh hc c bn (ng thng, ng trn, hnh ch nht), text, cng nh iu khin mu sc, phng ch C th s dng lp Graphics trong hai trng hp: Trong phng thc paint() ca lp Canvas: protected void paint(Graphics g){ } i tng Graphics ny ch c gi tr bn trong phng thc paint(), ra khi phng thc ny th khng cn dng v ln Canvas c na. Trong cc i tng mutable image: Cc immutable image thng c to t file hay resource, c tnh c nh, khng thay i. Do , ngi ta thng dng immutable image lm biu tng cho cc thnh phn trong ChoiceGroup, Form, List hay Alert. Ngc li, i tng mutable image ch l mt vng nh c kch thc c nh c cp khi khi to. VD: Image iImage=Image.createImage(80,20); Graphics gGraphics=iImage.getGraphics(); i tng Graphics c to theo cch ny c gi tr cng vi i tng Image. Khi i tng Image b hu th i tng Graphics tng ng cng bi hu theo.

89

Java Mobile

Cc phng thc v chc nng ca lp Graphics: Lp Graphics: javax.microedition.lcdui.Canvas Phng thc void setColor (int RGB) Chc nng Gn gi tr mu sc, kt hp cc gi tr 3 mu c bn (, lc, xanh dng) trong mt s nguyn void setColor (int red, int green, Gn gi tr mu sc theo cc thnh phn int blue) int getColor () int getBlueComponent() int getGreenComponent() int getRedComponent() void setGrayScale (int value) int getGrayScale () int getStrokeStyle () void setStrokeStyle (int style) ring bit Ly gi tr mu Ly gi tr thnh phn mu xanh dng trong i tng Ly gi tr thnh phn mu xanh lc trong i tng Ly gi tr thnh phn mu trong i tng Gn gi tr grayscale Ly gi tr grayscale hin ti Ly kiu nt v Gn kiu nt v, style c th mang 1 trong 2 gi tr Graphics.DOTTED hay Graphics.SOLID Bng 5.9 Lp Graphics (Grayscale l mt s nguyn kiu int c gi tr t 0 n 255 biu th sng ca mu xm (shade of gray) ) 5.2.1. Mu sc: Mu sc trong i tng Graphics c to t 3 mu c bn l , xanh lc v xanh dng(RGB) c biu din bi 24 bit mu, mi mu chim 8 bit. Nu thit b khng h tr hin th mu hay ch h tr vi s mu t hn th thit b s t chuyn

90

Java Mobile

i hin th ra mu gn nht so vi yu cu. Grayscale dng hin th cc sc mu khc nhau trn mn hnh trng en. Khi gn mu cho i tng Graphics, c th dng mt trong 2 cch: Kt hp 3 mu (, xanh dng v xanh lc) trong mt s nguyn kiu int hay biu din tng thnh phn trong tng s int. Khi kt hp 3 mu vi nhau, mi mu c biu din bi 8 bit v xp theo th t t cao xung thp l , xanh lc v xanh dng.
R R R R R R R R G G G G G G G G GREEN B B B B B B B B RED BLUE

Do , kt hp 3 gi tr mu ny vo mt s nguyn kiu int, ta phi dch bit c kt qu chnh xc. Gi tr mu s dch tri 16bits, gi tr mu xanh lc dch tri 8 bits v gi tr mu xanh dng chim 8 bit thp nht. VD: int red=0; int reen=127; int blue=255; int color=(red<<16) | (green<<8) | blue; 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 RED g.setColor(color); int red=0; int green=127; int blue=255; g.setcolor(red, green, blue); GREEN BLUE 0 0 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1

//g l i tng kiu Graphics

//Gn gi tr cho tng mu c bn ring bit:

91

Java Mobile

Tng t, khi ly gi tr mu, ta cng c th ly ra di dng kt hp hay tng mu ring bit. Nu ly gi tr mu di dng kt hp, c c gi tr mu cho tng mu c bn cn phi b i cc bit khng thch hp. Vd: int color, red, green, blue; color= g.getColor(); //g l i tng kiu Graphics red=(color & 0xFF0000)>>16; green=(color & 0xFF00)>>8; blue=color & 0xFF; C th kim tra thit b di ng c mn hnh mu khng bng phng thc: javax.microedition.lcdui.Display.isColor(). Ngoi ra c th ly s mu thit b c h tr bng phng thc javax.microedition.lcdui.Display.numColors(). , nu thit b ch c mn hnh trng en th gi tr tr v l gi tr grayscale mc nh.

92

Java Mobile

5.2.2. Nt v: Kiu nt v (stroke style): Khi v ng thng, ng trn, hay hnh ch nht, ta c th la chn kiu nt v l nt lin (Graphics.SOLID) hay cch khong (Graphics.DOTTED). Nt lin l gi tr mc nh ca cc kiu v. Cc phng thc v: Lp Graphics: javax.microedition.lcdui.Canvas Phng thc int y2) int height, int startAngle, int acrAngle) im (x2, y2) gc startAngle ni tip hnh ch nht xc nh bi gc tri trn (x,y) v chiu di hai cnh width, height void fillArc (int x, int y, int width, int v ng cong gc arcAngle bt u t height, int startAngle, int acrAngle) gc startAngle ni tip hnh ch nht xc nh bi gc tri trn (x,y) v chiu di hai cnh width, height v t mu bn trong ng cong va v. void drawRect (int x, int y, int width, v hnh ch nht vi gc tri trn (x,y) v int height) width, int height, int arcW, int arcH) chiu di hai cnh width, height v arcH l kch thc ca hnh ch nht ngoi tip gc cong void fillRect (int x, int y, int width, int t hnh ch nht height) void fillRoundRect (int x, int y, int t hnh ch nht gc trn width, int height, int arcW, int arcH) Bng 5.10 Cc phng thc v void drawRoundRect (int x, int y, int v hnh ch nht vi cc gc trn. arcW Chc nng void drawLine (int x1, int y1, int x2, V ng thng t im (x1, y1) n void drawArc (int x, int y, int width, v ng cong gc arcAngle bt u t

93

Java Mobile

VD: g.drawArc(5, 5, 75, 75, 0, 225); g.drawArc(80, 70, 75, 100, 90, 225);

g.fillArc(5, 5, 75, 100, 0, 360); g.fillArc(75, 100, 75, 50, 90, 300);

Hnh 5.1 Cc phng thc v ng cong Hnh ch nht gm 4 loi: Hnh ch nht thng, khng t Hnh ch nht gc cong, khng t Hnh ch nht thng, t c Hnh ch nht gc trn, t c

Hnh ch nht gc trn l hnh ch nht trong cc gc c v theo dng ng cong ch khng phi l gc vung nh hnh ch nht thng thng. Trong cc gc cong l ng cong ni tip hnh ch nht kch thc rng di tng ng l arcW v arcH. VD:

94

Java Mobile

g.drawRect(1, 1, 60, 40); g.drawRoundRect(70, 50, 60, 40, 30, 40);

g.fillRect(1, 1, 60, 40); g.fillRoundRect(70, 50, 60, 40, 30, 40);

Hnh 5.2 Cc phng thc v hnh ch nht Cc phng thc h tr v text : Lp Graphics: javax.microedition.lcdui.Graphics Phng thc int y, int anchor) void drawChars (char[] data, int v chui k t data vi chiu di length offset, int length, int x, int y, int t v tr offset ln mn hnh anchor) void drawString (String str, int x, int v chui str ln mn hnh y, int anchor) Chc nng void drawChar (char character, int x, v k t character ln mn hnh

95

Java Mobile

void drawSubstring (String str, int v chui con c chiu di len , t v tr offset, int len, int x, int y, int anchor) Font getFont() void setFont () offset ca chui str ln mn hnh ly i tng Font hin ti gn Font cho i tng Graphics Bng 5.11 X l Text Khi v text ln mn hnh, bt k l mt k t hay mt chui k t, ta phi cung cp ba tham s: x, y v anchor. Trong , (x, y) l to im gc, v anchor l v tr tng i ca im gc so vi on text s c hin th. Cc v tr tng i ca anchor c nh ngha sn trong lp Graphics, gm: Lp Graphics: javax.microedition.lcdui.Graphics Tn anchor LEFT HCENTER RIGHT TOP BASELINE BOTTOM M t l tri ca k t / chui im gia ca k t / chui l phi ca k t / chui im cao nht ca k t / chui dng chun ca k t / chui im cao nht ca k t/ chui Bng 5.12 Gi tr Anchor Khi s dng, bin anchor thng c kt hp bi hai kiu nh v theo chiu ngang v chiu dc c v tr tng i ca im gc. VD:
//v chui Hello J2ME vi gc tri trn trng gc tri trn ca mn hnh

V tr chiu ngang chiu ngang chiu ngang chiu dc chiu dc chiu dc

g.drawString (str, 0, 0, Graphics.TOP| Graphics.LEFT);


//v chui Hello J2ME ngay gia mn hnh, ngha l im gia trng vi im gia ca mn hnh

g.drawString (str, getWidth()/2, getHeight()/2, Graphics.BASELINE| Graphics.HCENTER );

96

Java Mobile

//v chui Hello J2ME vi phi di trn trng gc phi di ca mn hnh

g.drawString (str, getWidth(), getHeight(), Graphics.BOTTOM | Graphics.RIGHT); Hnh 5.3 Cc phng thc h tr v Text

Hnh 5.4 Cc nh dng trong Text Graphic

97

Java Mobile

5.2.3. Font ch: Lp Font: Lp Font: javax.microedition.lcdui.Font Phng thc int style, int size) static Font getDefaultFont () int getFace () int getStyle () int getSize () boolean isPlain () boolean isBold () boolean isItalic () boolean isUnderlined () int getHeight () int getBaselinePosition () int charWidth (char ch) offset, int length) int stringWidth (String str) str, int offset, int length) ly rng chui k t ch dng String String bt u t v tr offset vi di length Bng 5.13 X l Font ch int substringWidth (String ly rng chui con ca chui k t ch dng to i tng Font mc nh ly face hin ti ly kiu ch (m, in nghing, gch di) ly c ch kim tra c ang dng kiu ch thng khng kim tra c ang dng kiu ch m khng kim tra c ang dng kiu ch in nghing khng kim tra c ang dng kiu ch gch di khng ly kch thc font (khong cch gia 2 dng ch) ly cao ch ly rng ca k t ch Chc nng static Font getFont (int face, to i tng Font

int charsWidth (char[] ch, int ly rng ca chui k t ch dng mng char

98

Java Mobile

Lp Font khng c phng thc khi to ngha l khng cn new to i tng mi, thay vo , ta gi thc hin mt trong hai phng thc getFont() hay getDefaultFont() to i tng Font. Cc thuc tnh cn quan tm khi to mo mt font gm: face, kiu ch (style) v kch thc. Cc nh dng ca mi loi thuc tnh c nh ngha sn trong lp Font vi, gm: Lp Font: javax.microedition.lcdui.Font Loi thuc tnh FACE_SYSTEM Face FACE_MONOSPACE FACE_PROPORTIONAL STYLE_PLAIN Style STYLE_BOLD STYLE_ITALIC STYLE_UNDERLINED SIZE_SMALL Size SIZE_MEDIUM SIZE_LARGE ch thng in m in nghing gch di c ch nh c ch trung bnh c ch ln Bng 5.14 Cc gi tr Font Trong , thuc tnh face v c ch ca font ch c s dng duy nht mt loi nh dng cho mt i tng. Ring vi thuc tnh kiu ch, c th kt hp cc nh dng trong cng mt i tng Font bng ton t OR. VD: 0 32 64 0 1 2 4 8 0 16 Tn thuc tnh M t Gi tr

99

Java Mobile

//to i tng Font c thuc tnh Face kiu system, c ch trung bnh v c kiu ch in nghing v m:

Font font= Font.getFont(

Font.FACE_SYSTEM,

Font.STYLE_BOLD | Font.STYLE_ITALIC | Font.STYLE_UNDERLINED, Font.SIZE_MEDIUM);

Hnh 5.5 Cc phng thc to font


//ly thuc tnh face, c ch ca i tng Font

int face = font.getFace(); int size = font.getSize();


//kim tra kiu ch i tng Font: //cch 1:

int style = font.getStyle(); if (style== (Font.STYLE_BOLD | Font.STYLE_ITALIC))


//cch 2: s dng cc phng thc kim tra isPlain(), isBold(), isItalic() v isUnderlined()

if (font.IsBold() && font.IsItalic())

100

Java Mobile

5.2.4. V cc i tng hnh nh (image): Lp Graphics h tr mt phng thc duy nht v hnh nh ln mn hnh, l: Lp Graphics: javax.microedition.lcdui.Graphics Phng thc y, int anchor) Bng 5.15 V hnh nh y ch l bc cui cng v mt hnh nh ln mn hnh, cc bc trc dng to i tng Image cng nh load hnh nh ln i tng . i tng Image gm hai loi: c th thay i hnh nh (Mutable Image) v hnh nh c nh (Immutable Image). Cc bc v i tng Image ln mn hnh: Immutable Image: 1. To i tng hnh nh (thng l load trc tip t file): Image img= Image.createImage (\imageTest.png); 2. Hin th i tng ln mn hnh: protected void paint (Graphics g) {

M t

void drawImage (Image img, int x, int v i tng Image img ln mn hnh

g.drawImage(img, 10, 10, Graphics.LEFT | Graphics.TOP); } Hnh 5.6 V bng i tng Immutable Image

101

Java Mobile

Mutable Image: Khi to i tng, yu cu chng trnh cp mt vng nh vi kch thc cho trc ca hnh nh: Image img = Image.createImage(80,100); V hnh nh ln i tng :
//ly i tng Graphics tng ng ca i tng Image:

Graphics g = img.getGraphics();
//dng i tng Graphics va ly v cc hnh nh ln i tng Image:

g.fillRoundRect (0, 0, 50, 50, 20, 20);

Hin th hnh va v ln mn hnh: protected void paint (Graphics g) {

g.drawImage(img, }

10,

10,

Graphics.VCENTER | Graphics.HCENTER); Hnh 5.7 V bng i tng Mutable Image Khi gi phng thc v i tng Image ln mn hnh, ta cng phi truyn cc tham s x, y, anchor nh khi v text. Tuy nhin, cc loi anchor ca hnh nh tng i khc vi text, l khng s dng anchor BASELINE(ng chn ca k t / chui) m thay vo l VCENTER ch im gia theo chiu dc ca hnh nh Lp Graphics: javax.microedition.lcdui.Graphics Tn anchor LEFT HCENTER RIGHT TOP M t l tri ca hnh nh im gia ca hnh nh l phi ca hnh nh im cao nht ca hnh nh V tr chiu ngang chiu ngang chiu ngang chiu dc

102

Java Mobile

VCENTER BOTTOM

im gia ca hnh nh im cao nht ca hnh nh

chiu dc chiu dc

Bng 5.16 Gi tr Image Anchor

Hnh 5.8 Cc nh dng v tr trong Graphics 5.2.5. Cc phng thc tnh tin i tng: n gin khi biu din s tnh tin ca cc i tng hnh nh trn mn hnh, lp Graphics cho php ngi lp trnh v cc i tng v tr c nh. Khi cn tnh tin cc i tng trn mn hnh th ch cn tnh tin gc to n v tr mi, cc hnh nh ca i tng Graphics s tnh tin theo. Lp Graphics: javax.microedition.lcdui.Graphics Phng thc void translate(int x, int y) int getTranslateX() int getTranslateY() n v tr (x,y) ly khong cch trn trc honh b tnh tin ly khong cch trn trc tung b tnh tin Bng 5.17 Cc phng thc tnh tin Khi gi thc hin phng thc translate() tnh tin hnh nh trn mn hnh th ch c gc ta b thay i v tr, v cng ch c ngha trong ln gi hm . Nu gi thc hin phng thc repaint() m khng gi translate() ln na th to gc s tr v v tr (0,0) ban u. VD:
//khi ngi dng nhn phm mi tn xung th tnh tin hnh nh xung mt pixel:

M t tnh tin im gc (0, 0) ca i tng Graphics

103

Java Mobile

protected void keyPressed(int keyCode) { switch (getGameAction(keyCode)) { ... case DOWN: if ((translatey + img.getHeight() + 1) > getHeight()) translatey = 0; else translatey ++; break; ... } repaint(); } protected void paint(Graphics g){ if (im != null){
//xo mn hnh

g.setColor(255, 255, 255); g.fillRect(0, 0, getWidth(), getHeight());


//tnh tin gc to

g.translate(translatex, translatey);
// lun v v tr 0,0

g.drawImage(im, 0, 0, Graphics.LEFT | Graphics.TOP); } }

104

Java Mobile

5.2.6. Vng xn (Clipping regions): Mi ln gi phng thc paint(), ton b mn hnh s c v li. Vng xn c dng gii hn li vng cn v li, lm gim thi gian cn v li mn hnh. Bnh thng, nu khng to vng xn th vng xn mc nh s l hnh ch nht bao ca mn hnh (tc l hnh ch nht (0,0,Canvas.getWidth(), Canvas.getHeight()) ) Cc phng thc h tr xn: Lp Graphics: javax.microedition.lcdui.Graphics Phng thc width, int height) width, int height) int getClipX () int getClipY () int getClipHeight () int getClipWidth () M t (x, y) kch thc hai cnh l width v height) vi hnh ch nht (x, y, width, height) Ly to x gc tri trn ca vng xn Ly to y gc tri trn ca vng xn Ly di vng xn Ly rng vng xn Bng 5.18 Vng xn void setClip (int x, int y, int xc nh vng xn (hnh ch nht gc tri trn void clipRect (int x, int y, int vng xn l phn giao ca vng xn hin ti

105

Java Mobile

Chng 6:

Lu tr thng tin vi RMS

6.1. Gii thiu RMS


Vic lu tr v truy xut thng tin c th xem l mt yu cu bt buc vi cc ng dng ngy nay. Vi cc chng trnh vit cho my tnh bn, cng vic ny c cc ngn ng lp trnh h tr rt tt. Chng ta c th lu tr thng tin vo a cng, a CD, cc a trn mi trng mng Tuy nhin, cng vic lu tr thng tin trn mi trng di ng c nhiu khc bit. Mi trng MIDP khng h t ra bt k mt c t no qui nh v h thng file (file system) trn cc thit b di ng, do trn cc thit b ny chng ta khng h c khi nim file hay directory. iu ny gy nhiu ngc nhin cho nhng lp trnh vin bt u nghin cu v J2ME, tuy nhin nu chng ta bit rng MIDP hng n vic lp trnh trn cc mi trng c ti nguyn hn ch nh cc u thu tn hiu truyn hnh s, my nhn tin pagers th vic qui nh cc chun v h thng tp tin l khng cn thit v bt kh thi. iu ny khng c ngha rng chng ta khng th lu tr thng tin trn cc thit b di ng, CLDC/MIDP c mt cng c ring phc v cho cng vic ny, l RMS (Record Management System). Vic lu tr s c thc hin thng qua cc record, chng ta cn c h tr cc cng c lc thng tin, sp xp thng tin, tm kim thng tin trn cc records. Ghi ch: Khi nim lu tr thng tin phn ny cp n vic lu tr lu di, khng b mt khi ngt ngun in (persistent storage) ch khng cp n vic lu tr ln b nh trong (RAM). Lu tr thng tin thng qua cc Record Store

106

Java Mobile

Thay th cho h thng file, thit b MIDP lu tr thng tin qua cc record stores. Chng ta c th xem cc record store ny nh mt bng d liu gm nhiu dng record. Mi dng record c mt s ID v gm mt mng cc bytes. Ngi ta thng xem record store nh mt cu trc file phng (flat-file). Record ID 1 2 3 . Data Mng cc bytes Mng cc bytes Mng cc bytes . Bng 6.1 M hnh Record Store Mi record c mt trng Record ID c kiu d liu integer, ng vai tr nh kha chnh trong bng d liu v mt trng Data l mt mng cc bytes cha d liu. Mt tp hp cc record ny c gi l mt record store (tng ng vi mt bng d liu). Mt ng dng MIDlet c th c bao nhiu record store ty (k c khng c), mi record store c phn bit bi tn nh danh duy nht. M rng ra, cc Record Stores ca cc ng dng MIDlet cng chung mt b (suite) th cng phi c tn phn bit. Tn ca record store c th cha n 32 k t Unicode (16 bits) v tn ny phn bit hoa thng. Cc ng dng MIDlet khng nhng truy xut c cc record stores do n to ra m cn truy xut c cc record stores do cc ng dng khc trong cng mt b (MIDlet Suite) to ra. y l mt l do khin cc nh pht trin t ra khi nim MIDlet Suite, tuy nhin cc MIDlet khng cng mt suite khng th truy xut Record Suite ca nhau. y l mt hn ch ca Record Store khi so snh vi h thng file trn cc thit b khc. Mt record store qun l hai thng s qun l vic truy cp d liu, hai thng s ny t ng c cp nht khi c record c thm, xa hay sa:

107

Java Mobile

S Version : y l mt gi tr integer. Tuy nhin, c mt iu khng may l gi tr khi im ca version khng c nh ngha bi API. Nu chng ta cn bit gi tr ban u ny, ngay sau khi to record mi ta c th gi hm getVersion(). Ngy thng: l mt s long, th hin s millisecond tnh t na m ngy 1/1/1970. Chng ta c th ly ra thng s ny bng hm getLastModified(). Cc yu cu x l record store c thit b ng b ha t ng: khi c hai hay nhiu yu cu x l th yu cu n trc c x l trc v cc yu cu x l khc s c t vo hng i. Cc hm x l Record Store thng dng: Lp javax.microedition.rms.RecordStore Phng thc static RecordStore openRecordStore(String recordStoreName, boolean createIfNeccessary) void closeRecordStore() static void deleteRecordStore(String rcdStoreName) static String[] listRecordStore() int addRecord(byte[] data, int offset, int numBytes) void setRecord(int recordID,byte[] newData,int offset, int numBytes) void deleteRecord(int RecordID) byte[] getRecord(int RecordID) Xa mt record khi record store Ly mng byte cha ni dung record Thay i ni dung mt record. Lit k cc record stores trong MIDlet Suite Thm mt record ng record store Xa record store M t M mt record store, ty chn to mi nu record store cha tn ti. Constructor: Khng c phng thc khi to

108

Java Mobile

int getRecord(int RecordID, byte[] buffer, int offset) int getRecordSize(int RecordID) int getNextRecordID() int getNumRecords() long getLastModified() int getVersion() String getName() int getSize() int getSizeAvailable() RecordEnumeration enumerateRecords (RecordFilter filter, RecordComparator comparator, boolean keepUpdate) listener) void removeRecordListener (RecordListener listener)

Ly ni dung record t v tr offset a vo mng byte. Ly kch thc ca record Ly ID ca record tip theo Ly s lng Record trong Record Store Thi im thay i cui cng ca Record Store Ly version ca Record Store Ly tn ca Record Store Tng s bytes c s dng bi Record Store Ly dung lng cn li (bytes) c php dng bi Record Store. B sung chc nng duyt cc record di dng mt tp hp. (s c cp sau) Store (s c cp sau) G b b nghe (s c cp sau)

void addRecordListener(RecordListener Thm mt b lng nghe trn Record

Bng 6.2 Lp RecordStore


Ghi ch: Record ID c tnh bt u t 1 ch khng phi t 0 nh ch s mng.

Sau y l mt v d v vic nhp xut d liu thng qua record store bng k thut stream. V d c tinh gin v ch trnh by nhng phn on chnh.
//Import cc th vin cn thit

import java.io.*; import javax.microedition.midlet.*;

109

Java Mobile

import javax.microedition.rms.*; public class ReadWriteStreams extends MIDlet { private RecordStore rs = null; // Record Store static final String REC_STORE = "db_1"; // Tn ca Record Store public ReadWriteStreams() { openRecStore(); // Hm to Record Store writeTestData(); // Hm ghi d liu readStream(); // Hm c d liu closeRecStore(); // ng Record Store deleteRecStore(); // Xa Record Store } public void startApp() {
// Khng c giao din, chng trnh s ghi, c d liu v thot

destroyApp(false); notifyDestroyed(); } public void openRecStore() { try {


// To record store mi nu cha tn ti

rs = RecordStore.openRecordStore(REC_STORE, true ); } catch (Exception e) {


//Xut thng bo li

} } public void closeRecStore() { try { rs.closeRecordStore();

110

Java Mobile

} catch (Exception e) {
//Xut thng bo li

} } public void deleteRecStore(){ if (RecordStore.listRecordStores() != null){ try{ RecordStore.deleteRecordStore(REC_STORE); } catch (Exception e){
//Xut thng bo li

} } } /*-------------------------------------------------* To 3 mng m phng vic ghi d liu *-------------------------------------------------*/ public void writeTestData() { String[] strings = {"String 1", "String 2"}; boolean[] booleans = {false, true}; int[] integers = {1 , 2}; writeStream(strings, booleans, integers); } /*-------------------------------------------------* Vit vo record store dng stream *-------------------------------------------------*/ public void writeStream(String[] sData, boolean[] bData, int[] iData) { try{

111

Java Mobile

/* To stream vit d liu, y ta to ra 2 streams, mt stream c tc dng nh buffer, stream cn li ghi d liu vo Record*/
//Buffer

ByteArrayOutputStream strmBytes = new ByteArrayOutputStream(); DataOutputStream strmDataType = new DataOutputStream(strmBytes); byte[] record;
//Ba mng c kch thc bng nhau

for (int i = 0; i < sData.length; i++) {


// Ghi d liu

strmDataType.writeUTF(sData[i]); strmDataType.writeBoolean(bData[i]); strmDataType.writeInt(iData[i]); strmDataType.flush();


// Bin d liu trong stream thnh dng mng ghi vo //record, v cc record ch chp nhn d liu dng mng

record = strmBytes.toByteArray(); rs.addRecord(record, 0, record.length);


// Xa ht d liu trong buffer tip tc ghi cc phn //t tip theo ca mng

strmBytes.reset(); }
//Sau khi hon tt vic ghi cc mng, ng cc stream

strmBytes.close(); strmDataType.close(); }

112

Java Mobile

catch (Exception e){


//Xut cc thng bo li

} } /*-------------------------------------------------* c li d liu c ghi *-------------------------------------------------*/ public void readStream(){ try{


// To mt mng c kch thc ln // Trong thc t nn kim tra v cp pht li kch thc nu cn

byte[] recData = new byte[50];


// To mt stream lm buffer ly d liu t mng recData

ByteArrayInputStream strmBytes = new ByteArrayInputStream(recData);


// To stream xut d liu theo ng khun dng ghi

DataInputStream strmDataType = new DataInputStream(strmBytes); for (int i = 1; i <= rs.getNumRecords(); i++){


// Ly d liu a vo mng

rs.getRecord(i, recData, 0);


// c li theo ng th t ghi

System.out.println("Record #" + i); System.out.println("UTF:" + strmDataType.readUTF()); System.out.println("Boolean: " + strmDataType.readBoolean()); System.out.println("Int: " + strmDataType.readInt()); System.out.println("--------------------");
// Xa d liu buffer bt u ghi cc phn t tip theo

strmBytes.reset();

113

Java Mobile

} strmBytes.close(); strmDataType.close(); } catch (Exception e){


//Xut cc thng bo li

} } } V d trn nu mt cch c bn nht cc bc cn thit ghi d liu v truy xut d liu bng record store. V d c tinh gin v ch nu cc hm tht cn thit. Vic m, ghi record, c record, ng v xa record c th hin thnh tng hm ring bit tin theo di. Trong v d trn c mt s im ta cn ch : Ch s RecordID bt u t 1 ch khng phi t 0 nh ch s ca cc phn t trong mng. Nu ta c gng truy xut phn t s 0 s pht sinh li. Tng t nh cc hm truy xut I/O khc ca Java, cc hm lin quan n Record Store cn phi c a vo trong khi try catch v cc hm ny c th pht sinh cc exceptions. Trong v d trn chng ta dng stream ghi v xut d liu c khun dng; do khi chng ghi theo trnh t no th xut cng phi theo trnh t .

114

Java Mobile

6.2. Duyt danh sch Record vi RecordEnumeration


Ngay trn v d va ri, chng ta duyt qua danh sch cc records trong record store bng dng lp. y l cc tip cn c nhng lp trnh vin ngh n ban u v chng ta nhn nh cc record nh cc dng trong mt bng ca CSDL. Tuy nhin, MIDP cung cp cho chng ta mt cng c thun tin v chnh xc hn duyt qua cc record trong mt record store. Chng ta cp n khi nim chnh xc hn y v l do khi duyt bng vng lp thc cht c th gy nn mt exception trong chng trnh. Gi s chng ta c 3 record nh s t 1 n 3, v l do no chng ta xa record s 2 bng phng thc deleteRecord(int RecordID) th s 2 khng bao gi c s dng gn lm RecordID cho mt record khc. Vy khi ta duyt bng vng lp, gi s i t 1 n 3, khi gi tr i=2 s gy ra mt li exception. Khi , chng ta bt buc phi duyt bng cng c enumeration. Ngoi ra, khi chng ta s dng cc chc nng lc (filter) v sp xp (sort) cc record, gi tr tr v s l mt RecordEnumeration v cc RecordID lc ny khng tun theo bt k mt th t no c. Vic to ra mt RecordEnumeration l mt cng vic n gin, ch tn mt vi dng lnh. Lp RecordEnumeration khng c phng thc khi to (constructor), ta to ra RecordEnumeration bng phng thc enumerateRecord() ca lp RecordStore V d: RecordEnumeration re = rs.enumerateRecords(null,null,false); while (re.hasNextElement()) {
// ly thng tin record tip theo ra buffer

String str = new String(re.nextRecord());


//x l ty theo yu cu

115

Java Mobile

Hm enumerateRecord nhn vo ba tham s: Tham s u l b lc (filter), nu khng mun lc record ta null Tham s th nh l b sp xp (sort), nu khng mun sp xp ta cng null. Nu c hai tham s trn u l null th cc record c ly ra v sp xp theo th t bt k. Tham s cui cng l mt bin boolean bUpdate, nu bUpdate l true th khi danh sch cc record c s thay i (b thm, xa hay sa) bin RecordEnumeration s t cp nht, nu l false chng ta phi t cp nht bng hm rebuild(). Sau y l cc hm thng dng nht ca lp RecordEnumeration Lp javax.microedition.rms.RecordEnumeration Phng thc Construtor int numRecords() byte[] nextRecord() int nextRecordId() byte[] previousRecord() int previousRecordId() boolean hasNextElement() bolean hasPrevioussElement() void keepUpdate(boolean keepUpdate) boolean isKeptUpdate() Kim tra xem enum c chc nng t cp nht hay khng? Chc nng Khng c constructor, to t lp RecordStore S lng records trong tp hp Ly record k tip, duyt theo th t tin (forward) Ly RecordID ca record k tip Ly record trc , duyt theo th t li (backward) Ly RecordID ca record trc Kim tra cn record tip tc duyt tin (forward) hay khng? Kim tra cn record tip tc duyt li (backward) hay khng? Bt, tt ch t cp nht ca enum

116

Java Mobile

void rebuild() void reset() void destroy()

T cp nht li enumeration a enumeration v trng thi ban u, lc va khi to Tr li ht ti nguyn gi bi bin enum ny. Bng 6.3 Lp RecordEnumeration

6.3. Sp xp bng RecordComparator


Yu cu sp xp d liu l mt yu cu thng c t ra cho cc ng dng tin ch. Cng vic ny trn cc my desktop thng c thc hin thng qua cc h qun tr c s d liu, trn mi trng J2ME chng ta cng c mt cng c kh hiu qu sp xp d liu trn Record Store, l RecordComparator. RecordComparator l mt Java interface, khi c nhu cu sp xp d liu th ng dng ca ta phi ci t (implements) interface ny. Sau y l mt v d ca lp c ci t interface RecordComparator: public class Comparator implements RecordComparator { public int compare(byte[] rec1, byte[] rec2) { String str1 = new String(rec1), str2 = new String(rec2); int result = str1.compareTo(str2); if (result == 0) return RecordComparator.EQUIVALENT; else if (result < 0) return RecordComparator.PRECEDES; else return RecordComparator.FOLLOWS; } } Chng ta ci t interface ny bng cch cung cp hm int compare(byte[],byte[]). Hm ny tr v 3 gi tr c bit c nh ngha trc l:

117

Java Mobile

RecordComparator.EQUIVALENT RecordComparator.PRECEDES RecordComparator.FOLLOWS Khi , bt u qu trnh sp xp v x l d liu ta to ra mt i tng Comparator (lp c ci t RecordComparator) v mt RecordEnumeration:
// To i tng Comparator sp xp

Comparator comp = new Comparator();


// To i tng enum, tham s th nh l comparator

RecordEnumeration re = rs.enumerateRecords(null,comp,false);
// Duyt danh sch thng qua enum

while (re.hasNextElement()) { String str = new String(re.nextRecord()); ... } Lc ny hm compare trong lp Comparator s c dng lm c s sp xp cc record. Hm ny nhn vo hai tham s l hai mng byte (l 2 record dng so snh). int compare (byte[] r1, byte[] r2) Ty theo gi tr tr v ca hm m record r1 s c xp trc record r2, xp sau r2 hay 2 records c xem l bng nhau. Gi tr EQUIVALENT FOLLOWS PRECEDES ngha Record r1 v r2 c xem l bng nhau, thc cht lc ny r1 c xp trn r2 v khng c s thay i th t Record r1 c xem l ln hn r2 v s xp sau. Record r1 c xem l nh hn r2 v s xp trc. Bng 6.4 Cc gi tr hng sp xp record

118

Java Mobile

Lc ny, khi ta dng hm enumerateRecords() ca lp RecordStore, kt qu tr v s l mt tp hp (enum) c sp th t v ta c th thao tc trn tp hp ny mt cch bnh thng. Nguyn l sort thc cht cng kh n gin: i vi nhng record gm nhiu trng (compound record), khi chng ta c nhu cu ch search trn mt trng bt k th trc nht phi c trng ca 2 record cn so snh ra 2 bin trung gian. Sau vic so snh 2 records trn thc cht l vic so snh 2 bin trung gian. Ty theo nhu cu sort ta s gn gi tr tr v cho hm compare ca lp Comparator mt cch tng ng.

6.4. Lc record vi RecordFilter


Ngoi chc nng sp xp cc record, J2ME cn h tr chng ta cng c lc cc record. Phn va ri chng ta cp n vic sp xp cc record v a vo tp hp, qu trnh ny ng dng s sp xp tt c cc records c trong record store. Nu chng ta ch c nhu cu ly ra v sp xp cc record tha mn mt yu cu nht nh no (v d trng nm sinh trong record phi nh hn 1990) th ta phi dng thm cng c RecordFilter. Cng ging nh RecordComparator, RecordFilter l mt interface, khi ta c nhu cu lc record th ta phi ci t (implements) interface ny qua hm boolean matches(byte[] candidate). Hm matches(byte[] candidate) ny nu tr v gi tr true th record candidate s c mt trong RecordEnumeration, ngc li nu tr v gi tr false th record s b loi. Gi s ta c bi ton lc theo nm sinh nh sau: Trong mt record s c hai trng, trng HoTen c lu di dng String UTF8 v trng nm sinh lu di dng integer. Ta cn ly ra danh sch nhng ngi sinh trc nm 1990. Bi ton c gii quyt nh sau: public class YearFilter implements RecordFilter{ private int Year=1990;

119

Java Mobile

public boolean matches(byte[] candidate) { String HoTen; Int NamSinh; ByteArrayInputStream strm=new ByteArrayInputStream(candidate); DataInputStream dataStrm=new DataInputStream(strm); Hoten=dataStrm.readUTF(); NamSinh=dataStrm.readInt(); return (NamSinh<Year) ? true:false; } } public class MIDletApp extends MIDlet { MIDletApp{ YearFilter filter=new YearFilter; RecordEnumeration enum=rs.enumerateRecords(filter,null,true); while (enum.hasNextElement()) {
//Xut danh sch cc c nhn tha yu cu

} }

120

Java Mobile

6.5. Nhn thng ip khi Record Store thay i


i khi chng ta c nhu cu cn c thng bo mi khi cc records trong record store b thay i, xa hay c thm vo. phc v cho nhu cu ny, J2ME cung cp cho chng ta interface RecordListener. Interface ny hot ng tng t cc interface chng ta cp n trong phn RMS ny. Khi lp ng dng ca ta ci t interface ny, nu c s bin i no trn cc records ca b record store chng ta s nhn c thng ip thng qua cc hm recordAdded(), recordChanged() v recordDeleted(). Phng thc void recordAdded(RecordStore recordStore, int recordId) recordId) void recordDeleted(RecordStore recordStore, int recordId) ngha c gi khi c mt record c thm vo record store thay i ni dung. c gi khi mt record b xa khi record store. Bng 6.5 Lp RecordListener Cc hm s kin trn u c hai tham s: RecordStore recordStore: cho bit record store no b thay i. int recordID: cho bit ID ca record b thay i

void recordChanged(RecordStore recordStore,int c gi khi c mt record b

121

Java Mobile

6.6. X l li khi thao tc vi Record Store


Hng Sun t ra tng cng 5 exceptions dnh ring cho vic x l RMS. Tt c cc exception ny u k tha t lp java.lang.Throwable, sau y l danh sch cc exception trn v ngha ca chng: InvalidRecordIDException: c dng thng bo ngi dng truy xut n RecordID khng hp l. V d nh khi hm RecordStore.getRecord(int ID) c gi v tham s ID bng 0 th exception ny s pht sinh. Constructor: public InvalidRecordIDException(String message) public InvalidRecordIDException() RecordStoreException: Mt exception dng chung chung, c pht sinh khi c li xy ra do truy xut record store. Constructor: public RecordStoreException() public RecordStoreException(String message) RecordStoreFullException Thng bo record store y: v d khi gi hm RecordStore.add Record(byte[],int,int) thm mt record, nu record ny t n dung lng ti a s pht sinh exception dng ny. Constructor public RecordStoreFullException() public RecordStoreFullException(String message)

122

Java Mobile

RecordStoreNotFoundException Thng bo tn ca record store khng tn ti. V d khi ta gi hm RecordStore.deleteRecordStore (String) vi mt tn khng tn ti th exception ny s pht sinh. Constuctor: public RecordStoreNotFoundException() public RecordStoreNotFoundException(String message) RecordStoreNotOpenException c pht sinh khi ta thc hin mt s cng vic truy vn trn record store nh thm record, xa record, m s record m record store cha c m trc Consturctor public RecordStoreNotOpenException() public RecordStoreNotFoundOpen(String message)

123

Java Mobile

Chng 7: Kt ni mng vi Generic Connection Framework (GCF)

7.1. Gii thiu GFC


Trong b J2SE v J2EE chng ta thc hin cc cng vic lin quan n truy xut ti nguyn mng qua hai packages chnh l: java.io v java.net. Vi kch thc hn 200 kbytes v bao gm hn 100 lp v interfaces, cch thc truy xut thng qua hai gi io v net ny vt qu kh nng ca thit b J2ME. Ngoi ra, trong b J2EE v J2SE ny, nh pht trin cn ch trng nhiu n cc phng thc mng v h thng file system trong khi thit b J2ME li khng quan tm nhiu n cc vn ny. V cc l do trn, b th vin Generic Connection Framework (GCF) c pht trin v nhm n cc thit b di ng J2ME. Cc nh pht trin khng a ra mc tiu pht trin mt b th vin cung cp cc lp, phng thc hon ton mi m h mun a ra mt b th vin con ca cc th vin c pht trin kh tt trn mi trng J2SE v J2EE. B th vin con ny s c mt s thay i nh thch ng vi cc hn ch trn thit b di ng ci t MIDP.

7.2. Lc lp
Mc tiu chung c ra l chng ta cn c mt lp chnh: lp Connector. Lp ny s c kh nng to cc loi kt ni khc nhau: http, datagram, file Phng thc m kt ni s c dng: Connector.Open("protocol:address;parameters"); V d: Connector.Open("http://www.some_web_address.com"); Connector.Open("socket://someaddress:1234"); Connector.Open("file://testdata.txt");

124

Java Mobile

Lc ny GCF cho thy kh nng linh hot ca mnh. Ty theo cc protocol khc nhau m mt kt ni loi tng ng s c m v tr li cho ngi dng. Lp Connector s tm kim cc lp ci t cho loi protocol c yu cu, vic ny c thc hin thng qua phng thc Class.forName(). V d khi c mt yu cu m kt ni HTTP, lp Connector s thc thi hm: Class.forName(com.sun.midp.io.j2me.http.Protocol); Sau khi kim tra, nu lp ny tn ti th ngi dng s c tr li mt i tng ci t (implements) interface Connection v cc thao tc truy cp s c thc hin thng qua i tng ny. Lp Connector v interface Connection c nh ngha trong CLDC. Lc cc lp trong th vin:

Hnh 7.1 Lc cc lp trong th vin GCF Thc cht CLDC ch cung cp cc nh ngha cho cc interface. Qu trnh ci t (implement) cc protocols c thc hin trong Profiles. V d, trong MIDP 1.0 lp HTTPConnection s ci t (ch mt phn) b giao thc HTTP 1.1. Lp

125

Java Mobile

HTTPConnection ci t interface ContentConnection v c hn 20 phng thc h tr ngi dng tng tc vi giao thc HTTP. Mc d DatagramConnection c biu din trn lc nhng MIDP 1.0 ch yu cu bt buc h tr giao thc HTTP. Cc nh pht trin c th h tr thm cc giao thc khc nhng iu ny khng bt buc. Trong MIDP 2.0, chng ta c h tr cc phng thc kt ni thng qua TCP v UDP. Tuy nhin, phn ny chng ta ch trng n vic kt ni thng qua HTTP, y l yu cu bt buc vi cc thit b MIDP. Sau y l danh sch cc lp,interfaces v hm chnh trong b GCF: Connection (public abstract interface Connection) public void close() InputConnection (public abstract interface InputConnection extends Connection) public InputStream openInputStream() public DataInputStream openDataInputStream() OutputConnection (public abstract interface OutputConnection extends Connection) public OutputStream openOutputStream() public DataOutputStream openDataOutputStream() StreamConnection ContentConnection StreamConnection) public long getLength() public String getEncoding() public String getType() HttpConnection (public interface HttpConnection extends ContentConnection) //Hn 20 phng thc h tr truy cp HTTP Connector (public class Connector) (public (public abstract abstract interface interface StreamConnection ContentConnection extends extends InputConnection, OutputConnection)

126

Java Mobile

public static Connection open(String name) public static Connection open(String name, int mode) public static Connection open(String name, int mode, boolean timeouts) public static DataInputStream openDataInputStream(String name) public static DataOutputStream openDataOutputStream(String name) public static InputStream openInputStream(String name) public static OutputStream openOutputStream(String name)

7.3. Kt ni HTTP:
Trong MIDP 1.0, phng thc duy nht bo m c ci t l HTTP. Thng qua lp HttpConnection chng ta c th lin lc vi web server hoc mt thit b c h tr HTTP. HTTP c xem nh mt giao thc dng yu cu/phn hi. My client s gi mt yu cu n server (a ch server c nh ngha theo c t Uniform Resource Locator (URL)) v mt phn hi s c pht sinh t pha server gi tr cho client. y cng chnh l cch thc lin lc gia cc trnh duyt web v web server. 7.3.1. Khi to kt ni: Lp Connector c 7 phng thc khi to kt ni vi server. Lp: javax.microedition.io.Connector Phng thc static Connection open(String name) static Connection open(String name, int mode) static Connection open(String name, int mode, boolean timeouts) M t To connection dng READ_WRITE. To connection vi mode c ch nh r (c cp bng sau). To connection vi mode c ch nh, x l exception timeouts (c cp phn sau)

127

Java Mobile

static InputStream openInputStream (String name) static OutputStream openOutputStream (String name) static DataInputStream openDataInputStream (String name) static DataOutputStream (String name)

To mt input stream cho connection To mt output stream cho connection To mt data input stream cho connection To mt data output stream cho connection

Bng 7.1 Lp Connector C 3 modes c h tr khi ta to mi mt connection: javax.microedition.io.Connector Mode READ_WRITE READ WRITE ngha Connection h tr c c ln ghi d liu Connection ch cho php c d liu xung Connection ch h tr vic ghi d liu. Bng 7.2 Mode Kt Ni Trong 7 phng thc trn c 3 phng thc open() khc nhau: Phng thc u tin ch i hi a ch ca server, phng thc th hai cho php ngi dng chn kiu connection c h tr reading/writing. Phng thc cui cng cho php ngi dng ty chn c x l timeouts exception hay khng. Cc phng thc cn li dng m cc dng d liu c/ghi. Sau y l on lnh dng thit lp mt kt ni kiu ContentConnetion (y l interface ci t interface Connection v cha cc nh ngha cho lp HttpConnection, xin xem li lc bn trn): String url = "http://www.mydomain.com" ContentConnection connection = (ContentConnection) Connector.open(url);

128

Java Mobile

Chng ta khng thit lp mt i tng kiu Connector m dng hm static open() to mt connection. Kt qu tr v l mt i tng Connection, ta c th p kiu v dng Connection chng ta mong mun ( y l ContentConnection). Sau ta c th to mt InputStream t connection ny phc v vic c d liu: InputStream iStrm = connection.openInputStream();
// ContentConnection h tr phng thc getLength

int length = (int) connection.getLength(); if (length > 0) { byte imageData[] = new byte[length];
// c d liu vo mng

iStrm.read(imageData);
}

Sau khi to thnh cng connection, ta c to cc dng d liu c/ghi da trn connection ny. Interface ContentConnection cn h tr c phng thc getLenght() cho bit chiu di d liu hin hnh. Cu trc v phong cch thit k hng i tng ca Java h tr cho cc nh pht trin ng dng rt nhiu. Thm ch chng ta cn c th ly ra dng d liu Input m khng cn to i tng connection nh sau:
// To mt InputStream connection

String url = "http://www.mydomain.com/picture.png" InputStream iStrm = (InputStream) Connector.openInputStream(url); try { byte imageData[] = new byte[2500];
// c d liu vo mng

int length = iStrm.read(imageData); }

129

Java Mobile

Tuy nhin, cch tip cn va nu chng ta khng tn dng c phng thc getLength() ca interface ContentConnection. Vic chn la cch tip cn no l ty thuc vo hon cnh v s thch ca ngi lp trnh. n thi im ny chng ta ch mi khi to kt ni v c, ghi d liu m cha tn dng cc tnh nng lin quan n giao thc HTTP. HTTP l mt giao thc dng yu cu / phn hi: client gi mt yu cu (request), server s gi li mt thng ip phn hi. Tip theo chng ta s nghin cu nhng chc nng h tr giao thc HTTP. 7.3.2. Cc c im ca kt ni HTTP bng J2ME: Cc phng thc Yu Cu (Request): Mt yu cu t pha client gm 3 phn: phng thc request, header v phn thn (body). HttpConnection h tr ba phng thc request: GET, POST, HEAD. javax.microediton.io.HttpConnection Phng thc GET POST HEAD M t Thng tin yu cu c gi km URL Thng tin yu cu c gi theo mt stream ring bit. Gi tin yu cu truy vn thng tin v mt ti nguyn. Bng 7.3 Cc Request Method chnh C ba phng thc trn thng bo cho server bit client cn truy vn mt thng tin. Phng thc GET v POST khc nhau cch thng tin truy vn c gi ln server. Chng ta c th ch nh r phng thc s dng trong HttpConnection bng hm setRequestMethod(): HttpConnection http = null; http = (HttpConnection) Connector.open(url); http.setRequestMethod(HttpConnection.GET);

130

Java Mobile

javax.microediton.io.HttpConnection Phng thc void setRequestMethod (String method) hay Head void setRequestProperty (String key, t mt thuc tnh request (thng tin String value) String getRequestMethod () String getRequestProperty (String key) phn header) Ly phng thc request ang s dng Ly gi tr hin thi ca mt thuc tnh request (thuc phn header) Bng 7.4 Cc phng thc set/get Request Method S dng GET, phn thn ca yu cu c a vo chung trong URL. iu ny c gi l URL encoding. V d, chng ta c mt web form gm 2 trng color v font. Tn ca hai trng ny c t l userColor v userFont. Khi user chn gi tr cho hai trng ny, gi s ln lt l userColor = blue v userFont = courier v submit ln trang web http://www.mydomain.com/formscript th URL thc cht c dng nh sau: http://www.mydomain.com/formscript?userColor=blue&userFont=courier (du ? dng phn cch vng a ch trang v phn thng tin yu cu gi ln server). Sau , trang web trn server s dng cc hm ring tch vng thng tin yu cu v thc hin x l, sau s tr kt qu cho client. Vi phng thc POST, thng tin truy vn khng c ghp thm vo vng URL m c chuyn ln server trong vng BODY ca gi tin HTTP. Phng thc POST c hai u im so vi phng thc GET: Phng thc POST khng gii hn kch thc vng d liu request gi ln server, ngc li phng thc GET do gi d liu dng gn km vo URL nn khng th gi km d liu qu ln. POST gi d liu theo mt dng ring (trong phn BODY) nn khng th hin thng tin cho ngi dng thy trong URL. M t t phng thc request l Get, Post

131

Java Mobile

HEAD l mt phng thc gn ging vi GET. Client gi d liu ln server v nh km n vi URL. Tuy nhin, trong gi tin hi p ca server cho gi tin dng HEAD ny s khng c vng BODY. HEAD c dng ch yu ly thng tin v mt ti nguyn no trn server. V d, chng ta mun ly thng tin v ln cp nht mi nht ca mt tp tin trn server, do , trong gi tin tr li chng ta thc cht khng cn ni dung ca file trn (gi tin khng c vng BODY).
Ghi ch: Lun vn khng c mc tiu trnh by v giao thc HTTP m ch gii thiu HTTP nh mt phng thc kt ni c J2ME h tr, do phn l thuyt gii thiu v HTTP s rt hn ch. Nu ngi c mun tm hiu hn v HTTP c th tm c RFC 2616 v HTTP 1.1

Thng tin Header: Phn th hai ca mt gi tin yu cu t client l phn header. Giao thc HTTP nh ngha hn 40 trng header. Mt s trng thng dng nh Accept, Cache-Control, Content-Type, Expires, If-Modified-Since v User-Agent Header c t gi tr bng hm setRequestProperty() c cp bn trn. HttpConnection http = null; http = (HttpConnection) Connector.open(url); http.setRequestMethod(HttpConnection.GET); http.setRequestProperty("If-Modified-Since", "Mon, 16 Jul 2001 22:54:26 GMT"); Phn thn (Body): D liu c chuyn t client ln server thng qua phn body ca gi tin request. Nh cp, GET gp phn body vo URL cn POST gi phn body trong mt stream ring bit. Gi tin tr li ca Server:

132

Java Mobile

Khi client ng gi mt gi tin gm phng thc yu cu, phn header, phn body v gi n server, server c trch nhim phn tch gi tin, x l v hi p client. Phn hi p ca server cng gm 3 phn: status line, header v phn body. Status Line: Phn status line cho bit kt qu ca gi tin yu cu t pha client. Trong HttpConnection, chng ta c hn 35 m status hi p. HTTP chia cc m hi p ny thnh 5 mc ln: 1xx Thng tin 2xx M bo thnh cng 3xx Chuyn hng (redirection) 4xx Li t pha client 5xx Li ti server V d, HTTP_OK (m 200) thng bo yu cu t pha client c x l thnh cng. Khi gi gi tin hi p (response), server thng gi c version ca giao thc km theo status line. y l mt s v d v status line: HTTP/1.1 200 OK HTTP/1.1 400 Bad Request HTTP/1.1 500 Internal Server Error Khi c m status, ta c hai la chn: ly v m hay cu thng bo: http.getResponseCode( ); http.getResponseMessage( ); Header: Cng tng t nh client, gi tin tr v ca server cng bao gm phn header. Phn header bao gm nhiu cp Key Gi tr c th c truy xut thng qua nhiu cch:

133

Java Mobile

javax.microedition.io.HttpConnection Phng thc String getHeaderField(int n) String getHeaderField(String name) long getHeaderFieldDate(String name,long def) int getHeaderFieldInt (String name, int def) String getHeaderFieldKey (int n) long getDate( ) long getExpiration( ) long getLastModified( ) M t Ly gi tr 1 trng header theo index Ly gi tr 1 trng header theo tn Ly trng c tn name, tr v gi tr kiu long Ly trng c thn name, tr v gi tr kiu int Ly tn trng da theo ch s ca trng Ly trng date Ly trng expires Ly trng last-modifed

Bng 7.5 Cc phng thc truy vn HTTP Header Xt mt v d, gi s trong vng header ta c mt cp kha/gi tr nh sau: content-type=text/plain (content-type l mt trng c HTTP nh ngha, text-plain ch gi tr tr v c dng text n thun). Chng ta gi s thm trng content-type ny l trng u tin (index=0) trong vng header. ly gi tr ca trng ny ta c nhng cch sau: http.getHeaderField(0); // "text-plain" http.getHeaderField("content-type"); // "text-plain" http.getHeaderFieldKey(0); // "content-type" Phn thn (Body): Phn thn l d liu gi t server tr v cho client. Chng ta khng c mt phng thc c bit no c phn body m cch thng dng nht l c phn body ny thng qua mt stream. Chng ta xt mt v d download mt file text t server:

134

Java Mobile

Trong v d ny, chng ta s to mt MIDlet yu cu ni dung mt file t pha server. URL ca file trn c dng: url= http://localhost/getHeaderInfo.txt; u tin chng ta cng s khi to kt ni: HttpConnection http = null; .
//To kt ni

http= (HttpConnection) Connector.open(url); ng dng Client s tri qua mt s bc:


//Gi yu cu ln server: //1) Xc nh phng thc yu cu l GET

http.setRequestMethod(HttpConnection.GET);
//2) Gi cc thng tin header (khng bt buc phi c)

http.setRequestProperty(User-Agent, Profile/MIDP-1.0 Configuration/CLDC1.0");


//3) Gi d liu, v dng Get nn khng c phn body data

Sau chng ta phi x l phn thng tin tr v ca server ly ra ni dung file


//Thng tin tr v ca server //1) Ly status line:

System.out.println("Msg: " + http.getResponseMessage()); System.out.println("Code: " + http.getResponseCode());


// 2) Ly thng tin header:

if (http.getResponseCode() == HttpConnection.HTTP_OK) { System.out.println("field 0: " + http.getHeaderField(0));


...

System.out.println("key 0: " + http.getHeaderFieldKey(0));


...

System.out.println("content: " + http.getHeaderField("content-type"));


...

135

Java Mobile

// 3) Ly d liu (ni dung file)

String str; iStrm = http.openInputStream(); int length = (int) http.getLength(); if (length != -1) {
// c d liu vo mng nu c gi tr length

byte serverData[] = new byte[length]; iStrm.read(serverData); str = new String(serverData); }


// Nu khng c length, c tng byte

else { ByteArrayOutputStream bStrm = new ByteArrayOutputStream();


// Mi ln c ch c mt k t

int ch; while ((ch = iStrm.read()) != -1) bStrm.write(ch); str = new String(bStrm.toByteArray()); bStrm.close(); } System.out.println("File Contents: " + str); Sau khi c c ni dung file ta xut ra mn hnh console, nu l v d trn in thoi tht ta c th dng cc thnh phn ha cp cao xut ni dung.

136

Java Mobile

Ghi ch: y c mt vn c th gy kh hiu cho ngi c, xin hy theo di on code sau: http= (HttpConnection) Connector.open(url); http.setRequestMethod(HttpConnection.GET); http.setRequestProperty(User-Agent, Profile/MIDP-1.0 Configuration/CLDC-1.0"); System.out.println("Msg: " + http.getResponseMessage()); System.out.println("Code: " + http.getResponseCode()); Ban u chng ta dng hm Connector.open(url) to ra mt i tng kiu HttpConnection v khng c phng thc khi to trc tip i tng HttpConnection. Theo nh ngha ca hm open(url) th lc ny mt kt ni ln server c khi to, nhng sau ta mi t cc thng s v phng thc yu cu ( y l GET) v t cc gi tr headers. Nh vy iu ny c hp l hay khng v kt ni c khi to ri, ng ra cc thng s ny phi c t trc khi to kt ni! Tht ra vi interface HttpConnection, khi ta gi hm Connector.open(url) th kt ni cha c xc lp, ch khi no cc hm nh getResponseCode( ) hay getResponseMessage( ) c gi th kt ni mi tht s c thit lp, do ta t cc thng s sau khi gi hm open( ) vn hp l.

7.3.3. Thng s kt ni: Khi mt kt ni c thit lp, chng ta c h tr mt s hm ly cc thng tin v kt ni. javax.microedition.io.HttpConnection Phng thc String getFile( ) String getHost( ) int getPort( ) String getQuery( ) String getRef( ) String getURL( ) Ly tn file t URL Ly host t URL Ly port t URL Ly v chui truy vn (QueryString), ch h tr trong phng thc GET. Ly thnh phn tham chiu (reference portion) t URL (RFC 2396) Ly v ton b a ch URL Bng 7.6 Ly thng s kt ni M t

String getProtocol( ) Ly giao thc (protocol) t URL

137

Java Mobile

7.4. Kt ni socket Datagram (UDP)

Hnh 7.2 Kt ni UDP to lp kt ni Datagram ta s dng hai lp chnh l DatagramConnection (To kt ni) v Datagram (Cha d liu). Chui kt ni: {protocol}://[{host}]:[{port}] V d:
//to mt socket UDP server lng nghe trn port 1234:

String connectionString=datagram://:1234; DatagramConnection= (DatagramConnection) Connector.open(connectionString);


//to mt socket UDP client kt ni n socket server va to:

String connectionString=datagram://123.456.789.12:1234; DatagramConnection= (DatagramConnection) Connector.open(connectionString);

138

Java Mobile

Lp DatagramConnection: javax.microedition.lcdui.DatagramConnection Phng thc: int getMaximumLength() int getNominalLength() Datagram newDatagram( byte[] buf, int size) Datagram newDatagram ( byte[] buf, int size, String addr) Datagram newDatagram ( int size) Datagram newDatagram ( int size, String addr) void receive (Datagram dgram) void send (Datagram dgram) M t: Ly v kch thc ti a ca mt Datagram Ly v kch thc ti thiu ca mt Datagram To mi 1 datagram To mi 1 datagram To mi 1 datagram To mi 1 datagram Nhn datagram Gi datagram

Bng 7.7 Lp DatagramConnection Lp Datagram: Mt datagram tng trng cho mt UDP packet trong qu trnh gi/nhn thng qua UDP sockets. Lp datagram implements hai interfaces l DataInput v DataOutput nn ta c th s dng cc phng thc c/ghi thng thng trn lp ny. Lp Datagram: javax.microedition.lcdui.Datagram Phng thc: String getAddress() byte[] getData() int getLength() int getOffset() M t: Ly v a ch IP ca gi tin. Ly v ni dung gi tin. Ly v kch thc gi tin. Ly v Offset ca buffer ca gi tin (internal buffer).

139

Java Mobile

void reset() void setAddress (String addr) void setData (byte[] buffer, int offset, int len) void setLength (int len)

t con tr c/ghi v u buffer ca gi tin. t trc tip a ch IP ca gi tin. a ni dung vo gi tin. t kch thc gi tin. Bng 7.8 Lp Datagram

void setAddress (Datagram ref) t a ch IP ca gi tin theo 1 gi tin khc.

140

Java Mobile

7.5. Kt ni TCP socket

Hnh 7.3 Kt Ni TCP to lp kt ni TCP ta phi s dng 2 interfaces StreamConnectionNotifier v StreamConnection. To lp socket server: s dng lp StreamConnectionNotifier. String connectionString="socket://:98765"; StreamConnectionNotifier wellKnown = Connector.open(connectionString); Hoc String connectionString="serversocket://:98765"; StreamConnectionNotifier wellKnown = Connector.open(connectionString); Sau khi khi to socket server ta c th s dng hm StreamConnection acceptAndOpen() (tng t nh hm accept() trong lp trnh WinSock) to mt socket giao tip vi client kt ni ti.

141

Java Mobile

To lp socket Client: String connectionString="socket://server.foo.com:98765"; StreamConnection conn=Connector.open(connectionString); Interface StreamConnection implements hai interface InputConnection v Interface d dng. J2ME cn cung cp lp SocketConnection k tha t lp StreamConnection phc v thm cho kt ni TCP. Lp SocketConnection: Lp SocketConnection: javax.microedition.lcdui.SocketConnection Mode: static byte DELAY static byte KEEPALIVE static byte LINGER static byte RCVBUF static byte SNDBUF M t: Thi gian delay trc khi gi gi tin. Thi gian cch nhau ca cc gi tin KeepAlive Thi gian timeout gi cc gi tin cn ng li khi gi hm close() Kch thc Receive Buffer. Kch thc Send Buffer. OutputConnection do ta c th s dng cc hm openDataInputStream() v openDataOutputStream() c v ghi d liu mt cc

Bng 7.9 Thuc tnh ca SocketConnection Lp SocketConnection: javax.microedition.lcdui.SocketConnection Phng thc: String getAddress() String getLocalAddress() int getLocalPort() M t: Ly a ch IP ca my ang kt ni n. Ly a ch IP my ni b. Ly port ca my ni b.

142

Java Mobile

int getPort() int getSocketOption(byte option) void setSocketOption(byte option, int value)

Ly port ca my ang kt ni n. Ly cc ty chn ca socket. t cc ty chn cho socket.

Bng 7.10 Lp SocketConnection

143

Java Mobile

7.6. Gi v nhn SMS


gi v nhn tin nhn SMS trong J2ME ta s dng b th vin Wireless Messaging API - k m hiu JSR 205 (xm thm v JSR trong phn ph lc). SMS (Short Message Service) l mt dch v v cng quan trng trong h thng thng tin di ng. Chu u, c tnh 40% cc ph dch v di ng do SMS mang li. Tnh nng SMS khng c h tr trong cc th vin gc ca J2ME m thng qua Wireless Messaging API (WMA), mt c im rt tin li ca WMA l n cho php bin thit b di ng thnh mt SMS server: chng ta c th vit chng trnh nhn v t ng x l tin nhn (t ng reply hoc chuyn tip n mt my khc). Chng ta c th khai thc th vin WMA qua ba interfaces chnh c nh ngha sn: Interface Message M t Interface ny tng trng cho mt tin nhn, hai lp k tha t interface ny l TextMessage v BinaryMessage. MessageConnection Interface ny tng trng cho mt kt ni gi/nhn message. Interface ny nh ngha sn cc hm rt hu ch nh newMessage() to mt tin nhn mi sn sng c gi i, receive() nhn tin nhn gi n. MessageListener C chc nng tng t nh CommandListener, MIDlet s implements interface ny c thng bo khi no c tin nhn gi n. Vic thng bo s c thc hin thng qua hm notifyIncomingMessage(). Bng 7.11 Cc interfaces chnh ca WMA

144

Java Mobile

Hnh 7.4 Lc lp th vin WMA Khi to kt ni SMS: khi to kt ni SMS ta cng s dng phng thc Connector.Open(String URL). Nu URL c dng sms://+18005555555, li gi hm s to mt kt ni SMS gi tin nhn n my 1-800-555-5555. Nu URL c dng sms://+18005555555:1234, li gi hm s to mt kt ni SMS gi tin nhn n s my 1-800-555-5555 ti port 1234. Nu URL c dng sms://:1234, li gi hm s to mt kt ni SMS server lng nghe cc tin nhn gi n ti port 1234. Chng ta hon ton c th dng mt kt ni SMS server gi tin nhn. Ghi ch: y chng ta gp mt khi nim tng i l lm l SMS port. Trong th vin WMA, chng ta c th thit lp port cho mi tin nhn chng ta gi i. Nu

145

Java Mobile

mt tin nhn SMS gi n mt my khc m trn my ny khng c port tng ng th tin nhn s c xem nh mt "inbox message" v s do chng trnh x l tin nhn mc nh trn thit b tip nhn. Khng c mt SMS server no to bi th vin WMA tip nhn cc tin nhn loi ny, cc tin nhn x l bi WMA thng l cc tin nhn gi vo cc port c qui nh trc. Gi tin nhn: gi tin nhn chng ta s dng kt ni MessageConnection: String addr = "sms://+123456789"; //Hocr: String addr = "sms://+123456789:1234"; MessageConnection conn = (MessageConnection) Connector.open(addr); TextMessage msg = (TextMessage) conn.newMessage( MessageConnection.TEXT_MESSAGE); msg.setPayloadText( "Hello World" ); conn.send(msg); Chng ta cng c th gi tin nhn t kt ni SMS server nh sau: MessageConnection sconn = (MessageConnection) Connector.open("sms://:3333"); TextMessage msg = (TextMessage) sconn.newMessage( MessageConnection.TEXT_MESSAGE); msg.setAddress("sms://+123456789:1234"); msg.setPayloadText( "Hello World" ); sconn.send(msg); Vic s dng SMS server gi tin nhn c mt s li im sau: Chng ta c th s dng li kt ni ny nhiu ln. Tin nhn gi i s c km s in thoi v port ca ngi gi Nhn tin nhn: Chng ta c th nhn tin nhn theo hai m hnh: blocking (phi to thread) v m hnh non-blocking (m hnh bt ng b).

146

Java Mobile

Vi m hnh mt chng ta s phi to mt thread dnh ring cho SMS server, v d nh sau: MessageConnection sconn = (MessageConnection) Connector.open("sms://:3333"); while (true) { Message msg = sconn.receive(); if (msg instanceof TextMessage) { TextMessage tmsg = (TextMessage) msg; String msgText = tmsg.getPayloadText(); // Construct the return message TextMessage rmsg = (TextMessage) sconn.newMessage( MessageConnection.TEXT_MESSAGE); rmsg.setAddress ( tmsg.getAddress() ); rmsg.setPayloadText( "Thanks!" ); sconn.send(rmsg); } else { // process the non-text message // maybe a BinaryMessage? } } Vi m hnh bt ng b chng ta phi implements MessageListener v s dng hm notifyIncomingMessage() nh sau: // Implements the MessageListener IF public class WMAasync extends MIDlet implements CommandListener, MessageListener { // Init a server connection and assign // a listener for it. public void startApp() { try { displayBlankForm (); sconn = (MessageConnection) Connector.open("sms://:"+serverPort); sconn.setMessageListener(this); } catch (Exception e) {/* process error*/} } // ... ... // Implement the message handler // method required in the MessageListener

147

Java Mobile

// interface. public void notifyIncomingMessage( MessageConnection c) { new Thread(new SMSHandler()).start(); return; } class SMSHandler implements Runnable { public void run () { try { Message msg = sconn.receive(); if (msg instanceof TextMessage) { TextMessage tmsg = (TextMessage) msg; String msgText = tmsg.getPayloadText(); // Construct the return message TextMessage rmsg = (TextMessage) sconn.newMessage( MessageConnection.TEXT_MESSAGE); rmsg.setAddress ( tmsg.getAddress() ); rmsg.setPayloadText( "Message " + msgText + " is received" ); sconn.send(rmsg); // Display mesgText } else {/* not a text mesg */} } catch (Exception e) {/* handle error */} } } }

148

Java Mobile

Phn 2 : Web Service v ng dng "ng K Hc Phn" Chng 8: Gii thiu Web Service

8.1. ng dng phn tn (Distributed Application)


8.1.1. Gii thiu

ng dng phn tn (Distributed Application) l mt hng nghin cu ang c ch trng trong nghnh cng nghip phn mm. Nhu cu cn hnh thnh nn nhng h thng phn tn xut pht t mt s l do: Chi ph: Vic u t cho nhng h thng x l ln rt tn km v vt qu kh nng ca nhiu t chc; ngoi ra vic tp trung tt c thng tin ti mt ni l mt nguy c tim tng v vic mt d liu nu xy ra s c. T hai yu t trn hnh thnh nhu cu phn tn d liu gim ri ro v tit kim chi ph. S hu thng tin: Thng tin c th nhiu dng, nhiu ngun v thuc s hu ca nhiu t chc khc nhau. Vic gom ht tt c cc thng tin quy v mt ni l bt kh thi, do vic phn tn thng tin l nhu cu nhng i khi cng l bt buc. an ton: i vi hu ht thng tin, yu cu u tin l phi truy xut c d dng. Tuy nhin, i vi nhng d liu quan trng v nhy cm, nhu cu bo mt thng tin li c a ln hng u. Ngy nay, p ng ng thi hai nhu cu trn, d liu ch yu c chia nh thnh nhiu phn ch khng c lu tr tp trung ti mt ni.

149

Java Mobile

T nhng nhu cu trn lm xut hin mt quan nim thit k phn mm mi v hnh thnh nn nhng h thng phn mm phn tn. Cc h thng phn mm phn tn ra i mang li nhiu li ch: Tng kh nng linh hot ca chng trnh, cho php chng trnh giao tip vi nhiu ngun DL khc nhau Tn dng kh nng tnh ton ca nhng h thng ln (Grid computing) Tng kh nng lin kt gia cc h thng phn mm hnh thnh nhng ng dng ln.

8.1.2.

Cc vn ny sinh trong h thng ng dng phn tn

Cc HH khc nhau s h tr nhng kiu d liu khc nhau. i khi, cc kiu d liu khng tng thch 100% vi nhau trn cc nn tng HH khc nhau. Khi pht trin cc ng dng phn tn, chng ta cn ch n vic ha hp d liu trn cc mi trng. Cc thnh phn ca mt ng dng phn tn thng nhiu ni khc nhau trn mng do kh nng pht sinh li thng cao hn bnh thng. Khi pht sinh li c th lm ton b ng dng ngng hot ng, do chng ta cn phi ch n vic pht sinh li v mt gi tin trong qu trnh hot ng. Nu server ca chng ta lu trng thi ca client, khi client b ngng t ngt chng ta phi c bin php thng bo cho server v thu hi nhng ti nguyn b chim gi. Khi mt hm c gi t xa, hm c x l nhng gi tin phn hi b mt trong mt s trng hp chng ta khng th gi li li gi hm mt ln na: v d khi ta t mua mt n t hng, n t hng c ghi nhn nhng gi tin phn hi b mt, ta khng th n thun gi li mt n t hng khc. D liu ca ng dng phn tn thng c gi qua li nhiu node trn mng do bo mt l mt trong nhng vn hng u cn gii quyt. Chng ta

150

Java Mobile

phi xem xt nhng vn v authentication, authorization, Denial of service, replay attacks Rt nhiu ng dng ph thuc vo s ng b thi gian ca client v server. V d nh mt thng bo t hng thnh cng khng th pht sinh trc khi n t hng c pht sinh. Do , vn v ng b thi gian trn clients v server cng phi c quan tm. 8.1.3. Hn ch ca nhng m hnh ng dng phn tn trc y

Trc y c nhiu hnh thc ng dng phn tn c ra nh: Distributed Component Object Model (DCOM), Java Remote Method Invocation (RMI), Common Object Request Broker Architecture (CORBA), tuy nhin hu ht cc hnh thc ny u tn ti mt s nhc im: Firewalls: Cc ng dng ny khi hot ng nhng h thng mng c che chn bi firewall u phi c s cho php ca nhng ngi qun tr firewall c ra ngoi. y l mt trong nhng l hng bo mt tim tng v kh c chp nhn bi nhiu t chc. S phi hp ca cc giao thc: Cc m hnh ny u c nhng c im v da trn nhng giao thc tng di khc nhau. Chng ta c th xy dng cc chng trnh chuyn i qua li gia cc m hnh ny nhng chc chn s dn n vic tht thot thng tin trong qu trnh chuyn i. Cc h thng ng dng phn tn c th i theo cc trng phi khc nhau dn n vic khng th lm vic chung. Vi nhng l do trn, nhu cu hnh thnh mt chun chung cho cc h thng ng dng phn tn tr nn mt nhu cu thit yu. S ra i ca Web Service, mt c t s dng h thng HTTP c chun ha lm nn tng, phn no gii quyt c nhu cu ni trn.

151

Java Mobile

8.2. Web Service


8.2.1. nh ngha

Mt Web service c nh ngha l mt tp cc phng thc c th c nh v thng qua a ch URL, cc phng thc ny c cng b trn h thng mng v c dng nh nhng khi c bn xy dng mt ng dng phn tn (Trch sch: Developing XML Web service using Microsoft Visual Studio .NET). Ni mt cch n gin hn, web service l tp hp cc phng thc c th c cc ng dng khc triu gi t xa (RPC- Remote Procedure Call) hnh thnh nn mt h ng dng phn tn.

8.2.2.

Thnh phn c bn ca Web service:

Cc thnh phn c bn nht ca web service bao gm HTTP, XML v SOAP (Simple Object Access Protocol). Vic pht trin nhng k thut ny c iu hnh bi t chc W3C (World Wide Web Consortium). Chng ta s cp n nhng k thut ny nhng phn sau.

8.2.3.

Hot ng ca Web service

Hnh 8.1 Hot ng ca Web Service

152

Java Mobile

Mt ng dng web service thng gm 2 phn: client v server. Client v server s giao tip vi nhau theo giao thc HTTP: ng dng client s gi nhng li gi hm n server thng qua cc gi tin HTTP request v kt qu thc thi hm s c server hi p thng qua cc gi tin HTTP response. SOAP: Cc thng ip s c nh dng theo chun giao thc SOAP (Simple Object Access Protocol). y thc cht cng ch l mt ngn ng c nh ngha bn trn ngn ng XML c sn. WSDL (Web Service Definition Language): y l file XML cha cc nh ngha v cc hm trong Web service tng ng. Cc nh pht trin ng dng s phi da vo ni dung file ny bit Web service h tr nhng hm ny v nhn nhng tham s tng ng, kt qu tr v nh th no. Nu chng ta pht trin Web service trong mi trng J2ME th khng nht thit phi hiu r cu trc v file WSDL, v trong b cng c Wireless Toolkit ca Sun cung cp sn cng c Stub Generator. Chc nng ca b cng c ny l c file WSDL v pht sinh thnh nhng lp java tng ng cho nh pht trin ng dng. UDDI(Universal Description, Discovery, and Integration): y l cng c gip cho nhng nh pht trin Web Service cng b nhng thng tin v web service ca mnh cho cng ng cc nh pht trin ng dng. Ngi dng s da vo nhng thng tin ny s dng web service trong ng dng ring ca mnh to thnh mt h ng dng phn tn. Mi quan h gia cc thnh phn SOAP,WSDL,UDDI c th c m t nh sau: Mt ng dng web service client cn s dng mt web service c t ti mt ni no trn h thng mng. Trc tin, client s truy vn n cc mu tin UDDI, c th theo tn, loi hay mt thng tin ring bit no . Khi xc nh c web service cn tm, client c th ly thng tin v a ch ca ti liu WSDL ca web service ny da trn mu tin UDDI. Ti liu WSDL s m t cch thc lin lc vi web service, nh dng ca gi tin truy vn v phn hi theo cng c

153

Java Mobile

m t bng XML schema. Da vo nhng thng tin ny client c th to nhng gi tin SOAP tng ng lin lc vi server. ng dng web service c th c ci t nhng mc cao hn nh nhng m hnh sau:

Hnh 8.2 Mt client truy xut n nhiu web services cng lc

154

Java Mobile

Hnh 8.3 Mt web service c th triu tp n cc web services khc 8.2.4. u im ca web service

Web service c nhiu u im hn so vi nhng m hnh ng dng phn tn ra i trc n. u im ny c cu thnh bi chnh nhng thnh phn to nn web service. Kh nng vt firewall: Web Service hot ng trn nn giao thc HTTP nn cng s dng lun port 80 dnh cho web. y l mt u th rt ln ca web service i vi cc phng thc gi hm t xa (RPC) khc; vi cc hnh thc c hn chng ta thng phi dng cc port t qui nh (ln hn 1024) dn n khng th hot ng mt s t chc v qun tr mng khng cho php vt qua firewall. Web service s dng port "well-known" 80, y l port hu nh tt c cc firewall u cho php i qua nn web service c th hot ng mi ni. Hot ng trn a mi trng: Web service da trn nn cng ngh XML, ti liu XML hin nay c h tr bi tt c cc H iu Hnh, k c trn mi trng di ng (v ch l nhng file text n thun). Do web service c th hot ng trn mi mi trng, c h tr bi hu nh mi ngn ng lp trnh. Tuy nhin chng ta cng phi tr gi cho iu ny: do truyn d liu di dng

155

Java Mobile

text nn tr ca web service s cao v chim dng bng thng cng nhiu hn so vi cc hnh thc chuyn d liu nh phn. Tnh linh hot, d chuyn i: Web service ch n thun chuyn d liu m khng km nhng tag nh dng nh ngn ng HTML. y l u im ca web service so vi cc trang web thng thng. Khi cn thm hay bt mt chc nng ca web service n thun l thm hay bt mt hm, chng ta khng phi xy dng li giao din nh vi trang web. Cc client khi nhn c tn hiu s ty vo nng lc ca mnh m th hin thng tin hp l, iu ny lm web service thc s linh hot hn trang web. Ngoi ra vic khng truyn i cc d liu nh dng lm gim i chi ph ng k trn ng truyn so vi trang web.

156

Java Mobile

8.3. Cc thnh phn chnh ca Web Service


Web service da vo kh nhiu cng ngh bn di nh HTTP, XML, SOAP, Mi cng ngh nu trn u c phm vi ng dng kh su rng v i hi nhiu thi gian tm hiu cng nh trnh by. Lun vn khng c tham vng trnh by cn k v tt c cc cng ngh trn m ch xin gii thiu nhng nt c bn v s lc v cc cng ngh chnh. Vic trnh by ny ch nhm mc ch cung cp cho ngi c ci nhn khi qut hn v web service, tuy nhin qu trnh pht trin ng dng web service thng thng khng i hi kin thc su v lnh vc ny v c rt nhiu cng c h tr v lp trnh vin c che i nhng cng vic phc tp bn di. 8.3.1. SOAP (Simple Object Access Protocol)

SOAP l mt giao thc n gin nhm mc ch trao i thng tin trong mi trng ng dng phn tn. SOAP da trn nn cng ngh XML v bao gm 2 thnh phn: Mt b th (envelope) qun l cc thng tin m rng v mang tnh iu khin. Mt chun m ha quy nh cch th hin thng tin trong envelope. SOAP c th c s dng kt hp vi cc giao thc chun khc nh SMTP,HTTP/HTTPS,FTP Tuy nhin hin nay ch mi c HTTP/HTTPS c xem nh giao thc chun trao i gi tin SOAP. Vic s dng SOAP nh mt giao thc trao i d liu chun khin web service c kh nng hot ng trn nhiu mi trng lp trnh khc nhau nh Java, .NET, Gi tin SOAP: Gi tin SOAP l mt phng tin giao tip mt chiu t ni gi n ni nhn. Gi tin SOAP c gi bn trong mt gi tin HTTP request hoc gi tin HTTP response. Gi tin SOAP gm 4 phn chnh:

157

Java Mobile

Phn b th SOAP envelope: nh ngha thng ip cha nhng g, ai nn x l thng ip, thng ip ny bt buc phi x l (mandatory) hay mang tnh ty chn (optional). Lut m ha: Quy nh cch thc chuyn i thng tin, cc kiu d liu trong ng dng. Phn SOAP RPC: m t nhng qui lut v cch thc gi hm t xa cng nh cch thc phn hi. Qui lut m t cch thc s dng gi tin SOAP vi cc protocol tng di (hin nay l HTTP). Cu trc gi tin SOAP: mt gi tin SOAP gm mt Envelope nh mt node gc trong vn bn XML, nt gc ny s cha node con Body v c th c hoc khng cha node con Header. SOAP Envelope: Phn Envelope l node gc ca gi tin SOAP di dng ti liu XML. Phn Envelope c th c hoc khng c phn Header nhng chc chn phi cha phn Body. y l mt v d v Envelope: <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> ... </SOAP-ENV:Envelope> Trong cc gi tin SOAP thng thng, phn Envelope khng mang nhiu ngha. N ch n thun bo hiu s bt u ca mt gi tin v nh ngha cc NameSpace cn thit s c s dng cc phn sau. SOAP Header:

158

Java Mobile

Phn SOAP Header s l node con u tin ca SOAP Envelope. Phn Header thng l ni c dng thm cc thng tin b sung phc v cho mc ch ring ca chng trnh. Cc thng tin thng c thm vo phn Header l authentication, authorization, qun l transaction Phn Header khng bt buc phi c trong mi gi tin SOAP. SOAP Body: Nu trong gi tin SOAP khng c node Header th node Body phi l node con u tin ca SOAP Envelope. Trong mc Body c th c nhiu node con, c gi chung l mu tin Body. Phn Body cha cc thng tin v li gi hm, v d nh tn hm cn gi, cc tham s u vo, gi tr tr v phc v cho vic gi hm t xa. y l mt v d hon chnh v n gin v vic s dng SOAP gi hm GetAccount(int accNumber) vi tham s truyn vo accNumber=1234. Gi tin SOAP c t trong gi tin HTTP Request c dng nh sau: POST /dummy/service1.asmx HTTP/1.1 Host: 192.168.0.80 Content-Type: text/xml; charset=utf-8 Content-Length: 215 SOAPAction: "http://woodgrovebank.com/GetAccount" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <GetAccount xmlns="http://woodgrovebank.com"> <acctNumber>1234</acctNumber> </GetAccount>

159

Java Mobile

</soap:Body> </soap:Envelope> Phn trn l ni dung gi tin HTTP Request dng POST, trong gi tin ny cha li gi n hm GetAccount(int accNumber) di dng mt gi tin SOAP. Vic hiu cu trc SOAP ch yu phc v cho vic debug ng dng hoc xy dng cc ng dng cn s can thip mc su n cc protocol bn di. i vi cc chng trnh thng thng him khi chng ta phi thao tc vi gi tin SOAP. y l ni dung gi tin SOAP phn hi cho li gi hm trn, ch ra kt qu li gi hm l 5250.00 HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: 247 <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <GetAccountResponse xmlns="http://woodgrovebank.com"> <savingsAcct> <balance>5250.00</balance> </savingsAcct> </GetAccountResponse> </soap:Body> </soap:Envelope> SOAP Fault:

160

Java Mobile

Nh cp, mt trong nhng vn t ra trong mi trng ng dng phn tn l kh nng xy ra li cao; do khi nim SOAP Fault c ra vn chuyn cc thng bo li trong qu trnh hot ng. HTTP/1.0 500 Internal Server Error Content-Length: 460 Content-Type: text/xml; charset="utf-8" <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/> <soap:Body> <soap:Fault> <faultcode>123XYZ</faultcode> <faultstring>Server Error</faultstring> <detail> <bank:faultdetails xmlns:bank="urn:OnlineBank"> <message>Your account is overdrawn</message> <errorcode>1234</errorcode> </bank:faultdetails> </detail> </soap:Fault> </soap:Body> </soap:Envelope> Soap Fault c nhng phn con nh faultcode, faultstring, faultactor, faultdetail cung cp nhng thng tin chi tit khi c li pht sinh. Trong nhng mi trng lp trnh cao cp nh Java, .NET, khi soap fault pht sinh th mt ngoi l (Exception) cng c pht sinh bo cho lp trnh vin c x l tng ng.

161

Java Mobile

8.3.2.

WSDL (Web Service Definition Language)

Khi chng ta xy dng hon thnh web service cn phi cung cp ti liu m t cc nh pht trin client c th s dng c web service trn. Ti liu m t web service cn m t c v tr web service, cc hm n cung cp, tham s km theo Ti liu WSDL l mt ti liu tha mn cc nhu cu trn. WSDL (Web Service Definition Language) l mt ngn ng da trn c php XML dng nh ngha mt web service. Ni cch khc, mt file WSDL nh mt ngi trung gian ng gia web service v ng dng web service client. Trong ti liu WSDL, chng ta s nh ngha cc phng thc c web service h tr, cc kiu d liu c x dng trong cc phng thc cng cc thng ip c trao i gia client v server ng vi mi phng thc. Chng ta ch phi nh ngha cc kiu d liu phc tp nh mng, cc lp c khai bo thm trong chng trnh, mng cc lp cn cc kiu d liu c bn nh int, string, float c h tr sn. Sau , chng ta gp chung cc nh ngha ny kt hp vi cc giao thc mng bn di hnh thnh mt end-point (tm dch l mt u cui).

Hnh 8.4 Web Service Endpoint

162

Java Mobile

Mt endpoint interface (gi tt l mt enpoint) gm c nhiu ports, mi port quy nh mt cch lin lc vi web service khc nhau ng vi mi giao thc bn di khc nhau. S kt hp ca web service vi mt giao thc mng nh th c gi l mt binding, nh trong hnh 8.4 chng ta thy c 3 binding khc nhau. Port 1 s dng SOAP/HTTP binding, Port 2 s dng SOAP/HTTPS binding, Port 3 s dng cc dng binding khc. Nh vy ng vi web service trn, ta c n 3 phng tin khc nhau triu gi cc hm. Cc hnh thc binding thng dng nht hin nay vn l SOAP/HTTP POST v SOAP/HTTPS (h tr bo mt thng qua SSL). Vic pht sinh file WSDL s c t ng thc hin bi cc b cng c (nh Visual Studio .NET) do chng ta khng nht thit phi hiu r cu trc file WSDL. Tuy nhin, nu hiu cu trc file WSDL s cung cp cho chng ta thm nhiu ty bin cng nh kh nng sa li (debug) tt hn. Cu trc file WSDL: Mt ti liu WSDL thc cht ch l mt danh sch cc nh ngha. Trong mt file WSDL, phn t gc c t tn l "definitions". Phn t ny cha nm phn t con chnh nh ngha web service. Th t xut hin ca cc phn t con ny: Phn t "types": nh ngha cc kiu d liu dng trao i gia client v server (ch nh ngha cc kiu d liu phc tp nh structure, class). Phn t "message": nh ngha cc thng ip c trao i. Phn t "portType": nh ngha mt tp cc chc nng web service h tr v thng ip tng ng i vi mi chc nng . Phn t "binding": Sau khi nh ngha cc port, ta cn ch r rng buc gia cc ports ny v cc giao thc tng di. Phn t binding s m nhim chc nng ny (s c cp k hn phn sau). Phn t "service": C tc dng gom cc ports nh ngha thnh tng nhm.

163

Java Mobile

hiu r hn v file WSDL chng ta s cng tm hiu mt v d chnh thc ca hng Microsoft (ebook Developing XML Web Service Using Microsoft Studio .NET): public class Acct { public string description; public string number; public string type; public decimal balance; [XmlAttribute("status")] /*ch r status l mt attr ch khng phi node con.*/ public string status; } public class TheBank { [WebMethod] /* Phn [WebMethod] bo hiu y l hm c export bi web service cho php truy cp t xa. iu ny s c trnh by r hn phn xy dng web service bng Visual Studio .NET */ public Acct GetAccount(string acctNumber) { Acct a = new Acct(); a.description = "Adam's savings acct"; a.balance=10000.0M; a.number="1234-XX"; a.status="active"; a.type="SV";

164

Java Mobile

return a; } } y l mt on code kh n gin, ta nh ngha mt lp Acct v cung cp mt phng thc ly v mt Account, tham s truyn vo c kiu string. Chng ta s xem xt qua cu trc cc phn t va nu i vi web service trn. 8.3.2.1. Phn t types:

Cc quy tc nh ngha trong phn t types u tun theo chun XML Schema Definition Language (XSD). Tham s acctNumber c nh ngha nh sau: ... <types> ... <s:complexType> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="acctNumber" nillable="true" type="s:string" /> </s:sequence> </s:complexType> ... </types> Phn nh ngha lp Acct (kt qu tr v ca hm GetAccount) s phc tp hn: <s:complexType name="Acct"> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="description" type="s:string" /> <s:element minOccurs="1" maxOccurs="1"

165

Java Mobile

name="number" type="s:string" /> <s:element minOccurs="1" maxOccurs="1" name="type" type="s:string" /> <s:element minOccurs="1" maxOccurs="1" name="balance" type="s:decimal" /> </s:sequence> <s:attribute name="status" type="s:string" /> </s:complexType> Da vo nh ngha trn, mt i tng thuc lp Acct c th c th hin nh sau: <?xml version="1.0" encoding="utf-8"?> <account status="active"> <description>Adam's savings acct</description> <number>1234-XX</number> <type>SV</type> <balance>10000</balance> </account> Sau chng ta phi nh ngha cu trc cc thng ip c trao i trong qu trnh gi hm v nhn kt qu. Ta tun theo mt quy tc: cu trc gi tin request (li gi hm) s c tn trng vi tn hm, cu trc gi tin response s c tn l tn hm cng vi Response cui. <s:element name="GetAccount"> <s:complexType> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="acctNumber" nillable="true"

166

Java Mobile

type="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="GetAccountResponse"> <s:complexType> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="account" type="s0:Acct" /> </s:sequence> </s:complexType> </s:element> Trn y l ton b ni dung phn types. 8.3.2.2. Phn t message:

Bn cnh vic nh ngha cc kiu d liu c truyn gia client v server ta cn phi nh ngha cc thng ip c truyn i v hi p. Bi v cc thng ip khng ph thuc vo cc giao thc tng di nn cc thng ip c th c nh ngha di dng HTTP-GET/POST, SOAP hay bt k mt protocol no h tr Web Service. Chng ta c th t tn bt k cho thng ip v web service khng a ra mt rng buc cng nh quy tc t tn no c. Cc phn t message c th cha nhiu phn t con "part" (cng c khi khng cha phn t con no). Mt phn t "part" tng trng cho mt tham s c truyn trong hm. Mt phn t part phi c mt tn v kiu d liu tng ng c nh ngha. i vi v d trn th phn t message c dng nh sau: <message name="GetAccountIn"> <part name="parameters" element="s0:GetAccount" /> </message>

167

Java Mobile

<message name="GetAccountOut"> <part name="parameters" element="s0:GetAccountResponse" /> </message> y ta gp li cu trc GetAccout v GetAccountResponse nh ngha phn types. Theo nh nh ngha trn, thng ip u vo GetAccountIn nhn mt tham s c kiu GetAccount v thng ip u ra GetAccountOut tr v mt kt qu c kiu GetAccountResponse; c hai kiu ny c nh ngha phn t types trc . Cc message c nh ngha ny s c dng phn sau. 8.3.2.3. Phn t portType:

Ta c th ni mt cch n gin nh sau: phn t types nh ngha cc kiu d liu, phn t message nh ngha tt c cc thng ip (hay cng c th gi l gi tin) vo/ra nhng li cha th hin c thng ip no l ca phng thc no, vai tr ny do portType m nhn. <portType name="BankService"> <operation name="GetAccount"> <input message="s0:GetAccountIn" /> <output message="s0:GetAccountOut" /> </operation> </portType>
Chng ta c th nhn thy, cc t kha input v output c dng ch r gi tin request v gi tin response.

Phn nh ngha portType trn cng kh n gin, i vi hm GetAccount ( ) s c hai thng ip: Thng ip input: Li gi hm t client gi ln server, c tn GetAccountIn. Nu c ngc ln phn t message, ta s thy thng ip

168

Java Mobile

GetAccountIn s c kiu GetAccount, v kiu d liu GetAccount c nh ngha trong phn t types. Thng ip output: Kt qu tr v c gi t server n client, c tn GetAccountOut. Tng t, phn t message cho chng ta bit thng ip GetAccountOut s c kiu GetAccountResponse v kiu ny c nh ngha trong phn types.

8.3.2.4.

Phn t binding

Cc phn t chng ta xem xt qua c trch nhim nh ngha web service mt cch tru tng: chng cho bit cc phng thc c web service h tr, cc thng tin km theo nh tham s truyn vo, kt qu tr v ca mi phng thc. Tuy nhin, vi nhng thng tin trn chng ta cha xc nh c s phi dng cng c no truy xut n web service ny: ta s dng SOAP kt hp vi HTTP hay SOAP/HTTPS hay cng c no khc? Phn t binding s nh ngha cch thc truy cp web service thng qua cc protocols bn di. Mi phn t binding s m t cch thc lin kt mt portType vo mt protocol nht nh. Nu web service ca chng ta h tr nhiu protocol th phi to cho mi protocol mt phn t binding. <binding name="BankService" type="s0:BankService"> <soap:binding transport = "http://schemas.xmlsoap.org/soap/http" style="document" /> <operation name="GetAccount"> <soap:operation <input> <soap:body use="literal" /> </input> soapAction = http://woodgrovebank.com/GetAccount style="document" />

169

Java Mobile

<output> <soap:body use="literal" /> </output> </operation> </binding> on v d trn cho bit web service s dng SOAP l protocol trao i thng tin v gi tin soap s c vn chuyn bng HTTP, chng ta c th s dng nhiu cng c khc truy xut n cc hm ca web service nhng SOAP hin nay l thng dng nht. on nh ngha trn cn ch r document/encoding style c s dng l dng document/literal (cn c mt dng khc kh ph bin l rpc/encoded; hin ti j2me ch h tr web service dng document/literal).

8.3.2.5.

Phn t service:

Phn cui cng ca file WSDL cha nh ngha cc thng s vt l c th dng truy xut n web service. <service name="BankService"> <port name="BankService" binding="s0:BankService"> <soap:address location = "http://www.woodgrovebank.com/Bank/BankService.asmx"/> </port> </service> Gi tr location trong phn t port ch r v tr t web service. Phn t binding cho bit cch thc nh x cc phng thc trong phn t portType thnh cc gi tin SOAP (hoc gi tin ca cc protocols khc) nhng khng cho bit lm th no to c mt i tng portType. y l nhim v ca phn t port, phn t port s nh x mt phn t portType sang mt a ch URI c th. Node

170

Java Mobile

service s gom nhm cc port lin quan n nhau. Nu web service c th c truy xut n bi nhiu protocol th s c nhiu phn t port c nh ngha. Trn y l ton b ni dung ca mt file WSDL, c kh nhiu im phc tp. Tuy nhin, vi vai tr l ngi s dng web service cng nh ngi xy dng web service n thun chng ta khng cn nm r cu trc file ny v c cc cng c h tr. C J2ME v Visual .NET u h tr cng c c file WSDL pht sinh cc lp tng ng phc v cho vic truy xut hm t xa, mi cng vic phc tp bn di c giu i vi nh pht trin ng dng.

171

Java Mobile

Chng 9: ng dng ng k hc phn


9.1 c t chng trnh:

9.1.1 Tng quan: Chng trnh h tr cc chc nng ng k hc phn, xem thi kho biu, xem im thi chy trn mi trng in thoi di ng. Sau khi ci t chng trnh ln in thoi v ng k dch v truy cp Internet t in thoi, ngi dng c th s dng hu ht cc tin ch tng t h thng SMS m khng cn c my tnh kt ni Internet nh hin nay. Ngoi J2ME, chng trnh cn s dng cng ngh WebService trong kt ni mng. Vn bo mt trong chng trnh tng i khng cn thit, ch s dng trong qu trnh gi password khi ng nhp nhm trnh vic nh cp password. Chng trnh c thc hin vi mc tiu m phng lp trnh trn thit b di ng bng J2ME nn ch s dng c s d liu t xy dng. Vic ng dng thc t trn c s d liu chnh ca h thng SMS l hng m rng trong tng lai ca chng trnh. 9.1.2 Cc chc nng chnh: Khi ngi dng khi ng ng dng client, chng trnh yu cu ngi dng ng nhp vi account, password ca h thng SMS. Nu ng nhp khng hp l ngi dng phi nhp li account/password ng nhp li. Nu ng nhp hp l, ngi dng c th truy cp h thng v s dng cc chc nng sau ca chng trnh. 9.1.2.1 Xem thi kho biu: Ngi dng nhp tn v s th t lp (vd:Lp TH2001 STT:1) xem thi kho biu ca hc k hin ti ca lp tng ng.

172

Java Mobile

9.1.2.2

ng k hc phn: Trong thi gian c ng k, ngi dng c th ng k cc hc phn

l thuyt cng nh hc phn thc hnh m trng m trong hc k ny.

9.1.2.3

Xem phiu ng k: Xem li cc hc phn l thuyt v thc hnh m ngi dng thc hin

ng k.

9.1.2.4

Xem im thi: Xem kt qu hc tp ca sinh vin .

9.1.2.5

Xem thng bo:

Xem thng bo ca gio v khoa.

173

Java Mobile

9.2

Kin trc chng trnh:

9.2.1 M hnh kt ni:

HTTP request/ response Gateway

GPRS

Internet

.NET

Web Server Store Procedures

J2ME / JSR172 Client

SQL Server

DB Server

Hnh 9.1 Kin trc chng trnh ng dng ng dng MIDlet chy trn in thoi di ng ng vai tr 1 client. Client ny sau khi ng k s dng dch v internet cho in thoi s c kh nng kt ni n server. Client c vit bng J2ME ng gi thnh DKHP.jar v DKHP.jad. Server l chng trnh vit bng .NET chy trn HTTP server, khng c giao din. Server s trao i thng tin vi Database server thng qua cc Store procedure. C s d liu xy dng trn SQL Server. M hnh hot ng:

174

Java Mobile

in thoi s ch ng kt ni v gi gi tin n web server. Gi tin s c gi di dng sng GPRS n trm in thoi, trch nhim ca nh cung cp in thoi s phi chuyn tn hiu t dng sng GPRS sang dng tn hiu truyn trong ng truyn hu tuyn internet. Lc ny nh cung cp dch v di ng s hot ng nh mt gateway, lm trung gian lin lc cho thit b di ng v web server. Gi tin c in thoi di ng gi n web server l nhng gi tin HTTP request v ngc li web server s hi p bng nhng gi tin HTTP response. Cc gi tin HTTP request v HTTP response ny s cha bn trong cc thng ip SOAP request v SOAP response tng ng. Cc gi tin SOAP chnh l trung tm ca k thut web service, cc thng ip SOAP ny s cha cc li gi hm, tham s truyn i, cc tham s tr v to thnh m hnh truy xut hm t xa RPC (Remote Procedure Call). Khi web server nhn c yu cu x l t in thoi (th hin qua cc li gi hm) s truy xut v giao tip vi SQL Server qua cc store procedure thc hin cc x l nghip v ca chng trnh. Thng tin sau khi c s l s c gi tr cho client thng qua cc HTTP response. Cc gi tin HTTP response ny s n nh cung cp dch v di ng, chuyn thnh dng tn hiu GPRS v v n client. Trn y l m hnh khi qut hot ng ca ng dng trong bi cnh mng in thoi di ng. Yu cu duy nht ca thit b phn cng l in thoi phi h tr GPRS v th vin JSR 172. Th vin JSR 172 c chc nng to cc thng ip SOAP v phn tch ni dung cc thng ip ny, nu khng c th vin ny chng ta khng th to cc li gi hm cng nh ly cc kt qu tr v t hi p ca server.

175

Java Mobile

9.2.2 M hnh bo mt (m ho password): S dng thut ton DES, dng kho i xng m ho password trong chng trnh.

Same Private Key

Encrypted Session Key

Encrypted Data

Same Session Key

Same Session Key

Hnh 9.2 M hnh m ho password

176

Java Mobile

9.3

Phn tch - thit k:

9.3.1 M hnh use case: 9.3.1.1 Lc chnh:

Hnh 9.3 Lc use case 9.3.1.2 STT 1 2 Dang nhap Dang ky ly thuyet Danh sch cc use case: Use case ngha ng nhp h thng ng k cc hc phn l thuyt

177

Java Mobile

3 4 5 6 7

Dang ky thuc hanh Xem phieu dang ky Xem ket qua hoc tap Xem thoi khoa bieu Xem thong bao

ng k cc hc phn thc hnh Xem phiu ng k hc phn Xem kt qu hc tp ca sinh vin Xem thi kho biu ca lp hc Xem thng bo ca gio v khoa

Bng 9.1 Danh sch cc Use Case 9.3.2 c t mt s use case chnh: 9.3.2.1 ng nhp:

M t: H tr ngi dng ng nhp vo h thng. Tc nhn kch hot: ngi dng. Lung s kin chnh: o Chng trnh client yu cu ngi dng nhp account (MSSV), password. o Ngi dng nhp thng tin theo yu cu. o Client gi yu cu n server. o Server pht sinh mt s ngu nhin (8 bytes), sau m ho bng mt m (kho i xng m server v client chn t trc) bng thut ton DES thnh session key v gi v cho client. o Client dng kho b mt gii m session key ny to li s ngu nhin tng ng m server to. Sau , client dng s ngu nhin va tm c m ho password gi km account n server. o Server nhn hai gi tr ny t client, truy cp c s d liu ly password ca account tng ng. Sau , dng session key m ho password trong c s d liu v so snh kt qu vi password c m ho nhn t client. Nu hp l, tr v client gi tr true, nu khng, tr v false. o Client nhn kt qu t server. iu kin sau: tu theo kt qu tr v t server,

178

Java Mobile

o nu l false, thng bo ng nhp khng hp l, ngi dng phi ng nhp li s dng chng trnh. o nu l true, ngi dng ng nhp hp l, hin th menu chc nng chng trnh cho ngi dng s dng.

9.3.2.2

ng k l thuyt:

M t: Cho php ngi dng ng k cc hc phn l thuyt c m trong hc k ny. Tc nhn kch hot: ngi dng Lung s kin chnh: o Ngi dng chn chc nng ng k l thuyt. o Client gi yu cu n cho server. o Server ly danh sch tt c cc hc phn c m trong hc k ny, c nh du cc hc phn ngi dng ng k trc , tr v cho client. o Client hin th danh sch ln cho ngi dng, ngi dng chn cc mn mun ng k hoc hiu chnh li ng k c. o Ngi dng nhn nt ng k, client ly danh sch cc mn mi c ng k v cc mn va c ngi dng g b gi cho server. o Server truy cp c s d liu, xo cc ng k thc hnh ng k trong hc k ny. Sau xo cc ng k l thuyt c c g b v ghi cc ng k l thuyt mi. Lung s kin ph: Sau khi ht use case ng k l thuyt, use case xem phiu ng k l thuyt s c gi. iu kin trc: Ngi dng phi ng nhp thnh cng vo h thng.

179

Java Mobile

9.3.2.3

ng k thc hnh:

M t: Cho php ngi dng ng k cc hc phn thc hnh trong hc k ny Tc nhn kch hot: Ngi dng. Lung s kin chnh: o Ngi dng chn chc nng ng k thc hnh. o Client gi yu cu ln server. o Server ly t c s d liu tt c cc hc phn thc hnh c m tng ng vi cc hc phn l thuyt m ngi dng ng k. Cc hc phn thc hnh c ngi dng ng k trc c nh du ring o Client nhn thng tin t server, hin th danh sch cc hc phn thc hnh ngi dng ng k. o Sau khi ngi dng nhn nt ng k, client s ly danh sch cc lp ngi dng mi ng k v danh sch cc lp ngi dng b ng k gi ln server. o Server truy cp c s d liu, thc hin ng k v hu ng k theo yu cu ca client. Lung s kin ph: Sau khi ht use case ng k l thuyt, use case xem phiu ng k l thuyt s c gi. iu kin trc: Ngi dng phi ng nhp thnh cng vo h thng.

9.3.2.4

Xem phiu ng k:

M t: Cho php ngi dng xem li danh sch cc hc phn l thuyt hay thc hnh m ngi dng ng k trong hc k ny. Tc nhn kch hot: ngi dng, h thng. Lung s kin chnh:

180

Java Mobile

o Ngi dng chn mt trong hai chc nng xem phiu ng k hc phn l thuyt hay phiu ng k hc phn thc hnh. o Client gi yu cu ln server. o Server truy cp c s d liu, ly danh sch cc hc phn l thuyt hay thc hnh theo yu cu client m ngi dng ng k thnh cng, tr v cho client. o Client hin th kt qu cho ngi dng. iu kin trc: Ngi dng phi ng nhp thnh cng vo h thng.

9.3.2.5

Xem kt qu hc tp:

M t: Cho php ngi dng xem kt qu cc hc phn ngi dng c hc v c im trong mt hc k c th. Tc nhn kch hot: Ngi dng. Lung s kin chnh: o Ngi dng chn chc nng xem kt qu hc tp. o Client yu cu ngi dng chn hc k, nm hc mun xem im thi. o Ngi dng nhp thng tin yu cu, nhn nt xem im. Client gi yu cu n server. o Server truy cp c s d liu, ly danh sch im thi cc mn hc tho yu cu (cc hc phn trong hc k yu cu v c im thi) gi cho client. o Client hin th kt qu cho ngi dng. iu kin trc: Ngi dng phi ng nhp thnh cng vo h thng.

9.3.2.6

Xem thi kho biu:

M t: Cho php ngi dng xem thi kho biu cc hc phn ca lp trong hc k hin ti. Tc nhn kch hot: Ngi dng.

181

Java Mobile

Lung s kin chnh: o Ngi dng chn chc nng xem thi kho biu. o Client yu cu ngi dng nhp thng tin lp hc mun xem thi kho biu (tn lp, s th t lp). o Ngi dng nhp thng tin theo yu cu v nhn nt xem thi kho biu l thuyt hoc thi kho biu thc hnh. o Client gi yu cu ln server. o Server truy cp c s d liu, ly danh sch thng tin cc hc phn l thuyt hoc hc phn thc hnh c m trong hc k ny theo yu cu, gi tr v cho client. o Client hin th kt qu tr v cho ngi dng.

9.3.2.7

Xem thng bo:

M t: H tr ngi dng xem cc thng bo ca gio v khoa. Tc nhn kch hot: Ngi dng. Lung s kin chnh: o Ngi dng chn chc nng xem thng bo. o Client gi yu cu ln server. o Server truy cp c s d liu, ly tiu ca 10 thng bo gn y nht, sp xp theo thi gian gim dn, gi v cho client. o Client hin th cc tiu thng bo ny cho ngi dng. Lung s kin ph: o Nu ngi dng chn mt trong cc tiu v nhn nt xem thng bo. Client s gi yu cu n server. o Server truy cp c s d liu ly ni dung thng bo, tr v cho client. Client hin th ni dung ny ln mn hnh cho ngi dng.

182

Java Mobile

9.4

Thit k m hnh d liu:

9.4.1 M hnh thc th kt hp:

Hnh 9.4 M hnh thc th kt hp ER 9.4.2 Cc bng d liu: ChuyenNganh: MaChuyenNganh, TenChuyenNganh SV: MonHoc: MaSV, TenSV, NgaySinh, DiaChi, ChuyenNganh, password MaMH, TenMonHoc, SoTCLT, SoTCTH

183

Java Mobile

GV: Lop: Lop_MonLT:

MaGV, TenGV, DiaChi MaLop, TenLop, STT MaLopLT, MaLop, STT, MaMH, HK, NamHoc, SiSo, SiSoMax, MaGV, Phong, Thu, Tiet

Lop_MonTH: MaLopTH, MaLopLT, STT, SiSo, SiSoMax, Phong, Thu, Tiet PhanCongTH: MaGV, MaLopTH DangKyLT: DangKyTH: ThongBao: MaSV, MaLopLT, DiemLT, DiemTH, DiemTC MaSV, MaLopTH MaThongBao, NgayTB, TieuDe, NoiDung

9.4.3 Chi tit cc bng d liu: 9.4.3.1 ChuyenNganh:

Cc chuyn ngnh ca khoa Tn field MaChuyenNganh Kiu d liu nvarchar(4) ngha M chuyn ngnh Tn chuyn ngnh Ghi ch Kha chnh

TenChuyenNganh nvarchar(100)

Bng 9.2 Table ChuyenNganh 9.4.3.2 SV:

Lu tr thng tin ca sinh vin Tn field MaSV TenSV NgaySinh DiaChi password Kiu d liu nvarchar(10) nvarchar(60) datetime nvarchar(100) nvarchar(25) ngha M s sinh vin Tn sinh vin Ngy sinh ca sinh vin a ch ca sinh vin M chuyn ngnh Mt m account ca sinh vin Bng 9.3 Table SV Kho ngoi Ghi ch Kha chnh

ChuyenNganh nvarchar(4)

184

Java Mobile

9.4.3.3

MonHoc:

Lu tr thng tin mn hc Tn field MaMH TenMH SoTCLT SoTCTH Kiu d liu nvarchar(5) nvarchar(30) int int ngha M mn hc Tn mn hc S tn ch l thuyt S tn ch thc hnh Bng 9.4 Table MonHoc 9.4.3.4 GV: Ghi ch Kho chnh

Lu tr thng tin gio vin Tn field MaGV TenGV DiaChi Kiu d liu int nvarchar(60) nvarchar(100) ngha M gio vin Tn gio vin a ch lin lc ca gio vin Bng 9.5 Table GV 9.4.3.5 Lop: Ghi ch Kho chnh

Lu thng tin lp Tn field MaLop TenLop STT Kiu d liu nvarchar(12) nvarchar(10) int M lp Tn lp (nin kho tng ng) S th t lp (cng nin kho) Bng 9.6 Table Lop 9.4.3.6 Lop_MonLT: ngha Ghi ch Kho chnh

Lu thng tin cc hc phn l thuyt c m trong mi hc k Tn field MaLopLT Kiu d liu int ngha M hc phn Ghi ch Kho chnh

185

Java Mobile

MaLop STT MaMH HK NamHoc SiSo SiSoMax MaGV Phong Thu Tit

nvarchar(12) int nvarchar(5) int nvarchar(9) int int int nvarchar(10) nvarchar(5) nvarchar(5)

M lp tng ng STT lp (nu m nhiu lp nh nh cc lp Anh vn) M mn hc Hc k (1 hay 2) Nm hc (vd: 2004-2005) S s ng k hin ti S s d kin M gio vin ph trch Phng hc Lch hc vo cc ngy trong tun Tit hc trong ngy

Kho ngoi

Kho ngoi

Kho ngoi

Bng 9.7 Table Lop_MonLT 9.4.3.7 Lop_MonTH:

Lu thng tin cc lp thc hnh tng ng ca cc lp l thuyt Tn field MaLopTH MaLopLT STT Kiu d liu int int int ngha M lp thc hnh M lp l thuyt tng ng S th t lp thc hnh(mt lp l thuyt c th c nhiu lp thc hnh) SiSo SiSoMax MaGV Phong Thu int int int nvarchar(10) nvarchar(5) S s ng k hin ti S s d kin M gio vin hng dn thc Kho ngoi hnh Phng hc Lch hc vo cc ngy trong Ghi ch Kho chnh Kho ngoi

186

Java Mobile

tun Tit nvarchar(5) Tit hc trong ngy Bng 9.8 Table Lop_MonTH 9.4.3.8 PhanCongTH:

Phn cng gio vin hng dn thc hnh cho tng lp Tn field MaGV MaLopTH Kiu d liu int int ngha M gio vin hng dn M lp thc hnh Bng 9.9 Table PhanCongTH 9.4.3.9 DangKyLT: Ghi ch Kho chnh

Thng tin ng k hc phn l thuyt Tn field MaSV MaLopLT DiemLT DiemTH DiemTC Kiu d liu nvarchar(10) int float float float ngha M s sinh vin M lp l thuyt ng k im thi l thuyt im thi thc hnh im tng cng Bng 9.10 Table DangKyLT 9.4.3.10 DangKyTH: Thng tin ng k hc phn thc hnh Tn field MaSV MaLopTH Kiu d liu nvarchar(10) int ngha M s sinh vin M lp thc hnh ng k Bng 9.11 Table DangKyTH 9.4.3.11 ThongBao: Cc thng bo ca vn phng khoa Ghi ch Kho chnh Ghi ch Kho chnh

187

Java Mobile

Tn field MaThongBao NgayTB TieuDe NoiDung

Kiu d liu int datetime nvarchar(100)

ngha M thng bo (t ng) Ngy ra thng bo Tiu ca thng bo

Ghi ch Kho chnh

nvarchar(2000) Ni dung thng bo Bng 9.12 Table ThongBao

9.4.4 Rng buc d liu: 9.4.4.1 Rng buc min gi tr:

im l thuyt, im thc hnh, im tng cng trong khong 0 n 10. Ngy sinh ca sinh vin phi nh hn ngy hin ti. Nm hc c dng xxxx-yyyy vi yyyy=xxxx+1 . Vd: 2004-2005. M mn hc c dng xxyyy vi xx l dng k t, yyy l cc k s. Hc k c gi tr 1 hoc 2. S s cc lp l thuyt, thc hnh l s khng m. S s ti a cc lp l thuyt, thc hnh l s dng.

9.4.4.2

Rng buc lin thuc tnh:

im thc hnh khng ln hn im tng cng. im l thuyt khng ln hn im tng cng. Cc lp l thuyt, lp thc hnh c s s khng ln hn s s max. Trong cng mt hc k, mt nm hc, cc hc phn l thuyt ca cng mt mn hc phi c s th t lin tc t 1. Trong cng mt lp l thuyt, cc lp thc hnh phi c s th t lin tc t 1.

9.4.4.3

Rng buc lin quan h, lin b:

S s hin ti ca cc lp l thuyt, lp thc hnh bng tng s sinh vin ng k hc lp .

188

Java Mobile

9.4.4.4

Rng buc chu trnh:

Sinh vin ch c php ng k cc hc phn thc hnh ca cc hc phn l thuyt ng k.

Lop_MonLT
MaLopLT MaLopTH

DangKyLT

DangKyTH

MaSV : Cc hc phn thc hnh SV ng k : Cc hc phn thc hnh c m ng vi cc hc phn l thuyt SV ng k

Hnh 9.5 Rng buc chu trnh

189

Java Mobile

9.4.5 M hnh d liu:

Hnh 9.6 M hnh c s d liu 9.4.6 Cc chc nng store procedures: sp_XEM_DIEM: Ly im thi ca sinh vin trong mt hc k cho trc hay tt c cc hc k. sp_XEM_TKB_LT: Ly thng tin thi kho biu l thuyt ca mt lp khi bit tn lp v s th t lp. sp_XEM_TKB_TH: Ly thng tin thi kho biu thc hnh ca mt lp khi bit tn lp v s th t lp.

190

Java Mobile

sp_DelAllTH: Xo tt c ng k thc hnh ca mt sinh vin ti mt hc k cho trc. (Khi sinh vin hiu chnh ng k l thuyt th tt c cc hc phn thc hnh c ng k s b xo trc) sp_DelRegisterLT: Xo ng k mt hc phn l thuyt. sp_getLopLT: Ly thng tin tt c cc hc phn l thuyt c m trong mt hc k cho trc, c nh du cc hc phn c sinh vin ng k. Dng hin th danh sch cc hc phn l thuyt sinh vin ng k. sp_getLopTH: Ly thng tin cc hc phn thc hnh c m tng ng vi cc hc phn l thuyt m sinh vin ng k. sp_getRegLT: Ly thng tin ng k hc phn l thuyt ca sinh vin trong mt hc k cho trc. sp_getRegTH: Ly thng tin ng k hc phn thc hnh ca sinh vin trong hc k cho trc. sp_RegisterLT: Thc hin ng k mt hc phn l thuyt. (Ch cho php ng k khi s s ng k cn nh hn s s ti a ca hc phn ) sp_RegisterTH: Thc hin ng k mt hc phn thc hnh. (Ch cho php ng k khi s s ng k cn nh hn s s ti a) sp_getNewsTitle: Ly tiu 10 thng bo gn y nht sp_getNewsContent: Ly ni dung mt thng bo c th 9.4.7 Thit k lp: Chng trnh pha client ch gi nhim v nhn yu cu t pha ngi dng, chuyn n server. Chng trnh pha server lm nhim v x l chnh v tng tc vi c s d liu.

191

Java Mobile

Hnh 9.7 M hnh Lp

9.5

Ci t - th nghim:

9.5.1 Yu cu phn cng: Client: in thoi h tr kt ni GPRS ( kt ni mng), gi JSR172 h tr gi nhn cc gi tin SOAP, gi JSR177 h tr m ho. C th s dng chng trnh gi lp ca in thoi tng ng. Server: server h tr kt ni web (c a ch c nh client kt ni n). C s d liu c th t trc tip ti web server hay ti database server ring bit.

192

Java Mobile

9.5.2 Yu cu phn mm: Client: My o Java j2sdk 1.4.2_05. J2ME Wireless Toolkit 2.3. Ngoi ra c th dng JBuider10 h tr son tho chng trnh Java, cng nh cc chng trnh gi lp in thoi khc. Server: Dot Net FrameWork. Database server phi ci sql server 2000. 9.5.3 Giao din chng trnh: Server: khng cn giao din. Client:

193

Java Mobile

Hnh 9.8 S cc mn hnh

194

Java Mobile

9.5.3.1

Mn hnh welcome:

Hnh 9.9 Mn hnh welcome

195

Java Mobile

9.5.3.2

Mn hnh ng nhp:

Hnh 9.10 Mn hnh ng nhp Khi ng nhp, trc khi bt u kt ni, chng trnh hin th nhc nh bn c thc s mun kt ni mng hay khng ? v khi kt ni, ngi dng phi tr chi ph cho nh cung cp dch v. Nu ng , nhn nt OK, chng trnh s thc hin kt ni v cho bit kt qu ng nhp, nu khng, ngi dng thot khi ng dng.

196

Java Mobile

Hnh 9.11 Confirm

197

Java Mobile

9.5.3.3

Menu chc nng:

Hnh 9.12 Menu chc nng

198

Java Mobile

9.5.3.4

Mn hnh ng k l thuyt:

Hnh 9.13 Mn hnh ng k hc phn l thuyt

199

Java Mobile

9.5.3.5

Mn hnh ng k hc phn thc hnh:

Hnh 9.14 Mn hnh ng k hc phn thc hnh

200

Java Mobile

9.5.3.6

Mn hnh xem thi kho biu:

Hnh 9.15 Mn hnh xem thi kho biu

201

Java Mobile

9.5.3.7

Mn hnh xem kt qu hc tp:

Hnh 9.16 Mn hnh xem kt qu hc tp

202

Java Mobile

9.5.3.8

Mn hnh xem phiu ng k hc phn:

Hnh 9.17 Mn hnh xem phiu ng k

203

Java Mobile

9.5.3.9

Mn hnh xem thng bo:

Hnh 9.18 Mn hnh xem thi kho biu

204

Java Mobile

Chng 10: Tng kt


10.1 Kt lun:
Sau hn 5 thng thc hin, lun vn hon thnh v t c mt s kt qu nht nh. Chng ti c gng trnh by nhng kin thc nn tng trong J2ME v xy dng thnh cng ng dng ng k hc phn bng in thoi di ng. Lun vn gii thiu cc kin thc v lp trnh trn in thoi di ng dng J2ME, gm: Gii thiu v CLDC, MIDP. Cc thnh phn ca ng dng MIDlet. Cc thnh phn giao din trong MIDlet. Lu tr d liu vi RMS. Kt ni mng vi GCF. Nhn tin SMS vi WMA. T kt qu ny, chng ti tin hnh xy dng ng dng ng k hc phn bng in thoi di ng, vi cc kt qu t c: ng dng hon chnh, vi tng i y cc chc nng tng t h thng ng k hc phn SMS dnh cho sinh vin trn web, c th p dng trong thc t. Vn dng tt cc k thut lp trnh bng J2ME. S dng thut ton DES m ho password, s dng kho b mt 64 bits. Tm hiu v ng dng cng ngh Web service trong trao i d liu gia server v client. Tuy nhin, v c thc hin trong thi gian gii hn, nn lun vn vn cn mt s hn ch:

205

Java Mobile

Trong qu trnh tm hiu cng ngh J2ME, c mt s thut ng ting Anh khng th c chuyn ng mt cch chnh xc. S lng kin thc trong lnh vc J2ME rt ln v lin tc c cp nht nn lun vn chc chn cn nhiu thiu st. ng dng ch c th nghim bng chng trnh gi lp, cha c iu kin chy trn thit b tht. ng dng s dng c s d liu t xy dng nn cha hon ton chnh xc vi thc t. Cc yu cu bt buc phi c th nghim c ng dng mi trng thc t: Phi c in thoi di ng h tr cng ngh JSR 172, ngoi ra phc v cho nhu cu m ho d liu, in thoi cn h tr JSR 177. in thoi phi truy cp c GPRS v nh cung cp phi h tr dch v ny. Phi c mt server IIS v mt a ch IP thc (c th thng qua NAT). Do ta truy xut thng qua nh cung cp dch v vin thng nn khng th dng cc a ch Private IP (10.0.0.0,172.29.0.0,) cho server. Mt s l do khin ng dng kh p dng rng ri Vit Nam ti thi im hin ti: Hin ti s lng in thoi h tr b th vin JSR-172 cha nhiu v cng ngh ny kh mi. Hin nay ch mt s in thoi ra i gn y l h tr cng ngh ny, nhng cc in thoi ny hu ht cha c mt ti VN. (Nokia N90, N91; Motorola A860) Cng ngh kt ni mng c s dng l GPRS, hin ti theo chng ti c bit cng ngh ny ch c h tr hai thnh ph ln l H Ni v TP.H Ch Minh. Gi cc ca loi hnh dch v ny hin nay cn kh t, khong 50/1Kbyte.

206

Java Mobile

10.2 Hng pht trin:


Mc tiu ban u ca chng ti ra khi xy dng ng dng l gip cho sinh vin ca trng T Nhin c th ng k hc phn qua in thoi, tuy nhin v cc l do khch quan v thit b phn cng nn mong mun ca chng ti cha t c. Nhm s tip tc nghin cu v quan tm n cc tin tc cp nht v cng ngh, n khi iu kin Vit Nam cho php chng ti s th nghim ng dng ca mnh trong mi trng thc t. Hin ti ng dng ca chng ti ang s dng C S D Liu t xy dng nn cha c s lin thng vi d liu ca khoa CNTT. Vic ny r rng khng thun tin, gy d tha v c kh nng xy ra ng t gia hai h thng.V sau, nu c php chng ti s tch hp ng dng vi d liu ca khoa theo m hnh sau:

Hnh 10.1 Hng pht trin thc t Lc ny Web Service ca chng ti s ng vai tr trung gian gia ng dng J2ME v ng dng ng K Hc Phn ca Khoa. Yu cu duy nht i vi h thng ca khoa CNTT l cung cp cho chng ti nhng chc nng chnh di dng nhng hm c export ca mt Web Service. Web Service ca chng ti lc ny khng cn h tr thao tc vi c s d liu m ng vai tr bin i nhng d liu gi n t chng trnh trn thit b di ng ph hp vi d liu input ca h

207

Java Mobile

thng ca khoa CNTT v ngc li. Lc ny vic coding trn in thoi di ng v ng dng ca Khoa hu nh khng c thay i v mi thay i s din ra ti web service trung gian ca chng ti. C mt im cn ni thm l ng dng ca khoa khng nht thit phi l mt web service m c th ch l mt ng dng TCP giao tip thng qua socket n thun. Lc ny chng ti s giao tip vi ng dng J2ME qua giao thc web service v giao tip vi ng dng ca khoa theo m hnh lp trnh socket quen thuc vn c. Vic nghin cu cng ngh Web Service trong mi trng J2ME s gip chng ti c th xy dng nhiu h thng thng mi trc tuyn khc trong tng lai ch khng n thun gi gn trong ng dng trnh by. Cng ngh J2ME v cng ngh Web Service u l nhng cng ngh c tim nng to ln, c bit Web Service l mt cng ngh mi v c chun ho nn ha hn s vt qua nhng ro cn ca cc m hnh trc y. Cc ng dng thng mi da trn Web Service s c th hot ng tt trong mi trng firewall v khng b ro cn do s khc nhau v d liu, cu trc ca cc h thng khc nhau. Cc nh pht trin nh gi lnh vc thng mi in t trn mi trng thit b di ng s pht trin rt nhanh chng, l ngnh cng nghip s em li nhiu t la doanh thu. S ra i ca Web Service khin vic xy dng nhng ng dng thng mi tin thm mt bc quan trng. Mt yu t quan trng trong cc ng dng thng mi in t l qu trnh chi tr trc tuyn, chng ta s thc hin giao dch qua mt bn trung gian c gi l "payment gateway", ngi c c th tm hiu thm v khi nim ny trn www.google.com hay www.secpay.com . Vit Nam l mt nc c t l ngi s dng in thoi di ng kh cao tuy nhin lnh vc thng mi in t li cha pht trin. Thi quen giao dch trc tuyn cha c hnh thnh trong i a s ngi dn. Tuy nhin, vi s pht trin nhanh chng ca ngnh phn mm cho thit b di ng v web service, chng ti hy vng tng lai s c thm nhiu ng dng phc v cho i sng nh mua v tu ho, my bay, t ch khch sn, xem ch s chng khon, d bo thi tit qua

208

Java Mobile

mi trng di ng. Chng ti mong mun c gp sc cho s pht trin ca lnh vc thng mi in t qua mi trng di ng ti Vit Nam.

209

Java Mobile

Ti liu tham kho


Books:
1. Bruce Eckel, Thinking in Java 3rd, Prentice Hall, New Jersey, 1998 2. David Chappell - Tyler Jewell, Java Web Services, O'Reilley, 2002 3. Dreamtech Software Team, Cracking the Code , Hungry Minds, 2002 4. James White-David Hemphill, Java in small things, Manning, 2002 5. John W. Muchow, Core J2ME Technology & MIDP, Prentice Hall, 2001 6. Kim Topey, J2ME in a Nutshell, OReilley, 2002 7. Kim Topey,Java Web Service in A Nutshell, O'Reilley, 2003 8. Michael Juntao Yuan, Enterprise J2ME: Developing Mobile Java Application, Prentice Hall PTR, 2003 9. MSDN Training, Developing XML Web Services using Microsoft Visual C#, Microsoft, 2001 10. Roger Riggs, Programming Wireless Devices with the Java 2 Platform Micro Edition, Addision Wesley, 2003 11. Vartan Piroumian, Wireless J2ME Platform Programming, Prentice Hall PTR, 2002

Web Sites:
1. http://java.sun.com: Trang ch Sun Java 2. http://javavietnam.org: Din n Java Vit Nam 3. http://jcp.org: Trang ch t chc Java Community Process 4. http://msdn.microsoft.com: Trang ti liu MSDN online 5. http://www.forum.nokia.com: Forum ca Hng Nokia, ni c nhiu ti liu cho nh pht trin.

210

Java Mobile

Ph Lc A: Hng dn s dng cng c Sun Wireless ToolKit 2.3


Wireless ToolKit l b cng c gi lp thit b di ng. Wireless ToolKit cung cp cc chc nng thun li cho nh pht trin J2ME nh bin dch cc file m ngun, t pht sinh file JAD v file JAR, gi lp cc thit b di ng vi cc chc nng phong ph

Hnh A.1 Cng c Sun WirelessToolkit 2.3 vo mn hnh ng dng chnh ca Wireless ToolKit ta s dng chc nng KToolBar. to mt chng trnh ng dng mi, ta chn chc nng New Project

211

Java Mobile

Hnh A.2 Mn hnh chnh ca cng c Sau chng trnh s yu cu chng ta nhp tn Project v tn ca lp ng dng MIDLet (bao gm c tn Package).

Hnh A.3 To project mi Lc ny Wireless ToolKit s to mt th mc c tn theo Project Name ta va nhp (J2ME Project) trong th mc apps ca th mc gc ci t wireless toolkit. Gi s ta ci t wireless toolkit vo th mc C:\WTK th chng trnh s to th mc C:\WTK\apps\J2ME Project\ sau nhng bc va lm nh trn. Sau Wireless ToolKit s cung cp mt mn hnh ty chn

212

Java Mobile

Hnh A.4 Cc options cho project Chng ta s chn cc th vin m rng cn Wireless ToolKit h tr i vi Project va to. ng vi ng dng "ng K Hc Phn" trong lun vn, chng ta s chn Cofiguration s dng l CLDC 1.1, check chn cc th vin JSR 172 (Web Service) v JSR 177 (h tr mt m ha d liu). (Ta c th chn mc Project/Setting tr li mn hnh ny bt k lc no). Sau ta chn Tab MIDlets

213

Java Mobile

Hnh A.5 Chnh sa ni dung file Jad v Jar y l nhng thuc tnh cc k quan trng i vi ng dng v s c ng gi trong file JAD cng nh file manifest ca file JAR. ( ngha cc thuc tnh c trnh by rt k phn 2.2.4 MIDlet Suite trong bo co lun vn). Trong gi ng dng ca ta, c th c nhiu MIDlet v mi MIDlet phi c khai bo chnh xc cc thuc tnh trong phn ny. c bit phi ch n thuc tnh Class, ta phi khai bo ng tn lp ca MIDlet nu khng s pht sinh li trong qu trnh bin dch.

214

Java Mobile

Sau ta c th dng cc chng trnh qun l file thng dng chp cc file m ngun ca ng dng vo th mc C:\WTK\apps\J2ME Project\ va c to ra. Nu cc file m ngun nm trong cc package th ta phi to cc th mc con ng vi cc package v a cc file m ngun vo ng chnh xc cc th mc con tng ng. Gi s nh trn ta phi to th mc MyPackage trong th mc C:\WTK\apps\J2ME Project\ v chp cc tp tin m ngun vo th mc MyPackage va to . iu ny kh quen thuc vi nhng ngi dng tng s dng ngn ng Java trc y. Ta cn lu , cng c Wireless Toolkit khng phi l b cng c h tr bin son m ngun m ch c chc nng bin dch, thc thi v ng gi ng dng. h tr vic son tho m ngun chng ta c th s dng Jbuilder hoc cc chng trnh tng ng. Bin dch chng trnh

Hnh A.6 Bin dich project Ta dng tnh nng Build bin dch cc file m ngun, nu khng c li pht sinh ta c th s dng tnh nng Run thc thi chng trnh. Cu trc th mc Project: Vi mi Project c to ra u c nhng th mc con nh sau: Bin: Cha file JAD v file JAR sau khi c ng gi.

215

Java Mobile

Classes: Cha file m ngun c bin dch thnh dng .class Lib: Cha cc th vin cng thm ca Project. Res: Cha cc file resource nh file hnh dng .png ca project. Src: Cha cc file m ngun cha bin dch dng .java Tmpclasses v Tmplib: Cc th mc tm ca wireless toolkit, chng ta thng khng dng n. To file JAD v file JAR:

Hnh A.7 ng gi ng dng Ta chn chc nng Create Package c sn trong tab project pht sinh cc file JAR v file JAD c th a vo thit b tht s dng.

216

Java Mobile

Ph Lc B: Xy dng v S dng Web Service


Xy dng Web Service bng Microsoft Studio .NET: Vic xy dng mt web service trong mi trng Visual Studio .Net rt d dng, chng ta ch cn to mi mt project ASP.NET (c th bng ngn ng C# hoc VB.NET)

Hnh B.1 To project Web Service Sau ta khai bo mt lp mi cha service, lp ny k tha t lp System.Web.Services.WebService. Trong lp va to ca chng ta, nhng hm no c nhu cu export gi t xa chng ta khai bo thm cm t [Web Method], lc ny Studio s gip chng ta bin dch mi th hnh thnh mt Web Service tng ng.

217

Java Mobile

Hnh B.2 Khai bo lp v hm Trong v d trn chng ta xy dng lp Service1 v trong lp ny hm HelloWorld() c khai bo l hm c php gi t xa qua cm t [Web Method], phn cn li l trch nhim ca Visual Studio. Vi nhng n cn export nhiu hm vo service, trc mi hm cn cho php truy cp t xa ta s thm nh ngha WebMethod vo trc mi hm. Ngoi ra .NET cn cho php ta nh ngha nhiu thuc tnh (properties) tng thm ty bin cho cc hm service. Thuc tnh quan trng nht cn ch l EnableSession, khi khai bo EnableSession=true, trong hm s cho php ta s dng i tng Session lu v truy vn cc bin session.

218

Java Mobile

Hnh B.3 Export nhiu hm cng lc Thc thi Web Service.

Hnh B.4 Mn hnh thc thi Web Service ca IE Khi chng ta a project ny vo IIS v Run ta s nhn c trang tm tt cc thng tin v web service, trang ny s gm cc hm c export trong service ca chng ta v mc Service Description s cung cp file WSDL cho Web service tng ng. Khi ta click vo phn Service Description, IIS s cung cp ni dung file WSDL. File WSDL ny s c dng xy dng cc lp gip truy xut Web Service va xy dng (s c trnh by phn truy xut web service bng J2ME).

219

Java Mobile

Hnh B.5 File WSDL Ta s dng chc nng Save As ca Web Browser lu ni dung file ny li vi phn m rng l .wsdl. Ni dung file ny rt quan trng v s c dng phn sau truy xut web service. Dng J2ME truy xut Web Service: truy xut c web service, chng ta phi dng chc nng stub generator ca b cng c wireless toolkit 2.3

220

Java Mobile

Hnh B.6 Cng c Stub Generator Khi chn chc nng stub generator, mn hnh chc nng s xut hin

Hnh B.7 Cc options ca cng c Stub Generator Ta chn ng dn n file WSDL c c, phn Output Package ta s nhp tn Package cho cc lp c t ng pht sinh. Cc lp pht sinh ny s c t th mc output path, y cng chnh l th mc source ca project. Trong cc lp pht sinh, lp quan trng nht l lp <PackageName>Soap_Stub.java (trong trng hp ny l lp DKHPServiceSoap_Stub.java). Lp ny c cha tt c cc hm m web service cung cp (tng ng 1-1), gi hm ca web service ta ch cn to mt i tng ca lp ny v dng hm do i tng cung cp.

221

Java Mobile

Ph Lc C: Gii thiu cc th vin JSR


Nh cp, Java l ngn ng pht trin rt nhanh chng. S pht trin ca ngn ng Java, c bit l J2ME, l nh cng sc ng gp ca cng ng cc nh pht trin phn mm. Java Community Process (JCP http://www.jcp.org/) l mt chng trnh do hng Sun ra nhm tp hp kin ca cc nh pht trin khp ni ng gp cho ngn ng Java. T chc ny lin tc ra nhng yu cu, nhng c t mi cho ngn ng Java, trong c J2ME, di dng cc Java Specification Requests (JSR xxx vi xxx l k s ca c t). Cc c t ny ra i rt nhanh chng v dn tr thnh yu cu bt buc i vi nhng nh sn xut nu mun cnh tranh vi cc i th; vic ra i ca cc c t ny tng thm sc mnh cho ngn ng Java ni chung v dng ngn ng J2ME ni ring vn ban u ch nhm n cc thit b nh, t chc nng. Trong s cc c t cho dng ngn ng J2ME th mt s c t sau l quan trng nht:
- Connected - Mobile - Java

Limited Device Configuration (CLDC); JSR 30, JSR 139

Information Device Profile (MIDP); JSR 37, JSR 118 Messaging API (WMA); JSR 120, JSR 205 API for J2ME; JSR 179 and Trust Services API for J2ME, (SATSA); JSR-177

Technology for the Wireless Industry, (JTWI); JSR 185 Media API (MMAPI); JSR 135

- Wireless - Mobile

- Location - Security - Mobile - J2ME

3D Graphics; JSR-184 API (JSR-82, Motorola, Java Partner Site)

Web Services APIs, (WSA); JSR 172 Content Handler API, (CHAPI); JSR 211

- Bluetooth - J2ME

tm hiu v JSR bn c th vo trang web http://www.jcp.org/en/jsr/detail?id=xxx vi xxx l m hiu ca JSR (172,177,)

222

You might also like