X©y dùng øng dông m¹ng víi ng«n ng÷ Java

Môc lôc
Môc lôc...............................................................................1 Lêi nãi ®Çu.........................................................................4 PhÇn 1: Tæng quan vÒ Java.................................................5 I. Giíi thiÖu vÒ Java..........................................................................5 II. Xu híng ph¸t triÓn cña Java..........................................................5 III. §Æc ®iÓm cña Java.....................................................................6
1. Java lµ mét m«i trêng ®éc lËp..........................................................6 2. Java lµ mét ng«n ng÷ híng ®èi tîng..................................................8 3. Java dÔ häc........................................................................................8

IV. CÊu tróc cña Java........................................................................8 V. C¸c ®Æc tÝnh chÝnh cña øng dông Java....................................11
1. 2. 3. 4. 5. 6. 7. An ninh............................................................................................11 Giao diÖn lËp tr×nh øng dông chuÈn - Core API..............................12 T¬ng thÝch víi nhiÒu kiÓu phÇn cøng.............................................12 §Æc tÝnh ®éng vµ ph©n t¸n...........................................................12 Híng ®èi tîng...................................................................................13 §a luång (Multi-thread)....................................................................13 Qu¶n lý bé nhí vµ qu¸ tr×nh thu rän r¸c..........................................13

VI. Java so víi c¸c ng«n ng÷ lËp tr×nh kh¸c...................................13
1. Java so s¸nh víi Perl.........................................................................13 2. Java so s¸nh víi c¸c ng«n ng÷ C, C++, Pascal.................................14 3. Java vµ ActiveX................................................................................14

PhÇn 2: ®Æc t¶ ng«n ng÷ Java..........................................16 I. Ng«n ng÷ Java.............................................................................16
1. Có ph¸p Java....................................................................................16 2. C¸c tõ kho¸ ®Æc biÖt......................................................................18 3. C¸c c©u lÖnh ®iÒu khiÓn...............................................................19

II. C¸c ngo¹i lÖ (Exception).............................................................24
1. 2. 3. 4. 1. 2. 3. 4. T¹o c¸c kiÓu ngo¹i lÖ (Exception).....................................................24 Throw...............................................................................................25 MÖnh ®Ò Throws............................................................................26 Try, catch vµ finally..........................................................................27 T¹o mét líp ®¬n gi¶n.......................................................................29 C¸c trêng.........................................................................................29 §iÒu khiÓn truy nhËp vµ thõa kÕ.....................................................29 T¹o c¸c ®èi tîng...............................................................................30

III. Classes vµ Objects.....................................................................28

IV. Package.....................................................................................30
1. C¸c thµnh phÇn cña gãi...................................................................31 2. M¸y chñ hç trî c¸c gãi......................................................................32
Trang :

1

X©y dùng øng dông m¹ng víi ng«n ng÷ Java 3. C¸c Unit biªn dÞch...........................................................................33 4. C¸c khai b¸o gãi...............................................................................33

V. Threads vµ Locks........................................................................34
1. Luång lµ g×?....................................................................................34 2. C¸c thuËt ng÷ vµ c¸c khung lµm viÖc.............................................35 3. Thø tù xö lý vµ tÝnh nhÊt qu¸n........................................................36 4. C¸c quy t¾c vÒ c¸c biÕn.................................................................37 5. C¸ch xö lý c¸c biÕn long vµ double kh«ng nguyªn tö......................38 6. C¸c quy t¾c vÒ kho¸.......................................................................38 7. C¸c quy t¾c vÒ giao t¸c gi÷a c¸c kho¸ vµ c¸c biÕn........................39 8. C¸c quy t¾c cho c¸c biÕn ®éng......................................................39 9. C¸c thao t¸c lu.................................................................................39 10. Lêi bµn...........................................................................................40

VI. X©y dùng øng dông ®a luång víi Java......................................40
1. 2. 3. 4. Ch¹y vµ khëi ®éng c¸c luång...........................................................40 C¸c thuéc tÝnh cña luång................................................................41 Møc u tiªn cña luång........................................................................42 §ång bé sù truy nhËp vµ chia sÎ tµi nguyªn.....................................43

VII. X©y dùng øng dông Web víi Java.............................................43
1. Nh÷ng kh¶ n¨ng cña trang Web ®îc x©y dùng dùa trªn c¬ së HTML ............................................................................................................44 2. T¶i tÖp tõ mét Web Server..............................................................44 3. ¢m thanh vµ ho¹t c¶nh....................................................................45 4. CGI...................................................................................................45 5. Nh÷ng h¹n chÕ cña HTML...............................................................45 6. Gi¶i ph¸p cña Java...........................................................................46 7. Sù phô thuéc vµo platform..............................................................47

PhÇn 3: x©y dùng øng dông m¹ng víi ng«n ng÷ Java...........49 I. C¸c kiÕn thøc c¬ së vÒ m¹ng m¸y tÝnh......................................49
1. 2. 3. 4. 1. 2. 3. 4. 5. 6. Kh¸i niÖm TCP.................................................................................49 Kh¸i niÖm UDP.................................................................................50 C¸c cæng (Ports)..............................................................................50 C¸c líp thiÕt kÕ cho m¹ng cña Java..................................................51 Kh¸i niÖm URL.................................................................................51 T¹o mét URL.....................................................................................51 Ph©n tÝch mét URL.........................................................................52 §äc trùc tiÕp tõ mét URL..................................................................52 KÕt nèi tíi URL..................................................................................53 §äc vµ ghi víi ®èi tîng URLConnection.............................................53

II. Lµm viÖc víi c¸c URL..................................................................51

III. Tæng quan vÒ Sockets..............................................................54
1. Kh¸i niÖm Socket.............................................................................54 2. §äc vµ ghi tíi mét Socket.................................................................54 3. VÝ dô...............................................................................................55

III. Tæng quan vÒ ®¬n vÞ d÷ liÖu (DataGrams)...........................56
1. Kh¸i niÖm ®¬n vÞ d÷ liÖu (datagram)...........................................56 2. Datagram client vµ server...............................................................57 3. Qu¶ng b¸ tíi nhiÒu n¬i nhËn...........................................................58
Trang :

2

X©y dùng øng dông m¹ng víi ng«n ng÷ Java

Tµi liÖu tham kh¶o............................................................59

Trang :

3

X©y dùng øng dông m¹ng víi ng«n ng÷ Java

Lêi nãi ®Çu
HiÖn nay, c¸c øng dông m¹ng ph©n t¸n ®ang ®îc ph¸t triÓn rÊt m¹nh mÏ víi sù më réng kh«ng ngõng cña Internet. Nhu cÇu giao dÞch vµ trao ®æi d÷ liÖu trªn m¹ng n¶y sinh ngµy cµng nhiÒu. C¸c ng«n ng÷ lËp tr×nh còng ngµy cµng ®îc c¶i tiÕn ®Ó cã thÓ t¬ng thÝch ®îc trªn m«i trêng m¹ng, tuy nhiªn vÊn ®Ò an ninh b¶o mËt vÉn còng nh tÝnh t¬ng thÝch cao víi nhiÒu hÖ thèng lµ mét vÊn ®Ò cßn ph¶i xem xÐt nhiÒu. Java ®· ra ®êi trong hoµn c¶nh nh vËy, ®¸p øng ®îc c¸c yªu cÇu an ninh b¶o mËt d÷ liÖu trªn m¹ng, cã thÓ ch¹y trªn mäi hÖ thèng, võa nhá gän, võa kÕ thõa ®îc c¸c ®Æc tÝnh uyÓn chuyÓn cña ng«n ng÷ lËp tr×nh C++, l¹i lµ mét ng«n ng÷ lËp tr×nh híng ®èi tîng hoµn toµn nªn ngµy cµng ®îc c¸c nhµ ph¸t triÓn quan t©m, ñng hé vµ ®i theo. N¨m 1996, Java ®· ®îc coi nh lµ mét chuÈn c«ng nghiÖp cho Internet. Trong bµi b¸o c¸o thùc tËp nµy, t«i xin ®îc giíi thiÖu s¬ lîc vÒ ng«n ng÷ lËp tr×nh Java, tr×nh bµy c¸c ®Æc t¶ cña ng«n ng÷ tiªn tiÕn nµy. PhÇn cuèi lµ giíi thiÖu c¸c c«ng nghÖ viÕt trªn m«i trêng m¹ng cña Java ®Ó c¸c b¹n cã thÓ b¾t tay vµo lµm ®îc c¸c øng dông m¹ng hoµn chØnh. Víi môc tiªn ®ã, b¶n b¸o c¸o xin ®îc chia lµm 3 phÇn:

PhÇn 1: Tæng quan vÒ Java PhÇn 2: C¸c ®Æc t¶ cña ng«n ng÷ Java PhÇn 3: X©y dùng øng dông m¹ng víi ng«n ng÷ Java
Hµ Néi, th¸ng 1/2000

Trang :

4

X©y dùng øng dông m¹ng víi ng«n ng÷ Java

PhÇn 1: Tæng quan vÒ Java
I. Giíi thiÖu vÒ Java
Java lµ mét ng«n ng÷ lËp tr×nh híng ®èi tîng ®îc ph¸t triÓn bëi h·ng Sun Microsystems - mét c«ng ty næi tiÕng lµ n¬i cung cÊp nh÷ng tr¹m lµm viÖc UNIX ®Çu cuèi. Dùa trªn C++, ng«n ng÷ Java ®îc thiÕt kÕ nhá gän, cã thÓ ho¹t ®éng trªn nhiÒu lo¹i m¸y tÝnh vµ c¸c hÖ ®iÒu hµnh kh¸c nhau, c¶ ë møc nÒn vµ ë møc rÊt thÊp nh xö lÝ nhÞ ph©n. Java thêng ®îc nh¾c ®Õn cïng mét lóc víi HotJava, mét tr×nh duyÖt WORLD WIDE WEB cña Sun, gièng nh Netscape hay Mosaic. Nh÷ng ®Æc ®iÓm lµm cho HotJava kh¸c so víi nh÷ng tr×nh duyÖt kh¸c lµ ngoµi tÊt c¶ c¸c ®Æc tÝnh c¬ b¶n cña Web ra, nã cßn cã thÓ t¶i vµ ch¹y nh÷ng applet trªn hÖ thèng cña ngêi dïng. Java applet xuÊt hiÖn trong mét trang Web còng gièng nh h×nh ¶nh, nhng Java applet cßn cã thÓ t¸c ®éng qua l¹i víi c¸c ®èi tîng kh¸c. Java applet cã thÓ dïng ®Ó t¹o phim ho¹t h×nh, h×nh ¶nh... ngêi ta còng cã thÓ sö dông Java applet ®Ó t¹o nh÷ng trß ch¬i hay nh÷ng t¸c ®éng qua l¹i kh¸c víi nh÷ng h×nh ¶nh trªn cïng trang Web. MÆc dï HotJava lµ tr×nh duyÖt ®Çu tiªn trªn WORLD WIDE WEB ®Ó cã thÓ ch¹y c¸c Java applet, nhng nh÷ng hç trî Java trªn c¸c tr×nh duyÖt ®ang nhanh chãng ®îc ph¸t triÓn vµ trë nªn hiÖu qu¶ trong nhiÒu ch¬ng tr×nh duyÖt kh¸c. Phiªn b¶n Netscape 2.0 vµ Internet explorer 3.0 trë ®i cung cÊp nh÷ng hç trî cho Java applet vµ nh÷ng phiªn b¶n tr×nh duyÖt hç trî cho Java kh¸c còng lµ nh÷ng s¶n phÈm ra ®êi tíi ®©y. §Ó thiÕt kÕ mét applet ta sÏ viÕt nã b»ng ng«n ng÷ Java biªn dÞch nã b»ng bé biªn dÞch Java vµ tham kh¶o tíi applet trong trang Web HTML cña ta. Sau ®ã chÐp tËp tin HTML vµ tËp tin Java lªn tr¹m lµm viÖc Web hay lµ Web Server gièng nh c¸ch th«ng thêng mµ ta lµm víi tËp tin HTML vµ nh÷ng tËp tin h×nh ¶nh ®Ó mäi ngêi cã thÓ xem nã. Råi khi cã mét ngêi nµo ®ã dïng HotJava (hay mét tr×nh duyÖt cã tÝnh n¨ng Java nµo kh¸c) ®Ó xem trang cña ta víi nh÷ng applet ®· ®îc nhóng trªn ®ã, tr×nh duyÖt nµy sÏ download nh÷ng applet vÒ m¸y cña ngêi ®äc vµ sÏ ch¹y chóng khi ®ã ngêi dïng cã thÓ xem vµ trao ®æi qua l¹i víi applet cña ta. Nh vËy ngoµi viÖc t¹o ra nh÷ng applet, ta cã thÓ t¹o ra nhiÒu thø víi Java. Java ®îc viÕt nh mét ng«n ng÷ lËp tr×nh chÝnh thøc, trong ®ã ta cã thÓ gi¶i quyÕt mäi c«ng viÖc vµ mäi vÊn ®Ò mµ ta cã thÓ lµm trong nh÷ng ng«n ng÷ kh¸c nh trong C hay C++. Ngay b¶n th©n HotJava, bao gåm c¸c ®Æc tÝnh m¹ng, giao tiÕp, vµ c¸c yÕu tè giao diÖn ®å ho¹ còng ®îc viÕt b»ng Java.

II. Xu híng ph¸t triÓn cña Java
Ng«n ng÷ Java ®îc x©y dùng do h·ng Sun Microsystems vµo n¨m 1991 díi c¸i tªn OAK, lµ mét phÇn cña kÕ ho¹ch nghiªn cøu ph¸t triÓn c¸c phÇn mÒm cho nh÷ng dông cô ®iÖn tö d©n dông nh ti vi, ®Çu m¸y video, lß níng b¸nh vµ c¸c lo¹i m¸y kh¸c mµ b¹n cã thÓ mua ë cöa hµng. Môc tiªu cña
Trang :

5

X©y dùng øng dông m¹ng víi ng«n ng÷ Java Java trong thêi gian nµy lµ trë nªn nhá gän, nhanh chãng, hiÖu qu¶ vµ cã thÓ sö dông réng r·i trªn nhiÒu lo¹i thiÕt bÞ phÇn cøng. Nã còng lµ môc ®Ých ®Ó lµm cho Java trë thµnh mét ng«n ng÷ lÝ tëng ®Ó viÕt ra vµ phæ biÕn nh÷ng ch¬ng tr×nh ch¹y trªn WORLD WIDE WEB vµ nã còng lµ mét môc ®Ých chung cña c¸c ng«n ng÷ lËp tr×nh trong viÖc ph¸t triÓn phÇn mÒm cã thÓ dÔ dµng sö dông vµ kh¶ chuyÓn gi÷a c¸c lo¹i m¸y tÝnh kh¸c nhau. Ng«n ng÷ Java ®· ®îc dïng trong mét vµi dù ¸n cña Sun nhng kh«ng ®em l¹i nhiÒu sù chó ý vÒ th¬ng m¹i l¾m cho ®Õn khi nã ®îc ®i ®«i víi HotJava. HotJava ®îc viÕt trong n¨m 1994 lµ mét chñ ®Ò trong nhiÒu th¸ng liÒn, bao gåm viÖc coi nh lµ mét ph¬ng tiÖn ®Ó download vµ ch¹y nh÷ng applet vµ c¶ nh÷ng vÝ dô cña c¸c lo¹i øng dông phøc t¹p kh¸c nhau mµ cã thÓ viÕt ®îc trong Java. Nh÷ng g× sÏ cã trong cöa hµng tu¬ng lai? Cã thÓ nãi thªm khi b¶n Java chÝnh thøc cña Sun ph¸t hµnh, nh÷ng c«ng ty kh¸c tuyªn bè hç trî cho Java trong nh÷ng ¬ng tr×nh duyÖt cña hä WORLD WIDE WEB. C«ng ty Netscape Communication ®· céng t¸c víi tÝnh n¨ng cña Java tõ phiªn b¶n 2.0 cña phÇn mÒm rÊt næi tiÕng Netscape Navigator Webbrowser - nh÷ng trang Web nµy víi nh÷ng Java applet nhóng trªn nã cã thÓ xem vµ ch¹y víi Netscape. H·ng Mircrosoft sau khi mua l¹i Internet Explorer cña trêng ®¹i häc Illinois còng ®· chuyÓn lªn phiªn b¶n 3.0 vµ ph¸t hµnh miÔn phÝ trªn Internet, phiªn b¶n nµy rÊt næi tiÕng víi nh÷ng tÝnh n¨ng Java còng t¬ng tù nh phiªn b¶n 3.0 cña Netscape. Víi ®Æc tÝnh hç trî cho Java, nh÷ng tr×nh duyÖt ®· trë nªn næi tiÕng nh Netscape Navigator vµ Internet Explorer ®Ó gióp ®ì ph¸t triÓn øng dông cña Java (nh÷ng c«ng cô sña lçi, m«i trêng ph¸t triÓn...). HiÖn nay Java trë thµnh mét chuÈn chung trong hÇu hÕt c¸c phÇn mÒm trªn m¹ng. Nh÷ng ph¸t triÓn míi nhÊt cña Java hiÖn nay nh VRML (thùc t¹i ¶o) ch¹y trªn nh÷ng tr×nh duyÖt nh Netscape hay Internet Explorer. Nh÷ng ph¸t triÓn nµy sÏ kh«ng dõng t¹i ®ã.

III. §Æc ®iÓm cña Java 1. Java lµ mét m«i trêng ®éc lËp
M«i trêng ®éc lËp lµ mét trong nh÷ng lîi thÕ quan träng cho phÐp Java h¬n h¼n nh÷ng ng«n ng÷ kh¸c, ®Æc biÖt cho nh÷ng hÖ thèng cÇn ®Ó lµm viÖc trªn nhiÒu m«i trêng (m¸y tÝnh, hÖ ®iÒu hµnh) kh¸c nhau. Java lµ mét m«i trêng ®éc lËp ë c¶ trªn nÒn hÖ thèng lÉn díi møc thÊp nh xö lÝ nhÞ ph©n.
Chó ý: M«i trêng ®éc lËp lµ mét ch¬ng tr×nh cã kh¶ n¨ng di chuyÓn dÔ dµng tõ hÖ thèng m¸y tÝnh nµy sang hÖ thèng m¸y tÝnh kh¸c mµ kh«ng phô thuéc vµo cÊu tróc cña m¸y hay hÖ ®iÒu hµnh ho¹t ®éng trªn m¸y.

Trªn møc nÒn, c¸c kiÓu d÷ liÖu c¬ b¶n cña Java cã vÞ trÝ v÷ng ch¾c trong tÊt c¶ c¸c m«i trêng. Nh÷ng líp th viÖn cña Java gióp cho ta viÕt ra c¸c ch¬ng tr×nh mµ nã cã thÓ ®em tõ m¸y tÝnh nµy sang m¸y tÝnh kh¸c mµ kh«ng cÇn ph¶i viÕt l¹i ®Ó ch¹y riªng cho m¸y tÝnh míi.

Trang :

6

X©y dùng øng dông m¹ng víi ng«n ng÷ Java M«i trêng ®éc lËp kh«ng bao giê chØ dõng l¹i ë møc nÒn. TËp tin chøa m· Java ®· dÞch còng gièng nh m«i trêng ®éc lËp, nã cã thÓ ch¹y trªn nhiÒu lo¹i m¸y tÝnh kh¸c nhau mµ kh«ng hÒ ®ßi hái biªn dÞch l¹i ch¬ng tr×nh nguån. VËy nã lµm viÖc nh thÕ nµo? Nh÷ng m· Java thùc sù ®îc gäi lµ ByteCode.
Chó ý: ByteCode lµ mét tËp hîp c¸c chØ dÉn tr«ng kh¸ gièng m· m¸y, nhng nã kh«ng cô thÓ cho bé xö lÝ nµo.

Th«ng thêng, khi ta biªn dÞch mét ch¬ng tr×nh viÕt trong C hay trong hÇu hÕt c¸c ng«n ng÷ kh¸c. Ch¬ng tr×nh biªn dÞch sÏ dÞch ch¬ng tr×nh cña ta ra m· m¸y hoÆc c¸c chØ thÞ cho bé xö lÝ Nh÷ng chØ thÞ nµy hoµn . toµn cô thÓ ®èi víi tõng bé xö lÝ ®Ó m¸y tÝnh cña ta ch¹y ®îc nã - v× vËy, vÝ dô khi ta biªn dÞch ch¬ng tr×nh cña b¹n trªn mét m¸y Pentium, kÕt qu¶ ch¬ng tr×nh sÏ chØ ch¹y trªn nh÷ng hÖ thèng Pentium kh¸c. NÕu ta muèn dïng cïng ch¬ng tr×nh nµy trªn mét hÖ thèng kh¸c (vÝ dô nh Apple), ta ph¶i söa l¹i ch¬ng tr×nh nguån cña ta. Mäi thø trë nªn kh¸c khi ta viÕt ch¬ng tr×nh trong Java. M«i trêng ph¸t triÓn Java gåm cã hai phÇn: mét Java compiler (ch¬ng tr×nh biªn dÞch Java), vµ mét Java Interpreter (ch¬ng tr×nh th«ng dÞch Java). Ch¬ng tr×nh biªn dÞch Java sÏ lµm viÖc víi ch¬ng tr×nh Java cña ta thay v× ph¸t sinh ra m· m¸y tõ tËp tin chøa ch¬ng tr×nh nguån cña ta, nã l¹i ph¸t sinh ra m· ByteCode. §Ó ch¹y mét ch¬ng tr×nh Java, ta gäi mét ch¬ng tr×nh cã tªn lµ ByteCode Interpreter, nã sÏ thùc thi ch¬ng tr×nh Java cña ta. Ta cã thÓ ch¹y ch¬ng tr×nh th«ng dÞch (Interpreter) hoÆc lµ (®èi víi applet) b»ng mét ByteCode interpreter cµi s½n trong HotJava hay trong mét ch¬ng tr×nh duyÖt xÐt cã tÝnh n¨ng Java kh¸c ®Ó ch¹y ®îc applet Java. T¹i sao trong tÊt c¶ nh÷ng vÊn ®Ò, ta ph¶i thªm vµo líp trung gian lµ líp ByteCode Interpreter nµy? Ch¬ng tr×nh Java cña ta díi d¹ng ByteCode cã nghÜa lµ thay v× ®îc dÞch cô thÓ víi tõng hÖ thèng mét, ch¬ng tr×nh cña ta sÏ cã kh¶ n¨ng ch¹y trong nhiÒu lo¹i m¸y tÝnh vµ nhiÒu hÖ ®iÒu hµnh kh¸c nhau khi bé th«ng dÞch Java cßn cã hiÖu lùc ë ®ã. Kh¶ n¨ng nµy cña tËp tin m· Java sÏ gióp cho nã thùc thi ®îc trªn c¸c lo¹i m«i trêng kh¸c nhau vµ lµ tÝnh cèt yÕu víi nh÷ng g× applet cã thÓ lµm viÖc ®îc, bëi v× WORLD WIDE WEB tù nã còng lµ m«i trêng ®éc lËp. Trong lóc tËp tin HTML cã thÓ ®îc ®äc trong nhiÒu m«i trêng, còng nh applet cã thÓ thùc thi trong nh÷ng m«i trêng mµ nh÷ng ch¬ng tr×nh duyÖt xÐt cã tÝnh n¨ng Java ch¹y ®îc trªn ®ã. YÕu ®iÓm cña viÖc dïng ByteCode lµ trong tèc ®é thùc thi. Bëi v× nh÷ng ch¬ng tr×nh ch¹y trong mét hÖ thèng cô thÓ, viÖc ch¹y trùc tiÕp trªn nh÷ng phÇn cøng cho nh÷ng c¸i mµ nã ®· ®îc biªn dÞch sÏ ch¹y nhanh h¬n Java ByteCode, c¸i mµ nã sÏ thùcthi bëi ch¬ng tr×nh th«ng dÞch. V× ®èi víi nhiÒu ch¬ng tr×nh Java, tèc ®é cã lÏ kh«ng cßn lµ vÊn ®Ò quan träng. NÕu ta viÕt nh÷ng ch¬ng tr×nh mµ cÇn nhiÒu tèc ®é thùc thi h¬n, bé th«ng dÞch Java cã thÓ cung cÊp cho ta cã mét vµi ph¬ng ¸n thÝch hîp, bao gåm viÖc cã thÓ liªn kÕt nh÷ng ch¬ng tr×nh nguån vµo trong ch¬ng tr×nh Java cña ta hoÆc lµ dïng nh÷ng c«ng cô chuyÓn ®æi ByteCode ®æi l¹i thµnh ch¬ng tr×nh nguån. Chó ý r»ng nÕu ta dïng ph¬ng ¸n nµy, sÏ lµm mÊt tÝnh n¨ng ®éng mµ Java ByteCode ®· cung cÊp.
Trang :

7

X©y dùng øng dông m¹ng víi ng«n ng÷ Java

2. Java lµ mét ng«n ng÷ híng ®èi tîng
§èi víi mét vµi ngêi, kÜ thuËt lËp tr×nh híng ®èi tîng (OOP) chØ ®¬n thuÇn lµ mét c¸ch tæ chøc ch¬ng tr×nh, vµ nã cã thÓ sö dông tèt trong nhiÒu ng«n ng÷. Khi lµm viÖc víi ng«n ng÷ lËp tr×nh híng ®èi tîng thùc vµ m«i trêng lËp tr×nh nµy, ta cã kh¶ n¨ng ®¹t ®îc hÕt tÊt c¶ nh÷ng lîi thÕ cña ph¬ng ph¸p lËp tr×nh híng ®èi tîng vµ kh¶ n¨ng ®Ó t¹o ra sù mÒm dÎo tÝnh linh ho¹t, lËp tr×nh theo tõng khèi vµ sö dông l¹i ch¬ng tr×nh cò. NhiÒu kh¸i niÖm híng ®èi tîng cña Java ®îc thõa hëng tõ C++, ng«n ng÷ mµ Java lÊy lµm c¬ së. Nhng ngoµi ra nã cßn mîn kh¸ nhiÒu kh¸i niÖm tõ nh÷ng ng«n ng÷ lËp tr×nh híng ®èi tîng kh¸c. Gièng nh hÇu hÕt c¸c ng«n ng÷ lËp tr×nh híng ®èi tîng, Java bao gåm c¸c líp th viÖn mµ nã cung cÊp nh÷ng d÷ liÖu c¬ b¶n vµ d÷ liÖu nhËp cña hÖ thèng cïng víi kh¶ n¨ng xuÊt d÷ liÖu vµ nh÷ng hµm tiÖn Ých. Nh÷ng líp c¬ b¶n nµy lµ nh÷ng phÇn cña c«ng cô ph¸t triÓn Java (Java Developvement Kit), nã còng cã nh÷ng líp hç trî tÝnh n¨ng m¹ng, nh÷ng nghi thøc chung cña Internet vµ nh÷ng hµm giao tiÕp víi ngêi dïng. Bëi v× nh÷ng líp th viÖn nµy ®îc viÕt trong Java, nã cã tÝnh kh¶ chuyÓn gi÷a c¸c m«i trêng còng gièng nh tÊt c¶ c¸c øng dông kh¸c cña Java.

