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

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

VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA EE Zbyněk Šlajchrt Část 2.

Podobné prezentace


Prezentace na téma: "VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA EE Zbyněk Šlajchrt Část 2."— Transkript prezentace:

1 VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA EE Zbyněk Šlajchrt http://java.vse.cz/4it447/HomePage Část 2.

2 Protokol HTTP - Princip Webový server...... Odpověď http://www.vse.cz Dotaz 2 Webová aplikace

3 Protokol HTTP  Request-response protokol (nebo také client-server)  Původně navržen na přenos hypertextových dokumentů – HTML (Tim-Berners Lee)  Aktuální verze 1.1 – lepší správa připojení k serveru  Obvykle provozován nad TCP/IP, není však podmínkou  Dokumenty jsou identifikovány URI – Uniform Resource Identifier  Typickým klientem je webový prohlížeč 3

4 Protokol HTTP  Bezstavový protokol  Server neví, zda zpracovávaný dotaz souvisí s předchozím  "Stavovost" řeší aplikace pomocí cookies (default) či tzv. přepisování URL (údaje o relaci jsou serverem zakódovány do všech URL v HTML dokumentu)  Původně navržen ke stažení jednoho dokumentu v rámci jednoho připojení  Výhody: jednoduchost, minimální zátěž síťě  Nevýhody: absence konverzačního kontextu 4

5 HTTP Request - příklad GET /en/html/dummy.php HTTP/1.1 Host: www.explainth.at User-Agent: Mozilla/5.0 Accept: text/xml,text/html;text/plain;image/png Accept-Language: en-gb,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8 Connection: keep-alive Referer: http://www.explainth.at/en/misc/httpreq.shtml 5

6 HTTP Request  Skládá se ze třech částí  Řádka dotazu na dokument (Request line) HTTP/ GET /mypage.html HTTP/1.1  Hlavičky – různorodé doplňující informace Např. Accept-Language: en http://en.wikipedia.org/wiki/List_of_HTTP_headers  Tělo zprávy (nepovinné) Obsahuje data odeslané metodou POST Často pole formuláře, nahrávaný soubor, SOAP XML 6

7 Metody dotazování - základní  GET (idempotent - should)  požaduje reprezentaci specifikovaného zdroje  neměla by mít vedlejší efekt! (tzv. idempotence)  POST  odesílá data z klienta na server ke zpracování  je určena k modifikaci stavu odkazovaného zdroje  PUT (idempotent - must)  zakládá nový zdroj v aplikaci  DELETE (idempotent - must)  odstraňuje zdroj z aplikace 7

8 Metody dotazování - pokračování  HEAD (idempotent - should)  Jako GET, server však vrací pouze hlavičky bez těla  TRACE (idempotent - should)  server vrací příchozí dotaz jako tělo odpovědi  kontrola modifikace dotazu mezilehlými servery  OPTIONS (idempotent - should)  vrací seznam metod podporovaných serverem pro specifikovaný zdroj  CONNECT  otevře transparentní TCP/IP tunel pro SSL komunikaci 8

9 HTTP Response - příklad HTTP/1.1 200 OK Date: Wed, 16 Aug 2000, 13:25:54 GMT Server: NCSA/1.5.2 Last-modified: Sat, 22 Jan 2000, 05:15:43 Content-type: text/html Content-length: 12443 Hello! 9

10 HTTP Response  Odpověď se skládá ze tří částí:  Řádka se stavovým kódem HTTP/ HTTP/1.1 200 OK HTTP/1.1 404 Not Found Možnost customizace http://www.webdevelopersnotes.com/basics/http_codes.php3  Hlavičky odpovědi Informace o serveru a obsahu odeslaném na klienta Kódování, MIME typ, datum poslední změny atp.  Tělo odpovědi Vlastní data 10

11 Stavové kódy  1xx – informační  100 Continue – výzva klientovi, aby poslal další data  2xx – úspěch  200 OK – standardní odezva úspěšných dotazů  3xx – přesměrování  303 See Other – přesměrování pomocí GET  4xx – chyba u klienta  401 Unauthorized – neautorizovaný přístup  418 I'm a teapot - http://en.wikipedia.org/wiki/April_Fools%27_Day_RFC  5xx – chyba na serveru  503 Service Unavailable – server je nedostupný 11

12 Webová aplikace v Javě Webový server Servletový kontejner Servlet1 Servlet2 odpověď dotaz 12

