Tvorba informačních systémů Michal Krátký, Miroslav Beneš Katedra informatiky VŠB Technická univerzita Ostrava Tvorba informačních systémů, 2007/2008 c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 1/39
Obsah 4. Aplikační rámec Struts, Model Struts, Model-View-Controller, Konfigurace webové aplikace, Ukázková webová aplikace. c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 2/39
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émů. Komponenty aplikačního rámce jsou opakovaně použitelné. c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 3/39
Aplikační rámce a Java Struts 1.x a 2.x http://jakarta.apache.org/struts/ Java Server Faces http://java.sun.com/j2ee/javaserverfaces/ Barracuda http://barracuda.enhydra.org/ Cocoon http://xml.apache.org/cocoon/ Expresso http://www.jcorporate.com/ Velocity http://velocity.apache.org/ c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 4/39
Aplikační rámec Struts Návrhový vzor MVC (Model-View-Controller). Architektura JSP Model 2. Asi 250 tříd a rozhraní v 8 hlavních balících. http://jakarta.apache.org/struts/ Možnost vývoje rozsáhlých informačních systémů? c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 5/39
Architektura JSP Model 1 c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 6/39
Architektura JSP Model 2 c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 7/39
Architektura JSP Model 2 Klient zasílá požadavek řídícímu servletu, žádné odkazy na JSP. Po zpracování požadavku je řízení přesměrováno na JSP. Možnost centralizace některých činností: autentizace, sledování činností (logging), podpora národních verzí (i18n). c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 8/39
Návrhový vzor MVC 1/2 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žadavku. Proti obecnému návrhovému vzoru komplikovanější šíření událostí. c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 9/39
Návrhový vzor MVC 2/3 c Jouni Lappalainen, Mikko Rajanen c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 10/39
Návrhový vzor MVC 3/3 c Jouni Lappalainen, Mikko Rajanen c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 11/39
Prvky webové aplikace, J2EE Servlety, Stránky JSP, Standardní knihovny tříd, Dokumenty HTML, Multimediální soubory (obrázky, zvuk, video,...), Klientské aplety, styly a skripty, Textové dokumenty,... c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 12/39
Kontext aplikace kořenový adresář např. 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/. c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 13/39
Konfigurace webové aplikace soubor WEB-INF/web.xml platný pro J2EE, mapování řídícího servletu (ActionServlet), parametry řídícího servletu, knihovny značek, ošetření chyb. c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 14/39
Konfigurace webové aplikace soubor WEB-INF/struts-config.xml platný pro Struts, 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). c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 15/39
MVC - Model 4. Aplikační rámec Struts Reprezentace objektů z domény aplikace - sada Java objektů. Podpora modelu není součástí Struts. Realizace konceptuálního a návrhového modelu: třídní a interaktivní diagramy, stavové diagramy,... Implementace: JavaBeans, EJB, CORBA,... c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 16/39
JavaBean 4. Aplikační rámec Struts Znovupoužitelné softwarové komponenty založené na jazyce Java. Konvence pro JavaBean: definujeme pouze prázdný konstruktor, private přístup k atributům, metody pro přístup k atributům jsou vždy public, pro atribut property definujeme metody: public <propertytype> get<property>() public void Set<Property>(<propertyType> <variable>) Metody. Události. c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 17/39
MVC - View 1/3 4. Aplikační rámec Struts 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, např. validace vstupu programem v JavaScript. c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 18/39
MVC View 2/3 4. Aplikační rámec Struts Dynamické a statické stránky: Java Server Pages. HTML technologie: HTML, CSS, JavaScript, multimediální objekty. ActionForm bázová třída formulářů ve Struts. JavaBeans beans určené pro prezentaci. Lokalizační soubory. Uživatelské značky. c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 19/39
MVC View ActionForm 3/3 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. Implementace Rozšiřuje org.apache.struts.action.actionform, Konvence JavaBeans. c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 20/39
Struts, Controller 1/3 Obvykle Java servlet, úkoly: odchytává požadavky od uživatele, překládá požadavek na konkrétní operaci, vyvolává operaci nebo deleguje řízení, pomáhá při výběru prezentace, zasílá prezentaci klientovi. c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 21/39
Struts, Controller - komponenty 2/3 ActionServlet příjem všech požadavků, nastavení národního prostředí, zpracování parametrů požadavku FormBean, jediná instance pro celou aplikaci. c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 22/39
Struts, Controller - komponenty 3/3 Action vlastní akce rozšiřuje třídu org.apache.struts.action.action, je třeba implementovat metodu execute(), c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 23/39
Příklad, jednoduchá aplikace JakartaStrutsFramework 1.3.8. Vyjdeme z ukázkové aplikace struts-blank-1.3.8.war. Implementace komponenty Controller. Kompilace pomocí ant - nutnost přepsání proměnných: <project name="jcms" basedir="../"...> <path id="compile.classpath">... property name="servlet.jar"... property name="project.title"... property name="project.distname"... c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 24/39
Příklad, Controller 4. Aplikační rámec Struts index.jsp <%@ t a g l i b u r i = " / tags / s t r u t s l o g i c " p r e f i x = " l o g i c " %> < l o g i c : r e d i r e c t forward= " jcms " / > WEB-INF/struts-config.xml: <global forwards> <forward name= " jcms " path= " / jcms. j s p " / > < / global forwards> c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 25/39
Příklad, formulář jcms.jsp 1/2 <%@ page language= " java " contenttype= " t e x t / html ; charset= u t f 8" %> <%@ t a g l i b u r i = " / tags / s t r u t s html " p r e f i x = " html " %> <%@ t a g l i b u r i = " / tags / s t r u t s bean " p r e f i x = " bean " %> <%@ t a g l i b u r i = " / tags / s t r u t s l o g i c " p r e f i x = " l o g i c " %> < h t m l : h t m l > <head> < t i t l e >Example A p p l i c a t i o n, JCMS, TIS 2008< / t i t l e > < / head> <body bgcolor=" white " > <h1>jcms< / h1> < l o g i c : p r e s e n t name= " l o g i n " > Loged: < b e a n : w r i t e name= " l o g i n " p r o perty=" loged " / > < / l o g i c : p r e s e n t > c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 26/39
Příklad, formulář jcms.jsp 2/2 < html:form a c t i o n = " solve. do " > < t a b l e > < t r >< td>login:< / td> < td>< h t m l : t e x t name= " LoginForm " p r o p e r t y = " l o g i n " / >< / td> < / t r > < t r >< td>password:< / td> < td>< h t m l : t e x t name= " LoginForm " p r o p e r t y = " password " / >< / td> < / t r >< / t a b l e > < html:submit / > < / html:form> < / body>< / h t m l : h t m l > c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 27/39
Třída popisující formulář LoginForm.java 1/2 package jcms. form ; import org. apache. s t r u t s. a c t i o n. ActionForm ; public class LoginForm extends ActionForm { private S t r i n g l o g i n ; private S t r i n g password ; public LoginForm ( ) { } public void setlogin ( S t r i n g log ) { l o g i n = log ; } c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 28/39
Třída popisující formulář LoginForm.java 2/2 public S t r i n g getlogin ( ) { return l o g i n ; } public void setpassword ( S t r i n g passwd ) { password = passwd ; } } public S t r i n g getpassword ( ) { return password ; } c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 29/39
Třída popisující formulář - LoginForm soubor WEB-INF/struts-config.xml: <form beans> <form bean name= " LoginForm " type= " jcms. form. LoginForm " / > < / form beans> c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 30/39
Model Login.java 1/3 package jcms. common ; public class Login { private S t r i n g l o g i n ; private S t r i n g password ; private boolean loged ; public Login ( ) { } public void setlogin ( S t r i n g log ) { l o g i n = log ; } public S t r i n g getlogin ( ) { return l o g i n ; } c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 31/39
Model Login.java 2/3 public void setpassword ( S t r i n g passwd ) { password = passwd ; } public S t r i n g getpassword ( ) { return " " ; } c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 32/39
Model Login.java 3/3 public void setloged ( boolean l ) { loged = l ; } public boolean getloged ( ) { return loged ; } } public void dologin ( ) { mconnection. createstatement ( ) ;... } c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 33/39
Třída definující akci, LoginAction.java 1/2 package jcms. a c t i o n ; import javax. s e r v l e t. h t t p. HttpServletRequest ; import javax. s e r v l e t. h t t p. HttpServletResponse ; import javax. s e r v l e t. h t t p. HttpSession ; import org. apache. s t r u t s. a c t i o n. ; import jcms. form. ; import jcms. common. ; public class LoginAction extends Action { public ActionForward execute ( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response ) { c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 34/39
Třída definující akci, LoginAction.java 2/2 LoginForm loginform = ( LoginForm ) form ; S t r i n g loginvalue = loginform. getlogin ( ) ; S t r i n g passwordvalue = loginform. getpassword ( ) ; Login l o g i n = new Login ( ) ; l o g i n. setlogin ( loginvalue ) ; l o g i n. setpassword ( passwordvalue ) ; l o g i n. dologin ( ) ; } } request. s e t A t t r i b u t e ( " l o g i n ", l o g i n ) ; return mapping. findforward ( " jcms " ) ; c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 35/39
Přiřazení akce k formuláři soubor WEB-INF/struts-config.xml: <action mappings> < a c t i o n path= " / solve " type= " jcms. a c t i o n. LoginAction " name= " LoginForm " scope= " request " / > < / action mappings> c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 36/39
Vývoj webové aplikace Ve webovém kontaineru, např. Tomcat. Překládáme pomocí ant v adresáři obsahující soubor build.xml. V libovolném IDE, např. Netbeans. Výsledkem je war soubor, který může být vložen do webového kontaineru. c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 37/39
JakartaStruts 4. Aplikační rámec Struts c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 38/39
Reference 4. Aplikační rámec Struts http://jakarta.apache.org/struts/ Tutoriály http://www.learntechnology.net/ Komentovaný příklad http://www.root.cz/clanky/ struts-komentovany-priklad-zaklad-aplikace/ c 2006 2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 39/39