3. Java dÔ häc
Ngoµi tÝnh n¨ng linh ho¹t vµ híng ®èi tîng, môc tiªu s¾p xÕp ban ®Çu cña Java lµ nhá vµ gän, vµ v× vËy nã dÔ viÕt h¬n, dÔ söa lçi h¬n vµ h¬n hÕt tÊt c¶ lµ dÔ häc. ViÖc gi÷ cho ng«n ng÷ ë kÝch thíc nhá lµm cho nã m¹nh h¬n bëi v× nã Ýt cã c¬ héi cho ngêi lËp tr×nh tù t¹o ra khã kh¨n ®Ó t×m lçi. MÆc dï kÝch thíc cña nã vµ thiÕt kÕ ®¬n gi¶n, Java vÉn cã søc m¹nh khæng lå vµ tÝnh mÒm dÎo. Java ®îc x©y dùng theo ng«n ng÷ C vµ C++, vµ ®a phÇn có ph¸p vµ cÊu tróc híng ®èi tîng ®îc mîn tõ ®ã. NÕu nh ®· quen víi C++, viÖc häc Java sÏ trë nªn ®Æc biÖt dÔ dµng h¬n v× hÇu hÕt ®· cã nÒn t¶ng. MÆc dï Java rÊt gièng C vµ C++, nhng hÇu hÕt nh÷ng phÇn kh¸ phøc t¹p cña ng«n ng÷ nµy ®· bÞ Java lo¹i bá, ®iÒu nµy lµm cho ng«n ng÷ trë nªn ®¬n gi¶n h¬n mµ kh«ng tèn nhiÒu søc. Kh«ng cã con trá trong Java, chuçi kÝ tù lµ ®èi tîng thùc cña Java. ViÖc qu¶n lÝ bé nhí lµ tù ®éng. §èi víi nh÷ng chuyªn viªn lËp tr×nh, nh÷ng sù bá sãt nµy cã thÓ g©y khã kh¨n cho viÖc sö dông, nhng ®èi víi nh÷ng ngêi häc tõ ®Çu vµ nh÷ng ngêi ®· lµm viÖc víi ng«n ng÷ kh¸c, nã sÏ lµm cho ng«n ng÷ Java dÔ häc h¬n nhiÒu.

IV. CÊu tróc cña Java
Søc m¹nh Java cã ®îc chÝnh lµ nhê cÊu tróc cña nã. Java ®îc thiÕt kÕ nh»m môc ®Ých tríc hÕt lµ ®¬n gi¶n ho¸ c«ng viÖc cña ngêi lËp tr×nh. KÕ ®Õn, do nhu cÇu ch¹y trªn m¹ng, Java ph¶i thËt sù an toµn vµ æn ®Þnh, còng nh cã kh¶ n¨ng lµm viÖc ®îc víi nhiÒu kiÓu phÇn cøng, phÇn mÒm kh¸c nhau. CÊu tróc ng«n ng÷ Java thùc sù ®· ®¶m b¶o ®îc tÊt c¶ c¸c tÝnh n¨ng trªn.
Trang :

8

X©y dùng øng dông m¹ng víi ng«n ng÷ Java Còng nh c¸c ng«n ng÷ lËp tr×nh kh¸c, Java cÇn mét tr×nh biªn dÞch ®Ó chuyÓn ®æi m· lÖnh cho ngêi ®äc (m· nguån) sang øng dông thùc thi ®îc. C¸c tr×nh biªn dÞch th«ng thêng nh Microsoft Visual C ++ cho Windows 95 sÏ biªn dÞch ch¬ng tr×nh sang m· lÖnh thùc hiÖn trªn mét lo¹i phÇn cøng nhÊt ®Þnh nµo ®ã (trong trêng hîp nµy lµ m½ lÖnh cho Intel x86). Tr¸i l¹i, tr×nh biªn dÞch Java l¹i chuyÓn ch¬ng tr×nh nguån Java thµnh c¸c ByteCode. C¸c ByteCode nµy chØ cã thÓ ch¹y ®îc trªn m¸y ¶o Java (Java Virtual Machine - JVM).
Chó ý: HiÖn nay m¸y ¶o Java (JVM) míi ®îc t¹o dùng b»ng phÇn mÒm chø kh«ng ph¶i phÇn cøng. Sun Microsystems vµ mét sè c«ng ty ®iÖn tö kh¸c ®ang tiÕn hµnh nghiªn cøu ph¸t triÓn chip PicoJava, nh»m môc ®Ých t¹o m¸y ¶o Java b»ng phÇn cøng. C¸c chip nµy cho phÐp ®a Java vµo c¸c thiÕt bÞ ®iÖn tö mét c¸ch dÔ dµng h¬n, ®ång thêi lµm t¨ng tèc ®é tèi ®a cho c¸c JVM viÕt b»ng phÇn mÒm.

Bé Java Developers Kit (JDK) do Sun cung cÊp bao gåm mét sè ch¬ng tr×nh tiÖn Ých cho phÐp b¹n biªn dÞch, b¾t lçi vµ t¹o tµi liÖu cho mét øng dông Java. HiÖn nay, trªn thÞ trêng ®ang cã rÊt nhiÒu m«i trêng ph¸t triÓn Java cña h·ng thø ba rÊt tiÖn lîi (nh Visual J++, Symantec CafÐ, Jbuilder,...), nhng tÊt c¶ c¸c ch¬ng tr×nh nµy ®Òu dùa trªn nÒn JDK. C¸c tr×nh tiÖn Ých cña JDK bao gåm: • Javac: bé biªn dÞch Java: lµm nhiÖm vô chuyÓn m· nguån Java sang ByteCode. • Java: bé th«ng dÞch Java: thùc thi c¸c øng dông Java trùc tiÕp tõ tËp tin líp (class). • Appletviewer: tr×nh th«ng dÞch Java thùc thi c¸c Java applet tõ tËp tin HTML. • Javadoc: t¹o tµi liÖu d¹ng HTML tõ m· nguån cïng víi c¸c chó thÝch bªn trong. • JDP Java debuger: cho phÐp b¹n thùc hiÖn tõng dßng trong ch¬ng tr×nh, ®Æt c¸c ®iÓm dõng (breakpoint), xem gi¸ trÞ c¸c biÕn. • Javah: t¹o ra tËp tin header cña C cho phÐp C gäi hµm Java hoÆc ngîc l¹i. • Javap: tr×nh dÞch ngîc Java (disassembler): hiÓn thÞ c¸c hµm vµ d÷ liÖu truy cËp tõ bªn trong mét tËp tin líp ®· dÞch. Nã còng cho phÐp hiÓn thÞ nghÜa cña ByteCode. Qu¸ tr×nh biªn dÞch Java nh sau: m· nguån trong c¸c tËp tin *.java, qua tr×nh biªn dÞch Javac ®îc chuyÓn thµnh c¸c ByteCode. ByteCode n»m trong tËp in *.class, ®îc gäi lµ tËp tin líp (bëi mçi tËp tin chøa mét líp riªng biÖt cña Java). C¸c øng dông Java cã thÓ bao gåm nhiÒu líp kh¸c nhau. Khi thùc hiÖn ch¬ng tr×nh Java, m¸y ¶o Java sö dông tr×nh n¹p líp (class loader) ®Ó ®äc c¸c ByteCode tõ ®Üa hoÆc kÕt nèi m¹ng. C¸c líp ®îc n¹p sÏ ph¶i ®i qua tr×nh kiÓm tra líp (class verifier) ®Ó ch¾c ch¾n r»ng chóng sÏ kh«ng sinh ra c¸c lçi ¶nh hëng ®Õn hÖ thèng khi thùc thi. Qu¸ tr×nh kiÓm tra nµy lµm t¨ng thêi gian n¹p mét líp, tuy nhiªn nã chØ ®îc thùc hiÖn cã mét lÇn mµ th«i.

Trang :

9

X©y dùng øng dông m¹ng víi ng«n ng÷ Java PhÇn thùc hiÖn (execution unit) trong m¸y ¶o Java sÏ thùc thi c¸c lÖnh quy ®Þnh trong tõng ByteCode. Bé phËn thùc thi ®¬n gi¶n nhÊt lµ mét tr×nh th«ng dÞch, chuyÓn ®æi tõ ByteCode sang c¸c thñ tôc cµn lµm trªn tõng hÖ thèng. C¸ch nµy rÊt chËm v× tr×nh th«ng dÞch lu«n ph¶i tra nghÜa cña ByteCode mµ nã thùc thi. §Ó kh¾c phôc nhîc ®iÓm nµy, ngêi ta ®a ra tr×nh biªn dÞch Just-in-time (JIT): qu¸ tr×nh chuyÓn ®æi tõ ByteCode sang m· lÖnh riªng cña tõng hÖ thèng sÏ ®îc lµm lu«n mét lÇn ngay khi M¹ng HÖ thèng cña kh¸ch hµng

00 3F 9A 3B 7C M¸y chñ2D 2F 3A 6E

(Java Virtual Machine)
Tr×nh kiÓm tra líp

Tr×nh n¹p líp M¸y ¶o Java

TÖp tin *.class

PhÇn thùc hiÖn c¸c lÖnh n¹p ch¬ng tr×nh, do ®ã t¨ng ®îc tèc ®é ®¸ng kÓ. Ch¬ng tr×nh viÕt b»ng Java cã thÓ lµ øng dông riªng biÖt (stand-alone application), hoÆc applet hoÆc ®ång thêi c¶ hai. Applet lµ ch¬ng tr×nh ®îc nhóng trong trang Web, ®îc ®äc vµ thùc hiÖn bëi tr×nh duyÖt hç trî Java (Java-enabled Web browser). Khi tr×nh duyÖt ®äc tíi trang Web nµy, applet sÏ ®îc thùc thi. Tr¸i l¹i, mét øng dông Java riªng biÖt ®îc ch¹y b»ng dßng lÖnh (Java Tªn-líp-cÇn-thùc-thi tham-sè), kh«ng cÇn th«ng qua tr×nh duyÖt Web. Mét tr×nh duyÖt Web hç trî Java (Java - Enable Browser) cã m¸y ¶o Java riªng. HiÖn nay c¸c tr×nh duyÖt hç trî Java nh vËy kh¸ nhiÒu: Netscape 2.0 trë lªn, Hätava, Microsoft Internet explorer 3.0 beta 2 trë lªn... C¸c trang Web nhóng Java applet cã chøa ®êng dÉn kiÓu URL tíi tËp tin líp chÝnh cña applet ®ã. Tr×nh duyÖt chØ viÖc khëi ®éng m¸y ¶o Java vµ cung cÊp cho tr×nh n¹p líp ®êng dÉn nµy. Chó ý r»ng mçi líp ®Òu ®a ra tªn cña c¸c líp phô nã cÇn, do ®ã tr×nh n¹p líp ph¶i n¹p mét sè líp phô kh¸c tríc khi thùc hiÖn ch¬ng tr×nh. Kh¸c biÖt gi÷a Java Applet vµ øng dông Java (Java Application)
Java Application Khai b¸o Giao diÖn ®å ho¹ Yªu cÇu bé nhí C¸ch n¹p tr×nh
Lµ líp con cña bÊt Kú líp nµo Tïy chän Bé nhí tèi thiÓu cho øng dông ®ã Do tr×nh duyÖt Web QuyÕt ®Þnh Bé nhí dµnh cho c¶ tr×nh duyÖt vµ applet ®ã N¹p th«ng qua trang Web, do ®ã cã thÓ chuyÓn tíi phÝa client. C¸c tham sè ®Æt trong tµi liÖu HTML. Ngoµi ra cã thÓ lÊy ®Þa chØ Trang :

Java Applet
Ph¶i lµ líp con cña líp Applet

ch¬ng N¹p b»ng dßng lÖnh
Th«ng qua tham sè trªn dßng lÖnh

D÷ liÖu vµo

10

X©y dùng øng dông m¹ng víi ng«n ng÷ Java
vµ kÝch thíc tr×nh duyÖt

C¸c hµm ch¹y bëi main() - hµm ®îc gäi init() - hµm ®îc gäi khi applet khëi ®Çu tiªn (gièng C, C++) t¹o JVM
start() - hµm ®îc gäi khi applet ch¹y stop() - hµm ®îc gäi khi applet dõng destroy() - ®îc gäi khi applet bÞ xãa khái bé nhí paint() - ®îc gäi khi applet cÇn vÏ l¹i mµn h×nh

KiÓu øng ®îc dïng

dông C¸c øng dông server C¸c øng dông trªn Web: t¹o h×nh
trªn m¹ng, c«ng cô ph¸t triÓn, øng dông ®Æt trong m¸y ®iÖn tö d©n dông ¶nh ®éng, tr×nh diÔn ®å häa...

Mét ch¬ng tr×nh Java applet ®¬n gi¶n:
//Lu tËptin nµyvíi tªn Hello.Java //råi biªn dÞch ®Ó ®îcHello.class importJava.awt.Graphics; importJava.applet.Applet; //Khai b¸olípmíi public classHelloextends Applet { public voidinit(){resize (250,25);} public voidpaint(Graphicsg) { g.drawString(“Helloeverybody!“,50,25); } }

T¹o mét tµi liÖu HTML cã nhóng Applet trªn (®Ó c¶ t¹p tin Hello.html vµ Hello.class ë cïng mét th môc ):
<!------Lu díi tªn Hello.html------> <HTML> <HEAD> <TITLE>Chµo c¸c b¹n!</TITLE> </HEAD> <BODY> <h1>VÝdôvÒ Applet</h1><br> <hr> <AppletCode=“Hello. class” Width=50Height=50></Applet> </BODY> </HTML>

V. C¸c ®Æc tÝnh chÝnh cña øng dông Java
Trong phÇn nµy, chóng ta sÏ ®iÓm qua 7 ®Æc tÝnh khiÕn Java trë thµnh mét c«ng cô ph¸t triÓn m¹nh, tin cËy.

1. An ninh
Trang :

11

X©y dùng øng dông m¹ng víi ng«n ng÷ Java An ninh lµ mét vÊn ®Ò khã kh¨n hµng ®Çu mµ ngêi lËp tr×nh m¹ng gÆp ph¶i: ngêi sö dông lu«n e ng¹i hai ®iÒu: thø nhÊt, th«ng tin hä göi ®i trªn m¹ng cã thÓ bÞ ®äc lÐn vµ thø hai, hÖ thèng cña hä cã thÓ bÞ x©m nhËp vµ ph¸ ho¹i. CÊu tróc an ninh cña Java nh»m vµo gi¶i quyÕt ®ång thêi hai vÊn ®Ò trªn. CÊu tróc an ninh cña Java dùa vµo ba thµnh phÇn: tr×nh n¹p líp, tr×nh kiÓm tra líp vµ tr×nh qu¶n lý an ninh (Security Manager). Chóng ta ®· biÕt r»ng tr×nh kiÓm tra líp lµm nhiÖm vô ®¶m b¶o ch¾c ch¾n ch¬ng tr×nh Java ®îc biªn dÞch ®óng ®¾n, khi thùc hiÖn sÏ kh«ng g©y lçi ¶nh hëng ®Õn hÖ thèng còng nh kh«ng ®ông ch¹m ®Õn nh÷ng d÷ liÖu Ęriªng tę trªn m¸y kh¸ch hµng. Bªn c¹nh ®ã, tr×nh n¹p líp ph©n biÖt râ líp nµo ®Õn tõ m¹ng, líp nµo n»m ngay trªn m¸y kh¸ch hµng. §iÒu nµy ng¨n líp tíi tõ m¹ng Ęgi¶ d¹ngę mét líp trªn m¸y kh¸ch h¸ng ®Ó thùc hiÖn c¸c t¸c vô bÞ cÊm ®èi víi líp nµy. Ngoµi ra nã cßn gióp t¸ch biÖt ho¹t ®éng cña c¸c líp kh¸c nhau tíi tõ c¸c m¸y chñ kh¸c nhau. Tr×nh qu¶n lý an ninh kiÓm so¸t c¸c ho¹t ®éng cña mét m¸y ¶o Java ®îc quyÒn lµm díi ®iÒu kiÖn kh¸c nhau. Mét vÝ dô rÊt c¬ b¶n lµ ho¹t ®éng ®äc/ghi tËp tin (file I/O) ®îc qu¶n lý chÆt chÏ bëi tr×nh qu¶n lý an ninh: c¸c applet chØ cã quyÒn ®äc/ghi c¸c tËp tin t¹i m¸y server chøa nã mµ th«i! Tuy nhiªn, tr×nh qu¶n lý an ninh còng lµ mét líp trong Java, do ®ã chóng ta cã thÓ viÕt mét líp an ninh riªng cho m×nh b»ng c¸ch t¹o mét líp dÉn suÊt tõ líp Security Manager.

2. Giao diÖn lËp tr×nh øng dông chuÈn - Core API
Java cung cÊp cho ngêi lËp tr×nh mét th viÖn c¸c hµm chuÈn, ®ã lµ Core API. C¸c hµm chuÈn nµy ®îc ®Æt trong c¸c gãi (package) - lµ tËp hîp cña c¸c líp cã mèi quan hÖ víi nhau (vÝ dô nh gãi Java.awt chøa c¸c líp Abstract Windowing Toolkit, gióp ngêi lËp tr×nh x©y dùng øng dông víi giao diÖn GUI trªn c¸c platform kh¸c nhau ).

3. T¬ng thÝch víi nhiÒu kiÓu phÇn cøng
M· ByteCode cña Java cã thÓ ch¹y trªn hÇu nh mäi lo¹i phÇn cøng vµ hÖ ®iÒu hµnh hiÖn nay nh PC, Macintosh... còng nh c¸c m¸y kh¸c cã ch¹y m¸y ¶o Java. Mét ®iÓm n÷a lµ th viÖn c¸c thñ tôc chuÈn Java cã chøa ®Çy ®ñ c¸c hµm cã thÓ dïng chung cho c¸c platform kh¸c nhau.

4. §Æc tÝnh ®éng vµ ph©n t¸n
HÖ ®iÒu hµnh Windows cho phÐp c¸c ch¬ng tr×nh sö dông chung vµ n¹p tù ®éng c¸c th viÖn liªn kÕt ®éng DLL. Chia xÎ tËp tin DLL lµm gi¶m dung lîng bé nhí còng nh ®Üa cÇn dïng vµ t¨ng tÝnh cÊu tróc cña ch¬ng tr×nh. Java còng cã ®Æc tÝnh nµy: c¸c líp ®î n¹p tù ®éng khi cÇn vµ nhiÒu ch¬ng tr×nh cã thÓ dïng chung mét líp. Nã cßn hç trî ®Æc tÝnh ph©n t¸n, tøc lµ c¸c phÇn cña ch¬ng tr×nh cã thÓ n»m trªn m¸y chñ lÉn m¸y cña ngêi sö dông (client).

Trang :

12

X©y dùng øng dông m¹ng víi ng«n ng÷ Java

5. Híng ®èi tîng
LËp tr×nh híng ®èi tîng (OOP) lµ ph¬ng thøc viÕt c¸c øng dông dÔ b¶o tr×, dÔ n©ng cÊp vµ ®Æc biÖt lµ cã thÓ t¸i sö dông c¸c m· lÖnh. Java lµ mét ng«n ng÷ lËp tr×nh híng ®èi tîng nªn nã cã ®Çy ®ñ c¸c ®Æc tÝnh trªn. Ngoµi ra th viÖn líp Java cung cÊp kh¸ ®Çy ®ñ cho ngêi lËp tr×nh ®Ó b¾t ®Çu mét dù ¸n míi.

6. §a luång (Multi-thread)
C¸c øng dông viÕt b»ng Java cã thÓ cã nhiÒu tiÕn tr×nh ®îc xö lý cïng mét lóc. Mét øng dông ®¬n luång chØ cã thÓ thùc hiÖn mét t¸c vô t¹i mét thêi ®iÓm: gi¶ sö øng dông ®ang bËn lÊy tõ trªn m¹ng xuèng mét tËp tin mÊt vµi phót, trong thêi gian nµy øng dông kh«ng thÓ lµm c¸c viÖc kh¸c nh: vÏ l¹i mµn h×nh... Víi øng dông viÕt b»ng Java, b¹n cã thÓ t¹o hai tiÕn tr×nh song song lµm viÖc: mét tiÕn tr×nh n¹p tËp tin, mét tiÕn tr×nh cËp nhËt mµn h×nh.

7. Qu¶n lý bé nhí vµ qu¸ tr×nh thu rän r¸c
Qu¶n lý bé nhí lµ mét vÊn ®Ò kh¸ phøc t¹p ®èi víi C vµ C++. Trong thêi gian thùc hiÖn ch¬ng tr×nh, ngêi lËp tr×nh chÞu tr¸ch nhiÖm khëi t¹o c¸c vïng nhí, sau khi dïng xong l¹i gi¶i phãng chóng. ChØ cÇn mét lçi nhá trong ®ã còng cã thÓ lµm c¹n kiÖt tµi nguyªn hay dÉn ®Õn treo hÖ thèng. Java ®· vít bá g¸nh nÆng nµy cho ngêi lËp tr×nh C¸c vïng nhí ®îc t¹o ra trong ch¬ng tr×nh sÏ tù ®éng ®îc gi¶i phãng th«ng qua qu¸ tr×nh thu rän Ęr¸cę. C¸c vïng nhí ®îc tù ®éng ®îc gi¶i phãng nÕu nh nã kh«ng quy chiÕu ®Õn bÊt cø ®èi tîng ®ang ho¹t ®éng nµo. C¸c qu¶n lý bé nhí cña Java cñng cè thªm tÝnh an ninh cña c¸c m¸y ¶o. Trong C vµ C++ ngêi lËp tr×nh cã thÓ truy cËp ®Õn hÖ thèng th«ng qua con trá (pointer). Víi Java phÐp to¸n con trá bÞ cÊm, do ®ã con trá lu«n chØ ®Õn d÷ liÖu cÇn thiÕt cña øng dông trªn m¸y ¶o, ng¨n ngõa øng dông truy xuÊt ®Õn tµi nguyªn bªn ngoµi m¸y ¶o.

VI. Java so víi c¸c ng«n ng÷ lËp tr×nh kh¸c
§«i khi ngêi lËp tr×nh nhÇm lÉn khi chän ng«n ng÷ ph¸t triÓn c¸c øng dông cña m×nh. V× vËy trong phÇn nµy, ta h·y so s¸nh Java víi c¸c c«ng cô ph¸t triÓn kh¸c ®Ó thÊy ®îc Java thÝch hîp ®Ó lµm g×.

1. Java so s¸nh víi Perl
Perl tõ l©u ®· lµ ng«n ng÷ lý tëng cho viÖc lËp tr×nh CGI (CGI-Common Gateway Interface). Víi c¸c øng dông trªn Perl, Ýt cã ng«n ng÷ nµo tiÖn lîi l¹i ®¬n gi¶n h¬n Perl. §iÓm m¹nh cña Perl lµ kh¶ n¨ng ph©n tÝch c¸c x©u ký tù rÊt m¹nh. Khi lµm viÖc thuÇn tuý víi v¨n b¶n. Perl cã tèc ®é cao h¬n nhiÒu so víi Java. Tuy nhiªn Perl l¹i kh«ng cã c¸c tÝnh n¨ng ®å ho¹ nh Java. Java lµ ng«n ng÷ ph©n t¸n, nghÜa lµ ch¬ng tr×nh viÕt b»ng Java kh«ng nhÊt thiÕt ph¶i ch¹y ë sever nh Perl. Nh vËy, Java gióp gi¶m t¶i träng c«ng
Trang :

13

X©y dùng øng dông m¹ng víi ng«n ng÷ Java viÖc trªn sever, ®ång thêi lµm viÖc ph©n phèi c¸c ch¬ng tr×nh Java ®¬n gi¶n h¬n (víi Perl, khi ®em ch¬ng tr×nh tõ n¬i nµy sang n¬i kh¸c cÇn ph¶i thay ®æi ®«i chç). §iÓm h¹n chÕ lín nhÊt cña Java so víi Perl lµ Java kh«ng ®îc phÐp ghi th«ng tin lªn sever. Tuy nhiªn, ®©y lµ vÊn ®Ò liªn quan ®Õn vÊn ®Ò an ninh, kh«ng ph¶i lµ lçi cña Java. VÊn ®Ò nµy sÏ ®îc xem xÐt trong mét vµi n¨m tíi.

2. Java so s¸nh víi c¸c ng«n ng÷ C, C++, Pascal..
C¸c ng«n ng÷ lËp tr×nh kh¸c nh C, C++ cã mÆt tríc Java kh¸ l©u, ®îc x©y dùng ®Çy ®ñ h¬n, cung cÊp cho ngêi sö dông nhiÒu dÞch vô cÊp thÊp mµ Java kh«ng cã. Chóng cho phÐp ngêi sö dông t¹o ra c¸c ch¬ng tr×nh ®îc tèi u ho¸ ®Ó ch¹y trªn phÇn mÒm hoÆc phÇn cøng nhÊt ®Þnh. ChÝnh v× vËy, Java sÏ khã lßng thay thÕ ®îc c¸c ng«n ng÷ nµy trong nhiÒu lÜnh vùc. Tuy nhiªn, víi c¸c tÝnh n¨ng nh an ninh, kh¶ n¨ng ch¹y trªn nhiÒu m«i trêng vµ ®Æc biÖt kh«ng ng«n ng÷ nµo trªn ®©y cã thÓ so s¸nh ®îc víi Java trong viÖc x©y dùng nh÷ng øng dông dµnh cho Internet.

