Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA

Podobné prezentace


Prezentace na téma: "VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA"— Transkript prezentace:

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>


Stáhnout ppt "VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA"

Podobné prezentace


Reklamy Google