Föreläsning 2 Applikationsservern orion Orion, fortsättning

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