3. Java vµ ActiveX
ActiveX lµ hÖ thèng thµnh phÇn ®èi tîng nhóng vµ liªn kÕt (OLE) ®Ó ch¹y trªn Internet do h·ng phÇn mÒm Microsoft t¹o ra. Gièng nh Java Applet, khi tr×nh duyÖt hç trî ActiveX n¹p c¸c trang Web cã nhóng thµnh phÇn ®iÒu khiÓn ActiveX, c¸c thµnh phÇn nµy sÏ ®îc lÊy vÒ vµ thùc thi trªn m¸y t¹i chç. Microsoft còng thiÕt kÕ Visual Basic Script cã có ph¸p gièng Basic nhng ®¬n gi¶n h¬n nhiÒu ®Ó c¹nh tranh víi Java Script. Visual Basic Script ®ãng vai trß cÇu nèi gi÷a HTML vµ ActiveX. Khi ngêi sö dông nhÊn chuét trong trang HTML, tr×nh duyÖt sÏ thùc thi phÇn Visual Basic Script quy ®Þnh xö lý sù kiÖn ®ã. §o¹n Visual Basic Script nµy ®Õn lît m×nh gäi ®Õn thµnh phÇn ®iÒu khiÓn ActiveX. ¦u ®iÓm thø nhÊt cña ActiveX lµ tèc ®é cao do nã ®îc viÕt tèi u cho Microsoft Windows. Thø hai, ActiveX thùc chÊt lµ c¸c OCX cña Visual Basic 32-bit, do ®ã chóng ta dÔ dµng t¹o míi c¸c thµnh phÇn nµy b»ng c«ng cô m¹nh nh Visual Basic, Delphi, hay Visual C++... thÕ hÖ míi. Chóng ta cã thÓ t¸i sö dông hµng tr¨m thµnh phÇn ®iÒu khiÓn ®· s½n cã trªn thÞ trêng vµo trang Web cña m×nh. Thø ba, ActiveX cã kh¶ n¨ng liªn kÕt ®Õn c¸c øng dông kh¸c cña Microsoft nh NetMeeting... Tuy nhiªn, ActiveX kh«ng ph¶i lµ kh«ng cã nhîc ®iÓm. Thø nhÊt, nã chØ ch¹y trªn m«i trêng Windows, tr×nh duyÖt duy nhÊt hiÖn nay hiÓu ®îc ActiveX lµ Internet explore 3.0 trë lªn. §iÒu nµy lµm mÊt ®i tÝnh ®éc lËp víi hÖ thèng cña Web. HiÖn nay ActiveX ®ang tiÕp tôc ®îc c¶i tiÕn ®Ó cã thÓ ch¹y trªn c¸c hÖ thèng kh¸c nhng gÆp rÊt nhiÒu khã kh¨n. Thø hai, tÝnh an toµn cña VBScript ®ang lµ vÊn ®Ò cßn bµn c·i. Tr¸i l¹i víi ActiveX, Java tuy tèc ®é chËm nhng an toµn vµ ch¹y ®îc trªn nhiÒu hÖ thèng kh¸c nhau h¬n. C¸c kÕ ho¹ch t¨ng tèc cho Java vµ c¶i tiÕn c¸c th viÖn cña nã ®ang ®îc Sun tiÕn hµnh. Bªn c¹nh ®ã, ®»ng sau Java lµ nh÷ng nhµ s¶n suÊt phÇn cøng vµ phÇn mÒm hïng m¹nh. Ngµy cµng nhiÒu c«ng cô x©y dùng øng dông Java trùc quan ®ang ®îc ph¸t triÓn vµ
Trang :

14

X©y dùng øng dông m¹ng víi ng«n ng÷ Java ®a vµo sö dông nh JBuilder cña Borland, Symantec CafÐ cña Symantec, Java Workshop cña SunSoft....

Trang :

15

X©y dùng øng dông m¹ng víi ng«n ng÷ Java

PhÇn 2: ®Æc t¶ ng«n ng÷ Java
I. Ng«n ng÷ Java 1. Có ph¸p Java
Ng«n ng÷ Java hoµn toµn t¬ng tù C++. Trong môc nµy chóng ta sÏ xem xÐt có ph¸p c©u lÖnh vµ c¸c tõ kho¸ cña ng«n ng÷ nµy. Cã hai kiÓu lÖnh c¬ b¶n: • • C¸c lÖnh biÓu thøc C¸c lÖnh khai b¸o

C¸c lÖnh biÓu thøc bao gåm:  BiÓu thøc g¸n  To¸n tö t¨ng, gi¶m tríc hoÆc sau  Lêi gäi ph¬ng thøc (dï cã tr¶ vÒ gi¸ trÞ hay kh«ng)  C¸c biÓu thøc t¹o ®èi tîng, cã sö dông to¸n tö new. C¸c lÖnh khai b¸o (th«ng thêng lµ c¸c lÖnh khai b¸o c¸c biÕn côc bé vµ gi¸ trÞ khëi t¹o cña nã). Nh÷ng c©u lÖnh nµy cã xuÊt hiÖn bÊt kú ë vÞ trÝ nµo trong mét khèi. C¸c biÕn côc bé chØ tån t¹i khi mµ khèi chøa khai b¸o cña chóng ®ang ®îc xö lý. C¸c biÕn côc bé ph¶i ®îc khëi t¹o tríc khi sö dông, hoÆc khi khai b¸o, hoÆc thùc hiÖn b»ng lÖnh g¸n. NÕu bÊt kú biÕn nµo kh«ng ®îc khëi t¹o th× m· sÏ kh«ng ®îc dÞch... Chi tiÕt h¬n, c¸c thµnh phÇn cña ng«n ng÷ Java gåm cã:

a) Lêi chó thÝch
Dïng cÆp dÊu Ę/*ę vµ Ę*/ę ®Ó bao mét khèi. Dïng cÆp Ę//ę ®Ó t¹o mét dßng chó thÝch tõ vÞ trÝ ®Æt ký hiÖu chó thÝch.

b) C¸c ph¸t biÓu
Ph¸t biÓu lµ mét dßng riªng biÖt trong m· Java, tr¸nh nhÇm víi kh¸i niÖm dßng trong tËp tin nguån.

c) C¸c khèi m· lÖnh
TËp c¸c lÖnh cã thÓ ®øng gép víi nhau bëi cÆp dÊu Ę{ę vµ Ę}ę t¹o thµnh mét khèi m· lÖnh. §iÒu nµy gióp cho mét ph¸t biÓu ®¬n nµo ®ã cã thÓ dÔ dµng ®iÒu khiÓn viÖc thùc hiÖn cña mét nhãm lÖnh kh¸c.

d) CÊu tróc tËp tin
Mçi tËp tin nguån chØ chøa 3 kiÓu ph¸t biÓu ngoµi c¸c khèi m· lÖnh:
Trang :

16

X©y dùng øng dông m¹ng víi ng«n ng÷ Java • • • Ph¸t biÓu package: ®Þnh nghÜa mét gãi mµ c¸c líp trong tËp tin nµy n»m trong ®ã. Ph¸t biÓu import: qui chiÕu ®Õn mét hay nhiÒu líp ®· cã th«ng qua tªn líp. Ph¸t biÓu class: ®Þnh nghÜa líp cña ngêi dïng.

C¸c ph¸t biÓu package vµ import lµ tuú chän, nhng nÕu cã mÆt c¸c ph¸t biÓu nµy th× ph¶i khai b¸o theo ®óng tr×nh tù trªn.

e) Tõ kho¸
Còng nh mäi ng«n ng÷ kh¸c, tõ kho¸ víi Java lµ c¸c tõ dµnh riªng, cã ý nghÜa ®Æc biÖt víi bé biªn dÞch, dïng trong khai b¸o hay c¸c có ph¸p c©u lÖnh ®iÒu khiÓn cña bé biªn dÞch.

f) Tõ ®Þnh danh
Dïng ®Æt tªn cho líp, hµm hoÆc biÕn. Tõ ®Þnh danh cã thÓ bao gåm c¶ ch÷ vµ sè, b¾t ®Çu ph¶i lµ ch÷ c¸i. Java lµ ng«n ng÷ ph©n biÖt ch÷ hoa ch÷ thêng.

g) Qui t¾c viÕt gi¸ trÞ
B¶ng khu«n d¹ng biÓu diÔn d÷ liÖu cña Java
KiÓu d÷ liÖu byte, int long float double boolean char string C¸ch viÕt

short, C¸c con sè thËp ph©n, b¾t ®Çu kh«ng ®îc lµ sè 0 0x theo sau lµ con sè thËp lôc 0 theo sau lµ con sè, biÓu diÔn c¬ sè 8 Gièng nh kiÓu int, theo sau lµ ch÷ c¸i l hoÆc L C¸c sè víi dÊu chÊm thËp ph©n hoÆc sè mò, theo sau lµ ch÷ c¸i f hoÆc F Gièng nh float nhng theo sau lµ ch÷ c¸i d hoÆc D NhËn hai gi¸ trÞ true hoÆc false Mét ký tù ASCII ®Æt trong hai dÊu nh¸y ®¬n, m· Unicode hoÆc chuçi tho¸t Mét chuçi c¸c ký tù ®Æt trong hai dÊu nh¸y kÐp

B¶ng chuçi tho¸t ký tù
D¹ng Ký hiÖu ý nghÜa Backspace Tab Ký tù vÒ ®Çu dßng Ký tù hÕt dßng Ký tù xuèng dßng DÊu nh¸y kÐp DÊu nh¸y ®¬n DÊu \
Trang :

Chuçi tho¸t ®Æc \b biÖt \t \n \f \r \ę \ė \\

17

X©y dùng øng dông m¹ng víi ng«n ng÷ Java
Chuçi tho¸t c¬ sè \DDDD 8 Chuçi Unicode tho¸t \HHHH Ký tù ASCII ®îc biÓu diÔn th«ng qua 3 sè c¬ sè 8 Ký tù Unicode ®îc biÓu diÔn díi d¹ng 4 ch÷ sè thËp lôc

2. C¸c tõ kho¸ ®Æc biÖt
a) Tõ kho¸ abstract
Khai b¸o mét líp cha ®îc ph¸t triÓn ®Çy ®ñ, kh«ng ®îc t¹o ®èi tîng tõ líp nµy. NÕu ®îc dïng cho hµm thµnh phÇn, tõ kho¸ abstract cho biÕt hµm ®ã sÏ ®îc ph¸t triÓn ®Çy ®ñ ë c¸c líp con. Khi ®ã líp chøa hµm còng ®îc coi lµ khai b¸o abstract nh»m tr¸nh viÖc t¹o ®èi tîng tõ líp vµ gäi ®Õn c¸c hµm ¶o. C¸c giao diÖn ®îc mÆc ®Þnh lµ abstract.

b) Tõ kho¸ static
Mçi ®èi tîng trong cïng mét líp th× sÏ cã mét b¶n sao riªng c¸c biÕn thµnh phÇn. Tuy nhiªn khi muèn cã biÕn thµnh phÇn dïng lµm biÕn chung cho tÊt c¶ c¸c ®èi tîng cña líp th× ngêi ta dïng tõ kho¸ static. Mét hµm thµnh phÇn còng cã thÓ khai b¸o tÜnh b»ng tõ kho¸ static nµy.

c) Tõ kho¸ synchronized
Java cho phÐp ch¹y nhiÒu t¸c vô mét lóc (tÝnh ®a luång - multithreading). Tuy nhiªn, ®«i khi hai t¸c vô cïng thùc hiÖn vµ truy cËp ®Õn mét hµm vµ cã thÓ dÉn ®Õn xung ®ét. Tõ kho¸ synchronized dïng ®Ó ®Þnh nghÜa mét hµm thµnh phÇn nµo ®ã lµ ®ång bé, nghÜa lµ trong mét thêi ®iÓm chØ cã mét thread ®îc gäi ®Õn hµm nµy.

d) Tõ kho¸ native
C¸c hµnh vi ®îc khai b¸o native sÏ ®îc thùc hiÖn b»ng ng«n ng÷ kh¸c do ®ã chóng kh«ng cã phÇn m· lÖnh. Ch¼ng h¹n:
public staticnative douible sin(double s);

Hµm trªn sÏ gäi ®Õn th viÖn chuÈn cña hÖ ®iÒu hµnh ®Ó tÝnh sin cña gãc s.
Chó ý: hai tõ kho¸ synchronized vµ native chØ ®îc dïng ®èi víi c¸c hµm thµnh phÇn

e) Tõ kho¸ volatite
Mét biÕn khai b¸o lµ volatite sÏ biÕn ®éng tuú ý, kh«ng thÓ gi¶ ®Þnh r»ng nã mang mét gi¸ trÞ nµo x¸c ®Þnh.

f) Tõ kho¸ final
§Ó khai b¸o mét biÕn lµ h»ng sè, ta dïng tõ kho¸ final vµ g¸n lu«n gi¸ trÞ khëi ®Çu cho nã khi khai b¸o. Trêng hîp dïng khai b¸o nµy cho hµm hay
Trang :

18

X©y dùng øng dông m¹ng víi ng«n ng÷ Java líp, chóng ta sÏ kh«ng cã kh¶ n¨ng t¹o líp con hay kh«ng cã kh¶ n¨ng t¹o hµm n¹p chång.

g) Tõ kho¸ private
Tõ kho¸ nµy giíi h¹n kh¶ n¨ng truy cËp ®Õn biÕn hoÆc hµm tõ phÝa bªn ngoµi líp, chØ cã c¸c hµm bªn trong líp míi cã kh¶ n¨ng truy cËp ®Õn hµm hay biÕn ®ã.

h) Tõ kho¸ protected
Tõ kho¸ protected qui ®Þnh biÕn hoÆc hµm ®ã ®îc Ęnh×n thÊyĘ bëi hµm trong líp ®ã hoÆc c¸c líp con cña líp ®ã. C¸c líp con cã thÓ n»m trªn c¸c gãi kh¸c nhau.

i) Tõ kho¸ private protected
T¬ng tù nh tõ kho¸ private nhng giíi h¹n h¬n: c¸c líp con cïng gãi víi líp mÑ míi nh×n thÊy c¸c hµm vµ biÕn nµy.

j) Tõ kho¸ this vµ super
Hai tõ kho¸ ®Æc biÖt nµy dïng trong c¸c biÓu thøc. Tõ kho¸ this t¬ng øng víi tªn ®èi tîng hiÖn thêi, cßn tõ kho¸ super ®Ó chØ líp cha cña ®èi tîng hiÖn thêi.

3. C¸c c©u lÖnh ®iÒu khiÓn
3.1 C¸c c©u lÖnh ®iÒu kiÖn a) Ph¸t biÓu if..else
D¹ng ®¬n gi¶n nhÊt cña luång ®iÒu khiÓn cã ®iÒu kiÖn lµ lÖnh if. Có ph¸p nh sau:
if(boolean_expr)statement1; else statement2;

Tríc hÕt biÓu thøc logic sÏ ®îc ®¸nh gi¸, nÕu gi¸ trÞ cña nã lµ ®óng th× lÖnh statement1 ®îc xö lý, ngîc l¹i statement2 ®îc xö lý. MÖnh ®Ò else tuú chän Ngoµi ra cßn cã khèi if-else chång nhau:
public voidsetProperty(Stringkeyword, double value) throwsUnknownProperty { if(keyword.equals(“charm”) charm(value) else if(keyword.eqals(“strange”) strange(value); else thrownewUnknownProperty(keyword); }

§iÒu g× sÏ x¶y ra nÕu cã nhiÒu h¬n mét lÖnh if mµ kh«ng cã lÖnh else. XÐt vÝ dô:
Trang :

19

X©y dùng øng dông m¹ng víi ng«n ng÷ Java
public double sumPositive(double []values) { double sum=0.0 if(values.length >1) for(int i=0;i <values.length;i++) if(values[i]>0) sum+=values[i]; else sum=values[0]; return sum; }

Cã vÎ nh lÖnh else nh lµ thuéc lÖnh if cña lÖnh kiÓm tra chiÒu dµi m¶ng, song thùc chÊt ®ã chØ lµ do ta nh×n c¸ch tr×nh bµy, cßn lÖnh else nµy thuéc lÖnh kiÓm tra xem values[i] cã d¬ng hay kh«ng. Do vËy ®o¹n m· trªn còng t¬ng víi ®o¹n m· sau:
public double sumPositive(double []values) { double sum=0.0 if(values.length >1) for(int i=0;i <values.length;i++) if(values[i]>0) sum+=values[i]; else sum=values[0]; return sum; }

§iÒu nµy kh«ng ph¶i lµ ®iÒu mµ ta muèn. §Ó rµng buéc mÖnh ®Ò else víi mÖnh ®Ò if ë trªn ta cã thÓ sö dông cÆp dÊu {} ®Ó t¹o c¸c khèi:
public double sumPositive(double []values) { double sum=0.0 if(values.lenth >1) for(int i=0;i <values.length;i++) { if(values[i]>0) sum+=values[i]; }; else sum=values[0]; return sum; }

b) Ph¸t biÓu switch
Mét ph¸t biÓu switch ®îc sö dông ®Ó ®¸nh gi¸ mét biÓu thøc nguyªn mµ gi¸ trÞ cña nã ®îc sö dông ®Ó t×m mét nh·n case t¬ng øng. NÕu t×m thÊy nh·n case phï hîp th× ®iÒu khiÓn sÏ ®îc chuyÓn tíi nh·n lÖnh ®Çu tiªn sau nh·n ®ã. NÕu kh«ng ®iÒu khiÓn sÏ chuyÓn tíi nh·n mÆc ®Þnh, nh¶y ra khái lÖnh switch. VÝ dô:
public staticfinal intTERSE =0,NORMAL =1,BLA THERING =2; public intverbosity =TERSE; public voiddumpState()
Trang :

20

X©y dùng øng dông m¹ng víi ng«n ng÷ Java
throwUnexpectedStateException { switch(verbosity) { case BLA THERING: system.out.println(StateDetails); case NORMAL: system.out.println(basicState); case TERSE: system.out.println(“summaryState); break; default: thrownewUne xpectedStatE xception(verbosity); } }

Líp ®Þnh nghÜa c¸c h»ng cã tªn ®Ó biÓu diÔn tr¹ng th¸i cña verbosity. Khi ®¹t ®Õn tr¹ng th¸i cña ®èi tîng nã thùc hiÖn yªu cÇu øng víi mçi møc cña verbosity. Trong lÖnh case kh«ng bÊt buéc lóc nµo còng ph¶i tho¸t ra khái lÖnh switch ë nh·n mÆc ®Þnh mµ nã cã thÓ tho¸t ra khái lÖnh case ë vÞ trÝ kh¸c, ë vÝ dô nµy, sau nh·n TERSE ta cã lÖnh break.

3.2 C¸c c©u lÖnh lÆp a) Ph¸t biÓu for
Ph¸t biÓu for ®îc sö dông th«ng qua mét miÒn trÞ Có ph¸p:
for(int_expr; boolean_expr;incr_expr)

LÖnh nµy t¬ng ®¬ng víi lÖnh sau:
init_expr; while (boolean_expr) { statement; incr_expr; }

C¸c lÖnh khëi t¹o cña vßng lÆp for lµ c¸c biÓu thøc ph©n biÖt nhau bëi dÊu phÈy. VÝ dô:
for(i=0;i=arr .length-1;j>=0;i++;j- -) { //.... }

VÝ dô:
public staticinttenPower(intvalue) { intexp,v; for(exp=0;v=value -1;v>0; exp++; v/=10) continue; return exp;
Trang :

21

X©y dùng øng dông m¹ng víi ng«n ng÷ Java
}

Trong trêng hîp nµy hai biÕn ®îc thay ®æi mét c¸ch ®ång bé th«ng qua kho¶ng gi¸ trÞ cña nã, sè mò vµ gi¸ trÞ luü thõa cña nã. ViÖc kiÓm tra sè mò vµ luü thõa ®Òu ®îc lÆp l¹i. Th©n cña vßng lÆp ®¬n gi¶n lµ mét lÖnh continue. KiÓu lÖnh continue lµ c¸ch chØ ra th©n vßng lÆp rçng. Ngoµi ra cßn cã c¸c kiÓu t¹o vßng lÆp rçng nh sau: for (; ; ) C¸ch kh¸c lµ:
for(int i=0;i <N;i++){}

b) Ph¸t biÓu while vµ do..while
Có ph¸p cña ph¸t biÓu while:
while (boolean_e xpr) statement

BiÓu thøc logic ®îc ®¸nh gi¸ nÕu nã ®óng lÖnh (khèi c¸c lÖnh) sÏ ®îc thùc hiÖn cho tíi khi biÓu thøc logic sai. Vßng lÆp while xö lý nhiÒu lÇn hoÆc kh«ng xö lý lÇn nµo, v× biÓu thøc logic cã thÓ sai ngay tõ lÇn kiÓm tra ®Çu tiªn. §«i khi ta cÇn sö dông vßng lÆp thùc hiÖn Ýt nhÊt mét lÇn. Java cã cÊu tróc nh vËy:
do statement; while (boolean_expr);

ë ®©y biÓu thøc logic ®îc ®¸nh gi¸ sau khi lÖnh ®· ®îc xö lý. Trong khi biÓu thøc logic cßn ®óng th× sÏ lÆp l¹i c¸c lÖnh. LÖnh trong vßng lÆp do..while lu«n lµ mét khèi.

3.3 C¸c ph¸t biÓu ng¾t vßng lÆp a) C¸c nh·n
C¸c lÖnh cã thÓ ®îc ®¸nh nh·n
label:statement

b) Ph¸t biÓu break
Ph¸t biÓu break thêng ®îc sö dông ®Ó bÎ g·y vßng lÆp, nhng còng cã thÓ dïng ®Ó tho¸t khái bÊt kú khèi nµo ngo¹i trõ khèi switch. VÝ dô:
class container{ private container[]Obj; //... public voidaddide(ContainedObj) throwNotEmptySlotException { inti;
Trang :

22

X©y dùng øng dông m¹ng víi ng«n ng÷ Java
for(i=0;i< Objs.length;i++) if(Obj[i]== nul) break; if(i >=Objs.length) thrownewNoEmptySlotException(); Objs[i]=obj; } }

Mét ph¸t biÓu break kÕt thóc khèi switch, for, while hay do..while ë tËn líp trong cïng. §Ó kÕt thóc mét lÖnh n»m ë phÝa ngoµi, ®¸nh nh·n cho lÖnh n»m phÝa ngoµi vµ sö dông nh·n ®ã cho ph¸t biÓu break.
private float[][]matrix; public boolean workOnFlag(float flag) { intx,y; boolean found=true; search: for(y=0;yx < matrix[y].length;y++) { for(x=0;x< matrix[y].length;x++) { if(matrix[y][x]==flag) { found=true; break search; } } } if((!found)return false; }

ViÖc cã lu«n lu«n sö dông nh·n hay kh«ng lµ do së thÝch c¸ nh©n. Tuy vËy thãi quen lu«n lu«n sö dông nh·n gióp Ých cho viÖc b¶o tr× m· sau nµy. LÖnh cã nh·n ë ®©y kh«ng ph¶i lµ ph¸t biÓu goto. Ph¸t biÓu goto cho phÐp nh¶y lung tung trong ®o¹n m·, lµm rèi lo¹n luång ®iÒu khiÓn. Mét ph¸t biÓu break hay continue cã nh·n tho¸t khái hay lÆp trong ph¹m vi ®îc g¸n nh·n nhÊt ®Þnh vµ luång ®iÒu khiÓn lµ hiÓn nhiªn kiÓm so¸t ®îc.

c) Ph¸t biÓu continue
Ph¸t biÓu continue thùc hiÖn ®Õn hÕt vßng lÆp vµ ®¸nh gi¸ biÓu thøc ®iÒu khiÓn vßng lÆp. Ph¸t biÓu continue thêng bá qua mét gi¸ trÞ nµo ®ã cña vßng lÆp. VÝ dô:
while (!stream.eof()) { token = stream.next(); if(token.equals(“skip”)) continue; //....xölýtoken }

Ph¸t biÓu continue chØ cã ý nghÜa trong c¸c vßng lÆp khÐp kÝn, nh·n nµy cã thÓ ¸p dông cho c¸c vßng lÆp cã tªn thay v× vång lÆp trong nhÊt. Ph¸t
Trang :

23

X©y dùng øng dông m¹ng víi ng«n ng÷ Java biÓu continue cã thÓ qua mét hay mét sè lÇn lÆp nµo ®ã ®Ó thùc hiÖn tiÕp lÇn lÆp tiÕp theo cña vßng lÆp.

d) Ph¸t biÓu return
Ph¸t biÓu return kÕt thóc qu¸ tr×nh xö lý cña mét ph¬ng thøc. Ph¸t biÓu return cã thÓ tr¶ vÒ gi¸ trÞ hay kh«ng tr¶ vÒ gi¸ trÞ. NÕu ph¸t biÓu return kh«ng tr¶ vÒ gi¸ trÞ ta cã thÓ viÕt nh sau:
return ;

NÕu ph¬ng htøc cã kiÓu tr¶ vÒ, th× kiÓu tr¶ vÒ ph¶i bao gåm mét biÓu thøc cã kiÓu mµ cã thÓ g¸n cho kiÓu tr¶ vÒ. NÕu ph¬ng htøc cã kiÓu double th× biÓu thøc ph¶i cã kiÓu double...
if(val <0) return 0; else return val;

Ph¸t biÓu return còng ®îc sö dông ®Ó tho¸t khái c¸c constructor vµ c¸c m· khëi t¹o chÝnh.
Chó ý: Java kh«ng cã cÊu tróc goto ®Ó truyÒn ®iÒu khiÓn tíi mét lÖnh trong ph¬ng thøc mÆc dï goto lµ mét lÖnh cã dïng trong c¸c ng«n ng÷ kh¸c. §Ó ®iÒu khiÓn c¸c vßng lÆp ngoµi tõ trong c¸c vßng lÆp trong, Java cung cÊp c¸c ph¸t biÓu ng¾t vßng lÆp nh»m ®¸p øng yªu cÇu nµy.

II. C¸c ngo¹i lÖ (Exception)
Trong c¸c ch¬ng tr×nh xö lý, c¸c øng dông cã thÓ bÊt ngê gÆp nhiÒu kiÓu lçi kh¸c nhau. Khi c¸c ph¬ng thøc t¸c ®éng trªn mét ®èi tîng, c¸c ®èi tîng nµy cã thÓ ph¸t hiÖn ra c¸c vÊn ®Ò tr¹ng th¸i trong (c¸c gi¸ trÞ kh«ng ®ång nhÊt cña c¸c biÕn), ph¸t hiÖn lçi cña c¸c ®èi tîng mµ nã thao t¸c (nh ®Þa chØ file hay ®Þa chØ m¹ng) x¸c ®Þnh nã trong ph¹m vi c¸c ®iÒu kiÖn nh ®äc d÷ liÖu tõ luång ®· ®ãng. RÊt nhiÒu lËp tr×nh viªn ®· kh«ng thÓ kiÓm tra tÊt c¶ c¸c t×nh huèng lçi cã thÓ x¶y ra, ®©y lµ nguyªn nh©n lµm cho m· kh«ng cã tÝnh th«ng minh. C¸c ngo¹i lÖ ®a ra mét c¸ch râ rµng h¬n ®Ó kiÓm tra lçi mµ kh«ng cÇn ph¶i ph©n chia m·. C¸c ngo¹i lÖ còng ®a ra mét c¬ cÊu b¸o hiÖu lçi mét c¸ch trùc tiÕp h¬n lµ c¸c cê hay lµ c¸c hiªô øng phô) nh c¸c trêng hîp ®îc kiÓm tra. C¸c ngo¹i lÖ lµm cho c¸c t×nh huèng lçi mµ mét ph¬ng thøc cã thÓ b¸o hiÖu mét phÇn chÝnh x¸c c¸c rµng buéc cña ph¬ng thøc. Mét ngo¹i lÖ ®îc ®a ra tõ stack. NÕu kh«ng, bé qu¶n lý c¸c ngo¹i lÖ mÆc ®Þnh.

1. T¹o c¸c kiÓu ngo¹i lÖ (Exception)

Trang :

24

