Aplikační rámce Jakarta Struts Framework Miroslav Beneš
Jakarta Struts Framework2 Obsah přednášky Aplikační rámce Jakarta Struts Framework Architektura JSP Model 1 a 2 Návrhový vzor MVC Webové aplikace a jejich konfigurace Komponenty Jakarta Struts Framework Lokalizace Šablony
Jakarta Struts Framework3 Co je to aplikační rámec? sada spolupracujících tříd a rozhraní určených pro řešení specifického problému třídy a komponenty představují abstrakce určitých pojmů aplikační rámec definuje, jak se tyto abstrakce podílejí na řešení problému komponenty aplikačního rámce jsou opakovaně použitelné
Jakarta Struts Framework4 Ext 2 Aplikační rámce a knihovny Ext 1 Ext 3 Framework Aplikace Knihovna 1 Knihovna 2 Aplikační rámec + rozšíření pro konkrétní aplikace aplikace Aplikace + knihovny
Jakarta Struts Framework5 Aplikační rámce a Java Barracuda Cocoon Expresso Velocity Java Server Faces
Jakarta Struts Framework6 Výchozí principy návrhový vzor MVC (Model-View-Controller) architektura JSP Model 2 asi 250 tříd a rozhraní v 8 hlavních balících Autor Craig R. McClanahan člen expertních skupin pro servlety a JSP spoluautor implementace Tomcat → Apache Software Foundation
Jakarta Struts Framework7 Architektura JSP Model 1 Zdroj: Struts Book
Jakarta Struts Framework8 Architektura JSP Model 2 Zdroj: Struts Book
Jakarta Struts Framework9 Architektura JSP Model 2 Klient zasílá požadavek řídicímu servletu žádné odkazy na JSP Možnost centralizace některých činností autentizace sledování činnosti (logging) podpora národních verzí (i18n) Po zpracování požadavku je řízení přesměrováno na JSP
Jakarta Struts Framework10 Návrhový vzor MVC Oddělení aplikační logiky, prezentace a zpracování požadavku Komponenty model – reprezentace stavu zájmové domény aplikace view – prezentace modelu controller– řízení toku a stavu požadavků Proti obecnému návrhovému vzoru komplikovanější šíření událostí nutnost ‘post back’ operace vyvolané uživatelem
Jakarta Struts Framework11 Návrhový vzor MVC
Jakarta Struts Framework12 MVC Model Reprezentace objektů z domény aplikace sada Java objektů SQL dotaz ORM (Object-Relational Mapping) Enterprise Java Beans Session Beans (remote) → value objects Entity Beans (local)
Jakarta Struts Framework13 MVC View Prezentace modelu statický obsah – HTML statický a dynamický obsah – JSP Realizace převážně na straně serveru může být i na straně klienta (JavaScript)
Jakarta Struts Framework14 MVC Controller Obvykle Java servlet Úkoly: odchytává požadavky od uživatele překládá požadavek na konkrétní operaci vyvolá operaci nebo deleguje řízení pomáhá při výběru prezentace zasílá prezentaci klientovi návrhový vzor Front Controller
Jakarta Struts Framework15 Prvky webové aplikace Servlety Stránky JSP Standardní knihovny tříd Dokumenty HTML Multimediální soubory (obrázky, zvuk, video,...) Klientské aplety, styly a skripty Textové dokumenty Metainformace
Jakarta Struts Framework16 Struktura webové aplikace kontext aplikace – kořenový adresář privátní adresáře (nedostupné přes web).../WEB-INF- konfigurace.../WEB-INF/classes- kód aplikace.../WEB-INF/lib- pomocné knihovny doporučení: umístit JSP pod.../WEB-INF/
Jakarta Struts Framework17 Konfigurace webové aplikace.../WEB-INF/web.xml mapování řídicího servletu (ActionServlet) parametry řídicího servletu aplikační moduly (sub-aplikace) knihovny značek welcome-file-list ošetření chyb
Jakarta Struts Framework18 Konfigurace webové aplikace.../WEB-INF/struts-config.xml datové zdroje formuláře ošetření výjimek směrování mapování akcí lokalizace zpráv rozšiřující moduly (plug-in)
Jakarta Struts Framework19 Komponenty - Controller ActionServlet příjem všech požadavků nastavení národního prostředí zpracování parametrů požadavku - FormBean výběr vhodného modulu aplikace deleguje požadavek na RequestProcessor jediná instance pro celou aplikaci
Jakarta Struts Framework20 Komponenty - Controller RequestProcessor jedna instanci pro každý modul aplikace volá vhodné instance třídy Action po dokončení akce předá řízení nějaké prezentační komponentě (obvykle JSP) Action → vlastní akce rozšiřuje org.apache.struts.action.Action je třeba implementovat metodu execute() reprezentace návrhového vzoru Command vrací informaci o následujícím view
Jakarta Struts Framework21 Komponenty - Controller
Jakarta Struts Framework22 Komponenty - Model Podpora modelu není součástí Struts Typy modelů: konceptuální model – pojmy, vztahy, atributy návrhový model – třídní a interakční diagramy, stavové diagramy,... Implementace: JavaBeans, EJB, Corba, JDO,...
Jakarta Struts Framework23 Komponenty - View Java Server Pages HTML, CSS, JavaScript Multimediální objekty ActionForms JavaBeans části modelu použité pro prezentaci Lokalizační soubory (resource bundles) Uživatelské značky JSP
Jakarta Struts Framework24 Komponenty ActionForm Použití Zapouzdření parametrů z HTTP požadavku klienta (GET, POST) Dočasné uchování hodnot Význam Oddělení prezentační vrstvy od aplikace Možnost validace vstupu od uživatele ok – provede se akce chyba– řízení se vrátí zpět na formulář
Jakarta Struts Framework25 Komponenty ActionForm Implementace Rozšiřuje org.apache.struts.action.ActionForm Konvence JavaBeans Realizace návrhového vzoru Data Transfer Object (DTO) Lze generovat automaticky z konfigurace (Dynamic ActionForms – Struts 1.1)
Page 1 Controller Action2.java Struts- config. xml Mappings Business Logic Layer Data Layer View Layer Business Bean 1 Jsp Engine Jsp 1 Action3.java Action4.java Action1.java Business Bean 2 Business Bean 3 Jsp 2Jsp 3 Form Bean 1 Form Bean 2 Other Bean 1 request/session Web Browser Db Server path action [form bean] [forwards] Jsp 2 Web Server Jsp 2
Web Server creates / reuses index.htm Controller Show Logging Action.java Mappings Business Logic Layer Data Layer View Layer Jsp Engine LoggingBean.java logging.jsp Logging Form request/session Web Browser Db Server Request: ShowLogging.do creates form bean in correct scope perform(mapping, form, request, response) calls business logic rule to get logging info returns forward(success) mainpulates data setCategoryList(list) forwards – logging.jsp expands custom tags response sent to browser – pure html looks up <action path="/ShowLogging" type="beans.ShowLoggingAction" name="LoggingForm"> <forward name="success“ path="/logging.jsp" /> ServerBean.java populates form values …. logging.jsp Messages Resources displays internationalized messages
Web Server creates / reuses action instance logging.jsp Controller Show Logging Action.java Mappings Business Logic Layer Data Layer View Layer Jsp Engine LoggingBean.java results.jsp Logging Form request/session Web Browser Db Server form submit – action=‘SaveLogging.do’ reuses form bean in correct scope calls perform(mapping, form, request, response) getCategoryList() returns mapping.findForward("success") forwards – result.jsp expands custom tags Displays internationalized messages from bean response sent to browser – pure html looks up <action path="/SaveLogging" type="beans.SaveLoggingAction" name="LoggingForm"> <forward name="success“ path="/result.jsp" /> ServerBean.java Messages Bean add result messages auto populates using bean getters/setters becomes request parameter category[0].value added to form using LoggingForm.getCategory(0).setValue(value) For each one that user has changed… call business logic to change on server browser adds form variables to request results.jsp
if submit, auto populates form bean from request params Page 1 Controller Action2.java Struts- config. xml Mappings Business Logic Layer Data Layer View Layer Business Bean 1 Jsp Engine Jsp 1 Action3.java Action4.java Action1.java Business Bean 2 Business Bean 3 Jsp 2Jsp 3 Form Bean 1 Form Bean 2 Other Bean 1 request/session Web Browser Business Data reads on start-up creates incoming requests creates/reuses any associated form bean path action [form bean] [forwards] passes control to relevant action to handle interacts with lower layers - acts as adaptor between HTTP and layers below gets data to display (adds to beans in request/session)…or saves data from beans via business rules looks up path to determine action/ form bean returns appropriate forward relevant page called processes custom tags – fill form elements from beans, display internationalized messages pure HTML sent to browser Jsp 2 Action2.java Form Bean 2 Web Server Jsp 2
Jakarta Struts Framework30 Lokalizační soubory Lokalizace zobrazovaných textů chybové zprávy texty v uživatelském rozhraní Automatický výběr podle nastavení klienta application.properties application_en_US.properties application_de_DE.properties JSP značky
Jakarta Struts Framework31 Šablony - knihovna Tiles Sada značek JSP Oddělení formátu stránky od obsahu Možnost změny formátu nastavení vzhledu uživatelem Opakovaně použitelné definice šablona – parametrizovaná stránka instance šablony – konkrétní obsah
Jakarta Struts Framework32 Šablony – knihovna Tiles
Jakarta Struts Framework33 Šablony – knihovna Tiles <tiles:put name="header” value="/common/header.jsp" /> <tiles:put name=“menubar” value="/common/menu.jsp" /> <tiles:put name="body-content" value="/main.jsp" /> <tiles:put name="copyright” value="/common/copyright.jsp" />
Jakarta Struts Framework34 Další zdroje informací jakarta.apache.org/struts