Caché Server Pages David Polách,
Přehled témat Úvod, architektura, konfigurace Možnosti vývoje – %CSP.Page, CSP soubory CSP direktivy a tagy Základní třídy %CSP.Page %CSP.Request %CSP.Response %CSP.Session
Co je CSP Caché Server Pages Technologie dynamických stránek … build and deploy high-performance, highly-scalable Web applications … Používá standardní HTTP protokol Vestavěná podpora základních funkcionalit Relace Autentizace Šifrování parametrů Rychlý přístup ke Caché DB
Architektura Standardní web servery (IIS, Apache, Caché HTTP) Modul webserveru pro přesměrování požadavků CSP server pro zpracování požadavku Výstup nemusí být jen HTML XHTML XML Dle fantasie
Možnosti vývoje (1) Odvození nové třídy od %CSP.Page Definice metody OnPage (a dalších) Standardní výstup přesměrován na HTTP odpověď Příklad – Potomek %CSP.Page
Možnosti vývoje (2) CSP soubory Lze použít libovolný (HTML) editor Speciální tagy, direktivy a skripty Soubor je zkompilován do potomka třídy %CSP.Page Příklad – CSP soubor
Příklad kompilace Zdrojový hello.csp: Hello world Zkompilovaná třída: Class csp.hello extends %CSP.Page { ClassMethod OnPage() As %Status { Write " " Write " Hello world " Write " " Quit $$$OK }
Typy kompilace Automatická Kontrola data souborů Případná rekompilace U reálných aplikací nevhodné (kontrola data) Manuální Caché studio $system.CSP API: $system.CSP.LoadPage("/page.csp","ck") Rychlost + kontrola chyb
CSP značkovací jazyk (1) Sada direktiv a speciálních tagů Caché Basic nebo Caché Object Script Zvolený jazyk je platný pro skripty a metody na celé stránce (bude dále) Příklad – CSP značky (ex1markup.scp)
CSP značkovací jazyk (2) Výrazy, vnořování CSP tagy CSP skripty CSP metody Serverové metody (hyper-události)
Výrazy Vyhodnocované na serveru Při generovaní stránky #(výraz)# Při kompilaci stránky ##(výraz)## Jazyk dle definice na stránce! Příklad – typy výrazů (ex2expr.csp)
Vnořování Vložení obsahu externího souboru Virtual – použití virtuálního adresáře File – relativní cesta vzhledem k CSP souboru Příklad – vnoření obsahu (ex3include.csp)
CSP tagy Kontrola běhu … …, Vlastnosti stránky, SQL dotazy,, Další,,, …
Podmíněný příkaz … … … Podmínky se vyhodnocují při generování stránky
Cyklus s podmínkou <CSP:WHILE CONDITION=podmínka COUNTER=čítač CURSOR=sql_kurzor INTO=proměnné> [ | ] Pouze podmínka je povinná Je-li uveden čítač, zvyšuje se jeho hodnota o jedna při každé iteraci cyklu Spolupráce s SQL: INTO obsahuje seznam parametrů, do kterých se uloží nová věta z uvedeného kurzoru
Cyklus FOR <CSP:LOOP COUNTER=čítač FROM=start TO=konec STEP=krok> [ | ] Pouze čítač je povinný Zbylé atributy intuitivně ovlivní FOR cyklus
Příklad – Kontrola běhu Definujme následující globál: ^users(“login”, “name”) = “Celé jméno“ ^users(“login”, “hello”) = “Pozdrav“ ^users(“login”, “pass”) = “heslo“ Příklad – přihlášení do systému (ex4log.csp) Příklad – cyklus (ex5cycle.csp)
Vnořovaní přes tag Vnoření CSP stránky během generování „… použití komponenty …“ Příklad – vnořování (ex6taginclude.csp)
Vlastnosti stránky (1) <CSP:CLASS DOMAIN=… ENCODED=… ERRORPAGE=… EXPIRES=… IMPORT=… INCLUDES=… PRIVATE=… SUPER=… DESCRIPTION=…> Encoded = šifrování URL parametrů (0 … nešifrovat, 1 … šifrovat, 2 … šifrovat + odebrat nešifrované) Příklad – šifrování parametrů (ex7enc.csp)
Vlastnosti stránky (2) Private – boolean hodnota určuje, zda: Stránka zahajuje novou relaci Má pevné URL Private stránky mohou být odkazovány jen z jiných CSP stránek v rámci stejné relace Příklad – private stránka (ex8private.csp)
Obsah stránky <CSP:CONTENT CHARSET=… NOCHARSETCONVERT=… TYPE=…> Charset – kodování Nocharsetconvert – vypíná znakové konverze Type – mime typ (implicitně text/html ) Příklad – změna typu (ex9type.csp)
CSP skripty Provádění akcí na straně serveru Při generování Při kompilaci Jazyk skriptu musí být dle nastavení stránky … tělo skriptu … Příklad – server vs. compiler (ex10scr.csp)
CSP metody (1) Definování serverových metod Metoda náleží třídě vygenerované z CSP stránky Jméno, parametry, návratová hodnota Jazyk nemusí být podle jazyku stránky
CSP metody (2) <script language="[cache|basic]" method="jméno_metody" arguments="parametry" returntype="typ_výsledku"> … tělo metody … Příklad – CSP metoda (ex11methods.csp) Příklad – CSP metoda jiné stránky (ex12methods.csp)
SQL dotazy SELECT Name FROM Employee ORDER BY Name Použití výsledků dotazu: #(query.GetData(1))#
Hyper-události (1) Volání metod na Caché serveru bez nového generování stránky Vyvolání metody pomocí JavaScriptu Zpracování na serveru Zobrazení výsledku na té samé stránce Dva způsoby: Synchronní volání Asynchronní volání
Hyper-události (2) Jak to může fungovat? Stránka obsahuje Java applet JavaScript aktivuje metodu appletu a ten se spojí s Caché serverem (pomocí HTTP) Server provede metodu Stejnou cestou se vrací výsledek JavaScript nějakým způsobem zareaguje na výsledek metody (v synchronním případě)
Hyper-události (3) Synchronní případ: #server(třída.metoda(parametry, …))# Parametry lze zadat v JavaScript sekci Příklad – hyper-událost server (ex13server.csp)
Hyper-události (4) Asynchronní případ: #call(třída.metoda(parametry, …))# Rozdíl oproti volání #server: Nepoužívá se applet ale HTTP požadavek (pomocí IFRAME nebo ILAYER ) Je rychlejší (nečeká se na provedení metody) Příklad – hyper-událost call (ex14call.csp)
Hyper-události (5) Výhody: Vypadá to dobře Negeneruje se celá stránka (zvlášť u složitých stránek bude znát) Složitější validace formuláře pomocí metod aplikačního serveru Asynchronní akce lze provádět bez omezení uživatele (nečeká na novou stránku)
Hyper-události (6) Nevýhody: Stránka se načítá pomaleji (inicializace appletu) Časté používání není doporučováno Use as few #server and #call calls as possible Volání metody dříve, než se applet incializuje, vede k chybě Porušuje standardy (XHTML, W3C) Nefunguje v Netscape 6.0, 6.1 a Macintosh IE Rychle zopakované #call volání může přerušit volání předchozí
Objektový přístup Přehled základních tříd %CSP.Page %CSP.Request %CSP.Response %CSP.Session
Třída %CSP.Page (1) Univerzální předek všech uživatelských tříd Výstup přesměrován na HTTP odpověď Lokálních proměnné %request, %response, %session Vyřízení požadavku obstará metoda Page OnPreHTTP OnPage OnPostHTTP
Třída %CSP.Page (2) Sada metod pro práci s parametry ConvertParameter, Decrypt, Encrypt Metody pro bezpečnou práci s uživatelským vstupem EscapeHTML, UnEscapeHTML, QuoteJS Ovlivnění vlastností stránky ( ) Zpracovávání hyper-událostí
Třída %CSP.Request Zapouzdřuje HTTP požadavek Typ požadavku (GET/POST/HEAD) Parametry (multidimensionální) %request.Data(“jméno“, pořadí) Cookies Mime data CGI proměnné prostředí %request.CgiEnvs("HTTP_USER_AGENT") Příklad – HTTP požadavek (ex15Request.cls)
Třída %CSP.Response Zapouzdřuje HTTP odpověď HTTP hlavičky Cookies Pozor na pořadí! ( OnPreHTTP ) Typ obsahu ( ) Několik pomocných metod (timeout, redirect/server-side redirect, …)
Třída %CSP.Session (1) Relace = posloupnost požadavku daného klienta na danou aplikaci Relace zahájena automaticky při prvním přístupu Postup při vytváření relace: Vytvoření nového ID relace Kontrola licencí (počtu připojení) Vytvoření nové instance %CSP.Session Zavolání metody OnSessionStart Cookie přenos vs. URL přepis
Třída %CSP.Session (2) Třída je persistentní (globál ^%cspSession ) Způsoby ukončení (vypršení) relace: Klient je ukončen Timeout relace Explicitní ukončení Set %session.EndSession=1 Po ukončení se volá metoda OnSessionEnd
Třída %CSP.Session (3) Typické použití relací: Uchovávání uživatelských dat (multidimensionální) %session.Data(…) Pomocí klíče relace se šifrují parametry (viz. encoded stránky a private stránky) … This key never leaves Cache … Zavedení stavové informace mezi jednotlivé HTTP požadavky
Relace příklad - eshop Definujme následující globál: ^store(“číslo“) = jméno_výrobku ^store(“číslo“,“desc“) = popis_výrobku ^store(“číslo“,“price“) = cena_výrobku ^store(“číslo“,“cnt“) = ks_na_skladě cílem bude procházení skladem, přidávání a odebírání zboží do/z košíku Příklad – eshop (ex16eshop.csp)
Závěrečné shrnutí CSP je: Rychlé a silné Jednoduché (jednoduchý přechod od JSP) Umožňuje rychlý vývoj Naplno využívá výhod Caché serveru Co lze vytknout: Hyper-události porušují standardy Rozšíření (lze sehnat WWW hosting s Caché serverem?)