X©y dùng øng dông m¹ng víi ng«n ng÷ Java C¸c ngo¹i lÖ trong Java lµ c¸c ®èi tîng. TÊt c¶ c¸c kiÓu ngo¹i lÖ, nghÜa lµ, bÊt kú líp nµo ®îc thiÕt kÕ cho c¸c ®èi tîng cã thÓ ®îc ®a ra hay mét trong c¸c líp con cña nã. C¸c ngo¹i lÖ Java vÒ c¬ b¶n lµ c¸c ngo¹i lÖ ®· ®îc kiÓm tra, nghÜa lµ tr×nh dÞch ®· kiÓm tra ph¬ng thøc chØ ®a ra c¸c ngo¹i lÖ mµ chóng ®· ®îc khai b¸o ®Ó ®a ra. C¸c ngo¹i lÖ thêi gian ch¹y (RunTime Exception) vµ c¸c lçi më réng c¸c líp Exceptions vµ Errors, v× thÕ cã c¸c ngo¹i lÖ kh«ng ®îc kiÓm tra ®· sinh ra. TÊt c¶ c¸c ngo¹i lÖ do chóng ta t¹o ra ph¶i më réng tõ líp Exception, ®a chóng trë thµnh c¸c ngo¹i lÖ ®· ®îc kiÓm tra. §«i khi còng cã Ých khi cã nhiÒu kiÓu d÷ liÖu ®Ó m« t¶ tr¹ng th¸i cña ngo¹i lÖ h¬n lµ chØ cã mét kiÓu x©u mµ Exception cung cÊp. Trong nh÷ng trêng hîp nh vËy Exception cã thÓ ®îc sö dông ®Ó t¹o nªn mét líp mµ chøa d÷ liªô ®îc thªm vµo (th«ng thêng ®îc thiÕt lËp trong c¸c hµm t¹o (constructor)). VÝ dô ph¬ng thøc replaceValue ®îc thªm vµo interfaceAttributed. Ph¬ng thøc nµy thay thÕ gi¸ trÞ hiÖn thêi cña mét thuéc tÝnh ®îc ®Æt tªn víi mét gi¸ trÞ míi. NÕu nh thuéc tÝnh cã tªn kh«ng tån t¹i, mét ngo¹i lÖ ph¶i ®îc ®a ra, v× nã hîp lý ®Ó gi¶ ®Þnh r»ng mét thuéc tÝnh chØ thay thÕ cho c¸c thuéc tÝnh hiÖn cã. Ngo¹i lÖ ph¶i chøa tªn thuéc tÝnh vµ gi¸ trÞ míi mµ thuéc tÝnh ®ùoc thiÕt lËp. §Ó biÓu diÔn ngo¹i lÖ ta t¹o líp NoSuchAttributException
public classNoSuchAttributException extends Exception { public StringAtt rName; public ObjectnewV alue; NoSuchAtt ributException(Stringname,Object value) { super(“ NO attributenamed\”+name + “\”+“found”); attrname =name; newV alue = value; } }

NoSuchAttributException më réng Exception ®Ó thªm vµo mét constructor mµ cã tªn cña thuéc tÝnh vµ gi¸ trÞ më réng cña nã, nã còng thªm vµo c¸c trêng chung ®Ó chøa d÷ liÖu. Bé t¹o kÝch ho¹t bé t¹o cña superclass víi mét m« t¶ ®iÒu g× ®· x¶y ra. KiÓu ngo¹i lÖ nµy cã Ých ®Ó m· ho¸ ngo¹i lÖ, v× nã chøa c¸c m« t¶ lçi mµ con ngêi cã thÓ sö dông vµ d÷ liÖu t¹o ra lçi. ViÖc ®a thªm d÷ liÖu cã Ých lµ c¬ së ®Ó t¹o nªn mét kiÓu ngo¹i lÖ míi. Mét nguyªn nh©n kh¸c ®Ó t¹o nªn kiÓu ngo¹i lÖ míi lµ kiÓu ngo¹i lÖ lµ mét phÇn quan träng cña d÷ liÖu ngo¹i lÖ, bëi v× c¸c ngo¹i lÖ ®îc liªn kÕt víi nhau theo kiÓu cña chóng. V× nã do nµy, b¹n sÏ t¹o ra NoSuchAttrubuteException thËm chÝ nÕu b¹n kh«ng muèn thªm d÷ liÖu míi. V× vËy nh÷ng lËp tr×nh viªn chØ quan t©m ®Õn ngo¹i lÖ nh vËy cã thÓ cã ®îc nã ngo¹i trõ c¸c ph¬ng thøc cña giao diÖn Attributed, hay c¸c ph¬ng thøc kh¸c ®îc sö dông trªn c¸c ®èi tîng kh¸c trong cïng mét ®o¹n m·.

2. Throw
Trang :

25

X©y dùng øng dông m¹ng víi ng«n ng÷ Java C¸c ngo¹i lÖ ®îc ®a ra th«ng qua viÖc sö dông lÖnh throw, lÖnh throw nhËn c¸c ®èi tîng nh lµ tham sè cña nã. VÝ dô:
public voidreplaceV alue(Stringname,ObjectnewV alue) throwNoSuchAttribteException { Attr attr =find(name); if(attr==null) thrownewNoSuchAttributeException(name,newV alue); attr alueof(newV .V alue); }

Ph¬ng thøc replaceValue tríc hÕt kiÓm tra ®èi tîng attr hiÖn thêi cho tªn. NÕu kh«ng cã ®èi tîng nã sÏ ®a ra mét ®èi tîng míi cã kiÓu NoSuchAttribute Exception, ®a ra constructor víi d÷ liÖu m« t¶. C¸c ngo¹i lÖ lµ c¸c ®èi tîng, v× thÕ chóng ph¶i ®îc t¹o tríc khi ®a ra, nÕu thuéc tÝnh kh«ng tån t¹i gi¸ trÞ cña nã ®îc thay b»ng gi¸ trÞ míi. Mét ngo¹i lÖ tÊt nhiªn còng cã thÓ t¹o ®îc b»ng c¸ch gäi mét ph¬ng thøc mµ tù nã còng ®a ra mét ngo¹i lÖ.

3. MÖnh ®Ò Throws
ViÖc ®Çu tiªn mµ ph¬ng thøc replaceValue trªn thùc hiÖn lµ khai b¸o c¸c ngo¹i lÖ nµo mµ nã ®a ra. Java yªu cÇu khai b¸o c¸c ngo¹i lÖ mµ c¸c ph¬ng thøc ®a ra, bëi v× lËp tr×nh viªn kÝch ho¹t mét ph¬ng thøc ph¶i biÕt c¸c ngo¹i lÖ mµ nã ®a ra ®ñ ®Ó hä biÕt hµnh vi chuÈn cña nã. C¸c ngo¹i lÖ mét ph¬ng thøc ®a ra còng quan träng nh gi¸ trÞ mµ nã tr¶ vÒ
Chó ý: C¶ gi¸ trÞ tr¶ vÒ vµ kiÓu ngo¹i lÖ ®Òu ph¶i ®îc khai b¸o.

C¸c ngo¹i lÖ ®îc kiÓm tra mµ mét ph¬ng thøc ®a ra ®îc khai b¸o víi mÖnh ®Ò clause, danh s¸ch c¸c ngo¹i lÖ ®îc ph©n t¸ch nhau bëi dÊu phÈy. B¹n cã thÓ ®a ra c¸c ngo¹i lÖ mµ lµ sù më réng cña kiÓu exception trong mÖnh ®Ò throws, bëi v× b¹n cã thÓ sö dông mét líp ®a h×nh t¹i bÊt kú n¬i nµo mµ superclass muèn. Mét ph¬ng thøc cã thÓ ®a ra nhiÒu líp c¸c ngo¹i lÖ kh¸c nhau mµ tÊt c¶ ®Òu lµ sù më réng cña mét líp ngo¹i lÖ ®Æc biÖt vµ superclass chØ ®îc khai b¸o trong mÖnh ®Ò throw. Tuy nhiªn b»ng c¸ch lµm nh vËy b¹n cã kh¶ n¨ng cÊt giÊu c¸c th«ng tin h÷u Ých tr¸nh ngêi lËp tr×nh kÝch ho¹t ph¬ng thøc, v× hä kh«ng biÕt c¸c kiÓu ngo¹i lÖ cã kh¶ n¨ng më réng nµo cã thÓ ®îc ®a ra. V× môc ®Ých so¹n th¶o, mÖnh ®Ò throws ph¶i hoµn chØnh vµ x¸c ®Þnh. C¸c rµng buéc x¸c ®Þnh bëi mÖnh ®Ò throw ®îc qui ®Þnh chÆt chÏ - b¹n chØ cã thÓ ®a ra mét kiÓu ngo¹i lÖ mµ ®¬c khai b¸o trong mÖnh ®Ò throws. ViÖc ®a ra bÊt kú kiÓu ngo¹i lÖ nµo kh¸c ®Òu kh«ng cã hiÖu lùc, cho dï trùc tiÕp sö dông throw hay gi¸n tiÕp b»ng c¸ch kÝch ho¹t c¸c ph¬ng thøc kh¸c, nÕu mét ph¬ng thøc mµ kh«ng cã mÖnh ®Ò throws th× ®iÒu ®ã kh«ng cã nghÜa bÊt kú ngo¹i lÖ nµo còng ®îc ®a ra: mµ nã cã nghÜa lµ kh«ng thÓ ®a ra mét ngo¹i lÖ nµo.

Trang :

26

X©y dùng øng dông m¹ng víi ng«n ng÷ Java TÊt c¶ c¸c ngo¹i lÖ thêi gian ch¹y chuÈn (nh ClassCastException vµ ArithmeticException) lµ sù më réng cña líp RuntimeException. C¸c ngo¹i lÖ cµng th«ng b¸o nhiÒu lçi nghiªm träng th× líp Error cµng ®îc më réng, vµ nh÷ng ngo¹i lÖ nµy cã thÓ x¶y ra t¹i bÊt kú thêi ®iÓm nµo trong bÊt kú ®o¹n m· nµo. Runtime vµ Error lµ c¸c ngo¹i lÖ mµ b¹n kh«ng cÇn liÖt kª trong mÖnh ®Ò throws. Chóng cã mÆt ë kh¾p mäi n¬i mµ mçi ph¬ng thøc ®Òu ph¶i cã kh¶ n¨ng ®a ra c¸c ph¬ng thøc nµy. §ã lµ lý do t¹i sao c¸c ngo¹i lÖ nµy kh«ng ®îc kiÓm tra bëi tr×nh dÞch. C¸c bé khëi t¹o vµ c¸c khèi m· khëi t¹o chÝnh kh«ng thÓ ®a ra c¸c ngo¹i lÖ ®· ®îc kiÓm tra, dï trùc tiÕp hay gi¸n tiÕp th«ng qua viÖc kÝch ho¹t ph¬ng thøc mµ ®a ra mét ngo¹i lÖ nh vËy. Kh«ng cã g× n¾m b¾t vµ qu¶n lý trong khi qua tr×nh x©y dùng ®èi tîng. Khi c¸c trêng ®îc khëi t¹o, gi¶i ph¸p ®a ra khëi t¹o chóng ngay trong mét constructor, constructor cã thÓ ®a ra mét ngo¹i lÖ. §èi víi c¸c bé khëi t¹o t×m gi¶i ph¸p da ra lµ ®o¹n m· khëi t¹o trong mét khèi tÜnh mµ cã thÓ n¸m b¾t vµ qu¶n lý ngo¹i lÖ. C¸c khèi tÜnh kh«ng thÓ ®a ra c¸c ngo¹i lÖ nhng chóng cã thÓ n¾m gi÷ ®îc chóng. Java qui ®Þnh chÆt chÏ vÒ viÖc qu¶n lý c¸c ngo¹i lÖ ®îc kiÓm tra bëi v× cóng gióp Ých rÊt nhiÒu trong viÖc tr¸nh c¸c lçi ph¸t sinh do kh«ng xö lý lçi. Kinh nghiÖm cho thÊy nh÷ng ngêi lËp tr×nh thêng quªn qu¶n lý lçi hay chËm trÔ trong viÖc xö lý lçi cho tíi khi mét sè sailÇm do m· ho¸ kh«ng thÓ x¶y ra. MÖnh ®Ò throws chØ ra râ rµng ngo¹i lÖ nµo ®îc ®a ra bëi c¸c ph¬ng thøc. NÕu b¹n kÝch ho¹t mét ph¬ng thøc mµ ph¬ng thøc nµy liÖt kª mét danh s¸ch c¸c ngo¹i lÖ ®· ®îc kiÓm tra trong mÖnh ®Ò throws cña nã, b¹n cã ba lùa chän sau: • • • N¾m b¾t ngo¹i lÖ vµ qu¶n lý nã N¾m b¾t ngo¹i lÖ vµ ¸nh x¹ nã vµo mét trong c¸c ngo¹i lÖ b»ng c¸ch ®a ra mét ngo¹i lÖ cã kiÓu khai b¸o trong mÖnh ®Ò throws cña riªng b¹n. Khai b¸o ngo¹i lÖ trong mÖnh ®Ò throws vµ cho phÐp ngo¹i lÖ ®i qua ph¬ng thøc.

4. Try, catch vµ finally
Có ph¸p:
T ry {..} Catch (exception_type identifier) {..} Catch (exception_type identifier) {..} ... finally {..}

Th©n cña ngo¹i lÖ try ®îc xö lý cho tíi khi mét ngo¹i lÖ ®îc ®a ra khèi lÖnh try kÕt thóc mét c¸ch thµnh c«ng. NÕu mét ngo¹i lÖ ®îc ®a ra, c¸c mÖnh ®Ò catch ®îc kiÓm tra ®Ó t×m mét ngo¹i lÖ t¬ng øng víi líp ®ã hay c¸c super class. NÕu kh«ng t×m thÊy, nã sÏ tho¸t khái khèi ®ã vµ t×m
Trang :

27

X©y dùng øng dông m¹ng víi ng«n ng÷ Java ë bªn ngoµi. NÕu kh«ng cã mÖnh ®Ò catch trong ph¬ng thøc phï hîp, ngo¹i lÖ sÏ ®îc kiÓm tra ë ®o¹n m· mµ kÝch ho¹t ph¬ng thøc. NÕu mét mÖnh ®Ò finally cã mÆt trong khèi try, m· cña nã sÏ ®îc xö lý sau khi tÊt c¶ c¸c xö lý kh¸c trong khèi lÖnh try hoµn thµnh. §iÒu nµy x¶y ra cho dï khèi lÖnh try cã ®îc hoµn thµnh hay kh«ng, th«ng qua mét ngo¹i lÖ, hay th«ng qua lÖnh ®iÒu khiÓn luång nh break, hay return. C¸c ngo¹i lÖ ®îc n¾m gi÷ bëi ®o¹n m· trong c¸c khèi try. Th©n cña khèi lÖnh try ®îc xö lý cho tíi khi hoÆc mét ngo¹i lÖ ®îc ®a ra hay nã hoµn thµnh mét c¸ch thµnh c«ng. NÕu mét ngo¹i lÖ ®îc ®a ra, mÖnh ®Ò catch ®îc ®a ra ®Ó t×m mét ngo¹i lÖ phï hîp víi ngo¹i lÖ cña líp mét ngo¹i lÖ trong sè c¸c ngo¹i lÖ cña c¸c superclass. NÕu kh«ng cã ngo¹i lÖ nµo trong mÖnh ®Ò catch ®îc t×m thÊy, ngo¹i lÖ sÏ ln»m ë bªn ngoµi lÖnh try, m« khèi lÖnh try cã thÓ qu¶n lý ngo¹i lÖ ®ã. Cã thÓ cã mét sè mÖnh ®Ò catch trong mét khèi try vµ còng cã thÓ kh«ng. NÕu kh«ng cã mÖnh catch nµo trong ph¬ng thøc n¾m gi÷ ngo¹i lÖ, ngo¹i lÖ sÏ ®ùoc ®a ra ®o¹n m· mµ kÝch ho¹t ph¬ng thøc. MÖnh ®Ò finally cã mÆt trong mét khèi try, m· cña nã ®îc xö lý sau khi tÊt c¶ c¸c xö lý kh¸c hoµn thµnh. §iÒu nµy x¶y ra dï nã cã hoµn thµnh hay kh«ng, hay th«ng qua mét ngo¹i lÖ, hoÆc th«ng qua mét lÖnh luång ®iÒu khiÓn nh return hay break. §o¹n m· díi ®©y ®îc chuÈn bÞ qu¶n lý mét trong c¸c ngo¹i lÖ replaceValue ®a ra:
try { attributedObj.replaceV alue(“ Age”,newinteger(8)); } catch (NoSuchAttribute E xception e) { Attr attr =newAttr(e.attrName,e.newV alue); attributedObj.add(attr); }

Khèi try thµnh lËp mét c©u lÖnh (ph¶i lµ mét khèi)mµ thùc hiÖn mét nhiÖm vô nµo ®ã mµ th«ng thuêng mong muèn thµnh c«ng. NÕu tÊt c¶ mäi thø ®Òu thµnh c«ng, khèi kÕt thóc. NÕu bÊt kú ngo¹i lÖ nµo ®îc ®a ra trong qu¸ tr×nh xö lý m· trong khèi try, hoÆc trùc tiÕp th«ng qua lÖnh trow hay gi¸n tiÕp th«ng qua mét ph¬ng thøc kÝch ho¹t trong nã, viÖc xö lý m· trong khèi try dõng l¹i, vµ mÖnh ®Ò catch g¾n víi nã ®Ó xem nã cã muèn n¾m gi÷ ngo¹i lÖ ®îc ®a ra hay kh«ng.. Mét mÖnh ®Ò catch lµ mét c¸i g× ®ã gièng nh mét ph¬ng thøc ®îc nhóng mµ cã mét tham sè.

III. Classes vµ Objects
§¬n vÞ lËp tr×nh c¬ b¶n cña ng«n ng÷ Java lµ líp. C¸c líp bao gåm c¸c ph¬ng thøc, tËp hîp c¸c m· thùc thi nh»m phôc vô cho viÖc tÝnh to¸n. C¸c líp cßn cung cÊp cÊu tróc cho c¸c ®èi tîng, ngoµi ra cßn cã c¸c c¬ cÊu t¹o ra c¸c ®èi tîng tõ ®Þnh nghÜa líp. B¹n cã thÓ tÝnh to¸n víi c¸c kiÓu c¬ b¶n nh kiÓu nguyªn, kiÓu sè dÊu phÈy ®éng... nhng hÇu hÕt c¸c ch¬ng tr×nh Java cÇn quan t©m sÏ t¹o vµ thao t¸c trªn c¸c ®èi tîng.
Trang :

28

X©y dùng øng dông m¹ng víi ng«n ng÷ Java LËp tr×nh híng ®èi tîng ph©n biÖt chÆt chÏ gi÷a c¸c kh¸i niÖm cÇn ph¶i lµm g× (ĘWhatę?) vµ lµm nh thÕ nµo (ĘHowę?). ĘWhatę ®îc xem nh mét tËp c¸c ph¬ng thøc (vµ ®«i khi lµ c¸c biÕn d÷ liÖu toµn côc) vµ ng÷ c¶nh g¾n liÒn víi nã. Tæ hîp nµy, c¸c ph¬ng thøc, d÷ liÖu vµ c¸c ng÷ c¶nh, thêng ®îc xem nh b¶n hîp ®ång gi÷a ngêi thiÕt kÕ líp vµ nh÷ng ngêi lËp tr×nh sö dông nã, v× nã nãi lªn ®iÒu g× sÏ x¶y ra khi mét sè ph¬ng thøc nhÊt ®Þnh ®îc kÝch ho¹t trªn mét ®èi tîng. ThuËt ng÷ ĘHowę cña mét ®èi tîng ®îc ®Þnh nghÜa bëi líp cña nã, c¸i mµ x¸c ®Þnh viÖc thùc hiÖn c¸c ph¬ng thøc mµ ®èi tîng cung cÊp. Mçi ®èi tîng lµ mét mÉu cña mét líp. Khi mét líp ®îc kÝch ho¹t trªn mét ®èi tîng, líp ®îc kiÓm tra ®Ó t×m m· ®Ó ch¹y. Mét ®èi tîng cã sö dông c¸c ®èi tîng kh¸c ®Ó thùc hiÖn nhiÖm vô cña m×nh, nhng chóng ta b¾t ®Çu víi c¸c ph¬ng thøc ®¬n gi¶n thùc hiÖn tÊt c¶ c¸c ph¬ng thøc riªng cña chóng mét c¸ch trùc tiÕp.

1. T¹o mét líp ®¬n gi¶n
C¸c thµnh phÇn c¬ b¶n cña mét líp lµ c¸c trêng (c¸c d÷ liÖu) vµ c¸c ph¬ng thøc (c¸c m· thao t¸c víi d÷ liÖu). ë ®©y cã mét líp ®¬n gi¶n gäi lµ Body cã thÓ ®îc sö dông ®Ó lu tr÷ d÷ liÖu vÒ c¸c hµnh tinh thuéc hÖ mÆt trêi nh sao chæi, c¸c v× sao, c¸c hµnh tinh:
class Body { public longidNum; public StringnameFor; public Body orbits; public staticlongnextID = 0; }

Tríc hÕt chóng ta khai b¸o tªn cña mét líp. Mét khai b¸o líp t¹o nªn mét kiÓu cã tªn trong Java, v× vËy viÖc tham chiÕu tíi ®èi tîng cã kiÓu ®ã cã thÓ ®îc khai b¸o nh sau
Body mercury;

Khai b¸o nµy nãi nªn r»ng mercury lµ mét tham chiÕu tíi ®èi tîng cña líp Body. Khai b¸o kh«ng t¹o nªn mét ®èi tîng - nã chØ khai b¸o mét tham chiÕu tíi ®èi tîng Body. Tham chiÕu ®îc khëi t¹o víi gi¸ trÞ null, vµ ®èi tîng tham chiÕu bëi mercury kh«ng thùc sù tån t¹i cho tíi khi b¹n t¹o ra nã mét c¸ch chÝnh x¸c; trong mét khÝa c¹nh nµo ®ã, Java kh¸c víi c¸c ng«n ng÷ kh¸c lµ c¸c ®èi tîng ®îc t¹o ra ngay t¹i thêi ®iÓm khai b¸o c¸c biÕn.

2. C¸c trêng
C¸c biÕn cña mét líp ®îc gäi lµ c¸c trêng; vÝ dô c¸c trêng cña líp Body lµ nameFor vµ orbits. Mçi ®èi tîng Body cã c¸c mÉu nhÊt ®Þnh cho c¸c trêng nµy: kiÓu long ®Þnh x¸c ®Þnh duy nhÊt vËt thÓ víi c¸c vËt thÓ kh¸c, kiÓu String x¸c ®Þnh tªn cña nã vµ tham chiÕu tíi mét ®èi tîng Body kh¸c quanh quÜ ®¹o.

3. §iÒu khiÓn truy nhËp vµ thõa kÕ
Trang :

29

X©y dùng øng dông m¹ng víi ng«n ng÷ Java TÊt c¶ c¸c trêng trong mét líp lu«n cã trong líp ®Ó m· ho¸ chÝnh líp ®ã. §Ó ®iÒu khiÓn truy nhËp tõ c¸c líp kh¸c vµ ®iÒu khiÓn thõa kÕ bëi c¸c líp con, c¸c thµnh phÇn cña líp cã thÓ bao gåm bèn kiÓu trî gióp ®iÒu khiÓn truy nhËp sau: • • • • Public: c¸c thµnh phÇn ®îc khai b¸o víi tõ khãa nµy cã thÓ ®îc truy cËp bëi hµm thuéc líp bÊt kú. Private: c¸c thµnh phÇn ®îc khai b¸o víi tõ khãa private chØ cã thÓ ®îc truy cËp trong ph¹m vi líp ®ã. Protected: c¸c thµnh phÇn ®îc khai b¸o víi tõ kho¸ protected cã thÓ ®îc truy cËp vµ thõa kÕ bëi c¸c líp con, vµ cã thÓ ®îc truy cËp trong cïng mét gãi. Package: c¸c thµnh phÇn ®îc khai b¸o kh«ng cã tõ khãa bæ trî ®îc truy cËp tíi m· vµ ®îc thõa kÕ bëi c¸c líp con trong cïng package.
Chó ý: C¸c thµnh phÇn ®îc khai b¸o víi tõ kho¸ public cã thÓ ®îc truy cËp t¹i bÊt kú chç nµo mµ trong líp cã thÓ truy cËp ®îc, vµ chóng ®îc thõa kÕ bëi c¸c líp con.

Chóng ta khai b¸o c¸c trêng cña líp Body víi tõ kho¸ public bëi v× nh÷ng ngêi lËp tr×nh cÇn truy cËp tíi chóng ®Ó lµm viÖc víi líp ®îc thiÕt kÕ cho nã.

4. T¹o c¸c ®èi tîng
Trong version ®Çu tiªn cña Body, c¸c ®èi tîng biÓu diÔn c¸c hµnh tinh ®îc t¹o vµ khëi t¹o nh sau:
Body sun = newBody() sun.idNum=Body .nextID++; sun.nameFor =”Sol”; sun.obrits=null; Body earth =newBody(); earth.idNum =Body .nextID++; earth.nameFor =“Earth”; earth.orbit=sun;

Ban ®Çu chóng ta ®· khai b¸o hai tham chiÕu (sun vµ earth) ®Ó chøa c¸c ®èi tîng cã kiÓu Body. Nh ®· ®Ò cËp tríc, nh÷ng khai b¸o nµy kh«ng t¹o nªn c¸c ®èi tîng, chóng chØ khai b¸o c¸c biÕn t¹o nªn mµ tham chiÕu tíi c¸c ®èi tîng. C¸c tham chiÕu nµy ®îc khëi t¹o ban ®Çu víi gi¸ trÞ null, vµ c¸c ®èi tîng cã thÓ ®îc tham chiÕu ph¶i ®îc t¹o ra mét c¸ch chÝnh x¸c. Chóng ta t¹o ra ®èi tîng sun b»ng c¸ch sö dông to¸n tö new. To¸n tö new lµ c¸ch th«ng dông ®Ó t¹o ra c¸c ®èi tîng. Khi b¹n t¹o mét ®èi tîng víi to¸n tö new, b¹n ph¶i x¸c ®Þnh kiÓu ®èi tîng b¹n muèn t¹o vµ c¸c tham sè cho cÊu tróc cña nã. HÖ thèng Java ®Þnh vÞ ®ñ kh«ng gian nhí ®Ó lu c¸c trêng cña ®èi tîng vµ khëi t¹o nã theo c¸c c¸ch mµ b¹n sÏ thÊy. Khi viÖc khëi t¹o hoµn thµnh hÖ thèng sÏ tr¶ vÒ mét tham chiÕu tíi ®èi tîng míi.

IV. Package
C¸c ch¬ng tr×nh trong Java ®îc tæ chøc thµnh mét tËp c¸c gãi. Mçi gãi cã mét tËp tªn riªng cho c¸c kiÓu, ®iÒu nµy sÏ tr¸nh x¶y ra xung ®ét tªn. Mét
Trang :

30

