Servlets/JSP - javalink.ch
Transcription
Servlets/JSP - javalink.ch
FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren Servlets/JSP Servlets/JSP • Inhalt 1. Grundlagen 1. Einführung 2. Programmieren für das Web 2. Servlets 3. JSP (Java Server Pages) 4. Beispiel Country 1. Dateneingabe von Benutzer 2. Parameterübergabe 3. Auswerten eines Formulars Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets/JSP Teil1 Folie 1 Lernziele • Sie haben einen Überblick über die Möglichkeiten der Web-Programmierung • Sie wissen was Servlets/JSP sind und wie sie funktionieren • Die Möglichkeiten der Datenübergabe zwischen Client und Server sind Ihnen bekannt Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets_JSP_Teil1-P.ppt, V20 2005 © Diego Schmidlin Servlets/JSP Teil1 Folie 2 Teil 1 Seite 1 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren Servlets/JSP 1.1 Einführung • Sie geben auf einer Web-Seite eine Stadt ein und erhalten eine Liste der Hotels (dynamisch) • Sie können zu einem ausgewählten Hotel mehr Informationen abrufen – Anzahl freie Zimmer (dynamisch) – Preis pro Zimmer (statisch/dynamisch) • Nachdem Sie ein Hotel gewählt haben, reservieren Sie ein Zimmer – Angabe zur Ihrer Person (dynamisch) – Anzahl Nächte (dynamisch) • Ihre Reservierungs-Bestätigung wird angezeigt (dynamisch) Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets/JSP Teil1 Folie 3 1.2 Programmieren für das Web (1) • Bei all diesen Vorgängen geht es um dynamische Inhalte von Web-Seiten • Dynamisch auf Client-Seite – Web-Browser • Applet eingebettet in HTML-Code – Download etwas aufwändiger – Bedienung der Benutzeroberfläche entspricht Applikation – Kommunikation nur mit Herkunfts-Server möglich (Security) • Skripts in HTML-Seite – Sehr einfache Programmierung – Keine zusätzliche lange Download-Zeit – Benutzer hat Einsicht in Source-Code Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets_JSP_Teil1-P.ppt, V20 2005 © Diego Schmidlin Servlets/JSP Teil1 Folie 4 Teil 1 Seite 2 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren Servlets/JSP 1.2 Programmieren für das Web (2) • Dynamisch auf der Server-Seite – Web-/Application-Server • Formular (HTML) auf Client-Seite wird ausgefüllt und an Server gesendet • Daten (Inhalt) werden auf der Server-Seite ausgewertet • Dynamische Inhalte werden generiert • Antwort/Fehlermeldung wird an Client zurückgesendet • Benötigte Software – Web-Server mit Schnittstelle zu Applikationen/Engine • CGI è Perl/PHP • ASP è VB-Script/Java-Script • Servlets è JSP Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets/JSP Teil1 Folie 5 2.1 Funktionsweise (1) • Ein Servlet ist ein Java-Programm, das auf einem Web-Server läuft Bei einem Client Request wird eine service() Message an das Servlet gesendet init() loaded service() Servlet wird gestoppt oder WebServer wir heruntergefahren service() running destroy() dead Servlet wir kreiert wenn der WebServer startet oder die Seite das erste mal aufgerufen wird Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets_JSP_Teil1-P.ppt, V20 2005 © Diego Schmidlin Servlets/JSP Teil1 Folie 6 Teil 1 Seite 3 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren Servlets/JSP 2.1 Funktionsweise (2) • Normalerweise arbeiten alle Clients auf dem selben Servlet-Objekt für eine Web-Page • Instanzvariablen können von mehreren Clients verändert werden – Synchronisation • Beim Initialisieren eines Servlets wird ein Pool von Threads für die Service-Routine eingerichtet – Einer Client-Anfrage wird ein eigener Thread (service()-Methode) zugeordnet – Durch einen Pool von Threads werden Ressourcen geschont Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets/JSP Teil1 Folie 7 2.2 Beispiel import java.io.*; import javax.servlet.*; public class FirstServlet extends GenericServlet { public void service( ServletRequest request, ServletResponse response ) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println( "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " ); out.println( "<html>" ); .... out.println( "</html>" ); out.close(); } } Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets_JSP_Teil1-P.ppt, V20 2005 © Diego Schmidlin Servlets/JSP Teil1 Folie 8 Teil 1 Seite 4 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren Servlets/JSP 2.3 Tomcat • Tomcat – Tomcat: Offizielle Referenzimplementation – Apache Jakarta Projekt. Frei erhältlich. • Nach dem Kompilieren der Klasse, muss diese in ein spezielles Verzeichnis gestellt werden <jakarta-tomcat-Pfad>/webapps/examples/WEB-INF/classes • Die direkte Aktivierung des Servlets lautet: http://localhost:8080/examples/servlet/ServletName • Die Übersetzung von einer URL-Anfrage in die entsprechende Klasse nennt sich Servlet-Mapping und wird vom Servlet-Container übernommen Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets/JSP Teil1 Folie 9 3.1 Übersicht • Eine Java Server Page JSP ist eine HTML-Seite mit eingebettetem JSP-Tags • JSP-Tags sind syntaktische Elemente, ähnlich den HTML-Tags • JSP-Tags markieren Elemente von Java-Code • Aufruf eines JSP-Files – Beim erstmaligen Aufruf eines JSP-Files wird dieses in ein Servlet konvertiert (JSP-Engine) – Das Servlet wird automatisch gestartet – Als Resultat generiert das Servlet eine HTML-Page Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets_JSP_Teil1-P.ppt, V20 2005 © Diego Schmidlin Servlets/JSP Teil1 Folie 10 Teil 1 Seite 5 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren Servlets/JSP 3.2 Architektur • Architektur eines JSP-fähigen Webservers Browser HTTP-Request HTTP-Response Web-Server Servlet-Container kompilierte Servlets generierte Servlets JSP-Engine Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 JSPs Servlets/JSP Teil1 Folie 11 3.3 Scriptlets • JSP bietet die Möglichkeit, Fragmente von Java-Code einzubetten • JSP Scriptlets <% %> – Syntax: <% Statement %> – Beispiel: <% out.println("Hallo, von JSP"); %> – Ausgabe: Hallo, von JSP Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets_JSP_Teil1-P.ppt, V20 2005 © Diego Schmidlin Servlets/JSP Teil1 Folie 12 Teil 1 Seite 6 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren Servlets/JSP 3.4 Ausdrücke • In JSP können Java-Ausdrücke mit <%= ausgewertet werden %> – Syntax: <%= Ausdruck %> – Beispiel: <% double nettoSumme = 102.5; %> Nettobetrag beträgt CHF <%= nettoSumme %> – Ausgabe: Nettobetrag beträgt CHF 102.5 Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets/JSP Teil1 Folie 13 3.5 Packages • Klassen und Packages importieren – In Java import package1.*; import package2.* – In JSP <%@page import="package1.*,package2.*" %> – oder <%@page import="package1.*" %> <%@page import="package2.*" %> Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets_JSP_Teil1-P.ppt, V20 2005 © Diego Schmidlin Servlets/JSP Teil1 Folie 14 Teil 1 Seite 7 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren Servlets/JSP 3.6 Variablen/Methoden • Mit dem Scriptlet-Tag <% %> lässt sich direkt ausführbarer Java-Code aufnehmen • Für die Deklaration von Variablen und Methoden ist die Syntax etwas anders <%! %> <%! int memberVariable = 0; static int classVariable = 0; int max(int a, int b) { return a > b ? a : b } %> Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets/JSP Teil1 Folie 15 3.7 Objekte/Aufrufparameter • Vordefinierte Objekte HttpServletRequest request HttpServletResponse response PrintWriter out HttpSession session • Aufrufparameter abfragen – Parameter werden als Name/Wert-Paare empfangen – Auf dem Request-Objekt kann mit der Methode getParameter() abgefragt werden <% String wert = request.getParameter("NAME"); %> Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets_JSP_Teil1-P.ppt, V20 2005 © Diego Schmidlin Servlets/JSP Teil1 Folie 16 Teil 1 Seite 8 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren Servlets/JSP 3.8 Kommentare • In JSP gibt es zwei Kommentartypen – HTML-Kommentare – JSP-Kommentare • HTML-Kommentare <!-- --> – werden unverändert in Ausgabe-Seite übernommen – JSP-Tags sind erlaubt und werden ausgeführt <! - Generiert mit JSP-Engine: <%= application.getServerInfo() %> --> Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets/JSP Teil1 Folie 17 3.8 Kommentare • JSP-Kommentare <%-- --%> – werden nicht in Ausgabe-Seite übernommen – JSP-Tags können so auskommentiert werden <%Dieses JSP-Element wird nicht ausgeführt: <%= application.getServerInfo() %> <! - Dieser HTML-Kommentar verschwindet --> --%> Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets_JSP_Teil1-P.ppt, V20 2005 © Diego Schmidlin Servlets/JSP Teil1 Folie 18 Teil 1 Seite 9 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren Servlets/JSP 3.9 Includes • Vielfach setzen sich JSP-Seiten aus wiederkehrenden Teilen zusammen – z.B. Kopfzeile, die in jeder Seite erscheinen soll • JSP bietet die Möglichkeit, Teile einer Seite aus einer Datei einzufügen (Include) • Dafür gibt es in JSP zwei Möglichkeiten – Include-Direktive – Include-Action Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets/JSP Teil1 Folie 19 3.9.1 Include-Direktive • Bei einer Include-Direktive fügt die JSP-Engine den Inhalt einer Datei direkt in die JSP-Seite ein – Syntax: <%@ include file="Dateiname" %> – Beispiel: Willkommen bei Fasttrade <%@ include file="Footer.jsp" %> – Ausgabe: Willkommen bei Fasttrade Fasttrade Ihr Online-Broker Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets_JSP_Teil1-P.ppt, V20 2005 © Diego Schmidlin Servlets/JSP Teil1 Folie 20 Teil 1 Seite 10 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren Servlets/JSP 3.9.2 Include-Action (1) • Neben der Include-Direktive gibt es auch die Include-Action – Syntax: <jsp:include page="Dateiname" flush="true|false"/> • und <jsp:include page="Dateiname" flush="true|false"> <jsp:param name= "Name" value="value" /> <jsp:param name= "Name" value="value" /> </jsp:include> • Ist flush="true", schickt die Hauptseite vor dem Aufruf der Unterseite die bis dahin erzeugte Ausgabe an den Client Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets/JSP Teil1 Folie 21 3.9.2 Include-Action (2) • Include-Action ohne Parameter – Beispiel: Willkommen bei Fasttrade <jsp:include page="Footer.jsp" flush="true" /> – Ausgabe: Willkommen bei Fasttrade Fasttrade Ihr Online-Broker Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets_JSP_Teil1-P.ppt, V20 2005 © Diego Schmidlin Servlets/JSP Teil1 Folie 22 Teil 1 Seite 11 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren Servlets/JSP 3.9.2 Include-Action (3) • Include-Action mit Parameter – Beispiel: • Datei: IncludeParameter.jsp Schön, dass Sie uns mal wieder besuchen! <BR> Heute ist der <jsp:include page="LocalDate.jsp" flush="true"> <jsp:param name="LOCALE" value="de_DE" /> </jsp:include> Nice to see you again! <BR> Today we have <jsp:include page="LocalDate.jsp" flush="true"> <jsp:param name="LOCALE" value="en_EN" /> </jsp:include> Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets/JSP Teil1 Folie 23 3.9.2 Include-Action (4) • Datei: LocalDate.jsp <%@page import="java.text.*,java.util.*" %> <% String localeName = request.getParameter("LOCALE"); String language = localeName.substring(0, 2); String country = localeName.substring(3, 5); // Passendes Locale holen Locale locale = new Locale(language, country); // Aktuelles Datum holen Date date = new Date(); // Formatieren DateFormat = DateFormat.getDateInstance(DateFormat.LONG, locale); String dateString = date.Format.format(date); %> <%= dateString %> Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets_JSP_Teil1-P.ppt, V20 2005 © Diego Schmidlin Servlets/JSP Teil1 Folie 24 Teil 1 Seite 12 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren Servlets/JSP 3.9.2 Include-Action (5) – Ausgabe: Schön, dass Sie uns mal wieder besuchen! Heute ist der 15. Oktober 2002 Nice to see you again! Today we have October 15, 2002 • Die Datei LocalDate.jsp kann auch direkt aufgerufen werden http://localhost/Beispiele-Skript/LocalDate.jsp?LOCALE=en_EN Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets/JSP Teil1 Folie 25 4.1 Dateneingabe von Benutzer (1) • Dateneingabe von Benutzer in Country.html <html><head> <title>One Input Field</title> </head> <form action="ReadCountry.jsp" method="post"> <p>Enter Your Home Country:<br> <input name="country" type="text" size="30"> <p> <input type="submit" name="Send" value="Send"> <input type="reset" name="Reset" value="Reset"> </p> </form> </body></html> Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets_JSP_Teil1-P.ppt, V20 2005 © Diego Schmidlin Servlets/JSP Teil1 Folie 26 Teil 1 Seite 13 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren Servlets/JSP 4.1 Dateneingabe von Benutzer (2) • Im Formular könnte man an Stelle von post <form action="ReadCountry.jsp" method="post"> auch get verwenden <form action="ReadCountry.jsp" method="get"> • Die eingegebenen Daten werden dann an den URL angehängt • Da die Länge des URL‘s beschränkt ist, und die übertragenen Daten sichtbar sind, sollte stets post verwendet werden Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets/JSP Teil1 Folie 27 4.2 Parameterübergabe • Parameterübergabe Name/Value <input name="country" type="text" size="30"> parameter name parameter value String theCountry = request.getParameter("country"); Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets_JSP_Teil1-P.ppt, V20 2005 © Diego Schmidlin Servlets/JSP Teil1 Folie 28 Teil 1 Seite 14 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren Servlets/JSP 4.3 Auswerten eines Formulars • Auswerten des Formulars in ReadCountry.jsp <html><head><title>Feedback</title></head><body> <% String theCountry = request.getParameter("country"); if (theCountry != null) { theCountry = theCountry.trim(); if (theCountry.equals("")) out.println("You have to enter data!"); else out.println("Hallo, you are from " + theCountry + "!"); } %> <p> <a href = "Country.html">Back</a> </body></html> Abteilung Informatik, Fach Programmieren 2005 © Diego Schmidlin V20 Servlets_JSP_Teil1-P.ppt, V20 2005 © Diego Schmidlin Servlets/JSP Teil1 Folie 29 Teil 1 Seite 15