Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA
Zbyněk Šlajchrt Část 3.
2
Vyřizování dotazů - include
Webový server odpověď Servletový kontejner Servlet1 Servlet2 include dotaz
3
Vyřizování dotazů - forward
Webový server odpověď Servletový kontejner Servlet1 Servlet2 forward dotaz
4
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
5
Získání RequestDispatcher
Ř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
6
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
7
Příklad – vložení hlavičky a patičky
8
Příklad – vložení hlavičky a patičky
9
Příklad – vložení hlavičky a patičky
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
11
Příklad – forward
12
Příklad – forward
13
Posluchači Možnost zaregistrovat posluchače událostí v různých konextech, tzv. „scopes“ ServletContext - kontext celé aplikace HttpSession - kontext uživatelské relace ServletRequest - kontext dotazu 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)
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
15
Příklad ServletContextListener
16
Příklad ServletContextListener
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
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
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.
20
Příklad HttpSessionBindingListener
21
Příklad HttpSessionBindingListener
22
Př. HttpSessionActivationListener
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
24
Migrace session Load Balancer S1 S1 Uzel 1 Klient 1 Uzel 2
25
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. Session A1 A3 A2
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ů
27
JSP - ukázka
28
JSP - výsledek
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
30
Syntaktické prvky Direktivy Akce Skriptovací prvky
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
31
Direktivy Syntax: <%@ directive { attr=”value” }* %> page taglib
Definují vlastnosti generované stránky page contentType="text/html" language="java" %> taglib Deklaruje, že stránka používá knihovnu tagů. taglib uri=" prefix="h" %> include Používá se pro vkládání textu nebo kódu z jiného souboru v době překladu. include file=”copyright.html” %>
32
Standardní akce XML reprezentace, elementy mají prefix jsp
<jsp:useBean> 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í
33
Standardní akce <jsp:getProperty>
Čte hodnotu vlastnosti beanu a zapisuje ji na výstup Atributy name – název beanu, obvykle odpovídá id v <jsp:useBean> property – název vlastnosti beanu
34
Standardní akce - příklad
35
Standardní akce - příklad
36
Standardní akce <jsp:setProperty>
Nastavuje hodnotu vlastnosti beanu Atributy name – název beanu, obvykle odpovídá id v <jsp:useBean> 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 <jsp:include>, <jsp:forward> Analogie metodám třídy RequestDispatcher include forward
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ý
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
39
HelloTag - Handler <hello message="Bye"/>
40
HelloTag – TLD knihovna
Uloženo v souboru WEB-INF/mytaglib.tld
41
HelloTag – Použití v JSP
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 taglib prefix="my" tagdir="/WEB-INF/tags" %> Použití: <my:welcome message="Vítejte!"/>
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 <% scriptlet %>
44
Scriptlety - příklad
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
46
Scriptlety – explicitní proměnné
Deklarace beanu akcí <jsp:useBean id="bean"> zavádí proměnnou odpovídající hodnotě atributu id Viz příklad s výpisem čísel telefonů Deklarace pomocí speciální konstrukce <%! deklarace %> Deklarace globální proměnné (v podstatě atribut třídy) <%! int i = 0; %> Pozor v případě více souběžných dotazů! Synchronizovat! Deklarace metody <%! public String f(int i) { if (i<3) return(“...”); ... } %>
47
Výrazy Konstrukce <%= výraz > definuje výraz, který se po vyhodnocení v čase dotazu vypíše na výstup <%= "Dobrý den!" >
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. } – vrací hodnotu vlastnosti beanu v proměné user ${user.phone[0]} – vrací první prvek v seznamu telefonů
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 <rtexprvalue>true/false<rtexprvalue>
50
EL - příklad
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
52
JSP dokument - příklad
53
JSP dokumenty – analogie s JSP
Kořenový prvek je <jsp:root> Direktivy jsou vyjádřeny prvky <jsp:directive.XXX>, kde XXX je direktiva <jsp:directive.page contentType="text/html; utf-8"/> EL výrazy se používají obdobně Knihovny tagů se importují pomocí jmenných prostorů xmlns:c=" Skriptlety se píší do těla tagu <jsp:scriptlet>
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.