X©y dùng øng dông m¹ng víi ng«n ng÷ Java kiÓu cã thÓ truy cËp tõ ngoµi gãi mµ nã khai b¸o chØ khi kiÓu ®ã ®îc khai b¸o víi tõ kho¸ public. CÊu tróc ®Æt tªn cho c¸c gãi lµ cÊu tróc ph©n cÊp. C¸c thµnh phÇn cña mét gãi lµ class vµ interface, c¸c kiÓu class vµ interface nµy ®îc khai b¸o trong c¸c ®¬n vÞ biªn dÞch cña cña gãi vµ c¸c gãi con, c¸c gãi con nµy cã thÓ chøa ®¬n vÞ dÞch hay c¸c gãi con cña riªng chóng. Mét gãi con cã thÓ ®îc lu tr÷ trong hÖ thèng file hay mét c¬ së d÷ liÖu. C¸c gãi ®îc lu tr÷ trong mét hÖ thèng file ph¶i cã c¸c rµng buéc vÒ tæ chøc cña c¸c unit ®· biªn dÞch (®¬n vÞ biªn dÞch) ®Ó cho phÐp mét c¸ch thùc hiÖn ®¬n gi¶n t×m ra c¸c líp mét c¸ch dÔ dµng. Trong trêng hîp t¬ng tù, mét tËp c¸c gãi lu«n s½n sµng phôc vô mét ch¬ng tr×nh Java ®îc x¸c ®Þnh bëi hÖ thèng chñ (Host System). Nhng ph¶i lu«n cã Ýt nhÊt ba gãi chuÈn: java.lang, java.util, java.io. Trong hÇu hÕt c¸c m¸y chñ, c¸c gãi chuÈn: java.applet, java.awt vµ java.net kh«ng ®îc m« t¶ trong ®Æc t¶ nµy, còng lu«n cã ®èi víi ch¬ng tr×nh Java. Mét gãi bao gåm mét sè ®¬n vÞ biªn dÞch. Mét ®¬n vÞ biªn dÞch ph¶i tù ®éng truy cËp tíi c¸c kiÓu trong gãi cña nã vµ còng tù ®éng ph¸t ra mçi kiÓu ®îc khai b¸o trong gãi chuÈn java.lang. §¬n vÞ biªn dÞch bao gåm ba phÇn, mçi phÇn ®Òu ®îc tèi u: • • • Khai b¸o gãi: §a ra tªn ®Çy ®ñ cña gãi mµ ®¬n vÞ dÞch thuéc gãi ®ã. Khai b¸o import: Cho phÐp c¸c kiÓu tõ c¸c gãi kh¸c cã thÓ ®îc tham chiÕu sö dông c¸c tªn ®¬n gi¶n cña chóng. Khai b¸o kiÓu cña class vµ kiÓu cña interface.

§èi víi c¸c ch¬ng tr×nh nhá vµ c¸c ph¸t triÓn th«ng thêng, mét gãi cã thÓ kh«ng ®îc ®Æt tªn hoÆc cã mét tªn ®¬n gi¶n, nhng nÕu m· Java ®îc ph©n t¸n réng r·i, c¸c tªn gãi duy nhÊt ph¶i ®îc ®¶m b¶o. §iÒu nµy tr¸nh c¸c xung ®ét cã thÓ x¶y ra nÕu hai nhãm ph¸t triÓn t×nh cê ®Æt cïng mét tªn gãi vµ nh÷ng gãi nµy sau ®ã ®îc sö dông trong mét ch¬ng tr×nh ®¬n.

1. C¸c thµnh phÇn cña gãi
Mét package cã thÓ cã mét hoÆc hai thµnh phÇn sau: • • C¸c gãi con cña gãi. C¸c kiÓu ®îc khai b¸o trong c¸c ®¬n vÞ dÞch cña gãi.

VÝ dô: trong giao diÖn øng dông lËp tr×nh Java chuÈn:  Gãi Java cã c¸c con awt, applet, io, lang, net vµ util, nhng kh«ng cã c¸c ®¬n vÞ biªn dÞch.  Gãi Java.awt cã gãi con image còng nh mét sè ®¬n vÞ biªn dÞch chøa c¸c khia b¸o cña c¸c kiÓu class vµ interface. Tªn ®Çy ®ñ cña mét gãi lµ P, Q lµ gãi con cña P th× tªn ®Çy ®ñ cña gãi con lµ P.Q. C¸c gãi con cña gãi Java tªn lµ lang, util, io (tªn ®Çy ®ñ cña c¸c gãi con nµy lµ java.lang, java.util, java.io) lµ mét phÇn chuÈn cña mçi cµi ®Æt Java.
Trang :

31

X©y dùng øng dông m¹ng víi ng«n ng÷ Java

2. M¸y chñ hç trî c¸c gãi
Mçi m¸y chñ Java x¸c ®Þnh c¸c gãi hay c¸c ®¬n vÞ biªn dÞch; c¸c gãi con ®îc t¹o vµ lu tr÷ nh thÕ nµo; tªn c¸c gãi møc cao nhÊt n»m trong ph¹m vi thuéc mét sù biªn dÞch ®Æc biÖt. C¸c gãi cã thÓ ®îc lu tr÷ trong mét hÖ thèng file côc bé trong c¸c c¸ch thùc hiÖn ®¬n gi¶n cña Java. Mét sè thùc hiÖn cã thÓ sö dông mét hÖ th«ng ph©n t¸n hay mét sè d¹ng c¬ së d÷ liÖu ®Ó lu m· nguån Java vµ m· nhÞ ph©n.

a) Lu c¸c gãi trong mét hÖ thèng file
TÊt c¶ c¸c gãi Java vµ m· nhÞ ph©n hay m· nguån trªn mét hÖ thèng cã thÓ ®îc lu tr÷ trong mét th môc ®¬n vµ c¸c th môc con cña nã. Mçi mét th môc con tøc thêi biÓu diÔn mét gãi møc cao nhÊt, nghÜa lµ mét gãi mµ tªn ®Çy ®ö còng chÝnh lµ tªn ®¬n gi¶n. Th môc cã thÓ chøa c¸c th môc con sau: com, gls, jag, java, wnj. Trong ®ã th môc java chøa c¸c gãi giao diÖn lËp tr×nh øng dông Java chuÈn mµ lµ mét phÇn cña tõng hÖ thèng Java chuÈn; c¸c th môc jag, gls, wnj cã thÓ chøa c¸c gãi mµ ba t¸c gi¶ cña ®Æc t¶ nµy t¹o nªn cho viÖc sö dông c¸ nh©n vµ dïng chung víi nhau trong mét nhãm nhá, th môc com ®îc sö dông ®Ó t¹o ra c¸c tªn duy nhÊt cho c¸c gãi cña chóng. Th môc Java cã thÓ chøa Ýt nhÊt c¸c th môc sau: applet, awt, io, lang, net, util t¬ng øng víi c¸c gãi chuÈn java.applet, java.awt, java.io, java.lang, java.net vµ java.util mµ ®îc ®Þnh nghÜa nh lµ mét giao diÖn lËp tr×nh øng dông Java chuÈn. Díi d¹ng tæ chøc ®¬n gi¶n nµy cña c¸c gãi, mét c¸ch cµi ®Æt Java sÏ chuyÓn tªn gãi sang mét tªn ®êng dÉn b»ng c¸ch kÕt nèi c¸c thµnh phÇn cña tªn gãi, ®Æt mét dÊu ph©n c¸ch gi÷a c¸c thµnh phÇn kÕ tiÕp nhau. VÝ dô: NÕu kiÓu tæ chøc ®¬n gi¶n nµy ®îc sö dông trªn hÖ ®iÒu hµnh UNIX, ë ®ã dÊu c¸ch gi÷a tªn file lµ Ę/ę vµ tªn gãi lµ jag.scrabble.board sÏ ®îc chuyÓn thµnh tªn th môc: jag/scrabble/scrabble/board, cßn Com.sun.soft.DOE sÏ chuyÓn thµnh Com/sun/sunsoft/DOE. Thùc tÕ JavaSoft Java Devoloper trªn UNIX kh¸c víi nguyªn t¾c rÊt ®¬n gi¶n ®îc m« t¶ ë ®©y chØ ë chç lµ nã cung cÊp biÕn m«i trêng CLASSPATH mµ x¸c ®Þnh mét tËp c¸c th môc, mçi th môc ®îc xem nh lµ mét th môc ®¬n gi¶n ®îc m« t¶ ë ®©y. C¸c th môc ®îc t×m kiÕm ®Ó x¸c ®Þnh c¸c gãi cã tªn vµ c¸c kiÓu. Thµnh phÇn tªn cña mét gãi hay tªn líp cã thÓ chøa mét ký tù mµ cã thÓ kh«ng xuÊt hiÖn mét c¸ch chÝnh x¸c trong tªn th môc th«ng thêng cña hÖ th«ng file chñ. Ch¼ng h¹n nh: ký tù Unicode trªn mét hÖ thãng chØ cho phÐp c¸c ký tù ASCII trong c¸c tªn file. Bèn sè hÖ hex ®a ra gi¸ trÞ sè cña ký tù.

b) Lu c¸c gãi trong c¬ së d÷ liÖu
Mét hÖ thèng chñ cã thÓ lu c¸c gãi vµ c¸c ®¬n vÞ biªn dÞch vµ c¸c gãi con trong mét c¬ së d÷ liÖu. Java cho phÐp c¸c qui ®Þnh nh vËy ®Ó níi
Trang :

32

X©y dùng øng dông m¹ng víi ng«n ng÷ Java láng c¸c qui ®Þnh trªn c¸c ®¬n vÞ biªn dÞch trong nh÷ng xö lý dùa trªn c¬ së file. VÝ dô: mét hÖ thèng mµ sö dông c¸c gãi kh«ng nhÊt thiÕt ph¶i tu©n theo tèi ®a mét líp public hay mét interface trªn mét ®¬n vÞ biªn dÞch. Tuy nhiªn c¸c hÖ thèng mµ sö dông c¬ së d÷ liÖu ph¶i ®a ra mét lùa chän ®Ó chuyÓn ch¬ng tr×nh Java sang mét d¹ng tu©n thñ c¸c c¸c qui t¾c, v× môc ®Ých cuèi cïng lµ ®a ra c¸c c¸ch cµi ®Æt trªn c¬ së file.

3. C¸c Unit biªn dÞch
Unit biªn dÞch (compilation unit) Có ph¸p:
Compilation Unit Package Declaration ImportDeclartion T Declartion ype ImportDeclarations: ImportDeclaration ImportDeclarations ImportDeclaration T ypeDeclarations: T ypeDeclaration T ypeDeclarationsT ypeDeclaration

C¸c kiÓu khai b¸o trong c¸c ®¬n vÞ biªn dÞch kh¸c nhau cã thÓ phô thuéc vµo nhau. Mét tr×nh biªn dÞch Java ph¶i s¾p xÕp ®Ó biªn dÞch tÊt c¶ c¸c kiÓu nh vËy cïng mét lóc. Mét tr×nh biªn dÞch gåm ba phÇn, mçi phÇn ®Òu ®îc tèi u: • • • Mét khai b¸o package ®a ra tªn ®Çy ®ñ cña gãi mµ ®¬n vÞ biªn dÞch n»m trong gãi ®ã. C¸c khai b¸o import cho phÐp c¸c kiÓu tõ gãi kh¸c cã thÓ tham kh¶o ®¬n vÞ biªn dÞch b»ng c¸ch sö dông c¸c tªn ®¬n gi¶n cña chóng. C¸c khai b¸o kiÓu cña class vµ kiÓu interface

4. C¸c khai b¸o gãi
a) C¸c gãi cã tªn
Mét khai b¸o gãi trong mét ®¬n vÞ biªn dÞch x¸c ®Þnh tªn cña ®¬n vÞ biªn dÞch thuéc gãi ®ã. Khai b¸o gãi:
Package PackageName;

Tªn gãi trong khai b¸o gãi ph¶i lµ tªn ®Çy ®ñ cña gãi: NÕu mét kiÓu cã tªn lµ T ®îc khai b¸o trong mét ®¬n vÞ biªn dÞch cã tªn cña gãi cã tªn lµ P th× tªn ®Çy ®ñ cña kiÓu lµ P.T VÝ dô:
Package wnj,points; ClassPoint {intx,inty;}

Tªn ®Çy ®ñ cña líp point lµ wnj.points.Point

Trang :

33

X©y dùng øng dông m¹ng víi ng«n ng÷ Java

b) C¸c gãi kh«ng ®îc ®Æt tªn:
Mét ®¬n vÞ biªn dÞch mµ kh«ng cã khai b¸o gãi lµ mét phÇn cña mét gãi kh«ng ®îc ®Æt tªn. VÝ dô:
ClassF irstCall { Publicstatic voidmain(String[]args) { System.out.println(“Mr atson,come here.” .W +”Iwant you.”); } }

§Þnh nghÜa mét ®¬n vÞ biªn dÞch ®¬n gi¶n nh lµ mét phÇn cña gãi kh«ng ®îc ®Æt tªn. Mét hÖ thèng Java ph¶i cung cÊp Ýt nhÊt mét gãi kh«ng tªn; nã còng cã thÓ cung cÊp nhiÒu h¬n mét gãi kh«ng tªn nhng kh«ng nhÊt thiÕt ph¶i lµm nh vËy. C¸c ®¬n vÞ biªn dÞch nµo n»m trong c¸c gãi kh«ng tªn ®îc x¸c ®Þnh bëi hÖ thèng chñ (Host System). Trong c¸c hÖ thèng Java mµ sö dông mét hÖ thèng file ph©n cÊp ®Ó lu c¸c gãi; cã mét giai ®o¹n th«ng thêng lµ liªn kÕt mét gãi kh«ng tªn víi mét th môc, chØ cã mét gãi kh«ng tªn t¹i mét thêi ®iÓm, nghÜa lµ gãi g¾n víi th môc hiÖn hµnh. C¸c gãi kh«ng tªn ®îc cung cÊp bëi Java vÒ mÆt nguyªn t¾c ®Ó thuËn tiÖn cho viÖc ph¸t triÓn c¸c øng dông nhá vµ t¹m thêi hay khi míi b¾t ®Çu ph¸t triÓn. CÇn thËn träng khi sö dông c¸c gãi kh«ng tªn. Cã thÓ mét ®¬n vÞ biªn dÞch trong mét gãi ®îc ®Æt tªn nhËp mét kiÓu tõ mét gãi kh«ng tªn, nhng ®¬n vÞ biªn dÞch sau ®ã sÏ chØ lµm viÖc nh gãi kh«ng tªn hiÖn hµnh.
Chó ý: C¸c ®¬n vÞ biªn dÞch cña c¸c gãi cã tªn kh«ng bao giê nhËp c¸c kiÓu tõ c¸c gãi cã tªn

BÊt kú kiÓu ®îc khai b¸o trong mét gãi kh«ng tªn kh«ng ®îc khai b¸o puclic ®Ó tr¸nh bÞ gãi cã tªn th©m nhËp.

V. Threads vµ Locks
Ch¬ng nµy ®Ò cËp chi tiÕt tíi c¸c hµnh ®éng møc thÊp mµ ®îc sö dông ®Ó gi¶i thÝch sù t¬ng t¸c gi÷a c¸c thread (luång) m¸y ¶o Java víi mét bé nhí dïng chung.

1. Luång lµ g×?
Luång cã thÓ coi lµ mét tiÕn tr×nh ch¹y trªn m¸y tÝnh. Luång ®îc t¹o ra khi ta ch¹y mét ch¬ng tr×nh nµo ®ã. Nh÷ng ch¬ng tr×nh ®a luång thõa kÕ ý tëng ®a nhiÖm ë mét møc thÊp h¬n: mçi ch¬ng tr×nh riªng biÖt cã kh¶ n¨ng thùc hiÖn nhiÒu phÐp tÝnh trong cïng mét thêi gian (mçi ®¬n vÞ tÝnh to¸n thêng ®îc gäi lµ mét luång. Nh÷ng ch¬ng tr×nh mµ cã thÓ thùc hiÖn nhiÒu h¬n mét thao t¸c
Trang :

34

X©y dùng øng dông m¹ng víi ng«n ng÷ Java trong mét thêi ®iÓm th× ®îc gäi lµ ®a luång). Mçi luång ch¹y víi ng÷ c¶nh riªng: c¸c ng÷ c¶nh khiÕn cho mçi luång nh ®ang ch¹y víi CPU riªng cña nã, víi c¸c thanh ghi, bé nhí vµ m· nguån riªng. Trong phÇn nµy chóng ta sÏ ®Ò cËp ®Õn kh¶ n¨ng ®a luång cña Java, cã nghÜa lµ hç trî nhiÒu ch¬ng tr×nh ch¹y song song. Trong JDK cã mét líp chuÈn tªn lµ Thread, c¸c ch¬ng tr×nh hç trî ®a luång sÏ ph¶i kÕ thõa tõ líp nµy. Líp Thread cã hai ph¬ng thøc c¬ b¶n lµ Start vµ Run. Start dïng ®Ó t¹o ra luång t¬ng øng víi líp ®ã. Start sÏ tù ®éng gäi ph¬ng thøc Run, nh vËy c¸c ho¹t ®éng cÇn thiÕt sÏ ®Æt trong líp Run.

2. C¸c thuËt ng÷ vµ c¸c khung lµm viÖc
§iÒu nµy kh«ng chØ bao gåm c¸c biÕn líp, biÕn mÉu mµ cßn bao gåm c¸c thµnh phÇn cña c¸c m¶ng. C¸c biÕn ®îc lu trong bé nhí chÝnh mµ ®îc dïng chung bëi c¸c thread. C¸c thread cã thÓ truy cËp tíi c¸c tham sè hay c¸c biÕn côc bé cña mét thread kh¸c, v× vËy kh«ng cã vÊn ®Ò g× dï c¸c tham sè hay c¸c biÕn côc bé ®îc lu trong bé nhí chÝnh hay bé nhí lµm viÖc cña thread mµ së h÷u chóng Mçi thread cã mét bé nhí lµm viÖc trong ®ã gi÷ b¶n copy ®ang lµm viÖc cña c¸c biÕn mµ c¸c biÕn ph¶i ®îc sö dông hay g¸n. Khi thread xö lý mét ch¬ng tr×nh Java, nã ho¹t ®éng trªn c¸c b¶n copy nµy. Bé nhí chÝnh chøa b¶n copy chÝnh cña tõng biÕn. Cã c¸c luËt mµ c¸c thread ph¶i tu©n theo hoÆc ®ßi hái ph¶i truyÒn néi dung cña b¶n copy ®ang ho¹t ®éng sang b¶n copy chÝnh vµ ngîc l¹i. Bé nhí chÝnh còng chøa c¸c locks, cã mét khãa g¾n liÒn víi ®èi tîng. C¸c threads hoµn toµn cã ®ùoc mét khãa. V× môc ®Ých cña ch¬ng nµy, c¸c ®éng tõ use, assign, load, store, lock, unlock ®Æt tªn cho c¸c thao t¸c mµ mét thread cã thÓ thùc hiÖn. C¸c ®éng tõ read, write, lock, vµ unlock ®Æt tªn cho c¸c thao t¸c mµ hÖ thèng con bé nhí chÝnh cã thÓ thùc hiÖn. C¸c thao t¸c nµy lµ nhá nhÊt, kh«ng thÓ chia c¾t ®îc. Thao t¸c use hoÆc assign liªn hÖ chÆt chÏ gi÷a m« t¬ xö lý thread vµ bé nhí lµm viÖc cña nã. Thao t¸c lock vµ unlock liªn hÖ chÆt chÏ gi÷a m« t¬ xö lý thread vµ bé nhí chÝnh. Nhng sù chuyÓn d÷ liÖu gi÷a bé nhí chÝnh vµ bé nhí lµm viÖc rÊt láng lÎo. Khi d÷ liÖu ®îc copy tõ bé nhí chÝnh vµo bé nhí lµm viÖc th× cã hai hµnh ®éng x¶y ra: hµnh ®éng ®äc (read) ®îc thùc hiÖn víi bé nhí chÝnh, sau mét thêi gian cho phÐp t¬ng øng hµnh ®éng t¶i (load) d÷ liÖu tõ bé nhí chÝnh vµo bé nhí lµm viÖc ®îc thùc hiÖn. Khi d÷ liÖu ®îc copy tõ bé nhí lµm viÖc vµo bé nhí chÝnh th× còng cã hai hµnh ®éng diÔn ra: hµnh ®éng lu (store) ®îc thùc hiÖn víi bé nhí lµm viÖc, sau mét thêi gian cho phÐp t¬ng øng hµnh ®éng ghi (write) sÏ ®îc thùc hiÖn ë bé nhí chÝnh. Cã thÓ cã thêi gian qu¸ ®é gi÷a bé nhí chÝnh vµ bé nhí lµm viÖc, thêi gian qu¸ ®é lµ kh¸c nhau cho mçi giao dÞch, do ®ã c¸c thao t¸c khëi ®Çu bëi mét thread trªn nh÷ng biÕn kh¸c nhau cã thÓ bÞ c¸c thread kh¸c trªn mét c«ng ®o¹n kh¸c nh×n thÊy. Tuy nhiªn víi mçi mét biÕn, thao t¸c trong bé nhí chÝnh sÏ thay mÆt bÊt kú thread nµo mµ ®îc thùc hiÖn trong cïng mét giai ®o¹n mµ cã thao t¸c gièng nh thao t¸c trong bé nhí chÝnh.

Trang :

35

X©y dùng øng dông m¹ng víi ng«n ng÷ Java Mçi thread ®¬n ph¸t ra mét d·y thao t¸c: use, assign, lock, unlock ®îc ®iÒu khiÓn tuú theo ng÷ nghÜa cña ch¬ng tr×nh Java mµ nã ®ang xö lý. Sù thi hµnh ch¬ng tr×nh Java sau ®ã sÏ yªu cÇu thùc hiÖn nh÷ng thao t¸c load, store, read, write phï hîp ®Ó ®¸p øng víi mét lo¹t nh÷ng thóc Ðp mµ sÏ ®îc gi¶i thÝch sau. NÕu sù thùc hiÖn ch¬ng tr×nh Java theo ®óng nh÷ng quy t¾c nµy vµ ngêi lËp tr×nh øng dông Java còng theo mét sè x¸c ®Þnh nh÷ng quy t¾c lËp tr×nh kh¸c, th× d÷ liÖu cã thÓ truyÒn gi÷a c¸c thread mét c¸ch ®¸ng tin cËy th«ng qua c¸c biÕn n¾m gi÷ nã. C¸c quy t¾c nµy ®îc thiÕt kÕ võa ®ñ chÆt chÏ ®Ó t¹o ra ®é tin cËy võa láng lÎo ®Ó cho phÐp nh÷ng ngêi thiÕt kÕ vÒ phÇn cøng vµ phÇn mÒm cã thÓ tù do xem xÐt c¶i thiÖn vÒ mÆt tèc ®é qua c¸c c¬ chÕ: thanh ghi, hµng ®îi, caches. Díi ®©y lµ c¸c ®Þnh nghÜa chi tiÕt cña mçi thao t¸c: • Mét thao t¸c g¸n (bëi thread) chuyÓn néi dung b¶n sao cña mét biÕn cña thread vµo m« t¬ xö lý cña thread. Thao t¸c nµy ®îc thùc hiÖn bÊt kú khi nµo mét thread xö lý mét lÖnh m¸y ¶o mµ sö dông gi¸ trÞ cña mét biÕn. Mét thao t¸c g¸n (bëi mét thread) truyÒn mét gi¸ trÞ tõ m« t¬ xö lý cña thread thµnh mét b¶n sao cña mét biÕn cña thread. Thao t¸c nµy ®îc thùc hiÖn bÊt kú lóc nµo mét thread xö lý mét lÖnh m¸y ¶o mµ g¸n gi¸ trÞ cho ät biÕn. Tao t¸c ®äc (bëi bé nhí chÝnh) truyÒn ®i c¸c néi dung cña b¶n sao cña mét biÕn vµo bé nhí lµm viÖc cña thread cho viÖc sö dông trong lÖnh load sau nµy. Thao t¸c load (bëi mét thread) ®Æt gi¸ trÞ cña ®îc truyÒn tõ bé nhí chÝnh bëi thao t¸c ®äc vµo b¶n sao cña mét biÕn cña thread. Thao t¸c lu (bëi mét thread) truyÒn nét dung cña b¶n sao cña mét biÕn cña thread vµo bé nhí sö dông cho thao t¸c ghi sau nµy. Thao t¸c ghi (bëi bé nhí chÝnh) ®Æt mét gi¸ trÞ ®îc truyÒn tõ bé nhí bëi thao t¸c lu sang b¶n sao cña mét biÕn trong bé nhí chÝnh. Thao t¸c kho¸ lock(). Thao t¸c më kho¸ unlock().

• • • • • •

3. Thø tù xö lý vµ tÝnh nhÊt qu¸n
Mçi luång khi ch¹y ®Òu cã mét ®é u tiªn nhÊt ®Þnh. HÖ ®iÒu hµnh sÏ dùa trªn c¬ së ®é u tiªn cña tõng luång ®Ó quyÕt ®Þnh xem luång nµo cã quyÒn ch¹y tríc. C¸ch qu¶n lý cña hÖ ®iÒu hµnh nh sau: • • • T¹i mét thêi ®iÓm nÕu cã nhiÒu luång cïng chê ®îi th× luång nµo cã ®é u tiªn cao h¬n sÏ ch¹y tríc. Khi mét luång ®ang ch¹y nÕu cã mét luång kh¸c cã ®é u tiªn cao h¬n cÇn ch¹y th× luång tríc sÏ bÞ t¹m ng¾t ®Ó cho luång míi ch¹y xong khi ®ã nã míi tiÕp tôc. §èi víi trêng hîp hai luång cã ®é u tiªn gièng nhau cïng muèn ch¹y th× khi ®ã hÖ ®iÒu hµnh sÏ kiÓm so¸t theo nguyªn t¾c sau:  Khi luång ®ang ch¹y t¹m dõng c¸c tÝnh to¸n ®Ó tiÕn hµnh truy nhËp vµo ngo¹i vi th× quyÒn sö dông CPU sÏ ®îc trao cho luång kh¸c.  Ph©n chia thêi gian: CPU ®îc ph©n chia cho mçi luång cã ®é u tiªn ngang nhau mét kho¶ng thêi gian nh nhau. Sau mçi kho¶ng thêi gian
Trang :

36

