Presentation is loading. Please wait.

Presentation is loading. Please wait.

Java veebitehnoloogiad

Similar presentations


Presentation on theme: "Java veebitehnoloogiad"— Presentation transcript:

1 Java veebitehnoloogiad
Jaak Simm

2 Kava Veebirakenduste arendamine (põhiideed) Tehnoloogiad: Kokkuvõte
Tavamudel: servletid ja JSP Struts Templatetehnoloogiad (Velocity) XML ja XSLT Cocoon Kokkuvõte

3 Veebirakenduste arendamine
Veebirakenduse eripärad tavalisest: püsiva seisundi puudumine request-response HTML sisaldab nii andmeid kui nende esitamisviisi Hea, kui: Eraldatakse disain, sisu ja loogika Ka äri- ja esitlusloogika Mugav ja läbipaistev andmesisestuse ja veaparandus mudel Kuidas seda teha?

4 Lihtsad servletid ja JSP
Lihtne servlet JSP import javax.servlet.http.*; import javax.servlet.ServletException; ... public class Lihtne extends HttpServlet { public void doPost(...) { /// sisendite kontrollimine /// loogika: bean/andmebaas /// väljund: PrintWriter out = response.getWriter(); out.println(“<html>”); } <html> page language=“java” imports=“veebirakendus.* %> <H1>Tere</H1> <P>Täna on</P> <jsp:useBean id=“clock” class=“calendar.jspCalendar/> <ul><li>Päev: <%= clock.getDayOfMonth() %> <li>Kuu: <%= clock.getYear() %> </ul> <% if (Calendar.getInstance(). get(Calendar.AM_PM)==Calendar.AM) { %> Tere hommikust! <% } else } %> Tere õhtust! <% } %> include file = “footer.html” %> </html> Kõik küsimused jäetakse arendaja lahendada.

5 Struts (1) Veebirakenduste tehnoloogia, põhineb Model-View-Control'l (MVC): Model’i kiht sisaldab äriloogikat, klassistruktuure ja andmebaasidega suhtlust View’i kiht määrab, kuidas tulemust esitada. JSP+taglibraries Template’d (Velocity, Tiles) XML+XSL (StrutsCX) Control’i kiht määrab mida teha (Struts ise). Tegevuse juhtimine käib Action klasside kaudu. Sisendi töötlemiseks kasutatakse ActionForm klasse. action’ite ülesehitus ja seosed (mapping’ud) on defineeritud struts-config.xml’s.

6 Struts (2) 1) millist action’t teha
2) struts-config.xml’s seotakse actioni vastava Action ja ActionForm klassiga.

7 Struts (3): näiteke struts-config.xml ForwardAction.java welcome.jsp
Tuleb päring URL-le “welcome.do” 1. action “welcome” 2. kutsutakse Action klass ForwardAction.perform() 3. welcome.jsp Kutsutav Action klass struts-config.xml <forward name="welcome“ path="/welcome.do"/> <forward name=“logon“ path="/logon.do"/> ... <action path="/welcome" type="veebirakendus.ForwardAction"> <forward name=“destination“ path="/veebirakendus/welcome.jsp"/> </action> <action path=“/logon” ...>...</action> view ForwardAction.java welcome.jsp public final class ForwardAction extends Action { ... public ActionForward perform (...) { return mapping.findForward("destination"); } <html><body> Welcome page <html:link forward="logon"> Sign in </html:link> </body></html>

