Applikationsservern orion • Föreläsning 2 • JSP - Java Server Pages • • En applikationsserver är den middleware motor som man kör sina j2eeapplikationer på. En webserver ingår alltid i produkten men kan även agera middleware mot klienter genom andra protokoll än http. Detta tas dock inte upp i denna kurs. Orion är den applikationsserver vi kommer att använda under j2ee-labbarna. Det finns ett flertal produkter på marknaden men denna är gratis för ickekommersiell användning och men är tyvärr för j2ee 1.3. Dock mycket kompakt vilket gör att den går att installera på era konton. I orion används xml för konfigurering vilket liknar HTML men man kan definiera egna taggar, t ex <person> <namn>Sten Andersson</namn> <adress>Polhemsgatan 33</adress> </person> En del xml-filer är j2ee-specifika och andra är orionspecifika. Katalogstrukturen i orion Orion, fortsättning Applikation (application.xml) • En applikation kan bestå av webmoduler och ejbmoduler och dessa har varsin j2eespecifika konfigurationsfil. Web-modul (web.xml) kompilera/exekvera EJB:er (.xml, .java) .jsp-filer (www-rot) Ejb-modul(ejb-jar.xml) .tld-filer javaBeans (.java) tagHandler (.java) Sun Java™ System Application Server Platform Edition 8 • Stödjer J2EE 1.4 • Konfigurationsfiler körs från kontot och binaries är delade mellan alla instanser. 1 JSP struktur Hur processas JSP filer? • Består av tre delar – Inbäddad jsp-kod HttpServletRequest Webbläsare Webbläsare Webbserver HttpServletResponse – JavaBeans – Tagg bibliotek • Man har tillgång till hela javas klassbibliotek • Stöds av alla applikationsservrar • Nackdel: Många olika JSP-motorer innebär icke standardiserade felmeddelanden (inget radnummer vanligt) Servlet (HelloWorld) import java.io.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { • En jsp-sida är en html-sida med inbäddad javakod som har .jsp suffix. • Den inbäddade koden separeras från html med speciella taggar <% jspkod %> • Vid runtime översätts hela jsp-sidan om till en s k servlet och kompileras, detta sker första gången sidan anropas, därefter anropas servlet:en. Servlet:en är en javafil. Man kan skriva servlets själv men presentation/logik blandas och koden blir svårläst. • javax.servlet.http.HttpServletRequest är en klass som inkapslar en httpförfrågan, denna finns instansierad som “request” i JSP. • javax.servlet.http.HttpServletResponse är en klass som inkapslar ett httpsvar, denna finns instansierad som “response” I JSP. Exempel 1 <html> <head><title>Hälsning</title></head> <h2>Välkomstprogram</h2> <form action="exempel1.jsp"> <p>Vad heter du? <input type=text name="namn"> <p><input type=submit value="Skicka"> </form> </html> <html> <head><title>Hälsning</title></head> <body> <center> <h2>Hej <%=request.getParameter("namn")%> !!!</h2> </center> </body> </html> public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException{ PrintWriter out = response.getWriter(); out.println("Hello, world!"); out.close(); } } Fyra delar JSP-syntax - Direktiv • Placeras i början av JSP-filen. @ @ symbolen symbolen betecknar betecknar ett ett direktiv direktiv • JSP-syntax – Direktiv – Deklarationer – Scriptlets – Fördefinierade variabler • <%@ include file=”filnamn" %> – Inkluderar den angivna sidan utan att den exekveras • <%@ page errorpage=”html/jsp filnamn" %> – Returnerar den definierade sidan om ett fel inträffar i JSP-koden – Exempel: <%@ page errorpage=“error.html” %> • <%@ page import=”package name(s)” %> – Definierar paketen som ska importeras för koden – Exempel: <%@ page import=“java.io.*,java.util.*”%> • <%@ page language=”language name" %> – default är java så oftast onödig 2 JSP syntax - Deklarationer • Deklarationer är till för att definiera instansvariabler och instansmetoder, hela jspsidan kan betraktas som ett objekt. • Placeras innanför <%! taggar JSP syntax -Scriptlets • Scriptlets används till att exekvera javakodblock • Exempel på syntax <% … java kod … %> • Vilken syntaxriktig javakod som helst! !! symbolen symbolen betecknar betecknar ett ett deklaration deklaration Skillnaden mellan <%! och <% • Sidglobala varibler kan och bör deklareras inom ”<%! ... %>” taggar dvs: <%! String s1 = ”hej”; %> <HR> <%= s1 %> public – Deklarationen hamnar här – Scriptlets här • request (javax.servlet.HttpRequest-objekt) – Innehåller HTTP-information skickat från klienten, t e x formulärdata. • response (javax.servlet.HttpResponse-objekt) class Slask ext... { • JSP-sidor kompileras om till public servlets { Fördefinerade variabler Slask() } public void service(HTTPSer... { } – Svaret från webservern, vanligtvis mest html-kod men kanske även cookies. • out – ett PrintWriter-objekt – Att skriva ut med ... Exempel 3 Exempel 2 <html> <head><title>Exempel 2</title></head> <body> <center> <%! public int utfall; public void kasta(){ utfall = 1 + (int)(Math.random()*6); } %> <h2>Tärningskast</h2> <% kasta(); %> Tärningens utfall: <%=utfall%> <form><input type=submit value="Kasta"></form> </center> </body> </html> <html> <head><title>Exempel 2</title></head> <body> <center> <%! class Dice { public int utfall; public void kasta(){ utfall = 1 + (int)(Math.random()*6); } } %> <h2>Tärningskast</h2> <% Dice d = new Dice(); d.kasta(); %> Tärningens utfall: <%=d.utfall%> <form><input type=submit value="Kasta"></form> </center> </body> </html> 3