13 Co je servlet?  Javovská komponenta spravovaná kontejnerem, která generuje dynamický obsah.  Servlety jsou standardní Java třídy  Interagují s klienty prostřednictvím request/response paradigmatu  Analogie k CGI skriptům  Servlety jsou obecně mnohem výkonnější (vlákna)  Oddělení logiky aplikace od systémových operací  Servlet API 3.0 13 Serv let1

14 Co je servletový kontejner?  Součást webového nebo aplikačního serveru  Poskytuje síťové služby pro  příjímání a dekódování dotazů  odesílání a zakódování odpovědí  správa životního cyklu servletů  bezpečnostní aspekty (ověření identity, autorizace)  Default je HTTP protokol  může podporovat HTTPS (HTTP over SSL)  Musí implementovat HTTP 1.0 i HTTP 1.1 14

15 Typický servlet 15

16 Příklad HTTP komunikace 1. Prohlížeč odešle HTTP dotaz na webový server 2. Webový server předá dotaz kontejneru. Ten může běžet ve stejném procesu, jako server, ale i jinde. 3. Kontejner určí na základě konfigurace servlet pro předání požadavku 4. Servlet zpracuje parametry a hlavičky dotazu a vygeneruje odpověď 5. Kontejner ověří, že dotaz je správně uzavřen a předá řízení webovému serveru 16

17 Rozhraní servletu  javax.servlet.Servlet  Základní rozhraní pro všechny servlety  Principiální metoda service  obsluha příchozích požadavků a generování odpovědi  Dvě abstraktní implementace  javax.servlet.GenericServlet základ pro různé protokolově závislé implementace  javax.servlet.http.HttpServlet dědí z GenericServlet nejčastěji používaná implementace 17

18 Rozhraní servletu 18 javax.servlet.Servlet > javax.servlet.Servlet > javax.servlet.GenericServlet > javax.servlet.GenericServlet > javax.servlet.http.HttpServlet > javax.servlet.http.HttpServlet > cz.vse.javaee.SampleServlet

19 Metody pro obsluhu HTTP dotazu  HttpServlet implementuje metodu service jako šablonovou metodu (GoF – Template Method)  Příchozí požadavek deleguje na jednu z řady prázdných metod podle metody odeslání HTTP dotazu  doGet  doPost  doPut  atd...  Ve většině případů se používají pouze doGet a doPost 19

20 Podpora podmíněného GET  Zabraňuje zbytečnému přenosu dat po síti  Klient říká: "Pošli mi data pouze pokud byl zdroj modifikován od datumu, který ti posílám v hlavičce If- Modified-Since."  Pozn.: Kromě této hlavičky existují i další: If-Unmodified- Since, If-Match, If-None-Match, or If-Range  Metoda getLastModified vrací čas poslední modifikace požadovaného zdroje  Návratová hodnota se použije v implementaci podmíněného GET v třídě HttpServlet. 20

21 Instance servletu  Kontejner vytváří vždy právě jednu instanci servletu na jednu jeho deklaraci  Deklarace je uvedena  v deployment deskriptoru  anotací  Výjimkou je  Distribuované prostředí (clustery)  Single Thread Model servletu kontejner může vytvářet více instancí při velkém zatížení 21

22 Single Thread Model servletu  Deprecated  Implementací SingleThreadModel značkovacího rozhraní je zaručeno, že metoda service bude vždy běžet pouze v jednom vlákně.  Tato vlastnost má velmi neblahý vliv na výkon serveru, proto se velmi nedoporučuje  Servlety musí jinak počítat s tím, že metoda obsluha dotazu bude prováděna ve více vláknech  Pečlivě synchronizovat přístupy kódu k atributům! 22

23 Životní cyklus servletu  Definuje, jak je servlet vytvářen, inicializován, používán k obsluze požadavků a ukončován.  Životní cyklus je vyjádřen v rozhraní Servlet metodami  init voláno při inicializaci servletu  service voláno při obsluze požadavku klienta  destroy voláno, když má být servlet zrušen 23

24 Inicializace servletu  Probíhá před vlastním zpracováním požadavků  Účelem je např.:  Načíst konfigurační parametry  Inicializovat jednorázová náročná připojení k jiným systémům  Různé jednorázové akce  Kontejner volá na servletu metodu  void init(javax.servlet.ServletConfig servletConfig) throws javax.servlet.ServletException;  Předává se konfigurační objekt, který nese informace o konfiguraci servletu ve formě párů jméno-hodnota 24

25 Konfigurace servletu 25

26 Načtení konfigurace 26

27 Přehled metod ServletConfig  getInitParameter(name)  vrací hodnotu parametru  getInitParameterNames()  vrací enumeraci názvů parametrů  getServletContext()  vrací instanci aplikačního kontextu  getServletName()  vrací název servletu 27

