Universität zu Lübeck Institut für Informationssysteme Einführung Servlets/JSPs.

21
Universität zu Lübeck Institut für Informationssysteme Einführung Servlets/JSPs

Transcript of Universität zu Lübeck Institut für Informationssysteme Einführung Servlets/JSPs.

Page 1: Universität zu Lübeck Institut für Informationssysteme Einführung Servlets/JSPs.

Universität zu LübeckInstitut für Informationssysteme

Einführung Servlets/JSPs

Page 2: Universität zu Lübeck Institut für Informationssysteme Einführung Servlets/JSPs.

HTML

HyperText Markup Language• Sprache, in der Webseiten geschrieben sind<html>

<head><title>Eine Beispielseite</title></head><body><h1>&Uuml;berschrift</h1><p>Ein ziemlich sinnfreier Text, der nur

demonstrieren soll, was HTML ist</p></body>

</html>

Page 3: Universität zu Lübeck Institut für Informationssysteme Einführung Servlets/JSPs.

HTML Request und Response

• HTTP Request (Client: Browser, Programme) – URL http://server:port/pfad/seite?param1=wert1&param2=wert2 http://localhost:8080/demo/add?x=12&y=13 – Methode (GET/POST/…) – Body (z. B: Parameter bei POST, Datei-Uploads…) – Diverse andere Informationen (Header)• HTTP Response (Web-Server) – Angeforderte Datei (HTML, GIF, …) – Diverse andere Informationen (Header)

Page 4: Universität zu Lübeck Institut für Informationssysteme Einführung Servlets/JSPs.

Servlet API

• Anwendungsprogrammierschnittstelle für

server-seitige Java-Programme• Servlet: gewöhnliche Java-Klasse, mit der

sich der Webserver beliebig erweitern läßt• Servlets stellen Dienste für den Client

bereit, die dieser anfragen kann• Anfrage und Antwort über Datenströme• Servlet API bietet Unterstützung für

Cookies und ein Session-Management

Page 5: Universität zu Lübeck Institut für Informationssysteme Einführung Servlets/JSPs.

Servlet Implementierung

• Typisch: Unterklasse von HttpServlet oder

GenericServlet

• doGet() oder/und doPost() überschreiben

• Alternativ: service() überschreiben

Page 6: Universität zu Lübeck Institut für Informationssysteme Einführung Servlets/JSPs.

HelloWorld Servlet

1:import java.io.*;2:import java.util.Date;3:import javax.servlet.*;4:5:public class HelloWorld extends javax.servlet.GenericServlet {6: public void service(ServletRequest req, ServletResponse res){7: res.setContentType("text/html");8: PrintWriter out = res.getWriter();9: Date d = new Date();10: out.println("<html><head></head><body>" +11: "Hello World am " + d.toString() +12: "</body></html>");13: }14:}

Page 7: Universität zu Lübeck Institut für Informationssysteme Einführung Servlets/JSPs.
Page 8: Universität zu Lübeck Institut für Informationssysteme Einführung Servlets/JSPs.

Aufruf eines Servlets

• Anfrage: HTTP Request

– URL in Browser eingeben (GET)

– HTML Link klicken (GET)

– HTML Formular abschicken (GET/POST)

• Verarbeitung: Parameter holen, Datenbank

abfragen, Berechnungen durchführen etc.

• Ergebnis: HTTP Response

– Wird vom Browser angezeigt

– Evtl. automatisch weitere Requests, etwa Bilder

Page 9: Universität zu Lübeck Institut für Informationssysteme Einführung Servlets/JSPs.

Input und Output

• Request-Objekt enthält Anfrageparameter

request.getParameter(String paraName)

• Response-Objekt stellt Ausgabekanal zur

Verfügung

response.getWriter() für Textausgabe

response.getOutputStream() für Binärdaten

Page 10: Universität zu Lübeck Institut für Informationssysteme Einführung Servlets/JSPs.

GET-Methode mit Hyperlink

<html><head>

<title>Calculator</title></head><body>

<a href="servlet/sep.CalculatorServlet?x=12&y=13">

Berechnung starten </a>

</body></html>

Page 11: Universität zu Lübeck Institut für Informationssysteme Einführung Servlets/JSPs.

GET-Methode mit Formular

<html><head>

<title>Calculator</title></head><body>

<form action="servlet/sep.CalculatorServlet">X: <input type="text" name="x">Y: <input type="text" name="y"><input type="submit">

</form></body>

</html>

Page 12: Universität zu Lübeck Institut für Informationssysteme Einführung Servlets/JSPs.

POST-Method (nur Formular)

<html><head>

<title>Calculator</title></head><body>

<form action="servlet/sep.CalculatorServlet" method="post">

X: <input type="text" name="x">Y: <input type="text" name="y"><input type="submit">

</form></body>

</html>

Page 13: Universität zu Lübeck Institut für Informationssysteme Einführung Servlets/JSPs.

