Budowa nowoczesnych aplikacji internetowych
z
Z\NRU]\VWDQLHPM ]\ND
Java, technologii
WebMacro i Topic Maps
Jakub
*Dá VNL.DURO
Foremski, Arkadiusz Bigos, Krzysztof Kawa, Zbyszko Królikowski
,QVW\WXW,QIRUPDW\NL3ROLWHFKQLNL3R]QDVNLHM
3LRWURZR$3R]QD
Zbyszko.Krolikowski@cs.put.poznan.pl
Streszczenie.
:SUDF\]RVWDQSU]HGVWDZLRQH]DVWRVRZDQLDM ]\ND-DYDLWHFKQRORJLL]QLP]ZL]DQ\FKMDNR
XQLZHUVDOQ\FK QDU] G]L GR EXGRZDQLD DSOLNDFML LQWHUQHWRZ\FK Z NRQWHNFLH NODV\F]QHM WUyMZDUVWZRZHM
DUFKLWHNWXU\ GOD WHJR W\SX DSOLNDFML 2PyZLRQH ]RVWDQ QDVW SXMFH WHFKQRORJLH -'%& MDNR XQLZHUVDOQH
áF]H GR ED] GDQ\FK Java 6HUYOHWV Z SRáF]HQLX ] WHFKQRORJL :HE0DFUR MDNR ZDUVWZD URGNRZD W]Z
business application logic), XML jako forma przechowywania dokumentów w bazie danych oraz TopicMaps
MDNR PHWRGD GHILQLRZDQLD SRZL]D PL
G]\ GDQ\PL : DUW\NXOH ]DPLHV]F]RQD ]RVWDQLH SUyED SRUyZQDQLD
W\FKWHFKQRORJLL]LQQ\PLGRVW SQ\PLUR]ZL]DQLDPL:\PLHQLRQHWHFKQRORJLHRPyZLRQH]RVWDQZRSDUFLX
RGRZLDGF]HQLD]GRE\WHSU]H]DXWRUyZSRGF]DVUHDOL]DFMLSURMHNWXSRUWDOXLQWHUQHWRZHJRZ1LHPF]HFK
1. Wprowadzenie
6LHü,QWHUQHWZF]RUDMWRVLHüSURMHNWRZDQDLEXGRZDQDGODQDXNRZFyZ1RZHF]DV\WRUyZQLH*
QRZHZ\PDJDQLD6SRZRGRZDá\RQH*HUyZQLH*,QWHUQHWPXVLDáVL ]PLHQLü']LVLHMV]\,QWHUQHWWR
VLHü ]RULHQWRZDQD QD ]DVWRVRZDQLD QDXNRZH DOH WDN*H QD EL]QHV )LUP\ LQWHUQHWRZH VW\PXOXM
REHFQLH UR]ZyM JRVSRGDUF]\ ZLHOX NUDMyZ L QDOH*\ VL ] QLPL OLF]\ü 7DNLH XSRZV]HFKQLHQLH VL
,QWHUQHWX Z\PXVLáR SRZVWDQLH ZLHOX QRZ\FK WHFKQRORJLL NWyUH XáDWZLDM SU]\VSLHV]DM EXGRZ
DSOLNDFMLLQWHUQHWRZ\FK3RZVWDá\WDN*HOLF]QHWHFKQRORJLHLQDU] G]LDGRLQWHJUDFMLLVWQLHMF\FKMX*
V\VWHPyZ ] QRZ\PL 1LQLHMV]D SUDFD MHVW SRZL FRQD SU]HJOGRZL W\FK WHFKQRORJLL : SUDF\
SRVWDUDP\ VL SU]HGVWDZLü ]QDQH L SRZV]HFKQLH X*\ZDQH WHFKQRORJLH D WDN*H WHFKQRORJLH
QRZDWRUVNLH'RNRQDP\SUyE\LFKSRUyZQDQLDSRND*HP\LFK]DOHW\LZDG\V]DQVHUR]ZRMXRUD]
MDNPR*QDMHZ\NRU]\VWDüSU]\EXGRZLHQRZRF]HVQ\FKDSOLNDFMLSRUWDOLLQWHUQHWRZ\FK
3U]HJOGGRVW SQ\FKGRW\FKF]DVWHFKQRORJLLEXGRZ\DSOLNDFML
internetowych
3RF]WNL ,QWHUQHWX WR ZLHORü SURWRNRáyZ Veronica, *RSKHU ; ,FK UR]ZyM ]RVWDá Z
]QDF]Q\PVWRSQLX]DKDPRZDQ\SU]H]SRMDZLHQLHVL :::World :LGH:HE3RF]WNL:::
WR +70/ L VWURQ\ VWDW\F]QH .ROHMQ\ NURN WR JUDILF]QH SU]HJOGDUNL ::: Netscape, Mosaic).
-HGQDN L WR V]\ENR VWDáR VL QLH Z\VWDUF]DMFH 1DWXUDOQ\P D ]DUD]HP QDMSURVWV]\P VSRVREHP
XVXQL FLD V\JQDOL]RZDQ\FK QLHGRJRGQRFL VWDáR VL UR]ZL]DQLH SROHJDMFH QD SRáF]HQLX
WHFKQRORJLL ED] GDQ\FK L VWURQ ::: ,QIRUPDFMH V SU]HFKRZ\ZDQH Z ED]LH GDQ\FK V\VWHPX
LQIRUPDF\MQHJR D QDVW
SQLH SU]H] PHFKDQL]P\ SRUHGQLF]FH SU]HWZDU]DQH QD NRG VWURQ M
]\ND
HTML.
3U]\MU]\MP\ VL QDMSLHUZ WHFKQRORJLL CGI (ang. Common Gateway Interface). Polega ona na
XUXFKDPLDQLXRVREQ\FKSURFHVyZZURGRZLVNXXUXFKRPLHQLRZ\PVHUZHUD:::3URJUDPPR*H
E\ü QDSLVDQ\ Z GRZROQ\P M ]\NX NWyUHJR NRPSLODWRU OXE LQWHUSUHWHU MHVW GRVW SQ\ QD VHUZHU]H
0R*HE\üWR]DUyZQRLQWHUSUHWRZDQ\M ]\NVNU\SWRZ\QDSU]\NáDG3HUOMDNLM ]\NNRPSLORZDQ\
& OXE 3DVFDO 3URJUDP Z &*, PR*H NRPXQLNRZDü VL
QD SU]\NáDG ] ED] GDQ\FK ]D SRPRF
standardu ODBC (ang. Open Database Connectivity), a rezultaty w postaci sformatowanego
+70/D V NLHURZDQH EH]SRUHGQLR GR SU]HJOGDUNL -HGQDN &*, PD VSRUR ZDG 3R SLHUZV]H
138
-DNXE*Dá VNL.DURO)RUHPVNL$UNDGLXV]%LJRV.U]\V]WRI.DZD=E\V]NR.UyOLNRZVNL
ND*GH *GDQLH SRZRGXMH SRQRZQH XUXFKRPLHQLH SURJUDPX &*, 'UXJ ZDG MHVW WUXGQRü
SU]HQRV]HQLDSURJUDPyZQDLQQHSODWIRUP\VSU] WRZRSURJUDPRZH
,QQWHFKQRORJLMHVWPHP3+3MHVWVSHFMDOQ\PM ]\NLHPVNU\SWRZ\PNWyU\MHVWXPLHV]F]RQ\
w kodzie stron HTML-owych na serwerze WWW. Podczas pobierania takich stron skrypt jest
Z\NRQ\ZDQ\JHQHUXMFRGSRZLHGQLUH]XOWDW=DOHWDPL3+3MHVWáDWZDLQWHJUDFMD]ED]DPLGDQ\FK
GRVW SQRü ZLHOX IXQNFML L SURVWRWD 3+3 MHVW REHFQLH V]HURNR X*\ZDQ WHFKQRORJL QDZHW SU]\
WZRU]HQLXGX*\FKSRUWDOL
5yZQLH* GX*H ILUP\ WDNLH MDN 1HWVFDSH F]\ 2UDFOH SU]HGVWDZLá\ VZRMH UR]ZL]DQLD GR
tworzenia portali internetowych.
1HWVFDSHRIHUXMHEH]SRUHGQLLQWHUIHMVGRVZRLFKVHUZHUyZWeb-
owych – NSAPI (ang. Netscape Server API
16$3, MHVW ]ELRUHP IXQNFML UR]V]HU]DMF\FK
IXQNFMRQDOQRüVHUZHUD:HEX16$3,MHVWUR]ZL]DQLHPRZLHOHV]\EV]\PRG&*,±RIHUXMHZLHOH
IXQNFML ]DUyZQR GR SRáF]H ED]RGDQRZ\FK L DXWRU\]DFML X*\WNRZQLNyZ 6]\ENRü G]LDáDQLD
Z\QLND ] OHSV]HM LQWHJUDFML ] VHUZHUHP $SOLNDFMH 16$3, PRJ E\ü XUXFKDPLDQH MDNR SURFHV
VHUZHUDPRJZVSyáG]LHOLüGDQHL]DVRE\]VHUZHUHP
.ROHMQSODWIRUP ]DRIHURZDáDILUPD2UDFOH-HVWWROracle Web Application Server (OWAS)
+ PL/SQL Cartridge
2:$6MHVWVHUZHUHP:::UR]V]HU]RQ\PRPR*OLZRüJHQHURZDQLDVWURQ
+70/ NLHURZDQ\FK GR SU]HJOGDUNL )XQNFMRQDOQRü VHUZHUD UR]V]HU]RQD MHVW R 3/64/
&DUWULGJH NWyU\ SR]ZDOD WZRU]\ü L SU]HFKRZ\ZDü QD VHUZHU]H SURFHGXU\ QDSLVDQH Z M ]\NX
3/64/VáX*FHGRJHQHURZDQLDVWURQZ+70/X=\VNXMHP\G]L
NLWHPXGRVNRQDáGRVW
SQRü
do danych (poziom
3/64/D ]D FHQ XPLHV]F]DQLD NRGX M ]\ND 3/64/ L +70/ UD]HP =
QDV]\FK GRZLDGF]H Z\QLND *H WDNLH SRGHMFLH SU]\ GX*\FK SURMHNWDFK ]PQLHMV]D SU]HMU]\VWRü
NRGXXWUXGQLD]PLDQ\L]DU]G]DQLHSURMHNWHP:DGWHMWHFKQRORJLLMHVWWDN*HVWRVXQNRZRZ\VRND
cena.
Rys. 1. Architektura Oracle Web Application Server i PL/SQL Cartridge
:V]\VWNLH V\JQDOL]RZDQH SRZ\*HM WHFKQRORJLH PDM VZRMH ]DOHW\ L ZDG\ :\NRU]\VW\ZDQLH
CGI
R]QDF]DPDáHODVW\F]QRüX]DOH*QLHQLHVL RGM ]\NDLSODWIRUP\V\VWHPRZHMVWRVXQNRZR
A
PPLICATION
S
ERVER
PL/SQL
cartrige
http://www.adres.com.pl/proc1
O
RACLE
8
I
P
ROCEDURY W
PL/SQL
create procedure proc1
is
begin
....
....
end proc1;
P
5=(*/'$5.$
strona w HTML-u
Z\ZRáDQLHSURFHGXU\
HTML
Budowa nowoczesnych aplikacji internetowych z
Z\NRU]\VWDQLHPM ]\ND-DYD
139
QLVNV]\ENRüG]LDáDQLDND*GH*GDQLHSRZRGXMHXUXFKRPLHQLHQRZHMLQVWDQFMLSURJUDPXPHP
SRPLPRZLHOXVZRLFK]DOHWáDWZ\GRVW SGRED]GDQ\FKV]\ENRüGREUHZVSDUFLHWHFKQLF]QHPD
WDN*H ZDG\ 1D SU]\NáDG Z GX*\FK SURMHNWDFK XPLHV]F]DQLH VNU\SWyZ QDSLVDQ\FK Z 3+3
naprzemiennie z
+70/HP ]PQLHMV]D MHJR F]\WHOQRü L XWUXGQLD GRNRQ\ZDQLH ]PLDQ 6WRVXMF
NSAPI
]\VNXMHP\ GX* V]\ENRü G]LDáDQLD ]D FHQ FDáNRZLWHJR X]DOH*QLHQLD VL RG SODWIRUP\
firmy
1HWVFDSH 5R]ZL]DQLH ILUP\ 2UDFOH MHVW Z\GDMQH L RWZDUWH QD UR]ZyM PD MHGQDN SHZQH
PDQNDPHQW\>@=RVWDáRWRSU]H]DXWRUyZQLQLHMV]HJRDUW\NXáX]DREVHUZRZDQHSRGF]DVUHDOL]DFML
SURMHNWX LQWHUQHWRZHJR LQIRUPDWRUD WXU\VW\F]QHJR GOD JPLQ\ .URNRZD > @ &] ü VWURQ
LQIRUPDWRUDE\á\WRVWURQ\VWDW\F]QHQDWRPLDVWUHV]WDE\áDJHQHURZDQDG\QDPLF]QLH]ED]\GDQ\FK
przy pomocy Oracle PL/SQL Cartridge
6NáDGRZDQHQDVHUZHU]HSURFHGXU\QDSLVDQHZM ]\NX
3/64/ JHQHURZDá\ QD SRGVWDZLH ]DS\WD GR ED]\ GDQ\FK NRG Z +70/X 5R]ZL]DQLH PLDáR
MHGQ ZDG SRGREQLH MDN Z 3+3 NRG 3/64/D SU]HSODWDá VL ] +70/HP 8WUXGQLDáR WR Z
]QDF]Q\P VWRSQLX ]DU]G]DQLH ORJLN MDN L VDP\P Z\JOGHP VWURQ\ :SLHUZ QDOH*DáR
Z\JHQHURZDü VWURQ\ SU]\ X*\FLX JHQHUDWRUyZ +70/D DE\ QDVW
SQLH ]DPLHQLDü MH QD FLJ
instrukcji
3/64/D Z\ZLHWODMF\FK VNRQVWUXRZDQH VWURQ\ 7\P VDP\P Z\NRQ\ZDQD E\áD WD
VDPDSUDFDGZDUD]\$UFKLWHNWXU WDNLHJRUR]ZL]DQLDSU]HGVWDZLRQRQDU\VXQNX
- ]\N-DYDLWHFKQRORJLH]QLP]ZL]DQHMDNRXQLZHUVDOQH
QDU] G]LDEXGRZ\DSOLNDFMLLQWHUQHWRZ\FK
&KDUDNWHU\VW\NDRJyOQDWHFKQRORJLLM ]\ND
Java
7HQ SRZVWDá\ NLOND ODW WHPX M ]\N SURJUDPRZDQLD Z ]QDF]F\ VSRVyE ]PLHQLá SRM FLH
SURMHNWRZDQLDLEXGRZDQLDRURGNyZwebowych. Java zawiera elementy programowania zarówno
VWUXNWXUDOQHJR MDN L RELHNWRZHJR ]GDU]HQLRZHJR L ZVSyáELH*QHJR Java jest zarazem bardzo
EH]SLHF]Q\P URGRZLVNLHP SLVDQLD SURJUDPyZ :RNyá -DY\ UR]ZLQ
áR VL
EDUG]R ZLHOH
technologii, takich jak: Java Servlets, JDBC (ang. Java Database Connectivity'), JSP (ang. Java
Server Pages), RMI (ang. Remote Method Invocation), WebMacro. Klasy Javy standardowo
GRVWDUF]DM IXQNFMH NU\SWRJUDILF]QH QLH]E GQH SRGF]DV WZRU]HQLD DSOLNDFML e-biznesowych. Java
ZVSRPDJDWDN*HSURFHVSDUVLQJXM ]\ND;0/
5\V$UFKLWHNWXUDQRZRF]HVQHJRSRUWDOXLQWHUQHWRZHJRRSDUWDQDWHFKQRORJLLM ]\ND
Java
P
5=(*/'$5.$
P
5=(*/'$5.$
*GDQLH
JDBC
WEB SERVER
J
AVA
W
EB
M
ACRO
S
TRONY
T
OPIC
M
APS
O
RACLE
8
I
140
-DNXE*Dá VNL.DURO)RUHPVNL$UNDGLXV]%LJRV.U]\V]WRI.DZD=E\V]NR.UyOLNRZVNL
3U]HGVWDZLP\REHFQLHMDNSU]\]DVWRVRZDQLXM ]\ND-DYDLWHFKQRORJLL]QLP]ZL]DQ\FKRUD]
ED] GDQ\FK PR*QD ]EXGRZDü QRZRF]HVQ\ SRUWDO LQWHUQHWRZ\ FKDUDNWHU\]XMF\ VL GX*
Z\GDMQRFL SUDF\ HODVW\F]QRFL L RWZDUWRFL UR]ZL]D 5\VXQHN SU]HGVWDZLD RJyOQ
DUFKLWHNWXU WDNLHJRV\VWHPX
1DMQL*V]ZDUVWZ U\VVWDQRZLVHUZHUED]\GDQ\FKQSOracle 8i. Na nim przechowywane
V GDQH Z SRVWDFL ;0/D 3U]HFKRZ\ZDQH GRNXPHQW\ V Z SRVWDFL WDN ]ZDQ\FK Topic Maps.
Topic
0DSVV]ELRUHPGRNXPHQWyZZSGML-u lub jak w naszym przypadku w XML-u. Topic
0DSVZ\NRU]\VW\ZDQHVGRGHILQLRZDQLD]DOH*QRFLL]ZL]NyZSRPL
G]\WDN]ZDQ\PLtopikami.
Topic
0DSV]RVWDQEOL*HMSU]HGVWDZLRQHZGDOV]HMF] FLDUW\NXáX
5\V1DMQL*V]DZDUVWZDDUFKLWHNWXU\V\VWHPXZ\NRU]\VWXMFHJRWHFKQRORJL
Java
:DUVWZ URGNRZ VWDQRZL VHUZHU ::: QD SU]\NáDG Netscape Enterprise Server 4.0. Na
VHUZHU]H ]QDMGXMH VL ]ELyU VWURQ VWDW\F]Q\FK RUD] ]ELyU WDN ]ZDQ\FK servletów napisanych w
M
]\NX-DYDZ\NRU]\VWXMF\FKWHFKQRORJL
:HE0DFURRUD]LQWHUIHMV-'%&GRáF]HQLDVL
]ED]
danych.
Servlety
V SURJUDPDPL Z\NRQ\ZDQ\PL SR VWURQLH VHUZHUD ::: MDNR ZWNL ZLUWXDOQHM
maszyny Javy - JVM (ang. Java Virtual Machine).
6HUYOHW PR*H ]RVWDü XUXFKRPLRQ\ ZUD] ]
SU]HND]DQ\PL GR SDUDPHWUDPL QD SU]\NáDG ] IRUPXODU]D 3RQLHZD* servlet jest programem
napisanym w
-DYLH PR*QD Z QLP NRU]\VWDü ] FDáHJR GRVW SQHJR LQWHUIHMVX Java API - w tym z
PHFKDQL]PyZ GRVW SX GR ED] GDQ\FK -'%& ]GDOQ\FK Z\ZRáD PHWRG 50, RUD] LQWHUIHMVX
&25%$3DUDPHWU\SREUDQH]HVWURQ\PR*QDSU]HND]\ZDüGRQDVW SQHJRVHUYOHWXWZRU]FZWHQ
VSRVyENDVNDG ZNWyUHMND*G\VHUYOHWRGSRZLHG]LDOQ\MHVW]DIUDJPHQWZLWU\Q\1DZ\MFLXservlet
JHQHUXMH VWURQ Z HTML-u. Do uruchomienia servletów konieczne jest funkcjonowanie serwera
:::] ]DLPSOHPHQWRZDQ\P PRGXáHPJavy. Najpopularniejszym z nich jest obecnie Apache z
GRGDWNRZ\PPRGXáHPjServe.
-HGQDN WDNLH SRGHMFLH QLHZLHOH Uy*QLáRE\ VL RG &*, F]\ 2UDFOH :HE Application Server z
PL/SQL
&DUWULGJH =\VNXMHP\ QRZRF]HVQ\ M ]\N SURJUDPRZDQLD áDWZ\ GRVW S GR ED] daych,
SURJUDPRZDQLHUR]SURV]RQH]DFHQ XPLHV]F]DQLDNRGX+70/ZHZQWU]SURJUDPXZJavie. Aby
WHPX ]DSRELHF PR*QD ]DVWRVRZDü QRZDWRUVN WHFKQRORJL
WebMacro. Czym jest WebMacro ?
WebMacro to zbiór klas
-DY\UR]V]HU]DMF\IXQNFMRQDOQRüVHUYOHWyZRPR*OLZRüRGL]RORZDQLD
logiki
VHUYOHWyZ RG SURMHNWRZDQLD Z\JOGX VWURQ SU]H] QLH JHQHURZDQ\FK 7DNLH SRGHMFLH Z
GX*\P VWRSQLX XáDWZLD ]DU]G]DQLD SUDF SURJUDPLVWyZ L SURMHNWDQWyZ VWURQ SRGF]DV UHDOL]DFML
GX*HJR SURMHNWX 7HFKQRORJLD :HE0DFUR ]RVWDQLH RPyZLRQD GRNáDGQLH Z GDOV]HM F]
FL SUDF\
Servlety napisane w
-DYLHGRáF]HQLDVL ]ED]GDQ\FKZ\NRU]\VWXMLQWHUIHMV-'%&
O
RACLE
8
I
T
OPIC
M
APS
D
ANE W
XML
(
RESOURCES
)
Budowa nowoczesnych aplikacji internetowych z
Z\NRU]\VWDQLHPM ]\ND-DYD
141
7U]HFLZDUWVWZ VWDQRZLSU]HJOGDUND:::7XWDMZ\NRQ\ZDQHVVNU\SW\QDSLVDQHZM ]\NX
JavaScript, oraz aplety napisane w
-DYLH3U]\SRPRF\SU]HJOGDUNL]DFKRG]LUyZQLH*LQWHUDNFMD]
portalem.
: GDOV]HM F] FL SU]HGVWDZLP\ EOL*HM ZVSRPQLDQH WHFKQRORJLH WM WebMacro, Topic Maps,
;0/-'%&Z\NRU]\VW\ZDQHSRGF]DVEXGRZ\GX*\FKSRUWDOLLQWHUQHWRZ\FK
3.2. Servlety
6HUYOHW\ V UR]V]HU]HQLDPL VHUZHUyZ webowych – klasa -DY\ PR*H ]RVWDü ]DáDGRZDQD
G\QDPLF]QLH Z FHOX UR]V]HU]HQLD IXQNFMRQDOQRFL VHUZHUD 6HUYOHW\ V SRGREQH GR ILUPRZ\FK
UR]V]HU]H VHUZHUD SR]D W\P *H G]LDáDM Z URGRZLVNX Java Virtual 0DFKLQH SU]H] FR V
bezpieczne i przenaszalne.
: SU]HFLZLHVWZLH GR &*, L )DVW&*, NWyUH X*\ZDM ZLHOX SURFHVyZ Z FHOX REVáX*HQLD
RVREQ\FK*GDVHUYOHW\VZFDáRFLZ\NRQ\ZDQHZRGVHSDURZDQ\FKZWNDFKSURFHVXJáyZQHJR
VHUZHUD.ROHMQ]DOHWVHUYOHWyZMHVWWR*HVRQHSU]HQDV]DOQHZGZyFKDVSHNWDFKZVWRVXQNXGR
systemu operacyjnego (JVM) oraz serwera WWW.
6HUYOHW\]HZ]JO GXQDVZRMQDWXU SR]RVWDM
Z VLOQ\P ]ZL]NX ] VHUZHUHP QD SU]\NáDG VHUYOHW PR*H X*\ü VHUZHUD Z FHOX WUDQVODFML FLH*HN
GRVW
SX GR SOLNyZ Z\NRQ\ZDü ORJRZDQLH SU]HSURZDG]Dü SURFHV DXWRU\]DFML Z\NRQ\ZDü
mapowanie typów MIME (ang. Multipurpose Internet Mail Extensions).
6HUYOHW\FHFKXMVL WDN*H
EH]SLHF]HVWZHP Z\QLNDMF\P ZSURVW ] M ]\ND -DYD QS FLVáD NRQWUROD W\SyZ REVáXJD Eá GyZ
SRSU]H]Z\MWNLPR*OLZRüX*\FLDJava Security Manager). Na rysunku 4 przedstawiono ogólny
VFKHPDW*\FLDservletu.
5\V&\NO*\FLD
servletu
3.3. WebMacro
:HE0DFURWR]ELyUNODVUR]V]HU]DMF\FKIXQNFMRQDOQRüVWDQGDUGRZ\FKVHUYOHWyZRPR*OLZRü
NRU]\VWDQLD ] V]DEORQyZ 7\P VDP\P XPR*OLZLDM RQH UR]G]LHOHQLH L ]UyZQROHJOHQLH SUDF\
projektantów stron i pracy programistów.
:HE0DFURMHVWUR]SRZV]HFKQLDQH]OLFHQFM*3/áF]QLH
1.
JVM
Web serwer z servletami
3URFHV JáyZQ\
Servlet2
)GDQLH GOD 6HUYOHW
)GDQLH GOD 6HUYOHW
)GDQLH GOD 6HUYOHW
ZWHN
ZWHN
ZWHN
JVM
142
-DNXE*Dá VNL.DURO)RUHPVNL$UNDGLXV]%LJRV.U]\V]WRI.DZD=E\V]NR.UyOLNRZVNL
]H (UyGáDPL -DN QD UD]LH GRVW
SQD MHVW W\ONR ZHUVMD pre-release, jest ona jednak bardzo dobrze
przetestowana i nie sprawia najmniejszych problemów.
3URJUDPLVWD SLV]F VHUYOHW NRU]\VWDMF ] :HE0DFUR WZRU]\ NODV G]LHG]LF]F ] NODV\
:06HUYOHWZNWyUHMPXVLRSURJUDPRZDüPHWRG
handle().7RZáDQLHWDPHWRGD±DQDORJLF]QLHGR
metod doGet() i doPost() w klasycznych
VHUYOHWDFKMHVWZ\NRQ\ZDQDDE\REVáX*\üQDGFKRG]FH
*GDQLH +773 1DVW
SQLH PXVL W\ONR Z\]QDF]\ü ZDUWRFL ]PLHQQ\FK MDNLH PDM E\ü GRVW
SQH
podczas przetwarzania szablonu (ang. template
RUD] RF]\ZLFLH RNUHOLü NWyUHJR V]DEORQX
:HE0DFURPDX*\üGRZ\JHQHURZDQLDGRNXPHQWX:V]\VWNLH]PLHQQHNWyUHPDME\üZLGRF]QH
podczas przetwarzania szablonu programista umieszcza w specjalnym obiekcie zwanym
NRQWHNVWHP:NRQWHNFLHPR*QDXPLHV]F]DüGRZROQHJRW\SXRELHNW\DWDN*HNROHNFMHRELHNWyZ
(np. tablice). Zadaniem projektanta stron jest stworzenia potrzebnych szablonów, które niewiele
Uy*QL VL RG VWDQGDUGRZ\FK GRNXPHQWyZ +70/ =DZLHUDM RQH W\ONR NLOND GRGDWNRZ\FK
G\UHNW\Z XPR*OLZLDMF\FK GRVW
S GR GDQ\FK XGRVW
SQLDQ\FK SU]H] SURJUDPLVW
6]DEORQ MHVW
poddawany procesowi parsingu przez
:HE0DFURLSU]HWZDU]DQ\GRZHZQ WU]QHMUHSUH]HQWDFMLGOD
ZL NV]HM HIHNW\ZQRFL 6]DEORQ DQDOL]RZDQ\ MHVW UD] QDWRPLDVW Z\NRQ\ZDQ\ ZLHOH UD]\ ]D
ND*G\PUD]HP]LQQ]DZDUWRFLNRQWHNVWX
- ]\NX*\ZDQ\ZV]DEORQDFK
- ]\NGRVW SQ\ZV]DEORQDFKQLHQDOH*\WUDNWRZDüMDNRM ]\NVNU\SWRZ\=DáR*HQLHPWZyUFyZ
:HE0DFURE\áRUR]G]LHOHQLHORJLNLDSOLNDFMLRGMHMZ\JOGXLGODWHJRMHVWWRM ]\NEDUG]RSURVW\LZ
GX*\P VWRSQLX LQWXLF\MQ\ 3RQL*HM SU]HGVWDZLP\ MDN Z W\P M ]\NX PR*QD X]\VNDü GRVW S GR
]PLHQQ\FKMDNQDZLJRZDüSRNROHNFMDFKRELHNWyZQDGDZDüZDUWRFL]PLHQQ\PRUD]NRU]\VWDü]
instrukcji warunkowych.
Zmienne
=PLHQQHWRQDMSURVWV]\VSRVyEQDGRVW SGRLQIRUPDFMLGRVW SQ\FKZNRQWHNFLH=PLHQQHZ
V]DEORQDFKSRSU]HG]RQHV]QDNLHPSRGREQLHMDNZM ]\NX3HUOQDSU]\NáDG
$Title
$Customer.Name
$Customer.Products.findProduct(”window”).PartNo
.D*GD ]H ]PLHQQ\FK ZVND]XMH QD MDNL RELHNW Z NRQWHNFLH =DGDQLHP WebMacro jest
]QDOH]LHQLHSRSUDZQHMZDUWRFLZNRQWHNFLHQDWRPLDVWSURJUDPLVWDPXVL]DGEDüRWRE\WDZDUWRü
VL WDP ]QDOD]áD 2ELHNW Customer PD ZáDVQRü SROH OXE RGSRZLHGQL PHWRG Name. Do
Z\GRE\FLD SRV]F]HJyOQ\FK ZáDVQRFL VáX*\ RSHUDWRU µNURSND¶ 2SHUDWRUD WHJR PR*QD X*\ZDü
ZLHORNURWQLH DE\ GRVWDü VL
GR *GDQHM ZDUWRFL 7U]HFL SU]\NáDG ]DZLHUD Z\ZRáDQLH PHWRG\
findProduct()
]SDUDPHWUHP2F]\ZLFLHZZL NV]RFLSU]\SDGNyZZ\VWDUF]\SURVWHRGZRá\ZDQLH
VL GR SyO Z RELHNWDFK DOH F]DVDPL PR*H E\ü NRQLHF]QH Z\ZRáDQLH PHWRG\ QD U]HF] MDNLHJR
RELHNWXZNRQWHNFLH±FR:HE0DFURWDN*HXPR*OLZLD
6WDáH
6WDáH w :HE0DFURPRJE\üMHGQ\P]V]HFLXW\SyZVáRZROLF]EDZDUWRüORJLF]QDNROHNFMD
ZVND(QLN QD ]PLHQQ áDFXFK ]QDNyZ 6áRZR WR FLJ OLWHU L F\IU QD SU]\NáDG hello1 6 GZD
VSHFMDOQHVáRZDtrue i falseNWyUHUHSUH]HQWXMZDUWRFLORJLF]QHLiczba WRFLJF\IUQDSU]\NáDG
#set $a = 10
MHVW UyZQRZD*QH XPLHV]F]HQLX Z NRQWHNFLH RELHNWX Integer(10). 0R*HP\
Z\PXVLü QD WebMacro potraktowanie liczby jako typu Long przez dodanie sufiksu l lub L na
SU]\NáDG / -DN QD UD]LHWebMacro nie wspiera liczb typu Float i Double. W razie potrzeby
:HE0DFURPR*HSU]HNV]WDáFLüRELHNWW\SXInteger (Long)QDZDUWRüSURVWint (long)PR*QDZL F
W\FKVWDá\FKX*\ZDüMDNRSDUDPHWU\Z\ZRáDQLDIXQNFMLNWyUHRF]HNXMZDUWRFLW\SXint lub long.
:DUWRü ORJLF]QD Z V]DEORQLH UHSUH]HQWRZDQD MHVW SU]H] VáRZD true i false 6 RQH
RGSRZLHGQLNDPLVWDá\FKM ]\ND-$9$Boolean.TRUE i Boolean.FALSE0R*QDLFKWDN*HX*\ZDü
MDNRSDUDPHWUZ\ZRáDQLDIXQNFMLNWyUHRF]HNXMZDUWRFLORJLF]QHM
Budowa nowoczesnych aplikacji internetowych z
Z\NRU]\VWDQLHPM ]\ND-DYD
143
Kolekcja
WRXSRU]GNRZDQDOLVWDVWDá\FKQDSU]\NáDG#set myList = [ one, two, 3,
$variable].
0R*OLZHMHVWGRZROQH]DJQLH*G*DQLHNROHNFMLQDSU]\NáDG
#set myList = [ [ one, one ], [two, two, 2], [three] ]
àDFXFK]QDNyZWRGRZROQ\FLJ]QDNyZXPLHV]F]RQ\ZFXG]\VáRZLH3RQLHZD*FLJ]QDNyZ
PR*H]DZLHUDüZVRELHZVND(QLNQD]PLHQQDE\ZSURZDG]LüGR]QDNµ¶WU]HEDJRSRSU]HG]Lü
]QDNLHPµ?¶WDVDPD]DVDGDRGQRVLVL
GRLQ\FK]QDNyZVSHFMDOQ\FKQDSU]\NáDG
#set $b = ”to jest ciag znakow: \$a, a to wskaznik na zmienna $a”
:VND(QLNQD]PLHQQ±]DSLVXMHP\JRLGHQW\F]QLHMDN]PLHQQLPR*HP\Z\NRU]\VW\ZDüMDNR
SDUDPHWUZ\ZRáDQLDIXQNFMLQDSU]\NáDG$order.findProduct($Product1).Prize
Dyrektywy
'\UHNW\Z\SRSU]HG]RQHV]QDNLHPLPXV]Z\VWSLüZQRZHMOLQLLPRJE\üSRSU]HG]RQH
]QDNDPL VSDFML :LHOH G\UHNW\Z RSHUXMH QD EORNX .D*G\ EORN UR]SRF]\QD VL ]QDNLHP µ^µ L
NRF]\]QDNLHPµ`¶%ORNLDW\PVDP\PG\UHNW\Z\PR*QD]DJQLH*G*Dü
## komentarz
'ZDOXEZL FHM]QDNyZWZRU]\NRPHQWDU]±UHV]WDOLQLL]RVWDQLH]LJQRURZDQD
#foreach $element in $kolekcja {...}
'\UHNW\ZDSR]ZDODSU]HMU]HüZV]\VWNLHRELHNW\ZNROHNFML%ORN]RVWDQLHZ\NRQDQ\W\OHUD]\
LOH MHVW RELHNWyZ Z NROHNFML ]D ND*G\P UD]HP ]PLHQQD $element E G]LH SU]\MPRZDü ZDUWRü
NROHMQHJRRELHNWXQDSU]\NáDG
<ul>
#foreach $customer in $list {
<li>$customer.name lives at $customer.address
}
</ul>
#if(warunek) {...} #else {...}
-HVW WR VWDQGDUGRZD G\UHNW\ZD ZDUXQNRZD VSRW\NDQD Z ZL NV]RFL M ]\NyZ SURJUDPRZDQLD
'UXJD F] ü G\UHNW\Z\ WR ]QDF]\ Äelse {}” jest opcjonalna. W warunku dyrektywy #LI PR*QD
X*\ZDüQDVW SXMF\FKRSHUDWRUyZ
&& - and (binarny),
||
- or (binarny),
!
- negacja (unarny),
== - równy (binarny),
!=
Uy*Q\ELQDUQ\
: SU]\SDGNX GZyFK RVWDWQLFK RSHUDWRUyZ QDOH*\ PLHü QD XZDG]H *H ED]XM RQH W\ONR QD
metodzie Object.equals(). Zmienna traktowana jest jako false
MH*HOL QLH ]RVWDáD ]QDOH]LRQD Z
NRQWHNFLH MHVW null EG( MHVW W\SX Boolean L PD ZDUWRü Boolean.FALSE. W przeciwnym
wypadku traktowana jest jako true
:\UD*HQLD VNáDGDMFH VL QD ZDUXQHN PR*QD GRZROQLH
JUXSRZDüSU]\X*\FLXQDZLDVyZRNUJá\FKQDSU]\NáDG
#if ( $Customer.owesMoney() && ($Customer.Name != "Fred") ) {
Pay up, or else!
} #else {
Thank you for your patronage.
}
#include plik
± SRZRGXMH ZF]\WDQLH ]HZQ WU]QHJR SOLNX ± :HE0DFUR QLH E G]LH Z\NRQ\ZDü
operacji analizy (parsingu).
144
-DNXE*Dá VNL.DURO)RUHPVNL$UNDGLXV]%LJRV.U]\V]WRI.DZD=E\V]NR.UyOLNRZVNL
#parse plik
± SRZRGXMH ZF]\WDQLH ]HZQ WU]QHJR SOLNX ± :HE0DFUR SRWUDNWXMH JR MDNR F] ü
szablonu i go przeanalizuje.
VHW]PLHQQD ZDUWRü
'R]PLHQQ\FKZNRQWHNFLHPR*QDVL RGZRá\ZDüDOHWDN*HSRGVWDZLDüSRGQLHZDUWRFLQD
SU]\NáDG
#set $name=”Jan Kowalski”
1D]\ZDPVL
name
:HE0DFUR SRWUDIL WDN*H GRNRQ\ZDü ]PLDQ QD EDUG]LHM VNRPSOLNRZDQ\FK RELHNWDFK
Z\NRU]\VWXMFPHFKDQL]PLQWURVSHNFML
#set $customer.Name=”Jan Kowalski”
#set $order.findProduct($Product1).Prize = $newPrize
#use ‘parser’ until znacznik-konca
3RZ\*V]D G\UHNW\ZD QDND]XMH :HE0DFUR X*\ZDQLH LQQHJR parsera dla wskazanego bloku
WHNVWX 2EHFQLH GRVW SQ\ MHVW W\ONR parser „text”, który nie robi nic. Jest on jednak bardzo
SRWU]HEQ\SRQLHZD*]QDNL^`NWyUHPRJZ\VW SRZDüZ-DYD6FULSWEDUG]RF] VWRSU]HV]NDG]DMZ
SRSUDZQHMLQWHUSUHWDFMLV]DEORQXQDSU]\NáDG
#use ‘text’ until ‘-end-‘
WHQWHNVWQLHE
G]LHDQDOL]RZDQ\SU]H]parser :HE0DFURZL
F
]QDNL^^^```QLHE
GQDPSU]HV]NDG]Dü
-end-
$WHQWHNVWE
G]LHDQDOL]RZDQ\
3RQDGWRZNRQWHNFLHXPLHV]F]DQHV]DZV]HQDVW SXMFHRELHNW\
•
$CGI
XPR*OLZLDMF\GRVW SGR]PLHQQ\FKMDNLHVSRW\NDQHVZ&*,
•
$Form
XPR*OLZLDMF\GRVW SGR]PLHQQ\FK]IRUP\
•
$Config
XPR*OLZLDMF\GRVW SGR]PLHQQ\FK]GHILQLRZDQ\FKZSOLNXWebMacro.properties,
•
$Cookie
XPR*OLZLDMF\RGF]\W\ZDQLHL]PLHQLDQLHCookies,
•
$Session
XPR*OLZLDMF\GRVW SGR$3,VHVML]-6'.
•
$Request to obiekt HTTP request (HttpServletRequest).
•
$Response to obiekt HTTP response (HttpServletResponse)
,QWURVSHNFMD±Z\]QDF]DQLHZDUWRFL]PLHQQ\FK
W
:HE0DFUR ]DVWRVRZDQR LQWURVSHNFM GR Z\]QDF]DQLD ZDUWRFL ]PLHQQ\FK ']L NL WHPX
SURJUDPLVWD PR*H XPLHV]F]Dü Z NRQWHNFLH RELHNW\ GRZROQHJR W\SX ,QWURVSHNFMD Z VNUyFLH
SROHJD QD W\P *H :HE0DFUR DE\ Z\]QDF]\ü ZDUWRü ]PLHQQHM E G]LH LQWHUSUHWRZDü ]DSLV Z
V]DEORQLH QD NLOND VSRVREyZ ± SRV]XNXMF SyO L PHWRG Z RELHNFLH R GDQHM QD]ZLH 1DMOHSLHM
UR]SDWU]\üWRQDSU]\NáDG]LH=Dáy*P\*HZV]DEORQLH]QDMGXMHVL ]DSLV
$Order.Customer.Fred
:HE0DFURVWDUDMFVL Z\]QDF]\üZDUWRüWHM]PLHQQHMSRGHMPLHQDVW SXMFHSUyE\GRNáDGQLH
ZWDNLHMNROHMQRFL
1.
sprawdzi czy obiekt Order ma publiczne pole Customer,
2.
sprawdzi czy obiekt Order
PDSXEOLF]QPHWRG getCustomer(),
3.
sprawdzi czy obiekt Order
PDSXEOLF]QPHWRG getCustomer(”Fred”),
4.
sprawdzi czy obiekt Order
PDSXEOLF]QPHWRG get(”Customer”).
Budowa nowoczesnych aplikacji internetowych z
Z\NRU]\VWDQLHPM ]\ND-DYD
145
*G\ ]DMG]LH SU]\SDGHN WU]HFL WR GOD WHJR SU]\NáDGX ]DNRF]\ WR Z\]QDF]DQLH ZDUWRFL :
SR]RVWDá\FK Z\SDGNDFK QD U]HF] Z\]QDF]RQHJR RELHNWX :HE0DFUR ]DVWRVXMH LGHQW\F]Q
SURFHGXU E\Z\]QDF]\üZáDVQRüFred.
: SU]\SDGNX QDGDZDQLD ZDUWRFL SU]\ NRU]\VWDQLX ] G\UHNW\Z\ VHW WebMacro zastosuje
DQDORJLF]QSURFHGXU
SU]\F]\P]DPLDVWSRV]XNLZDüRGSRZLHGQLFKPHWRGgetE
G]LHSRV]XNLZDü
metod set.
Kolekcje
Dla
:HE0DFUR RELHNW E G]LH NROHNFM D W\P VDP\P PR*H E\ü SU]HJOGDQ\ ]D SRPRF
dyrektywy #foreach
MH*HOL
•
RELHNWMHVWWDEOLF
•
obiekt implementuje interfejs Iterator,
•
obiekt implementuje interfejs Enumeration,
•
PDSXEOLF]QPHWRG Iterator iterator()",
•
PDSXEOLF]QPHWRG Enumeration elements()".
3.3.3. Pisanie servletów z wykorzystaniem WebMacro
Najprostszym sposobem napisania
VHUYOHWX NRU]\VWDMFHJR ] WebMacro jest stworzenie klasy
G]LHG]LF]FHM]:06HUYOHW:NODVLHWHMPXVLP\]GHILQLRZDüPHWRG
handle(), która posiada jeden
parametr typu WebContext
MHVW WR ZVSRPQLDQ\ MX* NRQWHNVW L ]ZUDFD RELHNW W\SX Template.
3RSU]H] NRQWHNVW SURJUDPLVWD PD GRVW
S GR ZV]\VWNLFK RELHNWyZ GRVW
SQ\FK VWDQGDUGRZR Z
servletach (tj. Cookies, Session API, HttpServletRequest, HttpServletResponse
'RVW S GR
podstawowych operacji jak: pobieranie danych z formy i operacje na Cookies
]RVWDáXSURV]F]RQ\
SRSU]H] GRGDQLH NLONX PHWRG GRVW
SQ\FK EH]SRUHGQLR Z RELHNFLH WebContext *áyZQ\P
zadaniem programisty jest wyznaczenie wszystkich potrzebnych zmiennych i umieszczenie ich w
NRQWHNFLH =PLHQQH Z NRQWHNFLH V SU]HFKRZ\ZDQH ]D SRPRF WDEOLF\ haszowej. Programista
XPLHV]F]D ZL F Z NRQWHNFLH RELHNW\ OXE NROHNFM RELHNWyZ SRG RGSRZLHGQLP NOXF]HP
áDFXFKHP ]QDNyZ NWyU\ E G]LH VWDQRZLá SLHUZV]\ F]áRQ Z QD]ZLH ]PLHQQHM Z V]DEORQLH
5R]ZD*P\QDVW SXMF\SU]\NáDG
public Template handle(WebContext context){
context.put(”counter”, new Integer(10));
Vector v = new Vector();
v.addElement(”Ala”);
v.addElement(”Ola”);
v.addElement(”Ewa”);
context.put(”vector”,v);
}
:V]DEORQLHPR*HP\RGZRáDüVL GRW\FK]PLHQQ\FKSU]H]
$counter<br>
#foreach $i in $vector {
$i<br>
}
'RNXPHQWZ\JHQHURZDQ\SU]H]WHQIUDJPHQWNRGXE G]LHZ\JOGDáQDVW SXMFR
10<br>
Ala<br>
Ola<br>
146
-DNXE*Dá VNL.DURO)RUHPVNL$UNDGLXV]%LJRV.U]\V]WRI.DZD=E\V]NR.UyOLNRZVNL
Ewa<br>
3RQLHZD*PDP\GRF]\QLHQLD]WDEOLFKDV]RZSRQRZQHX*\FLHWHJRVDPHJRNOXF]DVSRZRGXMH
QDGSLVDQLHSRSU]HGQLHJRRELHNWX8ZDJDWDWDN*HGRW\F]\G\UHNW\Z\#set bowiem operuje ona na
W\P VDP\P NRQWHNFLH (#set $a = 10 Z V]DEORQLH MHVW UyZQRZD*QH ] Z\NRQDQLHP context.put
(”a”,new
Integer(10)) w kodzie VHUYOHWX 7U]HED WDN*H XZD*Dü Z\ELHUDMF QD]Z GOD ]PLHQQHM
$element w dyrektywie „#foreach $element in $kolekcja
´JG\*RQDWDN*HMHVWSU]HFKRZ\ZDQDZ
NRQWHNFLH
Metoda handle()
PXVL]ZUyFLüRELHNWW\SXTemplate. Za dostarczanie tego obiektu w WebMacro
RGSRZLHG]LDOQ\ MHVW VSHFMDOQ\ PRGXá W]Z TemplateProvider = PRGXáX WHJR NRU]\VWD PHWRGD
„Template getTemplate(String)
´NWyUSURJUDPLVWDPR*HZ\NRU]\VWDüGRRNUHOHQLDV]DEORQXMDNL
PD E\ü X*\W\ GR Z\JHQHURZDQLD VWURQ\ 6WDQGDUGRZ\ TemplateProvider wyszukuje szablony w
NDWDORJDFK ZVND]DQ\FK Z SOLNX NRQILJXUDF\MQ\P QD G\VNX ND*G\ V]DEORQ MHVW SOLNLHP
'RVW SQHVWDN*HLQQHZHUVMHWHJRPRGXáXXPR*OLZLDMFHSRELHUDQLHV]DEORQyZSU]H]SURWRNyá
+773EG(]ED]\GDQ\FK
:HE0DFUR ]H Z]JO GyZ HIHNW\ZQRFLRZ\FK PD ]DLPSOHPHQWRZDQ\ PHFKDQL]P EXIRURZDQLD
V]DEORQyZ F]DV SR MDNLP V]DEORQ\ PXV] E\ü SRQRZQLH SREUDQH PR*QD XVWDZLü Z SOLNX
NRQILJXUDF\MQ\P'RGDWNRZRSURJUDPLVWDPR*H]DLPSOHPHQWRZDüPHWRG\start() i stop(),NWyUHV
Z\NRQ\ZDQHGRNáDGQLHUD]RGSRZLHGQLRSU]\VWDUFLHservletu i przy jego zatrzymywaniu.
3.3.4. Konfiguracja
$E\PyFNRU]\VWDü]:HE0DFURQDOH*\Z\NRQDüQDVW SXMFHNURNL
1.
GRGDüSOLNwebmacro.jar do CLASSPATH w konfiguracji serwera WWW,
2.
VNRSLRZDüSOLNWebMacro.properties do katalogu, który jest wymieniony w CLASSPATH,
3.
w pliku WebMacro.properties
]PLHQLüZDUWRüSDUDPHWUXTemplatePathSDUDPHWUWHQRNUHOD
NDWDORJLZNWyU\FKE GZ\V]XNLZDQHV]DEORQ\
4.
GRGDWNRZR PR*QD Z SOLNX WebMacro.properties ]PLHQLü ZDUWRFL LQQ\FK SR*\WHF]Q\FK
SDUDPHWUyZ]JRGQLH]]DáF]RQ\PLZW\PSOLNXLQVWUXNFMDPLQSTemplateExpireTime – czas
buforowania szablonów, LogFile
±QD]ZDSOLNXGRNWyUHJRE GWUDILDüLQIRUPDFMHSU]\GDWQH
przy debugowaniu servletów).
'ODF]HJRZDUWRX*\ZDü
WebMacro?
:HE0DFURMHVWSRW *Q\PLZ\GDMQ\PQDU] G]LHPNWyUHGRVNRQDOHZVSLHUDWZRU]HQLHDSOLNDFML
LQWHUQHWRZ\FK 5R]G]LHOHQLH SUDF\ SURJUDPLVW\ L SURMHNWDQWD VWURQ MHVW EDUG]R ZD*QH SU]\
WZRU]HQLXGX*\FKLVNRPSOLNRZDQ\FKV\VWHPyZ']L NLWHPX]\VNXMHVL QDSU]HMU]\VWRFLNRGX
DSOLNDFMLNWyUDQLHMHVWÄ]DPLHFDQD´SU]H]NRG+70/LYLFHYHUVD3U]HMU]\VWRüNRGXZSá\ZDQD
]PQLHMV]HQLH LORFL Eá GyZ Z DSOLNDFML 0R*OLZH MHVW ]UyZQROHJOHQLH SUDF\ SURJUDPLVWyZ L
SURMHNWDQWyZVWURQ3URVWHSRSUDZNLHG\WRUVNLHVSURZDG]DMVL W\ONRGRSRSUDZLHQLDV]DEORQX±
QLHPDSRWU]HE\SRQRZQHMUHNRPSLODFMLDSOLNDFML3RQLHZD*NRU]\VWDVL ]V]DEORQyZQLFQLHVWRLQD
SU]HV]NRG]LH E\ W VDP DSOLNDFM SU]\VWRVRZDü GR LQQ\FK WHFKQRORJLL QD SU]\NáDG :$3 ±
Z\VWDUF]\W\ONRX*\üLQQ\FKV]DEORQyZ
3.4. JDBC
-'%&MHVWLQWHUIHMVHP$3,M ]\ND-DYDSR]ZDODMF\PQDZ\NRQ\ZDQLH]DS\WD64/]ELyUNODV
oraz interfejsów). Wykorzystanie tego standardu pozwala na napisanie uniwersalnego programu
NWyU\E
G]LHPR*QDX*\üZLHORNURWQLHGRáF]HQLDVL
]Uy*Q\PLED]DPLGDQ\FK:VNUyFLH-'%&
pozwala na:
•
QDZL]DQLHSRáF]HQLD]ED]GDQ\FK
•
Z\V\áDQLH]DS\WD64/
•
przetwarzanie wyników.
Budowa nowoczesnych aplikacji internetowych z
Z\NRU]\VWDQLHPM ]\ND-DYD
147
3RQL*V]\SU]\NáDGVWDQRZLLOXVWUDFM W\FKPR*OLZRFL
Connection con = DriverManager.getConnection (
"jdbc:oracle:thin:@host:port:sid",
"login",
"password");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM
tabelka1");
while (rs.next()) {
int x = rs.getInt("a");
String s = rs.getString("b");
float f = rs.getFloat("c");
}
$E\ PyF VNRU]\VWDü ] WHJR VWDQGDUGX QDOH*\ VL ]DRSDWU]\ü Z VWHURZQLN NWyU\ MHVW
LPSOHPHQWDFM LQWHUIHMVyZ ± RGSRZLHGQL GOD GDQHJR SURGXFHQWD ED]\ GDQ\FK -'%& QLH QDNáDGD
*DGQ\FK UHVWU\NFML QD SROHFHQLD 64/ JZDUDQWXMH GX* HODVW\F]QRü SR]ZDODMF QD X*\FLH
VSHF\ILF]QHM GOD GDQHJR SURGXFHQWD VNáDGQL 64/ -'%& Z\PDJD DE\ VWHURZQLN GRVWDUF]\á
SU]\QDMPQLHM PR*OLZRFL $16, 64/ 2]QDF]D WR *H X*\WNRZQLN PR*H OLF]\ü QD SRGVWDZRZ\
SR]LRPIXQNFMRQDOQRFL
.
: -'%& Z\Uy*QLDP\ QDVW SXMFH LQWHUIHMV\ SRGVWDZRZH Connection, DriverManager,
Statement, ResultSet, PreparedStatement, CallableStatement.
•
Connection
Obiekt
&RQQHFWLRQUHSUH]HQWXMHSRáF]HQLH]ED]GDQ\FK6HVMDSRáF]HQLD]DZLHUDSROHFHQLD
64/NWyUHVZ\NRQ\ZDQHDZ\QLNL]ZUDFDQHSU]H]SRáF]HQLH3RMHG\QF]DDSOLNDFMDPR*HPLHü
MHGQROXEZLHOHSRáF]H]GDQED]GDQ\FKOXESRáF]HQLD]Uy*Q\PLED]DPL3UDFXMF]ED]DPL
F] VWRLPSOHPHQWXMHVL SXO SRáF]HNWyUD]QDF]QLHSU]\VSLHV]DSUDF ]HZ]JO GXQDIDNW*HF]DV
WZRU]HQLD QRZHJR SRáF]HQLD MHVW VWRVXQNRZR GX*\ )DNW WHQ XZ]JO
GQLRQR Z -'%& NWyU\
dostarcza odpowiednich interfejsów.
•
DriverManager
Klasa DriverManager
MHVW ZDUVWZ ]DU]G]DMF SUDFXMF PL G]\ X*\WNRZQLNLHP D
VWHURZQLNLHP .ODVD WD VWHUXMH SURFHVHP QDZL]\ZDQLD SRáF]HQLD PL
G]\ ED] GDQ\FK D
odpowiednim sterownikiem.
•
Statement
Klasa Statement
MHVW WZRU]RQD SU]H] Z\ZRáDQLH PHWRG\ createStatement() na rzecz obiektu
Connection
8*\ZDQDMHVWZFHOXSURVWHJRZ\VáDQLD]DS\WDQLDGRED]\GDQ\FK2ELHNW\WHMNODV\
PRJ]DZLHUDü]DS\WDQLD64/NWyUHPRJX*\ZDüSQL escape syntax. Escape syntax sygnalizuje,
*HNRG]DZDUW\PL
G]\]QDF]QLNDPLSRZLQLHQE\üUy*QLHREVáXJLZDQ\6WHURZQLN-'%&Z\V]XNXMH
w pytaniu escape syntax
L]DPLHQLDJRQDNRG]UR]XPLDá\GODGDQHMED]\GDQ\FK3R]ZDODWRQD
]DGDZDQLH]DS\WDQLH]DOH*Q\FKRGLPSOHPHQWDFMLUy*Q\FKV\VWHPyZ]DU]G]DQLDED]GDQ\FKQD
SU]\NáDG
stmt.executeQuery("SELECT * FROM pracownicy
WHERE pracuje_od ={ts `2000-01-01 12:0:0.0 '};
•
Resultset
ResultSet
]DZLHUDZV]\VWNLHNURWNLUHODFMLVSHáQLDMFHZDUXQNL]DS\WDQLDRUD]XPR*OLZLDGRVW S
GR W\FK NURWHN SRSU]H] RNUHORQ\ ]ELyU PHWRG getXXX(). Obiekt ResultSet pozostawia w bazie
NXUVRUNWyU\MHVWRWZDUW\GRPRPHQWX]DPNQL FLDRELHNWX
•
PreparedStatement
148
-DNXE*Dá VNL.DURO)RUHPVNL$UNDGLXV]%LJRV.U]\V]WRI.DZD=E\V]NR.UyOLNRZVNL
Obiekt PreparedStatement
X*\ZDQ\ MHVW GR Z\NRQ\ZDQLD SUHNRPSLORZDQ\FK SROHFH 64/
]DZLHUDMF\FK MHGQR OXE ZL FHM SyO SDUDPHWUyZ R]QDF]DQ\FK ]QDNLHP " ± V WDN ]ZDQH
SDUDPHWU\ ,1 3DUDPHWURP ZHMFLRZ\P QDOH*\ QDVW SQLH SU]\SLVDü SR*GDQH ZDUWRFL SRSU]H]
X*\FLH RGSRZLHGQLFK PHWRG setXXX() 3RQLHZD* RELHNW\ PreparedStatement V prekompilowane
LFK Z\NRQDQLH PR*H E\ü V]\EV]H QL* RELHNWyZ Statement. Zapytania SQL wykonywane
ZLHORNURWQLH Z S
WOL V WZRU]RQH ]H Z]JO
GyZ Z\GDMQRFLRZ\FK ] Z\NRU]\VWDQLHP
PreparedStatement.
PreparedStatement pstmt = con.prepareStatement(
"UPDATE table4 SET m = ? WHERE x = ?");
pstmt.setLong (1, 123456789);
pstmt.setString(2, "qwerty");
int rowCount = pstmt.executeUpdate();
•
CallableStatement
Obiekt CallableStatement
MHVWZ\NRU]\VW\ZDQ\GRVWZRU]HQLDRGZRáDQLDGRSU]HFKRZ\ZDQ\FK
w bazie danych procedur i budowany z wykorzystaniem metody prepareCall na rzecz obiektu
Connection
QDSU]\NáDG
CallableStatement cstmt = con.prepareCall( "{call getTestData(?,
?)}");
3DUDPHWU\R]QDF]RQHÄ"´PRJE\üZHMFLRZHZ\MFLRZHOXEZHMFLRZRZ\MFLRZHQS
CallableStatement cstmt = conn.prepareCall("{? = CALL balance(?)}");
cstmt.registerOutParameter(1, Types.FLOAT);
cstmt.setInt(2, 13);
cstmt.executeUpdate();
float acctBal = cstmt.getFloat(1);
'OD SRWU]HE SUDF\ ] ED] GDQ\FK ]D SRPRF M ]\ND 64/ LVWRWQH MHVW RGZ]RURZDQLH W\SyZ
danych
-DYD!-'%&!64/!'%06-'%&$3,MHVW]JRGQ\]64/DFRZL FHMXGRVW SQLD
W\S\GDQ\FK]JRGQH]SURSR]\FMVWDQGDUGX64/QDSU]\NáDGW\SGDQ\FK%/2%7HRUHW\F]QLH
NRQVWUXNWRURSURJUDPRZDQLDED]\GDQ\FKSRZLQLHQWUDNWRZDüW\S\GDQ\FK]ED]GDQ\FKWDNMDNE\
WRE\á\W\S\GDQ\FK64/
3.5. TOPIC MAPS
3.5.1. XML
XML jest idealnym formatem do przechowywania strukturalizowanych informacji,
XPR*OLZLDMF\P SU]\ W\P ZLHORNURWQH X*\ZDQLH GDQHJR ]ELRUX LQIRUPDFML SU]\ X*\FLX Uy*Q\FK
DSOLNDFML ;0/ MDNR WDNL QLH MHVW MHGQDN Z\VWDUF]DMF\ JG\ LORü LQIRUPDFML NWyUH RWU]\PXMH
X*\WNRZQLNNRFRZ\MHVWU] GXPHJDEDMWyZSRPLPR*HVRQHFLOHVWUXNWXUDOL]RZDQH3RWU]HEQ\
MHVWPHFKDQL]PXPR*OLZLDMF\RWU]\P\ZDQLH*GDQ\FKZ\QLNyZV]\ENRSUHF\]\MQLHL]JRGQLH]
DNWXDOQ\PNRQWHNVWHP-HGQ\P]UR]ZL]DVSHáQLDMF\FKWHZ\PDJDQLDV723,&0$36
®
.
&]\PV723,&0$36"
723,&0$36MHVWXV\VWHPDW\]RZDQQRWDFMX*\ZDQGRUHSUH]HQWDFMLZLHG]\3R]ZDODRQDQD
GHILQLRZDQLHSRM ü±QD]\ZDQ\FKWXWDMtopikamiL]DOH*QRFLPL G]\QLPL)L]\F]QLHMHVWWR]ELyU
GRNXPHQWyZ]DZLHUDMF\FKLQIRUPDFMHSRáF]RQ\FK]DOH*QRFLDPLNWyUHX*\ZDMQRWDFML]JRGQHM
ze standardem (ISO/IEC FCD 13250
723,& 0$36 VWUXNWXUDOL]XM ]ELyU LQIRUPDFML SRSU]H]
EXGRZDQLH VLHFL VHPDQW\F]QHM ÄQDG´ ]DVREDPL 6LHü WD XPR*OLZLD áDWZ QDZLJDFM
L VHOHNFM
otrzymywanych informacji.
Budowa nowoczesnych aplikacji internetowych z
Z\NRU]\VWDQLHPM ]\ND-DYD
149
3.5.3. Model TOPIC MAPS
3RGVWDZRZ\PM ]\NLHPNWyU\XPR*OLZLDGHILQLRZDQLH723,&0$36MHVWM ]\N;0/723,&
MAPS to dokument
;0/Z\ Z NWyU\P ]QDMGXM VL HOHPHQW\ Uy*Q\FK W\SyZ Z\ZLHG]LRQH ]H
]ELRUXSRGVWDZRZ\FKIRUPDUFKLWHNWXU\723,&0$368*\ZDQHRQHVGRGHILQLRZDQLDWRSLNyZ
Z\VWSLH WRSLNyZ DQJ occurences of topics L SRZL]D PL
G]\ WRSLNDPL DQJ associations
between topics
3RGVWDZRZ\PLHOHPHQWDPLPRGHOXV
•
Topic
±UHSUH]HQWXMHGRZROQHSRM FLHRVRE MHGQRVWN NRQFHSFM LGH EH]Z]JO GXF]\RQD
LVWQLHMHLMDNPDFKDUDNWHU\VW\N
.D*G\]WRSLNyZPR*HPLHüMHGHQOXEZLHOHW\SyZDQJ
topic types
=DOH*QRüPL G]\WRSLNLHPDMHJRW\SHPMHVWW\PVDP\PFR]DOH*QRüNODVD±
LQVWDQFMD NODV\ 1D SU]\NáDG WRSLNL 3ROVND :LHONRSROVND 3R]QD Infosystem 2000 oraz
typy topików: kraj, województwo, miasto, konferencja.
•
Topic name
± VNáDGD VL ] WU]HFK F] FL base name (nazwa podstawowa), display name
QD]ZD Z\ZLHWODQD sort name QD]ZD GOD VRUWRZDQLD 1D SU]\NáDG (base/display/sort):
3R]QDQ3R]QDSR]QDQ
•
Topic occurence
Z\VWSLHQLHWRSLNXLoccurence role typeURODZ\VWSLHQLD±Z\VWSLHQLH
MHVWUHIHUHQFMGRNRQNUHWQHJR]DVREX]ZL]DQHJR]GDQ\PWRSLNLHP.D*GHZ\VWSLHQLHPD
RNUHORQ\ W\S Z\UD*RQ\ MDNR W\S Z\VWSLHQLD occurence role type L ]DNUHV Z\VWSLHQLD
(occurence scope
7\SZ\VWSLHQLDMHVWWH*VDPZVRELHWRSLNLHP1DSU]\NáDGZ\VWSLHQLH
(occurence): wykres_1.xls, wojna.doc, killer.mpg, hey_Joe.mp3 oraz
W\S Z\VWSLHQLD
(occurence role types):
Z\NUHVDUW\NXáYLGHRSOLNPX]\F]Q\
•
Topic association
SRZL]DQLH WRSLNX L association type W\S SRZL]DQLD ± SRZL]DQLH
RNUHOD UHODFM PL G]\ GZRPD OXE ZL NV] LORFL WRSLNyZ .D*GH SRZL]DQLH MHVW
RNUHORQHJRW\SX.D*G\SRZL]DQ\WRSLNSHáQLRNUHORQURO
Z]ZL]NXDQJassociation
role type
=DUyZQRW\SSRZL]DQLDWRSLNyZMDNLURODMDNSHáQLWHQW\SSRZL]DQLDVWDN*H
VDPH Z VRELH WRSLNDPL 1D SU]\NáDG SRZL]DQLH :LHONRSROVND ]QDMGXMH VL Z 3ROVFH
3R]QD ]QDMGXMH VL Z :LHONRSROVFH ,QIRV\VWHP RGE\ZD VL Z 3R]QDQLX QDWRPLDVW typ
SRZL]DQLD ]QDMGXMH VL
Z RGE\ZD VL
Z RUD] UROD SRZL]DQLD ZRMHZyG]WZRSDVWZR
miasto/województwo, konferencja/miasto.
•
Scope
]DNUHVGRZROQ\SU]\G]LDáQD]ZZ\VWSLHSRZL]DGODRNUHORQHJRWRSLNXMHVW
XZD*DQ\MDNRSRSUDZQ\VHQVRZQ\ZRNUHORQ\FKJUDQLFDFKNWyUHPRJDOHQLHPXV]E\ü
Z\UD(QLHZ\VSHF\ILNRZDQH7DJUDQLFDZD*QRFLGDQHJRSU]\G]LDáXMHVWQD]\ZDQD]DNUHVHP
(
VFRSH1DSU]\NáDGzakresy (scopes): DE\]DFKRZDüUR]Uy*QLHQLHPL G]\PLDVWHPÄParis”
we Francji, miastem „Paris” w Texasie i bohaterem mitologicznym o imieniu „Paris” musimy
SRZL]Dü SRV]F]HJyOQH WRSLNL ] ]DNUHVDPL ZD*QRFL GOD ND*GHJR ] QLFK , WDN GOD W\FK
SU]\SDGNyZ]DNUHVDPLPRJE\üÄ)UDQFMD´Ä86$´Ä0LWRORJLD*UHFND´
150
-DNXE*Dá VNL.DURO)RUHPVNL$UNDGLXV]%LJRV.U]\V]WRI.DZD=E\V]NR.UyOLNRZVNL
5\V3U]\NáDGRZDPDSDWRSLNyZ
3.5.4. Zastosowania
723,&0$36PRJ]QDOH(ü]DVWRVRZDQLHZ
•
NZDOLILNRZDQLX ]DZDUWRFL RELHNWyZ SU]HFKRZXMF\FK LQIRUPDFMH RUD] DE\ XáDWZLü
QDZLJDFM
SU]\ X*\FLX RGSRZLHGQLFK PHWRG WDNLFK MDN LQGHNV\ V\VWHP\ VáRZQLNRZH
systemy przeszukiwania cytatów, systemów tworzenia dokumentacji technicznych dla
SU]HGVL ELRUVWZ
•
ILOWURZDQLX]ELRUyZLQIRUPDFMLGODRJUDQLF]HQLD]DNUHVXGDQ\FKZLGRF]Q\FKGODRNUHORQHJR
X*\WNRZQLND V\VWHPX OXE NRQNUHWQHJR ]DVWRVRZDQLD )LOWURZDQLH PR*H E\ü SRPRFQH Z
]DU]G]DQLX ZLHORM ]\F]Q\PL GRNXPHQWDPL ]DU]G]DQLX WU\EDPL GRVW SX Z ]DOH*QRFL GR
SROLW\NLRFKURQ\LQIRUPDFMLGDQHMLQVW\WXFMLGRVWDUF]DQLXF] FLRZHJRGRVW SXGRLQIRUPDFML
Z]DOH*QRFLRGSURILOXX*\WNRZQLNDG]LHG]LQ\ZLHG]\LWG
32=1$
POLSKA
INFOSYSTEM
WIELKOPOLSKA
Ocurrences role types (typy
Z\VWSLH
:
DUW\NXá
wykres
video
2FFXUHQFHVZ\VWSLHQLD
Topic Types (typy topików)
$VVRFLDWLRQW\SHVW\S\SRZL]D
]QDMGXMHVL Z
]QDMGXMHVL Z
RGE\ZDVL
Budowa nowoczesnych aplikacji internetowych z
Z\NRU]\VWDQLHPM ]\ND-DYD
151
•
strukturalizacji
QLHVWUXNWXUDOL]RZDQHM LQIRUPDFML GOD XáDWZLHQLD WZRU]HQLD LQWHUIHMVyZ
X*\WNRZQLND MDNR PDS WRSLNyZ XPR*OLZLDMF\FK áDWZH L V]\ENLH QDZLJRZDQLH ZUyG
informacji.
723,& 0$36 PRJ E\ü UR]XPLDQH MDNR ÄUR]V]HU]RQ\ PHFKDQL]P ]QDF]QLNyZ´ GODWHJR *H
X*\FLH LFK SROHJD QD QDáR*HQLX RNUHORQHM VWUXNWXU\ QD NRQNUHWQ\ ]ELyU LQIRUPDFML EH]
wprowadzania zmian w samych danych i ich formie.
3.5.5. Nawigacja w strukturze TOPIC MAPS
,VWQLHMGZDVSRVRE\X*\FLD723,&0$36QDZLJDFMDSU]\X*\FLXÄlinków” oraz odpytywanie
Z ]áyZU\V
•
1DZLJDFMDSU]\X*\FLXOLQNyZPR*H]RVWDü]DLPSOHPHQWRZDQDMDNRJUDIOXEMDNRVWUXNWXUD
oparta na drzewie.
INTERNET
BOOKMARK
BROWSER
HTTP
HTML
COOKIE
HYPERTEXT
MODEM
Rys. 6. Drzewo nawigacji i graf nawigacji
0DSDWRSLNyZPR*H]DZLHUDüPLOLRQ\Z ]áyZLlinków dlatego odpowiednio jasna reprezentacja
JUDILF]QDWHMVWUXNWXU\PDRJURPQH]QDF]HQLHGODX*\WNRZQLND
•
2GS\W\ZDQLHZ ]áyZZ\PDJD]DVWRVRZDQLDM ]\ND]DS\WD]JRGQHJR ] NRQFHSFM 723,&
0$36 8*\WNRZQLN GHILQLXMF\ ]DS\WDQLD SRWU]HEXMH Z W\P SU]\SDGNX GRGDWNRZHJR
ZVSDUFLD ]H VWURQ\ DSOLNDFML QD SU]\NáDG UR]ZLMDOQH OLVW\ PHQX Z\ZLHWODMFH LQIRUPDFMH
GRVW SQHQDPDSLH
3URMHNWRZDQLH WZRU]HQLH L XWU]\P\ZDQLH PDS WRSLNyZ SURFHGXU\ QDU] G]LD
algorytm, doradztwo)
Projektowanie mapy topików to proces przyrostowy. Definiowanie typów, ról ich nadklas i
SRGNODV PXVL RGE\ZDü VL SRG NRQWURO QDU] G]L ZVSRPDJDMF\FK SURMHNWRZDQLH %DUG]R ZD*QH
MHVW]DSHZQLHQLHVSyMQRFLPDS\
3LHUZV]\P HWDSHP SURMHNWRZDQLD MHVW Z\JHQHURZDQLH ZV]\VWNLFK WRSLNyZ SRZL]D L
Z\VWSLH : GX*\FK DSOLNDFMDFK PRJ LFK E\ü W\VLFH D QDZHW PLOLRQ\ 1DU] G]LH GR
SURMHNWRZDQLD SRZLQQR XPR*OLZLDü áDWZ\ GRVW S GR ZV]\VWNLFK W\FK RELHNWyZ RUD] PLHü
PR*OLZRüVSUDZG]DQLDVSyMQRFLSRZVWDMFHMPDS\
*UDQLFDPL G]\SURMHNWRZDQLHPDWZRU]HQLHPPDS\WRSLNyZMHVWSá\QQD7\ONRZSRF]WNRZHM
ID]LH PR*QD UR]Uy*QLü HWDS GHILQLRZDQLD W\SyZ L UyO ] MHGQHM VWURQ\ L GHILQLRZDQLD WRSLNyZ
Z\VWSLHSRZL]D]GUXJLHM3RGF]DVUR]ZLMDQLDPDS\RELHWHF]\QQRFLPRJE\üZ\NRQ\ZDQH
UyZQROHJOHSU]H]Uy*QHJUXS\VSHFMDOLVWyZ
INTERNET
BOOKMARK
1.2. M
BROWSER
1.3. CO
1.4. HYP
1.5. EM
1.6.
1.7. H
152
-DNXE*Dá VNL.DURO)RUHPVNL$UNDGLXV]%LJRV.U]\V]WRI.DZD=E\V]NR.UyOLNRZVNL
Automatyczna generacja map topików
'RVW SQHLQIRUPDFMHGRDXWRPDW\F]QHJRJHQHURZDQLDPDSVQDVW SXMFH
•
wzorzec mapy topików (ang. topic map template) ze zdefiniowanymi typami topików, typami
Z\VWSLHW\SDPLDVRFMDFML
•
adresy zasobów informacyjnych w systemie plików, bazie danych, Internecie,
•
metadane o zasobach informacyjnych (nazwa, format, klasyfikacja),
•
VWUXNWXUD]DVREyZLQIRUPDFMLGRVW SQDMDNRLQVWDQFMH;0/
$XWRPDW\F]QD JHQHUDFMD MHVW NRQWURORZDQD SU]H] ]ELyU UHJXá ]JURPDG]RQ\FK Z VNU\SFLH
3URJUDP SU]HWZDU]DMF\ LQWHUSUHWXMH VNU\SW SRELHUD GRVW SQH LQIRUPDFMH MDNR SDUDPHWU\
ZHMFLRZH:\QLNLHPMHVWPDSDWRSLNyZ]JRGQD]HVWDQGDUGHP
Rys. 7. Schemat automatycznego generowania map topików
,GHQW\ILNDFMDWRSLNyZLZ\VWSLH
3LHUZV]ID]DXWRPDW\F]QHMJHQHUDFMLMHVWLGHQW\ILNDFMDZUyG]DVREyZLQIRUPDFMLNDQG\GDWyZ
QDWRSLNLRNUHORQHJRW\SX-H*HOL]DVRE\]RVWDQRGQDOH]LRQHWZRU]RQ\MHVWWRSLNLX*\ZDQ\MHVW
DOJRU\WP Z\V]XNXMF\ QD]Z GOD WRSLNX ] ]DVREyZ OXE metainformacji. Potem tworzone jest
SRZL]DQLHWRSLNX]]DVREHPIL]\F]Q\PDQJoccurence).
3U]\NáDGRZDUHJXáDZ\V]XNXMFDWRSLNLZ]ELRU]H]DVREyZPR*HE\üQDVW
SXMFD
if
resource fulfills metadata <condition> and/or
contains
structure <element> in <context> containing <content>
then
create topic of <type> with name derived from metadata
<field> or
name derived from <element> in <context> and
create
occurence to resource with <role>
,GHQW\ILNDFMDSRZL]D
'UXJID]DXWRPDW\F]QHMJHQHUDFMLMHVWWZRU]HQLHSRZL]DSRPL G]\WRSLNDPLVWZRU]RQ\PLZ
SLHUZV]HM ID]LH -HVW WR EDUG]R ]áR*RQH ]DGDQLH SRQLHZD* X]\VNLZDQLH VWUXNWXU ZLHG]\ ]
LVWQLHMF\FKGDQ\FKRGE\ZDVL SU]\X*\FLXDOJRU\WPyZV]WXF]QHMLQWHOLJHQFML
M
APA TOPIKÓW
G
ENERATOR MAPY TOPIKÓW
REPOZYTORIUM
SZABLON MAPY
=%,Ï55(*8à
Budowa nowoczesnych aplikacji internetowych z
Z\NRU]\VWDQLHPM ]\ND-DYD
153
'RVW SQHDSOLNDFMHWZRU]FHPDS\WRSLNyZ
1RUPD,62]RVWDáDRSXEOLNRZDQDZVW\F]QLX$SOLNDFMHVáX*FHGRWZRU]HQLDPDS
WRSLNyZ V MHV]F]H Z WUDNFLH UR]ZRMX 3U]RGXMF ILUP Z ]DNUHVLH WZRU]HQLD RSURJUDPRZDQLD
ZVSRPDJDMFHJR723,&0$36MHVWILUPDInfoLoom. Dostarcza ona oprogramowanie Topic Map
Loom® rozwijane od 5 lat.
'ODF]HJRSRMDZLHQLHVL 723,&0$36MHVWZD*Q\PZ\GDU]HQLHP"
•
723,& 0$36 GDMH PR*OLZRü XQLZHUVDOQHJR áF]HQLD ZLHG]\ Z IRUPLH VLHFL LQIRUPDFML
WZRU]F\FKED] ZLHG]\
•
723,&0$36PDMRJURPQHPR*OLZRFLSU]\]DFKRZDQLXSURVWRW\LHODVW\F]QRFL
•
723,& 0$36 V NURNLHP Z UR]ZRMX LGHL ;0/ XNLHUXQNRZXMF V\VWHP\ SU]HFKRZXMFH
informacje na Internet,
•
723,&0$36PRJE\üWZRU]RQHQDGUy*Q\PL(UyGáDPLLQIRUPDFML+70/6*0/;0/
ASCII, MSWORD, PDF, EMAIL, a nawet nad bazami danych).
Bibliografia
1.
=.UyOLNRZVNL0=DNU]HZLF]URGRZLVNRUR]ZRMXDSOLNDFMLLQWHUQHWRZ\FK2UDFOH:HE$SSOLFDWLRQ6HUYHU
+ Pl/SQL Cartridge, w: PC Kurier, Nr 4/2000, str. 80-86, 2000.
2. Z.
Królikowski, M. Zakrzewicz, Charakterystyka platform rozwoju aplikacji internetowych, Informatyka,
Nr.5, str. 23-30, 2000 r.
3. http://php.zone.pl/.
4. www.webmacro.org.
5. www.netscape.com.
6. http://technet.oracle.com/.
7. http://java.sun.com/.
8. Jason Hunter, William Crawford, "JAVA Servlet Programming", O'REILLY, 1998.
9. Seth White, Maydane Fisher, Rick Cattel, Graham Hamilton, Mark Hapner, "JDBCTM API Tutorial and
Reeference, Second Edition" , Sun Microsystems, 1999.
10. Dokument ISO/IEC-FCD 13250:1999-Topic Maps,
11. Hans Holger Rath, "Technical Issues on Topic Maps".
12. Hans Holger Rath, Steve Pepper, "Topic Maps at work".
13. www.infoloom.com.
14. www.step.pl.
15. www.cogsci.princeton.edu/~wn/ (implementacja Topic Maps).
16. www.quid.fr (implementacja Topic Maps).
17. www.wissen.de (implementacja Topic Maps).