X©y dùng øng dông m¹ng víi ng«n ng÷ Java ®ã luång ®ang ch¹y dï cha kÕt thóc còng ph¶i t¹m dõng ®Ó dµnh chç cho luång kh¸c ®Õn lît. Khi ta ch¹y c¸c luång song song mµ l¹i cïng cËp nhËt trªn mét d÷ liÖu chung th× sÏ dÉn tíi lçi d÷ liÖu do mÊt ®ång bé gi÷a c¸c luång. Do ®ã khi t¹o ra Java c¸c t¸c gi¶ ®· lµm cho c¸c thread kh«ng t¬ng t¸c trùc tiÕp; chóng chØ truyÒn tin th«ng qua bé nhí dïng chung. C¸c mèi quan hÖ gi÷a c¸c hµnh ®éng cña mét thread vµ c¸c hµnh ®éng cña bé nhí chÝnh bÞ rµng buéc theo ba c¸ch sau: • Mçi thao t¸c lock hoÆc unlock ®îc thùc hiÖn ®ång thêi bëi mét sè thread vµ bé nhí chÝnh. • Mçi thao t¸c t¶i (load) bëi mét thread lu«n ®i kÌm víi mét thao t¸c ®äc (read) duy nhÊt bëi bé nhí chÝnh, ph¶i ®¶m b¶o thao t¸c t¶i thùc hiÖn sau thao t¸c ®äc. • Mçi thao t¸c lu (store) bëi mét thread lu«n ®i kÌm víi thao t¸c ghi(write) duy nhÊt bëi bé nhí chÝnh, ph¶i ®¶m b¶o thao t¸c ghi thùc hiÖn sau thao t¸c ghi. HÇu hÕt c¸c quy t¾c trong c¸c môc díi ®©y ph¶i tu©n theo thø tù mµ c¸c hµnh ®éng nhÊt ®Þnh x¶y ra. Mét quy t¾c nãi r»ng mét hµnh ®éng ph¶i xö lý hoËc thùc hiÖn sau mét sè hµnh ®éng kh¸c. Chó ý r»ng mèi quan hÖ nµy cã tÝnh bÊc cÇu: NÕu hµnh ®éng A x¶y ra tríc hµnh ®éng B, vµ hµnh ®éng B x¶y ra tríc hµnh ®éng C, th× hµnh ®éng A sÏ x¶y ra tríc hµnh ®éng C. LËp tr×nh viªn ph¶i nhí r»ng, nh÷ng quy t¾c nµy lµ c¸c rµng buéc duy nhÊt theo thø tù c¸c hµnh ®éng; nÕu kh«ng cã quy t¾c hay tæ hîp c¸c quy t¾c nãi r»ng hµnh ®éng A ph¶i x¶y ra tríc hµnh ®éng B, th× sù thùc thi mét ch¬ng tr×nh Java ®îc tù do thùc hiÖn hµnh ®éng B tríc hµnh ®éng A, hoËc thùc hiÖn hµnh ®éng B ®ång thêi víi hµnh ®éng A. TÝnh tù do nµy cã thÓ lµ ch×a kho¸ ®Ó ®¹t ®îc viÖc thùc hiÖn tèt. Ngîc l¹i, viÖc thùc hiÖn kh«ng ®ßi hái ph¶i cã thuËn lîi cña tÝnh tù do ®îc ®a cho nã. Trong c¸c quy t¾c díi ®©y, ĘB ph¶i xen vµo gi÷a A vµ Cę nghÜa lµ hµnh ®éng B thùc hiÖn sau hµnh ®éng A vµ tríc hµnh ®éng C.

4. C¸c quy t¾c vÒ c¸c biÕn
Gi¶ sö T lµ mét thread vµ V lµ mét biÕn. Cã mét sè rµng buéc vÒ thao t¸c thùc hiÖn bëi T nhng cã liªn quan ®Õn V. ViÖc sö dông hay g¸n cña biÕn V bëi T chØ cho phÐp khi ®îc ra lÖnh xö lý bëi T cña ch¬ng tr×nh Java theo m« h×nh xö lý Java chuÈn. VÝ dô, sù tån t¹i cña V nh lµ mét to¸n h¹ng cña to¸n tö Ę+ę ®ßi hái thao t¸c sö dông (uses) diÔn ra trªn V. Sù tån t¹i cña biÕn V nh lµ to¸n h¹ng bªn tr¸i cña to¸n tö g¸n (=) ®ßi hái mét thao t¸c g¸n ®¬n ph¶i x¶y ra. TÊt c¶ c¸c thao t¸c sö dông vµ g¸n thùc hiÖn bëi mét thread cho tríc ph¶i x¶y ra theo thø tù x¸c ®Þnh bëi ch¬ng tr×nh ®ang ®îc thread xö lý. NÕu nh c¸c quy t¾c díi ®©y kh«ng cho phÐp T thùc hiÖn thao t¸c sö dông (use) nh lµ thao t¸c tiÕp theo cÇn thiÕt ®Ó T thùc hiÖn thao t¸c load tríc ®Ó c¶i tiÕn. • • Thao t¸c lu T trªn biÕn V ph¶i x¶y ra gi÷a phÐp g¸n T cho biÕn V vµ phÐp t¶i T cho biÕn V. Thao t¸c g¸n T trªn biÕn V ph¶i x¶y ra gi÷a phÐp t¶i hoÆc lu T cho V vµ thao t¸c lu T cho V x¶y ra sau.
Trang :

37

X©y dùng øng dông m¹ng víi ng«n ng÷ Java Sau khi mét thread ®îc t¹o ra, nã ph¶i thùc hiÖn mét thao t¸c g¸n hay t¶i trªn biÕn tríc khi thùc hiÖn thao t¸c sö dông hay lu trªn biÕn ®ã. Còng cã mét sè rµng buéc nhÊt ®Þnh trªn c¸c thao t¸c ®äc, ghi thùc hiÖn bëi bé nhí: • §èi víi tõng thao t¸c thùc hiÖn bëi bÊt kú thread T nµo trªn b¶n sao cña biÕn V, ph¶i cã mét thao t¸c ®äc tríc ®ã bëi bé nhí chÝnh trªn b¶n copy chÝnh cña V, vµ thao t¸c load ph¶i ®a vµo b¶n sao d÷ liÖu ®îc ph¸t ra bëi thao t¸c ®äc t¬ng øng. • §èi víi tõng thao t¸c lu ®îc thùc hiÖn bëi bëi bÊt kú thread nµo trªn b¶n sao ®ang lµm viÖc cña biÕn V, ph¶i cã thao t¸c ghi bëi bé nhí chÝnh trªn b¶n copy chÝnh cña biÕn V, vµ thao t¸c ghi ph¶i ®îc ®a vµo b¶n copy chÝnh cña biÕn V, vµ thao t¸c ghi ph¶i ®a vµo b¶n copy chÝnh d÷ liÖu ®îc truyÒn bëi thao lu t¬ng øng. Gi¶ sö thao t¸c A lµ mét thao t¸c load hay store bëi thread trªn biÕn V, vµ gi¶ sö lµ thao t¸c ®äc hay ghi bëi bé nhí chÝnh trªn biÕn V. T¬ng tù, B lµ thao t¸c lµ thao t¸c load hay store bëi thread T trªn cïng biÕn V ®ã vµ cho Q lµ thao t¸c read, write t¬ng øng bëi bé nhí chÝnh trªn biÕn V. NÕu A x¶y ra tríc B, th× P ph¶i x¶y ra tríc Q. Chó ý r»ng qui t¾c cuèi cïng chØ ¸p dông cho c¸c thao t¸c thùc hiÖn bëi mét thread trªn cïng mét biÕn. Tuy nhiªn cã mét qui t¾c nghiªm ngÆt cho c¸c biÕn ®éng.

5. C¸ch xö lý c¸c biÕn long vµ double kh«ng nguyªn tö
NÕu mét biÕn double hay biÕn long kh«ng ®îc khai b¸o lµ ®éng, th× do môc ®Ých cña c¸c thao t¸c load, store, read, vµ write nã ®îc xem nh hai biÕn mçi biÕn 32 bit: bÊt kú ë ®©u c¸c qui t¾c còng ®ßi hái ph¶i cã mét trong c¸c thao t¸c nµy, hai thao t¸c nh vËy ®îc thùc hiÖn. Nh÷ng vÊn ®Ò n¶y sinh chØ v× thao t¸c ®äc, ghi cña mét biÕn long hay double cã thÓ qu¶n lý bëi bé nhí chÝnh nh hai thao t¸c write hay read mµ t¸ch biÖt theo thêi gian. Bëi vËy, nÕu hai thread ®ång thêi g¸n c¸c gi¸ trÞ kh¸c nhau cho tõng biÕn long hay double ®éng, viÖc sö dông sau ®ã cña mét biÕn cã thÓ nhËn mét gi¸ trÞ kh«ng b»ng gi¸ trÞ ®îc g¸n, nhng mét sè thùc hiÖn phô thuéc vµo c¶ hai gi¸ trÞ. Mét thùc hiÖn tù do thùc hiÖn thao t¸c write, load, read, store cho c¸c gi¸ trÞ long vµ double nh c¸c thao t¸c nguyªn tè 64 bit; thùc tÕ ®iÒu nµy ®îc khuyÕn khÝch m¹nh mÏ. M« h×nh nµy chia chóng thµnh c¸c nöa 32 bit tiÖn cho mét sè bé vi xö lý th«ng dông hiÖn nay mµ kh«ng thÓ ®¸p øng ®îc c¸c giao dÞch bé nhí nguyªn tö mét c¸ch cã hiÖu qu¶ trªn c¸c ®¬n vÞ 64 bit. SÏ ®¬n gi¶n h¬n nÕu tÊt c¶ c¸c giao dÞch trªn c¸c biÕn ®¬n lµ nguyªn tè; ®Þnh nghÜa nµy phøc t¹p h¬n lµ mét sù chuyÓn giao thùc dông.

6. C¸c quy t¾c vÒ kho¸
Gi¶ sö T lµ mét thread vµ L lµ mét khãa. Cã mét sè rµng buéc nhÊt ®Þnh trªn c¸c thao t¸c thùc hiÖn bëi T víi kho¸ L:
Trang :

38

X©y dùng øng dông m¹ng víi ng«n ng÷ Java • • • Mét thao t¸c kho¸ thùc hiÖn bëi T trªn kho¸ L xÈy ra nÕu ®èi víi tõng thread S kh¸c T, sè thao t¸c unlock xö lý tríc bëi S trªn kho¸ L b»ng víi sè thao t¸c lock bëi S trªn L. Thao t¸c unlock bëi thread T trªn kho¸ L cã thÓ x¶y ra chØ nÕu sè thao t¸c unlock xö lý tríc bëi T trªn kho¸ L nhá h¬n nhiÒu so víi sè thao t¸c lock bëi T trªn L. Víi mét kho¸ c¸c thao t¸c lock vµ unlock ®îc thùc hiÖn bëi c¸c thread mµ c¸c thread nµy l¹i ®îc thùc hiÖn theo mét sè thø tù tuÇn tù hoµn chØnh. Thø tù hoµn chØnh nµy ph¶i nhÊt qu¸n víi thø tù hoµn chØnh trªn c¸c thao t¸c cña mçi thread.

7. C¸c quy t¾c vÒ giao t¸c gi÷a c¸c kho¸ vµ c¸c biÕn
Víi T, V, L lµ c¸c ký hiÖu nh trªn. Cã mét soã rµng buéc trªn c¸c thao t¸c thùc hiÖn bëi T víi biÕn V vµ kho¸ L: • Gi÷a thao t¸c assign thùc hiÖn bëi T trªn biÕn Vvµ thao t¸c unlock sau ®ã thùc hiÖn bëi T trªn kho¸ L, thao t¸c store thùc hiÖn bëi T trªn biÕn V ph¶i ®îc xen vµo gi÷a hai thao t¸c trªn; h¬n n÷a thao t¸c write t¬ng øng víi thao t¸c store ph¶i ®îc xö lý tríc thao t¸c unlock, ®îc gi¸m s¸t bëi bé nhí chÝnh. Gi÷a thao t¸c lock ®îc thùc hiÖn bëi T trªn kho¸ L vµ thao t¸c use hay store thùc hiÖn bëi T trªn biÕn V cã mét thao t¸c assign hay load trªn biÕn V ®îc xen vµo; h¬n n÷a nÕu nã lµ thao t¸c load th× thao t¸c read t¬ng øng víi thao t¸c load ®ã ph¶i ®i sau thao t¸c lock, ®îc gi¸m s¸t bë bé nhí chÝnh.

8. C¸c quy t¾c cho c¸c biÕn ®éng
NÕu mét biÕn ®îc khai b¸o lµ ®éng (volatile), th× c¸c rµng buéc phô ¸p dông cho c¸c thao t¸c cña thread. Gi¶ sö W lµ biÕn ®éng. • Thao t¸c use thùc hiÖn bëi T trªn V chØ ®îc phÐp nÕu thao t¸c tríc ®ã thùc hiÖn bëi T trªn V lµ thao t¸c load, vµ thao t¸c load thùc hiÖn bëi T trªn V chØ ®îc phÐp nÕu thao t¸c tiÕp theo thùc hiÖn bëi T trªn V lµ thao t¸c use. Thao t¸c use ®îc gäi lµ Ęliªn kÕtę víi thao t¸c ®äc t¬ng øng víi thao t¸c load. • Thao t¸c store thùc hiÖn bëi T tªn V chØ ®îc phÐp nÕu thao t¸c tríc ®ã thùc hiÖn bëi T trªn V lµ thao t¸c assign. Vµ thao t¸c assign thùc hiÖn bëi T trªn V chØ ®îc phÐp nÕu thao t¸c tiÕp theo thùc hiÖn bëi T trªn V lµ thao t¸c store. Thao t¸c assign ®îc gäi lµ Ęliªn kÕtę víi thao t¸c write tt¬ng øng víi thao t¸c store. Gi¶ sö A lµ thao t¸c assign hay use thùc hiÖn bëi T trªn V, gi¶ sö F lµ thao t¸c load g¾n liÒn víi A, T lµ thao t¸c read hoÆc write cña V t¬ng øng víi F. T¬ng tù gi¶ sö B lµ thao t¸c use hay assign thùc hiÖn bëi T trªn biÕn W, gi¶ sö G lµ thao t¸c load hay store liªn kÕt víi B, vµ Q lµ thao t¸c read hoÆc write cña biÕn V t¬ng øng víi G. NÕu A x¶y ra tríc B th× P ph¶i thùc hiÖn tríc Q.

9. C¸c thao t¸c lu
Trang :

39

X©y dùng øng dông m¹ng víi ng«n ng÷ Java NÕu mét biÕn kh«ng ®îc khai b¸o lµ ®éng th× c¸c qui t¾c trong c¸c môc tríc ®îc níi láng h¬n cho phÐp c¸c thao t¸c lu xuÊt hiÖn sím h¬n. Môc ®Ých cña sù níi láng nµy lµ cho phÐp tèi u tr×nh dÞch cña Java ®Ó thùc hiÖn mét sè kiÓu bè trÝ l¹i m· mµ vÉn ®¶m b¶o c¸c ng÷ nghÜa cña c¸c ch¬ng tr×nh ®îc ®ång bé ho¸ mét c¸ch chÝnh x¸c, nhng cã thÓ trong khi thùc hiÖn c¸c thao t¸c víi bé nhí kh«ng ®óng thø tù bëi c¸c ch¬ng tr×nh kh«ng ®îc ®ång bé mét c¸ch chÝnh x¸c. Gi¶ sö thao t¸c store thùc hiÖn bëi T cña biÕn V ph¶i ®i sau mét thao t¸c assign ®Æc biÖt bëi T cña biÕn V theo c¸c quy t¾c cña c¸c môc tríc mµ kh«ng cÇn chÌn vµo c¸c lÖnh load hay assign cña biÕn V. Sau ®ã thao t¸c store sÏ göi tíi bé nhí gi¸ trÞ mµ thao t¸c assign ®a vµo trong bé nhí ®ang ho¹t ®éng cña thread T. Quy t¾c ®Æc biÖt nµy cho phÐp thao t¸c store thùc sù x¶y ra, thay v× tríc khi thao t¸c assign x¶y ra, nÕu c¸c quy t¾c díi ®©y ®îc tu©n theo: • • • • Thao t¸c store x¶y ra th× assign buéc ph¶i x¶y ra (®©y lµ nh÷ng quy t¾c nãi vÒ ®iÒu g× thùc sù x¶y ra chø kh«ng ph¶i nãi vÒ mét thread ®Æt kÕ ho¹ch lµm g×). Kh«ng cã c¸c thao t¸c lock chÌn gi÷a thao t¸c store vµ assign. Kh«ng cã thao t¸c load mét biÕn V chÌn gi÷a store vµ assign. Thao t¸c store göi ®Õn bé nhí chÝnh gi¸ trÞ mµ thao t¸c assign sÏ ®a vµo trong bé nhí lµm viÖc cña thread T.

10. Lêi bµn
BÊt kú mèi liªn kÕt nµo gi÷a c¸c kho¸ vµ c¸c biÕn chØ ®¬n thuÇn mang tÝnh truyÒn thèng. ViÖc kho¸ bÊt kú mét kho¸ nµo vÒ mÆt kh¸i niÖm sÏ ®Èy tÊt c¶ c¸c biÕn tõ bé nhí ®ang lµm viÖc cña mét thread vµ gi¶i phãng kho¸ bÊt kú kho¸ nµo buéc ph¶i ghi ra ngoµi bé nhí chÝnh tÊt c¶ c¸c biÕn mµ luång ®· g¸n. Mét kho¸ cã thÓ liªn kÕt víi mét ®èi tîng ®Æc biÖt hay mét líp. Trong mét sè øng dông lu«n cÇn ph¶i kho¸ mét øng dông tríc khi truy nhËp tíi bÊt kú c¸c biÕn thÓ hiÖn, vÝ dô: c¸c ph¬ng thøc ®ång bé lµ c¸ch thÝch hîp theo quy luËt nµy. Trong mét sè øng dông kh¸c cã thÓ ®ñ ®Ó sö dông mét kho¸ ®¬n ®Ó ®ång bé truy cËp tíi mét tËp hîp lín c¸c ®èi tîng. NÕu mét luång sö dông mét biÕn chung ®Æc biÖt chØ sau khi kho¸ mét kho¸ ®Æc biÖt vµ tríc khi gi¶i phãng kho¸ ®ã, nÕu cÇn sÏ copy vµo bé nhí chÝnh gi¸ trÞ míi ®îc g¸n gÇn ®ã nhÊt cho biÕn tríc khi gi¶i phãng kho¸. §iÒu nµy liªn quan tíi c¸c quy t¾c lo¹i trõ lÉn nhau cña c¸c kho¸, ®ñ ®Ó ®¶m b¶o c¸c gi¸ trÞ ®îc truyÒn ®i mét c¸ch ®óng ®¾n tõ mét luång nµy sang mét luång kh¸c th«ng qua c¸c biÕn chung. C¸c quy t¾c cho c¸c biÕn ®éng ®ßi hái bé nhí chÝnh ph¶i ®îc qu¶n lý chÝnh x¸c mçi khi mét thao t¸c use hay assign cña mét biÕn ®éng, vµ bé nhí ®ã ph¶i ®îc qu¶n lý chÝnh x¸c theo thø tù ®îc chir ra bëi ng÷ c¶nh xö lý thread. Tuy nhiªn c¸c thao t¸c trªn bé nhí kh«ng tu©n theo thø tù cña c¸c thao t¸c read vµ write trªn c¸c biÕn tÜnh.

VI. X©y dùng øng dông ®a luång víi Java 1. Ch¹y vµ khëi ®éng c¸c luång
Trang :

40

X©y dùng øng dông m¹ng víi ng«n ng÷ Java Mét øng dông ®a luång th× ph¶i ®îc khai b¸o kÕ thõa tõ líp Thread. Khi x©y dùng mét øng dông dÉn xuÊt tõ líp Thread, Java kh«ng tù ®éng gäi ph¬ng thøc thi hµnh. Chóng ta ph¶i gäi ph¬ng thøc start trong ®èi tîng ®Ó thùc sù khëi ®éng mét luång.
object_name.start(); Chó ý: kh«ng ®îc gäi ph¬ng thøc run mét c¸ch trùc tiÕp, ph¬ng thøc start sÏ gäi nã khi luång ®îc thiÕt lËp vµ s½n sµng ®Ó ch¹y.

C¸c hµm cña Thread (java.lang.Thead): • • • • • • Thread(): x©y dùng mét luång míi, luång ®ã ph¶i cã mét ph¬ng thøc run. Ta cÇn ph¶i khëi ®éng luång (start) ®Ó kÝch ho¹t hµm run cña nã. void run(): chóng ta ph¶i override hµm nµy vµ thªm m· lÖnh phôc vô cho viÖc thùc hiÖn luång. void start(): khëi ®éng luång t¹o ra. Nã sÏ gäi tíi hµm run(). Ph¬ng thøc nµy trë vÒ ngay lËp tøc, luång míi ®îc kÝch ho¹t ch¹y ngay. static void sleep(long milis): ®Æt luång ®ang thùc thi hiÖn thêi vµo tr¹ng th¸i ngñ trong mét kho¶ng thêi gian ®· ®Þnh tríc. Chó ý r»ng ®©y lµ mét ph¬ng thøc tÜnh. void interrupt(): göi mét yªu cÇu ng¾t ®Õn luång. static boolean interrupted(): hái xem luång hiÖn thêi cã ®ang bÞ ng¾t hay kh«ng.

2. C¸c thuéc tÝnh cña luång
a) C¸c tr¹ng th¸i cña luång
Mçi luång cã thÓ ë mét trong 4 tr¹ng th¸i sau: new, runnable, running, dead. New Khi ta t¹o ra mét luång víi to¸n tö new, nã vÉn cha ch¹y, ®iÒu ®ã cã nghÜa lµ nã ®ang trong tr¹ng th¸i new. Runnable Mçi khi cã lêi gäi ®Õn ph¬ng thøc start, luång sÏ chuyÓn sang tr¹ng th¸i runnable. Mét luång trong tr¹ng th¸i runnable cã thÓ vÉn cha ch¹y, nã cßn tuú hÖ ®iÒu hµnh cã cho nã thêi gian ®Ó thùc hiÖn. §Õn khi mÉ nguån cña luång ®îc thùc hiÖn, luång lóc nµy míi b¾t ®Çu ch¹y. Luång chuyÓn sang tr¹ng th¸i running.

b) Tr¹ng th¸i kho¸ (Blocked)
Mét luång chuyÓn sang tr¹ng th¸i kho¸ khi mét trong 4 lý do sau ®©y s¶y ra: • • • Cã lêi gäi tíi ph¬ng thøc sleep() ®èi víi luång Cã lêi gäi tíi ph¬ng thøc suppend() ®èi víi luång Luång gäi ph¬ng thøc wait()

Trang :

41

X©y dùng øng dông m¹ng víi ng«n ng÷ Java • Luång thùc hiÖn mét thao t¸c mµ bÞ kho¸ thao t¸c vµo/ra, nghÜa lµ mét thao t¸c kh«ng thÓ trë vÒ lêi gäi tríc ®ã cho ®Õn khi thao t¸c vµo ra hoµn thµnh.

c) Tho¸t khái tr¹ng th¸i kho¸
Luång cÇn ph¶i tho¸t ra khái tr¹ng th¸i kho¸ vµ trë l¹i tr¹ng th¸i runnable theo híng ngîc víi híng mµ ®Èy nã r¬i vµo tr¹ng th¸i kho¸. • • • • NÕu mét luång bÞ ®Æt vµo tr¹ng th¸i ngñ, lîng thêi gian chØ ®Þnh cÇn ph¶i hÕt h¹n NÕu luång r¬i vµo tr¹ng th¸i suspended, cÇn ph¶i gäi ph¬ng thøc resume cña nã NÕu mét luång gäi ph¬ng thøc wait, luång cã lêi gäi ph¶i gäi ph¬ng thøc notify hay notifyAll NÕu luång ®ang ®îi mét thao t¸c vµo/ra hoµn thµnh, thao t¸c ®ã cÇn ph¶i kÕt thóc.

d) Luång chÕt
Mét luång bÞ ĘchÕtę lµ bëi 2 lý do: • • Nã chÕt mét c¸ch tù nhiªn bëi v× ph¬ng thøc run kÕt thóc Nã bÞ ĘgiÕtę bëi v× cã lêi gäi tíi ph¬ng thøc stop cña nã

Khi mét luång dõng, nã kh«ng ®i ®Õn tr¹ng th¸i chÕt ngay. VÒ mÆt kü thuËt, ph¬ng thøc stop thùc chÊt lµ göi mét ®èi tîng kiÓu ThreadDeath ®Õn luång. §Õn khi líp luång c¬ së cña nã nhËn ®îc ®èi tîng ThreadDeath, luång míi ĘchÕtę.

e) X¸c ®Þnh tr¹ng th¸i cña luång
§Ó x¸c ®Þnh mét luång hiÖn thêi ®ang s½n sµng ch¹y (runnanble) hay bÞ kho¸ (blocked), ngêi ta dïng ph¬ng thøc isAlive. Nã tr¶ vÒ false nÕu luång trong tr¹ng th¸i new vµ cha runnable hoÆc nã ®· chÕt. Java cung cÊp mét sè hµm phôc vô viÖc x¸c ®Þnh còng nh kh«i phôc tr¹ng th¸i cña mét luång • • • • • • boolean isAlive(): tr¶ vÒ gi¸ trÞ true nÕu luång ®· khëi ®éng vµ cha dõng static void yield(): lµm cho luång hiÖn thêi ch¹y cã hiÖu xuÊt. NÕu cã luång ®ang s½n sµng kh¸c, nã sÏ ®îc ®Æt tiÕp theo. void suspend(): ®a luång vµo tr¹ng th¸i suspend void resume(): phôc håi l¹i luång void stop(): dõng luång void join(): ®îi ®Õn khi luång chÕt

3. Møc u tiªn cña luång
Mçi luång trong Java ®Òu cã mét møc u tiªn. MÆc ®Þnh, mét luång cã møc u tiªn nh luång cha. Chóng ta cã thÓ t¨ng hoÆc gi¶m møc u tiªn víi ph¬ng thøc setPriority(). Ta cã thÓ ®Æt gi¸ trÞ møc u tiªn tõ MIN_PRIORITY (®Þnh nghÜa lµ 1) ®Õn MAX_PRIORITY (®Þnh nghÜa lµ 10). NORM_PRIORITY ®îc ®Þnh nghÜa b»ng 5.
Trang :

42

X©y dùng øng dông m¹ng víi ng«n ng÷ Java

4. §ång bé sù truy nhËp vµ chia sÎ tµi nguyªn
C¬ chÕ lµm viÖc cña viÖc ®ång bé ho¸ cã thÓ tãm t¾t nh sau: • NÕu mét líp cã mét hay nhiÒu ph¬ng thøc ®îc ®ång bé, mçi ®èi tîng cña líp sÏ cã mét hµng ®îi qu¶n lý c¸c luång ®ang ®îi ®Ó thùc hiÖn mét ph¬ng thøc ®îc ®ång bé. • Cã hai c¸ch cho mçi luång cã thÓ ®i vµo ®îc hµng ®îi ®ã: hoÆc gäi mét ph¬ng thøc trong khi mét luång kh¸c ®ang sö dông ®èi tîng hoÆc gäi ph¬ng thøc wait trong khi ®ang sö dông ®èi tîng ®ã. • Khi mét ph¬ng thøc ®ång bé gäi trë l¹i hoÆc khi mét ph¬ng thøc gäi hµm wait, mét luång kh¸c cã thÓ truy cËp ®îc tíi ®èi tîng. • Nh thêng lÖ, ngêi lËp lÞch sÏ chän luång cã møc u tiªn cao nhÊt trong hµng ®îi ra. • NÕu mét luång ®îc ®Æt vµo hµng ®îi nhê lêi gäi hµm wait, nã cÇn ph¶i ®îc gi¶i phãng bëi lêi gäi notify tríc khi nã ®îc s¾p ®Æt ®Ó thùc hiÖn trë l¹i. Nguyªn t¾c lËp lÞch thùc sù phøc t¹p, nhng trong thùc tÕ nã l¹i kh¸ ®¬n gi¶n, chØ cÇn thùc hiÖn theo 3 bíc sau: • • • NÕu hai hay nhiÒu luång cïng söa ®æi ®èi tîng, chØ viÖc khai b¸o ph¬ng thøc tiÕn hµnh söa ®æi ®Æt sang chÕ ®é ®ång bé. NÕu mét luång ph¶i ®îi sù thay ®æi tr¹ng th¸i cña mét ®èi tîng, nã nªn ®îi bªn trong ®èi tîng ®ã b»ng c¸ch ®i vµo mét ph¬ng thøc ®îc ®ång bé vµ gäi hµm call. BÊt cø khi nµo mét ph¬ng thøc lµm thay ®æi tr¹ng th¸i cña ®èi tîng, nã cÇn ph¶i gäi hµm notify. §iÒu nµy lµm cho c¸c luång ®ang ®îi cã thÓ thÊy ®îc t×nh huèng thay ®æi ®ã.

