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 Zbyněk Šlajchrt Část 3.

Podobné prezentace


Prezentace na téma: "VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA Zbyněk Šlajchrt Část 3."— Transkript prezentace:

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


Stáhnout ppt "VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA Zbyněk Šlajchrt Část 3."

Podobné prezentace


Reklamy Google