html5-img
1 / 67

16 - JSP

16 - JSP. Developement platform. You need a J2ee compatible server There is more possibilities. Here we look at: Tomcat & Axis (Apache), only webservice Sun Application Server with NetBeans But it could have been: Websphere with Eclipse (IBM) JBoss ("gnu") (with NetBeans, Eclipse,...)

senta
Télécharger la présentation

16 - JSP

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. 16 - JSP

  2. Developement platform • You need a J2ee compatible serverThere is more possibilities. • Here we look at: • Tomcat & Axis (Apache), only webservice • Sun Application Server with NetBeans • But it could have been: • Websphere with Eclipse (IBM) • JBoss ("gnu") (with NetBeans, Eclipse,...) • JBulider • Apache Geronimo • mv.

  3. J2EE, briefly

  4. J2EE covers from frontend to backend Enterprise Information Systems (EIS): Relational Database, Legacy Applications, ERP Systems

  5. Some essential parts of J2EE • Servlet - Class that communicates by http (generates html, xml,...) • No directly counterparts in .Net, but is in the area of remoting • JSP - Java Server Script. • Similar to ASP.NET (not ASP classic!) • When it is requested the 1st time, it is precompiled to a servlet and thereafter a class file. • That is also happens in ASP.NET • JavaBeans - Components, that lives in the J2EE container • Entity beans are non volatile objects, that refers to entities in e.g. database • Session beans are volatile objects that takes care of communication with the client

  6. N-tier applications

  7. Examples of n-tier • 4-tier J2EE applications • HTML client, JSP/Servlets, EJB, JDBC/Connector • 3-tier J2EE applications • HTML client, JSP/Servlets, JDBC • 3-tier J2EE applications • EJB standalone applications, EJB, JDBC/Connector • B2B Enterprise applications • J2EE platform to J2EE platform through the exchange of JMS or XML-based messages

  8. WebService model in J2EE

  9. J2EE (+J2SE+J2ME+..) and .NET (comparision) • Both J2EE and .Net supports object based n-tier applications • Both runs on several platforms (.net by Mono) • But: • More providers of j2ee (primary Sun and IBM, but also Oracle, Nowell...) • Java is (unofficial) build on standards. But is not under control of official authority. • C# is defined in a ANSI standard, but in praxis under MS control • J2EE contains a component container, that takes care of security, persistency i.e. • VisualStudio is a better IDE (imo) • .....

  10. JSP

  11. Serverscript • Er et script sprog som køres på serveren til at generere html-kode. • ASP, JSP og PHP er eksempler på scriptssprog • Der skal være en fortolker til det givne sprog. • Serveren finder ud af hvilken fortolker, der skal anvendes vha. mime typer

  12. Hvad er JSP? • Modspil til ASP og PHP • Standard web-adgang til J2EE (web-server) • Bygger på Servlets • men er lettere at skrive, specielt ved output tunge servlets • og lettere at lave tool support

  13. Eksempel <%@page import="java.util.*"%> <%! Calendar cal = Calendar.getInstance(); %> <% cal.setTime(new Date()); %> <HTML> <UL> <LI>Week=<%= cal.get(java.util.Calendar.WEEK_OF_YEAR)%> <LI>Year=<%=cal.get(java.util.Calendar.YEAR)%> </UL> </HTML>

  14. Elementer • Statisk tekst (HTML eller XML) • Direktiver • Scripting elementer • Implicitte variable • Standard tags • Brugerdefinerede tags

  15. Direktiver • <%@direktiv attribut=værdi ….%> • <%@page imports=”java.util.*” %> • Page • language • extends • imports • .. • Include • taglib

  16. Scripting • Declarations • <%! Int i=43;%> • Scriptlets • <% cal.setTime(new Date()) %> • Expressions • <%= cal.get(Calendar.WEEK_OF_YEAR)%>

  17. Forskel på <%! og <% • <!% ... %> udføres første gang siden loades (i en session).Bruges f.eks. til erklæringer og initialisering af variable:<%! int count=0; %> • <% ... %> udføres hver gang siden (re)loades. Bruges f.eks til generering af html:<% out.println(”<p>Antal er ”+count+”</p>”); %>

  18. Implicite objekter • request • response • session • application

  19. Expressions • En expression (udtryk) har formen:<%= expression %> • Typisk vil en expression tilføje en streng til html-koden. • F.eks:<p>Nu indsættes en streng: <%=”Strengelej” %></p>

  20. Et andet eksempel <%@ page import="java.util.Date, java.text.DateFormat, java.io.File" %> <html> <head> <title>Express Yourself</title> <style type="text/css"> <!– body { background-color: #ffffff; } h1 { text-align: center; color: #008888; } u { color: #ff0000; } table { margin-left: 10%; margin-right: auto; } tr td { font: smaller; } p { margin-left: 5%; font-family: sans-serif; } --> </style> </head>

  21. <body> <h1>Expressions</h1> <p>Some basic expressions:</p> <table> <tr> <td>call for an unformatted java.util.Date() returns:</td> <td><u><%= new Date() %></u></td> </tr> <tr> <td>call for the real path to the root of this JSP returns:</td> <td><u><%= application.getRealPath("/") %></u></td> </tr>

  22. <tr> <td>call for the URL path and name of this JSP returns:</td> <td><u><%= request.getServletPath() %></u></td> </tr> <tr> <td>call for the file path and name of this JSP returns:</td> <td><u><%= new File(application.getRealPath(request.getServletPath())) %></u></td> </tr> </table>

  23. <p>If we add some other methods and combine some of the above we get nicer output:</p> <table> <tr> <td>The current time is:</td> <td><u><%= DateFormat.getTimeInstance().format(new Date()) %></u></td> </tr> <tr> <td>This page was last modified:</td> <td><u><%= DateFormat.getInstance().format(new Date(new File(application.getRealPath(request.getServletPath())).lastModified())) %> </u></td> </tr> </table> </body> </html>

  24. Erklæringer • Erklæring kan erklære en variabel som i Java. • Men man kan også lave metoder. • En erklæring har formen:<%!erklæring;[erklæring;]%> • F.eks: <%! private int etTal=14; private String enStreng=”Davs du”;%> • Variablen kan så senere bruges

  25. Load counter <html> <head> <title>JSP erklæring: Counter</title> </head> <body> <h1>Declarations</h1> <%! private int j = -1; //Her er erklæringen%> <h2>Counter</h2> <p>Denne side er reloaded <%= ++j %> gange</p> </body> </html>

  26. Metoder • Metoder kan også erklæres:<%! String hejMedDig(String navn) { return ”<P>Hej, jeg hedder ”+ navn +”</P>”; } %> • Kaldes med:<%=hejMedDig(”Sigurd”);

  27. Scriplets • Er når man blander koden med JSP. • Ved tunge scripts bør man indkapsle i metoder eller i java klasser. • En fil med mange scriplets kan være svær at læse. • Eksempel på scriplet:<ul><% for(int i=0;i<10;i++) {%><li>Linie <%=i%><%}%></ul>

  28. URL’s • URL: Uniform Resource Locator • Er det der står i adresse feltet i browseren • F.eks:http://www.computerworld.dk/Vis_artikel.asp?ArticleID=12 • Elleren_anden_port.ah.dk:337

  29. Metoder til aflæsning af URL’s • request:getScheme()Aflæser protokollen • request:getServerName()Aflæser servernavn som ip adresse eller navn • request.getServerPort()Aflæser portnummer • request.getRequestURI()Aflæser selve sidens sti. Dvs. det der kommer mellem servernavnet og søgestrengen

  30. QueryStrings • Man kan overføre værdier i URL’n • Bruges f.eks i søgemaskiner eller i indkøbskurven i et ehandelssystem • www.hunden.dk/vishund.jsp?race=”labrador”&”farve=”sort”&ben=4 • request.getParameter(String name) aflæser værdien • F.eks: request.getParameter(”race”) vil returnere ”labrador” • Tal fås således:int antalBen=Integer.parseInt(request.getParameter(”ben”)); • Hele strengen fås med:request.getQueryString() • request.getParameterNames() returnerer navne på parametrene

  31. Forms • <form method=”post”>Navn: <input name=”navn” type=”text” size=”20”> <br></form> • Giver en ny url: minside.jsp?navn=... • method angiver hvordan URL’en skal dannes: • post tilføjer søgestrengen • get laver en helt ny url

  32. get / post / action • Get: Tilføjer en QueryString til URL’en Bruges ved simple forms, hvor strengen er mindre end 255 tegn • Post: Sender data umiddelbart efter at resultat-url’en er fundet. Man kan ikke se data i url’en. De fås med getParameter(..) • Action Indlæser en ny side med parametrene. Den url, der står i browseren er den samme.

  33. Et eksempel – post <form method="POST"> Navnet er <%=request.getParameter("feltNavn")%> <P> Navn <input type="text" name="feltNavn" size="20"> </p> <p><input type="submit" value="Submit" name="B1"> <input type="reset" value="Reset" name="B2"></p> </form>

  34. Eksempel – Get <form method=”GET"> Navnet er <%=request.getParameter("feltNavn")%> <P>Navn <input type="text" name="feltNavn" size="20"></p> <p><input type="submit" value="Submit" name="B1"> <input type="reset" value="Reset" name="B2"></p> </form>

  35. Eksempel – Action formtest.jsp: <form method="POST” action=result.jsp> <P>Navn <input type="text" name="feltNavn" size="20"></p> <p><input type="submit" value="Submit" name="B1"> <input type="reset" value="Reset" name="B2"></p> </form> result.jsp: <h1> Navnet er <%=request.getParameter("feltNavn")%></h1>

  36. Indlæsning af flere ens parametre • F.eks varer til en indkøbskurv • Her bruges metoden:String [] request.getParameterValues(String name)

  37. Eksempel <% //Hent alle værdier for vareNavn String varer[] = request.getParameterValues("vareNavn");%> <% //Udskriv alle værdier for (int i=0; i< varer.length;i++){ %> vare nr. <%=i+1%> er <%=varer[i]%> <br> <% } // slut på for-sætning%>

  38. Forms, som de bruges meget <% //Hvis form er sendt som resultat af en POST sættes et flag boolean isOK=false; if(request.getMethod().equals("POST")){ isOK=true; } %> <% // Hvis den er ok, så udskriv resultat, eller bed om input if(isOK){%> Navn er <%=request.getParameter("feltNavn")%> <br> Email er <%=request.getParameter("feltEmail")%> <%} // end if %>

  39. Forsat.... <% //Hvis den ikke er ok, så vis formen if(!isOK){%> <form method="POST"> <P> Navn <input type="text" name="feltNavn" size="20" value=<%=request.getParameter("feltNavn")%>> <br> Email <input type="text" name="feltEmail" size="20" value=<%=request.getParameter("feltEmail")%>> </p> <p><input type="submit" value="Submit" name="B1"><input type="reset" value="Reset" name="B2"></p> </form> <%} //end if%>

  40. Validering • Check at inputdata er gyldige (valide): • F.eks:<% //Valideringif(isOK){ if(request.getParameter("feltNavn").equals("")){ isOK=false; %> <h2>Navn skal angives</h2> <% } //endif } //endif %>

  41. Scopes i JSP • Udover de generelle scopes kan man definere hvilket scope et objekt skal befinde sig i: • Page Eksisterer kun for siden. Når siden forlades dør variable/objekter • SessionEksisterer for sessionen. Sålænge browseren er åben, og ikke timed out • Application Eksisterer på server niveau. Sålænge serveren kører

  42. Scriptelementer • Direktiver • <%@ page import=”java.util.*”%> • Declarations • <%! Int i=43;%> • Scriptlets • <% cal.setTime(new Date()) %> • Expressions • <%= cal.get(Calendar.WEEK_OF_YEAR)%>

  43. (Forenklet) model

  44. Hvor dannes der her html-kode? <%! //erklæring af banner og links array String [] billeder = {"sas.gif", "kasino.gif", "bredband.gif","bolig.bmp"}; String [] links = {"http://www.sas.dk", "http://www.casino.com","http://www.tdc.dk","http://www.bolig.dk"}; int index=0; //initialisering af index til arrays %> <html> <body bgcolor="#FFFFFF" text="#000000"> <a href="<%=links[index]%>"> <img src="<%=billeder[index]%>" width="468" height="60" border="0"> </a> </body> </html> <% //flyt index index++; if(index==billeder.length) index=0; //reset index %>

  45. Gode råd • Gør det i små skridt. Så kan du overskue, hvor det går galt • Lav designet førstOg lad vær med at tænke på JSP her. • Overvej hvilken del af html’en i designet at JSP skal skrive. • Skriv resten af JSP-koden.

  46. Session • Med sessionsstyring er det muligt at tilpasse information og navigationsmuligheder til den enkelte bruger • Og registrere i f.eks et CRM-system, hvad brugeren gør. • HTTP (HTML) er udviklet til at vise statisk HTML. Derfor er der ikke indbygget sessionsstyring. • Sessionsstyring forudsætter serverside programmer eller scripts

  47. Session og JSP • Første gang en bruger loader en side fra sitet genereres et unikt sessionid, som gemmes i browseren. • Hvis det er muligt bruges en cookie, ellers tilføjes en querystring til URL’n • Samtidigt oprettes et unikt sessionobjekt på serveren, som bl.a også indeholder id’et. • Et id kan kun tilknyttet et sessionobjekt

  48. Attributes • Sessionobjektet anvendes ofte til at gemme forskellige variable. • Variable gemmes altså på serveren, og ikke i f.eks en cookie • Dette gøres med setAttribute(String navn, Object value)F.eks: session.setAttribute(”brugernavn”,”Børge”); • Den hentes igen med getAttribute(String navn)F.eks: String bruger=session.getAttribute(”brugernavn”); • Istedet for getAttribute og setAttribute kan man bruge hhv. getValue og setValue. Men de er deprecated, dvs de er på vej ud.

  49. Object • setAttribute og getAttribute gemmer værdier af typen Object. • Fordelen er at alle objekter af klassser i Java kan gemmes. F.eks kan en indkøbskurv laves som en klasse, der gemmes. • Ulempen er at simple datatyper, f.eks int og boolean ikke kan gemmes direkte. • Man er nødt til lave dem til et objekt. F.eks kan en int gemmes således:int ant=7;session.setAttribute(”antal”,new Integer(ant)); • Den aflæses således:int ant=(Integer) session.getAttribute(”antal”).intValue();

  50. Andre metoder • getAttributeNames() giver en liste med de anvendte attributer. • getCreationTime() giver tidspunktet for oprettelse af sessionobjektet • getID() giver sessionid’et. Kan være interessant hvis man kører flere services samtidigt eller ved logning • getLastAccessedTime() returnerer hvor lang tid der er gået siden sidste gang brugeren har gjort noget på sitet

More Related