28 Zpracování požadavků  Probíhá v metodě servletu  service(ServletRequest request, ServletRequest response) throws ServletException, IOException  Kontejner zapouzdří dotaz do objektu ServletRequest  Servlet generuje odpověď prostřednictvím objektu ServletResponse  Pro každé volání je vytvářena nová dvojice těchto objektů 28

29 Zpracování HTTP požadavků  Probíhá v metodách  doGet  doPost  a dalších, nazvaných analogicky (doPut, atp.)  Jako parametry jsou předávány objekty reprezentující dotaz a odpověď  HttpServletRequest  HttpServletResponse 29

30 Zpracování ve více vláknech  Kontejner může volat metodu service souběžně ve více vláknech  Je třeba korektně synchronizovat přístupy ke sdíleným datům  Takto ne!!!  protected synchronized void doGet(...)  Velmi negativní dopad na výkonnost serveru  V podstatě analogické SingleThreadModelu 30

31 Zpracování ve více vláknech Operace ++ není atomická Přičtení a použití počítadla musí být atomické 31

32 Zpracování ve více vláknech Správně 32

33 Vyhazování výjimek  Servlet může vyhazovat dvě výjimky  ServletException signalizuje chybu ve zpracování požadavku kontejner provede čistící aktivity aplikační chyby – instance servletu zůstává v činnosti  UnavailableException signalizuje, že servlet není schopen dočasně či permanentně zpracovat požadavek – metoda isPermanent na výjimce permanentní problém vede k odstranění instance servletu – volá se destroy – vrací se stavový kód 404 (Not Found) dočasný vede k 503 (Service Unavailable) po dobu trvání problému – metoda getUnavailableSeconds na výjimce 33

34 Asynchronní zpracování  Novinka v Java EE 6  Stává se, že servlet musí čekat na odpověď od např. webové služby či JDBC připojení  Počet vláken je velmi omezený – thread pool  velikost řádově jako počet procesorů či jader  Čekání zbytečně blokuje vlákno, které by mohlo obsluhovat jiné požadavky  Servlet 3.0 umožňuje, aby se obslužné vlákno vrátilo do poolu, přičemž zpracování požadavku si převezme jiné vlákno či callback 34

35 Diagram asynchronního zpracování 35

36 Ukončení obsluhy zpráv servletem  Kontejner se může kdykoliv rozhodnout, že odstraní servlet  Volá na servletu metodu destroy  V této metod servlet uvolňuje všechny prostředky systému, které využíval  Kontejner musí nechat doběhnout všechna vlákna, ve kterých běží metoda service  Poté je objekt servletu k dispozici garbage collectoru 36

37 HTTP Request  Zapouzdřuje veškeré informace získané z dotazu  Parametry  Atributy  Hlavičky  Cestu  Cookies  SSL atributy  Locale  Encoding 37

38 Parametry v GET dotazu GET /index.html?userid=joe&password=guessme HTTP/1.1 Host: www.mysite.com User-Agent: Mozilla/4.0 38

39 Parametry v POST dotazu POST /login.jsp HTTP/1.1 Host: www.mysite.com User-Agent: Mozilla/4.0 Content-Length: 27 Content-Type: application/x-www-form-urlencoded userid=joe&password=guessme 39

40 Parametry dotazu  Předávány klientem jako řetězce v HTTP dotazu  typicky pole formulářů  Uchovávány jako páry klíč-hodnota  vícenásobný výskyt možný  V případě GET metody jsou v URL (za ?)  Parametry jsou kontejnerem načteny ze vstupního proudu (socketu) pouze tehdy, když:  HTTP metoda je POST  typ obsahu je application/x-www-form-urlencoded  servlet zavolal na počátku zpracování jednu z metod: getParameterXXX metody 40

41 Parametry dotazu  Pokud uvedené podmínky nejsou splněny, POST data jsou stále ve vstupním proudu. 41

42 File upload  Dotaz má typ obsahu  multipart/form-data  Servlet musí být anotován @MultipartConfig  Objekt dotazu zpřístupní metody  Collection getParts()  Part getPart(String name)  Třída Part reprezentuje jeden soubor posílaný na server  getInputStream, getContentType, getName, getSize... 42

43 Atributy  Atributy jsou objekty asociované s dotazem  Mohou být nastaveny kontejnerem, ale i servletem  Nesou informace, které nejsou v API  Mohou sloužit pro komunikaci mezi servlety v rámci jednoho dotazu  Metody  getAttribute, getAttributeNames, setAttribute  Klíče atributů, které začínají na java, javax, sun, com.sun jsou rezervované 43

