57
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 1 Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 1 Servlets Servlets Definition, Servlet vs. CGI, Design, API Lebenszyklus, Beispiel JSP JSP vs. Servlet, Beispiel, Syntax, Beans, TagLibs, Implizite Objekte Konfiguration/Tools

Servlets - System Software fileGenerische Klassen: javax.servlet • Servlet GenericServlet • ServletRequest • ServletResponse • ServletContext • ... Spezialisierungen für

  • Upload
    others

  • View
    49

  • Download
    0

Embed Size (px)

Citation preview

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 1�������������� ��������������

��������������������� ������ Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 1

Servlets

ServletsDefinition, Servlet vs. CGI, Design, API

Lebenszyklus, Beispiel

JSPJSP vs. Servlet, Beispiel, Syntax, Beans, TagLibs,

Implizite Objekte

Konfiguration/Tools

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 2�������������� ��������������

��������������������� ������

Definition

S E R V L E T=

Eine auf Java-Technologie basierte Web-Komponente, die von einem Container verwaltet wird und

dynamisch Inhalt generiert.

SERVLET-ENGINE (Container)=

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

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

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 3�������������� ��������������

��������������������� ������

Servlet vs. CGI

� CGI• Schnittstelle um externe

Programme auszuführen

• Pro Aufruf gestartet

• Zustandslos

• Sprach-/System-unabhängig

� Servlet• Gleicher Prozess dadurch

Weniger Overhead

• Bleibt im Speicher zwischen den Anfragen

• Eine Instanz für alle Anfragen• Zustandsbehaftet

• Fehlerbehandlung (Exceptions)

• Sicherer durch Sandbox• Systemunabhängig (soweit

JavaVM verfügbar)• Große Klassenbibliothek

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 4�������������� ��������������

��������������������� ������

RessourcenDateien, DB, ...

Design

WebServer & Servlet-EngineTomcat, …

Servlet 2 Servlet …Servlet 1

ClientIE, Mozilla, …

�������

�������

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 5�������������� ��������������

��������������������� ������

API

� Generische Klassen: javax.servlet• Servlet GenericServlet

• ServletRequest• ServletResponse

• ServletContext

• ...

� Spezialisierungen für HTTP: javax.servlet.http• HttpServlet• HttpServletRequest

• HttpServletResponse

• HttpSession• ...

Servlet

GenericServlet

HttpServlet

Benutzer Servlet

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 6�������������� ��������������

��������������������� ������

���������������������������� Interface

� ��������������� ����� �����������������������������

• Initialisierung des Servlets mit Konfigurationsparameter

� ������� ����� ���������� �������

� Zugriff auf die Konfigurationsparameter

� ������������������������� ������������������� ��������������������������������������

• Führt einen einzelnen Request von einem Client aus und erzeugt die Response.

• Für jeden Request wird die Methode in eigenem Thread ausgeführt

• Parameter ��� hält alle Informationen über Request; • in Parameter ��� wird die Antwort geschrieben

� ����������������������

• Information über Servlet in Form eines Strings

� �����������

• soll Aufräumarbeiten durchführen und zerstört das Servlet

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 7�������������� ��������������

��������������������� ������

��������������������������������������������������������

� ��������� !�!"������������!"��

• Wert (URL-decoded) des ersten Parameters mit dem gegebenen Namen

• null, falls nicht vorhanden

� ������#$��� !�!"����%!������������!"��

• Array mit Werten (URL-decoded) für jedes Vorkommen des angegebenen Parameternamens

• null, falls nicht vorhanden

� ���"��!�����������&��� !�!"����'!"����

• eine Aufzählung (Enumeration) aller Parameternamen

• falls keine Parameter übergeben wurden ist die Enumeration leer

� �����������"���(������

• IP-Adresse des Clients

� )����!�����������

• true wenn der Aufruf über HTTPS erfolgt ist

� &&&

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 8�������������� ��������������

��������������������� ������

������������������������������������������������������������

� �����������������!"�������������!"��

• Binäre Daten

� ����*��������*�������

• Text

� ����������

• Löschen des Puffers, der Header und des Statuscodes

� ��������+�������

• Schreiben des Puffers (den Header und Statuscode) an den Client

� ��������� ������,�����

• Liefert den aktuell gesetzen MIME Typen (z.B.: text/html, image/jpeg, ...)

� ������ ������,���������������

� &&&

exklusiv

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 9�������������� ��������������

��������������������� ������

HTTP Protokoll

HTTP methods� -�,

