Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Software Engineering Praktikum WS 2002/03

Ähnliche Präsentationen


Präsentation zum Thema: "Software Engineering Praktikum WS 2002/03"—  Präsentation transkript:

1 Software Engineering Praktikum WS 2002/03
Technische Einführung Michael Forster

2 SEP WS 2002/03 - Technische Einführung
Einleitung Idee des Software Engineering Praktikums Selbständiges Lösen einer größeren Aufgabe im Team Selbständiges Einarbeiten in neue Tools & Technologien Tutorials und Dokumentationen lesen „Spielen“ mit den Tools Einführungsaufgabe lösen Ziel dieses Vortrags Überblick über verwendete Technologien Einstieg erleichtern Kein ausführlicher Kurs Weitere Hilfe: SEP-Webseite (demnächst) SEP WS 2002/03 - Technische Einführung

3 SEP WS 2002/03 - Technische Einführung
Aufgabenstellung Inhaltlich: Termin- & Aufgabenverwaltung Überblick: Einführungsvortrag (Letzte Woche) Weitere Details: Lastenheft (Anfang August) Genaue Ausgestaltung: Pflichtenheft Technisch: Web Application Dynamische Webseiten Bedienung mit dem Browser Fragen bitte gleich stellen SEP WS 2002/03 - Technische Einführung

4 SEP WS 2002/03 - Technische Einführung
Überblick Verwendete Technologien HyperText Markup Language (HTML) HyperText Transfer Protocol (HTTP) Java Servlets Java Server Pages (JSP) Java Beans Zusammenspiel Model View Controller (MVC) Design Pattern Java Web Applications SEP WS 2002/03 - Technische Einführung

5 HyperText Markup Language (HTML)
Sprache, in der Webseiten geschrieben sind: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Eine Beispielseite</title> </head> <body> <h1>Überschrift</h1> <p>Ein ziemlich sinnfreier Text, der nur demonstrieren soll, was HTML ist</p> </body> </html> Als bekannt vorausgesetzt Diverse Tutorials und Dokumentationen auf der SEP-Webseite DTD-Konformer Code Validator SEP WS 2002/03 - Technische Einführung

6 HyperText Transfer Protocol (HTTP)
Kommunikationsprotokoll zwischen Browser und WWW-Server WWW- Browser (Client) WWW- Server HTTP Request HTTP Response HTTP Request HTTP Response SEP WS 2002/03 - Technische Einführung

7 HTTP: Gesendete Informationen
HTTP Request URL Methode (GET/POST/…) Body (z. B: Parameter bei POST, Datei-Uploads…) Diverse andere Informationen (Header) HTTP Response Angeforderte Datei (HTML, GIF, …) SEP WS 2002/03 - Technische Einführung

8 SEP WS 2002/03 - Technische Einführung
Servlets Servlet Container WWW- Browser (Client) WWW- Server Datei-system Servlet HTTP Request HTTP Request HTTP Response HTTP Response SEP WS 2002/03 - Technische Einführung

9 SEP WS 2002/03 - Technische Einführung
Aufruf eines Servlets Anfrage: HTTP Request URL in Browser eingeben (GET) HTML Link klicken (GET) HTML Formular abschicken (GET/POST) Ergebnis: HTTP Response Wird vom Browser angezeigt Evtl. automatisch weitere Requests, etwa Bilder SEP WS 2002/03 - Technische Einführung

10 SEP WS 2002/03 - Technische Einführung
GET Methode (Link) <html> <head> <title>Calculator</title> </head> <body> <a href="servlet/sep.CalculatorServlet?x=12&y=13"> Berechnung starten </a> </body> </html> SEP WS 2002/03 - Technische Einführung

11 GET Methode (Formular)
<html> <head> <title>Calculator</title> </head> <body> <form action="servlet/sep.CalculatorServlet"> X: <input type="text" name="x"> Y: <input type="text" name="y"> <input type="submit"> </form> </body> </html> SEP WS 2002/03 - Technische Einführung

12 SEP WS 2002/03 - Technische Einführung
POST Methode <html> <head> <title>Calculator</title> </head> <body> <form action="servlet/sep.CalculatorServlet" method="post"> X: <input type="text" name="x"> Y: <input type="text" name="y"> <input type="submit"> </form> </body> </html> SEP WS 2002/03 - Technische Einführung

13 SEP WS 2002/03 - Technische Einführung
Vergleich GET / POST GET Methode Parameter sind Bestandteil des URLs  Bei Bookmarks werden Parameter mitgespeichert  Ungeeignet für Passwörter Links benutzen automatisch GET Methode POST Methode Parameter werden im Body des Requests übertragen Notwendig bei Datei-Upload (Werdet ihr wohl nicht brauchen) SEP WS 2002/03 - Technische Einführung

