Servlets - System Software fileGenerische Klassen: javax.servlet • Servlet GenericServlet •...
Transcript of Servlets - System Software fileGenerische Klassen: javax.servlet • Servlet GenericServlet •...
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\