X36WWW 13.. přednáškap Technologie aplikačních serverů Miroslav Bureš,, Martin Klíma 1
Obsah úvod princip aplikačního serveru stručný přehled aplikačních serverů úvod do platformy J2EE Java Servlet JSP sestavení jednoduché aplikace deployment některé pokročilé funkce aplikačních serverů 2
Použití technologie aplikačních serverů určena především pro velké webové aplikace,, kde se kladou požadavky na: výkon aplikace stabilita aplikace integrace s ostatními aplikacemi udržitelnost kódu při vývoji produktu 3
Čím je toto dosahováno? velké webové aplikace, udržitelnost kódu při vývoji produktu, integrace s ostatními aplikacemi oddělení core kódu aplikace od stránek webového rozhraní core kód je perzistentní (trvalý) program na serveru core kód v rozšířeném programovacím jazyku (např. Java) výkon aplikace kompilovaný kód distribuce aplikace na více serverů (scaling) stabilita aplikace distribuce aplikace na více serverů (scaling) 4
Rozdíl oproti ASP / PHP Webové aplikace řešené jako sled obrazovek vycházejí z historických technologií webu - statických HTML stránek. Do nich byla časem přidávána dynamika - CGI skripty atd. To poté vedlo k vytvoření interpretovaných jazyků jako ASP nebo PHP. Tento přístup přestává vyhovovat pro aplikace většího rozsahu - e-banking, vyhledávací služby, portálová řešení atd. klasické webové aplikace napsané v PHP a ASP jsou v principu sled obrazovek podstatou technologie je perzistentní aplikace která beží na serveru webové stránky které aplikace produkuje do prohlížeče jsou pouze její GUI, oddělitelné od struktury vlastní aplikace 5
Architektura... PHP A.PHP WEBSERVER interpreter HTML PAGE odbc / native /... DB php files WEB SERVER DB SERVER 6
Architektura... aplikační server J2EE A WEBSERVER plugin internal port HTML PAGE JSP files CLASS files persistent core app APPLICATION SERVER DB DB SERVER 7
4 vrstvá architektura Application Client Web Client Client Tier Client JSP Pages Web Tier Enterprice Beans Enterprice Beans Bussiness Tier Java EE Server Database Database EIS Tier Database Server 8
Komunikace Application Client Web Client Client Tier Client JSP Pages Web Tier Enterprice Beans Enterprice Beans Bussiness Tier Java EE Server Database Database EIS Tier Database Server 9
Komunikace detail webová vrstva Application Client Web Client Client Tier Client Java Beans JSP Pages Web Tier Java EE Server Enterprice Beans Enterprice Beans Bussiness Tier Database Database EIS Tier Database Server 10
Souvislost s čtyřvrstvou architekturou I. presentační vrstva II. vrstva webu III. vrstva aplikační logiky IV. datová vrstva validace požadavek model (JavaBean) logika na klientovi HTML prohlížeč zpracování událostí Tenký klient (HTML) HTTP odpověď zpracování požadavku/ odeslání odpovědi Stránka 1 Toto je dynamicky generovaná stránka x xxxx xx. generátor HTML stránek Server view (HTML) Data 11
Architektura... poznámky obecně, DB server může běžet na stejném serveru (fyzickém stroji) jako web server U aplikačního serveru může být front-end (web server) na jiném fyzickém stroji než core aplikace (aplikační server). Core aplikace se někdy označuje jako aplikační logika. Jako webserver je nejčastější Apache IBM http server (powered by Apache) MS IIS (Internet Information Services) 5.0 (MS Windows server 2000) 6.0 (MS Windows server 2003) 12
Obsah úvod princip aplikačního serveru stručný přehled aplikačních serverů úvod do platformy J2EE Java Servlet JSP sestavení jednoduché aplikace deployment některé pokročilé funkce aplikačních serverů 13
Nejznámější aplikační servery OpenSource J2EE (Java) Tomcat JBoss Enterprise J2EE (Java) IBM: WebSphere BEA: WebLogic Enterprise Microsoft: MS.NET 14
Obsah úvod princip aplikačního serveru stručný přehled aplikačních serverů úvod do platformy J2EE Java Servlet JSP sestavení jednoduché aplikace deployment některé pokročilé funkce aplikačních serverů 15
J2EE J2EE (Java 2 Enterprise Edition) je rozšíření standardní Javy (J2SE, Java 2 Standard Edition) o api pro tvorbu webových aplikací. J2EE se vždy vydá v určité verzi. Současná nejvíce rozšířená je 1.3. V produkčním provozu jsou však stále i aplikace na J2EE 1.2. Verze se skládá z verzí komponent J2EE. Protože různí výrobci aplikančích serverů a software obecně Javu rozšiřují o své vlastní extenze (api) a podporují je ve svých řešeních (IBM, BEA,...), J2EE je také chápáno jako norma Javy pro přenositelnost aplikací mezi jednotlivými aplikačními servery. Jedná se o rámec pro jednotné nasazení aplikace v rámci aplikančího serveru. 16
J2EE Například IBM rozšiřuje J2EE API pro tvorbu webových aplikací o další knihovny. J2SE J2EE IBM extensions 17
Java API J2EE 1.4 18
Java 5 EE API 19
Některé komponenty J2EE J2EE level 1.3 obsahuje například: Java Servlet 2.3 Java Server Pages (JSP) 1.2 Enterprise Java Beans (EJB( EJB) 2.0 JavaMail API 1.2 Java API for XML processing 1.1... J2EE určité verze by měl podporovat každý aplikační server pro Javu. Například WebSphere 5.0 podporuje J2EE 1.3 Dále se budeme zabývat pouze JavaServlet a JSP.. JavaServlet je v principu podobný CGI, JSP v principu podobné např. PHP nebo ASP. 20
Obsah úvod princip aplikačního serveru stručný přehled aplikačních serverů úvod do platformy J2EE Java Servlet JSP sestavení jednoduché aplikace deployment některé pokročilé funkce aplikačních serverů 21
Java Servlet Servlet běží jako perzistentní kód na aplikačním serveru. Pro předávání proměnných tedy nepotřebujeme http sessions. Jedná se o třídu v Javě podle API javax.servlet. Kód servletu dědí z abstraktní třídy HTTPServlet. Výsledný kód který se spouští ne severu je.class (bytecode). Princip volání je velmi podobný jako v případě PHP nebo ASP. V klientském prohlížeči je výsledná HTML stránka, ze které se na nějakém místě provede submit na server. Jako request se nevolá přímo PHP nebo ASP skript, ale abstraktní url, které je pak namapováno na konkrétní servlet v aplikačním serveru. Toto namapování se provádí v konfiguračním souboru (pro Tomcat web.xml). 22
Jednoduché srovnání servletu a PHP BROWSER HTML page login HTML page SERVER login.class BROWSER HTML page login.php HTML page SERVER login.php 23
Schéma aplikace v aplikačním serveru poznámka: web server zde není zobrazený SERVER COMPUTER CLIENT COMPUTER BROWSER HTML page URL APPLICATION SERVER REQUEST DISPATCHER DATABASE SERVER HTML page APPLICATION DB 24
Příklad kódu HTML stránky která volá servlet <html> <head> <title>pokus se servletem...</title> </head> <body> <form action= MujServlet method= post > Zadejte text:<br> <textarea name= txtvstup txtvstup rows= 5 cols= 50 ></textarea><br> <input type= submit value= Odeslat > </form> </body> </html> 25
Namapování servletu na URL Příklad namapování servletu com.servlety.testservlet.java na URL začínající na /Pokusy/ přes virtuální jméno MujServlet. <web-app> <servlet> <servlet-name>mujservlet MujServlet</servlet-name> <servlet-class> com.servlety.testservlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>mujservlet MujServlet</servlet-name> <url-pattern>/pokusy/* /Pokusy/*</url-pattern> </servlet-mapping> </web-app> 26
Kód servletu com.servlety.testservlet.java : package com.servlety; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class TestServlet extends HttpServlet { // vyvolá se na základě POST požadavku (náš formulář) public void dopost( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 27
Kód servletu com.servlety.testservlet.java : //text z formuláře String text = request.getparameter( txtvstup ); PrintWriter out = response.getwriter(); } } out.print( <!DOCTYPE HTML PUBLIC ); out.println( \"-//W3C//DTD HTML 4.0 Transitional//EN\"> ); out.println( <html><head><title>počet znaků</title></head> ); out.println( <body><h1>počet znaků: + text.length()); out.println( </h1></body></html> ); 28
Co se stane na serveru: V prohlížečí máme HTML stránku, která se vrátila po URL začínajícím na /Pokus/ /Pokus/ (viz výpis 1). Na ní je textové pole a tlačítko Odeslat. Pokud zmáčkneme toto tlačítko, na server se pošle požadavek. (Pokud vyvoláme URL /Pokusy/, výsledkem v bude zavolání servletu který je na něj namapován MujServlet) Ten se přes konfiguraci (viz výpis v 2) namapuje na servlet com.servlety.testservlet.java (viz výpis 3). 3 Servlet se spustí. Pomocí í request.getparameter( txtvstup vstup ) získáme formulářová data ze stránky. Výstupní stream Javy poté nastavíme tak, abychom zapisovali do objektu response. Textový výstup ze servletu tak vytvoří novou HTML stránku která se odešle klientovi do prohlížeče. 29
Základní objekty a metody servletu základní metody Servletu jsou service()... default, programátor jí může předefinovat, rozpozná, jaký požadavek přijde a na jejich základě volá: doget()... obsluhuje požadavek GET dopost()... obsluhuje požadavek POST... V parametrech metod se předají objekty request... obsahuje parametry, hlavičku... z URL response... slouží pro zápis výstupu ze servletu odezvy na request 30
Základní objekty a metody servletu... poznámky Ve složitějších aplikacích jsou tyto nativní metody často zakryty další aplikační logikou Perzistence (trvalost kóduk na serveru): : Servlet je při startu aplikace jednou zavedený do paměti a obsluhuje požadavky. Opakování: Request dispatcher zajišťuje volání konkrétního servletu podle URL které přijde na aplikační server. Přiřazení je provedeno v konfiguračním souboru aplikace (web.xml) 31
Obsah úvod princip aplikačního serveru stručný přehled aplikačních serverů úvod do platformy J2EE Java Servlet JSP sestavení jednoduché aplikace deployment některé pokročilé funkce aplikačních serverů 32
Opakování: Schéma aplikace v aplikačním serveru poznámka: web server zde není zobrazený SERVER COMPUTER CLIENT COMPUTER BROWSER HTML page URL APPLICATION SERVER REQUEST DISPATCHER DATABASE SERVER HTML page APPLICATION DB 33
Java Server Pages (JSP) Novější technologie než servlet JSP je HTML do kterého jsou vložené skriptlety (značky pro vkládání kódu do HTML) <% %> a <%= %>. Kód v skripletu je Java. JSP se při prvním požadavku na jeho spuštění kompiluje na servlet (.class),, ten pak produkuje HTML kód, právě pomocí metod pro textový výstup. To je rozdíl oproti PHP nebo ASP - kód není interpretovaný a zdojovým kódem který se spouští není samotný skript ale class Javy. 34
Jednoduchý příklad JSP stránky počítání znaků v řetězci, který JSP stránky dostane v parametru txt : <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head><title>počet znaků</title></head> <body> <% String delkastr = request.getparameter( txt ); %> <h1>počet znaků: <%=delkastr.length()%></h1> </h1> </body> </html> 35
JSP se dá využít stejně jako PHP nebo ASP JSP je pouze kompilované na servlet, není interpretované Kód ve skriptletech je jazyk Java přenositelné části kódu, možnost využití Java knihoven základní objekty v JSP request a response... globální v rámci JSP jejich použití je stejné jako u servletu požadavek na server z JSP stránky bude opět jiná JSP stránka Abychom však využili kapacitu J2EE, propojíme JSP a servlety. Naším cílem je mít na serveru perzistentní aplikaci která trvale poběží nezávisle na toku stránek. 36
Servlet nebo JSP... schéma BROWSER servlet URL HTML servlet BROWSER URL (.JSP) HTML JSP 37
Propojení JSP a servletu... schéma BROWSER servlet URL servlet HTML JSP 38
Propojení JSP a servletu... kód Princip: požadavek na server bude URL na které je namapovaný servlet. Servlet potom provede operace a vrátí JSP stránku. Požadavek na server nebude JSP ale servlet standardní způsob... v JSP stránce <form action= MujServlet method= post > Jak ze servletu do prohlížeče vrátit výstup JSP RequestDispatcher rd = getservletcontext().getrequestdispatcher("/jsp/login.jsp"); rd.forward(reqest,response); 39
Obsah úvod princip aplikačního serveru stručný přehled aplikačních serverů úvod do platformy J2EE Java Servlet JSP sestavení jednoduché aplikace deployment některé pokročilé funkce aplikačních serverů 40
Perzistence aplikace Princip: aplikace v aplikačním ačním serveru běží trvale, JSP a generované HTML je jen grafické rozhraní aplikace. Servlety zavedené do paměti běží trvale a obsluhují požadavky. Oproti PHP je nejpodstatnn ejpodstatnější novinka pro architekturu přístup ke statickým proměnným aplikace jak ze servletu tak pro JSP 41
Přístupnost v rámci kódu A... přístup ke statickým proměnným aplikace B... využití session (stejné jako v PHP - session je na serveru, např. podle parametu v hlavičče URL poznáme session pro konkrétního klienta) C... Servlet do JSP přes objekt response předá nějaký jiný objekt s daty J2EE aplikace sessions B B A JSP C static A SERVLET 42
Různé základní architektury nad J2EE Pomocí servletů a JSP je možné vytvořit několik různých modelů aplikace. Představili jsme si tři nejzásadnější, dva z nich jsou pojmenované jako Model 1 a Model 2. Tedy shrnutí: Před příchodem JSP: Servlet, který generuje HTML kód - skládá HTML jako textový výstup Zastaralé, stále však na něm existují produkční aplikace Model 1: JSP, ze kterého jsou volána EJB nebo přímo kód pro přístup do databáze Tok obrazovek je zajištěn přímo voláním JSP. V principu velmi podobný model, jako PHP nebo ASP Zastaralý, opouští se 43
Různé základní architektury nad J2EE Poznámka k předchozímu: EJB = Enterprise Java Beans = objekty v Javě,, které é zajišťují přístup k datům. Odstiňují programátory od komunikace přímo s databází. Model 2: Kombinace Servletu a JSP. Servlet zajišťuje perzistentní kód. Tok obrazovek je určován v servletu.. Architektura se nazývá MVC Model, View, Controller Model... vlastní aplikační logika, volání zajišťuje servlet View... samotná JSP na která přesměrovává Controller (sled obrazovek ovek který ý do prohlížeče produkuje aplikace) Controller... logika toku stránek, zajišťuje servlet Podstatnou výhodou je možnost načtení dat z databáze do paměti aplikačního serveru každá JSP stránka nemusí pokaždé přistupovat k databázi 44
Model 2 - MVC 45
Obsah úvod princip aplikačního serveru stručný přehled aplikačních serverů úvod do platformy J2EE Java Servlet JSP sestavení jednoduché aplikace deployment některé pokročilé funkce aplikačních serverů 46
Deployment na aplikační server Výsledná aplikace kterou vytvoří vývojáři je zabalená v speciálním souboru. Formát komprimace je ZIP, stejně jako tomu je u Javy obecně. Soubor obsahuje tzv. deployment descriptor. Ten obsahuje konfiguraci aplikace pro aplikační server. Pomocí tohoto archivu se aplikace nainstaluje v aplikačním serveru. Tomuto procesu se říká deployment. Standardní J2EE webová aplikace, používající Servet a JSP je typicky v souboru WAR Rozsáhlejší aplikace jsou typicky v souboru EAR 47
Root META-INF Web Module.war Application Client Module.jar Resource Adapter Module.rar EJB Module.jar application.xml sun-application.xml Standardní deskriptor Proprietární deskriptor pro daný server 48
Root WEB-INF Standardní deskriptor JSP stránky statické (X)HTML stránky aplety, web.xml sun-web.xml *.tld lib knihovny, většinou.jar classes.class soubory tags.tag soubory 49
WAR soubor WAR - Web Application Archive Typické pro aplikační server Tomcat. WAR obsahuje: servlety JSP JAR soubory - knihovny aplikace front-end aplikace - HTML, obrázky, CSS atd. WAR deployment descriptor = web.xml web.xml obsahuje mapování requestů na servlery. Dále obsahuje i defaultní dokumenty, typ autentifikace,... 50
EAR soubor EAR - Enterprise Application Archive Typické pro aplikační server WebSphere EAR obsahuje: WAR soubory JAR archiv s EJB moduly JAR soubory - knihovny aplikace EAR deployment descriptor (pro WebSphere application.xml) 51
Obsah úvod princip aplikačního serveru stručný přehled aplikačních serverů úvod do platformy J2EE Java Servlet JSP sestavení jednoduché aplikace deployment některé pokročilé funkce aplikačních serverů 52
Scaling Rozmístění aplikace na několik fyzických ch serverů (strojů) nebo procesorů. V terminologii WebSphere se skupina strojů na kterých je jedna aplikace nazývá cluster (svazek). Horizontal scaling distribuce na 2 fyzické stroje vyšší výkon zajištění proti havárii stroje Vertical scaling distribuce na víc procesorů v rámci jednoho stroje vyšší výkon 53
Další zdroje informací Detailní popis J2EE na stránkách Sun Microsystems http://java.sun.com/j2ee/ Developing Enterprise Applications Using the J2EE Platform http://java.sun.com/developer/onlinetraining/j2ee/intro2/j2e e.html Hall, M.: Core Servlets and JavaServer Pages, A Sun Microsystems Press/Prentice Hall PTR Book, 2002 54
Děkuji za pozornost buresm3@fel.cvut.cz xklima@fel.cvut.cz 55