� .�(/

� ��,

� 0,

� /�1�,�

� ,�( �

� �''� ,

� � ,��'�

� Beispiel GET

� Beispiel POST

-�,2�������23��������4�!"�5�����6��"�!��53!��1!��789���������.,, 2:&:

���������;<���=(����0���=(����;3�>���!2?&9���"�!��)��@3���?&9:@*�����',�

.���;���&"!���!��&��"(�����;�"!��2�����"!��2�=�)��"!���"!��2A�����"!��2�A���

��,2�������23��������.,, 2:&:0���=(����;3�>���!2?&9���"�!��)��@3���?&9:@*�����',�

.���;���&"!���!��&��"(�����;�"!��2�����"!��2�=�)��"!���"!��2A�����"!��2�A����B2

������=����;!�����!����2�=���=���"=�������� ������=������;CD

�!"�5�����6��"�!��53!��1!��789���������

�������������������� �������������

���������������������������������

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 10�������������� ��������������

��������������������� ������

E��"�FE��!FE�����F.,31G��"�E2�����FE2��!FE)��FE���"!�����5H������&��"�H"����5H���HFE���������5H����H�!"�5H�H�!���5H:8CH2F0���'!"�; E���������5H����H�!"�5H����H2FE)�F0��� !�����; E���������5H�!�����H�!"�5H�!��H2FE)�FG�!��;E���������5H����I)��H�!"�5H��!��H����I�F��!)��E2�����FE)�F(��;E���������5H�!��H�!"�5H!��H�!���5H����HF6��@:JE2�����FE���������5H�!��H�!"�5H!��H�!���5H!���H����I�F6��@:JE2�����FE)�F����;E�������!"�5H����HFE�������!���5H(HF("������!���E2������FE�������!���5H�H�������F������E2������F

E2������FE)�FE���������5H��)"��H�!���5H��)"��H2F

E2���"FE2)��FE2��"�F

HTML Formulare

� Ermöglichen Benutzereingaben� Benutzen POST oder GET

� Aufruf:������&��"�4�5:8C6����5K���L/��6�!��5"��!��6��!��5��6!��5!���6����5�

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 11�������������� ��������������

��������������������� ������

HTML Formulare Fortsetzung

�5:8C6����5K���L/��6�!��5"��!��6��!��5��6!��5!���6����5�

� Textfelder: � ����: Text-Eingabefeld

� ����: Unsichtbares Textfeld, Information für den Server (z.B.: AppointmentId)� �!�����: Text-Einfabefeld bei dem die Eingabe versteckt wird

Sonderzeichen werden codiert übertragen (%HexHex; z.B.: ä=%E4),

Leerzeichen als "+" (z.B.: John+Dow).

� Auswahlfelder:� ����I)��: Wert wird nur übertragen wenn er gesetzt ist (als name=on, z.B.:

flash=on), mit ����I� kann eine Checkbox vorselektiert werden.� �!��: Wert wird nur übertragen wenn er gesetzt ist (value wenn angegeben

sonst "on"), es kann nur ein Wert aus einer Gruppe (gleicher Name) ausgesucht werden, mit ����I� kann eine Vorselektion erfolgen.

� ������: Dropdown-Element, als Wert wird der ausgewählte (value der Option wenn angegeben sonst der Text) übertragen wobei mit ������� eine Vorauswahl getroffen werden kann (sonst erstes Element).

� Absenden:� ��)"��: Erzeugt einen Button, Text kann mit �!��� gesetzt werden, wird auch

ein �!"� gegeben so wird das Name/Wert-Paar mitübertragen (sinnvoll wenn mehrere Buttons in eine Formular).

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 12�������������� ��������������

��������������������� ������

HttpServlet

� protected Methoden:� ����/�����/�����/�����/������.������������������.�������������������

� ����-��-��-��-���.������������������.�������������������

� ����.�!.�!.�!.�!�.������������������.�������������������

� ���������������������������������.������������������.�������������������

� ���� ��� ��� ��� ����.������������������.�������������������

� ���� �� �� �� ���.������������������.�������������������

� ����,�!��,�!��,�!��,�!���.������������������.�������������������

� �����������.������������������.�������������������

- Leitet HTTP-Anfragen auf die entsprechenden Methoden um.

� public Methoden:� ������������������������������������������

- Ruft die protected service Methode auf

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 13�������������� ��������������

��������������������� ������

Beispiel

�!�I!���!�I!���!�I!���!�I!�� ,��� !�I@

�"�����"�����"�����"���� A!�!&��&B@�"�����"�����"�����"���� A!�!�&�������&����������������@�"�����"�����"�����"���� A!�!�&�������&����&B@

��)�����)�����)�����)��� ��!����!����!����!�� .����*��������������������������� .����������M��)�����)�����)�����)��� ������������ �-���.���������������������

.���������������������������������������������� ����������������������������M���&��� ������,����H����2��"�H�@ ����*��������5���&���*�������@���&��������

HE.,31FE.�(/FE,�,1�F.����*���E2,�,1�FE2.�(/FE+�/NFHLHE.8F.����*���OE2.8FHLHE2+�/NFE2.,31FH

�@���&�������@

PP

���&��� ������,����H����2��"�H�@ ����*��������5���&���*�������@���&��������

HE.,31FE.�(/FE,�,1�F.����*���E2,�,1�FE2.�(/FE+�/NFHLHE.8F.����*���OE2.8FHLHE2+�/NFE2.,31FH

�@���&�������@

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 14�������������� ��������������

��������������������� ������

Lebenszyklus

� Engine lädt Servlet-Klasse und erzeugt ein Exemplar• alle Variablen werden genau einmal initialisiert

• alle Variablen bleiben aktiv, solange das Servlet-Exemplar existiert

� Mehrere Web-Browser (=Clients) fordern das Servlet an• Request wird vom Web-Server an Servlet-Engine und von dieser weiter

zum entsprechenden Servlet gesandt

� Engine erzeugt pro Request einen Thread • jeder Thread behandelt Request+Response des jeweiligen Clients

• jeder Thread hat Zugriff auf die Instanzvariablen des Servlets

� Servlet-Engine bestimmt, wann Servlets entladen werden• Servlet gibt Ressourcen frei und speichert persistenten Zustand

Servlet

Client 1

Client 2 WebServer & Servlet-Engine

Servlet InstanceServlet Thread 1

Servlet Thread 2

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 15�������������� ��������������

��������������������� ������

Lebenszyklus

� init(ServletConfig)• Variablen initialisieren, Ressourcen anfordern

� service(HttpRequest, HttpResponse)• doGet(HttpRequest, HttpResponse)• doPost(HttpRequest, HttpResponse)

• doPut(HttpRequest, HttpResponse)

• ...

� destroy()• Ressourcen freigeben

• Eventuell Zustand speichern

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 16�������������� ��������������

��������������������� ������

Sitzungen (Sessions)

� Probleme• HTTP ist ein nicht sitzungsorientiertes Protokoll

• Wenn der eBusiness-Kunde einen Artikel in den Einkaufskorb legt, woher weiß der Server, was schon im Einkaufskorb ist?

• Wenn der Kunde seine Online-Einkaufstour beendet, woher weiß der Server, welcher Einkaufskorb zu welchem Kunden gehört?

� Lösungen• Cookies

• URL mit Parameter• Versteckte HTML-Formular-Felder

� Unterstützung• Servlets bieten ein „Higher Level API“

• HttpSession

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 17�������������� ��������������

��������������������� ������

Sitzungen (Sessions) API

� HttpSession� .���������� E.�����������������F&������������

- Liefert das aktuelle Session-Objekt, oder erzeugt ein neues wenn noch keines existiert.

� .���������� E.�����������������F&�����������)�����

- c = true: neues Session-Objekt anlegen wenn noch keines existiert.

- c = false: null liefern wenn noch kein Session-Objekt existiert.

� �)A������(����)�����������!"��

- Liefert das Objekt mit dem angegebenen Namen oder null falls es nicht existiert.

� ������(����)�����������!"���)A�����

- Speichert das gegebene Objekt unter dem gegebenen Namen.

- Existiert ein Name bereits, wird das Objekt überschrieben

- Existiert ein Name bereits und o==null, so wird das Objekt entfernt

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 18�������������� ��������������

��������������������� ������

Beispiel Interaktion 1/2

�!�I!���!�I!���!�I!���!�I!�� !�&AI�&���&���8@�"�����"�����"�����"���� A!�!&��&B@�"�����"�����"�����"���� A!�!�&�������&����������������@�"�����"�����"�����"���� A!�!�&�������&����&B@

��)�����)�����)�����)��� ��!����!����!����!�� �����!�������������������������� .����������M

��)�����)�����)�����)��� ������������ �-���.���������������������.����������������������

������������������������ �����������M