8 Struts (4): näiteke Formi kuvamine:
actioni jaoks, mis võtab sisendit, määratakse ActionForm bean. ActionFormid on määratud <form-bean>’s Formi nimi Bean (ActionForm) struts-config.xml LogonForm.java ... <form-bean name="logonForm" type="veebirakendus.LogonForm"/> <action path="/logon" type="veebirakendus.ForwardAction" scope="request" validate="false"> <forward name=“destination“ path="/veebirakendus/logon.jsp"/> </action> public final class LogonForm extends ActionForm { private String password = null; private String username = null; ...// get/set meetodid public void reset (...) { setPassword(null); setUsername(null); } public ActionErrors validate (...) { // business logic... if (ok) return null; else return errors;

9 Struts (5): näiteke logon.jsp <%@ page language="java" %>
taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <html> <head> ... </head> <body> <html:errors/> <p>Logige palun sisse!</p> <html:form action="/logonSubmit" focus="username"> Username: <html:text property="username"/><br/> Password: <html:password property="password"/><br/> <html:submit property="submit" value="Submit"/> <html:reset/> </body> </html>

10 Struts (6): näiteke Sisendit ootav action struts-config.xml ... <action path="/logonSubmit" type="veebirakendus.LogonAction" name="logonForm" scope="request" validate=“true“ input=“/veebirakendus/logon.jsp”> <forward name=“success" path="/veebirakendus/logged-in.jsp"/> </action> Kuna validate=“true”, siis kutsutakse välja ActionFormi validate() meetod: Kui vigu pole, siis lastakse käima LogonAction.perform() Kui validate() annab vea, siis minnakse tagasi input atribuudiga määratud aadressi. Antud juhul “/veebirakendus/logon.jsp”, milles saab <html:errors> tagiga vigu kuvada.

11 Template'd: Velocity (1)
Lihtne keel dünaamilise sisuga HTML-i esitamiseks. Võimaldab eraldada disaini ja sisu muust. Järgmised võimalused: Kuvada objekte, nende meetodeid/välju Kontrollelemendid (if-else ja loop-id) Lihtsamad operatsioonid: aritmeetika, oma muutujad Makrod

12 Template'd: Velocity (2)
Velocity (templ.vm): Servlet (MinuServlet): <HTML> <BODY> Tere $klient.Name! <table> #foreach( $pet in $petsInStore ) #if ( $customer.hasNotPurchased($pet) ) <tr> <td> $promos.getPromo( $pet ) </td> </tr> #end </table> public class MinuServlet extends VelocityServlet { ... // kleint on EJB, millel on getName(); Vector petsInStore = getPetsInStore(); try { template = getTemplate("templ.vm"); } catch( ResourceNotFoundException rnfe ) { // template'i ei leitud catch( ParseErrorException pee ) { // süntaksi viga // template'i parsemine ebaõnnestus catch( Exception e ) {} return template; Tulemuseks HTML Lihtne luua dünaamilist veebi Kuid sisu ja disain on omavahel segatud

13 XML ja XSL (1) Idee: salvestada XML formaati puhtad andmed, ilma esitlusviisi sisaldamata. Esitluse määrab ära XSL-i fail, mis kirjeldab, kuidas XML transformeerida HTML-iks (soovikorral mõneks muuks tüübiks) Sisu ja disain on üksteisest lahutatud ja seega saab neid sõltumatult muuta. Laialdane rakenduspind.

14 XML ja XSL (2) Praktikas: Näide:
Kasutajale saadetav sisu genereeritakse tavalisel meetodil (nt. Servlet, JSP, Struts jne). Disain lisatakse viimases faasis. On ka võimalus sisu ja disain kliendile eraldi saata Näide: sisu.xml <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="disain.xsl"?> <leht> <aknake> <pealkiri>Teade</pealkiri> <aknalooja Simm</aknalooja> <kuupaev> </kuupaev> <sisu>See siin on väike teade.</sisu> </aknake> </leht>

15 XML ja XSL (3) disain.xsl tulemus.html ... <xsl:template match="aknake"> <div style="border-width: …;"> <h3><xsl:value-of select="pealkiri"/> </h3> <i>Kuupäev: <xsl:value-of select="kuupäev"/> </i><br/> <i>Akna looja: </i> <xsl:element name="a"> <xsl:attribute name="href"> <xsl:text>mailto:</xsl:text> <xsl:value-of </xsl:attribute> <xsl:value-of select="aknalooja"/> </xsl:element> <br/> <p style="color: #black;"> <xsl:value-of select="sisu"/></p> </div> </xsl:template> ... <div style="border-width: 1px; border-style:solid; padding: 5px;"> <h3>Teade</h3> <i>Kuupäev: </i> <br> <i>Akna looja: </i> <a Simm</a> <p style="color: #black;"> See siin on väike teade.</p> </div> Eriti hea juhtudel, kus sisu on eraldi disainist või juba XML kujul. XML-XSL tehnoloogial on õppimiskõver.

16 Cocoon (1) XML tehnoloogiatel põhinev veebiarenduse raamistik.
Loogika eraldatakse sisust läbi XSP failide, mis sisaldavad koodi. Suhtluse juhtimiseks on Cocoon-s Sitemap ja Action. Idee poolest MVC lähenemine. Sisaldab ka tag-librareid ja formide mugavat töötlemist. Disain Juhtimine Loogika Sisu

17 Cocoon (2) page-xsp.xsl (loogika) page.xml (sisu) disain.xsl (disain)
<xsl:stylesheet ...> <template match=“page”> ... <xsp:logic> ...functions... </xsp:logic> </template> <template match=“item”> <xsp:expr> ...function calls... </xsp:expr> </page> page.xml (sisu) <page> ... <item/> </page> <xsp> disain.xsl (disain) <xml> <xsl> <html> page.html (tulemus)

18 Kokkuvõte Java veebitehnoloogiate eelised:
Arenduse protsessi kiirus ja mugavus Lihtne luua selge struktuuriga rakendusi Pole vaja jalgrattast uuesti leiutada Kuid tehnoloogaid on kallid: Õppimiskõver Ressursinõudlikkus


Download ppt "Java veebitehnoloogiad"

Similar presentations


Ads by Google