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

Post on 05-Apr-2015

107 views 1 download

Transcript of 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

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>

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)

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

Servlet Implementierung

• Typisch: Unterklasse von HttpServlet oder

GenericServlet

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

• Alternativ: service() überschreiben

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:}

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

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

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>

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>

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>

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

• 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);• }• }

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

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)

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

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()) %>

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 -->)

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()) %>

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) %>