Budowa nowoczesnych aplikacji i Nieznany (2)

background image

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\FKDSOLNDFML SRUWDOL LQWHUQHWRZ\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:HE 3RF]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

background image

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\VWHPRZHM VWRVXQNRZR

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

background image

Budowa nowoczesnych aplikacji internetowych z

Z\NRU]\VWDQLHPM ]\ND-DYD

139

QLVNV]\ENRüG]LDáDQLD ND*GH*GDQLHSRZRGXMHXUXFKRPLHQLHQRZHMLQVWDQFMLSURJUDPX PHP

SRPLPRZLHOXVZRLFK]DOHW áDWZ\GRVW SGRED]GDQ\FKV]\ENRüGREUHZVSDUFLHWHFKQLF]QH PD

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

background image

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\V VWDQRZLVHUZHUED]\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

)

background image

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

background image

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]HQWDFML GOD

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]QDNLHP SRGREQLHMDNZM ]\NX3HUO QDSU]\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

background image

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\FK QDSU]\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üZQRZHMOLQLL PRJE\ü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).

background image

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”).

background image

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>

background image

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üSDUDPHWUXTemplatePath SDUDPHWUWHQRNUHOD

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\PSOLNXLQVWUXNFMDPL QSTemplateExpireTime – 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.

background image

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

background image

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\FKLQIRUPDFMH SRá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.

background image

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\SyZ DQJ
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\VWSLHQLHWRSLNX Loccurence role type URODZ\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]NX DQJassociation
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

 ]DNUHV GRZROQ\SU]\G]LDá QD]ZZ\VWSLHSRZL]D GODRNUHORQHJRWRSLNXMHVW

XZD*DQ\MDNRSRSUDZQ\ VHQVRZQ\ ZRNUHORQ\FKJUDQLFDFKNWyUHPRJDOHQLHPXV]E\ü

Z\UD(QLHZ\VSHF\ILNRZDQH7DJUDQLFDZD*QRFLGDQHJRSU]\G]LDáXMHVWQD]\ZDQD]DNUHVHP
(

VFRSH 1DSU]\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´

background image

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

2FFXUHQFHV Z\VWSLHQLD

Topic Types (typy topików)

$VVRFLDWLRQW\SHV W\S\SRZL]D

]QDMGXMHVL Z

]QDMGXMHVL Z

RGE\ZDVL

background image

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 ]áyZ U\V 

1DZLJDFMDSU]\X*\FLXOLQNyZPR*H]RVWDü]DLPSOHPHQWRZDQDMDNRJUDIOXEMDNRVWUXNWXUD
oparta na drzewie.

INTERNET

BOOKMARK

BROWSER

HTTP

HTML

COOKIE

HYPERTEXT

EMAIL

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

background image

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\P DQJoccurence).

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à

background image

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


Wyszukiwarka

Podobne podstrony:
Budowa nowoczesnych aplikacji internetowych z wykorzystaniem
Budowa kolei transkontynentalne Nieznany
Prezentacja o budowach atomu id Nieznany
1 Budowa i obiegiid 8464 Nieznany (2)
Android 2 Tworzenie aplikacji a Nieznany
Opracowanie Nowoczesne maszyny Nieznany
firewall budowa sieci komuteorw Nieznany
Filtry akwarium budowa id 1710 Nieznany
projektowanie i budowa sieci ko Nieznany
budowa zintegrowanego systemu b Nieznany
Android 3 Tworzenie aplikacji a Nieznany
budowa skory 4 2002 Nieznany (2)
ProgSieciowe 15 Budowa id 39746 Nieznany
Przymierze Nowoczesnej Teologii Nieznany
Budowa i czynnosci eksploatacyj Nieznany
budowa hdd V775QDLSNSEWMN4CQDPY Nieznany (2)
Budowa znaku krotkofalarskiego Nieznany (2)
ABC Visual Basica dla aplikacji Nieznany (2)

więcej podobnych podstron