44 Hlavičky  Objekt dotazu obsahuje také hlavičky z HTTP dotazu  Seznam na  http://en.wikipedia.org/wiki/List_of_HTTP_headers  Metody  getHeader, getHeaders, getHeaderNames  getIntHeader, getDateHeader 44

45 Cesty v dotazu  Cesta v dotazu je složena z několika částí  Context Path - getContextPath prefix asociovaný s kontextem aplikace (servlet kontext) http://localhost:8080/knihovna/knihy/index.jsp  Servlet Path - getServletPath Část cesty, která odpovídá mapování servletu http://localhost:8080/knihovna/knihy/index.jsp  PathInfo - getPathInfo Zbytek cesty, která není ani Context Path ani Servlet Path http://localhost:8080/knihovna/knihy/index.jsp 45

46 Cookies  Metoda getCookies na HttpServletRequest vrací seznam cookies obsažených v dotazu  Cookies se posílají s každým dotazem  Jsou to páry klíč-hodnota s dobou platnosti, po kterou mají být uchovány u klienta  Na klienta se posílají prostřednictvím metody  HttpServletResponse.addCookie(Cookie) 46

47 Internacionalizace  I18N  Klient může indikovat, ve kterém jazyce si přeje komunikovat  Metody  getLocale preferované jazykové prostředí  getLocales seznam jazykových prostředí seřazených podle priority 47

48 ServletContext  Představuje prostředí aplikace, ve které servlet běží  Pomocí tohoto objektu může servlet  logovat události  získávat URL k prostředkům  číst konfigurační parametry celé aplikace  nastavovat a číst atributy sdílené napříč aplikací  Vrací ho metoda servletu  getServletContext 48

49 ServletContext - konfigurace  Konfigurace v souboru WEB-INF/web.xml 49

50 Užitečné metody v ServletContext  getInitParameter  setAttribute, getAttribute, getAttributeNames, removeAttribute  getResource, getResourceAsStream, getRealPath  log  getRequestDispatcher  popis viz JavaDoc k Java EE 6  http://java.sun.com/javaee/6/docs/api/ 50

51 HTTP Response  Zapouzdřuje veškeré informace, které se mají poslat na klienta, tj. hlavičky + tělo  Skupiny metod  Buffering řízení vyrovnávací paměti, ve které se uchovává odpověď  Hlavičky a cookies metody pro nastavování hlaviček a cookies v odpovědi  Usnadnění sendRedirect, sendError  I18N setLocale 51

52 Filtry  Filtry jsou komponenty, které umožňují transformovat data přicházející k servletu a odcházející ke klientovi  Přiřazují buď přímo k servletu v konfiguraci web.xml  Nebo se vážou k nějaké URI  Příklady:  autentikační filtry  logovací a auditní filtry  konverzní filtry  komprimační/dekomprimační filtry 52

53 Filtry - interakce servlet filtr2 filtr1 53

54 Filter - implementace 54

55 Filtry – konfigurace ve web.xml 55

56 Sessions  HTTP je bezstavový protokol  Často je nutné, aby aplikace rozpoznala dotazy, které patří stejnému klientovi  potřebujeme tedy tzv. konverzační kontext  stavová funkce  Session – sezení, relace  Session tracking mechanismy  Cookies – JSESSIONID cookie udržuje ID session  SSL Sessions – SSL již obsahuje takový mechanismus  URL Rewriting – používá se, když klient odmítá cookies 56

57 Vytváření session  Metody v HttpServletRequets  HttpSession getSession() Vrací aktuální session, nebo vytváří novou, pokud neexistuje.  HttpSession getSession(boolean create) Vrací aktuální session. Parametr create určuje, zda se bude vytvářet nová session v případě, že ještě neexistuje.  Často je třeba zjistit, že se jedná o novou session  boolean HttpSession::isNew()  Aplikace musí počítat se situací, že klient odmítne přidružit se k session 57

58 Důležité metody HttpSession  get/set/removeAttribute, getAttributeNames  operace s atributy – páry (klíč, hodnota)  takto lze sdílet data napříč aplikací v rámci session  invalidate  zneplatňuje session a odpojí všechny hodnoty atributů  setMaxInactiveInterval  specifikuje interval mezi dotazy, po jehož překročení kontejner zneplatní session  getId  vrací jednoznačné ID session 58


Stáhnout ppt "VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA EE Zbyněk Šlajchrt Část 2."

Podobné prezentace


Reklamy Google