1 / 18

Java veebitehnoloogiad

Java veebitehnoloogiad. Jaak Simm. Kava. Veebirakenduste arendamine (põhiideed) Tehnoloogiad: Tavamudel: servletid ja JSP Struts Templatetehnoloogiad (Velocity) XML ja XSLT Cocoon Kokkuvõte. Hea, kui: Eraldatakse disain, sisu ja loogika Ka äri- ja esitlusloogika

pepin
Télécharger la présentation

Java veebitehnoloogiad

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java veebitehnoloogiad Jaak Simm

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

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

  4. 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> Lihtsad servletid ja JSP • Lihtne servlet • 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 ActionjaActionForm klassiga.

  7. <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> ... 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> Struts (3): näiteke 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 view ForwardAction.java welcome.jsp

  8. ... <form-bean name="logonForm" type="veebirakendus.LogonForm"/> ... <action path="/logon" type="veebirakendus.ForwardAction" name="logonForm" 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; } } 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

  9. <%@ 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> Struts (5): näiteke logon.jsp

  10. ... <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> ... Struts (6): näiteke Sisendit ootav action struts-config.xml • 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 jaloop-id) • Lihtsamad operatsioonid: aritmeetika, oma muutujad • Makrod

  12. 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; } <HTML> <BODY> Tere $klient.Name! <table> #foreach( $pet in $petsInStore ) #if ( $customer.hasNotPurchased($pet) ) <tr> <td> $promos.getPromo( $pet ) </td> </tr> #end #end </table> Template'd: Velocity (2) Velocity (templ.vm): • Tulemuseks HTML • Lihtne luua dünaamilist veebi • Kuid sisu ja disain on omavahel segatud Servlet (MinuServlet):

  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 version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="disain.xsl"?> <leht> <aknake> <pealkiri>Teade</pealkiri> <aknalooja epost="jaaksimm@ut.ee">Jaak Simm</aknalooja> <kuupaev>02.04.2003</kuupaev> <sisu>See siin on väike teade.</sisu> </aknake> </leht> XML ja XSL (2) • Praktikas: • 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

  15. ... <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 select="aknalooja/@epost"/> </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&auml;ev: 02.04.2003</i> <br> <i>Akna looja: </i> <a href="mailto:jaaksimm@ut.ee">Jaak Simm</a> <br> <p style="color: #black;"> See siin on v&auml;ike teade.</p> </div> ... XML ja XSL (3) tulemus.html disain.xsl • Eriti hea juhtudel, kus sisu on eraldi disainist või juba XML kujul. • XML-XSL tehnoloogial on õppimiskõver.

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

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

More Related