Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilAnežka Kašparová
1
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA Zbyněk Šlajchrt http://java.vse.cz/4it447/HomePage Část 3.
2
Vyřizování dotazů (Dispatching) Při zpracování požadavku často potřebujeme přenechat zpracování jinému servletu – tzv. forwarding vložit výstup z jiného servletu do "našeho" výstupu – tzv. inclusion Řeší objekt třídy RequestDispatcher (dispečer) ServletContext::getRequestDispatcher(cesta) cesta je relativní ke kořeni kontextu aplikace a začíná / ServletRequest::getRequestDispatcher(cesta) cesta je relativní k aktuálnímu dotazu, nezačíná / ServletContext::getNamedDispatcher(název) předává se název servletu z aplikačního kontextu 2
3
Použití RequestDispatcher Pro vložení výstupu jiného servletu include(request, response) Pro přenechání zpracování forward(request, response) Parametry těchto metod jsou objekty dotazu (ServletRequest) a odpovědi (ServletResponse) stejné, jako předané aktuálním servletu instance obalových tříd ServletRequestWrapper a ServletResponseWrapper 3
4
Vyřizování dotazů - include Webový server Servletový kontejner Servlet1 Servlet2 odpověď dotaz include 4
5
Metoda include Vkládá výstup volaného servletu do předaného objektu odpovědi (response) Může být v rámci dotazu volána vícekrát K objektu dotazu má plný přístup Na objektu odpovědi může používat výstupní stream nebo writer nesmí měnit návratový kód, obsah ani počet hlaviček změny jsou ignorovány 5
6
Příklad – vložení hlavičky a patičky 6
7
7
8
8
9
Vyřizování dotazů - forward Webový server Servletový kontejner Servlet1 Servlet2 odpověď dotaz forward 9
10
Metoda forward Přenechává dokončení zpracování jinému servletu Možno volat pouze pokud ještě žádná data nebyla odeslána na klienta Jinak se vyhazuje výjimka IllegalStateException (viz Spec. 9.4) Před návratem je výstup z cílového servletu kontejnerem odeslán na klienta (commit) a uzavřen volající servlet pak už neřeší potvrzování obsahu 10
11
Příklad – forward 11
12
Příklad – forward 12
13
Posluchači Možnost zaregistrovat posluchače událostí v různých objektech: ServletContext HttpSession ServletRequest Usnadňuje rozdělení logiky do tříd podle účelu (Separation of Concerns) Zvyšuje flexibilitu a rozšiřitelnost Od verze Java EE 6 je možné registrovat posluchače za běhu aplikace. (Dříve jen ve web.xml) 13
14
Posluchači ServletContext Životní cyklus Servletový kontext byl nahrán, nebo je nachystán k ukončení rozhraní javax.servlet.ServletContextListener Změny v atributech Atributy v kontextu byly přidány, odebrány či vyměněny rozhraní javax.servlet.ServletContextAttributeListener 14
15
Příklad ServletContextListener 15
16
Příklad ServletContextListener 16
17
Posluchači HttpRequest Životní cyklus javax.servlet.ServletRequestListener requestInitialized, requestDestroyed Změny v atributech javax.servlet.ServletRequestAttributeListener Asynchronní zpracování požadavku javax.servlet.AsyncListener onComplete, onTimeout 17
18
Posluchači HttpSession Životní cyklus Http session byla vytvořena, zneplatněna nebo vypršela javax.servlet.http.HttpSessionListener Změny v atributech Atributy v session byly přidány, odebrány či vyměněny javax.servlet.http.HttpSessionAttributeListener 18
19
Posluchači HttpSession Připojení/odpojení objektu k session (binding) Objekt byl připojen nebo odpojen ze session javax.servlet.http.HttpSessionBindingListener Neregistruje se ve web.xml. Migrace session Session byla aktivována, nebo se chystá k pasivaci javax.servlet.http.HttpSessionActivationListener Neregistruje se ve web.xml. Stačí samotný fakt, že třída implementuje rozhraní posluchače. 19
20
Příklad HttpSessionBindingListener 20
21
Příklad HttpSessionBindingListener 21
22
Př. HttpSessionActivationListener 22
23
Distribuované prostředí Všechny dotazy patřící do jedné relace jsou obslouženy ve stejném JVM Kontejner se však může rozhodnout provést tzv. migraci relace na jiný uzel clusteru load-balancing – rozložení zátěže mezi uzly fail-over – předání zpracování na jiný uzel v případě potíží na původním cílovém uzlu 23
24
Migrace session S1 Klient 1 Uzel 1 Uzel 2 S1 24 Load Bala ncer Load Bala ncer
25
Session Migrovatelnost atributů relace Kontejner akceptuje všechny objekty-atributy, které implementují java.io.Serializable Kontejner se může rozhodnout pro migraci objektů, které nejsou serializovatelné, specifickým způsobem. Způsob migrace není specifikován. A1 A2 A3 25
26
Java Server Pages (JSP) Technologie pro generování dynamických webových stránek a dokumentů Např. HTML, XHTML, XML, SVG, WML (WAP) Statický obsah tvoří základ šablony Dynamický obsah se získává Java kódem vpisovaným do JSP – tzv. skriptlety odkazem na vlastnosti objektů ve formě Java Beans (EL2 výrazy - ${...}) prostřednictvím tzv. custom tagů 26
27
JSP - ukázka 27
28
JSP - výsledek 28
29
Životní cyklus JSP stránky Fáze překladu (translation phase) Kontejner vyhledá stránku Validace a kontrola syntaxe JSP a tagů Vytvoření implementační třídy JSP stránky obvykle servlet Běhová fáze (execution phase) Předávání objektů požadavku a odpovědi instanci implementační třídy JSP stránky 29
30
Syntaktické prvky Direktivy Poskytují informace pro fázi překladu Nemají přímý vztah ke zpracování dotazu stránkou Akce Deklarují, jak se má zpracovat dotaz. XML syntaxe. Standardní akce jsou specifikované Custom akce pomocí rozšiřujících tagů (tag extensions) Např. JSTL – JSP Standard Tag Library Skriptovací prvky výrazy, skriptlety, deklarace 30
31
Direktivy Syntax: page Definují vlastnosti generované stránky taglib Deklaruje, že stránka používá knihovnu tagů. include Používá se pro vkládání textu nebo kódu z jiného souboru v době překladu. 31
32
Standardní akce XML reprezentace, elementy mají prefix jsp Deklaruje proměnnou, jejíž hodnota je javovský objekt Lze určit rozsah, kde se objekt nachází Atributy id – jednoznačné ID v rámci JSP, deklarace skript. proměnné scope – rozsah, ve kterém se hledá instance beanu page (default), request, session, application class – třída Java beanu. Pokud není nalezen v zadaném rozsahu, vytvoří se. type – typ proměnné deklarované touto akcí 32
33
Standardní akce Čte hodnotu vlastnosti beanu a zapisuje ji na výstup Atributy name – název beanu, obvykle odpovídá id v property – název vlastnosti beanu 33
34
Standardní akce - příklad 34
35
Standardní akce - příklad 35
36
Standardní akce Nastavuje hodnotu vlastnosti beanu Atributy name – název beanu, obvykle odpovídá id v property – název vlastnosti beanu param – parametr v dotazu, jehož hodnota se použije value – hodnota vlastnosti, nelze uvádět současně s param , Analogie metodám třídy RequestDispatcher include forward 36
37
Knihovny tagů Umožňují rozšířit sadu standardních akcí Doporučeno jako náhrada za skriptlety Typická užití Prosté akce Podmíněné zpracování Iterace Registrace posluchačů (např. v JSF) Existují dva typy tzv. tag handlerů Klasický Zjednodušený 37
38
Simple Tag Handler Náhrada za klasické tag handlery Velmi zjednodušuje vývoj vlastních knihoven tagů Dva způsoby implementace Java Základem je třída javax.servlet.jsp.tagext.SimpleTag, resp. SimpleTagSupport Určeno programátorům JSP Tag soubory Určeno neprogramátorům, např. tvůrcům webových stránek 38
39
HelloTag - Handler 39
40
HelloTag – TLD knihovna Uloženo v souboru WEB-INF/mytaglib.tld 40
41
HelloTag – Použití v JSP 41
42
Tagové soubory Jednoduchý způsob, jak vytvořit nový tag soubor WEB-INF/tags/welcome.tag Tagové soubory se obvykle umisťují do adresáře WEB-INF/tags Import v JSP Použití: 42
43
Skriptovací prvky - Scriptlety Skriptlety mohou obsahovat libovolný fragment skriptovacího jazyka Default Java Provádí se v čase dotazu Mohou a nemusí vytvářet výstupní data Kód skriptletu je uzavřen v bloku vymezeném 43
44
Scriptlety - příklad 44
45
Scriptlety – implicitní objekty Objekty, které jsou deklarovány implicitně prostřednictvím proměnných na začátku stránky request, session, application, pageContext objekty rozsahů (scopes) pageContext je speciální kontext reprezentující JSP stránku response – objekt odpovědi page – objekt stránky out – výstupní proud (javax.servlet.jsp.JspWriter) config – konfigrace servletu generovaného ke stránce 45
46
Scriptlety – explicitní proměnné Deklarace beanu akcí zavádí proměnnou odpovídající hodnotě atributu id Viz příklad s výpisem čísel telefonů Deklarace pomocí speciální konstrukce Deklarace globální proměnné (v podstatě atribut třídy) Pozor v případě více souběžných dotazů! Synchronizovat! Deklarace metody 46
47
Výrazy Konstrukce definuje výraz, který se po vyhodnocení v čase dotazu vypíše na výstup 47
48
Expression Language – EL 2.1 Od uvedených skriptovacích technik se ustupuje Místo nich se doporučuje používat tagy a EL EL je navržen pro snadné sestavování výrazů nad aplikačními daty uloženými v Java beans Syntaxe: ${expression} ${1} ${"Welcome"} – vrací konstanty ${name} – vrací hodnotu proměnné name ${user.email} – vrací hodnotu vlastnosti email beanu v proměné user ${user.phone[0]} – vrací první prvek v seznamu telefonů 48
49
Expression Language – EL 2.1 Možno použít v těle stránky hodnota výrazu se vypíše na výstup v atributu tagu možno použít ve standardních i custom atribut musí povolovat runtime výrazy definuje se v popisovači knihovny tagů TLD prvkem true/false 49
50
EL - příklad 50
51
JSP dokumenty JSP dokumenty jsou JSP stránky psané v XML Tímto vyjádřením se získá řada výhod K editaci lze použít běžné XML editory Stránky lze validovat oproti schématu (DTD, XSD) Lze využít jmenných prostorů pro oddělení a vnoření různých obsahů Přehlednost 51
52
JSP dokument - příklad 52
53
JSP dokumenty – analogie s JSP Kořenový prvek je Direktivy jsou vyjádřeny prvky, kde XXX je direktiva EL výrazy se používají obdobně Knihovny tagů se importují pomocí jmenných prostorů xmlns:c="http://java.sun.com/jsp/jstl/core" Skriptlety se píší do těla tagu 53
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.