VII. X©y dùng øng dông Web víi Java
§Ó hiÓu t¹i sao Java lµ rÊt quan träng vµ rÊt cã uy lùc, tríc tiªn b¹n ph¶i hiÓu ®îc c«ng nghÖ Internet ngµy nay vµ nh÷ng h¹n chÕ cña c«ng nghÖ nµy. B¹n cã thÓ hiÓu ngay r»ng, Java chØ lµ sù ph¸t triÓn tù nhiªn cña c«ng nghÖ: mét ng«n ng÷ lµm n©ng cao kh¶ n¨ng cña Inernet vµ World Wide Web ngµy nay. Khi sö dông Internet, vÒ c¬ b¶n b¹n ®ang liªn l¹c m¸y tÝnh cña b¹n víi mét m¸y tÝnh xa x«i nµo ®ã hoÆc mét m¹ng m¸y tÝnh xa x«i nµo ®ã mµ cã thÓ cung cÊp hµng lo¹t nh÷ng d÷ liÖu bao gåm nh÷ng file ¶nh, ©m thanh, phim t×nh c¶m, ch¬ng tr×nh vµ nh÷ng lêi qu¶ng c¸o. Ch¬ng tr×nh mµ b¹n cÇn cho m¸y tÝnh cña b¹n ®Ó hoµn thµnh viÖc liªn l¹c víi World Wide Web cña Internet gäi lµ Web browser Web browser sÏ chuyÓn d÷ liÖu tíi m¸y tÝnh cña b¹n tõ Web server xa x«i nµo ®ã, ®äc nh÷ng file v¨n b¶n, ®å ho¹ vµ nh÷ng file kh¸c vµ kÕt hîp chóng ®Ó thµnh trang Web. Cã rÊt nhiÒu Web browser cã thÓ dïng ®îc nhng tr×nh duyÖt Netscape Navicator vµ Internet Explorer lµ lo¹i ®îc biÕt ®Õn nhiÒu nhÊt. Web browser hiÓn thÞ d÷ liÖu mµ b¹n nhËn ®îc qua Internet lªn m¸y tÝnh cña b¹n. Khi b¹n t¶i xuèng nhiÒu file vµ ®Ó chóng trong æ cøng cña b¹n. Chóng ta h·y xem d÷ liÖu sÏ ®îc hiÓn thÞ trªn mµn h×nh. Nh÷ng m¸y chñ mµ b¹n gÆp sÏ kh«ng hiÓu lo¹i m¸y mµ b¹n ®ang sö dông. VËy lµm thÕ
Trang :

43

X©y dùng øng dông m¹ng víi ng«n ng÷ Java nµo ®Ó biÕt ®îc d÷ liÖu mµ hä göi cã thÓ hiÓn thÞ ®îc trªn m¸y tÝnh cña b¹n hay kh«ng? §Ó b¶o ®¶m truy nhËp dÔ dµng nh÷ng th«ng tin trªn World Wide Web hÇu hÕt nh÷ng ngêi thiÕt kÕ trang Web chÊp nhËn mét khu«n d¹ng d÷ liÖu phæ biÕn gäi lµ Hypertext Markup Language hay HTML.

1. Nh÷ng kh¶ n¨ng cña trang Web ®îc x©y dùng dùa trªn c¬ së HTML
Tríc tiªn b¹n h·y lít qua nh÷ng phÇn cña World Wide Web vµ xem nh÷ng trang Web ®Çy Ên tîng ®îc cÊu tróc bëi HTML. Mét trong nh÷ng ®Æc trng ®îc x©y dùng trong HTML lµ kh¶ n¨ng thªm vµo nh÷ng liªn kªt siªu v¨n b¶n cho trang Web. T¸c gi¶ trang Web sö dông siªu v¨n b¶n ®Ó tao liªn kÕt tíi nh÷ng trang Web vµ nh÷ng file kh¸c, thêng th× c¸c ®Ò môc ®îc g¹ch díi vµ cã mÇu kh¸c nhau. Khi ngêi sö dông click vµo ®Ò môc cã g¹ch díi th× th× liªn kÕt siªu v¨n b¶n ®îc kÝch ho¹t chuyÓn chóng tíi mét trang Web kh¸c hoÆc thùc hiÖn mét sè hµm kh¸c. Khi ngêi sö dông tÝch vµo ®Ò môc nµy th× server cña trang Web sÏ nhËn ®îc chØ dÉn r»ng PC cña ngêi sö dông ®· kÝch ho¹t liªn kÕt siªu v¨n b¶n vµ sau ®ã nã sÏ göi trang Web míi tíi PC cña ngêi sö dông. Web browser cña ngêi sö dông sÏ hiÓn thÞ trang Web míi nµy trªn mµn h×nh cña hä. Cßn ®iÒu g× kh¸c n÷a mµ b¹n cÇn ph¶i hoµn thµnh víi liªn kÕt siªu v¨n b¶n trªn trang Web? B¹n còng cã thÓ thiÕt lËp liªn kÕt mµ nã sÏ tù ®éng hiÓn thÞ nh÷ng phÇn cña trang Web kh¸c t¬ng tù khi b¹n click. §Æc trng nµy ®îc sö dông phæ biÕn khi trang Web lµ qu¸ dµi kh«ng võa víi mµn h×nh ®¬n. HTML còng hç trî nh÷ng m· cho phÐp b¹n ®Þnh râ mÇu nÒn cho cöa sæ mµ trang Web ®ang hiÓn thÞ, mÇu cña ®Ò môc vµ cña hµng lo¹t nh÷ng trang trÝ kh¸c. B¹n cã thÓ ®Æt nh÷ng nót, nh÷ng Text box, Check box vµ nh÷ng nót Radio trong trang Web. Ch¼ng h¹n, nÕu trang ®a ra cho ngêi sö dông nh÷ng hép Check Box vµ ngêi sö dông ®¸nh dÊu vµo mét môc, Web Server sÏ nhËn ®îc chØ dÉn r»ng ngêi sö dông ®· ®¸nh dÊu vµo Check box vµ cã thÓ ®îc chØ dÉn qua m· CGI ®Ó thùc hiÖn nh÷ng thao t¸c x¸c ®Þnh. Check box, Radio box, List box vµ Edit box cã thÓ ®îc dïng nh lµ c¬ chÕ vµo d÷ liÖu cña ngêi sö dông vµ göi d÷ liÖu ®ã tõ m¸y tÝnh cña ngêi sö dông tíi Web server. Liªn kÕt siªu v¨n b¶n trªn trang Web còng cã thÓ ®îc thÓ hiÖn hÕt søc cuèn hót nh mét phÇn cña bøc tranh hoÆc ¸nh x¹ ¶nh. Ngêi sö dông ph¶i click vµo nh÷ng phÇn phï hîp cña bøc tranh ®Ó hiÖn ra mét trang Web kh¸c. Tuy nhiªn, ®ã lµ tÊt c¶ nh÷ng c¸i mµ HTML cã thÓ lµm: chØ hiÓn thÞ d÷ liÖu vµ ®a vµo nh÷ng trang trÝ vui vÎ. MÆc dï b¹n cã thÓ ®Æt nh÷ng nót, nh÷ng ¶nh trong trang Web cña b¹n nhng chóng cã thÓ nhá h¬n so víi viÖc ®Æt nh÷ng giao diÖn kh¸c trªn cïng mét thao t¸c siªu v¨n b¶n, b¹n cã thÓ hoµn thµnh víi nh÷ng liªn kÕt v¨n b¶n ®¬n gi¶n.

2. T¶i tÖp tõ mét Web Server
Trang :

44

X©y dùng øng dông m¹ng víi ng«n ng÷ Java Trang Web còng cã thÓ ®îc thiÕt lËp ®Ó cho phÐp ngêi sö dung t¶i c¸c file tõ mét Web server xa x«i nµo ®ã, m· HTML trªn trang Web cã thÓ ®îc viÕt ®Ó sai khiÕn server (hoÆc mét m¸y tÝnh ®· kÕt nèi) göi file tíi ngêi sö dông. Web browser cña ngêi sö dông sÏ b¾t hä ph¶i ®Ó dµnh file võa t¶i trªn æ cøng cña m¸y m×nh.

3. ¢m thanh vµ ho¹t c¶nh
Trong phÇn tríc b¹n ®· biÕt c¸ch dïng trang Web ®Ó t¶i ch¬ng tr×nh tõ mét server nµo ®ã. T¬ng tù nh vËy, ngêi sö dông còng cã thÓ t¶i file ©m thanh vµ phim ¶nh. Khi Web browser ph¸t hiÖn ra file ®îc t¶i xuèng lµ file ©m thanh hoÆc h×nh ¶nh, nã còng khiÕn ngêi sö dông lu file ®ã l¹i vµ më mét ch¬ng tr×nh cã thÓ ch¹y file ©m thanh hoÆc file phim ¶nh ®ã. Nh÷ng ch¬ng tr×nh nµy lµm viÖc víi nh÷ng kiÓu ®Æc biÖt cña d÷ liÖu ®îc t¶i xu«ng gäi lµ Helper Application. Ch¼ng h¹n, Media Player lµ mét ch¬ng tr×nh dµnh cho PC ch¹y trong Windows cho phÐp ngêi sö dông cã thÓ ch¬i mét sè lo¹i x¸c ®Þnh nh÷ng file ©m thanh vµ file ¶nh. NÕu ngêi sö dông t¹o cho Web browser cã thÓ lµm viÖc ®îc víi Media Player, nã sÏ tù ®éng thùc hiÖn nh÷ng file ®îc t¶i xuèng.

4. CGI
Râ rµng lµ HTML cã nhiÒu ®Æc trng cho phÐp b¹n cã thÓ thiÕt kÕ mét trang Web cã c¶ hai ®Æc ®iÓm lµ ®Ñp vµ nhiÒu chøc n¨ng. Nhng mét trang Web ®îc t¹o bëi HTML kh«ng ph¶i lµ mét ch¬ng tr×nh m¸y tÝnh. Mét ch¬ng tr×nh m¸y tÝnh ph¶i lµ mét tËp c¸c c©u lÖnh cho phÕp b¹n thùc hiÖn mét sè nhiÖm vô... c¸i hay cña lËp tr×nh lµ kh«ng h¹n chÕ vÒ lo¹i nhiÖm vô mµ ch¬ng tr×nh cã thÓ lµm. Mét ch¬ng tr×nh cã thÓ thùc hiÖn nh÷ng phÐp tÝnh phøc t¹p nh hiÓn thÞ cã thø tù c¸c ¶nh ®ång thêi víi ©m thanh vµ ®iÒu khiÓn rÊt nhiÒu nh÷ng nhiÖm vô phøc t¹p kh¸c. ChØ mét m×nh HTML b¹n kh«ng cã c¬ héi ®Ó thùc hiÖn nh÷ng nhiÖm vô lËp tr×nh qua trang Web. Cã mét c¸ch cã thÓ lµm gi¶m bít mét sè h¹n chÕ kh¶ n¨ng lËp tr×nh ®îc t¹o bëi HTML. §iÒu nµy ®îc hoµn thµnh víi Common Getway Interface hay CGI nguyªn b¶n. §Ó hiÓu ®îc nguyªn b¶n CGI, ta h·y xem mét trang Web cã bao gåm mét hép so¹n th¶o. Hép so¹n th¶o cho phÐp ngêi sö dông cã thÓ ®Þnh kiÓu v¨n b¶n trong khu vùc cña nã. Gi¶ sö r»ng trªn cïng trang ®ã cã mét nót mµ ngêi sö dông chÊp nhËn click sau khi ®Þnh kiÓu trong hép so¹n th¶o. ChuyÖn g× sÏ x¶y ra khi ngêi sö dông click vµo nót nµy? V¨n b¶n sÏ ®îc göi tíi server. Vµ server ®ã sÏ lµm g× víi v¨n b¶n nµy? Server sÏ thùc hiÖn mét ch¬ng tr×nh CGI vµ sÏ lµm ®iÒu g× ®ã ®èi víi nã. Ch¼ng h¹n, v¨n b¶n cã thÓ sÏ ®îc göi kiÓu th ®iÖn tö tíi ngêi së h÷u cña server... ®iÒu nµy cho phÕp ngêi sö dông cã thÓ göi nh÷ng c©u hái vµ nh÷ng lêi ®Ò nghÞ tíi vÞ trÝ trung t©m. Tuy nhiªn ch¬ng tr×nh CGI ph¶i thêng tró trong æ cøng cña Web server ®ã, v× vËy rÊt nhiÒu ch¬ng tr×nh mµ nã khëi ®éng ch¹y trong m¸y ®ã kh«ng ph¶i cña ngêi sö dông.

5. Nh÷ng h¹n chÕ cña HTML
Trang :

45

X©y dùng øng dông m¹ng víi ng«n ng÷ Java World wide Web trë lªn rÊt phæ biÕn ®Õn nçi mµ nh÷ng ®Æc trng cña nã vÜnh viÔn ®îc xem nh lµ c¸ch tèt nhÊt ®Ó t¹o ra mét trang Web cuèn hót, vµ thªm vµo nh÷ng ®Æc trng tiÕn bé cho HTML. HTML3.0 bao gåm nhiÒu nh÷ng ®Æc trng n©ng cao kh¶ n¨ng cña HTML. Tù nhiªn nh÷ng phÇn mÒm Web browser còng ph¶i ph¸t triÓn ®Ó theo kÞp sù biÕn ®æi nµy. Nhng thËm trÝ víi sù chØ râ cña HTML míi nµy, nh÷ng trang Web cã c¬ së lµ HTML rÊt h¹n chÕ khi ph¶i thùc hiÖn nhiÖm vô lËp tr×nh. Nãi mét c¸ch ng¾n gän, HTML kh«ng ph¶i lµ mét ng«n ng÷ lËp tr×nh; nã chØ lµ mét b¶n khiÕn Web browser hiÓn thÞ d÷ liÖu, nã gièng nh Post Script language lµ phÇn mÒm xö lý tõ dïng ®Ó ®Þnh d¹ng d÷ liÖu cho mµn h×nh vµ m¸y in.

6. Gi¶i ph¸p cña Java
Java lµ mét ng«n ng÷ lËp tr×nh do Suns Microsystem t¹o ra gióp b¹n n©ng cao kh¶ n¨ng lËp tr×nh cña HTMLkhi thiÕt kÕ trang Web. Gi¶ sö b¹n muèn thiÕt kÕ trang Web sö dông HTML nh sau: trang Web hiÓn thÞ mét nh©n vËt ho¹t h×nh. Khi ngêi sö dông click vµo bÊt cø n¬i nµo trong khu vùc cña trang th× nh©n vËt nµy sÏ di chuyÓn ®Õn n¬i võa click. Nãi c¸ch kh¸c khi ngêi sö dông click bªn trong cöa sæ th× sù thÓ hiÖn cña phim ho¹t h×nh ®îc thùc hiÖn. §Ó t¹o ra mét c¶nh phim ho¹t h×nh mét c¸ch sinh ®éng th× mét file ©m thanh ph¶i ®îc ch¬i khi nh©n vËt ®ã ®i tíi n¬i mµ chuét võa click. Giê ®©y, ta cã thÓ nhËn thøc râ nh÷ng ch¬ng tr×nh tríc ®©y kh«ng thÓ dÔ dµng dïng HTML. NÕu b¹n viÕt ch¬ng tr×nh víi Visual Basic hay Visual C++ hay bÊt kú mét ng«n ng÷ lËp tr×nh nµo kh¸c th× b¹n sÏ thÊy ch¬ng tr×nh ®îc viÕt t¬ng ®èi ®¬n gi¶n. Nhng víi HTML ®iÒu ®ã lµ kh«ng thÓ. Ngêi thiÕt kÕ HTML cã kinh nghiÖm cã thÓ sÏ nãi cho b¹n biÕt r»ng cöa sæ n¬i mµ trang ®ang ®îc hiÓn thÞ cã thÓ ®îc chia thµnh nhiÒu « nhá h¬n, mçi « cã mét bøc ¶nh víi siªu liªn kÕt cña nã. Khi ngêi sö dông click vµo mét vïng x¸c ®Þnh trong trang Web, server sÏ göi ra mét trang Web kh¸c mµ cã siªu liªn kÕt víi khu vùc ®ã, vµ hiÖn ra nh©n vËt ho¹t h×nh ë vÞ trÝ kh¸c víi vÞ trÝ tríc ®ã. Qu¸ tr×nh nµy cø tiÕp tôc, ngêi sö dông nhËn ®îc nh÷ng trang Web liªn tiÕp, ®a ra ¶o gi¸c r»ng nh©n vËt ho¹t h×nh chuyÓn ®éng tíi ®iÓm mµ con mouse võa ®îc click. VÒ ©m thanh th× sao? Chóng ta ®· xem xÐt ë phÇn ®Çu, khi mét file ©m thanh ®îc göi tíi PC cña ngêi sö dông, Web browser cho phÐp ngêi sö dông cã thÓ ®Ó dµnh file ©m thanh vµo æ cøng cña hä, hoÆc ch¹y lu«n. Mét lÇn n÷a, ngêi viÕt HTML vµ ngêi sö dông Web browser cã kinh nghiÖm sÏ nãi cho b¹n r»ng cã mét c¸ch ®Ó rót ra ®iÒu cÇn thiÕt cho hép héi tho¹i lµ ®a ra sù lùa chän thay v× Web browser cña ngêi sö dông ngay lËp tøc ph¶i thùc hiÖn ngay file ©m thanh. Trùc gi¸c cã thÓ ®· m¸ch b¶o b¹n r»ng, gi¶i ph¸p ®Çu tiªn lµ sai v× nã yªu cÇu server truyÒn ®Õn rÊt nhiÒu trang Web tíi PC cña ngêi sö dông, mét qu¸ t×nh tèn rÊt nhiÒu thêi gian vµ c«ng søc. C¶nh phim ho¹t h×nh sÏ kh«ng ®îc tr¬n tru, ngêi sö dông sÏ rÊt khã kh¨n ®Ó thÊy r»ng sù hiÓn thÞ
Trang :

46

X©y dùng øng dông m¹ng víi ng«n ng÷ Java c¶nh ho¹t h×nh lµ liªn tôc. Sù thËt, b¹n chØ cã thÓ thµnh c«ng ë mét ®iÓm lµ lµm phiÒn ngêi sö dông. Trong khi gi¶i ph¸p ®Çu tiªn ®ßi hái nhiÒu sù khÐo lÐo vµ rÊt nhiÒu trang Web, nhng kÕt qu¶ thùc hiÖn th× kh«ng ®îc nh mong ®îi. B»ng c¸ch sö dông Java, b¹n cã thÓ thùc hiÖn ch¬ng tr×nh mét c¸ch rÊt tho¶i m¸i vµ sÏ nhËn ®îc mét gi¶i ph¸p cã sù thÓ hiÖn tèt h¬n vµ nhng ®ßi hái vÒ thêi gian, bé nhí vµ sù kiªn nhÉn còng ®îc ®¸p øng tèt h¬n. Nãi gän l¹i lµ, ®ã lµ tÊt c¶ nh÷ng g× Java ®em l¹i: n©ng cao kh¶ n¨ng lËp tr×nh cña HTML ®Ó trang Web cã thÓ xö lý ®îc ch¬ng tr×nh. Lµm thÕ nµo cã thÓ kÕt hîp ch¬ng tr×nh Java vµo trang Web? §ã chØ lµ vÊn ®Ò sö dông m· (M· n»m trong HTML mµ ®Þnh nghÜa trang)®Ó chØ ra ch¬ng tr×nh Java ®îc xö lý. §iÒu cèt yÕu lµ, viÖc dïng Java kh«ng ®îc lùa chän c¸ch dïng HTML. ChØ m· <HR> lµ nguyªn nh©n ®Ó Web browser hiÓn thÞ ®êng n»m ngang, m· kh¸c sÏ xö lý ch¬ng tr×nh Java mµ b¹n võa viÕt. Cã nghÜa lµ m· <HR> chØ phôc vô mét môc ®Ých duy nhÊt: hiÓn thÞ ®êng n»m ngang. Mçi m· Java chØ cã thÓ nhËn biÕt vµ xö lý mét ch¬ng tr×nh Java. §Ó n©ng cao kh¶ n¨ng cña trang Web cña b¹n, tÊt c¶ nh÷ng ®iÒu b¹n ph¶i lµm lµ sö dông mét m· HTML phï hîp. T¬ng tù víi Java, ngo¹i trõ viÖc b¹n viÕt mét ch¬ng tr×nh Java chØ thùc hiÖn mét nhiÖm vô nµo ®ã. Thùc ra khi viÕt mét ch¬ng tr×nh Java, kh«ng nªn nghÜ vÒ Java nh chØ lµ mét ng«n ng÷ lËp tr×nh cã liªn quan ®Õn Internet. Java còng nh Visual C++, Visual Basic hay bÊt kú ng«n ng÷ lËp tr×nh nµo kh¸c. §iÓm m¹nh cña Java lµ b¹n cã thÓ thùc hiÖn mét ch¬ng tr×nh mµ viÕt trong nã nh÷ng m· HTML cña trang Web. H·y nhí r»ng ch¬ng tr×nh lµm chuyÓn ®éng nh©n vËt ho¹t h×nh tíi ®iÓm mµ ngêi sö dông click chuét? H·y liÕc qua mét chót, nã cã thÓ ph¸t ra ©m thanh nh mét ch¬ng tr×nh ngí ngÈn nhng h·y suy nghÜ vÒ nã! C¶nh chuyÓn ®éng lµ c¸ch tèt nhÊt ®Ó thu hót sù chó ý cña ngêi sö dông. Nh b¹n ®· biÕt viÖc sö dông trang Web ®Ó qu¶ng c¸o c¸c s¶n phÈm ®· trë nªn r¸t phæ biÕn. Víi HTML ngêi qu¶ng c¸o cã thÓ hiÓn thÞ nh÷ng bøc tranh cuèn hót. B»ng c¸ch thªm vµo c«ng nghÖ Java sù qu¶ng c¸o sÏ thu hót sù chó ý cña mäi ngêi h¬n vµ hÊp dÉn h¬n. Tuy nhiªn qu¶ng c¸o chØ lµ mét trong nh÷ng øng dông cña Java, Java cho phÐp b¹n viÕt ch¬ng tr×nh Internet nh nh÷ng ch¬ng tr×nh State-of-theart kh¸c, nh÷ng ch¬ng tr×nh ®Çy uy lùc trªn PC. B¹n cã thÓ viÕt ch¬ng tr×nh trß ch¬i, ch¬ng tr×nh d¹y häc, ch¬ng tr×nh tÝnh to¸n phøc t¹p... Nªn nhí r»ng, ®Æc ®iÓm cèt yÕu cña nh÷ng trang Web ®îc lËp trªn c¬ së HTML vÉn kh«ng thay ®æi. Tøc lµ b¹n vÉn cã thÓ dïng siªu v¨n b¶n ®Ó di chuyÓn ngêi sö dông tõ trang nµy tíi trang kh¸c. Vµ mçi trang Web cã thÓ bao gåm ch¬ng tr×nh Java cña riªng nã. Giê th× b¹n cã thÓ hiÓu t¹i sao rÊt nhiÒu ngêi mong ®îi Sun Microsystems ®a ra phiªn b¶n ph¸t triÓn cña Java.

7. Sù phô thuéc vµo platform
Sù thËt b¹n cã thÓ ng¹c nhiªn r»ng t¹i sao nh÷ng thø nh Java l¹i kh«ng ra ®êi sím h¬n. Ngêi ta ®ang ®Þnh xem xÐt n©ng cao HTML sau 3 phiªn
Trang :

47

X©y dùng øng dông m¹ng víi ng«n ng÷ Java b¶n b©y giê ®Ó lµm cho nã nh lµ mét ng«n ng÷ m« t¶ trang phøc t¹p h¬n. T¹i sao sù cè g¾ng cña hä kh«ng híng tíi viÖc thùc hiÖn mét ng«n ng÷ lËp tr×nh trong HTML? Dêng nh sù ph¸t triÓn cña c«ng nghÖ Internet ngµy nay vµ sù phæ biÕn cña Internet lµm cho viÖc ph¸t triÓn HTML sao cho cã thÓ lËp tr×nh ®îc lµ mét ®iÒu mong íc. Tuy nhiªn, viÖc kh¾c s©u mét ng«n ng÷ lËp tr×nh nh Java vµo trong HTML th× thùc sù kh«ng ph¶i lµ mét nhiÖm vô dÔ dµng. T¹i sao vËy? Bëi v× Web server ph¶i phôc vô nh÷ng ngêi sö dông mµ kh«ng dïng IBM PCs ch¹y Windows3.1x, Windows 95, Windows NT, OS/2, Unix, Apple Macintosh... Nãi c¸ch kh¸c, server ph¶i ®iÒu khiÓn nhiÒu lo¹i platform, v× vËy Java hay bÊt cø ng«n ng÷ lËp tr×nh nµo t¬ng tù ph¶i ®îc thiÕt kÕ theo c¸ch cã thÓ lµm viÖc ®îc víi bÊt kú lo¹i PC nµo. §©y qu¶ thùc lµ mét sù th¸ch thøc lín ®èi víi Sun.

Trang :

48

X©y dùng øng dông m¹ng víi ng«n ng÷ Java

PhÇn 3: x©y dùng øng dông m¹ng víi ng«n ng÷ Java
NÒn t¶ng ng«n ng÷ Java ®· thu hót ®îc sù quan t©m rÊt lín tríc ®©y bëi tÝnh t¬ng thÝch cña nã cho viÖc viÕt c¸c ch¬ng tr×nh sö dông vµ t¬ng t¸c víi c¸c nguån tµi nguyªn trªn Internet vµ World Wide Web. Thùc tÕ, c¸c tr×nh duyÖt cã hç trî Java sö dông rÊt nhiÒu nh÷ng kh¶ n¨ng nµy cña Java ®Ó truyÒn t¶i vµ thùc hiÖn c¸c applet trªn Internet. PhÇn nµy cña b¸o c¸o sÏ gióp b¹n cã nh÷ng kiÕn thøc nhÊt ®Þnh ®Ó cã thÓ viÕt ®îc c¸c øng dông hay c¸c applet vÉn sö dông trªn Internet.