����*��������5���&���*�������@.�������������5���&������������@�������!��5�����������&���(����)����H�������H�@���������5�����������&��� !�!"�����H�������H�@���&���(����)����H�������H�����@���&��� ������,����H����2��"�H�@���&��������HE.,31FH�@���&��������HE.�(/FE,�,1�F�����!�����E2,�,1�FE2.�(/FH�@���&��������HE+�/NFH�@

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 19�������������� ��������������

��������������������� ������

Beispiel Interaktion 2/2

�������� ��!��55����66���55�����M���&��������H ��!������������������;H�@

P���������������� �������� ��!��55����QQ�!��&���!��������M���&��������HN������������;HL����@���&��������HE+�F�����!��!������4H�@

P���������������� M���&��������HN����������!�;HL�!���@���&��������HE+�F!������;HL����@���&��������HE+�F�����!������!�����!�!��4H�@

P���&��������HEG��33�,.�/5RH-�,RHFH�@���&��������HN����������;E�' 0,,N �5RH,�S,RH

'(3�5RH�������RHFH�@���&��������HE�' 0,,N �5RH�0+3�,RH%(10�5RH���RHFH�@���&��������HE2G��3FE2+�/NFE2.,31FH�@���&�������@

PP

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 20�������������� ��������������

��������������������� ������

Installieren eines Servlets (Kontext einrichten)

� Kontext: Repräsentation einer Webapplikation� http://localhost:8080/admin/frameset.jsp

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 21�������������� ��������������

��������������������� ������

Installieren eines Servlets (Kontext einrichten)

� Context Properties (1/2):• Cookies:

- True : Wenn möglich (Client) Cookies zur Session Identifikation benutzen- False: URL rewriting benutzen

• Cross Context:- True: Zugriff auf andere Kontexte erlaubt- False : Nicht erlaubt (Sicherheit!)

• Debug Level: 0, 1, ..., 9- Je höher die Nummer um so detailierter die Ausgaben

• Document Base: Pfad zu den Dokumenten am Server- Relativ zu CATALINA_HOME\webapps

- Absolut

• Override:- True: Übergehen der DefaultContext Einstellungen des Hosts

- False : Hosteinstellungen nicht übergehen

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 22�������������� ��������������

��������������������� ������

Installieren eines Servlets (Kontext einrichten)

� Context Properties (2/2):• Path: Pfad zu diesem Servlet relativ zum Hostnamen

- Jeder Kontext muss einen eindeutigen Pfad haben- Beispiel:

� Ziel: www.ssw.uni-linz.ac.at/test� Path: /test

• Reloadable:- True: Automatisch neu laden bei Änderung der class-Dateien im "WEB-

INF\classes" und "WEB-INF\lib" - Verzeichnis- False : Keine Überwachung der Dateien

• Use Naming:- True: JNDI für dieses Servlet aktivieren (Java2 Enterprise Edition)- False : JNDI nicht aktivieren

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 23�������������� ��������������

��������������������� ������

Installieren eines Servlets (Kontext enrichten)

� Loader Properties:• Debug Level: 0, 1, .., 9

• Reloadable: - True: Automatisch neu laden bei Änderung der class-Dateien im "WEB-

INF\classes" und "WEB-INF\lib" - Verzeichnis- False : Keine Überwachung der Dateien

� Session Manager Properties:• Debug Level: 0, 1, .., 9• Session ID Initializer:

- org.apache.catalina.session.StandardManager: speichert aktive Sessions

- org.apache.catalina.session.PersistentManager� Aktive, im Lehrlauf befindliche Sessions auslagern� Sessions über Tomcat-Neustarts hinweg speichern

• Maximum Active Sessions: - Maximale Anzahl der aktiven Sessions- Unlimitiert: -1

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 24�������������� ��������������

��������������������� ������

Installieren eines Servlets (Kontext Beispiel)

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 25�������������� ��������������

��������������������� ������

Installieren eines Servlets (Anlegen der Verzeichnis se)

Alle benötigeten Klassen mit korrekter Verzeichnisstruktur

web.xml

Document Base

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 26�������������� ��������������

��������������������� ������

Installieren eines Servlets (web.xml 1/3)

<?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><!– Allgemeine Beschreibung --><display-name> Name der Anwendung</display-name><description> Beschreibung der Anwendung</description><!– Kontext Parameter die man aus dem Servlet (oder der JSP Seite) über

�������!"�5HTH��!�!"@�!�!" 5���������� ��������&������� !�!"������!"��@abfragen kann.

--><context-param><param-name> Name des Parameters</param-name><param-value> Wert des Parameters</param-value><description> The Beschreibung des Parameters</description>

</context-param>

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 27�������������� ��������������

��������������������� ������

Installieren eines Servlets (web.xml 2/3)

<!– Beschreibung der Servlets dieser Web Anwendung.Jedem Servlet können Parameter mitgegeben werden die über�������!"�5HTH��!���@�!���5���������� �������&������� !�!"������!"��@abgefragt werden können.

--><servlet><servlet-name> Interner Name des Servlets</servlet-name><description> Beschreibung des Servlets</description><servlet-class> Voll qualifizierter Klassenname</servlet-class><init-param>

<param-name> Name des Parameters</param-name><param-value> Wert des Parameters</param-value>

</init-param><!–Servlet automatisch mit Tomcat starten, die Zahl gibt die Reihenfolge

an in der die Servlets gestartet werden. Wenn keine spezielleReihenfolge benötigt wird genügt auch "<load-on-startup/>"

--><load-on-startup> Zahl</load-on-startup>

</servlet>

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 28�������������� ��������������

��������������������� ������

Installieren eines Servlets (web.xml 3/3)

<!– Festlegen unter welchem Namen das Servlet erreichbar sein soll. --><servlet-mapping><servlet-name> Interner Name des Servlets</servlet-name><url-pattern> Offizieller Name des Servlets</url-pattern>

</servlet-mapping>

<!– Festlegen des standard-Timeouts einer Sitzung in Minuten.Kann vom Servlet über.���������� ���5T@��� ���&���3!���!�����������!���@ abgefragt und über������3!���!�����������!������@ verändert werdenverändert werden.

--><session-config><session-timeout> Minuten</session-timeout>

</session-config>

</web-app>

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 29�������������� ��������������

��������������������� ������

Installieren eines Servlets (web.xml Beispiel)

<web-app><display-name> SWE2</display-name><description> Lecture SWE2, Institute SSW</description><servlet>

<servlet-name> InteractService</servlet-name><description> Simple user interaction sample.</description><servlet-class> at.jku.ssw.swe2.Interact</servlet-class><load-on-startup/>

</servlet><servlet-mapping><servlet-name> InteractService</servlet-name><url-pattern> /Interact</url-pattern>

</servlet-mapping><session-config><session-timeout> 30</session-timeout> <!-- 30 minutes -->

</session-config></web-app>

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 30�������������� ��������������

��������������������� ������

Beispiel Ausführung

1

2

3

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 31�������������� ��������������

��������������������� ������

JSP vs. Servlet

� JSP• Strikte Trennung zwischen

Erscheinungsbild (HTML) und Logik (Java Komponenten)

• HTML-Code wie gewohnt verwenden.

• Veränderung des Aussehens ohne Veränderung des dynamischen Inhalts

• Änderung der JSP Seite hat automatische Übersetzung zur Folge

• ASP ähnlich

� Servlets• HTML Code wird im Servlet

generiert.

� JSP = JavaServer Pages� JSP Datei wird vom WebServer einmal in ein Servlet übersetzt � Servlets aber auf einer abstrakteren Ebene programmieren

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 32�������������� ��������������

��������������������� ������

Model 1 Architecture

� Request werden direkt von der JSP-Seite behandelt

� JSP-Seite übernimmt Steuerung und Generierung der Antwort

� Datenzugriff sollte in Komponenten (JavaBeans) ausgelagert werden

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 33�������������� ��������������

��������������������� ������

Model 2 Architecture

� Serverseitige Realisierung des Model/View/Controller Pattern

� Steuerung wird durch ein Servlet übernommen

� Generierung des Outputs wird an JSP-Seiten delegiert� Modelkomponenten werden von Servlet an JSP-Seiten weitergegeben

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 34�������������� ��������������

��������������������� ������

JSP Beispiel

E��"�FE��"�FE��"�FE��"�FE��!FE�����FK� :E2�����FE2��!FE��!FE�����FK� :E2�����FE2��!FE��!FE�����FK� :E2�����FE2��!FE��!FE�����FK� :E2�����FE2��!FE)��FE)��FE)��FE)��F