Vergleich GET/POST

• GET Methode

– Parameter sind Bestandteil des URLs

->Bei Bookmarks werden Parameter mitgespeichert

->Ungeeignet für Passwörter

– Links benutzen automatisch GET Methode• POST Methode

– Parameter werden im Body des Requests

übertragen

– Notwendig z.B. bei Datei-Upload

Page 14: Universität zu Lübeck Institut für Informationssysteme Einführung Servlets/JSPs.

• import javax.servlet.*;• import javax.servlet.http.*;• import java.io.*;• public class CalculatorServlet extends HttpServlet• {• protected void doGet(HttpServletRequest request,• HttpServletResponse response)• throws ServletException, IOException {• int x = Integer.parseInt(request.getParameter("x"));• int y = Integer.parseInt(request.getParameter("y"));• PrintWriter out = response.getWriter();• out.println("<html><head><title>MyCalc</title></head>");• out.println("<body>");• out.println("Berechnung: "+x+" + "+y+" = " + (x+y));• out.println("</body>");• out.println("</html>");• }• protected void doPost(HttpServletRequest request, HttpServletResponse• response) throws ServletException, IOException {• doGet(request, response);• }• }

Page 15: Universität zu Lübeck Institut für Informationssysteme Einführung Servlets/JSPs.

Web-Applikation

• $TOMCAT_HOME/webapps/myapp• Struktur des Verz. myapp:

– WEB-INF • web.xml

• classes (eigene Klassen, Package-Struktur beachten!)

• lib (Hilfsbibliotheken, z.B. db2java.zip, upload.jar) – index.html (index.jsp) & mgl. andere Dateien/Verz.

• http://host:port/myapp/servlet/mypackage.MyServlet• Servlet-Mapping: in Datei web.xml. Zugriff dann über• http://host:port/myapp/myservlet

Page 16: Universität zu Lübeck Institut für Informationssysteme Einführung Servlets/JSPs.

Servlet: Vor- u. Nachteile

• Vorteil: sehr flexibel

• Nachteil: HTML ist in Java-Quellcode

eingebettet

– Unübersichtlich

– HTML-Editoren können nicht benutzt werden

– Kein Syntax-Highlighting von HTMLQuellcode

• Alternative: Java Server Pages (JSP)

Page 17: Universität zu Lübeck Institut für Informationssysteme Einführung Servlets/JSPs.

Java Server Pages

• JSP-Seiten als normale HTML-Seite geschrieben

("Template", statischer Teil), vermischt mit ein

wenig Java (dynamischer Teil)

• Java in speziellen "tags", z.B. <%...%>

• JSP-Dateien müssen die Endung .jsp haben

• JSP wird in ein Java-Servlet übersetzt, welches

dann kompiliert wird.

• Das Servlet arbeitet in der gewohnten Art und

Weise. Browser sieht nur HTML

Page 18: Universität zu Lübeck Institut für Informationssysteme Einführung Servlets/JSPs.

Beispiel

<HTML>

<BODY>

Hello! The time is now <%= new java.util.Date() %>

</BODY>

</HTML>

• Äquivalent:

Hello! The time is now <% out.print(new java.util.Date()) %>

Page 19: Universität zu Lübeck Institut für Informationssysteme Einführung Servlets/JSPs.

JSP-Syntax

• Verschiedene JSP “tags” für versch. Zwecke• <%= expression %> – expression ist evaluiert. Das Ergebnis in die HTML

Seite eingefügt• <% code %>

– code wird in service-Methode des Servlets eingefügt

– Diese Konstruktion: scriptlet• <%! declarations %>

– Die declarations werden in die Servlet-Klasse, nicht in

eine Methode eingefügt• <%-- JSP Kommentar --%> (<!-- HTML -->)

Page 20: Universität zu Lübeck Institut für Informationssysteme Einführung Servlets/JSPs.

JSP: Vordefinierte Variablen

• request: das HttpServletRequest-Objekt

• response: das HttpServletResponse-Objekt

• session: die HttpSession assoziiert mit dem

Request oder null wenn es keine Session gibt

• out: JspWriter (ähnlich PrintWriter) zum Senden

von Daten an den Client

• Beispiel: Your hostname: <%=request.getRemoteHost() %>

• Äquivalent: Your hostname: <%out.print(request.getRemoteHost()) %>

Page 21: Universität zu Lübeck Institut für Informationssysteme Einführung Servlets/JSPs.

Deklaration und Direktive

• Global, beeinflußen das ganze Servlet

• <%@ Direktive %>

• Am wichtigsten: page-Direktive

• <%@ page import="java.util.*" %>

• Deklarationen: Definitionen von Variablen und Methoden

<%! static final int PI = 3.1415926536;

double u(double radius) { return 2*PI*r; } %>

• Benutzung in der Seite:

Umfang des Einheitskreises: <%= u(1.0) %>