Java Server Pages Michael Klenke Seminar Internet - Technologie
Java Server PagesMichael Klenke
Seminar Internet - Technologie
2
Was sind Java Server Pages.
Voraussetzungen für den Einsatz von JSP.
Syntax von JSP: Ausdrücke, Scriptlets und Deklarationen Direktiven Implizierte Objekte Aktionen
JavaBeans
Inhalt
3
Anfang 1999 von Sun Microsystems entwickelte Technologie, um Java-Code in HTML-Seiten einbetten und beim Abruf der Seite auf dem Server ausführen zu können.
Alternative zum Common Gateway Interface (CGI), PHP oder den Active Server Pages (ASP) von Microsoft.
Erweiterung von Java Servlets
Aktuelle Version: 2.1
Was sind Java Server Pages (JSP)?
4
HTTP Client Server Architektur
5
Common Gateway Interface (CGI)
6
Vorteile: Beliebige Programmiersprache Mehrere Clients beeinflussen sich nicht gegenseitig Alle gängigen Webserver unterstützen CGI
Nachteile: Hohe Antwortzeiten I.d.R. keine Trennung von Anwendungslogik und
HTML-Präsentation
Vor- und Nachteile von CGI
7
Servlets
8
Vorteile: Performance (pro Request ein Thread) Plattformunabhängig durch Java Webcontainer können zusätzliche Dienste anbieten
• Sicherheit (Security)• Error-Handling• ...
Nachteile: Keine Trennung von Logik und HTML-Präsentation Ungeeignet für Designer
Vor- und Nachteile von Servlets
9
Java Server Pages (JSP)
10
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>JSP - HelloWorld</title>
</head>
<body style="text-align:center">
Dies ist eine statische HTML-Seite.
</body>
</html>
Ausgangspunkt: HTML-Dokument
11
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>JSP - HelloWorld</title>
</head>
<body style="text-align:center">
Dies ist eine dynamische JSP.<br />
Es ist jetzt genau: <%= new java.util.Date() %>
</body>
</html>
Einfügen von Java-Anweisungen
12
Interpretation durch den Browser
13
JSP-/Servlet-Engine Apache Tomcat Jetty
Oder Applikationsserver Glassfish Jboss Gerimino
Java, Standard Edition
Java, Enterprise Edition
Eine Datenbank (MySQL)
Voraussetzungen für den Einsatz von JSP
14
Verzeichnisstruktur Tomcat
15
Projektverzeichnis Date
Web Deployment Descriptor
16
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application
2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app> <display-name>Eine Webanwendung</display-
name> <description> Dies ist eine auf JSP basierende Beispielanwendung </description></web-app>
Web Deployment Descriptor
17
HelloWorld.jsp
18
Quelltext von HelloWorld.jsp
19
Bisher ist eine JSP zunächst nichts anderes, als eine um besondere Tags erweiterte HTML-Seite.
Diese Tags unterteilen sich in vier Klassen:
Scriptlets der Form <% Java-Code %>
Deklarationen der Form <%! Java-Code %>
Ausdrücke der Form <%= Java-Ausdruck %>
Kommentare der Form <%-- Kommentartext --%>
JSP - Syntax
20
<%!
private static boolean isDay() { int hour = new java.util.GregorianCalendar().get( … );
if (hour > 6 && hour< 18){
return true;
}
return false;
}
%>
<html> <body>
<% if ( isDay() ) { %>
Guten Tag …
<% } else { %>
Gute Nacht …
<% } %>
</body> </html>
Beispiel für eine if-else-Anweisung
java.util.Calendar.HOUR_OF_DAY
21
Vergleich: Ausdrücke, Scriptlets, Deklarationen
Ausdruck Scriptlet Deklaration
Tag <%= … %> <% … %> <%! … %>
Ausgabe in die JSP
Resultat wirddirekt in die
Seite integriert.
Ausgaben in dieErfolgen über die
Variable out.
Ausgaben sind nicht möglich.
Mögliche Anweisungen
Auf eine Aus-gabeanweisung
beschränkt.
Anweisungsfolgenmöglich.
Vollständige De-klaration von
Methoden möglich.
Abschluss einer
Anweisung
Anweisung wirdnicht abge-schlossen.
Alle Anweisungenwerden von einem
Semikolon (;) abgeschlossen.
Alle Anweisungenwerden von einem
Semikolon (;) abgeschlossen.
Definition vonVariablen
Ist nicht möglich.Lokale Variablen
möglich.Globale Variablen
möglich.
22
XML-basierte Schreibweise
Tag XML-Notation
Ausdruck <%= zahl %><jsp:expression> zahl</jsp:expression>
Scriptlet
<% out.println("Hello"); out.println("World");%>
<jsp:scriplet> out.println("Hello"); out.println("World");</jsp:scriplet>
Deklaration<%! int zahl = 100;%>
<jsp:declaration> int zahl = 100;</jsp:declaration>
23
Innerhalb einer JSP-Datei existieren implizierte Objekte, die in jeder JSP von Anfang an zur Verfügung stehen, ohne das sie vorher über eine Deklaration erstellt wurden.
Vordefinierte Objekte
• out • response
• application • pageContext
• request • exception
• session • page
• config • jspContext
24
request (javax.servlet.http.HttpServletRequest)
Ist für Anfragen zuständig, z.B. beim Senden von Formularen aus Formularfeldern an eine JSP-Datei.
<html><head> <title>Ihre Daten</title></head><body> <form name="Eingabe" action="get_Data.jsp" method="post"> Vorname: <input type="text" name="vorname“ ><br> Nachname: <input type="text" name="nachname"><br> <input type="submit" value="Abschicken"> </form></body> </html>
Das request-Objekt
Form.jsp
25
Das request-Objekt
26
<html><head><title>Ausgabe</title></head> <body> <% String vn = request.getParameter("vorname"); String nn = request.getParameter("nachname"); out.println("Vorname: " + vn); out.println("<br>Nachname: " + nn); %> </body></html>
Das request-Objekt
get_Data.jsp
27
Das request-Objekt
28
Direktiven betreffen die aktuelle JSP-Datei und beeinflussen den Aufbau der JSP-Seite.
Sie sind in drei Kategorien aufgeteilt: page include taglib
Alle drei Direktiven haben stets die gleiche Form:
<%@ NameDerDirektive attribut="Wert" %>
Direktiven – Eigenschaften einer JSP
29
Die page-Direktive gibt Auskunft über die verwen-dete Sprache, kann Java-Klassen importieren und eine Fehlerseite angeben.
<%-- Importieren der Java-Klasse 'java.util.Date' --%><%@ page import="java.util.GregorianCalendar()"
%>...<%-- Verwenden der Klasse 'Date' ohne vollständigen
Pfad --%><% GregorianCalendar cal = new GregorianCalendar();
%>
Page Direktive
30
Attribut Kurzbeschreibung
language Definiert die Skripting-Language
import Importiert benötigte Klassen und Pakete
errorPage Eine relative URL zu einer Seite, die im Fehlerfalle aufgerufen werden soll.
isErrorPage Gibt an, ob die seite eine Seite zur darstellung von Fehlern sein soll.
contentType Legt den Mime-Typ der Antwort an z.B. „text/html" oder "text/xml“.
pageEncoding Bei internationalisierten Seiten geradezu ein Pflicht-Attribut!
Attribute der page-Direktive
31
Neben den Direktiven kennt JSP so genannte Aktionen. Diese sind nichts anderes als bestimmte definierte JSP-Elemente, die eine besondere Funktion ausführen.
Derartige Funktionen können sein:
Weiterleitung auf eine externe Datei oder Webseite. Einfügen einer externen HTML- oder JSP-Datei. Einbinden einer JavaBean.
Aktionen
32
Die Idee der Beans ist die Aufteilung von Funktion-alitäten in kleine Komponenten, die so genannten Beans. Beans sind normale Java-Klassen, die nach gewissen Regeln geschrieben sind.
JavaBeans müssen einen parameterlosen Konstruktor besitzen, über den sie erzeugt werden.
Die Attribute bzw. Eigenschaften bestehen aus einer nichtöffentlichen (private) Instanzvariable und öffentlichen Zugriffsmethoden (public), welche umgangssprachlich auch Getter und Setter genannt werden.
Die Zugriffsmethoden haben immer die Form setXxx() und getXxx() bzw. isXxx() bei booleschen Attributen.
JSPs und JavaBeans
33
Eine Zufallszahl soll von einer Bean ermittelt werden und von der JSP-Datei im Browser angezeigt werden.
Eine einfache Bean, die innerhalb einer JSP eingesetzt werden kann. ->Zufallsgenerator
Die JSP-Datei ruft die Bean auf. Die Bean ermittelt die Zufallszahl. Das Ergebnis wird an die JSP-Datei zurückgegeben
und angezeigt.
Die erste Bean
34
Verzeichnisstruktur
35
package bean;
import java.util.Random;
public class Randomize {
private int obergrenze;
private Random r = new Random();
public Randomize() {
}
…
Der Bean-Code - Teil 1
36
public int getObergrenze() {
return obergrenze;
}
public void setObergrenze(int obergrenze) {
this.obergrenze = obergrenze;
}
public int getZufall() {
int zufall = r.nextInt(obergrenze);
return zufall;
}
} // class Randomize
Der Bean-Code - Teil 2
37
Einfügen der Bean
38
<jsp:useBean id="ran" class="bean.Randomize" /><html> <head> <title>Zufallszahl</title></head> <body> <% ran.setObergrenze(50); int zufall=ran.getZufall(); out.println("Die Zufallszahl lautet: "); out.println(zufall); %> </body></html>
Der JSP-Code
39
Ausgabe im Browser
40
Durch Scoping lässt sich die Sichtbarkeit von Objekten innerhalb der Web-Applikation regeln.
<jsp:useBean id="ran" class="bean.Randomize" scope="session" />
Die Sichtbarkeit ist in verschiedene Levels aufgeteilt.Jedes Level hat eine höhere Sichtbarkeit:
page (Standardwert) request session application
Gültigkeitsbereiche einer JavaBean
41
<jsp:useBean id="ran" class="bean.Randomize" /><jsp:setProperty name="ran" property="obergrenze“,
value="50" />
<html> <head> <title>Zufallszahl</title></head> <body> Die Zufallszahl lautet: <jsp:getProperty name="ran"
property="zufall" /> </body></html>
Alternativer Aufruf der setter-/getter-Methoden
42
Vorteile: JSP sind effizient Java eröffnet als OO-Programmiersprache mehr
Möglichkeiten als Skriptsprachen. Plattformunabhängig
Nachteil: Servlet-/JSP-Container ist notwendig: z.B.
Tomcat
Fazit – Java Server Pages
43
Michael Seeboerg Weichselbaum: Java Server Pages. Markt und Technik (2004)
Thomas Stark: Java EE 5 Einstieg für Anspruchsvolle.Addison-Wesley, München (Oktober 2006)
http://www.jsptutorial.org/
http://de.wikipedia.org/
Quellen
Java Server Pages
Seminar Internet - Technologie