E7U�!���"����5HE7U�!���"����5HE7U�!���"����5HE7U�!���"����5HA!�!&����A!�!&����A!�!&����A!�!&����&B�&B�&B�&B�A!�!&����A!�!&����A!�!&����A!�!&����&BH7F&BH7F&BH7F&BH7F

E7E7E7E7������������ "!�5:99@"!�5:99@"!�5:99@"!�5:99@22����K!�!���O22����K!�!���O22����K!�!���O22����K!�!���O 7F7F7F7FE FK� ,���E FK� ,���E FK� ,���E FK� ,���==== VVVVWWWW���������������� )��)��)��)�� E75"!�7FE75"!�7FE75"!�7FE75"!�7FE2 FE2 FE2 FE2 FE7����E7����E7����E7���������������� �59@�E"!�@�LL�M7F�59@�E"!�@�LL�M7F�59@�E"!�@�LL�M7F�59@�E"!�@�LL�M7FE75�7FE75�7FE75�7FE75�7FE7PE7PE7PE7P

������������������������!��������!��������!��������!�������� 5555/!��G��"!�&���/!������!����/!��G��"!�&�.��,/!��G��"!�&���/!������!����/!��G��"!�&�.��,/!��G��"!�&���/!������!����/!��G��"!�&�.��,/!��G��"!�&���/!������!����/!��G��"!�&�.��,����1��!��&-��3('�&���"!�����1��!��&-��3('�&���"!�����1��!��&-��3('�&���"!�����1��!��&-��3('�&���"!����� /!�����@/!�����@/!�����@/!�����@7F7F7F7FE FE FE FE F.�������.�������.�������.������� /!��";/!��";/!��";/!��"; E75E75E75E75!��������!��������!��������!�������� 7F7F7F7FE2 FE2 FE2 FE2 FE2)��FE2)��FE2)��FE2)��FE2��"�FE2��"�FE2��"�FE2��"�F

Template-Text

JSP-Element

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 35�������������� ��������������

��������������������� ������

Installieren des JSP Beispiels

� JSP Datei in einen Kontext kopieren und ausführen.

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 36�������������� ��������������

��������������������� ������

JSP Syntax 1/3

� Direktiven• <%@ ... %>: Eigenschaften & Includes

- Erlaubt die Einstellung seitenbezogener Optionen.- Kann mehrmals vorkommen.

- Inkludiert eine externe Datei.

E7U�!���!���!��5HA!�!H�"����5HA!�!&����&B�A!�!&����&BH�������,���5H����2��"�H&&&

7F

E7U����������5H����/!���&���H7F

E7U�!���)���5H2�!���)���H������5HI��>�!"�H

7F

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 37�������������� ��������������

��������������������� ������

JSP Syntax 2/3

� Skriptelemente:• <% ... %>: Skriptlet

- Beliebiger Quelltext (Anweisungen, Variablendeklaration).

• <%! ... %>: Deklarationen- Variablen- und Methodendeklarationen

• <%= ... %>: Ausdrücke- Ausdruck wird in einen String konvertiert und in den Seitentext eingefügt.

- Beispiele: <%5�%>, <%=���/!����%>, <%="�������%>

