Professional Documents
Culture Documents
mng Java, C
Li m u
Lp trnh mng l mt trong nhng nhim v cn bn pht trin cc ng dng
doanh nghip. Mt chng trnh mng c vit ra cc chng trnh trn cc my
tnh khc nhau c th truyn tin vi nhau mt cch hiu qu v an ton cho d chng
c ci t trn mng LAN, WAN hay mng ton cu Internet, y l iu cn bn i
vi s thnh cng ca nhiu h thng.
Java l ngn ng lp trnh hng i tng thun ty vi nhiu c trng u vit
so vi cc ngn ng lp trnh hng i tng khc nh tnh c lp vi nn, tnh bo
mt,Java l ngn ng ngay t khi ra i hng n lp trnh mng nn vic vit mt
chng trnh lp trnh mng bng Java d dng hn nhiu so vi cc ngn ng khc.
Gio trnh ny bao gm 10 chng:
Chng 1: Gii thiu nhng khi nim cn bn v mng my tnh ngi c c
th tip cn vi cc chng tip theo. Trong chng ny chng ta s i vo xem xt
mng vt l, phn cng c s dng trong cc mng LAN. Tip theo chng ta s tm
hiu m hnh phn tng OSI by tng, v s tng ng ca h giao thc TCP/IP vi cc
tng trong m hnh OSI. Sau chng ta s i vo tm hiu cc giao thc mng, giao
thc Internet, v giao thc e-mail.
Chng 2: Gii thiu ngn ng lp trnh Java. Chng ny trnh by cc khi nim
cn bn v ngn ng lp trnh Java. Gii thiu lch s pht trin v cu trc ca my o
Java. Nhng c trng to nn sc mnh ca ngn ng Java cng c gii thiu
trong chng ny. Cng trong chng ny chng ta s i vo tm hiu cch cu hnh v
ci t mi trng bin dch, chy v son tho ngn ng Java. Tip n ta s i vo tm
hiu cc thnh phn c bn ca Java nh kiu d liu, cu trc lnh tun t r nhnh,
lp, v nhy. Tip theo chng ta s i vo tm hiu cc khi nim lin quan n lp trnh
hng i tng trong Java nh lp, phng thc, thuc tnh, cc t kha b tr nh
static, final, abstract, tha k v tnh a hnh trong Java. Mt trong nhng khi nim mi
m cc ngn ng truyn thng trc y khng c l ngoi l v n bt ngoi l trong
Java cng c gii thiu.
Chng 3: Cc lung vo ra. Chng ny gii thiu khi nim vo ra bng cc
lung d liu. Trc tin ta s tm hiu v cc lung v ngha ca lung trong chng
trnh Java. Tip n chng ta s ln lt tm hiu cc lung vo ra chun trong gi lm
vic vi console. Cc lung tru tng java.io.InputStream, java.io.OutputStream l cc
lung c bn t xy dng nn cc lung c th. Lung c chia thnh cc nhm
nh lung byte v lung k t. T phin bn Java 1.4 mt c trng vo ra mi trong
Java c a vo cng c gii thiu trong chng ny. Vic nm vng kin thc
chng ny cng gip cho vic lp trnh ng dng mng tr nn n gin hn v thc
cht ca vic truyn v nhn d liu gia cc ng dng mng l vic c v ghi cc
lung.
Chng 4: Lp trnh a tuyn on. Trong cc ngn ng lp trnh trc y cc
ng dng hu ht l cc ng dng n tuyn on. tng tc x l v gii quyt vn
tng tranh ca cc ng dng ni chung v ng dng mng ni ring ta cn s dng
khi nim a tuyn on. Phn u ca chng ny trnh by cc khi nim cn bn v
tin trnh, tuyn on. Tip n chng ta s xem xt cc cch ci t mt ng dng tuyn
on trong Java bng lp Thread v thc thi giao tip Runnable. Sau ta s i vo tm
hiu cc phng thc ca lp Thread. S ng b ha v cch ci t mt chng trnh
ng b ha cng c gii thiu trong chng ny.
Chng 5: Lp trnh mng vi cc lp InetAddress, URL v URLConnection. Lp
InetAddress l lp cn bn u tin trong lp trnh mng m ta cn tm hiu. N ch ra
cch mt chng trnh Java tng tc vi h thng tn min. Tip n ta s i vo tm
hiu cc khi nim v URI, URL,URN v lp biu din URL trong Java. Cch s dng
URL ti v thng tin v tp tin t cc server. Sau ta i vo tm hiu lp
URLConnection, lp ny ng vai tr nh mt ng c cho lp URL.
Su tm bi: www.daihoc.com.vn
Chng 6: Lp trnh Socket cho giao thc TCP. Trong chng ny chng ta s tm
hiu cch lp trnh cho m hnh client/server v cc kiu kin trc client/server. Cc lp
Socket v ServerSocket c trnh by chi tit trong chng ny lp cc chng trnh
cho giao thc TCP.
Chng 7: Lp trnh ng dng cho giao thc UDP. Chng ny gii thiu giao
thc UDP v cc c trng ca giao thc ny. Tip n ta i vo tm hiu cc lp
DatagramPacket v DatagramSocket vit cc chng trnh ng dng mng cho giao
thc UDP.
Chng 8: Tun t ha i tng v ng dng trong lp trnh mng. Trnh by cc
vn v tun t ha v ng dng ca tun t ha trong lp trnh mng.
Chng 9: Phn tn i tng bng Java RMI. Chng ny tm hiu ch v lp
trnh phn tn i tng bng k thut gi phng thc RMI (Remote Method
Invocation).
Chng 10:X l c s d liu trong Java. Trnh by cch thc kt ni cc c s
d liu v x l c s d liu bng Java thng qua giao din lp trnh ng dng JDBC.
Tm hiu v lp trnh mng tt nht l trn cc h thng mng thc s vi nhiu
my tnh c kt ni vt l. Tuy nhin trong gio trnh ny hu ht cc v d c trnh
by bn c c th lp trnh v th nghim cc ng dng mng trn cc my n.
Mc d ht sc c gng trnh by gio trnh mt cch d hiu vi cc v d
minh ha gip bn c c th th nghim ngay sau khi tm hiu cc vn l thuyt,
nhng chc chn gio trnh ny khng th trnh khi nhng thiu st nht nh. Rt mong
s gp v ph bnh ca cc bn c gi. Mi thc mc v gp cc bn c th gi v
theo a ch e-mail sau:lequocdinh@vnn.vn hoc hoan_td2001@yahoo.com
hon thnh gio trnh ny cc tc gi nhn c s gip rt nhiu t
bn b, ng nghip v nhng ngi thn.
Xin chn thnh cm n ti tt c mi ngi.
Nhm tc gi
Su tm bi: www.daihoc.com.vn
MC LC
Li m u
Chng 1:Cc khi nim cn bn v mng v giao thc .............................................. 1
1. Mng my tnh .................................................................................................... 1
1.1. Cc ng WAN ............................................................................. 1
1.2 .Giao thc Ethernet .......................................................................... 2
1.3. Cc thnh phn vt l...................................................................... 3
2. M hnh phn tng.............................................................................................. 6
2.1. Tng 1:Tng vt l........................................................................... 7
2.2. Tng 2: Tng lin kt d liu ........................................................... 7
2.3. Tng 3: Tng mng ......................................................................... 7
2.4. Tng 4:Tng giao vn ..................................................................... 7
2.5. Tng 5: Tng phin ...........................................................................
2.6. Tng 6:Tng trnh din .................................................................... 7
2.7. Tng 7:Tng ng dng.................................................................... 7
3. Cc giao thc mng ............................................................................................ 8
3.1. Cc giao thc c bn ...................................................................... 8
3.2. Cc giao thc Internet ................................................................... 14
4. Soket ................................................................................................................. 17
5. Dch v tn min .............................................................................................. 17
5.1. Cc server tn min ...................................................................... 18
5.2. Nslookup ....................................................................................... 19
6. Internet v Extranet .......................................................................................... 20
6.1. Intranet v Extranet20
6.2. Firewall.......................................................................................... 20
6.3. Proxy Server ................................................................................. 20
Chng 2 : Gii thiu ngn ng lp trnh Java ........................................................... 21
1. Gii thiu cng ngh Java ................................................................................ 21
1.1. Lch s pht trin........................................................................... 21
1.2. Cu trc ca my o Java Java Virtual Machine ........................ 21
1.3. Cc c trng ca Java ................................................................ 21
1.4. Cc n bn Java ........................................................................... 22
1.5. Cng c pht trin ......................................................................... 23
1.6. Cc kiu ng dng trong Java....................................................... 23
1.7. Ci t chng trnh dch Java v cc cng c ............................. 23
1.8. Mt s v d m u ..................................................................... 25
2. Ngn ng lp trnh Java .................................................................................... 27
2.1. Cu trc tp ca mt chng trnh Java ....................................... 27
2.2. nh danh, kiu d liu v khai bo bin ....................................... 28
2.3. Cc kiu d liu nguyn thy (primitive datatype) ......................... 28
2.4. Khai bo cc bin .......................................................................... 30
2.5. Cc lnh trong Java ...................................................................... 31
2.6 Cc lp v cc i tng trong Java.............................................. 36
2.7. Giao tip Interface ...................................................................... 48
2.8. Cc gi v s dng gi trong Java ................................................ 50
2.9. Qun l ngoi l ............................................................................ 52
I
Su tm bi: www.daihoc.com.vn
II
Su tm bi: www.daihoc.com.vn
III
Su tm bi: www.daihoc.com.vn
IV
Su tm bi: www.daihoc.com.vn
Chng 1
Mng WAN (Wide Area Network): nhiu mng LAN kt ni vi nhau to thnh
mng WAN.
Hnh trng mng: L cch ni cc my tnh vi nhau. Ngi ta phn loi mng
theo hnh trng mng nh mng sao, mng bus, mng ring
Su tm bi: www.daihoc.com.vn
Tc
10Mbps
10Mbps
Kiu cp
Cp ng trc
Cp ng
100BaseTX
100Mbs
Cp ng
1000BaseSX
1000Mbps
Cp a ch
M t
y l chun ban u cho Ethernet
10BaseT l mt mng 10Mbps vi cp
xon.
100Mbps cng ngh cp xon v kh
nng truyn song cng
1000Mbps vi cp si quang. S :Short
wavelength (850nm)
Bng 1.1
CSMA/CD (Carrier Sense Multiple Access/Collision Detect).
Su tm bi: www.daihoc.com.vn
IBM pht trin giao thc Token Ring (IEEE802.5), trong cc nt mng c
kt ni theo mt vng. Vi Ethernet, bt k mt nt no cng c th gi mt thng ip
khi khng c gi tin no trn mng. Vi Token Ring mi nt c mt quyn truy xut ti
mng theo mt th t nh trc. Mt token lu chuyn vng quanh vng, v ch nt lnh
no c th bi mi c th gi thng ip. Ngy nay, Ethernet ang thay th dn cc
mng Token Ring bi v cc mng ny tn km v kh ci t.
AppleTalk l mt giao thc mng LAN c pht trin bi Apple tng i ph
bin trong cc trng hc, cc nh my,...
ATM l mt giao thc khc c th tm thy trong mng LAN. N h tr cc mng
tc cao s dng k thut chuyn mch v c m bo cht lng dch v.
1.3. Cc thnh phn vt l
Mt vn quan trng bit v mng l bit v phn cng. Chng ta s xem xt
cc thnh phn ch yu ca mt mng LAN sau:
Hub
Switch
Router
Hnh 1.1
Su tm bi: www.daihoc.com.vn
Hub
Switch
Router
Su tm bi: www.daihoc.com.vn
Vn tm ng i
Hnh 1.2
Mt lnh hu ch khc l lnh TRACERT. Lnh ny cho php chng ta kim tra
ng i c s dng i ti ch.
Hnh 1.3
Su tm bi: www.daihoc.com.vn
Hnh 1.4
Tng ng dng (Application): nh ngha mt giao din lp trnh giao tip vi mng
cho cc ng dng ngi dng.
Tng mng (Network): cho php truy xut ti cc nt trong mng LAN bng cch
s dng a ch logic
Su tm bi: www.daihoc.com.vn
Vi truyn tin hng lin kt, mt lin kt phi c thit lp trc khi cc thng
ip c gi hoc c nhn.
Su tm bi: www.daihoc.com.vn
Cc giao thc c bn
Trng
IP Version
(Phin bn IP)
di
4 bits
M t
Phin bn IP. ( Phin bn giao thc hin nay l
IPv4)
IP Header Length
(Chiu di Header)
Type of Service
(Kiu dch v)
4 bits
Chiu di ca header.
1 byte
Total Length
(Tng chiu di)
2 bytes
Su tm bi: www.daihoc.com.vn
Identification
(nh danh)
2 bytes
Flags
3 bits
Fragment Offset
13 bits
Time to Live
1 byte
Protocol
1 byte
Header Checksum
2 bytes
Source Address
Destination Address
Options
Padding
4 bytes
4 bytes
variable
variabe
Bng 1.2
Cc a ch IP
Lp
Byte 1
A
Networks (1-126)
B
Networks (128191)
C
Networks (192223)
Byte 2
Byte 3
Host (0-255)
Host (0-255)
Networks (0-255) Host (0-255)
Byte 4
Host (0-255)
Host (0-255)
Su tm bi: www.daihoc.com.vn
Cc a ch IP ring
Lp
A
B
C
Khong a ch ring
10
172.16-172.31
192.168.0-192.168.255
Bng 1.4
Cc subnet
10
Su tm bi: www.daihoc.com.vn
Hnh 1.5
3.1.4. TCP (Transmission Control Protocol)
Giao thc TCP l giao thc truyn tin hng lin kt c th s dng truyn tin vi
tin cy cao. Trong giao thc tng 4 c th gi cc xc thc rng nhn d liu
v yu cu truyn li d liu nu cha nhn c d liu hoc d liu b hng.
Cc trng header c lit k trong bng sau:
Trng
Cng ngun (source
port)
Cng ch
(destination port)
S th t (Sequence
Number)
Acknowledge
Number
Data offset
Reserved
Control
Window Size
di
2
bytes
2
bytes
4
bytes
M t
S hiu cng ca ngun
S hiu cng ch
S th t c to ra bi ngun v c s dng
bi ch sp xp li cc gi tin to ra thng
ip ban u, v gi xc thc ti ngun.
4
bytes
4
Cc chi tit v ni d liu gi tin bt u
bits
6 bit D phng
2
Su tm bi: www.daihoc.com.vn
Checksum
Urgent Pointer
Options
Padding
Bng 1.5
Giao thc TCP l mt giao thc phc tp v mt thi gian do c ch bt tay,
nhng giao thc ny m bo cc gi tin n ng ch.
Mt s giao thc ng dng s dng TCP nh HTTP, FTP, SMTP, v Telnet. TCP
yu cu mt lin kt phi c thit lp trc khi d liu c gi i. ng dng server
phi thc hin mt thao tc m th ng to mt lin kt vi mt s hiu cng cho
trc.
3.1.5. UDP-User Datagram Protocol
Ngc vi giao thc TCP, UDP l mt giao thc c tc truyn tin nhanh v n
ch xc nh c ch ti thiu truyn d liu. Tt nhin iu ny c mt s nhc im.
Cc thng ip c th c nhn theo bt k th t no. Thng ip c gi u tin
c th c nhn sau cng. Khng c g m bo l cc gi tin s n ch, v cc thng
ip c th b tht lc, hoc thm ch c th nhn c hai bn sao ca cng mt thng
ip.
UDP khng cn giai on thit lp lin kt, d liu c gi i ngay khi cn. UDP
khng gi cc thng ip xc thc, v vy d liu c th nhn c hoc b tht lc. Nu
cn truyn d liu c tin cy n phi c thc hin trong mt giao thc mc cao
hn.
Vy u l u im ca giao thc UDP, ti sao chng ta li cn s dng mt giao
thc c tin cy thp nh vy? hiu c l do ti sao ta li phi s dng giao thc
UDP ta cn phn bit gia truyn unicast, broadcast v multicast.
Mt thng ip unicast c gi t nt ny ti nt khc. Kiu truyn tin l truyn
tin im-im. Giao thc TCP ch h tr truyn tin unicast. Nu mt server mun truyn
tin vi nhiu client bng cch s dng giao thc UDP, mi client phi thit lp mt lin
kt, v cc thng ip ch c th gi ti mt nt. Truyn tin broadcast ngha l mt thng
ip c th c gi ti tt c cc nt trong mt mng. Multicast cho php cc thng ip
c truyn ti mt nhm cc nt c la chn.
UDP c th c s dng cho truyn tin unicast nu cn ti tc truyn tin
nhanh, nh truyn tin a phng tin, nhng u im chnh ca UDP l truyn tin
broadcast v truyn tin multicast. Thng thng chng ta khng mun tt c cc nt gi
v cc xc thc cho server v nh vy s lm cho server qu ti.
Header UDP ngn v n gin hn rt nhiu so vi TCP
Destination Port
Length
di
(Cng 2 byte
2 byte
2 byte
M t
Xc nh cng ngun l mt ty chn vi
UDP. Nu trng ny c s dng, pha
nhn thng ip c th gi mt phc p ti
cng ny
S hiu cng ch
Chiu di ca thng ip bao gm header v
12
Su tm bi: www.daihoc.com.vn
Checksum
2 byte
d liu
kim tra tnh ng n
Bng 1.5
3.1.6. ICMP-Internet Control Message Protocol
ICMP l mt giao thc c pht trin t giao thc IP, im khc bit ca ICMP so
vi giao thc IP l cc thng tin phn hi v trng thi ca h thng c ICMP phn hi
bi cc thng ip.
Cc li c pht hin c th c thng bo bng cc thng ip ICMP. Cc
thng ip ICMP c s dng gi cc thng tin phn hi v tnh trng ca mng. V
d, mt router gi thng ip ICMP destination unreachable nu khng tm thy mt
im vo cho mng trong bng nh tuyn. Mt router cng c th gi thng ip ICMP
redirect nu tm thy ng i tt hn.
ICMP khng c trn giao thc IP m c gi i trong cc header IP.
di
1 byte
Code
1 byte
Checksum
2 byte
4 byte
M t
Trng ny xc nh kiu thng ip ICMP. V d,
type c gi tr 3 ngha l khng n c ch, 11
ngha l qu thi gian, v 12 ngha l cc tham s
header khng ng
Code cung cp thng tin v kiu thng ip. Nu kiu
type l 3, destination unreachable, th code xc nh
l mng (0), host (1), hay protocol (2), hoc port (3)
l khng th n c
Checksum ca thng ip ICMP
Bn byte cui cng ca header ICMP c th cung cp
thng tin b tr ty thuc vo kiu thng ip
Bng 1.6
Mt s kiu c th c gi bng cch s dng cc thng ip ICMP:
Lnh Ping
13
Su tm bi: www.daihoc.com.vn
Hnh 1.6
3.1.7. IGMP-Internet Group Management Protocol
Tng t vi ICMP, IGMP l s m rng ca giao thc IP v phi c ci t
trong module IP. IGMP c s dng bi cc ng dng multicast. Khi gi cc thng ip
broadcast ti mt LAN, mi nt trong LAN phn tch thng ip v gi ln cho tng giao
vn kim tra xem c ng dng no mun nhn cc thng ip t cng broadcast. Nu
khng ng dng no lng nghe, thng ip b ph hy v khng vt qua c tng giao
vn. iu ny ngha l mi host cn mt s chu k ca CPU cho d thng ip broadcast
c cn hay khng.
Multicast gii quyt vn ny, bng cch gi cc thng ip ti mt nhm cc nt
ch khng phi l tt c cc nt trong LAN. Thit b giao tip mng c th pht hin xem
h thng c cn quan tm n thng ip hay khng bng cch phn tch a ch
broadcast m khng cn s tr gip ca CPU.
3.2. Cc giao thc Internet
3.2.1. Giao thc truyn tp tin FTP (File Transfer Protocol)
FTP c s dng ti cc tp ln server, v ti v cc tp t server. N l mt
giao thc mc ng dng, da trn nn tng ca giao thc TCP. ng dng client cung
cp mt giao din ngi dng v to ra mt yu cu FTP tng ng vi yu cu ca
ngi dng cng vi c t ca FTP. Lnh FTP c gi ti ng dng server thng qua
giao thc TCP/IP, trnh thng dch trn FTP phi thng dch lnh FTP tng ng. Ty
thuc vo lnh FTP, mt danh sch cc tp hoc mt tp t h thng tp ca server
c tr v cho client trong p ng ca FTP.
Giao thc FTP c cc c trng sau:
Cho php truy xut v danh hoc xc thc ngi dng vi username v password
14
Su tm bi: www.daihoc.com.vn
Sao chp cc tp tin t server (RETR), sao chp cc tp tin ln server (STOR), xa
cc tp (DELE), thay i cc tn tp tin (RNTO), to cc th mc (MKD), v yu cu lit
k mt danh sch cc tp.
FTP Client
Cch tt nht lm quen vi giao thc FTP l bng cch s dng tin ch ftp nh
di y. Chng trnh ftp hot ng thng qua du nhc lnh ftp> cho php chng ta
nhp vo cc lnh. Cc lnh ny khc vi cc lnh ca giao thc FTP-ta c th thy
c chng bng cch nhp vo ?. Di y, ta s nhp vo lnh open ftp.microsoft.com
to ra mt lin kt ti host ftp.microsoft.com. Nhp vo username l anonymous. p
ng 230 ch ra lin kt c thit lp.
Hnh 1.7
15
Su tm bi: www.daihoc.com.vn
Hnh 1.8
3.2.2. HTTP-Giao thc truyn siu vn bn (Hypertext Transfer Protocol)
HTTP l mt giao thc c s dng bi cc ng dng web. HTTP l mt giao
thc c tin cy cao, c ci t da trn nn giao thc TCP. Tng t nh FTP,
HTTP cng c s dng truyn cc tp tin qua mng. Tuy nhin, khng ging vi
FTP, n c cc c trng nh m d liu, nh danh cc ng dng client, h tr cho cc
nh dng km theo khc, nh MIME,Nhng c trng ny c trong header HTTP.
3.2.3. HTTPS-HTTP over SSL (Secure Socket Layer)
Nu c yu cu trao i d liu mt vi mt webserver, ngi ta s dng giao thc
HTTPS. HTTPS l mt s m rng ca giao thc HTTP v cc nguyn tc c tho
lun mc trc vn c p dng y. Tuy nhin c ch th hon ton khc, HTTPS
s dng lp Socket bo mt SSL(Secure Socket Layer) c pht trin bi Netscape.
SSL tng trn ca giao thc TCP v bo mt thng tin c truyntrn mng bng
cch s dng nguyn tc m ha cng khai.
3.3. Cc giao thc E-mail
C mt s giao thc s dng cho e-mail ph bin nh sau
e-mail gia client v server s dng cng giao thc giao vn, hoc gi e-mail gia cc
server s dng cc giao thc giao vn khc nhau. SMTP c kh nng chuyn tip cc
thng ip thng qua cc mi trng dch v giao vn. SMTP khng cho php chng ta
c cc thng ip t mt mail server.
16
Su tm bi: www.daihoc.com.vn
Ging nh POP3, IMAP c thit k truy xut ti cc mail trn mt mail server.
Tng t nh cc client POP3, mt client IMAP c th c ch offline. Khng ging
nh cc client POP3, cc client IMAP c cc kh nng ln hn trn ch online, nh
tm kim cc header, cc on mail, tm kim cc thng ip c th trn cc server, v
thit lp cc c nh c tr li. V cn bn, IMAP cho php cc client lm vic trn cc
hp th xa nh l cc hp th cc b.
NNTP l giao thc tng ng dng gi, chuyn tip, v tm kim cc thng ip
to nn mt phn ca cc cuc tho lun nhm tin. Giao thc ny cung cp kh nng truy
cp ti mt server tin tc tm kim cc thng ip c chn lc v h tr cho vic truyn
thng ip t server ti server.
3.4. Mt s giao thc ng dng khc
C hai giao thc ng dng th v khc l: SNMP v Telnet
SNMP (Simple Network Management Protocol) cho php qun l cc thit b trn
mng. C cc thng tin nh cc bin m hiu nng t cc thit b SNMP qun l cc
thit b mt cch hiu qu bng cch s dng cc bo chung bo hiu c kch hot
bi cc vn v hiu nng v li, v cho php cu hnh cc thit b.
Mt tc t SNMP c gn vi mt thit b mng c th s c mt c s d liu
MIB (Management Information Base) bao gm tt c cc thng tin c th kim sot v
thit b theo phng php hng i tng. Mt client SNMP truy xut thng tin trong
c s d liu bng cch gi cc yu cu GET. Ngc li, yu cu SET c s dng
cu hnh c s d liu MIB.
Trong nhng trng hp c li hoc c cc vn v hiu nng, tc t SNMP gi
cc thng ip ti SNMP client.
4. Soket
Socket l mt phng php thit lp kt ni truyn thng gia mt chng trnh
yu cu dch v v mt chng trnh cung cp dch v trn mng LAN, WAN, hay Internet
v i khi l gia cc tin trnh trong cng mt my tnh. Thng tin ca mt Socket bao
gm a ch IP v s hiu cng.
5. Dch v tn min
Cc a ch IP vit di dng 4 nhm bit khng d nh mt cht no, v vy c
ngi ta a ra mt h thng tng ng d nh hn i vi ngi s dng. Do
cc tn min ny l duy nht, nn h thng tn min c s dng h tr h thng
tn c phn cp
Nh ta bit, tin thn ca mng Internet l mng Arpanet ca B quc phng
M. Thi k s my tnh mc lit k chng trong mt tp tin vn bn v lu
trn tng my kt ni vo mng. Thng tin trong tp tin ny bao gm a ch IP v
hostname. Tuy nhin do quy m ca mng ngy cng m rng ngi ta cn c cc my
tnh chuyn dng lu tr v phn gii tn min. Cc my tnh c chc nng nh vy
c gi l My ch DNS. V d www.microsoft.com, www.bbc.co.uk. Cc tn ny khng
bt buc phi c ba phn, nhng vic c bt u t phi sang tri, tn bt u vi min
mc cao. Cc min mc cao l cc tn nc c th hoc tn cc t chc v c nh
ngha bi t chc IANA. Cc tn min cp cao c lit k trong bng sau. Trong nhng
nm gn y, mt s tn min cp cao mi c a vo.
Tn min
M t
.aero
.biz
Doanh nghip
.com
Cc t chc thng mi
17
Su tm bi: www.daihoc.com.vn
.coop
Cc quan h hp tc
.info
.museum
Cc vin bo tng
.name
Cc tn c nhn
Bng 1.7
Tn min
M t
.net
Cc mng
.org
.pro
Cc chuyn gia
.gov
Chnh ph Hoa K
.edu
Cc t chc gio dc
.mil
Qun i M
.int
M t
.at
Autralia
.de
Germany
.fr
France
.uk
United Kingdom
.vn
Vietnam
Bng 1.9
18
Su tm bi: www.daihoc.com.vn
Hnh 1.9
C ch truy tm a ch IP thng qua dch v DNS
Gi s trnh duyt cn tm tp tin hay trang Web ca mt my ch no , khi
c ch truy tm a ch s din ra nh sau:
1. Trnh duyt yu cu h iu hnh trn client chuyn hostname thnh a ch IP.
2. Client truy tm xem hostname c c nh x trong tp tin localhost, hosts hay
khng?
-Nu c client chuyn i hostname thnh a ch IP v gi v cho trnh duyt.
-Nu khng client s tm cch lin lc vi my ch DNS.
3. Nu tm thy a ch IP ca hostname my ch DNS s gi a ch IP cho client.
4. Client gi a ch IP cho trnh duyt.
5. Trnh duyt s dng a ch IP lin lc vi Server.
6. Qu trnh kt ni thnh cng. My ch gi thng tin cho client.
6. Internet
Trong chng ny chng ta cp ti nhiu cng ngh c s: phn cng, cc giao
thc, v cc h thng tn min. Trong phn ny chng ta s tho lun cc vn th v
khc nh:
Intranet v Extranet
Cc dch v Web
19
Su tm bi: www.daihoc.com.vn
khng phc v cho vic truy xut chung, v mt s d liu cn phi c bo v khi
nhng truy xut t bn ngoi.
Mt extranet l mt mng ring ging nh intranet nhng cc extranet kt ni nhiu
Intranet thuc cng mt cng ty hoc cc cng ty i tc thng qua Internet bng cch s
dng mt tunnel. Vic to ra mt mng ring o trn Internet tit kim chi ph nhiu cho
cng ty so vi vic thu ring mt ng truyn thit lp mng.
6.2. Firewall
C nhng k ph hoi trn mng Internet!. ngn chn chng, ngi ta thng
thit lp cc im truy cp ti mt mng cc b v kim tra tt c cc lung truyn tin vo
v ra khi im truy nhp . Phn cng v phn mm gia mng Internet v mng cc
b, kim tra tt c d liu vo v ra, c gi l firewall.
Firewall n gin nht l mt b lc gi tin kim tra tng gi tin vo v ra khi
mng, v s dng mt tp hp cc quy tc kim tra xem lung truyn tin c c
php vo ra khi mng hay khng. K thut lc gi tin thng da trn cc a ch mng
v cc s hiu cng.
6.3. Proxy Server
Khi nim proxy c lin quan n firewall. Nu mt mt firewall ngn chn cc host
trn mng lin kt trc tip vi th gii bn ngoi. Mt my b ngn kt ni vi th gii
bn ngoi bi mt firewall s yu cu truy xut ti mt trang web t mt proxy server cc
b, thay v yu cu mt trang web trc tip t web server xa. Proxy server sau s
yu cu trang web t mt web server, v sau chuyn kt qu tr li cho bn yu cu
ban u. Cc proxies cng c s dng cho FTP v cc dch v khc. Mt trong nhng
u im bo mt ca vic s dng proxy server l cc host bn ngoi ch nhn thy proxy
server. Chng khng bit c cc tn v cc a ch IP ca cc my bn trong, v vy
kh c th t nhp vo cc h thng bn trong.
Trong khi cc firewall hot ng tng giao vn v tng internet, cc proxy server
hot ng tng ng dng. Mt proxy server c nhng hiu bit chi tit v mt s giao
thc mc ng dng, nh HTTP v FTP. Cc gi tin i qua proxy server c th c kim
tra m bo rng chng cha cc d liu thch hp cho kiu gi tin. V d, cc gi tin
FTP cha cc d liu ca dch v telnet s b loi b.
V tt c cc truy nhp ti Internet c chuyn hng thng qua proxy server, v
th vic truy xut c th c kim sot cht ch. V d, mt cng ty c th chn gii
php phong ta vic truy xut ti www.playboy.com nhng cho php truy xut ti
www.microsoft.com
20
Su tm bi: www.daihoc.com.vn
Chng 2
Trnh thc thi (Execution Unit): s thc hin cc lnh c quy nh trong tng
bytecode.
1
Su tm bi: www.daihoc.com.vn
2
Su tm bi: www.daihoc.com.vn
Khi pht trin ng dng da trn cng ngh Java th s c rt nhiu cng c pht trin
v dch v c cung cp min ph.
1.4. Cc n bn Java
java: B thng dch thc thi cc ng dng Java trc tip t tp tin lp.
thy c s khc bit gia hai kiu ng dng ni trn chng ta c th xem nhng
s khc bit v c trng ca hai kiu ng dng bng di y:
ng dng c lp
Java Applet
Khai bo
Giao din ha
Ty chn
Yu cu b nh
B nh ti thiu
D liu vo
3
Su tm bi: www.daihoc.com.vn
dng lnh
Kiu ng dng
ng dng trn cc my ch
Server. Cng c pht trin phn
mm, - ng dng trn cc my
khch
Bng 2.1
Cc th vin
4
Su tm bi: www.daihoc.com.vn
Hnh 2.1
Nhy vo nt lnh New nhp vo thng tin v bin mi trng
Hnh 2.2
Sau nhy chut vo nt lnh OK hon thnh
Thit lp bin mi trng classpath cng tin hnh tng t
5
Su tm bi: www.daihoc.com.vn
Hnh 2.3
Bc 3:
Ci t chng trnh son tho Edit Plus.
Bc 4:
To lp cc cng c bin dch v thc thi chng trnh trong Edit Plus. Giao din
ca chng trnh son tho nh sau:
1.8. Mt s v d m u
V d 1: To chng trnh Java cho php nhp mt dng k t t i dng lnh v hin
th xu k t ln trn mn hnh:
class ViDu1
{
public static void main(String[] args)
{
System.out.println(args[0]);
}
}
Bin dch chng trnh
C:\>javac ViDu1.java
Thc hin chng trnh
C:\>java ViDu1 "Lam quen voi ngon ngu lap trinh Java"
Kt qu in ra l:
Lam quen voi ngon ngu lap trinh Java
Chng trnh trn ta nhn thy ngay y l mt chng trnh ng dng c lp n
gin. Chng trnh thc hin mt tc v ht sc n gin l nhn mt xu k t c
truyn vo t i dng lnh sau in xu k t ln mn hnh. i dng lnh l mt
mng xu k t String[] args. Khi ta thc thi chng trnh trn, args[0] c gn bng
xu k t "Lam quen voi ngon ngu lap trinh Java".
V d 2: To mt applet hin th mt xu k t ln mn hnh
import java.applet.*;
import java.awt.*;
6
Su tm bi: www.daihoc.com.vn
7
Su tm bi: www.daihoc.com.vn
Hnh 2.4
8
Su tm bi: www.daihoc.com.vn
Lu :
Qui c t tn
9
Su tm bi: www.daihoc.com.vn
Hnh 2.6
Kiu nguyn: char (k t), byte, short, int, long.
rng
16
8
16
32
64
32
64
Bng 2.2
Ch :
Cc gi tr kiu nguyn thy khng phi l i tng.
10
Su tm bi: www.daihoc.com.vn
Kiu d liu
char
byte
short
int
long
float
double
Lp gi
Char
Byte
Short
Integer
Long
Float
Double
Bng 2.3
V d:
URL u ;
HocSinh hs = new HocSinh(Tuan Anh);
b. Khai bo bin
kieu_du_lieu bien;
V d:
int i;
char b,c;
float giaBan, dienTich;
c. Khi to gi tr cho cc bin
Cc gi tr mc nh cho cc bin thnh phn
Kiu d liu
boolean
char
byte, short, int, long
float, double
tham chiu i tng
Gi tr mc nh
false
\u000
0
+0.0F,+0.0D
null
Bng 2.4
11
Su tm bi: www.daihoc.com.vn
byte
short
int
long
float
double
char
V d 1:M rng kiu
char c = A;
int k =c;
V d 2:Thu hp kiu
int k =10;
char c=(char)k;
2.3. Cc lnh trong Java
Mt lnh c th thay i trng thi ca my tnh: gi tr ca cc bin, cc phn t ca
mng, ni dung ca cc tp tin,
2.3.1. Lnh biu thc
Mt lnh biu thc l lnh c dng:
<Biu thc>;
N c x l bng cch nh gi biu thc m khng cn lu li gi tr tnh ton.
2.3.2. Khi lnh
Khi lnh trong Java tng t nh khi lnh trong C/C++, l nhng lnh nm trong cp
ngoc m { v ng }.
Mt khi lnh l mt dy khng hoc nhiu lnh hoc cc khai bo bin hoc khai bo
lp theo bt k th t no c t trong cp ngoc {}
{
S1;
S2;
Sn;
}
Lnh gn
V d
int a, b, c,d;
d=b*b-4*a*c;
12
Su tm bi: www.daihoc.com.vn
for(i=0;i<args.length;i++)
{
a[i]=Integer.parseInt(args[i]);
System.out.print(a[i]+" ");
}
13
Su tm bi: www.daihoc.com.vn
System.out.println();
for(i=0;i<a.length-1;i++)
for(j=i+1;j<a.length;j++)
if(a[i]>a[j])
{
tg=a[i];
a[i]=a[j];
a[j]=tg;
}
System.out.println("Day so sau khi sap xep la:");
for(i=0;i<args.length;i++) System.out.print(a[i]+" ");
}
}
Bin dch chng trnh
C:\>javac SapXep.java
Thc hin chng trnh
C:\>java SapXep -2 3 1 4 -5 6 -10
-2 3 1 4 -5 6 -10
Day so sau khi sap xep la:
-10 -5 -2 1 3 4 6
Lnh switch
Lnh ny cho php r nhnh theo nhiu nhnh tuyn chn da trn cc gi tr nguyn
ca biu thc.
C php:
switch(<biu_thc_nguyn>)
{
case nhan_1:<cu_lnh_1>;
case nhan_2:<cu_lnh_2>;
case nhan_3:<cu_lnh_3>;
...
case nhan_n:<cu_lnh_n>;
default:<cu_lnh>;
}
2.3.5. Lnh lp
Lnh lp cho php mt khi cc cu lnh thc hin mt s ln lp li.
14
Su tm bi: www.daihoc.com.vn
Lnh while
Lnh do while
C php
do
{
//Cc lnh
}
while(<iu_kin>);
Ch :
Thn chu trnh c thc hin t nht mt ln
Lnh for
C php
for(<Biu_thc_bt_u>; <iu_kin_lp>; <Biu_thc_gia_tng>)
<Thn_chu_trnh>
15
Su tm bi: www.daihoc.com.vn
{
<Biu_thc_bt_u>;
while(<iu_kin_lp>)
{
<lnh>;
<Biu_thc_gia_tng>;
}
Lnh lp v hn:
Vng lp v hn while:
while(true){
}
2.3.6. Cc cu lnh nhy
Java h tr ba lnh nhy: break, continue, v return. Cc lnh ny truyn iu khin
sang phn khc ca chng trnh.
Lnh break: c dng kt thc trnh t thc hin lnh trong lnh switch
hoc c s dng thot ra khi mt vng lp.
class BreakDemo
{
public static void main(String[] args)
{
for(int i=0;i<20;i++){
if(i==10)break;
System.out.println("i="+i);
}
}
}
Chng trnh ny in ra kt qu l:
i=0
i=1
16
Su tm bi: www.daihoc.com.vn
i=2
i=3
i=4
i=5
i=6
i=7
i=8
i=9
Nh chng ta c th thy, vng lp for c thit k chy vi cc gi tr t 0 n 9,
lnh break lm cho vng lp kt thc sm khi i bng 10.
Lnh break c th c s dng trong bt k vng lp Java no, bao gm c vng lp
v hn
Lnh continue
17
Su tm bi: www.daihoc.com.vn
i=9
Ta thy rng chng trnh khng in ra gi tr i=5 v khi kim tra iu kin chng trnh
b qua gi tr i=5 v thc hin lnh vi gi tr I cn li ca vng lp.
Lnh return
Lp c sn (built-in).
18
Su tm bi: www.daihoc.com.vn
Trong
<Kiu tr v> c th l kiu nguyn thy, kiu lp hoc khng c gi tr tr li (kiu void)
<Danh sch tham bin hnh thc> bao gm dy cc tham bin (kiu v tn) phn cch
vi nhau bi du phy.
Cc kiu phm vi hay kim sot truy cp
Constructor
Constructor l mt phng thc c bit khng c gi tr tr v v c tn trng
vi tn lp. Trng hp khng c constructor no c a ra trnh bin dch cung cp
constructor mc nh cho lp .
Mt i tng c to mi v c cho trc mt gi tr khi u. Cc trng
c th c khi to bng mt gi tr khi chng c khai bo, iu ny m bo
mt trng thi khi u ng n.
Cc phng thc
Cc phng thc ca mt lp thng cha m c th hiu v thao tc mt
trng thi ca i tng. Mt s lp c cc trng public ngi lp trnh c th thao
tc trc tip, nhng trong hu ht cc trng hp iu ny khng phi l mt tng
tt.
public class Point
19
Su tm bi: www.daihoc.com.vn
{
protected double x,y;
public Point(double x,double y)
{
this.x=x;
this.y=y;
}
public void move(double dx, double dy)
{
x=x+dx;
y=y+dy;
}
public void print()
{
System.out.println("x="+x+", y="+y);
}
public static void main(String[] args)
{
Point p=new Point(3.0,6.0);
System.out.println("Thong tin ve toa do diem ban dau:");
p.print();
p.move(-1.5,2.0);
System.out.println("Thong tin ve toa do diem sau khi tinh tien theo vec
to:");
p.print();
}
}
C:\>java Point
Thong tin ve toa do diem ban dau:
x=3.0, y=6.0
Thong tin ve toa do diem sau khi tinh tien theo vec to:
x=1.5, y=8.0
Tham chiu this
Thng thng, i tng nhn phng thc cn phi bit tham chiu ca n.
20
Su tm bi: www.daihoc.com.vn
21
Su tm bi: www.daihoc.com.vn
System.out.print(" z="+z);
}
public static void main(String[] args)
{
Point3C p=new Point3C(3.0,4.5,5.0);
System.out.println("Toa do ban dau:");
p.print();
System.out.println();
p.move(-1.0,0.5,-1.0);
System.out.println("Toa do sau khi tinh tien:");
p.print();
System.out.println();
}
}
T kha super
22
Su tm bi: www.daihoc.com.vn
Thng thng, trong mt ngn ng lp trnh thng c hai cch truyn tham bin cho
mt th tc: truyn theo tham tr v truyn theo tham chiu.
Phng thc s sao chp gi tr ca mt tham bin vo tham bin hnh thc ca th
tc. V vy, nhng thay i i vi tham s th tc s khng nh hng ti tham s
thc s.
class CallByValue
{
}
C:\MyJava>javac CallByValue.java
C:\MyJava>java CallByValue
Gia tri a va b truoc khi goi phuong thuc:10 30
Gia tri a va b truoc sau goi phuong thuc:10 30
Tt c cc tham s i vi cc phng thc Java l gi theo tr. Ngha l, cc gi tr
ca cc bin tham s trong mt phng thc l cc bn sao ca cc gi tr do ngi gi
xc nh.
V d:
class TruyenThamTri
{
public static void main(String[] args)
{
double one =1.0;
System.out.println("Truoc khi goi ham:one="+one);
23
Su tm bi: www.daihoc.com.vn
chia(one);
System.out.println("Sau loi goi ham chia:one ="+one);
}
public static void chia(double x)
{
x/=2.0;
System.out.println("Sau khi chia:x="+x);
}
}
C:\MyJava\Baitap>java TruyenThamTri
Truoc khi goi ham:one=1.0
Sau khi chia:x=0.5
Sau loi goi ham chia:one =1.0
Truyn theo tham chiu
Mt tham chiu ti tham bin c truyn cho tham s. Bn trong th tc, tham chiu
ny c s dng truy xut ti tham s thc s c xc nh trong li gi. iu
ny ngha l nhng thay i i vi tham bin s nh hng ti tham s c s
dng gi phng thc.
Mng trong Java c xem l i tng. Cc phn t ca mng c th c kiu nguyn
thy hoc kiu tham chiu (kiu lp)
V d: Lc ra phn t ln nht ca mt mng v a v cui mng.
C:\MyJava\Baitap>java Loc
814325
143258
V trong Java cc li gi hm u thc hin theo tham tr (call by value) vi kiu nguyn
t v tham chiu i vi kiu lp nn hm doiCho() thay i c cc phn t ca day.
Tham bin hnh thc c th c khai bo vi t kha final ng trc. Tham bin final
l tham bin khng c khi to gi tr cho n khi n c gn mt tr no v khi
c gn tr th khng th thay i gi tr c.
V d
class BienFinal
{
public static void main(String[] args)
{
24
Su tm bi: www.daihoc.com.vn
giaBan=20;
25
Su tm bi: www.daihoc.com.vn
Cc phng thc np chng l mt dng ca tnh a hnh thi gian bin dch.
V d
class TinhToan
{
public static void main(String[] args)
{
Tinh c = new Tinh();
c.add(10,20);
c.add(40.0f,35.65f);
c.add("Good ","Morning");
}
}
class Tinh
{
public void add(int a, int b)
{
int c = a+b;
System.out.println("Phep cong hai so nguyen :"+c);
}
public void add(float a, float b)
{
float c = a+b;
System.out.println("Phep cong hai so dau phay dong :"+c);
}
public void add(String a, String b)
{
String c = a+b;
System.out.println("Phep cong hai xau :"+c);
}
};
26
Su tm bi: www.daihoc.com.vn
Kt qu:
C:\MyJava\Baitap>java TinhToan
Phep cong hai so nguyen :30
Phep cong hai so dau phay dong :75.65
Phep cong hai xau :Good Morning
Gii thch: Trong chng trnh trn phng thc add() l phng thc c np chng.
C ba phng thc c cng tn add() nhng c cc tham s khc nhau. Khi chng ta
gi phng thc add()????
2.4.5. Cc thnh phn static
i khi cc thnh phn static ta cn phi nh ngha cc thnh phn lp c s dng
c lp vi bt k i tng no ca lp. Thng thng mt thnh phn ca lp phi
c truy xut thng qua i tng ca lp. Tuy nhin, ta c th c th to ra mt
thnh phn m c s dng c lp. to ra mt thnh phn nh vy trc khai
bo ca mi thnh phn ta t mt t kha static. Khi mt thnh phn c khai bo
static, n c th c truy xut trc khi mt i tng c to ra v khng cn tham
chiu ti bt k i tng no. Cc thnh phn static bao gm: bin static, phng thc
static, khi static.
Bin static
27
Su tm bi: www.daihoc.com.vn
V d
class StaticMethod
{
public static void main(){
System.out.println("Hello");
}
public static void main(String[] args)
{
main();
System.out.println("Hello World!");
}
}
Trong v d ny ta thy khai bo hai phng thc main u l phng thc tnh.
Phng thc main ny gi ti phng thc main khc.
Khi static
28
Su tm bi: www.daihoc.com.vn
}
static {
System.out.println("Khoi static 2");
}
}
V khi static lun c x l trc nn kt qu in ra ca chng trnh trn s l:
Khoi static 1
Hello World!
Khoi static 2
29
Su tm bi: www.daihoc.com.vn
final class A {
}
Lc ny, cc lp khc khng th tha k t lp A.
2.5. Cc lp tru tng
Trong lp trnh Java, c nhng lc ta cn nh ngha lp cha v khai bo cu trc mt
cch khi qut m khng ci t c th cho tng phng thc. Cc lp cha s nh
ngha dng tng qut ha c dng chung bi cc lp con ca n, vic ci t chi tit
cc phng thc ny s c thc hin trong tng lp con c th.
V d:
abstract class Hinh2D
{
double a,b,r;
public abstract double dientich();
public abstract double chuvi();
}
class HinhTron extends Hinh2D
{
public HinhTron(double r)
{
this.r=r;
}
public double dientich()
{
return Math.PI*r*r;
}
public double chuvi()
{
return Math.PI*2*r;
}
}
class HinhChuNhat extends Hinh2D
{
public HinhChuNhat(double a,double b)
{
this.a=a;
this.b=b;
30
Su tm bi: www.daihoc.com.vn
}
public double dientich()
{
return a*b;
}
public double chuvi()
{
return (a+b)*2;
}
}
class AbstractDemo
{
public static void main(String args[])
{
Hinh2D ht=new HinhTron(1);
System.out.println("Dien tich hinh tron ban kinh 1.0 la:"+ht.dientich());
System.out.println("Chu vi hinh tron ban kinh 1.0 la:"+ht.chuvi());
Hinh2D hcn=new HinhChuNhat(3,4);
System.out.println("Dien tich hinh chu nhat la:"+hcn.dientich());
System.out.println("Chu vi hinh chu nhat la "+hcn.chuvi());
}
};
Kt qu thc hin chng trnh
C:\MyJava>java AbstractDemo
Dien tich hinh tron ban kinh 1.0 la:3.141592653589793
Chu vi hinh tron ban kinh 1.0 la:6.283185307179586
Dien tich hinh chu nhat la:12.0
Chu vi hinh chu nhat la 14.0
Trong chng trnh trn ta khai bo lp tru tng Hinh2D, lp ny c cc phng
thc tru tng l dientich() tnh din tch ca hnh v lp chuvi() tnh chu vi. Cc
lp tru tng khng c ci t m lnh.
Cc lp HinhTron v HinhChuNhat l cc lp con c th ca lp tru tng Hinh2D.
Cc lp ny ci t cc phng thc tnh din tch v chu vi c th
2.6. Giao tip (Interface)
31
Su tm bi: www.daihoc.com.vn
Tha k ng mt vai tr rt quan trng trong vic tit kim thi gian v cng sc ca
ngi lp trnh. Hu ht cc chng trnh trong thc t u s dng a tha k. Trong
a tha k, chng ta c th tha k cc phng thc v thuc tnh t mt s lp khc
nhau. Java khng h tr a tha k. Tuy nhin, nhn thy tm quan trng ca a tha
k trong Java, Java a ra khi nim interface. Vi giao tip ta c th xc nh mt
lp phi lm g nhng khng xc nh cch lm th no.
nh ngha
32
Su tm bi: www.daihoc.com.vn
33
Su tm bi: www.daihoc.com.vn
o
o
34
Su tm bi: www.daihoc.com.vn
import MyPackage.SubPackage1.*;
Cch to ra cc gi trong Java
35
Su tm bi: www.daihoc.com.vn
return a/b;
}
}
Bc 2: Bin dch
C:\>javac -d C:\MyJava Calculator.java
Mt vi iu cn lu khi khai bo cc thnh vin ca gi.
Th nht, cc thnh phn ca gi cn c khai bo vi thuc tnh public, nu cn truy
xut chng t bn ngoi.
2.6. Qun l ngoi l (Exception Handling)
Khi nim
Trong qu trnh x l, cc ng dng c th bt ng gp cc li vi cc mc nghim
trng khc nhau. Khi mt phng thc tc ng trn mt i tng, i tng c th
pht hin cc vn trng thi bn trong (chng hn cc gi tr khng nht qun, nh
li chia 0), pht hin cc li vi cc i tng hay d liu m n thao tc (nh file hay
a ch mng) xc nh n vi phm cc qui tc c bn (nh c d liu t mt lung
b ng),...Rt nhiu ngi lp trnh khng th kim tra tt c cc trng thi li c th
xy ra.
Exception cung cp mt cch kim tra cc li m khng chia ct m. Exception cng
a ra mt c ch bo li mt cch trc tip ch khng s dng cc c hay cc hiu
ng ph.
Throwable
Exception
36
Su tm bi: www.daihoc.com.vn
Hnh 2.7
Lp Throwable cha mt xu c s dng m t ngoi l. Ngoi l c phn
thnh hai loi: Ngoi l c kim tra (checked exception) v ngoi l khng c kim
tra (unchecked exception).
Ngoi l c kim tra l ngoi l m trnh bin dch s kim tra phng thc ca
ngi lp trnh v ch a ra ngoi l khi chng c thng bo a ra.
Ngoi l khng c kim tra l lp con ca cc lp Error; RuntimeException.
Java cung cp mt m hnh qun l cc ngoi l cho php kim tra cc li cc v tr c
lin quan.
C php
o Khi try
Bao gm mt tp hp cc lnh c th pht sinh ngoi l trong khi x l. Mt phng
thc, c th a ra mt ngoi l cng c t try
Cc khi try lng nhau
try{
stmt1;
stmt2;
try{
stmt3;
stmt4;
}
catch(Exception e)
{
}
}
catch(Exception e)
{
}
Khi cc khi try c lng nhau, khi try bn trong c x l trc v mt ngoi l
c a ra trong khi c n bt trong cc khi try catch con. Nu khi catch
bn trong khng tha mn th cc khi try bn ngoi c kim tra. Nu mt khi catch
ph hp c tm thy, th ngoi l c qun l trong khi ngc li th mi trng
Java Runtime qun l ngoi l.
try
{
doFileProcessing();
37
Su tm bi: www.daihoc.com.vn
displayResults();
}
catch(Exception e)
{
System. er.println(e.getMessage());
}
Bt k li no xy ra trong qu trnh x l doFileProcessing() hay displayResult() th s
c n bt bi khi catch v c x l.
Nu c li xy ra trong qu trnh x l doFileProcessing(), phng thc displayResult()
s khng bao gi c gi, v khi catch s c x l.
Mt khi try c th c nhiu khi catch v x l cc kiu khc nhau
try
{
}
catch(Exception e)
{
}
catch(Exception e)
{
}
finally
{
//Thc hin cng vic thu dn
}
V d:
class TryCatch
{
public static void main(String[] args)
{int x,y;
try{
x=Integer.parseInt(args[0]);
y=Integer.parseInt(args[1]);
x=x/y;
System.out.println("x="+x);
}
38
Su tm bi: www.daihoc.com.vn
catch(ArithmeticException e)
{
System.out.println("Khong the chia cho 0");
System.err.println(e);
}
}
}
Kt qu 1
C:\MyJava\Baitap>java TryCatch 18 9
x=2
Kt qu 2
C:\MyJava\Baitap>java TryCatch 9 0
Khong the chia cho 0
java.lang.ArithmeticException: / by zero
Khi finally
Khi finally l khi m chng ta thy cc lnh tr v cc ti nguyn cho h thng v cc
lnh khc in ra bt k thng bo no.
Cc lnh trong khi finanally c th l:
o
ng mt file.
Mnh throw
39
Su tm bi: www.daihoc.com.vn
class ThrowDemo
{
int size, a[];
ThrowDemo(int s)
{
size =s;
try{
checkSize();
}
catch(ArraySizeException e)
{
System.out.println(e);
}
}
void checkSize() throws ArraySizeException
{
if(size<0) throw new ArraySizeException();
a= new int[3];
for(int i=0;i<3;i++)a[i]=i+1;
}
public static void main(String[] args)
{
new ThrowDemo(Integer.parseInt(args[0]));
}
}
Kt qu thc hin chng trnh
C:\MyJava\Baitap>java ThrowDemo -1
ArraySizeException: Nhap kich thuoc mang khong hop le
Gii thch:
Chng ta to ra mt lp c tn ArraySizeException, lp ny l lp con ca lp
NegativeArraySizeException. Bng cch to ra mt i tng ca lp ny, chng ta
in ra thng bo ngoi l. Phng thc checkSize() c th a ra ngoi l
ArraySizeException.
try
khng c ngoi l
c ngoi l
Su tm bi: www.daihoc.com.vn
40
Hnh 2.8
V d:
class FinallyDemo
{
String name;
int x,y;
FinallyDemo(String s[])
{
try{
name = new String("try catch finally demo");
x = Integer.parseInt(s[0]);
y=Integer.parseInt(s[1]);
System.out.println(name);
System.out.println("Ket qua "+x/y);
}
catch(ArithmeticException e)
{
System.err.println("Khong the chia 0!");
}
finally
{
name = null;
System.out.println("Xu ly khoi finally");
}
41
Su tm bi: www.daihoc.com.vn
}
public static void main(String[] args)
{
new FinallyDemo(args);
}
}
Kt qu 1
C:\MyJava\Baitap>java FinallyDemo 16 0
try catch finally demo
Khong the chia 0!
Xu ly khoi finally
Kt qu 2
C:\MyJava\Baitap>java FinallyDemo 16 4
try catch finally demo
Ket qua 4
Xu ly khoi finally
Mt s ngoi l thng gp
o
RuntimeException
ArithmeticException
IllegalArgumentException
ArrayIndexOutOfBoundsException
NullPointerException
SecurityException
NoSuchElementException
ClassNotFoundException
AWTException
DataFormatException
SQLException
IOException
UnknownHostException
SocketException
42
Su tm bi: www.daihoc.com.vn
EOFException
MalformedURLException
FileNotFoundException
IllegalAccessException
NoSuchMethodException
43
Su tm bi: www.daihoc.com.vn
Chng 3
Cc lung vo ra
1. Khi nim v lung trong Java
Khi lp bt k chng trnh no trong mt ngn ng no th vn vo ra d liu gia
chng trnh v ngun d liu cng nh ch d liu l vn m ngi lp trnh cn phi
quan tm. Lm th no ta c th truyn d liu cho mt chng trnh Java. C hai cch
hiu qu thc hin iu ny:
InputStream
Data Source
Program
OutputStream
Hnh 3.1
59
Su tm bi: www.daihoc.com.vn
Console
Thit b
InputStream
Chng trnh
ng dng
Tp tin
OutputStream
Mng
Hnh 3.2
3. Lunng nh phn
3.1. Lp InputStream
Lp tru tng InputStream khai bo cc phng thc c d liu u vo t mt
ngun c th. Lp InputStream l lp c s ca hu ht cc lung nhp trong gi java.io, v
n h tr cc phng thc sau:
Cc phng thc:
public InpuStream()
60
Su tm bi: www.daihoc.com.vn
public OuputStream()
Phng thc OutputStream h tr constructor khng tham s
61
Su tm bi: www.daihoc.com.vn
ByteArrayInputStream
ByteArrayOutputStream
Hnh 3.3
3.3.1. Lung nhp mng byte
Lp ByteArrayInputStream s dng mt mng byte nh l mt ngun d liu u vo.
N c hai constructor:
public ByteArrayInputStream(byte[] buf)
62
Su tm bi: www.daihoc.com.vn
System.out.print(is.read()+" ");
}
catch(IOException e)
{
System.err.println(e);
}
}
}
Kt qu thc hin chng trnh
C:\MyJava\Baitap>java LuongNhapMang
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99
Ch : Mi ln c lung bng phng thc read(), mt byte d liu khng cn trong
lung, nhng vn tn ti trong mng.
3.3.1. Lung nhp mng byte
ByteArrayOutputStream to ra mt lung xut trn mt mng byte. N cng cung cp
cc kh nng b sung.
Cc constructor:
public ByteArrayOutputStream()
63
Su tm bi: www.daihoc.com.vn
64
Su tm bi: www.daihoc.com.vn
FileInputStream
FILE
FileOutputStream
Hnh 4.5
V d
import java.io.*;
public class FileIOExam
{
public static void main(String[] args)
{
//Tao mot file de ghi
try{
OutputStream os = new FileOutputStream(args[0]);
String s = "Thu nghiem voi luong xuat nhap tap tin";
for(int i=0;i<s.length();i++) os.write(s.charAt(i));
os.close();
//Mo de doc
InputStream is = new FileInputStream(args[0]);
int len = is.available();
System.out.println("Luong nhap co "+len+ " bytes");
byte b[] = new byte[len];
int sobyte = is.read(b,0,len);
System.out.println(sobyte+ " la so bytes da doc");
System.out.println(new String(b));
is.close();
}
catch(IOException e)
{
System.err.println(e);
}
}
}
Kt qu thc hin chng trnh
65
Su tm bi: www.daihoc.com.vn
66
Su tm bi: www.daihoc.com.vn
67
Su tm bi: www.daihoc.com.vn
int
char[ ] long
float
Object boolean
double
String
4. Lung k t
Lung k t cung cp mt cch thc qun l vic vo ra vi cc k t. Cc lung ny s
dng tp k t Unicode v v th c th quc t ha. Trong mt s trng hp lm vic vi
cc lung k t hiu qu hn lung byte.
Cc lung k t chun vay mn t rt nhiu cc lp lung hng byte, bao gm
lung lc, lung m, v cc lung tp tin, v tt c cc lung c dn xut t cc lp cha
Reader v Writer. Ngoi ra, c hai lp ng vai tr cu ni gia cc lung byte v cc lung
k t. Hai lp ny kt hp cc hm chuyn i cc k t thnh cc byte v ngc li theo
mt kiu m ha c xc nh. iu ny cho php mt ngun d liu ASCII c
chuyn i d dng thnh mt lung k t Unicode v tng t cho d liu Unicode c
ghi mt cch d dng vo mt tp tin theo chun m ha cc b, cho d n l chun 8-bit,
UTF-8, hoc 16 bit.
72 105 33 8-bit
InputStream
InputStreamReader
16-bit Hi!
Hnh 4.6
Hi! 16-bit
OutputStreamWriter
OutputStream
Hnh 4.7
4.1. S tng ng gia lung byte v lung k t
Bng di y ch ra s tng ng gia lung byte v lung k t
Lung byte
Lung k t
OuputStream
Writer
InputStream
Reader
FileOutputStream
FileWriter
FileInputStream
FileReader
ByteArrayInputStream
CharArrayReader
68
Su tm bi: www.daihoc.com.vn
ByteArrayOutputStream
CharArrayWriter
StringWriter
StringBufferedInputStream StringReader
PipedOuputStream
PipedWriter
PipedInputStream
PipedReader
FilterOutputStream
FilterWriter
FilterInputStream
FilterReader
BufferedOuputStream
BufferedWriter
BufferedInputStream
BufferedReader
PushbackInputStream
PushbackReader
LineNumberInputStream
LineNumberReader
PrintStream
PrintWriter
DataOutputStream
DataInputStream
ObjectInputStream
ObjectOuputStream
SequenceInputStream
OuputStreamWriter
OutputStreamReader
Bng 3.1
4.2. M ha k t
Khi to cu ni gia mt lung k t v mt lung byte, cn thit phi xc nh cch
m ha c s dng bi cc lung byte; ngha l, cc k t c biu din bi tng byte
hoc tng nhm cc byte. Tn ca cch m ha cc byte c c t bi mt xu k t
c truyn cho constructor to cu ni OuputStreamReader v InputStreamReader.
M ha
US-ASCII
IBM-EBCDIC
ISO Latin
ISO Latin 2
UTF-8
Char
!
!
Bytes
33
90
Bng 3.2
69
Su tm bi: www.daihoc.com.vn
protected Writer()
abstract void write(char cbuff[], int off, int len) throws IOException
4.4. Lp Reader
Reader l lp cha ca tt c cc lung nhp k t. N cung cp cc phng thc
tng t nh lung InputStream, nhng ch yu phc v cho vic c cc k t.
protetected Reader()
70
Su tm bi: www.daihoc.com.vn
Cc constructor
public OutputStreamWriter(OutputStream out)
String getEncoding()
InputStreamReader(InputStream in)
String getEncoding()
new
IllegalArgumentException("Convert
<srcEnc>
}
}
4.7. Lp FileWriter
Lp Writer ny cung cp mt interface lung k t ghi cc tp tin vn bn bng
cch s dng m ha mc nh.
xc nh cch m ha c s dng m ha mt tp tin, ta s dng mt lung
OuputStreamWriter gn vi lung FileOutputStream.
Cc constructor
71
Su tm bi: www.daihoc.com.vn
72
Su tm bi: www.daihoc.com.vn
5. Lung m
Cc lung InputStream v OuptutStream l cc lung th. Chng c v ghi cc byte
theo tng nhm. Vic xc nh cc byte ny c ngha nh th no-chng l s nguyn hay
cc s du phy ng theo chun IEEE 754 hay l cc k t Unicode-iu ny hon ton
ph thuc vo ngi lp trnh. Tuy nhin, c nhng khun dng d liu rt ph bin
c ci t trong cc th vin lp. Java cung cp mt s lp lc ta gn cc lung d
liu th vi chng nhm mc ch chuyn i qua li gia cc byte v cc khun dng d
liu khc.
Cc lung lc cng c hai loi l:lung c (reader) v lung ghi (writer). Kt ni cc
lung lc vi nhau. Cc lung lc c kt ni vi cc lung thng qua cc constructor ca
chng.
V d
FileInputStream fis=new FileInputStream(data.txt);
BufferedInputStream bis=new BufferedInputStream(fis);
Trc tin, ta thy mt i tng FileInputStream c to ra vi tham s u vo l
mt tn tp tin data.txt. Sau , ta to tip i tng BufferedInputStream bis vi tham s
u vo ca constructor BufferedInputStream l fis. T thi im ny tr i, ta c th s
dng cc phng thc read() c c i tng fis v bis.
Ta cng c th xy dng trc tip mt lung bn trong mt lung khc.
DataOuputStream dos =new DataOutputStream(new BufferedOutputStream(new
FileOutputStream(data.txt)));
73
Su tm bi: www.daihoc.com.vn
Cc lung m
Lp BufferedOutputStream lu tr d liu c ghi vo trong mt vng m cho ti
khi vng m y hoc l lung b flush(). Sau n ghi d tt c d liu ra lung xut ng
mt ln. iu ny lm tng tc trao i d liu.
Lp BufferedInputStream cng c mt mng byte c s dng lm vng m.
Khi mt trong cc phng thc c lung read() c gi, trc tin n nhn d liu c
yu cu t vng m. Ch khi vng m ht d liu thc s n mi c d liu t ngun.
Lc ny, n c cng nhiu d liu t ngun vo vng m nu c th, cho d d liu c
cn ngay tc khc hay khng.
M t
Tr v s phn t c trong vng m
Xa vng m
Thit lp gii hn ca vng m v v tr hin hnh v
thit lp li v tr hin hnh v 0
Phng thc ny tr v gi tr true nu cn cc phn
t trong vng m. Tr v gi tr false nu ngc li
Tr v gi tr true nu vng m l ch c. Tr v gi
tr false nu ngc li
Thit lp gii hn ca vng m l n
Thit lp gii hn ca vng m l n v tr v tham
chiu ti vng m c gi
Thit lp v tr nh du v tr v tham chiu ti vng
74
Su tm bi: www.daihoc.com.vn
m c gi
Tr v v tr hin hnh ca vng m
Thit lp v tr ca Buffer l n. Tr v mt tham chiu
ti vng m
Thit lp li v tr hin hnh ca vng m v v tr
nh du c thit lp trc . Tr v mt tham
chiu ti vng m
Thit lp v tr hin hnh ca vng m v 0
Bng 3.3
ByteBuffer
IntBuffer
CharBuffer
LongBuffer
DoubleBuffer
MappedByteBuffer
FloatBuffer
ShortBuffer
M t
Tr v byte d liu ti v tr hin hnh
Sao chp d liu t vng m vo mt
mng c tham chiu bi mng vals. Tr
v mt tham chiu ti buffer
Sao chp num s phn t t buffer vo
mng c tham chiu bi vals, bt u
ti ch mc c xc nh bi tham s
start. Tr v tham chiu ti vng m. Nu
khng cn phn t no trong vng m,
ngoi l BufferUnderflowException
Tr v byte d liu ti v tr c xc nh
bi ch mc idx trong vng m
Sao chp byte d liu b vo ti v tr hin
hnh
Sao chp tt c cc phn t ca mng b
vo vng m, bt u t v tr hin hnh.
Tr v tham chiu ti vng m
Sao chp num phn t t mng b bt u
ti v tr start vo vng m. Tr v tham
chiu ti vng m. Nu vng m khng
cha c tt c cc phn t ca vng
m th ngoi l BufferOverflowException
s c a ra
Sao chp tt c cc phn t ca vng m
BufferByte gi, bt u t v tr hin hnh .
Nu vng m khng cha c tt c
cc phn t ca vng m th ngoi l
BufferOverflowException s c a ra
Sao chp byte d liu b ti v tr idx vo
vng m. Tr v tham chiu ti vng m
75
Su tm bi: www.daihoc.com.vn
Bng 3.4
Phng thc put()c nh ngha trong ByteBuffer. Tt c cc lp buffer cn h tr
cc phng thc thc hin cc thao tc khc nhau trn vng m.
6.3. Cc knh (Channel)
Cc knh c nh ngha trong gi java.io.channel. Mt knh biu din mt lin kt
m ti mt ngun hoc ch vo ra. Ta c th nhn c mt knh bng cch gi phng
thc getChannel() trn mt i tng h tr knh. Java 2 phin bn 1.4 a thm vo
phng thc getChannel() cho cc lp sau:
FileInputStream
FileOutputStream
RandomAccessFile
Socket
ServerSocket
DatagramSocket
Phng thc
abstract int read(ByteBuffer bb)
M t
c cc byte t knh vo mt vng m bb
cho ti khi y vng m hoc khng cn d
liu trn knh. Kiu tr v l s byte thc s
c c
c cc byte t knh vo mt vng m, bt
u t v tr start cho ti khi y vng m
hoc khng cn d liu u vo. V tr hin
thi khng thay i. Tr v s byte c
c hoc 1 nu kt thc lung
Ghi ni dung ca vng m ra knh, bt u
ti v tr hin hnh. Tr v s byte c
ghi.
Ghi ni dung ca vng m ra knh. Bt u
ti v tr hin start. Tr v s byte c ghi
Bng 3.5
76
Su tm bi: www.daihoc.com.vn
77
Su tm bi: www.daihoc.com.vn
Cch 2
78
Su tm bi: www.daihoc.com.vn
79
Su tm bi: www.daihoc.com.vn
System.out.println(e.getMessage());
System.exit(1);
}
}
}
Kt qu thc hin
C:\MyJava>java MappedChannelRead Bai3.java
class Bai3 {
public static void main( String args[] ) {
double x = 42 ;
System.out.println( x = 42 % 3 + 3 * 3 - 3 / 3 );
}
}
6.5.2. Ghi tp tin
C mt s cch ghi tp thng qua mt knh. y, chng ta cng tm hiu hai
cch ghi tp. Cch th nht l ghi tp thng qua mt knh bng cch s dng cc thao tc
write. Cch th hai, nu tp tin c m thc hin cc thao tc c/ghi, ta c th nh x
tp vo mt vng m v sau ghi vo vng m. Nhng thay i vi vng m s c
t ng nh hng n tp tin. C hai cch u c m t trong mc ny.
ghi mt tp thng qua knh bng cch s dng cc li gi ti phng thc write(),
ta thc hin cc bc sau y.
Bc 1: M mt tp ghi.
Bc 2: Xc nh mt vng m byte ghi d liu vo vng m , sau gi
phng thc write().
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
public class ChannelWrite
{
public static void main(String[] args)
{
FileOutputStream fos;
FileChannel fc;
ByteBuffer bb;
try
{
80
Su tm bi: www.daihoc.com.vn
}
}
Sao chp mt tp bng cch s dng tin ch vo ra mi
H thng vo ra mi n gin ha mt s kiu thao tc trn tp tin. V d, chng
trnh di y sao chp mt tp tin.
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
public class NIOCopy
{
public static void main(String[] args)
{
FileOutputStream fos;
FileInputStream fis;
FileChannel fco,fci;
long fSize;
MappedByteBuffer mbb;
try{
fis=new FileInputStream(args[0]);
fos=new FileOutputStream(args[1]);
fci=fis.getChannel();
fco=fos.getChannel();
81
Su tm bi: www.daihoc.com.vn
fSize=fci.size();
mbb=fci.map(FileChannel.MapMode.READ_ONLY,0,fSize);
fco.write(mbb);
fci.close();
fco.close();
fos.close();
fis.close();
}
catch(Exception e)
}
}
}
7. Kt lun
Chng ny chng ta tm hiu cc khi nim cn bn v vo ra bng cch s
dng cc lung trong Java. Cng trong chng ny cc lung hng byte v cc lung
hng k t trong Java c gii thiu. Khi nim vo ra mi bng cch s dng cc
knh (channel) v vng m (buffer) cng c gii thiu trong chng ny. cc chng
tip theo cc bn s thy hu ht cc chng trnh lp trnh mng u vo ra d liu bng
cch s dng cc lung. Vic hiu bit su v lung vo ra s l mt li th bn c tip
cn vi cc chng tip theo.
82
Su tm bi: www.daihoc.com.vn
Chng 4
Lp trnh a tuyn on
1. Tng quan
Khi thc hin mt cng vic phc tp ngi ta thng chia cng vic ra thnh nhiu
phn v giao cng vic cho nhiu ngi cng thc hin, iu ny gip cho cng vic c
tin hnh nhanh chng. Cc ng dng phn mm s dng mt chin lc tng t c
gi l a tuyn on chia nh cc tc v thnh cc n v d qun l. Lp trnh a tuyn
on l mt khi nim quan trng trong lp trnh mng bng Java v cc client v server
thng phi thc hin mt s tc v ng thi ti cng mt thi im (v d lng nghe cc
yu cu v p ng cc yu cu, x l d liu v cp nht giao din ha ngi dng).
Trc khi i vo tm hiu lp trnh a tuyn on trong Java, ta cn hiu r s khc nhau
gia lp trnh n tuyn on, lp trnh a tin trnh v lp trnh a tuyn on.
a nhim hp tc. Trong a nhim hp tc, mi chng trnh kim sot mt phn
thi gian CPU m n cn. iu ny ngha l mt chng trnh phi hp tc trao
quyn iu khin cho cc chng trnh khc, nu khng n s chim dng CPU. Cc
h iu hnh a nhim hp tc l Windows 3.1 v Mac OS 8.5.
Nhng ai quen lp trnh trn h thng Unix hn l quen vi khi nim lp trnh
a tin trnh. h tr a nhim, Unix s dng khi nim cc tin trnh. Mi ng dng ang
chy l mt tin trnh, vi b nh c phn b cho chng trnh v d liu. C nhiu tin
trnh chy trn cng mt my. H iu hnh s phn b thi gian cho tng tin trnh, dng
tin trnh khi ht thi gian v cho php tin trnh khc tip tc. i khi, mt tin trnh b phong
ta hoc c th t chn ginh thi gian CPU.
Lp trnh a tin trnh c cc li ch khc. Cc chng trnh t chng c th to ra cc
tin trnh mi , mt phn chng trnh thc hin mt tc v trong khi mt phn khc thc
hin cng vic khc. V d, khi ang kim tra email trn mt my xa, giao din ngi dng
c th hin th din tin ca thao tc v cho php ngi dng son tho cc thng ip v
c cc thng ip c ti v trc .
Mc d lp trnh a tin trnh hot ng tt, nhng n vn c nhng nhc im.
Trc ht, khi mt tin trnh phn nhnh thnh hai tin trnh, s dn n s chng cho gia
Su tm bi: www.daihoc.com.vn
vic lu tr d liu ca tin trnh ny vi tin trnh khc. Mi tin trnh cn c mt bn sao
d liu ca ring n, v vy nu c nhiu tin trnh th s cn nhiu b nh. Th hai l khng
c cch no mt tin trnh truy xut v sa i d liu ca mt tin trnh khc.
a=A.getBalance();
a+=deposit;
A.setBalance(a);
Hnh 4.1
Su tm bi: www.daihoc.com.vn
a=A.getBalance();
b=B.getBalance();
a+=deposit;
b+=deposit;
A.setBalance(a);
B.setBalance(a);
Hnh 4.2
a tuyn on (Multi-thread)
Mt ng dng c th c nhiu tuyn on. Kh nng lm vic vi nhiu tuyn on
c gi l a tuyn on. a tuyn on cho php bn vit cc chng trnh hiu qu tn
dng ti a CPU bng cch duy tr thi gian tr l ti thiu.
Ti cng mt thi im c hai khch hng cng ghi vo cng mt ti khon. Nu thc
hin nh vy th ch c tuyn on th hai mi thc s nh hng ti ti khon, kt qu ca
giao dch th nht s b mt. khc phc iu ny cn c mt c ch thng bo mt
i tng ang c s dng hay khng.
Vng i ca mt tuyn on
Mt tuyn on c th mt trong bn trng thi sau trong sut vng i ca n:
Dead (cht)-Mt tuyn on thng trng dead khi phng thc run() hon thnh
vic x l.
Su tm bi: www.daihoc.com.vn
Su tm bi: www.daihoc.com.vn
Su tm bi: www.daihoc.com.vn
catch(InterruptedException e)
{
return;
}
}
public static void main(String[] args)
{
Runnable ping = new RunPingPong("ping",33);
Runnable pong = new RunPingPong("PONG",100);
new Thread(ping).start();
new Thread(pong).start();
}
}
4. S ng b ha (Synchronization)
Khi hai tuyn on cn s dng cng mt i tng, c mt kh nng c cc thao tc
an xen nhau lm ph hng d liu. a tuyn on c mt c ch ngn nga iu ,
bng cch s dng phng thc chim dng i tng. Nu mt i tng b phong ta bi
mt tuyn on no th ch c tuyn on mi c th truy cp ti i tng.
4.1. Cc phng thc synchronized
ch kha
a=A.getBalance();
a+=deposit;
A.setBalance(a);
a=A.getBalance();
a+=deposit;
A.setBalance(a);
Hnh 4.3
Su tm bi: www.daihoc.com.vn
V d: Ci t lp Account:
class Account{
private double balance;
public Account(double initialDeposit)
{
balance = initialDeposit;
}
public synchronized double getBalance()
{
return balance;
}
public synchronized void getBalance(double amount)
{
balance+=amount;
}
}
}
4.2.Lnh synchronized
Lnh synchronized cho php ng b ha mt i tng m khng cn yu cu bn
tc ng mt phng thc synchronized trn i tng .
C php
synchronized (expr)
statement
Khi c c kha, statement c x l ging nh n l mt phng thc
synchronized trn i tng .
V d: Chuyn cc phn t trong mng thnh cc s khng m
public static void abs(int[] v)
{
synchronized(v)
{
for(int i=0;i<v.length;i++)
{
if(v[i]<0) v[i]=-v[i];
}
}
}
Java c th chy trn c my n v my a x l, vi nhiu tuyn on hay n
tuyn on.
Su tm bi: www.daihoc.com.vn
Su tm bi: www.daihoc.com.vn
Tuyn on hin thi ch cho ti khi c cnh bo hoc mt khong thi gian
timeout nht nh. Nu timeout bng 0 th phng thc s ch ch cho ti khi c cnh
bo v s kin.
public final void notify()
Phng thc ny a tin on hin hnh vo trng thi ngh ti thiu l ms (mili
giy).
public static void yeild()
Phng ny ginh ly quyn thc thi ca tuyn on hin hnh cho mt trong cc
tuyn on khc.
7. B tc-Deadlock
Mt kiu li c bit m ta cn phi trnh c lin quan n a nhim l b tc
(deadlock), b tc xy ra khi hai tuyn on c mt s ph thuc xoay vng trn mt cp i
tng ng b. V d, gi s mt tuyn on chim dng i tng X v mt tuyn on
chim dng i tng Y. Nu tuyn on chim dng X c gng gi bt k phng thc
ng b trn Y, th n s b phong ta. Nu tuyn on chim dng Y gi phng thc ng
b trn X, tuyn on s ch v hn.
V d:
class A
{
synchronized void phuongthuc1(B b)
Su tm bi: www.daihoc.com.vn
{
String tenTD=Thread.currentThread().getName();
System.out.println(tenTD+" dang goi phuong thuc A.phuongthuc1()");
try{
Thread.sleep(1000);
}
catch(Exception e)
{
System.out.println("A bi ngat");
}
System.out.println(tenTD+" Dang thu goi B.phuongthuc4()");
b.phuongthuc4();
}
synchronized void phuongthuc2()
{
System.out.println("Ben tron phuong thuc A.phuongthuc2()");
}
}
class B
{
synchronized void phuongthuc3(A a)
{
String tenTD=Thread.currentThread().getName();
System.out.println(tenTD+" dang goi phuong thuc B.phuongthuc3");
try{
}
catch(Exception e)
{
System.out.println("B bi ngat");
}
System.out.println(tenTD+" Dang thu goi phuon thuc A.phuongthuc2()");
a.phuongthuc2();
}
synchronized void phuongthuc4(){
System.out.println("Ben trong phuong thuc B.phuongthuc4()");
}
}
Su tm bi: www.daihoc.com.vn
8. iu khin tuyn on
8.1. Ngt mt tuyn on Thread
Khi gi phng thc Thread.sleep(int ) th phng thc ny s t tuyn on vo
trng thi ngh trong mt khong thi gian xc nh no . Tuy nhin kch hot mt
tuyn on sm hn ta phi s dng ngt tuyn on. Ta c ngt mt tuyn on bng
cch gi phng thc interrupt(). Tt nhin, iu ny cn mt tuyn on khc tham chiu
ti tuyn on hin thi.
public class SleepyHead extends Thread
Su tm bi: www.daihoc.com.vn
{
// Run method is executed when thread first started
public void run()
{
System.out.println ("I feel sleepy. Wake me in eight
hours");
try
{
// Sleep for eight hours
Thread.sleep( 1000*60 );
System.out.println ("That was a nice nap");
}
catch (InterruptedException ie)
{
System.err.println ("Just five more minutes....");
}
}
// Main method to create and start threads
public static void main(String args[]) throws java.io.IOException
{
// Create a 'sleepy' thread
Thread sleepy = new SleepyHead();
// Start thread sleeping
sleepy.start();
// Prompt user and wait for input
System.out.println
("Press
enter
to
interrupt
the
thread");
System.in.read();
//
}
}
8.2 Kt thc vic thc thi mt tuyn on
i khi cn thit phi kt thc mt tuyn on trc khi tc v ca n hon thnh. V
d, nu mt client ang gi cc thng ip ti mt mail server trong mt tuyn on th hai,
v ngi s dng mun hy b thao tc, tuyn on phi c dng li ngay tc thi. Mt
tuyn on c th gi mt yu cu ngng vic thc thi tuyn on ti mt tuyn on khc
nh phng thc Thread.stop(). iu ny i hi tuyn on iu khin duy tr mt tham
chiu ti tuyn on m n mun dng.
Su tm bi: www.daihoc.com.vn
C:\MyJava>java StopMe
Press any enter to stop the thread ounting
I can count. Watch me go!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
Chng trnh trn s tip tc bin m cho ti khi ta nhn mt phm bt k dng
vic x l ca tuyn on.
8.3. Tm dng v phc hi vic x l cc tuyn on
Su tm bi: www.daihoc.com.vn
Hnh 4.4
Su tm bi: www.daihoc.com.vn
ThreadGroup(ThreadGroup
java.lang.SecurityException
parentGroup,String
name)
throws
void checkAccess():
Su tm bi: www.daihoc.com.vn
Su tm bi: www.daihoc.com.vn
Thread t;
public void init()
{
resize(400,400);
}
public void start()
{
if(t==null)
{
t= new Thread(this);
t.start();
}
}
public void stop()
{
if(t==null)
{
t.stop();
t=null;
}
}
public void run()
{
while(true)
{
d= new Date();
repaint();
try{
Thread.sleep(1000);
}
catch(InterruptedException e)
{
return;
}
}
}
public void paint(Graphics g)
{
g.setFont(f);
Su tm bi: www.daihoc.com.vn
g.drawString(d.toString(),10,50);
}
}
<HTML>
<HEAD>
<TITLE> Clock </TITLE>
</HEAD>
<BODY>
<APPLET CODE ="Clock.class" WIDTH =200 HEIGHT = 100>
</APPLET>
</BODY>
</HTML>
Thc hin chng trnh
appletviewer Clock.html
Kt qu thc hin
Hnh 4.5
11. Kt lun
Nhng hiu bit v lp trnh a tuyn on c tm quan trng i vi cc ng dng v
cc applet, c bit l i vi mi trng mng. Cc mng my tnh thng rt chm v c
tin cy khng cao, v vy chng trnh mng nn chy trong mt tuyn on ring bit
tch bit vi giao din ngi dng. Hn th na, phn mm mng tng tc vi nhiu client
hoc server, ngoi tr cc thao tc c bit nhanh (nh nhn v gi mt gi tin). Chng
trnh cn c nhiu tuyn on cc tng tc c th xy ra ng thi. Trong cc chng
sau chng ta s xem xt cch ng dng tuyn on trong vic xy dng cc chng trnh
mng c x l tng tranh.
Su tm bi: www.daihoc.com.vn
Su tm bi: www.daihoc.com.vn
Chng 5
102
Su tm bi: www.daihoc.com.vn
}
catch(UnknownHostException e)
{
System.err.println(e);
}
V d 1:Vit chng trnh nhn hostname t i dng lnh v in ra a ch IP tng
ng vi hostname .
import java.net.*;
public class TimDCIP
{
public static void main(String[] args)
{
try{
if(args.length!=1)
{
System.out.println("Cach
su
dung:
java
TimDCIP
<Hostname>");
}
InetAddress host = InetAddress.getByName(args[0]);
String hostName = host.getHostName();
System.out.println("Host name:"+hostName);
System.out.println("Dia chi IP:"+host.getHostAddress());
}
catch(UnknownHostException e)
{
System.out.println("Khong tim thay dia chi");
return;
}
}
}
1.2. Nhn cc trng thng tin ca mt i tng InetAddress
Ch c cc lp trong gi java.net c quyn truy xut ti cc trng ca lp
InetAddress. Cc lp trong gi ny c th c cc trng ca mt i tng InetAddress
bng cch gi phng thc getHostname v getAddress().
103
Su tm bi: www.daihoc.com.vn
Java 1.5 thm vo hai phng thc cho lp InetAddress cho php cc ng dng
kim tra liu mt nt c th c n c hay khng vi nt xut pht l nt hin hnh;
ngha l kim tra xem mt lin kt mng c thit lp hay cha. Cc lin kt c th b
phong ta v nhiu nguyn nhn nh firewall, cc server y quyn, cc router hot ng
sai chc nng, dy cp b t, hoc host xa khng bt.
su
dung:
java
TimDCIP
<Hostname>");
}
InetAddress host = InetAddress.getByName(args[0]);
String hostName = host.getHostName();
System.out.println("Host name:"+hostName);
System.out.println("Dia chi IP:"+host.getHostAddress());
byte[] b=host.getAddress();
int i=b[0]>=0?b[0]:256+b[0];
if((i>=1)&(i<=126)) System.out.println(host+" thuoc dia chi lop A");
if((i<=191)&(i>=128)) System.out.println(host+" thuoc dia chi lop
B");
if((i<=223)&(i>=192)) System.out.println(host+" thuoc dia chi lop
C");
}
catch(UnknownHostException e)
104
Su tm bi: www.daihoc.com.vn
{
System.out.println("Khong tim thay dia chi");
return;
}
}
}
Trong chng trnh ny ta ch cn lu dng lnh int i=b[0]>=0?b[0]:256+b[0]. V
ta bit trong Java kiu byte l kiu s nguyn c du c khong gi tr l t -128 n 127.
Do vy, dng lnh int i=b[0]>=0?b[0]:256+b[0] lm nhim v chuyn i s nguyn c du
dng b 2 v dng s nguyn khng du
2. Lp URL
Cch n gin nht mt chng trnh Java nh v v tm kim d liu l s
dng mt i tng URL. Bn khng cn phi lo lng ti cc chi tit bn trong ca giao
thc ang c s dng, khun dng d liu c nhn, hay lm th no truyn tin
vi server; bn ch cn cho bit URL, Java s ly d liu v cho bn.
Lp java.net.URL l mt khi nim v b nh v ti nguyn thng nht. Nu lu
tr URL di dng mt i tng String s khng c li so vi vic t chc URL nh
mt i tng vi cc trng : giao thc (protocol), hosname, cng (port), ng dn
(path), tn tp tin (filename), mc ti liu (document section), mi trng c th c
thit lp mt cch c lp.
2.1. To cc URL
C bn constructor, khc nhau v thng tin m n cn. Constructor m bn s
dng ph thuc vo thng tin m bn c, v khun dng trong URL . Tt c cc
constructor ny s a ra ngoi l MalformedURLException (URL khng ng khun
dng) nu ta to ra mt URL cho mt giao thc m n khng c h tr.URL cung cp
cc hm cu t sau:
V d
try{
URL u = new URL(http://www.sun.com/index.html);
}
catch(MalformedURLException e)
{
System.err.println(e);
}
public
URL(String
protocol,
String
host,
String
file)
throws
MalformedURLException
Constructor ny xy dng mt URL t cc xu phn bit xc nh giao thc,
hostname, v tp tin. Port c thit lp bng -1 v vy cng mc nh cho giao thc s
c s dng.
V d
105
Su tm bi: www.daihoc.com.vn
try{
URL u = new URL(http,/www.sun.com,index.html);
}
catch(MalformedURLException e){
System.err.println(e);
}
public URL(String protocol,
MalformedURLException
String
host,
int
port,
String
file)
throws
106
Su tm bi: www.daihoc.com.vn
Phng thc getPort() tr v mt s nguyn kiu int biu din s hiu cng c
trong URL.
V d: Vit chng trnh nhp vo mt URL t i dng lnh v hin th tng thnh phn
to nn URL ln mn hnh.
//Chng trnh ly thng tin ca URL vi cc thng tin nhp t bn phm
import java.net.*;
class getURLParts{
public static void main(String[] args)
{
try
{
URL u = new URL(args[0]);
System.out.println("URL is "+u);
System.out.println("The protocol part is "+u.getProtocol());
System.out.println("The host part is "+u.getHost());
System.out.println("The file part is "+u.getFile());
System.out.println("The reference part is "+u.getRef());
}
catch(MalformedURLException e)
{
System.err.println(e);
}
}
}
Kt qu thc hin chng trnh nh sau:
107
Su tm bi: www.daihoc.com.vn
Hnh 5.1
2.3. Tm kim d liu t mt URL
Nu ch c URL thun ty th khng c g th v. iu th v l d liu nm trong
cc tp tin m n tr ti. Lp java.net.URL c ba phng thc tm kim d liu t mt
URL
public final InputStream openStream() throws java.io.IOException
108
Su tm bi: www.daihoc.com.vn
try{
u =new URL(args[0]);
try{
DataInputStream
dis
new
DataInputStream(u.openStream());
while((thisLine=dis.readLine())!=null)
System.out.println(thisLine);
}
catch(IOException e)
{
System.err.println(e);
}
}
catch(MalformedURLException e){
System.err.println(e);
}
}
}
}
Kt qu thc hin chng trnh
2.4. Cc phng thc tin ch
Lp URL cung cp hai phng thc tin ch thc hin cc thao tc trn URL.
Phng thc sameFile() xc nh xem hai URL c cng tr ti mt ti liu hay khng.
Phng thc toExternalForm() chuyn i mt i tng URL thnh mt xu k t c
s dng trong mt lin kt HTML hoc hp thoi ca trnh duyt.
3. Lp URLConnection
URLConnection l mt lp tru tng biu din mt lin kt tch cc ti mt ti
nguyn c xc nh bi mt URL.
Lp URLConnection c hai mc ch khc nhau nhng lin quan vi nhau.
109
Su tm bi: www.daihoc.com.vn
c cc trng header.
ng lin kt.
110
Su tm bi: www.daihoc.com.vn
System.err.println(e);
}
}
}
Mc d lp URLConnection l mt lp tru tng nhng n c mt phng thc
c ci t. Phng thc l connect(); phng thc ny to mt lin kt ti mt
server; v vy n ph thuc vo kiu dch v m ta ci t (HTTP, FTP,..). Tt nhin, ta c
th cm thy tin li hay cn thit phi np chng cc phng thc ny trong lp.
Rt nhiu cc phng thc v cc trng trong lp URLConnection c l phng
thc protected. Mt khc ta ch c th truy cp ti chng thng qua cc th hin ca lp
URLConnection hoc cc lp con ca n. Rt t khi chng ta khi to v truy cp trc tip
cc i tng; thay vo , mi trng thi gian chy s to ra cc i tng khi cn ty
thuc vo giao thc s dng. Sau lp s c khi to bng cch s dng cc
phng thc forName() v newInstance() ca lp java.lang.Class.
c d liu t mt server
Di y l cc bc ti thiu cn tm kim d liu t mt URL bng cch s
dng i tng URLConnection:
111
Su tm bi: www.daihoc.com.vn
theHtml
new
try{
while((thisLine=theHtml.readLine())!=null)
{
System.out.println(thisLine);
}
}
catch(Exception e)
{
System.err.println(e);
}
}
catch(Exception e)
{
System.err.println(e);
}
}
catch(MalformedURLException e)
{
System.err.println(args[0]+" is not a parseable URL");
112
Su tm bi: www.daihoc.com.vn
System.err.println(e);
}
}
}
}
Phng thc openStream() ca lp URL tr v i tng InputStream t i
tng URLConnection.
113
Su tm bi: www.daihoc.com.vn
Ngoi HTTP, rt t giao thc s dng cc header MIME. Khi vit lp con ca lp
URLConnection, thng thng cn phi np chng cc phng thc ny sao cho chng
tr v cc gi tr c ngha. Phn thng tin quan trng nht bn c th thiu l kiu ni
dung MIME. URLConnection cung cp mt s phng thc tin ch no m tr gip
bn on nhn ra kiu ni dung, da trn tn file ca n hoc mt s byte u tin ca
chnh d liu.
114
Su tm bi: www.daihoc.com.vn
setDefaultRequestProperty(String
property_name,
String
Phng thc ny khng thc hin cng vic g. Nu bn np chng phng thc
ny, bn s s dng n lu tr mt gi tr mc nh cho thuc tnh cho trc.
115
Su tm bi: www.daihoc.com.vn
Contructor trong URLConnection nhn mt tham s l URL thc hin vic lin
kt. Tt c cc tnh cht khc ca mt URLConnection ban u c thit lp l
cc gi tr mc nh ca chng v bn c th thay i chng bng tp cc phng
thc. V constructor c tnh cht protected, ch c cc i tng trong gi java.net
mi c th to ra mt URLConnection. URLConnection l mt lp tru tng v
vy bn ch c th gi constructor ca n t constructor ca mt trong cc lp con
ca n.
Nu bn ang to ra lp con ca lp URLConnection, bn phi gi constructor ny
trong dng u ca constructor ca lp con nh sau:
myURLConnection(URL u)
{
super(u);
}
Nu bn khng a vo mt li gi c th ti constructor trong lp con ca bn,
Java c gng to ra mt constructor khng tham s ca lp cha: v d URLConnection().
V lp URLConnection khng cung cp cc constructor khng tham s, loi b li gi c
th s gy ra li bin dch.
3.4. Cc trng v cc phng thc c lin quan
C mi ba trng trong lp java.net. URLConnection. By trng l cc bin tnh
nh ngha cc gi tr mc nh cho cc th hin ca lp URLConnection. Su phng
thc khc nh ngha trng thi ca mt i tng URLConnection c th. Mt vi
phng thc get v set thay i cc gi tr ca chng.
Hu ht cc phng thc thit lp cc trng a ra ngoi l
IllegalAccessExceptions nu bn gi chng trong khi lin kt ang m. Nhn chung, bn
ch c th thit lp cc thuc tnh ca mt i tng URLConnection trong khi lin kt
ng.
protected URL url
public URL getURL()
116
Su tm bi: www.daihoc.com.vn
URL u;
URLConnection uc;
try{
u = new URL("http://www.ora.com/");
try
{
uc=u.openConnection();
System.out.println(uc.getURL());
}
catch(IOException e)
{
System.err.println(e);
}
}
catch(MalformedURLException e)
{
System.err.println(e);
}
}
}
117
Su tm bi: www.daihoc.com.vn
118
Su tm bi: www.daihoc.com.vn
Chng 6
119
Su tm bi: www.daihoc.com.vn
Client
Server
Request message
Wait
Reply Execution
Request message
120
Su tm bi: www.daihoc.com.vn
Trong ng dng hai tng truyn thng, khi lng cng vic x l c dnh cho
pha client trong khi server ch n gin ng vai tr nh l chng trnh kim sot lung
vo ra gia ng dng v d liu. Kt qu l khng ch hiu nng ca ng dng b gim i do
ti nguyn hn ch ca PC, m khi lng d liu truyn i trn mng cng tng theo. Khi
ton b ng dng c x l trn mt PC, ng dng bt buc phi yu cu nhiu d liu
trc khi a ra bt k kt qu x l no cho ngi dng. Nhiu yu cu d liu cng lm
gim hiu nng ca mng. Mt vn thng gp khc i vi ng dng hai tng l vn
bo tr. Ch cn mt thay i nh i vi ng dng cng cn phi thay i li ton b ng
dng client v server.
Hnh 4.2
2.2. Client/Server ba tng
Ta c th trnh c cc vn ca kin trc client/server hai tng bng cch m
rng kin trc thnh ba tng. Mt kin trc ba tng c thm mt tng mi tc bit vic x l
d liu v tr trung tm.
Hnh 4.3
121
Su tm bi: www.daihoc.com.vn
Theo kin trc ba tng, mt ng dng c chia thnh ba tng tch bit nhau v mt
logic. Tng u tin l tng trnh din thng bao gm cc giao din ha. Tng th hai,
cn c gi l tng trung gian hay tng tc nghip. Tng th ba cha d liu cn cho ng
dng. Tng th ba v c bn l chng trnh thc hin cc li gi hm tm kim d liu
cn thit. Tng trnh din nhn d liu v nh dng n hin th. S tch bit gia chc
nng x l vi giao din to nn s linh hot cho vic thit k ng dng. Nhiu giao din
ngi dng c xy dng v trin khai m khng lm thay i logic ng dng.
Tng th ba cha d liu cn thit cho ng dng. D liu ny c th bao gm bt k
ngun thng tin no, bao gm c s d liu nh Oracale, SQL Server hoc ti liu XML.
2.3. Kin trc n-tng
Kin trc n-tng c chia thnh cc tng nh sau:
Tng giao din ngi dng: qun l tng tc ca ngi dng vi ng dng
Tng logic trnh din: Xc nh cch thc hin th giao din ngi dng v cc yu
cu ca ngi dng c qun l nh th no.
Client
Socket()
Socket()
Bind()
Bind()
Listen()
3
4
Connect()
Accept()
Cc chc
nng gi
v nhn
Cc chc
nng gi
v nhn
Close()
Close()
Hnh 4.4
122
Su tm bi: www.daihoc.com.vn
Gi d liu
Nhn d liu
Ngt lin kt
Gn cng
Nghe d liu n
123
Su tm bi: www.daihoc.com.vn
124
Su tm bi: www.daihoc.com.vn
}
catch(UnknownHostException e){
System.err.println(e);
}
catch(IOException e){
System.err.println(e);
}
}
}
}
public Socket (String host, int port, InetAddress interface, int localPort) throws
IOException, UnknownHostException
Constructor ny to ra mt socket vi thng tin l a ch IP c biu din bi mt
i tng String v mt s hiu cng v thc hin kt ni ti host . Socket kt ni
ti host xa thng qua mt giao tip mng v s hiu cng cc b c xc nh bi
hai tham s sau. Nu localPort bng 0 th Java s la chn mt cng ngu nhin c
sn nm trong khong t 1024 n 65535.
public Socket (InetAddress host, int port, InetAddress interface, int localPort) throws
IOException, UnknownHostException
Constructor ch khc constructor trn ch a ch ca host lc ny c biu din
bi mt i tng InetAddress.
125
Su tm bi: www.daihoc.com.vn
OutputStream
Socket
Chng
trnh
InputStream
Hnh 4.5
4.3. ng Socket
126
Su tm bi: www.daihoc.com.vn
Cc phng thc ny khng thc s ngt lin kt. Tuy nhin, n ch iu chnh lung
kt ni ti n sao cho.
Trong Java 1.4 a thm vo hai phng thc cc lung nhp v lung xut m hay
ng
127
Su tm bi: www.daihoc.com.vn
5. Lp ServerSocket
Lp ServerSocket c mi th ta cn vit cc server bng Java. N c cc
constructor to cc i tng ServerSocket mi, cc phng thc lng nghe cc lin
kt trn mt cng xc nh, v cc phng thc tr v mt Socket khi lin kt c thit lp,
v vy ta c th gi v nhn d liu.
Vng i ca mt server
1. Mt ServerSocket mi c to ra trn mt cng xc nh bng cch s dng
mt constructor ServerSocket.
2. ServerSocket lng nghe lin kt n trn cng bng cch s dng phng
thc accept(). Phng thc accept() phong ta cho ti khi mt client thc hin
mt lin kt, phng thc accept() tr v mt i tng Socket m lin kt
gia client v server.
3. Ty thuc vo kiu server, hoc phng thc getInputStream(),
getOutputStream() hoc c hai c gi nhn cc lung vo ra truyn
tin vi client.
4. server v client tng tc theo mt giao thc tha thun sn cho ti khi ngt
lin kt.
5. Server, client hoc c hai ngt lin kt
6. Server tr v bc hai v i lin kt tip theo.
5.1. Cc constructor
128
Su tm bi: www.daihoc.com.vn
Cng c s dng
129
Su tm bi: www.daihoc.com.vn
Khi bc thit lp lin kt hon thnh, v ta sn sng chp nhn lin kt, cn gi
phng thc accept() ca lp ServerSocket. Phng thc ny phong ta; n dng qu trnh
x l v i cho ti khi client c kt ni. Khi client thc s kt ni, phng thc accept()
tr v i tng Socket. Ta s dng cc phng thc getInputStream() v
getOutputStream() truyn tin vi client.
V d:
try{
ServerSocket theServer = new ServerSocket(5776);
while(true)
{
Socket con = theServer.accept();
PrintStream p = new PrintStream(con.getOutputStream());
p.println(Ban da ket noi toi server nay. Bye-bye now.);
con.close();
}
}
catch(IOException e)
{
System.err.println(e);
}
130
Su tm bi: www.daihoc.com.vn
PrintStream p;
try{
theServer = new ServerSocket(daytimePort);
try{
p= new PrintStream(con.getOutputStream());
p.println(new Date());
con.close();
}
catch(IOException e)
{
theServer.close();
System. err.println(e);
}
}
catch(IOException e)
{
System. err.println(e);
}
}
}
public void close() throws IOException
e)
131
Su tm bi: www.daihoc.com.vn
Cc contructor ServerSocket cho php ta nghe d liu trn cng khng nh trc
bng cch gn s 0 cho cng. Phng thc ny cho php ta tm ra cng m server
ang nghe.
BufferedReader
in=new
InputStreamReader(client.getInputStream()));
BufferedReader(new
V d: Vit chng trnh client lin kt vi mt server. Ngi s dng nhp vo mt dng k
t t bn phm v gi d liu cho server.
import java.net.*;
import java.io.*;
public class EchoClient1
{
public static void main(String[] args)
{
String hostname="localhost";
if(args.length>0)
{
hostname=args[0];
}
PrintWriter pw=null;
BufferedReader br=null;
try{
Socket s=new Socket(hostname,2007);
br=new BufferedReader(new InputStreamReader(s.getInputStream()));
132
Su tm bi: www.daihoc.com.vn
BufferedReader
InputStreamReader(System.in));
user=new
BufferedReader(new
pw=new PrintWriter(s.getOutputStream());
System.out.println("Da ket noi duoc voi server...");
while(true)
{
String st=user.readLine();
if(st.equals("exit"))
{
break;
}
pw.println(st);
pw.flush();
System.out.println(br.readLine());
}
}
catch(IOException e)
{
System.err.println(e);
}
finally{
try{
if(br!=null)br.close();
if(pw!=null)pw.close();
}
catch(IOException e)
{
System.err.println(e);
}
}
}
}
Chng trnh EchoClient c vo hostname t i dng lnh. Tip theo ta to mt
socket vi hostname xc nh trn cng s 2007. Tt nhin cng ny hon ton do ta la
chn sao cho n khng trng vi cng c dch v hot ng. Vic to socket thnh cng
c ngha l ta lin kt c vi server. Ta nhn lung nhp t socket thng qua phng
thc getInputStream() v gn kt n vi cc lung k t v lung m nh lnh:
br=new BufferedReader(new InputStreamReader(s.getInputStream());
Tng t ta ly v lung xut thng qua phng thc getOuputStream() ca socket.
Sau gn kt lung ny vi lung PrintWriter gi d liu ti server
133
Su tm bi: www.daihoc.com.vn
pw=new PrintWriter(s.getOutputStream());
c d liu t bn phm ta gn bn phm vi cc lung nhp nh cu lnh:
BufferedReader user=new BufferedReader(new InputStreamReader(System.in));
Sau i to c cc lung th vn nhn v gi d liu tr thnh vn n
gin l c d liu t cc lung nhp br, user v ghi d liu ln lung xut pw.
To mt i tng ServerSocket
ServerSocket ss=new ServerSocket(port)
Bc 2:
V d: Vit chng trnh server EchoServer phc v chng trnh EchoClient1 vit
bc 5
import java.net.*;
import java.io.*;
public class EchoServer1
{
public final static int DEFAULT_PORT=2007;
public static void main(String[] args)
{ int port=DEFAULT_PORT;
try{
ServerSocket ss=new ServerSocket(port);
134
Su tm bi: www.daihoc.com.vn
Socket s=null;
while(true)
{
try{
s=ss.accept();
PrintWriter
OutputStreamWriter(s.getOutputStream()));
pw=new
BufferedReader
InputStreamReader(s.getInputStream()));
br=new
PrintWriter(new
BufferedReader(new
while(true){
String line=br.readLine();
if(line.equals("exit"))break;
String upper=line.toUpperCase();
pw.println(upper);
pw.flush();
}
}
catch(IOException e)
{
}
finally{
try{
if(s!=null){
s.close();
}
}
catch(IOException e){}
}
}
}
catch(IOException e)
{
}
}
}
135
Su tm bi: www.daihoc.com.vn
Hnh 4.6
Khi ng client
C:\MyJava>start java EchoClient1
Hnh 4.7
136
Su tm bi: www.daihoc.com.vn
{
private Socket socket;
private BufferedReader in;
private PrintWriter out;
public EchoServe (Socket s) throws IOException
{
socket = s;
System.out.println("Serving: "+socket);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// Cho php auto-flush:
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream())), true);
// Nu bt k li gi no trn a ra ngoi l
// th chng trnh gi c trch nhim ng socket. Ngc li tuyn on s
// s ng socket
start();
}
public void run()
{
try
{
while (true)
{
System.out.println("....Server is waiting...");
String str = in.readLine();
if (str.equals(exit) ) break;
System.out.println("Received: " + str);
System.out.println("From: "+ socket);
String upper=str.toUpperCase();
// gi li cho client
out.println(upper);
}
System.out.println("Disconnected with.."+socket);
}
catch (IOException e) {}
finally
{
try
{
137
Su tm bi: www.daihoc.com.vn
socket.close();
}
catch(IOException e) {}
}
}
}
public class TCPServer1
{
static int PORT=0; .
public static void main(String[] args) throws IOException
{
if (args.length == 1)
{
PORT=Integer.parseInt(args[0]); // Nhp s hiu cng t i dng lnh
}
// To mt i tng Server Socket
ServerSocket s = new ServerSocket(PORT);
InetAddress addrs= InetAddress.getLocalHost();
System.out.println("TCP/Server running on : "+ addrs +" ,Port "+s.getLocalPort());
try
{
while(true)
{
// Phong ta cho ti khi c mt lin kt n
Socket socket = s.accept();
try
{
new EchoServe(socket); // To mt tuyn on qun l ring tng lin kt
} catch(IOException e) {
socket.close();
}
}
}
finally {
s.close();
138
Su tm bi: www.daihoc.com.vn
}
}
}
Chng trnh pha client
import java.net.*;
import java.io.*;
public class TCPClient1
{
public static void main(String[] args) throws IOException
{
if (args.length != 2)
{
System.out.println("S dng: java TCPClient hostid port#");
System.exit(0);
}
try
{
InetAddress addr = InetAddress.getByName(args[0]);
Socket socket = new Socket(addr, Integer.parseInt(args[1]));
try
{
System.out.println("socket = " + socket);
BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
// Output is automatically flushed by PrintWriter:
PrintWriter out =new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())),true);
// c dng k t t bn phm
DataInputStream
BufferedInputStream(System.in));
myinput
new
DataInputStream(new
try
{
139
Su tm bi: www.daihoc.com.vn
for(;;)
{
System.out.println("Type anything followed by RETURN, or Exit to
terminate the program.");
String strin=myinput.readLine();
// Quit if the user typed ctrl+D
if (strin.equals("exit")) break;
else
out.println(strin);
String strout = in.readLine();
if ( strin.length()==strout.length())
{ // Compare Both Strings
System.out.println("Received: "+strout);
}
else
System.out.println("Echo bad -- string unequal"+ strout);
} // of for ;;
}
catch (IOException e)
{
e.printStackTrace();
}
// User is exiting
}
finally
{
System.out.println("EOF...exit");
socket.close();
}
}
catch(UnknownHostException e)
{
System.err.println("Can't find host");
System.exit(1);
}
catch (SocketException e)
140
Su tm bi: www.daihoc.com.vn
{
System.err.println("Can't open socket");
e.printStackTrace();
System.exit(1);
}
}
}
9. Kt lun
Chng ta tm hiu cch lp trnh mng cho giao thc TCP. Cc Socket cn c
gi l socket lung v gi v nhn d liu u c tin hnh thng qua vic c ghi cc
lung. Ta c cng tm hiu c ch hot ng ca socket v cch thc lp cc chng
trnh server v client. Ngoi ra, chng ny cng gii thch to sao cn c ci t server
a tuyn on v tm hiu cch thc lp cc chng trnh client/server a tuyn on.
Trong chng tip theo chng ta s hc cch xy dng mt chng trnh client/server cho
giao thc UDP, mt giao thc gn vi giao thc TCP.
141
Su tm bi: www.daihoc.com.vn
Chng 7
Giao thc UDP l giao thc n gin, phi lin kt v cung cp dch v trn tng giao
vn vi tc nhanh. N h tr lin kt mt-nhiu v thng c s dng thng xuyn
trong lin kt mt-nhiu bng cch s dng cc datagram multicast v unicast.
Giao thc IP l giao thc c bn ca Internet. TCP v UDP u l hai giao thc tng
giao thc vn trn c s ca giao thc IP. Hnh di y ch ra cch nh x m hnh OSI
nh x vo kin trc TCP/IP v h giao thc TCP/IP.
Cc tng OSI
H giao thc
TCP
TCP/IP Stack
Tng phin
Tng giao vn
Tng giao vn
Tng mng
Tng Internet
ICMP,IP, IGMP
Tng vt l
Tng mng
TCP
DNS
Tng ng dng
RIP
SMTP
FTP
Tng ng dng
HTTP
UDP
Bng 7.1
1.1. Mt s thut ng UDP
Trc khi kim tra xem giao thc UDP hot ng nh th no, chng ta cn lm quen
vi mt s thut ng. Trong phn di y, chng ta s nh ngha mt s thut ng c bn
c lin quan n giao thc UDP.
Packet
Datagram
171
Su tm bi: www.daihoc.com.vn
MTU
Port
M t
15
53
69
137
138
161
SNMP
Bng 7.2
Multicasting
Multicasting l phng php da trn chun c tnh cht m phn phi cc thng tin
ging nhau n nhiu ngi dng. Multicasting l mt c trng chnh ca giao thc UDP.
Multicasting cho php chng ta truyn tin theo kiu mt nhiu, v d gi tin hoc th in t
ti nhiu ngi nhn, i pht thanh trn Internet, hoc cc chng trnh demo trc tuyn.
1.2. Hot ng ca giao thc UDP
Khi mt ng dng da trn giao thc UDP gi d liu ti mt host khc trn mng,
UDP thm vo mt header c di 8 byte cha cc s hiu cng ngun v ch, cng vi
172
Su tm bi: www.daihoc.com.vn
S dng cc phin. TCP l hng lin kt, cc phin c duy tr gia cc host.
TCP s dng cc ch s phin (session ID) duy tr cc lin kt gia hai host. UDP
khng h tr bt k phin no do bn cht phi lin kt ca n.
Bo mt. TCP c tnh bo mt cao hn UDP. Trong nhiu t chc, firewall v router
cm cc gi tin UDP, iu ny l v cc hacker thng s dng cc cng UDP.
Kim sot lung. UDP khng c kim sot lung; kt qu l, mt ng dng UDP c
thit k ti c th lm gim bng thng ca mng.
1.4. Cc u im ca UDP
Khng cn thit lp lin kt. UDP l giao thc phi lin kt, v th khng cn phi thit
lp lin kt. V UDP khng s dng cc tn hiu handshaking, nn c th trnh c
thi gian tr. chnh l l do ti sao DNS thng s dng giao thc UDP hn l
TCP-DNS s chm hn rt nhiu khi dng TCP.
Kch thc header. UDP ch c 8 byte header cho mi on, ngc li TCP cn cc
header 20 byte, v vy s dng bng thng t hn.
Bng di y tng kt nhng s kc nhau gia hai giao thc TCP v UDP:
Cc c trng
UDP
TCP
Hng lin kt
Khng
S dng phin
Khng
tin cy
Khng
Xc thc
Khng
nh th t
Khng
iu khin lung
Khng
Nhiu hn
Bo mt
173
Su tm bi: www.daihoc.com.vn
Bng 7.3
1.5. Khi no th nn s dng UDP
Rt nhiu ng dng trn Internet s dng UDP. Da trn cc u v nhc im ca
UDP chng ta c th kt lun UDP c ch khi:
S dng cho cc phng thc truyn broadcasting v multicasting khi chng ta mun
truyn tin vi nhiu host.
2. Lp DatagramPacket
Cc datagram UDP a rt t thng tin vo datagram IP. Header UDP ch a tm
byte vo header IP. Header UDP bao gm s hiu cng ngun v ch, chiu di ca d liu
v header UDP, tip n l mt checksum ty chn. V mi cng c biu din bng hai
byte nn tng s cng UDP trn mt host s l 65536. Chiu di cng c biu din bng
hai byte nn s byte trong datagram ti a s l 65536 tr i tm 8 byte dnh cho phn thng
tin header.
174
Su tm bi: www.daihoc.com.vn
175
Su tm bi: www.daihoc.com.vn
public DatagramPacket(byte[] b, int offset, int length, InetAddress dc, int port)
public DatagramPacket(byte[] b, int offset, int length, SocketAddress dc, int port)
public SocketAddress()
176
Su tm bi: www.daihoc.com.vn
Tham s u tin, buffer, l mng cc byte cha d liu t datagram. Tham s th hai
cho bit cch thc m ha xu k t. Cho trc mt DatagramPacket dp c nhn t
mng, ta c th chuyn i n thnh xu k t nh sau:
String s=new String(dp.getData(),ASCII);
Nu datagram khng cha vn bn, vic chuyn i n thnh d liu Java kh khn
hn nhiu. Mt cch tip cn l chuyn i mng byte c tr v bi phng thc
getData() thnh lung ByteArrayInputStream bng cch s dng constructor ny:
public getOffset()
Phng thc ny a ra gii php gi mt khi lng d liu ln. Thay v gi ton
b d liu trong mng, ta c th gi d liu trong tng on ca mng ti mi thi im.
V d on m sau y s gi d liu theo tng on 512 byte:
int offset=0;
DatagramPacket dp=new DatagramPacket(b,offset,512);
int bytesSent=0;
while(bytesSent<b.length)
{
ds.send(dp);
bytesSent+=dp.getLength();
int bytesToSend=b.length-bytesSent;
int size=(bytesToSend>512):512:bytesToSend;
dp.setData(b,byteSent,512);
}
177
Su tm bi: www.daihoc.com.vn
3. Lp DatagramSocket
gi hoc nhn mt DatagramPacket, bn phi m mt DatagramSocket. Trong
Java, mt datagram socket c to ra v c truy xut thng qua i tng
DatagramSocket
public class DatagramSocket extends Object
Tt c cc datagram c gn vi mt cng cc b, cng ny c s dng lng
nghe cc datagram n hoc c t trn cc header ca cc datagram s gi i. Nu ta
vit mt client th khng cn phi quan tm n s hiu cng cc b l bao nhiu
DatagramSocket c s dng gi v nhn cc gi tin UDP. N cung cp cc
phng thc gi v nhn cc gi tin, cng nh xc nh mt gi tr timeout khi s dng
phng php vo ra khng phong ta (non blocking I/O), kim tra v sa i kch thc ti
a ca gi tin UDP, ng socket.
Cc phng thc
InetAddress getLocalAddress(): tr v a ch cc b
4. Nhn cc gi tin
Trc khi mt ng dng c th c cc gi tin UDP c gi bi cc my xa, n
phi gn mt socket vi mt cng UDP bng cch s dng DatagramSocket, v to ra mt
DatagramPacket s ng vai tr nh l mt b cha cho d liu ca gi tin UDP. Hnh v
di y ch ra mi quan h gia mt gi tin UDP vi cc lp Java khc nhau c s dng
x l n v cc ng dng thc t.
178
Su tm bi: www.daihoc.com.vn
packet
c
gi tin
Chuyn gi tin vo
DatagramSocket
DatagramSocket
ng dng UDP
DatagramPacket
Hnh 7.1
Khi mt ng dng mun c cc gi tin UDP, n gi phng thc
DatagramSocket.receive(), phng thc ny sao chp gi tin UDP vo mt DatagramPacket
xc nh. X l ni dung ni tin v tin trnh lp li khi cn
DatagramPacket dp=new DatagramPacket(new byte[256],256);
DatagramSocket ds=new DatagramSocket(2000);
boolean finished=false;
while(!finished)
{
ds.receive(dp);
//X l gi tin
}
ds.close();
Khi x l gi tin ng dng phi lm vic trc tip vi mt mng byte. Tuy nhin nu
ng dng l c vn bn th ta c th s dng cc lp t gi vo ra chuyn i gia
mng byte v lung stream v reader. Bng cch gn kt lung nhp ByteArrayInputStream
vi ni dung ca mt datagram v sau kt ni vi mt kiu lung khc, khi bn c th
truy xut ti ni dung ca gi UDP mt cch d dng. Rt nhiu ngi lp trnh thch dng
cc lung vo ra I/O x l d liu, bng cch s dng lung DataInputStream hoc
BufferedReader truy xut ti ni dung ca cc mng byte.
InputStream
DatagramPacket
a ch IP
ByteArrayInputStream
a ch cng
D liu gi tin
byte[]={,}
hoc
InputStreamReader
179
Su tm bi: www.daihoc.com.vn
Hnh 7.2
V d, gn kt mt lung DataInputStream vi ni dung ca mt DatagramPacket,
ta s dng on m sau:
ByteArrayInputStream bis=new ByteArrayInputStream(dp.getData());
DataInputStream dis=new DataInputStream(bis);
//c ni dung ca gi tin UDP
5. Gi cc gi tin
Lp DatagramSocket cng c s dng gi cc gi tin. Khi gi gi tin, ng dng
phi to ra mt DatagramPacket, thit lp a ch v thng tin cng, v ghi d liu cn truyn
vo mng byte. Nu mun gi thng tin phc p th ta cng bit a ch v s hiu cng
ca gi tin nhn c. Mi khi gi tin sn sng gi, ta s dng phng thc send() ca
lp DatagramSocket gi gi tin i.
DatagramSocket
Gn cng UDP
Gi DatagramPacket
bng cch s dng
DatagramSocket
ng dng
UDP
Packet
Xy dng gi tin
DatagramPacket
Hnh 7.3
//Socket lng nghe cc gi tin n trn cng 2000
DatagramSocket socket = new DatagramSocket(2000);
DatagramPacket packet = new DatagramPacket (new byte[256], 256);
packet.setAddress ( InetAddress.getByName ( somehost ) );
packet.setPort ( 2000 );
boolean finished = false;
while !finished )
{
// Ghi d liu vo vng m buffer
180
Su tm bi: www.daihoc.com.vn
.........
socket.send (packet);
// Thc hin hnh ng no , chng hn nh c gi tin khci hoc kim tra xemor
// cn gi tin no cn gi i hay khng
.........
}
socket.close();
Client nhn thng tin phn hi tr li t Server v hin th thng tin trn mn hnh
Server thc hin cc thao tc sau:
181
Su tm bi: www.daihoc.com.vn
}
else
{
hostname="127.0.0.1";
}
try{
InetAddress dc=InetAddress.getByName(hostname);
BufferedReader
InputStreamReader(System.in));
userInput=new
BufferedReader(new
dp=new
ds.send(dp);
dp.setLength(65507);
ds.receive(dp);
ByteArrayInputStream
bis
=new
ByteArrayInputStream(dp.getData());
BufferedReader
dis
=new
BufferedReader(new
InputStreamReader(bis));
System.out.println(dis.readLine());
}
}
catch(UnknownHostException e)
{
System.err.println(e);
}
catch(IOException e)
{
System.err.println(e);
}
}
182
Su tm bi: www.daihoc.com.vn
import java.net.*;
import java.io.*;
public class UDPServer
{
public final static int CONG_MAC_DINH=9;
public static void main(String args[])
{
int port=CONG_MAC_DINH;
try{
}
catch(Exception e){
port =Integer.parseInt(args[1]);
}
try{
DatagramSocket ds =new DatagramSocket(port);
DatagramPacket
dp=new
DatagramPacket(new
byte[65507],65507);
while(true){
ds.receive(dp);
ByteArrayInputStream
bis
=new
ByteArrayInputStream(dp.getData());
BufferedReader
dis
=new
BufferedReader(new
InputStreamReader(bis));
String s=dis.readLine();
System.out.println(s);
s.toUpperCase();
dp.setData(s.getBytes());
183
Su tm bi: www.daihoc.com.vn
dp.setLength(s.length());
dp.setAddress(dp.getAddress());
dp.setPort(dp.getPort());
ds.send(dp);
}
}
catch(UnknownHostException e)
{
System.err.println(e);
}
catch(IOException e)
{
System.err.println(e);
}
}
}
C:\>start java UDPServer
C:\>start java UDPClient
Hnh 7.4
Chng trnh Client/Server s dng a tuyn on
import java.net.*;
import java.io.*;
public abstract class UDPServer extends Thread
{
private int bufferSize;
protected DatagramSocket ds;
184
Su tm bi: www.daihoc.com.vn
185
Su tm bi: www.daihoc.com.vn
186
Su tm bi: www.daihoc.com.vn
187
Su tm bi: www.daihoc.com.vn
188
Su tm bi: www.daihoc.com.vn
catch(IOException e)
{
System.err.println(e);
}
}
}
Client Echo
import java.net.*;
import java.io.*;
public class UDPEchoClient
{
public final static int DEFAULT_PORT=7;
public static void main(String[] args)
{
String hostname="localhost";
int port= DEFAULT_PORT;
if(args.length>0)
{
hostname=args[0];
}
try{
InetAddress ia=InetAddress.getByName(args[0]);
SenderThread sender=new SenderThread(ia,DEFAULT_PORT);
sender.start();
ReceiverThread receiver=new ReceiverThread(sender.getSocket());
receiver.start();
}
catch(UnknownHostException e)
{
System.err.println(e);
}
catch(SocketException e)
{
189
Su tm bi: www.daihoc.com.vn
System.err.println(e);
}
}
}
7. Kt lun
Trong chng ny, chng ta tho lun nhng khi nim cn bn v giao thc
UDP v so snh n vi giao thc TCP. Chng ta cp ti vic ci t cc chng trnh
UDP trong Java bng cch s dng hai lp DatagramPacket v DatagramSocket. Mt s
chng trnh mu cng c gii thiu bn c tham kho v gip hiu su hn v cc
vn l thuyt.
190
Su tm bi: www.daihoc.com.vn
Chng 8
2. Mc ch ca RMI
3. Mt s thut ng
Cng nh tt c cc chng trnh khc trong Java, chng trnh RMI cng c
xy dng bi cc giao tip v lp. Giao tip nh ngha cc phng thc v cc lp thc
thi cc phng thc . Ngoi ra lp cn thc hin mt vi phng thc khc. Nhng
ch c nhng phng thc khai bo trong giao tip tha k t giao tip Remote hoc cc
159
Su tm bi: www.daihoc.com.vn
Giao tip Remote: Mt giao tip khai bo cc phng thc cho php gi t xa.
Trong Java giao tip Remote c cc c im sau:
o
JVM
JVM
Local Object
- Data
- Method
Remote Object
- Data
- Remote Method
Hnh 8.1
5. C ch hot ng ca RMI
Cc h thng RMI phc v cho vic truyn tin thng c chia thnh hai loi:
client v server. Mt server cung cp dch v RMI, v client gi cc phng thc trn i
tng ca dch v ny.
Server RMI phi ng k vi mt dch v tra tm v ng k tn. Dch v ny cho
php cc client truy tm chng, hoc chng c th tham chiu ti dch v trong mt m
hnh khc. Mt chng trnh ng vai tr nh vy c tn l rmiregistry, chng trnh ny
chy nh mt tin trnh c lp v cho php cc ng dng ng k dch v RMI hoc
nhn mt tham chiu ti dch v c t tn. Mi khi server c ng k, n s ch
cc yu cu RMI t cc client. Gn vi mi ng k dch v l mt tn c biu din
bng mt xu k t cho php cc client la chn dch v thch hp. Nu mt dch v
chuyn t server ny sang mt server khc, client ch cn tra tm trnh ng k tm ra
v tr mi. iu ny lm cho h thng c kh nng dung th li-nu mt dch v khng kh
dng do mt my b sp, ngi qun tr h thng c th to ra mt th hin mi ca dch
v trn mt h thng khc v ng k n vi trnh ng k RMI.
160
Su tm bi: www.daihoc.com.vn
Hnh 8.2
Ti pha server, i tng skeleton c nhim v lng nghe cc yu cu RMI n v
truyn cc yu cu ny ti dch v RMI. i tng skeleton khng cung cp bn ci t
ca dch v RMI. N ch ng vai tr nh l chng trnh nhn cc yu cu, v truyn cc
yu cu. Sau khi ngi pht trin to ra mt giao tip RMI, th anh ta phi cung cp mt
phin bn ci t c th ca giao tip. i tng ci t ny c gi l i tng
skeleton, i tng ny gi phng thc tng ng v truyn cc kt qu cho i tng
stub trong client RMI. M hnh ny lm cho vic lp trnh tr nn n gin, v skeleton
c tch bit vi ci t thc t ca dch v. Tt c nhng g m ngi pht trin dch
v cn quan tm l m lnh khi to ( ng k dch v v chp nhn dch v), v cung
cp chng trnh ci t ca giao tip dch v RMI.
Vi cu hi cc thng ip c truyn nh th no, cu tr li tng i n
gin. Vic truyn tin din ra gia cc i tng stub v skeleton bng cch s dng cc
socket TCP. Mi khi c to ra, skeleton lng nghe cc yu cu n c pht ra bi
cc i tng stub. Cc tham s trong h thng RMI khng ch hn ch i vi cc kiu
d liu nguyn t-bt k i tng no c kh nng tun t ha u c th c truyn
nh mt tham s hoc c tr v t phng thc t xa. Khi mt stub truyn mt yu
cu ti mt i tng skeleton, n phi ng gi cc tham s (hoc l cc kiu d liu
nguyn t, cc i tng hoc c hai) truyn i, qu trnh ny c gi l marshalling.
Ti pha skeleton cc tham s c khi phc li to nn cc kiu d liu nguyn t
v cc i tng, qu trnh ny cn c gi l unmarshaling. thc hin nhim v
161
Su tm bi: www.daihoc.com.vn
JVM
Skeleton
Stub
Client
Object
JVM
Client
Remote
Object
Server
Hnh 8.3
A2
Computer C
C1Skel
Computer A A1
C1- stub
B1_stub
C1
B1Skel
B1
Computer B
Hnh 8.4
Ta c i tng C1 c ci t trn my C. Trnh bin dch rmic.exe s to ra
hai lp trung gian C1_Skel v C1_Stub. Lp C1_Stub s c em v my A. Khi
A1 trn my A gi C1 n s chuyn li gi n lp C1_Stub, C1_Stub chu trch
nhim ng gi tham s, chuyn vo khng gian a ch tng thch vi i tng
C1 sau gi phng thc tng ng.
162
Su tm bi: www.daihoc.com.vn
ng logic
Chng trnh Server
Skeleton
Stub
Tng giao vn
Network
Tng giao vn
Hnh 8.5
i vi ngi lp trnh, client dng nh truyn tin trc tip vi server. Thc t,
chng trnh client ch truyn tin vi i tng stub l i tng y quyn ca i tng
thc s nm trn h thng t xa. Stub chuyn cuc m thoi cho tng tham chiu, tng
ny truyn tin trc tip vi tng giao vn. Tng giao vn trn client truyn d liu i trn
mng my tnh ti tng giao vn bn pha server. Tng giao vn bn pha server truyn
tin vi tng tham chiu, tng ny truyn tin mt phn ca phn mm server c gi l
skeleton. Skeleton truyn tin vi chnh server. Theo hng khc t server n client th
lung truyn tin c i theo chiu ngc li.
Cch tip cn c v phc tp nhng ta khng cn quan tm n vn ny. Tt c
u c che du i, ngi lp trnh ch quan tm n vic lp cc chng trnh c kh
nng gi phng thc t xa ging nh i vi chng trnh cc b.
Trc khi c th gi mt phng thc trn mt i tng xa, ta cn mt tham
chiu ti i tng . nhn c tham chiu ny, ta yu cu mt trnh ng k tn
rmiregistry cung cp tn ca tham chiu. Trnh ng k ng vai tr nh l mt DNS nh
cho cc i tng t xa. Mt client kt ni vi trnh ng k v cung cp cho n mt URL
ca i tng t xa. Trnh ng k cung cp mt tham chiu ti i tng v client s
dng tham chiu ny gi cc phng thc trn server.
Trong thc t, client ch gi cc phng thc cc b trn trong stub. Stub l mt
i tng cc b thc thi cc giao tip t xa ca cc i tng t xa.
163
Su tm bi: www.daihoc.com.vn
Tng tham chiu t xa thc thi giao thc tng tham chiu t xa c th. Tng ny
c lp vi cc i tng stub v skeleton c th. Tng tham chiu t xa c nhim v
hiu tng tham chiu t xa c ngha nh th no. i khi tng tham chiu t xa c th
tham chiu ti nhiu my o trn nhiu host.
Tng giao vn gi cc li gi trn Internet. Pha server, tng giao vn lng nghe
cc lin kt n. Trn c s nhn li gi phng thc, tng giao vn chuyn li gi cho
tng tham chiu trn server. Tng tham chiu chuyn i cc tham chiu c gi bi
client thnh cc tham chiu cho cc my o cc b. Sau n chuyn yu cu cho
skeleton. Skeleton c tham s v truyn d liu cho chng trnh server, chng trnh
server s thc hin li gi phng thc thc s. Nu li gi phng thc tr v gi tr,
gi tr c gi xung cho skeleton, tng tham chiu xa, v tng giao vn trn pha
server, thng qua Internet v sau chuyn ln cho tng giao vn, tng tham chiu xa,
stub trn pha client.
7. Ci t chng trnh
lp mt h thng client/server bng RMI ta s dng ba gi c bn sau: java.rmi,
java.rmi.server, java.rmi.registry. Gi java.rmi bao gm cc giao tip, cc lp v cc ngoi
l c s dng lp trnh cho pha client. Gi java.rmi.server cung cp cc giao tip,
cc lp v cc ngoi l c s dng lp trnh cho pha server. Gi java.rmi.registry
c cc giao tip, cc lp v cc ngoi l c s dng nh v v t tn cc i
tng.
7.1. Ci t chng trnh pha Server
minh ha cho k thut lp trnh RMI y tc gi xin gii thiu cch lp mt
chng trnh FileServer n gin cho php client ti v mt tp tin.
Bc 1: c t giao tip Remote
import java.rmi.*;
public interface FileInterface extends Remote
{
public byte[] downloadFile(String fileName)throws RemoteException;
}
Bc 2: Vit lp thc thi giao tip
import java.rmi.*;
import java.rmi.server.*;
import java.io.*;
public class FileImpl extends UnicastRemoteObject implements FileInterface
{
private String name;
public FileImpl(String s)throws RemoteException
{
super();
name=s;
}
public byte[] downloadFile(String fileName)throws RemoteException
{
164
Su tm bi: www.daihoc.com.vn
try{
File file=new File(fileName);
//To mt mng b lu ni dung ca tp
byte b[]=new byte[(int)file.length()];
BufferedInputStream
FileInputStream(fileName));
bis=new
BufferedInputStream(new
bis.read(b,0,b.length);
bis.close();
return b;
}
catch(Exception e)
{
System.err.println(e);
return null;
}
}
}
Bc 3: Vit chng trnh pha server
import java.io.*;
import java.rmi.*;
import java.net.*;
public class FileServer
{
public static void main(String[] args) throws Exception
{
FileInterface fi=new FileImpl("FileServer");
InetAddress dc=InetAddress.getLocalHost();
Naming.rebind("rmi://"+dc.getHostAddress()+"/FileServer",fi);
System.out.println("Server ready for client requests...");
}
}
Bc 4: Ci t client
import java.rmi.*;
import java.io.*;
public class FileClient
{
165
Su tm bi: www.daihoc.com.vn
bos=new
BufferedOutputStream(new
bos.write(filedata,0,filedata.length);
bos.flush();
bos.close();
}
}
Pha Client
FileInterface.class
FileImpl_Stub.class
FileClient.class
Bng 8.1
166
Su tm bi: www.daihoc.com.vn
y ta gi lp chng trnh trn cng mt my. Vic trin khai trn mng khng
c g kh khn ngoi vic cung cp hostname hoc a ch IP ca server cung cp dch v
Khi ng trnh ng k:
C:\MyJava>start rmiregistry
Khi ng server
C:\MyJava>start java FileServer
Khi ng client
C:\MyJava>java FileClient D:\RapidGet.exe localhost
Public
static
Remote
lookup(String
url)throws
RemotException,
NotBoundException, AccessException, MalformedURLException
167
Su tm bi: www.daihoc.com.vn
Phng thc ny ging nh phng thc bind() ngoi tr vic l n gn URL cho
i tng ngay c khi URL c gn.
Bind() gn mt tn vi mt i tng t xa c th
168
Su tm bi: www.daihoc.com.vn
import java.net.*;
import java.rmi.registry.*;
public class FileServer
{
public static void main(String[] args) throws Exception
{
FileInterface fi=new FileImpl("FileServer");
InetAddress dc=InetAddress.getLocalHost();
LocateRegistry.createRegistry(1099);
Naming.bind("rmi://"+dc.getHostAddress()+"/FileServer",fi);
System.out.println("Server ready for client requests...");
}
}
Nh vy khi thc thi chng trnh ta khng cn phi khi ng trnh ng k v vic
to ra trnh ng k v khi ng n c tin hnh ngay trong chng trnh pha
server.
Protected RemoteServer()
Protected RemoteServer(RemoteRef r)
Nhn cc thng tin v client
11.3. Lp UnicastRemoteObject
Lp UnicastRemoteObject l mt lp con c th ca lp RemoteServer. to ra
mt i tng xa, ta phi tha k lp UnicastRemoteServer v khai bo lp ny thc
thi giao tip Remote.
12. Kt lun
RMI l mt cng ngh phn tn cho php cc phng thc trn cc my o Java
c gi t xa. y l cch n gin truyn tin gia mt ng dng ny vi ng dng
khc so vi truyn tin trc tip vi TCP socket, cch truyn tin ny i hi c hai pha u
s dng cng mt giao thc. Thay v vit cc chng trnh ci t giao thc, nhng
ngi pht trin c th tng tc vi cc phng thc i tng c nh ngha bi
mt giao tip dch v RMI. Mi khi c c mt tham chiu ti i tng t xa, tham
169
Su tm bi: www.daihoc.com.vn
170
Su tm bi: www.daihoc.com.vn
Chng 9
JDBC cn n gin
Giao din lp trnh ng dng mc SQL ngha l JDBC cho php ta xy dng cc
lnh SQL v nhng cc lnh SQL bn trong cc li gi Java API. Ni tm li, v c bn ta
vn s dng SQL nhng JDBC cho php ta dch mt cch tri chy gia th gii c s
d liu v th gii ng dng Java. Kt qu ca bn t c s d liu, c tr v di
dng cc i tng Java v nu c vn khi truy xut n s a ra cc ngoi l.
JDBC API chun ha:
o Xc nh s ct
o Tra tm cc metadata.
JDBC API cha chun ha c php SQL. JDBC khng phi l SQL nhng. Lp
JDBC nm trong gi java.sql. N bao gm hai phn:
JDBC API l mt giao din lp trnh ng dng vit bng ngn ng Java thun ty.
2. Cu trc ca JDBC
JDBC thc hin cc mc tiu ca n thng qua mt tp hp cc giao tip JDBC,
mi giao tip thc c thc hin bi tng nh sn xut. Tp hp cc lp thc thi cc
giao tip JDBC cho mt m t c s d liu c th c gi l mt trnh iu khin
JDBC. Khi xy dng mt ng dng c s d liu, ta khng phi xem xt n tt c cc
lp c s. JDBC che du cc chi tit ca tng c s d liu v nh vy ta ch cn quan
tm n ng dng ca mnh.
Su tm bi: www.daihoc.com.vn
Hnh 9.1
Cc c s d liu v cc trnh iu khin
Hnh 9.2
2.1. Kiu 1
Cc trnh iu khin ny s dng mt cng ngh cu ni truy xut ti mt c s
d liu. Cu ni JDBC-ODBC c bt u a vo t JDK 1.2 l mt v d in hnh
cho kiu driver ny. N cung cp mt gateway ti API ODBC. Ci t ca API ny thc
hin truy xut ti c s d liu thc t. Gii php cu ni thng yu cu phn mm phi
c ci t trn h thng client, ngha l chng khng phi l cc gii php tt cho cc
ng dng m khng cho php ci t phn mm trn client.
Cu ni JDBC-ODBC cung cp cch truy xut thng qua mt hay nhiu trnh iu khin
ODBC.
u im:
y l mt cch tip cn tt hc JDBC.
Hu ch cho cc cng ty ci t trnh iu khin ODBC trn tng my
client.
o y l cch duy nht truy xut c ti cc c s d liu trn my tnh
bn mc thp.
Nhc im:
o
o
o
o
o
2.2. Kiu 2
Cc trnh iu khin kiu 2 l cc trnh iu khin API-trnh iu khin gc. iu
ny ngha l m Java gi cc phng thc C hoc C++ c cung cp bi tng nh sn
xut h qun tr c s d liu thc hin truy xut ti c s d liu. Gii php ny vn
Su tm bi: www.daihoc.com.vn
u im:
Nhc im
o
2.3. Kiu 3
Cc trnh iu khin kiu 3 cung cp cho client mt API mng chung, API ny sau
chuyn thnh thao tc truy xut c s d liu mc server. Mt khc, trnh iu khin
JDBC trn client s dng cc socket gi mt ng dng trung gian (middleware) trn
server chuyn cc yu cu ca client thnh mt API c th i vi tng server. Kt
qu l trnh iu khin ny c bit linh hot, v n khng cn phi c phn mm ci t
trn client v mt trnh iu khin c th cung cp kh nng truy xut ti nhiu c s d
liu.
Java Middleware thun tu
Trnh iu khin Java thun ty cho cc chng trnh trung gian c s d liu
dch cc li gi JDBC cho giao thc ca nh sn xut phn mm trung gian, trnh iu
khin ny sau c chuyn cho mt giao thc gn vi c s d liu c th bi phn
mm server trung gian.
u im:
o
Nhc im:
o
2.4. Kiu 4
S dng cc giao thc mng c tch hp sn vo engine c s d liu, cc
driver kiu 4 truyn tin trc tip vi c s d liu bng cch s dng socket Java. y l
trnh iu khin Java thun ty nht. Kiu trnh iu khin ny thng do nh sn xut c
s d liu cung cp.
Trnh iu khin Java thun ty ti kt ni trc tip vi c s d liu chuyn cc
li gi JDBC thnh cc gi tin c truyn i trn mng theo mt khun dng c s
dng bi c s d liu c th. Cho php mt li gi trc tip t my client ti c s d
liu.
u im:
Su tm bi: www.daihoc.com.vn
Nhc im
o
3. Kt ni c s d liu
Hnh 10.3
Hnh v trn cho thy cch thc m mt ng dng JDBC truyn tin vi mt hoc
nhiu c s d liu m khng cn bit n cc chi tit c lin quan n ci t driver cho
c s d liu . Mt ng dng s dng JDBC nh l mt giao tip, thng qua n
truyn tt c cc yu cu lin quan n c s d liu ca n.
Khi ta vit cc applet hay ng dng c s d liu, ta c th cung cp cc thng tin
c th v trnh iu khin JDBC l URL c s d liu. Thm ch ta c th nhp vo URL
c s d liu cho ng dng v applet vo thi gian chy di dng cc tham s.
JDBC l gi kt ni c s d liu bao gm giao din lp trnh ng dng cn bn
Java API. Java cung cp mt interface c lp vi c s d liu m mt kt ni ti c
s d liu, bng cch pht ra cc li gi SQL ti c s d liu v nhn v kt qu l mt
tp hp cc d liu. gc k thut, JDBC ng vai tr nh l mt chng trnh ci
t giao tip mc li gi SQL c nh ngha bi X/Open v c h tr bi hu ht
cc nh cung cp c s d liu quan h. thc hin giao tc vi mt kiu c s d liu
c th, ta cn phi c mt trnh iu khin JDBC ng vai tr nh l mt cu ni gia cc
li gi phng thc JDBC v interface c s s liu.
3.1. DriverManager
DriverManager cung cp phng tin np cc trnh iu khin c s d liu vo
mt ng dng Java hoc mt applet; n chnh l cch JDBC thit lp mt lin kt vi
c s d liu. ng dng Java, trc tin to mt i tng DriverManager, kt ni vi c
s d liu bng cch gi phng thc tnh getConnection() ca lp DriverManager, vi
tham chiu truyn vo ging nh mt URL c gi l URL c s d liu. DriverManager
tm kim mt driver h tr vic kt ni trong tp hp cc driver hin c. Nu tm thy
driver n truyn a ch c s d liu cho driver v yu cu driver to ra mt kt ni. Kt
ni ti c s d liu c tr v di dng mt i tng Connection.
Tt c cc driver JDBC cung cp mt ci t giao tip java.sql.Driver. Khi mt
DriverManager c to ra, n ti mt tp hp cc driver c xc nh bi thuc tnh
ca java.sql.Driver. Driver c np vo thi gian chy Java, n c nhim v to ra mt
i tng v ng k i tng vi DriverManager. Cc driver cn cho ng dng c th
c np bi phng thc Class.forName()
Su tm bi: www.daihoc.com.vn
Driver myDriver=(Driver)Class.forName(specialdb.Driver);
3.2. Connection
Mi khi cc driver cn thit c np bi DriverManager, s c mt lin kt vi mt
c s d liu c to ra nh phng thc getConnection() ca lp DriverManager. C
s d liu cn lm vic c xc nh thng qua mt tham s String ng vai tr nh l
a ch tham chiu ti c s d liu. Khng c mt khun dng chun no cho a ch xu
c s d liu; DriverManager truyn xu a ch cho tng driver JDBC c np v
xem n c hiu v h tr kiu c s d liu c xc nh.
Jdbc:odbc:financedata
Trong financedata l ngun c s d liu cc b. truy xut ti mt c s d
liu t xa t mt my client ta c th dng c php sau:
Jdbc:odbc:drvr://dataserver.foobar.com:500/financedata.
c t JDBC API khuyn co mt URL c s d liu nn c dng nh sau:
Jdbc:<sub-protocol>:<sub-name>
Trong <sub-protocol> xc nh dch v kt ni c s d liu v <sub-name>
cung cp tt c cc thng tin cn thit dch v tm c s d liu v kt ni ti n.
Phng thc getConnection() trn DriverManager hoc l tr v mt i tng
Connection biu din lin kt ti c s d liu c ch ra, hoc l a ra ngoi l
nu lin kt khng c thit lp.
3.3. Statement
Giao tip Connection cho php ngi s dng to ra mt cu lnh truy vn ti c
s d liu. Cc lnh truy vn c biu din di dng cc i tng Statement hoc
cc lp con ca n. Giao tip Connection cung cp ba phng thc to ra cc lnh
truy vn c s d liu l: createStatement(), prepareStatement(), v precpareCall().
createStatement() c s dng cho cc lnh SQL n gin khng lin quan n cc
tham s. Phng thc ny tr v mt i tng Statement c s dng pht tra cc
truy vn SQL ti c s d liu, bng cch s dng phng thc executeQuery().
Phng thc ny chp nhn mt lnh SQL nh l mt xu v cc kt qu tr v l
di dng mt i tng ResultSet. Cc phng thc khc c trong giao tip Statement
pht ra cc lnh SQL ti cc c s d liu l phng thc execute(), phng thc
ny c s dng cho cc truy vn SQL v tr v nhiu resultset v phng thc
executeUpdate() c s dng pht ra cc lnh INSERT, UPDATE, hoc DELETE.
Ngoi giao tip Statement c bn, mt i tng Connection c th c s dng
to ra mt i tng PreparedStatement v cc CallableStatement biu din cc th
tc stored procedure trong c s d liu. Mt lnh SQL c th lin quan n nhiu tham
s u vo, hoc mt lnh m ta mun x l nhiu ln, c th c to ra bng cch s
dng lnh prepareStatement() trn i tng Connection, phng thc ny tr v i
tng PreparedStatement. Lnh SQL c truyn cho phng thc prepareStatement()
l mt lnh c bin dch trc v vy vic x l nhiu ln mt lnh s hiu qu hn.
Lp con ca lp Statement h tr vic thit lp cc gi tr ca cc tham s u vo c
bin dch trc thng qua cc phng thc setXXX(). i tng PreparedStatement c
phng thc executeQuery() khng cn tham s, thay vo n x l cc lnh SQL
c bin dch trc trn c s d liu. Ch rng khng phi tt c cc nh sn xut
c s d iu hoc cc driver JDBC u h tr cc lnh c bin dch trc.
3.4. ResultSet
Cc dng d liu c tr v t vic x l mt lnh c biu din bng mt
ResultSet trong JDBC. V d, phng thc executeQuery() ca Statement tr v mt i
tng ResultSet. i tng ResultSet cung cp cc cch duyt qua cc dng d liu
c tr v t vic x l cu lnh truy vn SQL thng qua phng thc next() ca n;
cc trng d liu trong mi hng c th c tm kim thng qua cc tn hoc ch mc
ct bng cch s dng phng thc getXXX(). Ngi dng cn phi bit kiu d liu
Su tm bi: www.daihoc.com.vn
Kiu ca Java
Hm getXXX()
CHAR
String
getString()
VARCHAR
String
getString()
LONGVARCHAR
String
getString()
NUMBERIC
java.math.BigDecimal
getBigDecimal()
DECIMAL
java.math.BigDecimal
getBigDecimal()
BIT
Boolean (boolean)
getBoolean()
TINYINT
Integer (byte)
getByte()
SMALLINT
Integer (short)
getShort()
INTEGER
Integer (int)
getInt()
BIGINT
Long (long)
getLong()
REAL
Float (float)
getFloat()
FLOAT
Double (double)
getDouble()
DOUBLE
Double (double)
getDouble()
BINARY
byte[]
getBytes()
VARBINARY
byte[]
getBytes()
LONGVARBINARY
byte[]
getBytes()
DATE
java.sql.Date
getDate()
TIME
java.sql.Time
getTime()
TIMESTAMP
java.sql.Timestamp
getTimestamp()
Bng 10.1
4. Lp DatabaseMetaData
Mun x l tt cc d liu ca mt CSDL th chng ta phi bit c nhng thng
tin chung v cu trc ca CSDL nh: h QTCSDL, tn ca cc bng d liu, tn gi
ca cc trng d liu, v.v .
bit c nhng thng tin chung v cu trc ca mt h CSDL, chng ta c th
s dng giao din java.sql.DatabaseMetaData thng qua hm getMetaData().
DatabaseMetaData dbmeta = con.getMetaData();
trong , con l i tng kt ni c to ra bi lp Connection.
Lp DatabaseMetaData cung cp mt s hm c np chng xc nh c
nhng thng tin v cu hnh ca mt CSDL. Mt s hm cho li i tng ca String
(getURL()), mt s tr li gi tr logic (nullsAreSortedHigh()) hay tr li gi tr nguyn nh
Su tm bi: www.daihoc.com.vn
5. Lp ResultSetMetaData
Giao din ResultSetMetaData cung cp cc thng tin v cu trc c th ca
ResultSet, bao gm c s ct, tn v gi tr ca chng. V d sau l mt chng trnh
hin th cc kiu v gi tr ca tng trng ca mt bng d liu.
V d 9.3 Chng trnh hin th mt bng d liu.
import java.sql.*;
import java.util.StringTokenizer;
public class TableViewer {
final static String jdbcURL = "jdbc:odbc:StudentDB";
final static String jdbcDriver =
"sun.jdbc:odbc:JdbcOdbcDriver";
final static String table = "STUDENT";
public static void main(java.lang.String[]args) {
System.out.println("---Table Viewer ---");
try {
Class.forName(jdbcDriver);
Connection con =
DriverManager.getConnection(jdbcURL, "", "");
Statement stmt = con.createStatement();
// c ra c bng Student v a vo i tng rs
ResultSet rs = stmt.executeQuery("SELECT * FROM " + table);
// c ra cc thng tin v rs
ResultSetMetaData rsmd = rs.getMetaData();
// Xc nh s ct ca rsmd
int colCount = rsmd.getColumnCount();
for(int col = 1; col <= colCount; col++)
{
// In ra tn v kiu ca tng trng d liu trong rsmd
System.out.print(rsmd.getColumnLabel(col));
System.out.print(" (" + rsmd.getColumnTypeName(col) + ")");
if(col < colCount)
System.out.print(", ");
}
System.out.println();
while(rs.next()){
// In ra dng d liu trong rsmd
for(int col = 1; col <= colCount; col++)
Su tm bi: www.daihoc.com.vn
{
System.out.print(rs.getString(col));
if(col < colCount)
System.out.print(" ");
}
System.out.println();
}
rs.close();
stmt.close();
con.close();
}
catch (ClassNotFoundException e) {
System.out.println("Unable to load database driver class");
}
catch (SQLException se) {
System.out.println("SQL Exception: " + se.getMessage());
}
}
}
try{
Class.forName(oracle.jdbc.driver.OracleDriver);
}
catch(ClassNotFoundException e)
{
System.out.println(Loi nap trinh dieu khien:+e);
}
Bc 2: Xc nh URL c s d liu
String host=dbhost.yourcompany.com;
String dbName=someName;
int port=1234;
String oracaleURL=jdbc:oracle:thin:@+host+:+port+dbName;
Bc 3: Thit lp lin kt
String username=hoan_td2001;
String password=topsecret;
Connection con=DriverManager.getConnecton(oracleURL,username,password);
Su tm bi: www.daihoc.com.vn
Bc 4: To ra mt i tng Statement
Statement s=con.createStatement();
Bc 5: X l truy vn
while(rs.next())
{
System.out.println(rs.getString(1)+ +
rs.getString(2)+ +
rs.getString(3));
}
Ct u tin c ch mc l 1 ch khng phi l 0.
Bc 7: ng lin kt
con.close();
Cc v d v kt ni c s d liu t ng dng Java.
V d v kt ni kiu 1:
import java.sql.*;
class DBOracle1
{
public static
SQLException
{
void
main(String
args[])throws
ClassNotFoundException,
try{
//Co the dung lenh nay de tai driver
Class.forName("oracle.jdbc.OracleDriver");
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
//Lien ket toi co so du lieu
Connection
conn
DriverManager.getConnection("jdbc:oracle:oci8:@HOAN", "scott", "tiger");
Su tm bi: www.daihoc.com.vn
System.out.println(rst.getColumnName(i)+" "+rst.getColumnTypeName(i));
while(rset.next( ))
{
System.out.println(rset.getString("empno"));
System.out.println(rset.getString("ename"));
}
rset.close( );
stmt.close( );
conn.close( );
}
catch(Exception e)
{
System.err.println("Ex : "+e);
}
}
}
V d v kt ni kiu 2:
import java.io.*;
import java.sql.*;
import java.text.*;
public class DBOracle2 {
Connection conn;
public DBOracle2( )
{
try
{
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection conn = DriverManager.getConnection("jdbc:oracle:oci8:@HOAN",
"scott", "tiger");
}
catch (SQLException e)
{
System.err.println(e.getMessage( ));
e.printStackTrace( );
}
}
public static void main(String[] args)throws Exception, IOException
10
Su tm bi: www.daihoc.com.vn
{
new DBOracle2().process( );
}
public void process( ) throws IOException, SQLException
{
int rows = 0;
ResultSet rslt = null;
PreparedStatement pstmt = null;
String insert ="insert into EMP " +"( EMPNO, ENAME,JOB) " +"values " +"(
?, ?, ?)";
try {
System.out.println(insert);
pstmt = conn.prepareStatement(insert);
pstmt.setString( 1, "EMPNO" );
pstmt.setString( 2, "ENAME" );
pstmt.setString( 3,"JOB" );
rows = pstmt.executeUpdate( );
pstmt.close( );
pstmt = null;
System.out.println(rows + " rows inserted");
System.out.println("");
}
catch (SQLException e) {
System.err.println(e.getMessage( ));
}
finally {
if (pstmt != null)
try {
pstmt.close( );
}
catch(SQLException ignore)
{
}
}
11
Su tm bi: www.daihoc.com.vn
void
main(String
args[])throws
ClassNotFoundException,
{
try{
//Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Enumeration drivers = DriverManager.getDrivers();
while(drivers.hasMoreElements())
{
Driver driver = (Driver)drivers.nextElement();
System.out.println("Registered Driver:"+driver.getClass().getName());
}
=
"scott",
DatabaseMetaData dbmd=conn.getMetaData();
System.out.println(dbmd.getDatabaseProductName());
System.out.println(dbmd.getDatabaseProductVersion());
Statement stmt = conn.createStatement( );
12
Su tm bi: www.daihoc.com.vn
7. S dng PreparedStatement
i khi vic s dng mt i tng PreparedStatent hiu qu v tin li hn nhiu
so vi vic s dng i tng Statement. Kiu lnh c bit ny l lp con ca lp
Statement.
Khi no cn s dng i tng PreparedStatement
Nu ta mun x l mt i tng Statement nhiu ln, ta c th s dng i tng
PreparedStatement gim thi gian x l.
c trng chnh ca mt i tng PreparedStatement l n c cung cp trc
mt lnh SQL trc khi to ra i tng. i tng PreparedStatement l mt lnh SQL
c bin dch trc. iu ny ngha l khi i tng PreparedStatement c x l,
h qun tr c s d liu ch cn x l lnh SQL ca PreparedStatement m khng phi
bin dch n.
13
Su tm bi: www.daihoc.com.vn
14
Su tm bi: www.daihoc.com.vn
}
catch(SQLException e){
e.printStackTrace();
}
}
}
15
Su tm bi: www.daihoc.com.vn
16
Su tm bi: www.daihoc.com.vn
pstmt = null;
System.out.println(rows + " rows inserted");
System.out.println("");
con.commit();
}
catch(ClassNotFoundException e){
e.printStackTrace();
}
catch(SQLException e){
e.printStackTrace();
}
}
}
8. S dng cc giao tc
Sau thc hin cc lnh: Cc chng trnh Java ch thc hin c cc lnh trn
CSDL
thng
qua
i
tng
Statement.
Cc cu lnh SQL c th c thc hin tc th thng qua i tng Statement, c th
l mt cu lnh bin dch trc (i tng PreparedStatement) hay c th l mt lnh
gi cc th tc ci sn (Stored Procedure) trong CSDL (i tng CallableStatement).
Cc cu lnh SQL c th c thc hin thng qua phng thc executeQuery() kt
qu l mt i tng ResultSet, hay phng thc executeUpdate() kt qu l mt s
nguyn cho bit tng s cc record chu nh hng ca cu lnh va thc hin (thng
l
cc
cu
lnh
sa
i
d
liu
Update
Delete).
Trong trng hp c s dng trnh qun l transaction, cc phng thc rollback() c
dng phc hi trng thi trc v commit() xc nhn vic thc hin lnh.
chm dt cn xa kt ni, xa cc i tng gii phng ti nguyn ca h thng.
17
Su tm bi: www.daihoc.com.vn
Chng 10
TUN T HA I TNG V NG DNG TRONG
LP TRNH MNG
1. Tun t ha i tng
Su tm bi: www.daihoc.com.vn
Hnh 1
Hnh 2
Vi kt qu trn cho ta thy lp ny l kh tun t. Nhng khng phi mi
lp trong Java u kh tun t chng hn ta th kim tra vi lp
java.net.Socket
Hnh 3
Khi kt qu hin th l Class java.net.Socket is not Serializable (Lp
java.net.Socket khng kh tun t).
Su tm bi: www.daihoc.com.vn
FileInputStream
Serializable Object
File
ObjectOuputStream
FileOuputStream
Su tm bi: www.daihoc.com.vn
Hnh 4
Gi s i tng obj l mt i tng kh tun t. Bn thn i
tng ny c th l kh tun t hoc do ngi lp trnh nh ngha nn
thuc tnh kh tun t cho n.
C ch ghi i tng c tin hnh rt n gin: Trc tin ta to
ra mt tp ghi thng tin, thc cht l to ra i tng FileOuputStream,
sau ta to ra mt lung ghi i tng ObjectOuputStream gn vi lung
ghi tp v gn kt hai lung vi nhau. Vic ghi i tng c thc hin
bi phng thc writeObject().
FileOuputStream fos=new FileOuputStream("date.out");
ObjectOuputStream oos=new ObjectOuputStream(fos);
Date d=new Date();
oos.writeObject(d);
Qu trnh trn c gi l qu trnh tun t ha.
Chng ta nhn thy rng phc hi li trng thi ca mt i tng
ta phi m mt tp c d liu. Nhng ta khng th c c trc tip
m phi thng qua lung nhp i tng ObjectInputStream gn vi lung
nhp tp tin FileInputStream. Vic c li trng thi i tng c tin
hnh nh phng thc readObject()
FileInputStream fis=new FileInputStream("date.out");
ObjectInputStream ois=new ObjectInputStream(fis);
Date d=(Date)ois.readObject();
Qu trnh trn cn c gi l gii tun t ha
Cng vic c v ghi trng thi ca i tng kh tun t do ngi
lp trnh nh ngha c tin hnh hon ton tng t nh trn.
2. Truyn cc i tng thng qua Socket
Su tm bi: www.daihoc.com.vn
Socket
ObjectOuput
Hnh 5
Gi s s l mt i tng Socket. Nu chng trnh nhn d liu th
ta s ly d liu t lung nhp n t Socket:
Su tm bi: www.daihoc.com.vn
InputStream is=s.getInputStream()
phc hi trng thi i tng ta gn kt lung nhp th ly c t
Socket vi lung c i tng ObjectInputStream:
ObjectInputStream ois=new ObjectInputStream(is);
Khi i tng c phc hi li trng thi bi cu lnh:
Object obj=(Object)ois.readObject();
Nu chng trnh gi d liu th ta s ly d liu t lung xut n t
Socket:
ObjectOuput os=s.getObjectOuput();
tin hnh ghi i tng ta gn kt lung xut th ly c t
Socket vi lung xut i tng ObjectOuputStream:
ObjectOuputStream oos=new ObjectOutputStream(os);
Vic truyn i tng lc ny tr thnh mt cng vic rt n gin:
oos.writeObject(obj);
oos.flush();
2.4. V d minh ha
minh ha k thut chng ta vit mt server thc hin php nhn
hai mng s nguyn vi nhau. Client gi hai i tng, mi i tng biu
din mt mng nguyn; server nhn cc i tng ny, thc hin li gi
phng nhn hai mng s nguyn vi nhau v gi kt qu tr v cho client.
Trc tin chng ta nh ngha i tng c th s dng trong
vic truyn cc i tng.
public class ArrayObject implements java.io.Serializable{
private int[] a=null;
public ArrayObject(){
}
public void setArray(int a[]){
this.a=a;
}
public int[] getArray(){
return a;
}
}
Lp ArrayObject l lp c xy dng ng gi cc mng s
nguyn v c kh nng truyn i qua li trn mng. Cu trc lp nh sau:
trng thng tin l mt mng s nguyn a[]; phng thc setArray() thit
lp gi tr cho mng. Phng thc getArray() tr v mt mng s nguyn t
i tng ArrayObject.
Su tm bi: www.daihoc.com.vn
Su tm bi: www.daihoc.com.vn
connection
Su tm bi: www.daihoc.com.vn
Su tm bi: www.daihoc.com.vn
}
}
3. Truyn cc i tng thng qua giao thc UDP
Mt giao thc gn vi giao thc TCP l giao thc UDP. Java h tr
cho kiu ng dng truyn tin phi lin kt trn giao thc UDP thng qua lp
DatagramSocket v DatagramPacket. Liu chng ta c th vit c cc
chng trnh nhp v xut i tng bng truyn tin datagram? Thc hin
iu ny khng th tin hnh trc tip nh vi lung Socket. Vn l
DatagramSocket khng c gn vi bt k lung no; m n s dng mt
tham s mng byte gi v nhn d liu.
Object
Object
ObjectOuputStream
ObjectInputStream
ByteArrayObjectOuput
ByteArrayInputStream
DatagramPacket
DatagramPacket
Network
Hnh 6
C th thy rng xy dng mt gi tin datagram, i tng phi
c chuyn thnh mt mng byte. Vic chuyn i ny rt kh thc
hin nu bn thn i tng c lin quan n mt s i tng phc tp
trong th i tng.
Hnh 6 minh ha dng lun chuyn d liu khi truyn mt i tng
thng qua mt datagram. Di y l by bc ta cn thc hin ci t
m hnh truyn d liu cho giao thc UDP
Bc 1. Chun b: To i tng cn truyn i, gi s i tng ny
l obj, lm cho n kh tun t bng cch thc thi giao tip
Serializable.
Bc 2. To mt lung ByteArrayObjectOuput v t tn cho n l
baos.
Bc 3. Xy dng i tng ObjectOuputStream v t tn cho n l
oos. Tham s cho cu t ObjectOuputStream l baos
Bc 4. Ghi i tng obj vo lung baos bng cch s dng
phng thc writeObject() ca oos.
Bc 5. Tm kim vng m d liu mng byte t bng cch s dng
phng thc toByteAray().
Su tm bi: www.daihoc.com.vn
Su tm bi: www.daihoc.com.vn
4. Kt lun
Qua bi bo ny ti gii thiu tng quan v tun t ha i tng.
Thng qua cc v d chng ta thy khng qu kh lm vic vi tun t
ha i tng v iu quan trng hn l chng ta bit cch truyn i
cc i tng c cu trc phc tp thng qua cc Socket.
Ngoi ra, bi bo cng cp ti cch truyn i tng bng
cch s dng cc gi tin datagram. Nh nhng u im ca tin ch tun t
ha i tng, ti minh ha mt cch truyn cc i tng bng cch
s dng cc gi tin datagram. Nh chng ta thy, mc d trong giao
thc ny khng h tr x l theo lung d liu nhng ti lung ha cc
i tng a cc i tng vo cc mng byte.
S la chn gia vic s dng RMI hay gii php Socket kt hp vi
tun t ha ph thuc vo tng d n v cc yu cu ca n. S la chn
gii php no chnh l s tha hip gia cc c trng ca mi gii php:
nu i vi RMI th l tnh n gin khi trin khai, ngc li vi Socket
kt hp vi tun t ha i tng th li l u th v mt hiu nng. Nu
vn hiu nng c tm quan trng th gii php lp trnh Socket kt hp
tun t ha i tng l gii php tt hn so vi RMI.
Su tm bi: www.daihoc.com.vn
[4]
Qusay
H.
Mahmoud,
Advanced
http://java.sun.com, December 2001
[5]
Shengxi Zhou, Transport Java objects over the network with datagram
packets, http://www.javaworld.com, 2006
Socket
Programming,
90
Su tm bi: www.daihoc.com.vn