I. C¸c kiÕn thøc c¬ së vÒ m¹ng m¸y tÝnh
C¸c m¸y tÝnh trªn m¹ng Internet liªn l¹c víi nhau hoÆc qua giao thøc ®iÒu khiÓn truyÒn (TCP - Transport Control Protocol) hoÆc giao thøc ®¬n vÞ d÷ liÖu ngêi dïng (UDP - User Datagram Protocol) nh h×nh vÏ sau

Application (HTTP, FTP, Telnet, …) Transport (TCP, UDP, …) Network (IP, …) Link (device driver, …)
Khi viÕt c¸c ch¬ng tr×nh Java ®Ó kÕt nèi trªn m¹ng, chóng ta sÏ lµm viÖc víi tÇng øng dông (Application). HÇu nh chóng ta kh«ng cÇn ph¶i quan t©m g× ®Õn tÇng TCP vµ UDP. Thay vµo ®ã, chóng ta cã thÓ dïng c¸c líp trong gãi java.net. Nh÷ng líp nµy cung cÊp cho ta hÖ thèng ®éc lËp m¹ng truyÒn th«ng. Tuy nhiªn, ®Ó cã thÓ quyÕt ®Þnh ®îc nªn sö dông líp nµo cña Java cho øng dông cña m×nh th× chóng ta còng cÇn ph¶i hiÓu râ ®îc sù kh¸c nhau gi÷a TCP vµ UDP.

1. Kh¸i niÖm TCP
Khi hai øng dông muèn kÕt nèi víi nhau mét c¸ch ch¾c ch¾n, chóng thiÕt lËp mét kÕt nèi vµ göi d÷ liÖu qua l¹i th«ng qua kÕt nèi ®ã. Nã t¬ng tù nh gäi ®iÖn tho¹i vËy. TCP ph¶i ®¶m b¶o viÖc göi d÷ liÖu tõ mét ®Çu cña kÕt nèi ®Õn ®îc ®Çu kia vµ theo ®óng tr×nh tù ®· göi ®i, nÕu kh«ng nã sÏ th«ng b¸o lçi.
Trang :

49

X©y dùng øng dông m¹ng víi ng«n ng÷ Java TCP cung cÊp mét kªnh truyÒn ®iÓm-tíi-®iÓm (point to point channel) cho øng dông cã yªu cÇu mét kÕt nèi tin cËy. Giao thøc truyÒn siªu v¨n b¶n (HTTP), giao thøc truyÒn file (FTP) vµ Telnet lµ tÊt c¶ c¸c vÝ dô vÒ c¸c øng dông cã yªu cÇu kªnh kÕt nèi tin cËy.
§Þnh nghÜa: TCP lµ mét giao thøc kÕt nèi cã liªn kÕt cung cÊp mét dßng d÷ liÖu tin cËy gi÷a hai m¸y tÝnh.

2. Kh¸i niÖm UDP
Giao thøc UDP kh«ng ph¶i lµ kÕt nèi cã liªn kÕt nh TCP, cung cÊp mét kÕt nèi kh«ng ®¶m b¶o gi÷a hai øng dông trªn m¹ng. Nã göi c¸c gãi d÷ liÖu ®éc lËp trªn m¹ng gäi lµ c¸c ®¬n vÞ d÷ liÖu (datagrams), tõ øng dông nµy ®Õn øng dông kh¸c. ViÖc göi d÷ liÖu thÕ nµy gièng nh viÖc göi th trªn dÞch vô bu ®iÖn vËy. Tr×nh tù ph©n phèi kh«ng quan träng vµ kh«ng ®îc ®¶m b¶o. C¸c th«ng ®iÖp göi ®i lµ ®éc lËp víi nhau.
§Þnh nghÜa: UDP lµ mét giao thøc göi c¸c gãi d÷ liÖu ®éc lËp nhau, gäi lµ ®¬n vÞ d÷ liÖu, tõ m¸y tÝnh nµy ®Õn m¸y tÝnh kh¸c mµ kh«ng ®¶m b¶o viÖc göi ®Õn ®Ých. UDP kh«ng ph¶i lµ kÕt nèi cã liªn kÕt nh TCP.

3. C¸c cæng (Ports)
Nãi chung, mçi m¸y tÝnh cã mét kÕt nèi vËt lý ®¬n ®Õn m¹ng m¸y tÝnh. TÊt c¶ c¸c d÷ liÖu ®· ®îc trï ®Þnh tõ tríc cho mçi m¸y tÝnh riªng biÖt ®îc göi ®Õn qua kÕt nèi ®ã. Tuy nhiªn d÷ liÖu cã thÓ ®îc trï ®Þnh ®Ó göi cho mét øng dông ®ang ch¹y nµo ®ã trong m¸y tÝnh. §Ó m¸y tÝnh cã thÓ chuyÓn tiÕp d÷ liÖu cho ®óng øng dông cÇn nhËn, nã dïng kh¸i niÖm cæng (port). D÷ liÖu göi trªn m¹ng Internet th× ®îc göi kÌm theo th«ng tin vÒ ®Þa chØ nh»m x¸c ®Þnh m¸y tÝnh vµ cæng cÇn göi ®Õn. Mçi m¸y tÝnh ®îc ®Þnh danh bëi ®Þa chØ IP 32-bit, cßn c¸c cæng ®îc ®Þnh danh bëi mét sè 16bit. Trong truyÒn th«ng cã liªn kÕt nh TCP, mét øng dông server nèi kÕt mét socket tíi mét ®Þa chØ cæng ®· chØ ®Þnh. ViÖc nµy sÏ ®îc ®¨ng ký vµo hÖ thèng ®Ó server cã thÓ nhËn ®îc mäi d÷ liÖu ®i ®Õn cæng ®ã. Mçi client cã thÓ kÕt nèi ®îc víi server qua ®Þa chØ cæng mµ server ®· ®¨ng ký. Trong truyÒn th«ng ®¬n vÞ d÷ liÖu nh UDP, c¸c gãi ®¬n vÞ d÷ liÖu sÏ bao gåm ®Þa chØ cæng vµ UDP híng gãi tin ®Õn øng dông cÇn nhËn.
§Þnh nghÜa: c¸c giao thøc TCP vµ UDP sö dông c¸c cæng ®Ó xÕp d÷ liÖu vµo ®Õn mçi tiÕn tr×nh ®ang thùc thi trong m¸y tÝnh.

§Þa chØ cæng n»m trong ph¹m vi tõ 0 ®Õn 65535, nhng trong ph¹m vi tõ 0 ®Õn 1023 th× bÞ h¹n chÕ. Chóng dïng ®Ó dù tr÷ cho c¸c dÞch vô næi tiÕng nh HTTP, FTP vµ c¸c dÞch vô kh¸c cña hÖ thèng. øng dông cña ta kh«ng nªn cè thö nèi kÕt tíi chóng.

Trang :

50

X©y dùng øng dông m¹ng víi ng«n ng÷ Java

4. C¸c líp thiÕt kÕ cho m¹ng cña Java
Th«ng qua c¸c líp trong gãi java.net, ch¬ng tr×nh Java cã thÓ sö dông giao thøc TCP hoÆc UDP ®Ó kÕt nèi trªn Internet. C¸c líp: URL, URLConnection, Socket vµ ServerSocket phôc vô cho kÕt nèi b»ng giao thøc TCP, cßn c¸c líp DatagramPacket, DatagramSocket vµ MulticastSocket lµ dïng víi giao thøc UDP.

II. Lµm viÖc víi c¸c URL 1. Kh¸i niÖm URL
URL lµ ch÷ viÕt t¾t cña Uniform Resource Locator, nã tham chiÕu (b»ng ®i¹ chØ) tíi mét nguån trªn Internet. TÊt c¶ c¸c URL ®Òu cã hai thµnh phÇn chÝnh: • • Tõ ®Þnh danh giao thøc Tªn tµi nguyªn (resource)

Tõ ®Þnh danh giao thøc vµ tªn tµi nguyªn ®îc ph©n c¸ch bëi dÊu hai chÊm (Ę:ę) vµ hai dÊu g¹ch chÐo (Ę// ę). Mét vµi tõ ®Þnh danh giao thøc hay dïng lµ HTTP, FTP, Gopher, File vµ New. Tªn tµi nguyªn lµ ®Þa chØ ®Çy ®ñ cña tµi nguyªn. Khu«n d¹ng nã tuú thuéc hoµn toµn vµo giao thøc ®îc sö dông. Tuy nhiªn, víi nhiÒu giao thøc, kÓ c¶ giao thøc HTTP, tªn tµi nguyªn sÏ gåm mét hoÆc mét vµi thµnh phÇn liÖt kª nh b¶ng díi ®©y
Thµnh phÇn Host Name FileName Port Number Reference ý nghÜa Tªn m¸y chøa tµi nguyªn §êng dÉn ®Õn file trong m¸y §Þa chØ cæng ®Ó kÕt nèi Mét tªn tham chiÕu ®Õn tõ viÕt t¾t chØ ®Þnh trong tµi nguyªn mµ nã thêng ®ång nhÊt víi vÞ trÝ ®Þnh ra trong file

Víi ®a sè c¸c giao thøc, Host Name vµ FileName lµ b¾t buéc.

2. T¹o mét URL
C¸ch ®¬n gi¶n nhÊt ®Ó t¹o mét ®èi tîng URL lµ tõ mét chuçi (String) ®¹i diÖn cho ®Þa chØ URL theo d¹ng cã thÓ ®äc ®îc. VÝ dô URL cho trang chñ cña khoa CNTT trêng §H B¸ch Khoa ®îc viÕt theo d¹ng nh sau:
http://www .fit.hut.edu.vn/

Trong ch¬ng tr×nh Java, ta sö dông chuçi chøa ®Þa chØ nµy ®Ó t¹o ®èi tîng URL
URLkhoaCNTT =newURL(“http://www .fit.hut.edu.vn/”);

a) T¹o mét URL relative
Trang :

51

X©y dùng øng dông m¹ng víi ng«n ng÷ Java Mét relative URL chøa th«ng tin võa ®ñ ®Ó t×m kiÕm tµi nguyªn liªn quan ®Õn URL kh¸c. §Ó t¹o mét URL relative, ta dïng hµm dùng
URL(URL baseURL,String relativeURL);

Ch¼ng h¹n trong site cña khoa CNTT cã hai ®Þa chØ häc tËp ng«n ng÷ Java vµ C
http://www .fit.hut.edu.vn/learningC.htm http://www .fit.hut.edu.vn/learningJava.htm

Ta khai b¸o nh sau:
URLkhoaCNTT =newURL(“http://www .fit.hut.edu.vn/”); URLkhoaCNTT_C= newURL(khoaCNTT ,“learningC.htm”); URLkhoaCNTT_Java =newURL(khoaCNTT,“learningJava.htm”);

b) Nh÷ng hµm dùng URL kh¸c
Líp URL cung cÊp thªm hai hµm dùng cho viÖc t¹o ®èi tîng URL. Hai hµm dùng nµy rÊt h÷u Ých khi lµm viÖc víi c¸c URL mµ cã c¸c thµnh phÇn tªn tµi nguyªn hay ®Þa chØ cæng riªng biÖt. VÝ dô: LÖnh
newURL(“http”,“/www .fit.hut.edu.vn”,“learning_C.htm”);

t¬ng ®¬ng víi
newURL(“http://www .fit.hut.edu.vn/learning_C.htm”);

HoÆc lÖnh
newURL(“http”,“/www .fit.hut.edu.vn”,80,“learning_C.htm”);

t¬ng ®¬ng víi
newURL(“http://www .fit.hut.edu.vn:80/learning_C.htm”);

Víi hai hµm dùng nµy, chóng ta cã thÓ lÊy ®îc ®Þa chØ ®Çy ®ñ cña URL b»ng c¸ch dïng ph¬ng thøc cña ®èi tîng URL: toString hoÆc toExternalForm.

3. Ph©n tÝch mét URL
Líp URL cung cÊp mét vµi ph¬ng thøc cho phÐp ta truy vÊn tíi ®èi tîng URL. Ta cã thÓ lÊy ®îc giao thøc, tªn m¸y, ®Þa chØ cæng, tªn file tõ ®èi tîng URL b»ng c¸ch dïng c¸c ph¬ng thøc truy nhËp sau:
Tªn ph¬ng thøc getProtocol getHost getPort getFile getRef ý nghÜa Tr¶ vÒ tõ ®Þnh danh giao thøc dïng víi URL Tr¶ vÒ tªn m¸y cña URL Tr¶ vÒ mét sè nguyªn lµ ®Þa chØ cæng cña URL. NÕu cæng kh«ng thiÕt lËp, getPort tr¶ vÒ gi¸ trÞ –1 Tr¶ vÒ tªn file cña URL Tr¶ vÒ thµnh phÇn tham chiÕu cña URL

4. §äc trùc tiÕp tõ mét URL
Trang :

52

X©y dùng øng dông m¹ng víi ng«n ng÷ Java Sau khi t¹o thµnh c«ng mét ®èi tîng URL, chóng ta cã thÓ gäi ph¬ng thøc openStream cña nã ®Ó lÊy d÷ liÖu cña URL. Ph¬ng thøc openStream tr¶ vÒ mét ®èi tîng java.io.InputStream. VÝ dô:
importjava.net.*; importjava.io.*; public classURLReader { public staticvoidmain(String[]args) throwsException { URLvnn =newURL(“http://home.vnn.vn”); BufferedReaderin =newBufferedReader( newInputStreamReader( vnn.openStream())); StringinputLine; while (((inputLine = in.readLine())!=null) System.out.println(inputLine); in.Close(); } }

5. KÕt nèi tíi URL
Sau khi t¹o thµnh c«ng mét ®èi tîng URL, chóng ta cã thÓ gäi ph¬ng thøc openConnection cña ®èi tîng URL ®Ó kÕt nèi ®Õn nã. Khi kÕt nèi tíi URL, ®ã lµ ta ®ang khëi t¹o liªn kÕt truyÒn th«ng gi÷a øng dông Java cña ta víi URL trªn m¹ng. VÝ dô ®Ó kÕt nèi víi site cña VNN, ta cã ®o¹n m· sau:
try{ URLvnn =newURL(“http://home.vnn.vn”); URLConnection =vnn.openConnection(); }catch (MalformedURLException e){//newURLfailed ... }catch (IOException e){//openConnection failed ... }

6. §äc vµ ghi víi ®èi tîng URLConnection
a) §äc tõ URLConnection
T¬ng tù nh ®äc tõ URL nhng ta ph¶i cã lêi gäi kÕt nèi tíi URL (openConnection) vµ sau ®ã míi lÊy d÷ liÖu tõ URL qua ph¬ng thøc getInputStream. VÝ dô nh sau:
importjava.net.*; importjava.io.*; public classURLConnectionReader{ { public staticvoidmain(String[]args) throwsException { URLvnn =newURL(“http://home.vnn.vn”); URLConnection vnn_c =vnn.openConnection();
Trang :

53

X©y dùng øng dông m¹ng víi ng«n ng÷ Java
BufferedReaderin =newBufferedReader( newInputStreamReader( vnn_c.getInputStream())); StringinputLine; while (((inputLine = in.readLine())!=null) System.out.println(inputLine); in.Close(); } }

b) Ghi ra URLConnection
RÊt nhiÒu cgi-bin script sö dông ph¬ng thøc POST METHOD ®Ó ®äc d÷ liÖu tõ phÝa client, do ®ã viÖc ghi ra URL thêng ®îc gäi lµ posting tíi URL. C¸c script cña server sö dông POST METHOD ®Ó ®äc tõ ®Çu vµo chuÈn cña chóng. Mét ch¬ng tr×nh Java còng cã thÓ t¬ng t¸c víi cgi-bin script trªn server ®Ó cung cÊp d÷ liÖu cho server. Tr×nh tù c¸c bíc nh sau: • • • • • • T¹o mét URL Më mét kÕt nèi tíi URL ThiÕt lËp kh¶ n¨ng output trªn URLConnection LÊy dßng d÷ liÖu ®a ra tõ kÕt nèi. D÷ liÖu ra nµy kÕt nèi tíi ®Çu vµo chuÈn cña cgi-bin script trªn server Ghi ra output stream §ãng output stream

III. Tæng quan vÒ Sockets 1. Kh¸i niÖm Socket
Socket lµ mét ®iÓm cuèi cña kÕt nèi truyÒn th«ng hai ®êng gi÷a hai ch¬ng tr×nh ®ang ch¹y trªn m¹ng. Mçi socket ®îc bao bëi mét ®Þa chØ cæng ®Ó tÇng TCP cã thÓ x¸c ®Þnh ®îc øng dông mµ d÷ liÖu ®Þnh göi ®Õn. Gãi java.net cã cung cÊp mét líp Socket nh»m thiÕt lËp ®¬n ph¬ng mét kÕt nèi hai chiÒu gi÷a ch¬ng tr×nh Java cña b¹n víi mét øng dông ®ang ch¹y trªn m¹ng. H¬n n÷a, gãi java.net cßn cung cÊp thªm mét líp ServerSocket phôc vô cho viÖc thiÕt lËp mét socket mµ server cã thÓ dïng ®Ó nghe vµ chÊp nhËn c¸c kÕt nèi tíi phÝa client.

2. §äc vµ ghi tíi mét Socket
§Ó mét ch¬ng tr×nh cã thÓ thiÕt lËp mét kÕt nèi tíi ch¬ng tr×nh server sö dông líp Socket vµ råi ®Ó client cã thÓ göi vµ nhËn d÷ liÖu tõ phÝa server th«ng qua soket, cÇn thùc hiÖn nh÷ng bíc c¬ b¶n sau: • • • Më mét socket Më mét dßng vµo vµ dßng ra cho socket §äc vµ ghi d÷ liÖu tuú thuéc vµo giao thøc cña server
Trang :

54

X©y dùng øng dông m¹ng víi ng«n ng÷ Java • §ãng Socket §Ó hç trî nhiÒu cliet kÕt nèi tíi server, ta t¹o luång cho mçi client.

3. VÝ dô
§©y lµ ch¬ng tr×nh chat ®¬n gi¶n m« t¶ sù trao ®æi gi÷a client vµ server hç trî nhiÒu client (vÝ dô nµy lÊy tõ cuèn JavaTM Tutorial trong phÇn Custom Networking). Ch¬ng tr×nh phÝa server: KKMultiServerThread
importjava.net.*; importjava.io.*; public classKKMultiServerThreadextendsThread{ private Socketsocket=null; public KKMultiServerThread(Socketsocket){ super("KKMultiServerThread"); this.socket= socket; } public voidrun(){ try{ PrintWriter out=newPrintWriter(socket.getOutputStream(),true); BufferedReaderin =newBufferedReader( newInputStreamReader( socket.getInputStream())); StringinputLine,outputLine; KnockKnockProtocol kkp=newKnockKnockProtocol(); outputLine =kkp.processInput(null); out.println(outputLine); while ((inputLine =in.readLine())!=null){ outputLine =kkp.processInput(inputLine); out.println(outputLine); if(outputLine.equals("Bye")) break; } out.close(); in.close(); socket.close(); }catch (IOException e){ e.printStackT race(); } } }

Ch¬ng tr×nh phÝa client: KnockKnockClient
importjava.io.*; importjava.net.*; public classKnockKnockClient{
Trang :

55

X©y dùng øng dông m¹ng víi ng«n ng÷ Java
public staticvoidmain(String[]args) throwsIOException { SocketkkSocket =null; PrintWriter out=null; BufferedReaderin =null; try{ kkSocket= newSocket("taranis",4444); out=newPrintWriter(kkSocket.getOutputStream(),true); in =newBufferedReader(newInputStreamReader(kkSocket.getInputStream())); }catch (UnknownHostException e){ System.err .println("Don't know abouthost: taranis."); System.exit(1); }catch (IOException e){ System.err .println("Couldn'tgetI/O forthe connection to: taranis."); System.exit(1); } BufferedReaderstdIn = newBufferedReader(newInputStreamReader(System.in)); StringfromServer; StringfromUser; while ((fromServer=in.readLine())!= null){ System.out.println("Server: "+fromServer); if(fromServer .equals("Bye.")) break; fromUser =stdIn.readLine(); if(fromUser!=null){ System.out.println("Client:" +fromUser); out.println(fromUser); } } out.close(); in.close(); stdIn.close(); kkSocket.close(); } }

III. Tæng quan vÒ ®¬n vÞ d÷ liÖu (DataGrams) 1. Kh¸i niÖm ®¬n vÞ d÷ liÖu (datagram)
§¬n vÞ d÷ liÖu lµ mét th«ng ®iÖp ®éc lËp, ®îc göi ®i trªn m¹ng mµ n¬i ®Õn, thêi gian ®Õn còng nh néi dung cña th«ng ®iÖp lµ kh«ng ®îc ®¶m b¶o. Gãi java.net cã hai líp ®Ó gióp b¹n viÕt c¸c ch¬ng tr×nh Java mµ sö dông c¸c ®¬n vÞ d÷ liÖu ®Ó göi vµ nhËn c¸c gãi trªn m¹ng: DatagramSocket, DatagramPacket vµ MulticastSocket. Mçi øng dông cã thÓ göi vµ nhËn c¸c DatagramPacket qua mét DatagramSocket. H¬n n÷a, c¸c DatagramPacket
Trang :

56

X©y dùng øng dông m¹ng víi ng«n ng÷ Java cã thÓ ®îc qu¶ng b¸ tíi nhiÒu n¬i nhËn mµ nã ®ang Ęl¾ng ngheę MulticastSocket.

2. Datagram client vµ server
Ta h·y gi¶ sö r»ng ta ®ang x©y dùng hai øng dông: mét client vµ mét server. Server sÏ liªn tôc nhËn c¸c gãi ®¬n vÞ d÷ liÖu qua Datagram socket. Mçi gãi ®¬n vÞ d÷ liÖu nhËn ®îc chØ ra yªu cÇu th«ng tin cña client. Khi server nhËn ®îc mét ®¬n vÞ d÷ liÖu, nã ®¸p l¹i b»ng c¸ch göi mét gãi ®¬n vÞ d÷ liÖu chøa th«ng tin nh phÝa client ®· yªu cÇu. Client cã nhiÖm vô göi gãi ®¬n vÞ d÷ liÖu ®¬n lÎ ®Õn server cho server biÕt nã cÇn nhËn th«ng tin g×, sau ®ã nã sÏ ®îi phÝa server göi th«ng tin tr¶ lêi.

a) PhÝa server
PhÝa Server sÏ t¹o ra m¶ng buffer ®Ó chøa d÷ liÖu nhËn ®îc tõ client göi ®Õn
byte[]buf=newbyte[256]; DatagramPacketpacket= newDatagramPacket(buf,buf .length); socket.receive(packet);

Server sau khi nhËn ®îc yªu cÇu, nã sÏ lÊy th«ng tin tõ file, ®a vµo buf vµ tiÕn hµnh göi cho client. Ph¬ng thøc run göi tr¶ lêi ®Õn client qua DatagramSocket
InetAddress address=packet.getAddress(); intport =packet.getPort(); packet=newDatagramPacket(buf,buf .length,address, port); socket.send(packet);

Sau khi göi xong, server ®ãng socket l¹i, kÕt thóc qu¸ tr×nh göi tr¶ th«ng tin
socket.close();

b) PhÝa client
PhÇn ®Çu cña hµm main cña Client chøa m« t¶ vµi biÕn
intport; InetAddress address; DatagramSocketsocket=null; DatagramPacketpacket; byte[]sendBuf=newbyte[256];

TiÕp theo sÏ lµ hµm t¹o DatagramSocket
DatagramSocketsocket=newDatagramSocket();

Sau ®ã lµ göi yªu cÇu ®Õn server
byte[]buf=newbyte[256]; InetAddress address=InetAddress.getByName(args[0]); DatagramPacketpacket= newDatagramPacket(buf,buf .length,address, 4445); socket.send(packet);

Cuèi cïng lµ hiÓn thÞ th«ng tin nhËn ®îc tõ server
packet=newDatagramPacket(buf,buf .length); socket.receive(packet);
Trang :

57

X©y dùng øng dông m¹ng víi ng«n ng÷ Java
Stringreceived=newString(packet.getData()); System.out.println("Info:" +received);

3. Qu¶ng b¸ tíi nhiÒu n¬i nhËn
§Ó bæ xung cho líp DatagramSocket cã thÓ göi c¸c gãi tin ®Õn nhiÒu n¬i kh¸c, gãi java.net cã thªm líp MulticastSocket sö dông bªn phÝa client nh»m ®îi c¸c gãi tin mµ server qu¶ng b¸ tíi. Nh vËy, phÝa server ph¶i sö dông líp Thread ®Ó hç trî ®a luång. Lóc nµy, ngêi ta dïng InetAddress vµ port ®îc göi tõ phÝa c¸c client ®Õn server ®Ó dùng DatagramPacket. Lý do nµy lµ ®Ó server cÇn tr¶ lêi trùc tiÕp ®Õn c¸c client.
InetAddress group = InetAddress.getByName( "230.0.0.1"); DatagramPacketpacket; packet=newDatagramPacket(buf,buf .length, group, 4446); socket.send(packet);

Theo c¸ch t¹o nµy, DatagramPacket sÏ ®îc göi ®Õn mäi client ®ang nghe theo cæng 4446, nh÷ng client lµ thµnh viªn cña nhãm "230.0.0.1". §Ó nghe ®îc cæng 4446, mçi client míi chØ cÇn t¹o MulticastSocket cña nã víi cæng 4446. Vµ ®Ó trë thµnh thµnh viªn cña nhãm "230.0.0.1", client gäi ph¬ng thøc joinGroup cña MulticastSocket víi InetAddress x¸c ®Þnh nhãm.
MulticastSocket socket = new MulticastSocket(4446); InetAddress group = InetAddress.getByName("230.0.0.1"); socket.joinGroup(group); DatagramPacketpacket; for(int i=0;i <5;i++){ byte[]buf=newbyte[256]; packet=newDatagramPacket(buf,buf .length); socket.receive(packet); Stringreceived=newString(packet.getData()); System.out.println("Quote ofthe Moment:" +received); } socket.leaveGroup(group); socket.close();

Víi nh÷ng kiÕn thøc c¬ së nh vËy, chóng ta ®· cã thÓ b¾t tay vµo viÕt hoµn chØnh ®îc mét øng dông clietnt/server trªn m¹ng m¸y tÝnh.

Trang :

58

X©y dùng øng dông m¹ng víi ng«n ng÷ Java

Tµi liÖu tham kh¶o
1. Core Java - Gary Cornell & Cay S.Horstmann - SunSoft Press, 1996 2. The Java Language Specification - James Gosling, Bill Joy & Guy Steele - Edition 1.0, August 1996 3. Java Devoloper's Reference - Mike Cohn, Bryan Morgan, Michael Morrison, Michael T. Nygard, Dan Joshi & Tom Trinko Sams.net Publishing , 1996 4. Programming Internet with Java - Darrel Ince & Adam Freemar - Addison Wesley Longman INC, 1998
5. The JavaTM Tutorial, Second Edition - Mary Campione & Kathy

Walrath - Addison Wesley Longman INC, 1999

Trang :

59

Sign up to vote on this title
UsefulNot useful