- Achtung, kein abschließendes Semikolon.

� Kommentare:• <%-- ... --%>: Kommentar

- Nur in der JSP Datei enthalten, nicht aber im Ergebnis.

• In Skriptelementen normale Java Kommentare (/* */ und //)

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 38�������������� ��������������

��������������������� ������

JSP Syntax 3/3

� Aktionselemente:� EA��;���+�!�F

- JavaBean-Komponente verfügbar machen.

� EA��;��� �������F

- Wert einer JavaBean-Eigenschaft abfragen.

� EA��;��� �������F

- Wert von JavaBean-Eigenschaften festlegen.

� EA��;������F

- Einfügen einer anderen JSP-Seite.

� EA��;����!�F

- Kontrolle an eine andere JSP-Seite weitergeben.

� EA��;�!�!"F

- Parameterwerte an durch <jsp:include> oder <jsp:forward> verwendete Seiten weitergeben.

EA��;���+�!� �5H����!�>�!"�H�����5H-�������)������H��!��5H<�!�����!"�H2F

EA��;��� ������� �!"�5H����!�>�!"�H��������5HBH2F

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 39�������������� ��������������

��������������������� ������

JSP XML-Syntax

� <jsp:declaration> ... <jsp:declaration> � <%! ... %>� <jsp:expression> ... <jsp:expression> � <%= ... %>� <jsp:scriptlet> ... <jsp:scriptlet> � <% ... %>� ...

� Regeln:• Einfache Anführungszeichen entsprechen doppelten.• Leerzeichen bei Zuweisungen von Attributwerten sind nicht erlaubt.

• JSP und XML Syntax darf in einer Seite nicht gemischt werden.

• Alle Tags sind case sensitive.

� Gesamte Syntax:• JSP_Syntax_card12.pdf• http://java.sun.com/products/jsp/docs.html

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 40�������������� ��������������

��������������������� ������

Trennung Logik / Aussehen über Beans

EA��;���+�!��5H+�!�=����!�>�!"�H�����5H�!���!���!���!�� Q �������Q �������Q !�����!����HM ��!��5HX�!����>������ <�!�����!"�H

#����5HX�!����>������ <�!�����!"�H$Q )�!�'!"�5HX�!����>������ <�!�����!"� Q E7OT 7FH

����5HX�!����>������ <�!�����!"�HQ ����5HX�!����>������ <�!�����!"�HP

ME2F QF������� ���"���� E2A��;���+�!�F P

EA��;��� ������� �!"�5H+�!�=����!�>�!"�H��������5H �������='!"�H2F

EA��;��� ������� �!"�5H+�!�=����!�>�!"�H���������5HBHQ��������5H �������='!"�H#�!�!"5H !�!"����='!"�H$Q��������5H �������='!"�H�!���5H������ QE7OT 7FH�

2F {} … Gruppierung| … Alternative[] … Option

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 41�������������� ��������������

��������������������� ������

Beispiel: Bean

E7U�!���!���!���!�� �!���!���!���!���!���!���!���!��5HA!�!H�������,����������,����������,����������,���5H����2��"�H7FE��"�FE��!FE�����FK� :E2�����FE2��!FE)��FEA��;���+�!�A��;���+�!�A��;���+�!�A��;���+�!�

����5H����+�!�H��������������������5H�!��H��!����!����!����!��5H+�!��&,���H2FEA��;��� �������A��;��� �������A��;��� �������A��;��� ������� �!"��!"��!"��!"�5H����+�!�H��������������������������������5HBH2F1��>�� ����!)�;EA��;��� �������A��;��� �������A��;��� �������A��;��� ������� �!"��!"��!"��!"�5H����+�!�H��������������������������������5H����H2FE���"�!"�5H����H!�����5H)�!�&A��H"����5H���HF

E���������5H����H�!"�5H����H2FE���������5H��)"��H�!"�5H!�����H�!���5H�����H2F

E2���"FE2)��FE2��"�F

�!�I!���!�I!���!�I!���!�I!�� +�!��@��)�����)�����)�����)��� ��!����!����!����!�� ,���M����!������!������!������!�� ����������@��)�����)�����)�����)��� ������������ ���,���������� �����M

����������������&���� 5����@P��)�����)�����)�����)��� ���������,�����M������������������������ ����@P

P

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 42�������������� ��������������

��������������������� ������

Beispiel: Bean

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 43�������������� ��������������

��������������������� ������

Trennung Logik / Aussehen durch forward und redirec t

� Anwendung zum Abfragen eines gültigen Passwortes (Anforderung Länge >= 8 Zeichen)

� pass.jsp:

E7U�!���!���!���!�� �!���!���!���!���!���!���!���!��5HA!�!H�������,����������,����������,����������,���5H����2��"�H7FE��"�FE��!FE�����F !�����E2�����FE2��!FE)��FEA��;���+�!�A��;���+�!�A��;���+�!�A��;���+�!� ����5H�!��H��������������������5H�������H

