Trong thời đại bùng nổ thông tin như hiện nay, có rất nhiều cách để trao đổi thông tin như FTP, Email, TELNET, RLOGIN, GOPHER .Nhưng phổ biến nhất vẫn là WWW - World wide web. Luận văn đi sâu vào nghiên cứu tìm hiểu dịch vụ World Wide Web trên mạng, và đặc biệt là tìm hiểu phương pháp khai thác CSDL thông qua Web.
99 trang |
Chia sẻ: tlsuongmuoi | Lượt xem: 1880 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Luận văn Truy cập cơ sở dữ liệu qua Web, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
n PL/SQL, øng dông cña Oracle trªn Oracle7 Server.
H×nh 2.1 KiÕn tróc Oracle Web Server
Any
Browser
Web Listener
Web
Request
Brocker
Live
HTML
Java
PL/SQ
L
Oracle 7
Video
Server
Context
Server
Oracle Web Server
WRB*API
File CGI
Static
File
Perl
Navigator
PowerBrowser
explorer
SS
L
II Nguyªn t¾c ho¹t ®éng cña Oracle Web Server
Oracle WebServer lµ mét HTTP víi mét c¬ së d÷ liÖu kh«ng ®Þnh
tr−íc. Khi WebServer tiÕp nhËn mét URL tõ Browser trªn WWW hoÆc tõ
m¹ng côc bé sö dông giao thøc Web, nã chøa ®ùng th«ng tin tõ c¬ së d÷ liÖu
hay file hÖ thèng cÇn thiÕt ®Ó tr¶ lêi yªu cÇu. HÖ thèng file sö dông Static
Web pages, hay cho CGI Script. C¬ së d÷ liÖu sö dông cho trang Web sinh ra
mét “live” data. Server Web Listener chÊp nhËn mét URL tõ Web Browser vµ
göi ra ngoµi khi Web Listener tiÕp nhËn URL. Web listener x¸c ®Þnh c©u hái
vµ sö dông nh÷ng dÞch vô truy cËp th«ng qua WRB (Web Request Brocker)
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 59
Ebook Team
mét ch−¬ng tr×nh ®−îc truy cËp b»ng CGI Interface hay truy cËp th«ng qua
file hÖ thèng cña c«ng nghÖ trªn Listener.
Khi Web Browser göi yªu cÇu d−íi d¹ng URL tíi Web Listener, Web
Listener sÏ tiÕp nhËn ph©n tÝch URL vµ x¸c ®Þnh dÞch vô thùc hiÖn yªu cÇu
hoÆc th«ng qua WRB. NÕu yªu cÇu mét tµi liÖu tÜnh th× tµi liÖu ®ã sÏ ®−îc lÊy
tõ hÖ thèng files. NÕu yªu cÇu lµ giµnh cho mét øng dông cña CGI th× tiÕn
tr×nh CGI sÏ ho¹t ®éng. NÕu Web Listener kh«ng ®¸p øng ®−îc yªu cÇu th× sÏ
göi qua WRB sau ®ã WRB sÏ göi yªu cÇu ®ã tíi Cartridger nh− PL/SQL,
Java, LiveHTML. NÕu WRB truy cËp ngoµi th× Listener sÏ th«ng qua c©u hái
cho WRB Dispatcher cho mét tiÕn tr×nh, sau ®ã quay trë l¹i gi¶i quyÕt nhiÖm
vô .
WRB Dischaper tù thùc hiÖn yªu cÇu víi sù gióp ®ì cña mét “xÝch”
(pool) cña tiÕn tr×nh ®−îc gäi ®ã lµ ®−îc gäi lµ WRB Executable Engines
(WRBXs). Mét giao diÖn kh¸c WRBX lµ quay trë l¹i sö dông øng dông WRB
API. Cã nh÷ng øng dông ®−îc gäi lµ WRB cartridges. WRB API ®v ®−îc
thiÕt kÕ . Sù kÕt hîp gi÷a mét Cartridges vµ WRB API t¹o ra mét WRB
Service. Th«ng th−êng th× cã 3 lo¹i dÞch vô mµ Oracle WebServer hç trî lµ :
• PL/SQL Cartridges : Thùc hiÖn c¸c thñ tôc PL/SQL sinh mv HTML ®ång
thêi sö dông Oracle Data.
• Java cartridges : Thùc hiÖn Java trªn Server.
• Live HTML : HiÖn ra Web page. Web page ®−îc thùc hiÖn bëi HÖ ®iÒu
hµnh.
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 60
Ebook Team
Web
Browse Listener Pl/sql
Java
<body
>.
WRB
1
6
2
5
3
4
H×nh 2.2 Oracle Web Server Work
Gi¶i thÝch h×nh 2.2
1. Web Browser ®−a ra yªu cÇu URL cho Web Listener
2. Web Listener göi yªu cÇu tíi WRB
3. NÕu PL/SQL ®−îc chän th× sÏ mãc nèi vµo c¬ së d÷ liÖu
4. Thñ tôc PL/SQL sÏ sinh tµi liÖu HTML
5. PL/SQL Agent th«ng qua tµi liÖu HTML tíi Web Listener
6. Web Listener göi tµi liÖu HTML tíi Browser
II.1 The Web Listener (OWL)
Oracle Web Listener lµ mét giao thøc truyÒn th«ng HTTP. Web
Listener cã nhiÖm vô tiÕp nhËn yªu cÇu tõ Web Browser göi ®Õn WRB vµ sau
®ã l¹i nhËn kÕt qu¶ ®Ó göi tr¶ cho Browser. Cho phÐp xö lý ®ång thêi nhiÒu
c©u hái trong cïng thêi gian th«ng qua chuÈn HTTP hay HTTP trªn SSL. Web
Listener vµ Web Client kÕt nèi víi nhau th«ng qua giao thøc HTTP.(H×nh vÏ
2.3)
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 61
Ebook Team
Web
Browser
Oracle
Web
Listener
CGI
Interface
Static
Doccument
Pages
File System
Traditional Static
File Access
HTTP Request
(URLs)
HTM
L
Oracle WebServer
H×nh 2.3 Oracle Web Listener
Mçi tiÕn tr×nh Oracle Web Listenner ®Òu chÊp nhËn kÕt nèi nhiÒu Web
Browser trªn mét hay nhiÒu ®Þa chØ IP/ hoÆc cæng kÕt hîp sö dông HTTP ®Ó
gi¶i mv yªu cÇu tõ siªu v¨n b¶n vµ giao thøc ®iÒu khiÓn truyÒn th«ng TCP/IP
(Transmission Control Protocol) /giao thøc Internet (Internet Protocol) ®−îc
sö dông nh− mét giao thøc kÕt nèi líp d−íi. Mét sè tiÕn tr×nh Web Listener
cã thÓ ch¹y trªn mét m¸y vµo cïng mét thêi ®iÓm.
Th«ng th−êng khi Web Listener më mét file ®v ®−îc yªu cÇu, File sÏ më vµ
¸nh x¹ vµo bé nhí trong cho ®Õn khi Clients sö dông xong vµ kÕt thóc nã.
Web Listener sÏ ®ãng file vµ gi¶i phãng memory mapping kÕt nèi víi nã.
Web Listener cho phÐp x¸c ®Þnh râ c¸c file ë trong cache. Cached file sÏ më
khi client yªu cÇu chóng.
VÒ vÊn ®Ò an toµn d÷ liÖu, Oracle Web Listener cho phÐp t¹o file ¶o
hay th− môc ¶o bëi Authentication Scheme hay Restriction Scheme ®Ó b¶o
vÖ chóng.
II.1.1 Authentication Scheme
Khi mét file hay mét th− môc ®−îc b¶o vÖ bëi Authentication
Scheme, mét Client cã nhu cÇu truy cËp th× ph¶i cung cÊp Username vµ
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 62
Ebook Team
Password. VËy th× Authentication Scheme cho phÐp t¹o tªn cña ng−êi dïng
(nhãm ng−êi dïng) vµ Password cña hä.
Web Listener hç trî hai Authentication Scheme ®ã lµ: Basis Authentication
vµ Digest Authentication. C¶ hai l−îc ®å ®Òu chÝnh x¸c, Digest
Authentication th× göi password tõ Client ®Õn Server d−íi d¹ng mv ho¸ ®−îc
gäi lµ Digest ng−îc víi Basis Authentication th× göi password kh«ng hÒ mv
ho¸ nh− vËy ®é an toµn sÏ bÞ gi¶m ®¸ng kÓ.
Mét vµi Web browser kh«ng hç trî Digest Authentication, nh−ng c¸c file vµ
th− môc ®ßi hái Authentication, v× vËy nªn sö dông digest authentication bÊt
cø khi nµo cã thÓ.
II.1.2 Restriction Scheme
Tr−êng hîp mét file hay mét th− môc ®−îc b¶o vÖ bëi Restriction
Scheme, th× chØ Client ®ang truy cËp Web Listener tõ mét nhãm an toµn míi
cã thÓ truy cËp nã. Cã hai Restriction Scheme mµ Web Listener hç trî ®ã lµ
IP-based restriction vµ Domain-based restriction.
+ IP-based restriction: Cho phÐp ®Þnh nghÜa nhãm an toµn ®−îc ®¸nh dÊu
bëi IP address.
+ Domain-based restriction: Ng−îc víi IP-based restriction, cho phÐp ®Þnh
nghÜa nhãm an toµn bëi DNS host hay Domain name.
Ngoµi vÊn ®Ò an toµn Oracle Web listener cßn hç trî nh÷ng dÞch vô kh¸c nh−
chóng cã thÓ duy tr× mét vµi kiÓu cña tµi liÖu ë nh÷ng d¹ng kh¸c nhau vµ
cung cÊp cho Client nh÷ng d¹ng mµ chóng yªu cÇu.
VÝ dô nÕu Client yªu cÇu tµi liÖu b»ng tiÕng Ph¸p, Web Listener sÏ kiÓm tra
xem cã Version tiÕng Ph¸p kh«ng, nÕu cã sÏ göi tr¶ kÕt qu¶ cho Client, ng−îc
l¹i nÕu kh«ng cã sÏ tr¶ kÕt qu¶ ngÇm ®Þnh, th«ng th−êng lµ tiÕng Anh.
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 63
Ebook Team
Mét Client cã thÓ yªu cÇu tµi liÖu cña mét kiÓu ®Æc biÖt Multipurpose
Internet mail Extensions (MINE). NÕu Web Listener cã thÓ t×m thÊy mét file
yªu cÇu trong yªu cÇu kiÓu MINE , nã sÏ tr¶ l¹i kiÓu ®ã cho Client ng−îc l¹i
nã sÏ tr¶ l¹i kiÓu cña file cã cì nhá nhÊt.
H¬n n÷a Web Listener cã thÓ duy tr× kiÓu cña tµi liÖu ®−îc mv ho¸ bëi
ch−¬ng tr×nh nÐn. VÝ dô nÕu mét client cã thÓ gi¶i nÐn mét tµi liÖu bÞ nÐn bëi
mét ch−¬ng tr×nh. Web Listener cã thÓ tr¶ l¹i cho Client kiÓu nÐn cu¶ tµi liÖu
thay cho viÖc gi¶i nÐn tµi liÖu ®ã.
Web Listener sö dông filename Extention ®Ó ®¸nh dÊu d¹ng cña file
víi kh¶ n¨ng miªu t¶ ng«n ng÷. KiÓu MINE, hay kiÓu mv ho¸ d÷ liÖu, dÔ
dµng h¬n cho viÖc b¶o vÖ vµ th«ng b¸o cho Clients.
Tãm l¹i viÖc sö dông Oracle Web Listener, Web site cña ta cã thÓ tr¶
lêi c©u hái cña Client bëi tµi liÖu HTML ®éng. Còng gièng nh− kü nghÖ
HTTP, Oracle Web Listener cung cÊp cho chóng ta mét giao diÖn gäi lµ
Oracle Web Request Brocker (WRB), cho phÐp Client ch¹y ch¹y ch−¬ng tr×nh
trªn Server vµ tr¶ l¹i d÷ liÖu hiÖu qu¶ h¬n CGI cho phÐp. Web Listener th«ng
qua môc ®Ých cña c©u hái cho ch−¬ng tr×nh WRB Dispacher, víi sù duy tr×
b¶o vÖ cña mét nhãm c¸c tiÕn tr×nh.
II.2 The Web Request Broker (WRB)
The WRB lµ c©u hái kh«ng ®ång bé thùc hiÖn víi mét øng dông API
(Application Program Interface) t¹o mét giao diÖn ®éng vµ kh«ng liÒn m¹ch
víi c«ng nghÖ “back-end” kh«ng gièng nhau ®−îc gäi lµ “ WRB Service”.
WRB bao gåm:
• WRB Dispatcher
• WRB Service
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 64
Ebook Team
• WRB Cartridges
II.2.1 WRB Dispatcher:
Listener tiÕp xóc víi Dispatcher, mét tiÕn tr×nh ch¹y cïng Listener. Khi
tiÕp nhËn URL ®ßi hái WRB ®Ó ph©n phèi dÞch vô yªu cÇu gi÷a mét vµi tiÕn
tr×nh ®ang ch¹y nh− lµ WRBXs(Web Request Broker Excutable Engines). KÕt
qu¶ lµ Listener ®−îc gi¶i phãng ®Ó tiÕp nhËn vµ x¸c nhËn URLs cã hiÖu lùc
®ang ®−îc ®−a vµo, c¸c c©u hái kh¸c thùc hiÖn ë phÝa sau.
II.2.2 WRB Service
WRB hç trî c¸c dÞch vô nh− sau:
1. Listener tiÕp nhËn mét URL ®ßi hái WRB vµ ph©n tÝch nã ®Õn Dispatcher
2. Dispatcher t×m kiÕm mét WRBX rçi ®Ó thùc hiÖn c¸c dÞch vô
3. WRBX ®−a ra mét file mét c¸ch nhanh chãng tíi Web Listener
4. Listener phôc vô c¸c file cho Web Client sö dông HTTP.
II.2.3 WRB Cartridges
WRB API ®v ®−îc thiÕt kÕ nh− thµnh phÇn thø ba cã thÓ viÕt nh−
chÝnh Cartridge ®Ó më réng WebServer.
Mçi khi tiÕp nhËn URL th× cÇn gäi WRB, Web Listener thùc hiÖn hiÖn c©u
hái th«ng qua WRB Dispatcher hay Dispatcher. Dispatcher ®¶m b¶o viÖc
kÕt nèi víi mét nhãm c¸c tiÕn tr×nh gäi lµ WRBXs (Web Request Brocker
Excutable Engines). Mét giao diÖn kh¸c WRBX ®ã lµ th«ng qua WRB API
tíi mét WRB Cartridge cã thÓ cã c¸c kiÓu sau:
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 65
Ebook Team
• The PL/SQL Agent: Thùc hiÖn nh÷ng c©u lÖnh PL/SQL chøa trong c¬ së
d÷ liÖu. Nh×n mét c¸ch l¹c quan th× nã cã thÓ tèt h¬n Java Cartridge nh−ng
l¹i kh«ng cã tÊt c¶ nh÷ng chøc n¨ng mµ Java cã.
• The Java Interpreter: Thùc hiÖn Java trªn Server sinh ra trang Web ®éng.
Cã thÓ thùc hiÖn PL/SQL thiÕu Java nÕu sö dông Cartridge nµy.
• The Live HTML Interpreter: §©y lµ sù thi hµnh trªn ph¹m vi réng cña
c«ng nghÖ Server Side Includes. Víi Live HTML cã thÓ tÝnh ®Õn c¶ trang
Web ®−a ra ngoµi víi bÊt kú mét ch−¬ng tr×nh nµo cña hÖ ®iÒu hµnh còng
cã thÓ thùc hiÖn ®−îc.
Sù kÕt hîp gi÷a Cartridge vµ WRB API t¹o thµnh mét WRB Service. WRBXs
lµ mét tr−êng hîp ®Æc biÖt cña WRB Services. Cã ba kiÓu dÞch vô WRB t−¬ng
øng víi 3 WRB Cartridge trong khi WRBXs ®v t¹o vµ ph¸ huû nã tuú theo
c«ng viÖc.
Dispatcher t¹o vµ b¶o vÖ WRBXs, d÷ liÖu th«ng qua mét WRBX bao gåm:
• The URL khëi sù mét qu¸ tr×nh
• Ng«n ng÷ mong −íc cña kÕt qu¶
• Ký tù mong −íc cña mét kÕt qu¶ (Ng«n ng÷ ®v ®−îc mv ho¸ vÝ dô nh−
ISO hay Unicode)
• BiÕn m«i tr−êng CGI cho phÐp cho phÐp WRB Cartridge ch¹y mét øng
dông ®−îc viÕt bëi CGI.
• NÕu c©u hái dÝnh d¸ng ®Õn viÖc sö dông PL/SQL Agent th× DCDs
(Database Connection Descriports) ®−îc sö dông.
Dispatcher liªn tôc ®iÒu chØnh c«ng viÖc t¶i sè l−îng WRBXs ®ang ch¹y
trong thêi gian cho phÐp, ®èi t−îng khai b¸o chÝnh. Cã nh÷ng khai b¸o
®−îc ®Æt bëi ng−êi qu¶n trÞ WebServer, ng−êi quyÕt ®Þnh sè l−îng
WRBXs ch¹y lµ lín nhÊt hay nhá nhÊt. Dispatcher t¹o mét t¹o mét
WRBXs theo yªu cÇu vµ kÕt nèi chóng víi dÞch vô WRB phï hîp.
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 66
Ebook Team
Dispatcher gi÷ dÊu vÕt cña WRBXs ®ang thùc hiÖn yªu cÇu vµ WRBXs tù
do. WRBXs l¾p r¸p c¸c tiÕn tr×nh ®¬n ®Ó liªn l¹c víi WRB Dispatcher sö
dông c¬ chÕ dßng d÷ liÖu phï hîp víi hÖ ®iÒu hµnh (nh− lµ mét PIPE
trong UNIX).
Oracle
Web
Listener
Dispatcherr
Dynamically created files
WRB
Cartridge
WRB
Cartridge
WRB Request
H×nh 2.4 Web Request Broker
II.3 rcure Socket Layer (SSL)
Lµ mét chuÈn an toµn trªn m¹ng. Cã 3 khÝa c¹nh an toµn ®ã lµ:
1. Mv hãa: Mét c«ng nghÖ phôc vô cho viÖc mv ho¸ vµ gi¶i mv d÷ liÖu .
2. TÝnh chÝnh x¸c: Minh chøng cho sù ®óng ®¾n cña th«ng tin
3. TÝnh toµn vÑn d÷ liÖu: Mét c«ng nghÖ phôc vô cho viÖc thÈm tra l¹i toµn
bé d÷ liÖu ®v ®−îc chuyÓn giao vµ chØ d÷ liÖu ®v ®−îc chuyÓn giao trän vÑn
vµ ®−îc chÊp nhËn mét c¸ch ®óng ®¾n.
ViÖc thùc hiÖn mét SSL cña Oracle Web Server sÏ cã vÊn ®Ò khi d÷ liÖu
göi tõ Server ®Õn Clients bÞ mv ho¸ ( Web Browser Programs). Oracle Web
Server ®v ®−a ra mét c¸ch kh¾c phôc lµ Server vÉn göi d÷ liÖu d−íi d¹ng bÞ
mv ho¸ vµ Clients cã thÓ phôc håi nh÷ng th«ng tin bÞ mv ho¸ khi tiÕp nhËn
nh÷ng th«ng tin ®ã.
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 67
Ebook Team
Mét hÖ thèng mv ho¸ truyÒn thèng ®−îc gäi lµ hÖ thèng kho¸ bÝ mËt
(Secret-key) sö dông c¸c sè ®−îc gäi lµ khãa mv ho¸ vµ gi¶i mv th«ng tin
®−îc sö dông. HÖ thèng kho¸ bÝ mËt nµy lµ cùc kú ch¾c ch¾n.
SSL sö dông mét d¹ng cña sù mv ho¸ gäi lµ Public-key encryption ®Ó mv
ho¸ vµ gi¶i mv d÷ liÖu, kh«ng gièng hÖ thèng mv ho¸ seckret-key, hÖ thèng
Public-key sö dông c¶ hai kho¸ (key pairs). Mét kho¸ ®−îc gäi lµ kho¸ c«ng
céng (Public-key) dïng ®Ó mv ho¸ th«ng tin, cßn khãa kia ®−îc gäi lµ kho¸
riªng (Private key) sö dông ®Ó gi¶i mv th«ng tin. C¶ hai khãa ®Òu lµ c¸c sè tù
do liªn hÖ chÝnh x¸c víi nhau.
NÕu muèn nhËn th«ng tin ®v ®−îc mv ho¸ sö dông kho¸ céng céng th×
®Çu tiªn lµ ph¶i ch¹y ch−¬ng tr×nh sinh ra bëi mét trong hai kho¸, sau ®ã ph¶i
c«ng bè kho¸ c«ng céng trong mét c¬ së d÷ liÖu hay mét th− môc, vµ chøa
kho¸ riªng trong mét vïng an toµn trªn m¸y tÝnh. Nh−ng nã cã mét nh−îc
®iÓm lµ sù mv hãa cña kho¸ c«ng céng phô thuéc hoµn toµn vµo ®é bÝ mËt cña
kho¸ riªng.
BÊt kú mét ai muèn göi mét th«ng tin ®v ®−îc mv ho¸ th× ®Òu ph¶i
nh×n vµo kho¸ c«ng céng trong mét th− môc, sö dông mv ho¸ th«ng tin vµ göi
tíi th«ng tin ®v ®−îc mv ho¸. ChØ cã kho¸ riªng cña b¹n míi cã thÓ gi¶i mv
®−îc th«ng tin ®ã. V× vËy nÕu b¹n gi÷ kho¸ riªng cña b¹n mét c¸ch bÝ mËt th×
kh«ng mét ai kh¸c cã thÓ ®äc ®−îc th«ng tin cña b¹n.
Bëi v× kho¸ c«ng céng ®Ó mv hãa th× sÏ chËm h¬n kho¸ bÝ mËt (secret-
key). SSL sÏ chØ ®−îc sö dông nã khi Client ®Çu tiªn kÕt nèi vµo WebServer
®Ó thay ®æi kho¸ bÝ mËt nã ®−îc gäi lµ mét session key, víi c¶ Client vµ
Server ®Òu sö dông sù mv ho¸ vµ gi¶i mv d÷ liÖu.
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 68
Ebook Team
Mét øng dông kh¸c cña sù mv ho¸ ®ã lµ sù chÝnh x¸c. Sù chÝnh x¸c sö
dông mv ho¸ kho¸ c«ng céng bao gåm viÖc sö dông ch÷ ký ®iÖn tö, c«ng
viÖc nµy t−¬ng tù nh− ch÷ ký b»ng tay.
NÕu chóng ta muèn “ký” mét tµi liÖu ®iÖn tö trong mét khu«n khæ rµng
buéc vÒ mÆt ph¸p lý, th× cÇn ph¶i tiÕn hµnh víi c¶ hai kho¸. §Çu tiªn ph¶i
ch¹y mét ch−¬ng tr×nh sinh ra ch÷ ký ®iÖn tö cã sö dông kho¸ riªng vµ tµi
liÖu cña chÝnh nã. Sau ®ã cã thÓ g¾n chÆt ch÷ ký ®iÖn tö víi tµi liÖu vµ göi nã
®i. NÕu bÊt kú mét ai muèn tiÕp nhËn tµi liÖu ®ã th× cïng víi ch÷ ký ®iÖn tö
cã thÓ sö dông c¶ kho¸ c«ng céng cña b¹n ®Ó thÈm tra ®Æc tÝnh cña b¹n,vµ tµi
liÖu ®ã kh«ng bÞ lµ x¸o trén .
Cuèi cïng lµ viÖc chøng nhËn quyÒn (Certificates and Certifying
Cuthorities) x¶y ra khi Clients kÕt nèi vµo Website ®Ó chuyÓn giao ®ßi hái
cña chóng. Tr−íc tiªn cã thÓ kiÓm tra Username/Passwork nÕu ®óng
WebServer sÏ cÊp ph¸t quyÒn tr−íc khi sù chuyÓn giao cã thÓ tiÕn hµnh.
II.4 Qu¶n lý Web Server
The WebServer cã thÓ sö dông tõ bÊt kú mét Web Browser nµo, nã cã
nh÷ng thµnh phÇn chÝnh nh− sau:
• The Listener Pages
• The WRB Pages
• The PL/SQL Agent Pages
• The Oracle7 Server Pages
II.4.1 Listener Pages
Nhãm giao thiÖp réng nhÊt víi sù qu¶n lý ®ã lµ Web Listener. Tuy
nhiªn cã nh÷ng d¹ng chØ khi ®v nhËp ®Çy gi¸ trÞ cho nh÷ng khai b¸o cÊu h×nh
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 69
Ebook Team
kh¸c nhau. Trõ nh÷ng trang an toµn, cÇn ph¶i ®Þnh râ l−îc ®å an toµn sÏ sö
dông bao gåm c¸c thao t¸c sau.
• NÕu chän Restriction th× ®Þa chØ IP hay Domain names sÏ trao quyÒn truy
cËp.
• nÕu chän Authentication th× ph¶i nhËp tªn vµ Password th× míi ®−îc truy
cËp.
II.4.2 WRB Pages
Cã nh÷ng trang ta cÇn ph¶i x¸c ®Þnh râ th− môc thùc vµ ¶o cho WRB
cartrridges thËt tèt nh− lµ sè cña WRBXs
II.4.3 PL/SQL Agent Pages
ViÖc qu¶n lý PL/SQL Agent cã nghÜa lµ qu¶n lý viÖc m« t¶ kÕt nèi c¬
së d÷ liÖu (Database Connection Descriptors(DCDs) sö dông ®Ó kiÕn thiÕt nã
vµ chØ râ khi kÕt hîp víi c¬ së d÷ liÖu.
II.4.4 Oracle7 Server Manager
Oracle7 Server lµ mét s¶n phÈm tinh vi h¬n. Nã thÝch hîp h¬n cho viÖc
qu¶n lý sö dông Oracle Server hay mét c¸ch trùc tiÕp th«ng qua ng«n ng÷
SQL.
II.5 Giao diÖn CGI
Khi Web Listener nhËn mét ®Þa chØ URL nh− mét c©u hái thùc hiÖn
mét øng dông CGI. Web Listener th«ng qua URL tíi nh÷ng tiÕn tr×nh nµy vµ
kÕt hîp víi nã th«ng qua chuÈn vµo vµ chuÈn ra, bëi vËy tiÕn tr×nh CGI cã thÓ
lÊy d÷ liÖu nhËp vµo nÕu cÇn tõ URL hay tõ chuÈn vµo (standard Input). Vµ sÏ
göi chóng ra Web Listener th«ng qua chuÈn ra (standard output) vµ Web
Listener göi cho Browser. (H×nh 2.5)
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 70
Ebook Team
II.6
Web
Client Web
Server
Prog1
CGI-bin
Prog1 Prog2
HTML
HTTP Daemon
Request
H×nh 2.5Giao diÖn CGI
PL/SQL Agent
Mét WRBX sö dông PL/SQL kÕt nèi ngay lËp tøc víi c¬ së d÷ liÖu khi
nã ®v ®−îc t¹o vµ ®îi mét c©u hái ®−a vµo.§iÒu nµycho phÐp yªu cÇu ®−îc
tiÕn hµnh mét c¸ch nhanh chãng h¬n. L−îc ®å c¬ së d÷ liÖu cho phÐp WRBX
kÕt nèi vµ x¸c ®Þnh râ trong cÊu h×nh File.
II.7 X¸c ®Þnh vµ Sö dông PL/SQL
NÕu mét URL ®−a mét c©u hái chøa ®ùng s©u “OWA”. Listener hoµn
thiÖn c©u hái sö dông PL/SQL Agent. C«ng viÖc nµy sÏ th«ng qua WRB hay
CGI phô thuéc vµo ng−êi qu¶n trÞ WebServer ®v ®Æt cÊu h×nh “chØ dÉn ¸nh
x¹” (directory mappings) nh− thÕ nµo. Khi ®ã PL/SQL Agent sÏ thùc hiÖn øng
dông viÕt bëi PL/SQL vµ tr¶ l¹i d¹ng HTML cho WebListener ®−a ra trang
Web.
Khi mét URL chøa ®ùng PL/SQL Agent, nã bao gåm mét DCD
(Database Connection Descriptor). DCD x¸c ®Þnh c¶ hai ®Æc quyÒn truy nhËp
c¬ së d÷ liÖu PL/SQL Agent khi thùc hiÖn yªu cÇu vµ l−îc ®å ho¸.
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 71
Ebook Team
C¸c thñ tôc PL/SQL tån t¹i trong c¬ së d÷ liÖu. PL/SQL Agent bao hµm c©u
lÖnh ®−îc ®−a tíi c¬ së d÷ liÖu, Sau ®ã tiÕn hµnh thùc hiÖn vµ göi ra ngoµi vµ
th«ng b¸o tr¹ng th¸i trë l¹i cho PL/SQL Agent.
B. X©y dùng ch−¬ng tr×nh truy nhËp c¬ së d÷ liÖu
theo giao diÖn CGI
Nh− ®v nãi ë trªn ch−¬ng tr×nh CGI (Common GateWay Interface) lµ
c«ng nghÖ chuÈn ®−îc sö dông bëi mét Web Listener dïng HTTP Server ®Ó
thùc hiÖn mét ch−¬ng tr×nh sinh ra tµi liÖu d¹ng HTML. VÝ dô ta cã thÓ viÕt
mét ch−¬ng tr×nh CGI ®Ó thùc hiÖn viÖc l−u tr÷ vµ lÊy d÷ liÖu tõ mét hÖ c¬ së
d÷ liÖu bÊt kú d−íi nhiÒu d¹ng kh¸c nhau kÓ c¶ d−íi d¹ng nhÞ ph©n (file ¶nh )
tøc lµ hoµn toµn cã thÓ thao t¸c víi c¬ së d÷ liÖu th«ng qua Web.
Cô thÓ víi hÖ c¬ së d÷ liÖu ORACLE cho phÐp mçi User cã thÓ kÕt nèi
víi CSDL b»ng chÝnh tªn m×nh ®v ®¨ng ký hoÆc ch¹y PL/SQL vµ giao diÖn
víi Oracle7 Server. §Æc biÖt lµ chóng ta cã thÓ viÕt mét ch−¬ng tr×nh CGI
b»ng nhiÒu ng«n nh− C/C++, COBOL. . . mµ qua Web ta cã thÓ Select, Insert,
Update . . d÷ liÖu tõ mét Table nµo ®ã trong c¬ së d÷ liÖu. Nh÷ng ch−¬ng
tr×nh CGI nh− vËy ®−îc gäi lµ OCI (Oracle Call Interface). §Ó viÕt mét
ch−¬ng tr×nh OCI cã thÓ tiÕn hµnh theo c¸c b−íc nh− sau:
• X¸c ®Þnh cÊu tróc d÷ liÖu cho phÐp kÕt nèi vµo Oracle Server nµo hay c¬
së d÷ liÖu nµo.
• KÕt nèi vµo mét hay nhiÒu c¬ së d÷ liÖu Oracle.
• Më mét hay nhiÒu tiÕn tr×nh SQL cÇn thiÕt cho ch−¬ng tr×nh.
• X¸c ®Þnh nhiÖm vô cña SQL hay PL/SQL cho ch−¬ng tr×nh.
• §ãng c¸c Cursors
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 72
Ebook Team
• Huû bá kÕt nèi tõ c¬ së d÷ liÖu.
Tuy nhiªn nã cã nh−îc ®iÓm nhá lµ ng÷ tr×nh th«ng qua chuÈn CGI do
dïng c¸c biÕn m«i tr−êng nªn thùc thi chËm. Nh−ng l¹i cã −u ®iÓm lµ khi
ch¹y ®−a ra kÕt qu¶ lµ tµi liÖu HTML chuÈn. §Ó kh¾c phôc nh−îc ®iÓm ®ã
ng−êi ta ®v ®−a ra gi¶i ph¸p lµ dïng OWA (Oracle Web Agent)
I OWA - ORACLE WEB AGENT
I.1 Oracle Web Agent lµ g×
OWA lµ nh÷ng ch−¬ng tr×nh con ®−îc x©y dùng thµnh thñ tôc, hµm
mang chøc n¨ng kh¸c nhau trong PL/SQL cña Oracle. Dïng OWA ®Ó biÕn
c©u hái cña User th«ng qua c¸c Store Procedure chuyÓn thµnh trang Web vµ
tr¶ l¹i kÕt qu¶. §Ó hiÓu ®−îc tÝnh n¨ng còng nh− nhiÖm vô cña OWA tr−íc
hÕt chóng ta xem xÐt hai kh¸i niÖm HTP (Hypertext Procedure) vµ HTF
(Hypertext Function).
I.2 Hypertext Procedure (HTP)
Mét HTP ®−îc sinh ra lµ “mét dßng“ trong tµi liÖu HTML cã chøa
®ùng nh÷ng thÎ HTML. VÝ dô Htp.anchor lµ thñ tôc sinh ra mét anchor tag.
HTP phÇn lín sÏ sö dông nh÷ng OWA.
I.3 Hypertext Function
Mét HTF tr¶ l¹i nh÷ng thÎ HTML t−¬ng øng víi chÝnh tªn cña nã. Tuy
nhiªn nã kh«ng thÝch ®¸ng ®−îc gäi lµ mét HTF bëi v× thÎ HTML kh«ng
th«ng qua PL/SQL Agent. §Çu ra cña mét HTF ph¶i th«ng qua HTP.printf
®−îc s¾p xÕp mét phÇn trong tµi liÖu HTML
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 73
Ebook Team
Mäi HTF ®Òu t−¬ng øng víi mét HTP. MÆc dï vËy HTF ®−îc sinh ra
chØ khi ng−êi lËp tr×nh cÇn gäi ®Õn, vÝ dô :
htp.header(1,htf.italic(‘Title’));
Víi dßng lÖnh trªn htf.italic sÏ cho ta s©u ký tù Title vµ sau khi
th«ng qua htp.header th× s©u ký tù ®−îc sinh ra trong tµi liÖu HTML sÏ cã
d¹ng nh− sau:
Title
I.4 C¸c OWA c¬ b¶n
I.4.1 OWA_UTIL (owa_utilities)
Lµ tËp hîp cña ®Çy ®ñ tiÖn Ých thñ tôc ®Ó x©y dùng HTF & HTP. Tuú
theo môc ®Ých mµ ng−êi lËp tr×nh cã thÓ sö dông hµm hoÆc thñ tôc nµo ch¼ng
h¹n cã thÓ dïng hµm OWA_util.get_cgi_env(param_name in Varchar2) ®Ó
x¸c ®Þnh biÕn m«i tr−êng CGI ®v dïng trong ch−¬ng tr×nh, hoÆc cã thÓ dïng
thñ tôc OWA_util.showpage ®Ó x¸c ®Þnh ®Çu ra HTML cña mét thñ tôc
PL/SQL gäi tõ SQL*PLUS hay SQL*DBA,. . .
I.4.2 OWA_PATTERN (Pattern Matching Utilities)
OWA_pattern cung cÊp cho chóng ta 3 ho¹t ®éng sau ®©y:
+ MATCH: X¸c ®Þnh râ mét biÓu thøc ®v tån t¹i trong mét x©u. §©y lµ mét
hµm tr¶ l¹i gi¸ trÞ TRUE hay FALSE
+ AMATCH: §©y lµ hµm tr¶ l¹i gi¸ trÞ nguyªn vµ kÕt thóc mét x©u mµ biÓu
thøc th−êng ®v t×m thÊy. NÕu biÓu thøc kh«ng t×m thÊy sÏ tr¶ l¹i gi¸ trÞ lµ 0
+ CHANGE: Cho phÐp thay thÕ (cËp nhËt) phÇn chia cña x©u ®v ®−îc
Matched víi mét biÓu thøc th«ng th−êng vµ x©u míi. CHANGE cã thÓ lµ mét
thñ tôc hay mét hµm. NÕu lµ hµm th× tr¶ l¹i thêi gian t×m thÊy vµ thay thÕ
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 74
Ebook Team
• OWA_TEXT (Text Manipulation Utilities)
OWA _text ®−îc sö dông chñ yÕu bëi OWA _pattern nh−ng hµm lµ
“ngo¹i hiÖn” mµ chóng ta cã thÓ sö dông chóng mét c¸ch trùc tiÕp nÕu ®v
hoµn toµn ®ång ý. VÝ dô cã thÓ cã thÓ dïng OWA_text ®Ó chuyÓn ®æi mét
x©u dµi thµnh nhiÒu dßng hoÆc cã thÓ thªm néi dung vµo mét dßng,. . .
I.4.3 OWA_COOKIE (Cookie Utilities)
Lµ mét gãi bao bäc ®Çy ®ñ ta cã thÓ göi vµ lÊy cookies tõ Client,
Cookie kh«ng râ rµng ®èi víi Client. Nã duy tr× tr¹ng th¸i th«ng qua phiªn
lµm viÖc cña Client. Ta cã thÓ chuyÓn ®æi th«ng tin tõ d¹ng x©u sang mét
Cookie nÕu sö dông hµm OWA_cookie.get(name), . . .
I.4.4 OWA_INIT
§©y lµ gãi chøa ®Çy ®ñ mäi th«ng tin vÒ thêi gian. Ch¼ng h¹n ta cã thÓ
®Æt tr−íc thêi gian sö dông Cookie víi giê quy ®Þnh GMT (Greenwich Mean
Time). Cookie sÏ chØ sö dông ®óng kho¶ng thêi gian ®v ®−îc ®Þnh nghÜa.
NÕu kh«ng ë trong mói giê GMT th× cã thÓ ®−a vïng thêi gian sö dông vµo.
I.5 X©y dùng ch−¬ng tr×nh
Th«ng th−êng víi mét hÖ c¬ së d÷ liÖu nÕu chóng ta muèn thao t¸c
®−îc víi d÷ liÖu trong hÖ c¬ së d÷ liÖu th× chóng ta ph¶i trùc tiÕp sö dông hÖ
c¬ së d÷ liÖu ®ã. Ch¼ng h¹n nÕu muèn thay ®æi d÷ liÖu tõ mét Table trong HÖ
qu¶n trÞ c¬ së d÷ liÖu Oracle th× chóng ta ph¶i trùc tiÕp t¸c ®éng vµo Table ®ã
th«ng qua ng«n ng÷ SQL (Structure Query Language). Nh−ng thay v× c«ng
viÖc lµ ph¶i nhËp d÷ liÖu trùc tiÕp vµo Table b»ng c©u lÖnh Insert, hay xem d÷
liÖu b»ng c©u lÖnh Select trong m«i tr−êng ng«n ng÷ SQL, th× ta cã thÓ x©m
nhËp vµo c¬ së d÷ liÖu ®Ó thao t¸c víi c¬ së d÷ liÖu ®ã trªn Web. Th«ng qua
Web ng−êi sö dông kh«ng cÇn biÕt m×nh ®ang sö dông hÖ c¬ së d÷ liÖu nµo,
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 75
Ebook Team
vµ nã thùc hiÖn nh− thÕ nµo nh−ng vÉn ®¶m b¶o ®¸p øng ®óng nhu cÇu.
Ch¼ng h¹n víi ch−¬ng tr×nh FULL_TEXT (®−îc x©y dùng t¹i CSE): Lµ
ch−¬ng tr×nh Tra cøu néi dung c¸c v¨n b¶n cho Bé Ngo¹i Giao, ®−îc x©y
dùng n¨m 1997 trªn m«i tr−êng ORACLE. Ch−¬ng tr×nh cho phÐp truy nhËp
®Õn néi dung c¸c v¨n b¶n l−u gi÷ trong Database cña Oracle, t×m kiÕm trong
néi dung cña toµn bé c¸c v¨n b¶n c¸c tõ, côm tõ vµ sau ®ã cho phÐp ng−êi
dïng cã thÓ hiÓn thÞ ®Çy ®ñ toµn bé néi dung c¸c v¨n b¶n t×m ®−îc trªn Web.
§èi víi hÖ qu¶n trÞ c¬ së d÷ liÖu ORACLE, khi ng−êi sö dông nhËp d÷
liÖu th«ng qua Form giao diÖn, Web Browser tr×nh diÖn yªu cÇu ®ã lªn Oracle
Web Server. Web Listener cã nhiÖm vô “nghe“ vµ tiÕp nhËn yªu cÇu URL göi
vµo tõ ®©u th«ng qua cæng giao diÖn nµo, sau ®ã sÏ x¸c ®Þnh dÞch vô yªu cÇu
vµ göi tíi WRB (Web Request Broker). WRB göi yªu cÇu ®ã tíi c¸c
Cartridger nh− PL/SQL, JAVA vµ WRBXs (Web Request Broker) gäi thùc
hiÖn tiÕn tr×nh CGI. Sau khi thùc hiÖn xong tiÕn tr×nh CGI tr¶ l¹i kÕt qu¶ d÷
liÖu d−íi d¹ng mv HTML chuÈn. WRB göi kÕt qu¶ ®ã tíi Web Listener, Web
Listener göi tr¶ Web Browser, qu¸ tr×nh kÕt thóc.
Sau ®©y lµ ch−¬ng tr×nh minh ho¹, ch−¬ng tr×nh ®−îc x©y dùng nh»m
thÓ hiÖn viÖc th«ng qua Web ng−êi sö dông t¸c ®éng nh− thÕ nµo tíi c¬ së d÷
liÖu. Ch−¬ng tr×nh cã sö dông nh÷ng OWA c¬ b¶n, vµ Table ngay_sinh trong
Database DU/DU@STU. Ch−¬ng tr×nh bao gåm 1 Package demo1 víi 7 thñ
tôc sau:
• Thñ tôc thø nhÊt nhap_dk ®¶m nhiÖm chøc n¨ng t¹o mét Form giao diÖn
®Ó ng−êi dïng nhËp d÷ liÖu yªu cÇu vµ tr×nh diÖn yªu cÇu lªn Oracle Web
Server. Sau khi tr×nh diÖn lªn Server thñ tôc hien_kq sÏ ®−îc gäi b»ng c©u
lÖnh:
htp.print(‘’);
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 76
Ebook Team
Khi nhËn ®−îc yªu cÇu Web Listener sÏ “nghe” yªu cÇu vµ göi tíi Web
Request Broker. Web Request Broker gäi ®Õn Cartridger SQL vµ t×m kiÕm
Table. Khi ®v t×m thÊy sÏ tiÕn hµnh thùc hiÖn nhiÖm vô t×m kiÕm theo yªu cÇu
vµ tr¶ l¹i kÕt qu¶:
if para is not null then
para := 'select hoten, NS from Ngay_sinh Tab1 where ' ||
para;
end if;
if para is null then
para:='select hoten, NS from ngay_sinh Tab1';
end if;
c1:=dbms_sql.open_cursor;
dbms_sql.parse(c1,para, dbms_sql.v7);
dbms_sql.define_column(c1,1,ho_ten, 30);
dbms_sql.define_column(c1,2,ngay_sinh);
status := dbms_sql.execute(c1);
loop
if dbms_sql.fetch_rows(c1) >0 then
ts:=ts+1;
dbms_sql.column_value(c1,1,ho_ten);
dbms_sql.column_value(c1,2,ngay_sinh);
htp.print('');
htp.print(''||Ho_ten|| '||ngay_sinh||
');
htp.print(‘’);
else exit;
end if;
end loop;
Sau khi thùc hiÖn xong thñ tôc hien_kq ®−a ra kÕt qu¶ d−íi d¹ng mv HTML
chuÈn. DÞch vô WRB Service sÏ nhËn kÕt qu¶ vµ göi tr¶ Web Listener. Web
Listener b¸o tÝn hiÖu hoµn thµnh vµ göi tr¶ Web Browser.
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 77
Ebook Team
VÝ dô ta muèn xem tÊt c¶ nh÷ng ng−êi sinh tõ ngµy 10/10/60 ®Õn ngµy
10/10/80. NhËp ®iÒu kiÖn.
Sau khi nhËp vµo ®iÒu kiÖn xem xÐt vµ chän nót OK ta ®−îc kÕt qu¶ tr¶ vÒ
trªn Web Browser nh− sau:
• Thñ tôc test cã chøc n¨ng cho ng−êi dïng xem toµn bé d÷ liÖu cã trong c¬
së d÷ liÖu. Khi Web Browser tr×nh diÖn yªu cÇu tíi Web Server. Web Listener
“nghe” yªu cÇu vµ göi ®Õn WRB, sau khi WRBXs thùc hiÖn xong tiÕn tr×nh
CGI göi tr¶ kÕt qu¶ lµ c©u lÖnh tíi WRB Cartridger PL/SQL
Select * from ngay_sinh;
Sau khi thùc hiÖn xong kÕt qu¶ hiÖn lªn Web Browser nh− sau:
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 78
Ebook Team
• Thñ tôc thø ba Form_nhap cã chøc n¨ng t¹o mét Form giao diÖn nhËn
th«ng tin cña ng−êi dïng. Khi thñ tôc nµy ®−îc gäi nã sÏ gäi tiÕp ®Õn thñ tôc
insert_data
htp.print(‘<Form
action=””>’);
Thñ tôc insert_data ®¶m nhËn chøc n¨ng tiÕp nhËn th«ng tin ng−êi sö dông
tr×nh diÖn lªn tõ Form_nhap vµ nhËp d÷ liÖu vµo c¬ së d÷ liÖu.
begin
htp.print('');
htp.print('');
insert into DU.ngay_sinh values(ten,
to_date(ngay,'dd/mm/yy'));
htp.print('§· Insert D÷ LiÖu Vµo Table ');
htp.print('');
htp.print('');
end;
Sau khi thñ tôc nµy thùc hiÖn Cartridger SQL nhËn d−îc c©u lÖnh:
insert into DU.ngay_sinh values(ten, to_date(ngay,'dd/mm/yy'));
VÝ dô muèn nhËp thªm d÷ liÖu vµo Table ta chØ viÖc nhËp vµo Form giao diÖn:
Sau khi ®v nhËp d÷ liÖu nhÊn nót OK th× d÷ liÖu ®−îc nhËp vµo Table
chØ ®Þnh, kÕt qu¶ tr¶ vÒ trªn Web Browser nh− sau:
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 79
Ebook Team
• Thñ tôc nhap_dkx ®¶m nhËn chøc n¨ng t¹o mét form giao diÖn ®Ó ng−êi
dïng nhËp th«ng tin cÇn thiÕt ®Ó xo¸ d÷ liÖu theo ®iÒu kiÖn. Khi Web Browser
tr×nh diÖn yªu cÇu lªn Web Server thñ tôc hien_kqx sÏ ®−îc gäi.
htp.print(‘’);
Thñ tôc nµy cã chøc n¨ng tiÕp nhËn th«ng tin nhËp vµo tõ form ®−îc t¹o ra
trong thñ tôc nhap_dkx vµ xo¸ d÷ liÖu theo ®óng yªu cÇu nhËn ®−îc. Khi
tiÕn tr×nh CGI nhap_dkx ho¹t ®éng sÏ gäi ®Õn Cartridger SQL:
if para is not null then
para := 'delete Ngay_sinh tab where ' || para;
end if;
if para is null then
para:='delete ngay_sinh ';
end if;
cursor_name := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(cursor_name, para, DBMS_SQL.V7);
ret := DBMS_SQL.EXECUTE(cursor_name);
DBMS_SQL.CLOSE_CURSOR(cursor_name);
Sau khi thùc hiÖn xong tiÕn tr×nh CGI nµy Cartridger PL/SQL nhËn ®−îc c©u
lÖnh:
delete Ngay_sinh tab where ' || para;
VÝ dô cã thÓ xo¸ bÊt kú mét row nµo ®ã theo ®iÒu kiÖn nhËp. Ch¼ng h¹n ta
muèn xo¸ mét ng−êi cã tªn NguyÔn H÷u Th¾ng
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 80
Ebook Team
Sau khi nhÉn nót OK Cartridger PL/SQL sÏ nhËn ®−îc c©u lÖnh
Delete ngay_sinh tab where hoten=’NguyÔn H÷u Th¾ng’;
d÷ liÖu trong Table sÏ bÞ xo¸ theo ®iÒu kiÖn hä tªn lµ La V¨n CÇu. KÕt qu¶
nh− sau:
KÕt luËn
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 81
Ebook Team
Trong thêi gian lµm luËn v¨n em ®n t×m hiÓu vµ nghiªn cøu ®−îc mét
sè vÊn ®Ò hÖ qu¶n trÞ c¬ së d÷ liÖu Oracle víi Oracle Web Server, hÖ thèng
Web nãi chung vµ dÞch vô Web trªn m¹ng. Tõ ®ã t×m hiÓu c¸ch thøc khai th¸c
c¬ së d÷ liÖu th«ng qua Web. C¸ch thøc CGI truy nhËp CSDL, ®Æc ®iÓm c¬
b¶n cña mét ch−¬ng tr×nh CGI còng nh− ph©n tÝch c¸ch thøc ho¹t ®éng cña
mét ch−¬ng tr×nh CGI vµ øng dông cña nã trong hÖ c¬ së d÷ liÖu Oracle. X©y
dùng ch−¬ng tr×nh truy nhËp c¬ së d÷ liÖu b»ng nh«n ng÷ C, vµ ch−¬ng tr×nh
CGI truy nhËp CSDL ORACLE .
V× ®iÒu kiÖn thêi gian cã h¹n nªn luËn v¨n chØ dõng ë møc nghiªn cøu
c¸ch thøc truy nhËp c¬ së d÷ liÖu b»ng ch−¬ng tr×nh ngoµi CGI vµ ®−a ra
nh÷ng vÝ dô minh ho¹ ®¬n gi¶n. Trong thêi gian tiÕp theo em sÏ tiÕp tôc
nghiªn cøu thªm mét sè ph−¬ng ph¸p kh¸c trî gióp Web Server khai th¸c c¬
së d÷ liÖu nh− ph−¬ng ph¸p ISAPI, ASP hay JAVA nh»m ®¸p øng tèi ®a yªu
cÇu cña ng−êi sö dông vµ x©y dùng nh÷ng øng dông cô thÓ.
Mét lÇn n÷a em xin ch©n thµnh c¸m ¬n toµn thÓ c¸c thµy c« gi¸o khoa
CNTT vµ toµn thÓ nh©n viªn c«ng ty CSE.
Hµ néi - 1998
Ng−êi thùc hiÖn
Tiªu ThÞ Dù
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 82
Ebook Team
Phô lôc
Phô lôc 1 Ch−¬ng tr×nh nguån ktra.c xö lý Form ®−îc viÕt b»ng ng«n ng÷ C
#include
#include
#include
#include
char InputBuffer[4096] ;
typedef struct field_s
{
char *f_name ;
char *f_value ;
struct field_s *f_next ;
}
field_t, *pfield_t ;
field_t *field_list = NULL ;
void strcvrt( char * cStr, char cOld, char cNew )
{
int i = 0 ;
while ( cStr[i] )
{
if ( cStr[i] == cOld )
cStr[i] = cNew ;
i++ ;
}
}
int TwoHex2Int( char *pC )
{
int Hi, Lo, Result=0 ;
Hi = pC[0] ;
if ( '0' <= Hi && Hi <= '9' )
Hi -= '0' ;
else if ( 'a' <= Hi && Hi <= 'f' )
Hi -= ('a' - 10) ;
else if ( 'A' <= Hi && Hi <= 'F' )
Hi -= ('A' - 10) ;
Lo = pC[1] ;
if ( '0' <= Lo && Lo <= '9' )
Lo -= '0' ;
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 83
Ebook Team
else if ( 'a' <= Lo && Lo <= 'f' )
Lo -= ('a' - 10) ;
else if ( 'A' <= Lo && Lo <= 'F' )
Lo -= ('A' - 10) ;
Result = Lo + 16*Hi ;
return(Result) ;
}
void urlDecode( char *p )
{
char *pD = p ;
while (*p)
{
if ( *p == '%' )
{
p++ ;
if( isxdigit(p[0]) && isxdigit(p[1]))
{
*pD++ = (char) TwoHex2Int(p) ;
p += 2 ;
}
}
else
{
*pD++ = *p++ ;
}
}
*pD = '\0' ;
}
field_t *f_newitem(char*f_name, char *f_value)
{
field_t *f_tmp = NULL ;
if((f_tmp=(field_t*)malloc(sizeof(field_t)))== NULL )
return(NULL);
if((f_tmp->f_name=(char*)malloc(strlen(f_name) ))== NULL )
return(NULL) ;
if((f_tmp->f_value=(char*)malloc( strlen(f_value) ) ) == NULL )
return(NULL) ;
strcpy( f_tmp->f_name, f_name ) ;
strcpy( f_tmp->f_value, f_value ) ;
f_tmp->f_next = NULL ;
return(f_tmp) ;
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 84
Ebook Team
}
char *f_value( char *f_name )
{
field_t *f_tmp = NULL ;
if(f_name == NULL )
return(NULL) ;
f_tmp = field_list ;
while (f_tmp)
{
if ( stricmp(f_tmp->f_name, f_name ) == 0 )
return(f_tmp->f_value) ;
f_tmp = f_tmp->f_next ;
}
return(NULL) ;
}
void f_additem( field_t *f_item )
{
if ( f_item == NULL )
return ;
if ( field_list == NULL )
{
field_list = f_item ;
return ;
}
f_item->f_next = field_list ;
field_list = f_item ;
}
void StoredField( char *item )
{
char *p = NULL ;
char *field_name = NULL, *field_value = NULL ;
if ( item == NULL || *item == '\0' )
return ;
p = strchr( item, '=' ) ;
*p++ = '\0' ;
urlDecode(item) ;
urlDecode(p) ;
strcvrt( p, '\n', ' ' ) ;
strcvrt( p, '+', ' ') ;
f_additem( f_newitem(item, p) ) ;
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 85
Ebook Team
}
int main()
{
field_t *f_tmp = NULL ;
int ContentLength ;
int x, i ;
char *p, *pRequestMethod = NULL ;
printf("Content-Type: text/html\n\n") ;
printf("\n\nCGI
Dump\n\n") ;
printf("CGI Dump\n\n") ;
printf("width=\"100%%\" cellspacing=\"0\" cellpadding=\"0\"
border=\"0\">\n") ;
printf("\n \n")
;
printf("Content_Length") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("CONTENT_LENGTH") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n\n") ;
printf("Content_Type") ;
printf("\n \n width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("CONTENT_TYPE") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n \n")
;
printf("Gateway_Interface") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("GATEWAY_INTERFACE") ;
if ( p != NULL )
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 86
Ebook Team
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n \n")
;
printf("http_accept") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("HTTP_ACCEPT") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n \n")
;
printf("http_referer") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("HTTP_REFERER") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n \n")
;
printf("path_info") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("PATH_INFO") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n \n")
;
printf("query_string") ;
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 87
Ebook Team
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("QUERY_STRING") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n \n")
;
printf("remote_addr") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("REMOTE_ADDR") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n \n")
;
printf("request_method") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("REQUEST_METHOD") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n \n")
;
printf("script_name") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("SCRIPT_NAME") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 88
Ebook Team
printf("\n \n")
;
printf("server_name") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("SERVER_NAME") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n \n")
;
printf("server_port") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("SERVER_PORT") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n \n")
;
printf("server_protocol") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("SERVER_PROTOCOL") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n \n")
;
printf("server_software") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("SERVER_SOFTWARE") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 89
Ebook Team
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n") ;
setvbuf( stdin, NULL,_IONBF, 0 ) ;
pRequestMethod = getenv("REQUEST_METHOD") ;
if ( pRequestMethod == NULL || pRequestMethod[0] == '\0' )
{
printf("\nERROR:Request Method error\n") ;
goto error ;
}
if ( strcmp( pRequestMethod, "POST" ) == 0 )
{
p = getenv("CONTENT_LENGTH") ;
if ( p != NULL )
ContentLength = atoi(p) ;
else
ContentLength = 0 ;
if ( ContentLength > sizeof(InputBuffer) - 1 )
ContentLength = sizeof(InputBuffer) - 1 ;
i = 0 ;
while ( i < ContentLength )
{
x = fgetc(stdin) ;
if ( x == EOF )
break ;
InputBuffer[i++] = x ;
}
InputBuffer[i] = '\0' ;
ContentLength = i ;
if ( InputBuffer != NULL && *InputBuffer != '\0' )
printf("\n\nInputBuffer: %s\n",
InputBuffer ) ;
p = getenv("CONTENT_TYPE") ;
if ( p == NULL )
{
printf("\nERROR: content_type error.\n") ;
goto error ;
}
if ( strcmp( p, "application/x-www-form-urlencoded" ) == 0 )
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 90
Ebook Team
{
p = strtok( InputBuffer, "&" ) ;
while ( p != NULL )
{
StoredField( p ) ;
p = strtok( NULL, "&" ) ;
}
}
}
if ( field_list == NULL )
{
printf("\nNo variables\n") ;
goto error ;
}
printf("\nVariables\n") ;
printf("<table width=\"100%%\" cellspacing=\"0\" cellpadding=\"0\"
border=\"0\">\n") ;
f_tmp = field_list ;
while (f_tmp)
{
printf("\n <td width=\"30%%\" align=\"left\"
valign=\"top\">\n") ;
printf(f_tmp->f_name) ;
printf(" \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
printf(f_tmp->f_value) ;
printf(" \n\n") ;
f_mp = f_tmp->f_next ;
}
printf("\n\n") ;
return(0) ;
error:
printf("\n\n") ;
return(-1) ;
}
Phô lôc 2 Ch−¬ng tr×nh nguån viÕt b»ng PL/SQL dùa trªn OWA (Oracle
Web Agent).
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 91
Ebook Team
drop package demo1;
create package demo1 as
procedure start_pro;
procedure nhap_dk;
procedure hien_kq(ten varchar2 default null, tu_ngay varchar2 default null,
den_ngay varchar2 default null);
procedure form_nhap (ten varchar2 default null, ngay varchar2 default null);
procedure insert_data(ten varchar2 default null, ngay varchar2 default null) ;
procedure nhap_dkx;
procedure hien_kqx(ten varchar2 default null, tu_ngay varchar2 default
null, den_ngay varchar2 default null) ;
end demo1;
/
-------------------------------------------------------------------
create package body demo1 as
procedure nhap_dk is
begin
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.nl;
htp.nl;
htp.print('');
htp.print('');
htp.bold(' NhËp vµo c¸c ®iÒu kiÖn t×m kiÕm');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('Hä vµ tªn:');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('Tõ Ngµy:');
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 92
Ebook Team
htp.print('');
htp.print('');
htp.print('§Õn Ngµy:');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print(' ');
htp.print(' ');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
end;
-----------------------------------
procedure hien_kq(ten varchar2 default null, tu_ngay varchar2 default null,
den_ngay varchar2 default null) is
c1 integer;
status integer;
ngay1 date;
ngay2 date;
ngay_sinh date;
ho_ten varchar2(30);
para varchar2(1000):=null;
dem integer := null;
ts integer:=0;
begin
htp.print('');
htp.print('');
htp.print('');
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 93
Ebook Team
htp.print('');
htp.print('');
htp.print('Danh s¸ch kÕt qu¶ ');
if tu_ngay is not null then para:=para|| ' tab1.NS
>='''||to_date(tu_ngay,'DD/MM/YY')||''''; end if;
if den_ngay is not null then para:=para||'$'|| ' tab1.NS
<='''||to_date(den_ngay,'DD/MM/YY')||''''; end if;
if ten is not null then para:= para||'$'||'tab1.hoten='''|| ten||'''' ; end if;
dem:=length(para);
if (SUBSTR(para,1,1)='$') then para:=SUBSTR(para,2,dem-1); end if;
if (SUBSTR(para,dem,1)='$') then para:=SUBSTR(para,1,dem-1); end if;
para:= replace(para,'$',' AND ');
if para is not null then
para := 'select hoten, NS from Ngay_sinh Tab1 where ' || para;
end if;
if para is null then
para:='select hoten, NS from ngay_sinh Tab1';
end if;
c1:=dbms_sql.open_cursor;
dbms_sql.parse(c1,para, dbms_sql.v7);
dbms_sql.define_column(c1,1,ho_ten, 30);
dbms_sql.define_column(c1,2,ngay_sinh);
status := dbms_sql.execute(c1);
loop
if dbms_sql.fetch_rows(c1) >0 then
ts:=ts+1;
dbms_sql.column_value(c1,1,ho_ten);
dbms_sql.column_value(c1,2,ngay_sinh);
htp.print('');
htp.print(''|| Ho_ten||
''||ngay_sinh||'');
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 94
Ebook Team
else exit;
end if;
end loop;
if ts <1 then
htp.print('Kh«ng t×m th©ý b¶n ghi nµo tho¶ mvn ®iÒu kiÖn ');
else
htp.print('Tæng sè b¶n ghi t×m ®−îc lµ: '||ts);
end if;
htp.print('');
htp.print('');
htp.print('');
end;
-------------------------------------
procedure form_nhap (ten varchar2 default null, ngay varchar2 default null)
is
begin
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.nl;
htp.nl;
htp.print('');
htp.print('');
htp.bold(' NhËp vµo Hä tªn , ngµy sinh');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('Hä vµ tªn :');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 95
Ebook Team
htp.print('Ngµy Sinh:');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print(' ');
htp.print(' ');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
end;
-------------------------------------
procedure insert_data(ten varchar2 default null, ngay varchar2 default null)
is
begin
htp.print('');
htp.print('');
insert into DU.ngay_sinh values(ten, to_date(ngay,'dd/mm/yy'));
htp.print('§v Insert D÷ LiÖu Vµo Table ');
htp.print('');
htp.print('');
end;
-------------------
procedure nhap_dkx is
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 96
Ebook Team
begin
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.nl;
htp.nl;
htp.print('');
htp.print('');
htp.bold(' NhËp vµo c¸c ®iÒu kiÖn xo¸');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('Hä vµ tªn:');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('Tõ Ngµy:');
htp.print('');
htp.print('');
htp.print('§Õn Ngµy:');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print(' ');
htp.print(' ');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 97
Ebook Team
htp.print('');
htp.print('');
htp.print('');
end;
------------------
procedure hien_kqx(ten varchar2 default null, tu_ngay varchar2 default
null, den_ngay varchar2 default null) is
cursor_name INTEGER;
ret INTEGER;
ngay1 date;
ngay2 date;
ngay_sinh date;
ho_ten varchar2(30);
para varchar2(1000):=null;
dem integer := null;
ts integer:=0;
begin
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('Danh s¸ch kÕt qu¶');
if tu_ngay is not null then para:=para|| ' tab.ns
>='''||to_date(tu_ngay,'DD/MM/YY')||''''; end if;
if den_ngay is not null then para:=para||'$'|| ' tab.ns
<='''||to_date(den_ngay,'DD/MM/YY')||''''; end if;
if ten is not null then para:= para||'$'||' tab.hoten='''|| ten||'''' ; end if;
dem:=length(para);
if (SUBSTR(para,1,1)='$') then para:=SUBSTR(para,2,dem-1); end if;
if (SUBSTR(para,dem,1)='$') then para:=SUBSTR(para,1,dem-1); end if;
para:= replace(para,'$',' AND ');
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 98
Ebook Team
if para is not null then
para := 'delete Ngay_sinh tab where ' || para;
end if;
if para is null then
para:='delete ngay_sinh ';
end if;
cursor_name := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(cursor_name, para, DBMS_SQL.V7);
ret := DBMS_SQL.EXECUTE(cursor_name);
DBMS_SQL.CLOSE_CURSOR(cursor_name);
htp.print('');
htp.print('');
htp.print('');
end;
---------------------------------------
procedure test1 is
cursor c is select hoten, ns from ngay_sinh;
r c%rowtype;
begin
htp.print('');
htp.print('');
htp.print('');
for r in c
loop
htp.print('');
htp.print(r.hoten );
htp.print('');
htp.print(r.ns);
htp.print('');
end loop;
htp.print('');
htp.print('');
htp.print('');
end;
end demo1;
/
www.updatesofts.com
---------------------------------------------------------------------------------------------
Trang 99
Ebook Team
Các file đính kèm theo tài liệu này:
- [Luận văn] Truy cập cơ sở dữ liệu qua Web (Tiếng Việt).pdf