23
1 Servlets 20.10.2014 Stephan Baldes

1 Servlets 20.10.2014 Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container

Embed Size (px)

Citation preview

Page 1: 1 Servlets 20.10.2014 Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container

1

Servlets

20.10.2014Stephan Baldes

Page 2: 1 Servlets 20.10.2014 Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container

2

Was ist ein Servlet?S E R V L E T

=Eine auf Java-Technologie basierte Web-Komponente,

die von einem Container verwaltet wird unddynamisch Inhalte (z.B. Webseiten) generiert.

SERVLET-ENGINE (Container)=

Teil eines Web-Servers, der die Netzwerkdienste zumEmpfangen von Anfragen und Senden von Antworten

bereitstellt und die Servlets über ihren gesamtenLebenszyklus enthält und verwaltet.

Page 3: 1 Servlets 20.10.2014 Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container

3

Architektur

Page 4: 1 Servlets 20.10.2014 Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container

4

HTTP-Anfragen• Beispiel GetGET /servlet/MyServlet?name=Scott& company=MageLang%20Institute HTTP/1.1Connection: Keep-AliveUser-Agent: Mozilla/4.0 ( compatible; MSIE 4.01; Windows NT)Host: www.magelang.comAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg

• Beispiel PostPOST /servlet/MyServlet HTTP/1.1User-Agent: Mozilla/4.0 ( compatible; MSIE 4.01; Windows NT)Host: www.magelang.comAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */Content-type: application/x-www-form-urlencodedContent-length: 39name=Scott&company=MageLang%20Institute

HTTP Befehle• GET• HEAD• POST• PUT• DELETE• TRACE• CONNECT• OPTIONS

Page 5: 1 Servlets 20.10.2014 Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container

5

Servlet-Klassen

Page 6: 1 Servlets 20.10.2014 Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container

6

Servlet-Klassen

Page 7: 1 Servlets 20.10.2014 Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container

7

Lebenszyklus

• init(ServletConfig)• Variablen initialisieren, Ressourcen anfordern

• service(ServletRequest, ServletResponse)• doGet(ServletRequest, ServletResponse)• doPost(ServletRequest, ServletResponse)• doPut(ServletRequest, ServletResponse)• ...

• destroy()• Ressourcen freigeben• Eventuell Zustand speichern

Page 8: 1 Servlets 20.10.2014 Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container

8

Beispiel 1: Hallo Welt!

Page 9: 1 Servlets 20.10.2014 Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container

9

Servlet Methoden 1/3

• void init(ServletConfig config) throws ServletException •Initialisierung des Servlets mit Konfigurationsparameter

• void service(ServletRequest req, ServletResponse res) throws ServletException, IOException

• Führt einen einzelnen Request von einem Client aus und erzeugt die Antwort. • Gibt die Anfrage weiter an

• doGet(ServletRequest req, ServletResponse res) • doPost(ServletRequest req, ServletResponse res)• etc.

• Für jeden Request wird die Methode in eigenem Thread ausgeführt• Parameter req hält alle Informationen über Request;• in Parameter res wird die Antwort geschrieben

• void destroy()• soll Aufräumarbeiten durchführen und zerstört das Servlet

Page 10: 1 Servlets 20.10.2014 Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container

10

Servlet Methoden 2/3

• String getParameter(String name)• Wert des ersten Parameters mit dem gegebenen Namen• null, falls nicht vorhanden

• String[] getParameterValues(String name)• Array mit Werten (URL-decoded) für jedes Vorkommen des angegebenen

Parameternamens• null, falls nicht vorhanden

• Enumeration getParameterNames()• eine Aufzählung (Enumeration) aller Parameternamen• falls keine Parameter übergeben wurden ist die Enumeration leer

Page 11: 1 Servlets 20.10.2014 Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container

11

Servlet Methoden 3/3

• ServletOutputStream getOutputStream()• Binäre Daten

• PrintWriter getWriter()• Text

• void setContentType(String type)• Legt den MIME Typ fest (z.B.: text/html, image/jpeg, ...)

• ...

Page 12: 1 Servlets 20.10.2014 Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container

12

Wie erstellt man ein Servlet?• Klasse schreiben und compilieren

– Dazu vorher Servlet-Klassen im Klassenpfad aufnehmen

• Servlet in den Servlet-Container einbinden– .class-Dateien und .xml-Deskriptoren an die richtige

Stelle des Servlets-Containers kopieren.• Server starten

– z.B. Tomcat• Servlet im Browser aufrufen

– z.B. http://localhost:8080/myServlets/myFirstServlet

Page 13: 1 Servlets 20.10.2014 Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container

13

Page 14: 1 Servlets 20.10.2014 Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container

14

Arbeitsblatt Aufgabe 1

Page 15: 1 Servlets 20.10.2014 Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container

15

Arbeitsblatt Aufgabe 2

Page 16: 1 Servlets 20.10.2014 Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container

16

Beispiel 2: Begrüßung mit Namen

Submit

Page 17: 1 Servlets 20.10.2014 Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container

17

Beispiel 2: Begrüßung mit Namen

Page 18: 1 Servlets 20.10.2014 Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container

18

Beispiel 2: Begrüßung mit Namen

null: Servlet ohne diesen Parameter aufgerufen" " : Eingabeform war leernull: Servlet ohne diesen Parameter aufgerufen" " : Eingabeform war leer

Page 19: 1 Servlets 20.10.2014 Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container

19

Beispiel 2: Begrüßung mit Namen

Dieser Parameter speichert die aktuelle id des Benutzers, um ihn wieder zu erkennen.

Page 20: 1 Servlets 20.10.2014 Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container

20

Arbeitsblatt Aufgabe 3

Page 21: 1 Servlets 20.10.2014 Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container

ArbeitsauftragZufallszahlen

Erstellen Sie ein Servlet, das eine Liste von fünf Zufallszahlen im Bereich zwischen 1 und 100 ausgibt.

z.B.• 32• 53• 67• 44• 3

Zusatzaufgabe: Die Länge der Liste soll durch den Parameter 'anzahl' vom Benutzer verändert werden können, z.B. http://localhost:8080/zufall?anzahl=15

Zeit: 15 Minuten

Page 22: 1 Servlets 20.10.2014 Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container

Session Tracking

Page 23: 1 Servlets 20.10.2014 Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container

Session TrackingHTML ist 'stateless'Ausweg

CookiesWerte in URL speichernHidden Fields

Servlets/JSP:session (javax.servlet.http.HttpSession)

Verwendet Cookies: Hashmap mit Attribut/Werte-Paaresession.setAttribute("accessCount", new Integer(0));

session.getAttribute("accessCount");… (siehe Java-Doc für javax.servlet.http.HttpSession)