��!����!����!����!��5H+�!��& !�����H2FE7�������� ��!��&�������!��>���66O�!��&��%!�����M7F

!������ ����� �6��"�@��� �>� I��>�&E)�FE7P7F+���� !������ �����)�� �"��&JV�������;E���"�!"�5H����H!�����5H�!��!��&A��H"����5H����HF

E���������5H����H�!"�5H����H�!���5HE75��!��&�������!��>����4�!��&��� !�������;HH7FH2F

E���������5H��)"��H�!"�5H!�����H�!���5H�����H2FE2���"FE2)��FE2��"�F

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 44�������������� ��������������

��������������������� ������

Trennung Logik / Aussehen durch forward und redirec t

� validate.jsp:

E7U�!���!���!���!�� �!���!���!���!���!���!���!���!��5HA!�!H7F

EA��;���+�!�A��;���+�!�A��;���+�!�A��;���+�!� ����5H�!��H��������������������5H�������H��!����!����!����!��5H+�!��& !�����HFEA��;��� �������A��;��� �������A��;��� �������A��;��� ������� �!"��!"��!"��!"�5H�!��H��������������������������������5H�!�����H

�!�!"�!�!"�!�!"�!�!"5H����H2FE2A��;���+�!�A��;���+�!�A��;���+�!�A��;���+�!�F

E7�������� ��!��&��%!�����M��������&�����������H��!�&A��H�@

P���������������� M7F

EA��;����!�A��;����!�A��;����!�A��;����!� �!���!���!���!��5H�!��&A��H2FE7

P7F

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 45�������������� ��������������

��������������������� ������

Trennung Logik / Aussehen durch forward und redirec t

� ready.jsp:

E7U�!���!���!���!�� �!���!���!���!���!���!���!���!��5HA!�!H�������,����������,����������,����������,���5H����2��"�H7F

E��"�FE��!FE�����F !�����E2�����FE2��!FE)��F/!�I� �6��"�@� !� �6��"�@���� !������&E2)��FE2��"�F

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 46�������������� ��������������

��������������������� ������

JSPs in Servlets nutzen

� Warum?• Logik in Servlets.

• HTML in JSPs.• Unterstützung durch entsprechende Werkzeuge.

� Wie?� A!�!�&�������&�������/���!�����

= E������� ������F&����������/���!������������!)����� !���

= E������� ������F&���'!"�/���!�������������!"��

= E��������������F&����������/���!�������������!���

� �����������������������������������������������

- Kontrolle behalten

� �������!���������������������������������������

- Kontrolle weitergeben

Browser

Servlet

JSP 1

includeget/post

response

JSP 2

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 47�������������� ��������������

��������������������� ������

Beispiel RequestDispatcher

��)�����)�����)�����)��� ��!����!����!����!�� ,��������������������������� .���������� M��)�����)�����)�����)��� ������������ �-���.����������������� ����.������������������ ����M�)A����5H'�� ��� ����!���� ,���&H@���&��� ������,����H����2��"�H�@���&���(����)����H����H���@������������ M���������� ��������&����������/���!������H2K� 2����&A��H�&���������������@

P�!����!����!����!��� ��������������M�������&���3���!�����@PP

P

E��"�FE��!FE�����F�������/���!����� ,���E2�����FE2��!FE)��F%!�����H����H;E75�������&���(����)����H����H�7FE2)��FE2��"�F

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 48�������������� ��������������

��������������������� ������

Trennung Logik / Aussehen über "taglibs" 1/5

� Tag: <library:tag attribute ...� Benutzerdefinierte Aktionen� javax.servlet.jsp.tagext� Kompiliert in WEB-INF/classes/� Tag Library Descriptor

BodyTag

BodyTagSupport

Tag SimpleTag

JspTag

IterationTag

TagSupport

SimpleTagSupport

TagExtraInfo

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 49�������������� ��������������

��������������������� ������

Trennung Logik / Aussehen über "taglibs" 2/5

�!�I!���!�I!���!�I!���!�I!������@ �"����&&&�"����&&&�"����&&&�"����&&&��)�����)�����)�����)��� ��!����!����!����!�� ,���,!������������������������� +��,!��������M����!������!������!������!�� �����������@��)�����)�����)�����)��� ������������ ���������������������M����������������&�����5�����@P��)�����)�����)�����)��� ������������ ���!��,!��������������������������� K�����������M�!�� ������&���(����)����H������H�������@�!�� ������&���(����)����H!��H������������� /!�����@������������������������ �%(1Y+�/NY+0GG���/@

P��)�����)�����)�����)��� ������������ ���,!��������������������������� K�����������M

������������ M�������� ����+�� ��������O5�����������������M��� ������������&���������+�� ��������&������������@

PP�!����!����!����!��� ����������������MP���!������!������!������!��� M

�������� ����+�� ��������O5��������������������+�� ��������&���!�+����@

