Webove´ programova´nı´ a Open Source Luka´sˇ Zapletal Za´klady webove´ho programova´nı´ Psanı´ webovy´ch aplikacı´ Webove´ programova´nı´ v Javeˇ
Webove´ programova´nı´ a Open Source
Open-source databa´ze Shrnutı´
Luka´sˇ Zapletal Liberix o.p.s.
23. 11. 2006
Webove´ programova´nı´ a Open Source
Obsah prezentace
Luka´sˇ Zapletal Za´klady webove´ho programova´nı´ Psanı´ webovy´ch aplikacı´ Webove´ programova´nı´ v Javeˇ Open-source databa´ze
1 Za´klady webove´ho programova´nı´ 2 Psanı´ webovy´ch aplikacı´ 3 Webove´ programova´nı´ v Javeˇ
Shrnutı´
4 Open-source databa´ze 5 Shrnutı´
Webove´ programova´nı´ a Open Source
Za´klady
Luka´sˇ Zapletal Za´klady webove´ho programova´nı´ Psanı´ webovy´ch aplikacı´
• protokol HTTP (klient-server), jazyk HTML/XHTML,
CSS
Webove´ programova´nı´ v Javeˇ
• funguje syste´mem dotaz-odpoveˇd’ (neuchova´va´ stav)
Open-source databa´ze
• HTML/XHTML – nutno dodrzˇovat standardy, validovat
Shrnutı´
• dnesˇnı´ smeˇr - oddeˇlenı´ dat a grafiky na u´rovni XHTML
(grafika v CSS, vlastnı´ obsah v XHTML)
Webove´ programova´nı´ a Open Source Luka´sˇ Zapletal Za´klady webove´ho programova´nı´
WWW • webovy´ server – program pro ”poda´va´nı´” dokumentu˚ • klient (prohlı´zˇecˇ) protokolem HTTP pozˇa´da´ o dokument
Psanı´ webovy´ch aplikacı´ Webove´ programova´nı´ v Javeˇ
•
Open-source databa´ze Shrnutı´
• • • •
(obvykle HTML – obycˇejny´ text), ten pote´ zobrazı´ v okneˇ aplikace, prˇicˇemzˇ po serveru pozˇaduje dalsˇ´ı dokumenty, ktere´ najde na stra´nce (obra´zky, flash soubory atd) server tedy jen poda´va´ dokumenty, obra´zky, soubory (cˇasto se HTTP pouzˇ´ıva´ i pro stahova´nı´ bina´rnı´ch souboru˚) protokol HTTP textovy´ (ale data mohou chodit i bina´rnı´), bezstavovy´ v pozˇadavcı´ch i odpoveˇdı´ch mohou by´t tzv HTTP hlavicˇky, ktere´ vsˇe doplnˇujı´ pozˇadavek: specifikace dotazu (GET, POST a dalsˇ´ı), virtua´lnı´ host, Referrer, Connection, User-Agent, . . . odpoveˇd’: typ vra´cene´ho dokumentu, jeho de´lka, pouzˇita´ komprese, Server, Expires, . . .
Webove´ programova´nı´ a Open Source
CGI
Luka´sˇ Zapletal Za´klady webove´ho programova´nı´ Psanı´ webovy´ch aplikacı´ Webove´ programova´nı´ v Javeˇ Open-source databa´ze Shrnutı´
• www server se da´ nastavit tak, aby mı´sto nacˇtenı´
staticke´ho souboru ze souborove´ho syste´mu spustil program a jeho vy´stup vra´til klientovi • CGI – Common Gateway Interface: ”protokol”, pomocı´
ktere´ho se programu prˇedajı´ potrˇebne´ informace a program prˇeda´ www serveru zpeˇt odpoveˇd’ (jedna´ se o domluvene´ na´zvy promeˇnny´ch prostrˇedı´) • CGI programy mohou by´t napsa´ny v jake´mkoliv jazyce
(Perl, Python, C, Bash . . . ) • server program prˇi kazˇde´m pozˇadavku spustı´, nastavı´
promeˇnne´ prostrˇedı´ a klientovi odesˇle vy´sledek vola´nı´ skriptu (vy´stup ”do konzole”) • uka´zka CGI skriptu
Webove´ programova´nı´ a Open Source
CGI
Luka´sˇ Zapletal Za´klady webove´ho programova´nı´ Psanı´ webovy´ch aplikacı´ Webove´ programova´nı´ v Javeˇ Open-source databa´ze Shrnutı´
• CGI skripty jsou pomale´ • rˇesˇenı´ – FastCGI: program je spusˇteˇn jako daemon a
pozˇadavky mu webovy´ server prˇesmeˇrova´va´ • nabı´zı´ se ota´zka: procˇ by nemohl odpoveˇd’ generovat prˇ´ımo webovy´ server • to je mozˇne´ – pouzˇ´ıvajı´ se tzv moduly: ISAPI (MS ISS),
modules (Apache) • FastCGI se dnes neˇkdy pouzˇ´ıva´ v kombinaci s jazyky
Perl, Python, Ruby a neˇktery´mi webovy´mi servery nekompatibilnı´mi s ISAPI/Apache moduly
Webove´ programova´nı´ a Open Source Luka´sˇ Zapletal
Moduly • modul je komponenta, ktera´ rozsˇirˇuje webovy´ server o
Za´klady webove´ho programova´nı´
•
Psanı´ webovy´ch aplikacı´
•
Webove´ programova´nı´ v Javeˇ
•
Open-source databa´ze Shrnutı´
• • •
neˇjakou funkcˇnost pro nasˇe u´cˇely uvazˇujeme moduly s podporou dynamicke´ho generova´nı´ obsahu modul si mu˚zˇete napsat (Linux = Apache moduly, Windows = ISAPI moduly) spı´sˇe ale jen pouzˇijeme modul, ktery´ prˇida´ podporu pro neˇjaky´ jizˇ existujı´cı´ programovacı´ jazyk PHP – nejrozsˇ´ırˇeneˇjsˇ´ı (php5isapi.dll pro Windows, mod-php5 pro Apache) podobneˇ take´ jine´ skriptovacı´ jazyky: Perl, Python, Ruby, modul je trˇeba asociovat s urcˇitou mnozˇinou URL adres (naprˇ´ıklad /mojeaplikace), cˇi skupiny souboru˚ (*.php – modul je naprogramova´n tak, zˇe soubory cˇte, interpretuje, vracı´ vy´sledky)
Webove´ programova´nı´ a Open Source Luka´sˇ Zapletal
PHP • veleu´speˇsˇny´ skriptovacı´ jazyk pro tvorbu dynamicke´ho
Za´klady webove´ho programova´nı´
•
Psanı´ webovy´ch aplikacı´
•
Webove´ programova´nı´ v Javeˇ Open-source databa´ze Shrnutı´
• •
•
obsahu je mozˇne´ ho vkla´dat prˇ´ımo do HTML stra´nek, modul PHP soubory nacˇı´ta´, spousˇtı´ a vracı´ vy´sledky za u´speˇchem stojı´ jednoducha´ C-Perl syntaxe a velmi snadne´ nasazenı´ (zmı´neˇne´ moduly stacˇı´ sta´hnout, instalace trivia´lnı´) PHP podporuje velke´ mnozˇstvı´ provideru˚, je snadne´ se naucˇit za´klady PHP se ale nehodı´ na veˇtsˇ´ı aplikace, jazyk prozˇ´ıva´ sta´le bourˇlivy´ vy´voj, OOP prˇida´no na´silneˇ, nepodporuje jmenne´ prostory, nasta´vajı´ proble´my ve vı´cevla´knovy´ch prostrˇedı´ch, nekonzistence mezi verzemi (magic quotes, odkazy, trˇ´ıdy) to ale neznamena´, zˇe se v PHP nedajı´ psa´t velke´ aplikace s dobry´m na´vrhem – jen cˇloveˇk musı´ do vy´voje veˇnovat vı´ce u´silı´
Webove´ programova´nı´ a Open Source
Sezenı´ (sessions)
Luka´sˇ Zapletal Za´klady webove´ho programova´nı´ Psanı´ webovy´ch aplikacı´ Webove´ programova´nı´ v Javeˇ
• protokol HTTP je bezstavovy´, teoreticky po kazˇde´m
pozˇadavku (obra´zek, soubor) se spojenı´ ukoncˇı´ a server ”zapomene”, kdo se ho na to ptal • pro prˇedstavu: prˇestavme si aplikaci, ktera´ kazˇde´mu
prohlı´zˇecˇi (kazˇde´mu klientovi) vra´tı´ cele´ cˇı´slo z posloupnosti 1, 2, . . .
Open-source databa´ze
• k serveru se prˇipojı´ Jirka a aplikace by meˇla vypsat 1
Shrnutı´
• k serveru se prˇipojı´ milan a aplikace by meˇla vypsat 2 • k serveru se prˇipojı´ znovu Jirka a aplikace by meˇla
vypsat jeho 1 • web server ale mezitı´m da´vno zapomeˇl, zˇe byl k neˇmu
neˇjaky´ Jirka prˇipojen • rˇesˇenı´ – vytvorˇenı´ sezenı´ (session)
Webove´ programova´nı´ a Open Source
Sezenı´ (sessions)
Luka´sˇ Zapletal Za´klady webove´ho programova´nı´ Psanı´ webovy´ch aplikacı´ Webove´ programova´nı´ v Javeˇ Open-source databa´ze Shrnutı´
• sezenı´ je realizova´no obvykle pomocı´ cookies • cookie je technologie, ktera´ umozˇnˇuje webovy´m
serveru˚m (potazˇmo aplikacı´m) ukla´dat na klientovi neˇjaka´ data (obvykle male´ho rozsahu - pa´r cˇı´sel, datum, kra´tky´ text) • webovy´ prohlı´zˇecˇ pak prˇi kazˇde´m pozˇadavku tyto
cookies posı´la´ zpeˇt na server • z du˚vodu˚ bezpecˇnosti ma´ kazˇdy´ server pra´vo zapisovat
a cˇı´st jen svoje hodnoty (nevidı´ hodnoty jiny´ch serveru˚)
Webove´ programova´nı´ a Open Source
Sezenı´ (sessions)
Luka´sˇ Zapletal Za´klady webove´ho programova´nı´ Psanı´ webovy´ch aplikacı´ Webove´ programova´nı´ v Javeˇ Open-source databa´ze Shrnutı´
• cookies mohou by´t take´ cˇasoveˇ omezeny (implicitneˇ do
ukoncˇenı´ prohlı´zˇecˇe) • pro u´cˇely realizace sessions se vytvorˇ´ı cookie (obvykle
nazvana´ SessionID, SID nebo podobneˇ) – jedinecˇny´ identifika´tor v ra´mci cele´ho serveru (velke´ cˇı´slo, nesmı´ by´t snadno predikovatelne´, aby se nedalo sezenı´ ”ukra´st” a pracovat naprˇ´ıklad pod jiny´m uzˇivatelem/sezenı´m) • prohlı´zˇecˇ prˇi dalsˇ´ım pohybu po webove´ aplikaci SID
serveru vracı´ a ten je schopen prˇesneˇ identifikovat, o jake´ho klienta jde
Webove´ programova´nı´ a Open Source
Sezenı´ (sessions)
Luka´sˇ Zapletal Za´klady webove´ho programova´nı´ Psanı´ webovy´ch aplikacı´ Webove´ programova´nı´ v Javeˇ Open-source databa´ze Shrnutı´
• aplikace si obvykle do sezenı´ musı´ ulozˇit prˇihlasˇovacı´
jme´no, pod ktery´m se uzˇivatel prˇihla´sil, jeho nastavenı´ a podobneˇ • aby tyto informace neproudily po internetu tam a zpeˇt
(protokol HTTP nenı´ navı´c zabezpecˇeny´), tak se tyto informace ukla´dajı´ na serveru • obvykle se pouzˇije databa´ze, sdı´lena´ pameˇt’ nebo
soubory • po sı´ti jako cookie putuje pouze jedno velke´ cˇı´slo (SID) • jazyk PHP obsahuje funkce pro pra´ci se sezenı´m prˇ´ımo
v sobeˇ, jine´ jazyky (Perl, Python) musejı´ vyuzˇ´ıt neˇjakou knihovnu (nebo si mu˚zˇete podporu pro sezenı´ napsat sami)
Webove´ programova´nı´ a Open Source
Jak psa´t webove´ aplikace
Luka´sˇ Zapletal Za´klady webove´ho programova´nı´
• u rozsa´hlejsˇ´ıch aplikacı´ je nutno postupovat rozumneˇ –
jinak se mu˚zˇeme docˇkat sˇpatneˇ spravovatelne´ho ko´du
Psanı´ webovy´ch aplikacı´
• prvnı´m krokem je obvykle volba vhodne´ho jazyka
Webove´ programova´nı´ v Javeˇ
• dalsˇ´ım krokem vy´beˇr platformy (Zend, Turbogears,
Open-source databa´ze Shrnutı´
(C/C++, jazyk skriptovacı´, Java, CSharp) Django, Ruby On Rails, CakePHP, Symphony PHP, ASP.NET, JSP, JSF, Struts, Tapestry, Turbine-Velocity/WebMacro, Zope) • vy´beˇr databa´ze je take´ du˚lezˇity´ (konkurencˇnı´ prˇ´ıstup,
replikace, ovladacˇe pro dany´ jazyk...) • velky´ boom zazˇ´ıva´ AJAX (XmlProcedureCall) – pokud
jej chceme vyuzˇ´ıt, tak je nutno promyslet, jak bude do cele´ aplikace zapadat, jakou pouzˇijeme knihovnu
Webove´ programova´nı´ a Open Source
Jak psa´t webove´ aplikace
Luka´sˇ Zapletal Za´klady webove´ho programova´nı´ Psanı´ webovy´ch aplikacı´ Webove´ programova´nı´ v Javeˇ Open-source databa´ze Shrnutı´
• pokud pouzˇijete neˇjaky´ vkla´dany´ jazyk (PHP, JSP,
ASP), nenı´ dobre´ veˇtsˇ´ı aplikaci skla´dat z vı´cero samostatny´ch stra´nek (index.php, login.php, saveEmployee.php) • aplikace by meˇla mı´t jednu vstupnı´ bra´nu – tzv dispecˇer
(dispatch controller, front controller) • mu˚zˇe to by´t skript (index.php), nebo neˇjaka´
komponenta (Servlet) • vsˇechny pozˇadavky pak chodı´ prˇes jedno mı´sto – je
snadne´ pak prˇidat naprˇ´ıklad prˇihlasˇova´nı´, caching, statistiky a podobneˇ
Webove´ programova´nı´ a Open Source
Jak psa´t webove´ aplikace
Luka´sˇ Zapletal Za´klady webove´ho programova´nı´ Psanı´ webovy´ch aplikacı´ Webove´ programova´nı´ v Javeˇ Open-source databa´ze Shrnutı´
• data (datovou vrstvu) je vhodne´ oddeˇlit od logiky • v idea´lnı´m prˇ´ıpadeˇ (pokud je to mozˇne´) pouzˇ´ıt datovy´
na´vrhovy´ vzor DAO (Data Access Object – objekt, ktery´ zapouzdrˇuje prˇ´ıstup do databa´ze) • mu˚zˇete bud’ napsat vlastnı´ vrstvu s pouzˇitı´m nı´zkou´rovnˇove´ API dane´ho jazyka (JDBC, Python DB-API . . . ), nebo vyuzˇ´ıt O-R mapovacı´ knihovnu (SQLObject pro Python, JDO, EJB, TopLink, Hibernate, iBatis pro Javu • dnes je cˇas zva´zˇit i (cˇisteˇ) objektove´ databa´ze
(ZopeDB, db4o, Cache´) • logika by meˇla sta´t mimo databa´zovou vrstvu
Webove´ programova´nı´ a Open Source
Jak psa´t webove´ aplikace
Luka´sˇ Zapletal Za´klady webove´ho programova´nı´ Psanı´ webovy´ch aplikacı´ Webove´ programova´nı´ v Javeˇ Open-source databa´ze Shrnutı´
• prezentacˇnı´ cˇa´st by meˇla by´t take´ oddeˇlena – sˇablony
(HTML, XHTML, CSS) obvykle pı´sˇ´ı designe´rˇi, kterˇ´ı neprogramujı´ (a opacˇneˇ – programa´torˇi zase nedeˇlajı´ design) • designe´rˇi navı´c pouzˇ´ıvajı´ vlastnı´ na´stroje pro tvorbu
grafiky a designu stra´nek (Macromedia, Adobe atd) • prezentacˇnı´ cˇa´st musı´ jı´t snadno vymeˇnit • proto je vhodne´ nemı´chat tyto trˇi veˇci: data (naprˇ.
na´kupnı´ kosˇ´ık, polozˇka), logiku (vlozˇit do kosˇ´ıku, zaplatit) a prezentaci (obrazovka s na´kupnı´m kosˇ´ıkem, uvı´tacı´ obrazovka) • dosta´va´me se na na´vrhovy´ vzor
MODEL-VIEW-CONTROLLER
Webove´ programova´nı´ a Open Source
MVC
Luka´sˇ Zapletal Za´klady webove´ho programova´nı´ Psanı´ webovy´ch aplikacı´ Webove´ programova´nı´ v Javeˇ Open-source databa´ze Shrnutı´
• Model-View-Controller na´vrh bude pravdeˇpodobneˇ
vyhovovat veˇtsˇineˇ aplikacı´ • MODEL (data), VIEW (sˇablona), CONTROLLER
(rozdeˇlovacˇ, dispecˇer, ”vstupnı´ bra´na” aplikace) + front controller • prˇijde pozˇadavek, prˇedsunuty´ controller rozhodne na
za´kladeˇ adresy URL, jakou zavola´ akci/objekt/metodu (podle frameworku) • beˇh je prˇeda´n akci, ta provede danou logiku s
modelem, obvykle nacˇte neˇjaka´ vy´sledna´ data a ta jsou prˇeda´na sˇabloneˇ • deˇlenı´ podle toho, zda se data do sˇablon ”vtlacˇujı´”
(push) nebo ”vytahujı´” (pull) – Pull MVC, Push MVC
Webove´ programova´nı´ a Open Source
Typy webovy´ch frameworku˚
Luka´sˇ Zapletal Za´klady webove´ho programova´nı´ Psanı´ webovy´ch aplikacı´ Webove´ programova´nı´ v Javeˇ Open-source databa´ze Shrnutı´
• leckotona´zˇnı´ – Ruby On Rails, CakePHP, Symphony,
Django, Turbogears, Zope, Snails • strˇedneˇtona´zˇnı´ – Webware, Struts, JSP/JSF, Tapestry,
Turbine/Velocity, Mono ASP.NET (ASP.NET na Linuxu – zatı´m v plenka´ch) • obchodnı´ (enterprise) webove´ aplikace jsou v drtive´
veˇtsˇineˇ psa´ny v technologiı´ch J2EE (vı´cevrstve´ aplikace), eventuelneˇ ru˚zny´ch napodobenina´ch (Spring Framework) cˇi pomocı´ technologie ASP.NET 2.0 • netradicˇnı´ prˇ´ıstup – Zope, Apache Cocoon • dneska je hitem hlavneˇ Java, Python/Ruby, PHP a
ASP.NET
Webove´ programova´nı´ a Open Source
Webove´ programova´nı´ v Javeˇ
Luka´sˇ Zapletal Za´klady webove´ho programova´nı´ Psanı´ webovy´ch aplikacı´ Webove´ programova´nı´ v Javeˇ Open-source databa´ze Shrnutı´
• co budeme potrˇebovat? JDK (Java Development Kit)
5.0, vy´vojove´ prostrˇedı´ (dnes popula´rnı´ Netbeans IDE, Eclipse IDE nebo komercˇnı´ IntelliJ IDEA) • java.sun.com • webovy´ server (kontejner) – Apache Tomcat, Jetty,
Resin • jakarta.apache.org • pokud budeme chtı´t psa´t aplikaci v nestandardnı´m
frameworku, tak knihovny
Webove´ programova´nı´ a Open Source
Webove´ programova´nı´ v Javeˇ
Luka´sˇ Zapletal Za´klady webove´ho programova´nı´ Psanı´ webovy´ch aplikacı´ Webove´ programova´nı´ v Javeˇ
• procˇ pra´veˇ Java pro webove´ programova´nı´? • vysoky´ vy´kon • prˇenositelnost
Open-source databa´ze
• snadne´ nasazenı´
Shrnutı´
• stabilita a robustnost • komercˇnı´ podpora mnoha firem (ne´ jedne´)
Webove´ programova´nı´ a Open Source
Webove´ programova´nı´ v Javeˇ
Luka´sˇ Zapletal Za´klady webove´ho programova´nı´ Psanı´ webovy´ch aplikacı´ Webove´ programova´nı´ v Javeˇ Open-source databa´ze Shrnutı´
• pojem Servlet, JSP/JSF • mozˇno psa´t jednoduche´ JSP skripty i robustnı´ MVC
aplikace • uka´zka: Netbeans IDE a jednoduchy´ JSP projekt • uka´zka: Netbeans IDE s VWP a JSF projekt
Webove´ programova´nı´ a Open Source
FOSS DB syste´my
Luka´sˇ Zapletal Za´klady webove´ho programova´nı´ Psanı´ webovy´ch aplikacı´ Webove´ programova´nı´ v Javeˇ
Relacˇnı´ databa´zove´ syste´my: • PostgreSQL • MySQL
Open-source databa´ze
• Firebird
Shrnutı´
• SQLite • Apache Derby
Webove´ programova´nı´ a Open Source
FOSS ODB syste´my
Luka´sˇ Zapletal Za´klady webove´ho programova´nı´ Psanı´ webovy´ch aplikacı´ Webove´ programova´nı´ v Javeˇ Open-source databa´ze Shrnutı´
Objektove´ a ostatnı´ db syste´my: • db4o (Java, .NET) • Oracle BerekeleyDB (klı´cˇ-hodnota databa´ze, nativnı´ a
Java verze) • ZopeDB (Python)
Webove´ programova´nı´ a Open Source
Shrnutı´
Luka´sˇ Zapletal Za´klady webove´ho programova´nı´ Psanı´ webovy´ch aplikacı´ Webove´ programova´nı´ v Javeˇ
• tvorba webovy´ch aplikacı´ dnes: PHP, Python, Java,
ASP.NET
Open-source databa´ze
• pokud zbude cˇas – prezentace Java pro vy´voja´rˇe .NETu
Shrnutı´
• diskuse