Cơ sở dữ liệu bằng Web

Cơ sở dữ liệu (viết tắt CSDL; tiếng Anh là database) được hiểu theo cách định nghĩa kiểu kĩ thuật thì nó là một tập hợp thông tin có cấu trúc. Tuy nhiên, thuật ngữ này thường dùng trong công nghệ thông tin và nó thường được hiểu rõ hơn dưới dạng một tập hợp liên kết các dữ liệu, thường đủ lớn để lưu trên một thiết bị lưu trữ như đĩa hay băng. Dữ liệu này được duy trì dưới dạng một tập hợp các tập tin trong hệ điều hành hay được lưu trữ trong các hệ quản trị cơ sở dữ liệu. 2. Sau đây là một số ưu diểm mà CSDL mang lại: - Giảm sự trùng lặp thông tin xuống mức thấp nhất. Do đó đảm bảo thông tin có tính nhất quán và toàn vẹn dữ liệu. - Đảm bảo dữ liệu có thẻ được truy suất theo nhiều cách khác nhau - Nhiều người có thể sủ dụng một cơ sở dữ liệu. 3.Những vấn đề mà CSDL cần phải giải quyết. - Tính chủ quyền của dữ liệu. Thể hiện ở phương diện an toàn dữ liệu.Khả năng biểu diễn mỗi liên hệ ngữ nghĩa của dữ liệu và tính chính xác của dữ liệu.Người khai thác cơ sở dữ liệu phải cập nhật cho CSDL những thông tin mới nhất.- Tính bảo mật và quyền khai thác thông tin của người sử dung. Do ưu điểm CSDL có thể cho nhiều người khai thác đồng thời. nên cần phải có một cơ chế bảo mật phân quyền khai thác CSDL.Các hệ điều hành nhiều người sử dụng hay cục bộ đều cung cấp cơ chết này.- Tranh chấp dữ liệu. Khi nhiều người cùng truy nhập CSDL với các mục đích khác nhau. Rất có t hể sẽ xảy ra hiện tượng tranh chấp dữ liệu.Cần có cơ chết ưu tiên khi truy cập CSDL. Ví dụ: admin luôn có thể tru cập cơ sở dữ liệu.Cấp quyền ưu tiên cho từng người khai thác.- Đảm bảo an toàn dữ liệu khi có sự cố. Khi CSDL nhiều và được quản lý tập trung. Khả năng rủi ro mất dữ liệu rất cao. Các nguyên nhân chính là mất điện đột ngột hoặc hỏng thiết bị lưu trữ.Hiện tại có một số hệ điều hành đã có cơ chế tự động sao lưu ổ cúng và fix lỗi khi có sự cố xảy ra.Tuy nhiên: cẩn tắc vô áy náy. Chúng ta nên sao lưu dự phòng cho dữ liệu đề phòng trường hợp xấu xảy ra.