P������������������������ �%(1Y (-�@

PP

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 50�������������� ��������������

��������������������� ������

Trennung Logik / Aussehen über "taglibs" 3/5

�!�I!���!�I!���!�I!���!�I!�� ����@

�"�����"�����"�����"���� A!�!�&�������&A��&�!����&,!�/!�!@�"�����"�����"�����"���� A!�!�&�������&A��&�!����&,!�����!����@�"�����"�����"�����"���� A!�!�&�������&A��&�!����&%!��!)������@

��)�����)�����)�����)��� ��!����!����!����!�� ,���,!�����!���������������������������� ,!�����!����M

��)�����)�����)�����)��� %!��!)������#$���%!��!)�������,!�/!�!!�!�M������������������������ ������������ %!��!)������#$M

������������ %!��!)�������H������H�H������H������������������%!��!)������&'��,�/��

������������ %!��!)�������H!��H�HA!�!&����&/!��H������������������%!��!)������&'��,�/�

P@P

P

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 51�������������� ��������������

��������������������� ������

Trennung Logik / Aussehen über "taglibs" 4/5

E4�"��������5H:&9H�������5H���=JJZD=:H4FEO/� ,N ��!���) 0+1� H=22���3���������"�����&22/,/K� ,!�1�)�!��:&:22�'HH����;22A!�!&���&��"2A8��2��2��)=A���!���)�!��Y:Y:&�HFE�!���)F

E���)�������F:&9E2���)�������FEA���������F:&:E2A���������FE������!"�F����E2������!"�FE���F2������)E2���FE�!�F

E�!"�F!��E2�!"�FE�!���!��F����&,���,!�E2�!���!��FE�����!��F����&,���,!�����!����E2�����!��FE)���������FK� E2)���������FE����F&&& E2����FE!����)���F

E�!"�F�����E2�!"�FE�������F�!���E2�������FE2!����)���F

E2�!�FE2�!���)F

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 52�������������� ��������������

��������������������� ������

Trennung Logik / Aussehen über "taglibs" 5/5

E7U�!���)�!���)�!���)�!���) ������������5H2*�+=�'G2���2������)&��H������������������������5H����H7FE����;!��FE2����;!��FE)�FE����;!��FE75������7FE75!��7FE2����;!��FE)�FE����;!�� �����5H.!���OHF

E75������ 7FE75!�� 7FE2����;!��FE)�FE����;!��FE75������ 7FE75!�� 7FE2����;!��F

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 53�������������� ��������������

��������������������� ������

Tagfiles

� Seit JSP 2.0 (Tomcat 5)� Erweiterung

• tag: JSP Syntax

• tagx: XML Syntax

� Ablegen in WEB-INF/tags oder einem Unterverzeichnis

E7U�!���) ������5H�H�!���5H2*�+=�'G2�!��2H7FE��"�FE��!FE�����F,!�:E2�����FE2��!FE)��F

E�;���� 2FE2)��FE2��"�F

E7U�!�����������5H����!����,���H7F.!���O.���I!��)����)����K� =,���������&

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 54�������������� ��������������

��������������������� ������

JSP Implizite Objekte

Objekt� ServletRequest: �������� ServletResponse: ��������

• Wird normalerweise nicht benutzt.

� PageContext: �!�� ������� HttpSession: �������� ServletContext: !�����!����� JspWriter: ���� ServletConfig: ������� Object: �!��

• Wird normalerweise nicht benutzt.

� Throwable: ���������

Scope� Request� Page

� Page� Session� Application� Page� Page� Page

� Page

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 55�������������� ��������������

��������������������� ������

Zusammenfassung

� Dynamische Webseiten� Sitzungen� JSP ~ ASP (nicht ASP.NET)� JSP: Trennung von Aussehen und Implementierung� JSP/Servlet vs. Applet

• Ausführung am Server, Ergebnis: HTML Seite

• Applets: Ausführung am Client, Ergebnis: interaktives Programm

� JSP ist abstraktes Servlet

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 56�������������� ��������������

��������������������� ������

Konfiguration

� Tomcat (Version 5)• http://jakarta.apache.org/tomcat/

• Rollen und Benutzer anlegen inCATALINA_HOME\conf\tomcat-users.xml

E4�"��������5[:&9[�������5[���=J[4FE��"�!�=�����FE���� �����!"�5H��"�!�H2FE���� �����!"�5H"!�!���H2FE���� �����!"�5H!"��H2FE���� �����!"�5H��"�!�H�!�����5H��"�!�H�����5H��"�!�H2FE����

�����!"�5H"�H�!�����5H!"��H�����5H!"���"!�!���H

2FE2��"�!�=�����F

E���������!"�5H"�H�!�����5H!"��H�����5H!"���"!�!���H

2F

E���� �����!"�5H"!�!���H2FE���� �����!"�5H!"��H2F

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 57�������������� ��������������

��������������������� ������

Konfiguration

� Classpath• CATALINA_HOME\common\lib\servlet-api.jar

• CATALINA_HOME\common\lib\jsp-api.jar

� Optional• Apache ANT (Version 1.6.0)

- http://ant.apache.org/

- Kopieren � Von CATALINA_HOME\server\lib\catalina-ant.jar� Nach ANT_HOME\lib\