Obsah přednášky Aplikační rámce Jakarta Struts Framework Miroslav Beneš 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 Framework 2 Co je to aplikační rámec? Aplikační rámce a knihovny 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é Ext 1 Ext 2 Framework Ext 3 Aplikační rámec + rozšíření pro konkrétní aplikace Knihovna 2 Knihovna 1 Aplikace Aplikace + knihovny Jakarta Struts Framework 3 Jakarta Struts Framework 4 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 1
Aplikační rámce a Java Barracuda http://barracuda.enhydra.org Cocoon http://xml.apache.org/cocoon Expresso http://www.jcorporate.com Velocity http://jakarta.apache.org/velocity Java Server Faces http://java.sun.com/j2ee/javaserverfaces/ Jakarta Struts Framework 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 4.0 2000 Apache Software Foundation http://jakarta.apache.org/struts Jakarta Struts Framework 5 Jakarta Struts Framework 6 Architektura JSP Model 1 Architektura JSP Model 2 Zdroj: Struts Book Jakarta Struts Framework 7 Zdroj: Struts Book Jakarta Struts Framework 8 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 2
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 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 Framework 9 Jakarta Struts Framework 10 Návrhový vzor MVC 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 Framework 11 Jakarta Struts Framework 12 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 3
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) 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 Framework 13 Jakarta Struts Framework 14 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 Struktura webové aplikace kontext aplikace kořenový adresář http://www.cs.vsb.cz/katis 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 Framework 15 Jakarta Struts Framework 16 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 4
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 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 Framework 17 Jakarta Struts Framework 18 Komponenty - Controller ActionServlet příjem všech požadavků nastavení národního prostředí zpracování parametrů požadavku - Bean výběr vhodného modulu aplikace deleguje požadavek na RequestProcessor jediná instance pro celou aplikaci 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 Framework 19 Jakarta Struts Framework 20 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 5
Komponenty - Controller 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 Framework 21 Jakarta Struts Framework 22 Komponenty - View Java Server Pages HTML, CSS, JavaScript Multimediální objekty Actions JavaBeans části modelu použité pro prezentaci Lokalizační soubory (resource bundles) Uživatelské značky JSP Komponenty Action 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 chyba provede se akce řízení se vrátí zpět na formulář Jakarta Struts Framework 23 Jakarta Struts Framework 24 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 6
Komponenty Action Page 1 Web Browser Jsp 1 Jsp 2 Jsp 3 Implementace Rozšiřuje org.apache.struts.action.action Konvence JavaBeans Realizace návrhového vzoru Data Transfer Object (DTO) Lze generovat automaticky z konfigurace (Dynamic Actions Struts 1.1) Web Server Strutsconfig. xml Mappings Controller path action [form bean] [forwards] Jsp Engine Action1 Action2 Bean 1 Action3 request/session Bean Other 2 Bean 1 Action4 View Bean 1 Bean 2 Bean 3 Logic Jakarta Struts Framework 25 Db Server Data Web Server index.htm Web Browser Mappings Controller logging.jsp response sent to browser pure html Request: ShowLogging.do displays populates expands internationalized custom form values tags Jsp Engine messages Messages forwards logging.jsp Resources creates form bean in correct scope looks up <!-- Show logging --> <action path="/showlogging" type="beans.showloggingaction" name="logging"> <forward name="success path="/logging.jsp" /> </action> <form name="logging" > <logic:iterate id="category name="logging" property="categorylist"> <bean:write name="category" property="key"/> <bean:write name="category" property="desc"/>. </logic:iterate> </form> request/session Logging setcategorylist(list) perform(mapping, returns creates / reusesform, forward(success) request, response) Show Logging mainpulates data Action calls business logic rule to get logging info LoggingBean ServerBean View Logic Web Server logging.jsp browser adds form variables to request Web Browser form submit action= SaveLogging.do Mappings Controller looks up <!-- Save logging --> <action path="/savelogging" type="beans.saveloggingaction" name="logging"> <forward name="success path="/result.jsp" /> </action> results.jsp response sent to browser pure html Displays internationalized expands custom tags Jsp Engine messages from bean request/session Messages Logging forwards result.jsp Bean reuses auto populates form bean using correct bean getters/setters scope getcategorylist() returns calls creates perform(mapping, / reuses form, mapping.findforward("success") action instance request, response) Show Logging Action LoggingBean ServerBean <form name="logging" > <select name="category[0].value" > </form> becomes request parameter category[0].value added to form using Logging.getCategory(0).setValue(value) add result messages For each one that user has changed call business logic to change on server View Logic Db Server Data Db Server Data (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 7
Page 1 Web Browser Jsp 1 Action1 Jsp 2 Jsp 3 processes custom tags fill form elements Web Server from beans, display internationalized messages request/session incoming requests Jsp Engine Bean 1 Bean Other relevant page called 2 Bean if creates/reuses submit, auto any 1 populates associated form bean reads on start-up Controller from request params Strutsconfig. creates looks up path to determine action/ passes returns control appropriate to xml form bean relevant forward action to handle Mappings path action [form bean] [forwards] pure HTML sent to browser Action2 Action3 gets interacts data with to display lower (adds layers to -beans in request/session) or acts as adaptor between saves data from beans HTTP via and business layers below rules Bean 1 Bean 2 Data Bean 3 Action4 View Logic Data 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 <h1><bean:message key= app.title /></h1> Jakarta Struts Framework 30 Š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 Šablony knihovna Tiles <%@taglib uri="/web-inf/struts-html.tld" prefix="html"%> <%@taglib uri="/web-inf/struts-bean.tld" prefix="bean"%> <%@taglib uri="/web-inf/tiles.tld" prefix="tiles"%> <html:html> <head> <title><bean:message key="global.title"/></title> </head> <body topmargin="0" leftmargin="0" bgcolor="#ffffff"> <tiles:insert attribute="header" /> <tiles:insert attribute= menubar"/> <tiles:insert attribute="body-content"/> <tiles:insert attribute="copyright"/> </body> </html:html> Jakarta Struts Framework 31 Jakarta Struts Framework 32 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 8
Šablony knihovna Tiles <%@taglib uri="/web-inf/tiles.tld" prefix="tiles" %> <tiles:insert page="/layouts/beer4alldefaultlayout.jsp" flush="true"> <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" /> Další zdroje informací jakarta.apache.org/struts www.husted.com/struts www.interval.cz www.theserverside.com </tiles:insert> Jakarta Struts Framework 33 Jakarta Struts Framework 34 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 9