14 package sep; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class CalculatorServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException int x = Integer.parseInt(request.getParameter("x")); int y = Integer.parseInt(request.getParameter("y")); PrintWriter out = response.getWriter(); out.println("<html><head><title>MyCalc</title></head>"); out.println("<body>"); out.println("Berechnung: "+x+" + "+y+" = " + (x+y)); out.println("</body>"); out.println("</html>"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

15 SEP WS 2002/03 - Technische Einführung
Sessionverwaltung Problem: Viele Benutzer kommunizieren gleichzeitig mit dem Server Welche Requests gehören zu welchem Benutzer? Glücklicherweise: Servlet Engine macht die meiste Arbeit // Session holen bzw. erzeugen HttpSession session = request.getSession() // Objekt in der Session speichern session.setAttribute("user", aUser); // Objekt aus der Session lesen User curUser = (User) session.getAttribute("user"); SEP WS 2002/03 - Technische Einführung

16 SEP WS 2002/03 - Technische Einführung
Sessionverwaltung Verschiedene Implemtierungen Cookies: Auf dem Client wird eine eindeutige Session ID abgelegt URL Rewriting: Die Session ID wird in alle URLs kodiert Cookies können deaktiviert sein  Servlet Engine wählt automatisch richtige Implementierung Zu beachten:  Sessionverwaltung muss auch ohne Cookies funktionieren  Alle internen URLs müssen kodiert werden: out.println("<a href=\""); out.println(response.encodeURL("/servlet/xy.Abc")); out.println("\">text</a>"); SEP WS 2002/03 - Technische Einführung

17 SEP WS 2002/03 - Technische Einführung
Servlets: Bewertung Vorteil: Extrem flexibel Nachteil: HTML ist in Java-Quellcode eingebettet Unübersichtlich HTML-Editoren können nicht benutzt werden Kein Syntax-Highlighting von HTML-Quellcode Alternative: Java Server Pages SEP WS 2002/03 - Technische Einführung

18 SEP WS 2002/03 - Technische Einführung
JSP: Beispiel <%-- Parameter lesen --%> <% int x = Integer.parseInt(request.getParameter("x")); int y = Integer.parseInt(request.getParameter("y")); %> <html> <head> <title>Calculator</title> </head> <body> Berechnung: <%= x %> + <%= y %> = <%= x+y %> </body> </html> SEP WS 2002/03 - Technische Einführung

19 SEP WS 2002/03 - Technische Einführung
JSP: Syntax <%= Java Expression %> 2 + 3 = <%= %> <%-- Kommentar --%> <%-- JSP Kommentar --%> <!-- HTML Kommentar --> Direktive %> page import="java.util.*" %> … diverse andere Direktiven, auf die ich jetzt nicht eingehe. SEP WS 2002/03 - Technische Einführung

20 SEP WS 2002/03 - Technische Einführung
JSP: Syntax <%! Funktions- und Variablen-Deklarationen %> <%! static final int PI = ; double u(double radius) { return 2*PI*r; } %> Umfang des Einheitskreises: <%= umfang(1.0) %> <% beliebiger Java Code („Skriptlet“) %> <% int i = 10; for(int j=0; j<i; ++j) { out.println(i); } %> Unterschied zu <%= … %>: Ergebnis wird nicht ausgegeben Strichpunkt Unterschied zu <%! … %>: Variablen sind lokal SEP WS 2002/03 - Technische Einführung

21 JSP: Vordefinierte Variablen
ServletRequest request ServletResponse response HttpSession session JspWriter out … und einige weitere SEP WS 2002/03 - Technische Einführung

22 SEP WS 2002/03 - Technische Einführung
JSPs und Servlets JSPs werden zu Servlets kompiliert: *.jsp (JSP Quellcode)  *.java (Servlet Quellcode)  *.class Trennung von Logik / Layout Servlets: HTML eingebettet in Java JSPs: Java eingebettet in HTML Folgerung: Servlets (und JavaBeans) für Logik JSPs für Anzeige SEP WS 2002/03 - Technische Einführung

23 SEP WS 2002/03 - Technische Einführung
Java Beans Beans in diesem Kontext: Nicht: Enterprise Java Beans Nicht: Oberflächenkomponenten Sondern: Server-side Java Beans Komponenten mit Properties und Methoden Im wesentlichen: Java Klassen Default Konstruktor Für jede Property mit Typ „Type“ und Namen „niceValue“ public void setNiceValue(Type value); public Type getNiceValue(); SEP WS 2002/03 - Technische Einführung

24 SEP WS 2002/03 - Technische Einführung
JSPs und JavaBeans Bean deklarieren / erzeugen <jsp:useBean id="bean" scope="request" type="Klassenname"/> Property lesen <jsp:getProperty name="bean" property="niceValue"/> <%= bean.getNiceValue() %> Property schreiben <jsp:setProperty name="bean" property="niceValue" value="1.0"/> <% bean.setNiceValue(1.0) %> Beispiel folgt SEP WS 2002/03 - Technische Einführung

25 SEP WS 2002/03 - Technische Einführung
JSPs und Servlets Servlet Container WWW- Browser (Client) WWW- Server Servlet / Java Server Page HTTP Request HTTP Response SEP WS 2002/03 - Technische Einführung

26 Model View Controller (MVC)
Servlet Container WWW- Browser (Client) Controller Controller (Servlet) Model (Java- Beans) Model HTTP Request View (JSP) View HTTP Response SEP WS 2002/03 - Technische Einführung

27 Model View Controller (MVC)
Model (Java Beans) Enthält die eigentliche Programmlogik Unabhängig von der Webschnittstelle  Kein Import von javax.servlet.* View (JSPs) Anzeige des Ergebnisses Ziel: Möglichst wenig Java Code Controller (Servlet) Einlesen und Überprüfen der übergebenen Parameter Aufrufen der eigentlichen Programmlogik im Model Weitergabe des Ergebnisses an das passende View SEP WS 2002/03 - Technische Einführung

28 SEP WS 2002/03 - Technische Einführung
Model Beispiel package sep; public class Calculator { protected int x; public void setX(int x) { this.x = x; } public int getX() { return x; } protected int y; public void setY(int y) { this.y = y; } public int getY() { return y; } public void calculate() { result = x + y; } protected int result; public int getResult() { return result; } } SEP WS 2002/03 - Technische Einführung

29 public class ControllerServlet extends HttpServlet
{ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException int x = Integer.parseInt(request.getParameter("x")); int y = Integer.parseInt(request.getParameter("y")); Calculator c = new Calculator(); c.setX(x); c.setY(y); c.calculate(); request.setAttribute("calculator", c); RequestDispatcher disp = request.getRequestDispatcher("/WEB-INF/jsp/view.jsp"); disp.forward(request, response); }

30 SEP WS 2002/03 - Technische Einführung
View Beispiel page import="sep.*" %> <jsp:useBean id="calculator" scope="request" type="Calculator"/> <html> <head> <title>Calculator</title> </head> <body> Berechnung: <jsp:getProperty name="calculator" property="x"/> + <jsp:getProperty name="calculator" property="y"/> = <jsp:getProperty name="calculator" property="result"/> </body> </html> SEP WS 2002/03 - Technische Einführung

31 SEP WS 2002/03 - Technische Einführung
Verzeichnisstruktur sep-demo/ index.html Statische HTML-Seiten xy.gif Bilder calculator.jsp JSPs WEB-INF/ classes/ Kompilierte Servlets & Beans sep/ ControllerServlet.class lib/ Hilfbibliotheken xy.jar jsp/ View JSPs view.jsp web.xml Deployment Descriptor SEP WS 2002/03 - Technische Einführung

32 Deployment Descriptor (web.xml)
<?xml version="1.0" encoding="ISO "?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" " <web-app> </web-app> SEP WS 2002/03 - Technische Einführung

33 SEP WS 2002/03 - Technische Einführung
Servlet Mappings <servlet> <servlet-name>controller</servlet-name> <servlet-class>sep.ControllerServlet</servlet-class> </servlet> <servlet-mapping> <url-pattern>/controller</url-pattern> </servlet-mapping> SEP WS 2002/03 - Technische Einführung

34 Weitere Möglichkeiten
<init-param> (z. B. Datenbankparameter) <load-on-startup> (z. B. Hintergrund-Threads) <session-timeout> <welcome-file-list> <error-page>  Selber anschauen SEP WS 2002/03 - Technische Einführung

35 SEP WS 2002/03 - Technische Einführung
Datenbankzugriff Servlet Container WWW- Browser (Client) Controller Controller Model HTTP Request Daten- bank JDBC View View HTTP Response SEP WS 2002/03 - Technische Einführung

36 SEP WS 2002/03 - Technische Einführung
JDBC Als bekannt vorausgesetzt (Praktische Informatik) Tutorials, Dokumentationen auf der SEP-Webseite Zu beachten: Connection Pool Aufbau von Datenbankverbindungen ist aufwendig Vorhalten von mehreren Verbindungen Wiederverwendung Shutdown-Thread Datenbankverbindungen müssen abgebaut werden (auch bei Systemabsturz) public void Runtime.addShutdownHook(Thread hook) SEP WS 2002/03 - Technische Einführung

37 SEP WS 2002/03 - Technische Einführung
Einführungsaufgabe Ausgabe SEP-Webseite Nächste Woche Ankündigung per Abgabe Termin: 30. September Per beim jeweiligen Betreuer Build-System: Jakarta Ant Datenbankkennung (IBM DB2) Funktioniert nur innerhalb der Uni Jeder Teilnehmer bekommt eine Später bekommt jedes Team zwei weitere SEP WS 2002/03 - Technische Einführung


Herunterladen ppt "Software Engineering Praktikum WS 2002/03"

Ähnliche Präsentationen


Google-Anzeigen