pdf93 trang | Chia sẻ: tlsuongmuoi | Lượt xem: 1976 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Cơ sở dữ liệu bằng Web, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
hµng lo¹t m¸y tÝnh tõ khi tiÕp nhËn vµ quay trë l¹i th«ng tin mét c¸ch thµnh c«ng cho ®Õn khi t×m ®−îc ®Õn ®Ých. TiÕn tr×nh nµy ®−îc gäi lµ routing lµ c¬ së chñ yÕu cho toµn bé viÖc kÕt nèi m¹ng, vµ bÊt kú m¸y tÝnh nµo trong “chuçi dÉn ®−êng” hoµn thµnh viÖc truy cËp d÷ liÖu. I.4 Qu¶n trÞ Web Server §Ó gióp ®ì viÖc qu¶n lý Web site, Oracle Web Server cung cÊp mét tËp hîp trang Web cã thÓ sö dông chóng ®Ó tiÕn hµnh lµm nhiÖm vô qu¶n lý mét c¸ch cã hiÖu qu¶ nhÊt. Cã nh÷ng trang ®¬n gi¶n lµ so¹n th¶o nh÷ng files cÊu h×nh Web Server sö dông, b¹n cã thÓ sö dông c«ng cô kh¸c ®Ó säan th¶o files mét c¸ch trùc tiÕp. I.5 Giao diÖn CGI Mét c«ng nghÖ chuÈn ®−îc sö dông bëi Web Listener thùc hiÖn mét ch−¬ng tr×nh ngoµi nh− (c, perl) sinh ra HTML Doccument. I.6 PL/SQL Agent §©y lµ ch−¬ng tr×nh Oracle WebServer sö dông ®Ó thùc hiÖn nh÷ng thñ tôc ®−îc viÕt trªn PL/SQL, øng dông cña Oracle trªn Oracle7 Server. --------------------------------------------------------------------------------------------- Trang 54 Tiªu ThÞ Dù K39KTT 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) 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 --------------------------------------------------------------------------------------------- Trang 55 Tiªu ThÞ Dù K39KTT 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. 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 --------------------------------------------------------------------------------------------- Trang 56 Tiªu ThÞ Dù K39KTT 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) 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. --------------------------------------------------------------------------------------------- Trang 57 Tiªu ThÞ Dù K39KTT 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µ 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. --------------------------------------------------------------------------------------------- Trang 58 Tiªu ThÞ Dù K39KTT + 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. 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. --------------------------------------------------------------------------------------------- Trang 59 Tiªu ThÞ Dù K39KTT 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 • 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. --------------------------------------------------------------------------------------------- Trang 60 Tiªu ThÞ Dù K39KTT 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: • 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. --------------------------------------------------------------------------------------------- Trang 61 Tiªu ThÞ Dù K39KTT 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. 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 --------------------------------------------------------------------------------------------- Trang 62 Tiªu ThÞ Dù K39KTT 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 ®ã. 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. --------------------------------------------------------------------------------------------- Trang 63 Tiªu ThÞ Dù K39KTT 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 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. --------------------------------------------------------------------------------------------- Trang 64 Tiªu ThÞ Dù K39KTT • 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) --------------------------------------------------------------------------------------------- Trang 65 Tiªu ThÞ Dù K39KTT 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¸. 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. --------------------------------------------------------------------------------------------- Trang 66 Tiªu ThÞ Dù K39KTT 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 • 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) --------------------------------------------------------------------------------------------- Trang 67 Tiªu ThÞ Dù K39KTT 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 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 --------------------------------------------------------------------------------------------- Trang 68 Tiªu ThÞ Dù K39KTT 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Õ • 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 --------------------------------------------------------------------------------------------- Trang 69 Tiªu ThÞ Dù K39KTT 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, 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 --------------------------------------------------------------------------------------------- Trang 70 Tiªu ThÞ Dù K39KTT 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(‘’); 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); --------------------------------------------------------------------------------------------- Trang 71 Tiªu ThÞ Dù K39KTT 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. 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: --------------------------------------------------------------------------------------------- Trang 72 Tiªu ThÞ Dù K39KTT • 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: • 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')); --------------------------------------------------------------------------------------------- Trang 73 Tiªu ThÞ Dù K39KTT 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: • 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); --------------------------------------------------------------------------------------------- Trang 74 Tiªu ThÞ Dù K39KTT 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 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: --------------------------------------------------------------------------------------------- Trang 75 Tiªu ThÞ Dù K39KTT KÕt luËn 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ù --------------------------------------------------------------------------------------------- Trang 76 Tiªu ThÞ Dù K39KTT 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' ; else if ( 'a' <= Lo && Lo <= 'f' ) --------------------------------------------------------------------------------------------- Trang 77 Tiªu ThÞ Dù K39KTT 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) ; } char *f_value( char *f_name ) { field_t *f_tmp = NULL ; --------------------------------------------------------------------------------------------- Trang 78 Tiªu ThÞ Dù K39KTT 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) ) ; } int main() { field_t *f_tmp = NULL ; int ContentLength ; int x, i ; char *p, *pRequestMethod = NULL ; --------------------------------------------------------------------------------------------- Trang 79 Tiªu ThÞ Dù K39KTT 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 ) 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") ; --------------------------------------------------------------------------------------------- Trang 80 Tiªu ThÞ Dù K39KTT 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") ; 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") ; --------------------------------------------------------------------------------------------- Trang 81 Tiªu ThÞ Dù K39KTT 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") ; 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") ; --------------------------------------------------------------------------------------------- Trang 82 Tiªu ThÞ Dù K39KTT 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) ; 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 ) --------------------------------------------------------------------------------------------- Trang 83 Tiªu ThÞ Dù K39KTT 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 ) { 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") ; --------------------------------------------------------------------------------------------- Trang 84 Tiªu ThÞ Dù K39KTT 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). 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(''); --------------------------------------------------------------------------------------------- Trang 85 Tiªu ThÞ Dù K39KTT 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:'); 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 --------------------------------------------------------------------------------------------- Trang 86 Tiªu ThÞ Dù K39KTT 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(''); 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); --------------------------------------------------------------------------------------------- Trang 87 Tiªu ThÞ Dù K39KTT 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||''); 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(''); --------------------------------------------------------------------------------------------- Trang 88 Tiªu ThÞ Dù K39KTT htp.print('Hä vµ tªn :'); htp.print(''); htp.print(''); htp.print(''); htp.print(''); 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; --------------------------------------------------------------------------------------------- Trang 89 Tiªu ThÞ Dù K39KTT ------------------- procedure nhap_dkx 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 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(''); --------------------------------------------------------------------------------------------- Trang 90 Tiªu ThÞ Dù K39KTT 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 '); if para is not null then para := 'delete Ngay_sinh tab where ' || para; --------------------------------------------------------------------------------------------- Trang 91 Tiªu ThÞ Dù K39KTT 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; / --------------------------------------------------------------------------------------------- Trang 92 Tiªu ThÞ Dù K39KTT

Các file đính kèm theo tài liệu này:

  • pdfCơ sở dữ liệu bằng Web.pdf
Tài liệu liên quan