Aplikační rámce Jakarta Struts Framework Miroslav Beneš
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 Framework 2
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 Framework 3
Aplikační rámce a knihovny Ext 1 Ext 2 Framework Ext 3 Knihovna 2 Knihovna 1 Aplikace Aplikační rámec + rozšíření pro konkrétní aplikace Aplikace + knihovny Jakarta Struts Framework 4
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 5
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 6
Architektura JSP Model 1 Zdroj: Struts Book Jakarta Struts Framework 7
Architektura JSP Model 2 Zdroj: Struts Book Jakarta Struts Framework 8
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 Framework 9
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 10
Návrhový vzor MVC Jakarta Struts Framework 11
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 12
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 Framework 13
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 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 Jakarta Struts Framework 15
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 16
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 Framework 17
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 18
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 Framework 19
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 20
Komponenty - Controller Jakarta Struts Framework 21
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 22
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 Framework 23
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 chyba provede se akce řízení se vrátí zpět na formulář Jakarta Struts Framework 24
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) Jakarta Struts Framework 25
Page 1 Jsp 1 Jsp 2 Jsp 3 Web Browser Web Server Jsp Engine Form Bean 1 request/session Form Bean 2 Other Bean 1 View Layer Controller Strutsconfig. xml Mappings path action [form bean] [forwards] Action1.java Action2.java Action3.java Action4.java Business Bean 1 Business Bean 2 Business Bean 3 Business Logic Layer Db Server Data Layer
Web Server index.htm Web Browser Request: ShowLogging.do Mappings Controller looks up <!-- Show logging --> <action path="/showlogging" type="beans.showloggingaction" name="loggingform"> <forward name="success path="/logging.jsp" /> </action> logging.jsp response sent to browser pure html Jsp Engine <form name="loggingform" > <logic:iterate id="category name="loggingform" property="categorylist"> <bean:write name="category" property="key"/> <bean:write name="category" property="desc"/>. </logic:iterate> </form> displays populates expands internationalized custom form values tags messages forwards logging.jsp creates form bean in correct scope perform(mapping, returns creates / reusesform, forward(success) request, response) Messages Resources Show Logging mainpulates data Action.java calls business logic rule to get logging info LoggingBean.java ServerBean.java request/session Logging Form setcategorylist(list) View Layer Business Logic Layer Db Server Data Layer
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="loggingform"> <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 forwards result.jsp 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.java LoggingBean.java ServerBean.java <form name="loggingform" > <select name="category[0].value" > </form> becomes request parameter category[0].value added to form using LoggingForm.getCategory(0).setValue(value) request/session Logging Form Messages Bean add result messages For each one that user has changed call business logic to change on server View Layer Business Logic Layer Db Server Data Layer
Page 1 Jsp 1 Jsp 2 Jsp 3 Web Browser pure HTML sent to browser Web Server incoming requests reads on start-up Strutsconfig. xml relevant page called Controller creates looks up path to determine action/ form bean Mappings Jsp Engine processes custom tags fill form elements from beans, display internationalized messages request/session if creates/reuses submit, auto any populates associated form bean from request params returns passes control appropriate to forward relevant action to handle Form Bean 1 Form Bean 2 Other Bean 1 View Layer path action [form bean] [forwards] Action1.java Action2.java Action3.java 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 Business Business Bean 1 Bean 2 Business Bean 3 Action4.java Business Logic Layer Business Data Data Layer
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 Jakarta Struts Framework 31
Š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 32
Š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" /> </tiles:insert> Jakarta Struts Framework 33
Další zdroje informací jakarta.apache.org/struts www.husted.com/struts www.interval.cz www.theserverside.com Jakarta Struts Framework 34