Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003...

39
Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier

Transcript of Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003...

Page 1: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

Lehrstuhl fürTheoretische Informatik

Universität Passau

Software Engineering PraktikumSS 2003

Technische Einführung

Christian Bachmaier

Page 2: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 2

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 http://www.infosun.fmi.uni-passau.de/br/lehrstuhl/Kurse/

sep_ss03/

Page 3: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 3

Aufgabenstellung

∙ Inhaltlich: Termin- & Aufgabenverwaltung Überblick: Einführungsvortrag (letzten Dienstag) Weitere Details: Lastenheft (Anfang März) Genaue Ausgestaltung: Pflichtenheft

∙ Technisch: Web Application Dynamische Webseiten Bedienung mit dem Browser

Page 4: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 4

Ü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

Page 5: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - 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>&Uuml;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

Page 6: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 6

HyperText Transfer Protocol (HTTP)

WWW- Browser(Client)

HTTP Request

HTTP ResponseWWW-Server

http://www.fmi.uni-passau.de/

HTTP Request

HTTP Response

∙ Kommunikationsprotokoll zwischen Browser und WWW-Server

Page 7: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 7

∙ HTTP Request URL

http://server:port/pfad/seite?param1=wert1&param2=wert2

http://localhost:8080/demo/add?x=12&y=13 Methode (GET/POST/…) Body (z. B: Parameter bei POST, Datei-Uploads…) Diverse andere Informationen (Header)

∙ HTTP Response Angeforderte Datei (HTML, GIF, …) Diverse andere Informationen (Header)

HTTP: Gesendete Informationen

Page 8: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 8

WWW-Server

HTTP Response

Servlets

WWW- Browser(Client)

Servlet

HTTP Request

Servlet Container

Datei-system

HTTP Request

HTTP Response

Page 9: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 9

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

Page 10: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 10

<html> <head> <title>Calculator</title> </head> <body> <a href="servlet/sep.CalculatorServlet?x=12&y=13"> Berechnung starten </a> </body></html>

GET Methode (Link)

Page 11: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 11

<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>

GET Methode (Formular)

Page 12: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 12

<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>

POST Methode

Page 13: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 13

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)

Page 14: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

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); }}

Page 15: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 15

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. erzeugenHttpSession session = request.getSession()

// Objekt in der Session speichernsession.setAttribute("user", aUser);

// Objekt aus der Session lesenUser curUser = (User) session.getAttribute("user");

Page 16: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 16

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>");

Page 17: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 17

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

Page 18: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 18

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>

Page 19: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 19

JSP: Syntax

<%= Java Expression %>

2 + 3 = <%= 2 + 3 %>

<%-- Kommentar --%>

<%-- JSP Kommentar --%><!-- HTML Kommentar -->

<%@ Direktive %>

<%@ page import="java.util.*" %>

… diverse andere Direktiven, auf die ich jetzt nicht eingehe.

Page 20: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 20

JSP: Syntax

<%! Funktions- und Variablen-Deklarationen %>

<%! static final int PI = 3.1415926536; double u(double radius) { return 2*PI*r; } %>

Umfang des Einheitskreises: <%= u(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

StrichpunktUnterschied zu <%! … %>: Variablen sind lokal

Page 21: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 21

JSP: Vordefinierte Variablen

ServletRequest requestServletResponse responseHttpSession sessionJspWriter out

… und einige weitere

Page 22: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 22

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

Page 23: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 23

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();

Page 24: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 24

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

Page 25: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 25

WWW-Server

HTTP Response

JSPs und Servlets

WWW- Browser(Client)

HTTP Request

Servlet Container

Servlet /Java Server Page

Page 26: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 26

Model View Controller (MVC)

WWW- Browser(Client)

View

Model

HTTP Request

HTTP Response

Controller

Servlet Container

Controller

(Servlet)

View(JSP)

Model(Java-Beans)

Page 27: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - 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 die passende View

Page 28: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 28

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; }}

Page 29: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

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); }}

Page 30: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 30

<%@ 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>

View Beispiel

Page 31: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 31

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

Page 32: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 32

Deployment Descriptor (web.xml)

<?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>

</web-app>

Page 33: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 33

Servlet Mappings

<servlet> <servlet-name>controller</servlet-name> <servlet-class>sep.ControllerServlet</servlet-class></servlet>

<servlet-mapping> <servlet-name>controller</servlet-name> <url-pattern>/controller</url-pattern></servlet-mapping>

Page 34: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - 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

Page 35: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 35

Datenbankzugriff

WWW- Browser(Client)

View

Model Daten- bank

JDBC

HTTP Request

HTTP Response

Controller

Servlet Container

Controller

View

Page 36: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 36

JDBC

∙ Als bekannt vorausgesetzt (Praktische Informatik)∙ Tutorials, Dokumentationen auf der SEP-Webseite∙ Zu beachten:

Connection PoolAufbau von Datenbankverbindungen ist aufwendig Vorhalten von mehreren Verbindungen Wiederverwendung

Shutdown-ThreadDatenbankverbindungen müssen abgebaut werden(auch bei Systemabsturz)

public void Runtime.addShutdownHook(Thread hook)

Page 37: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 37

Tools

∙ Java 2 SDK 1.4.1_01∙ Tomcat 4.1.18∙ Ant 1.5.1∙ JDBC 2.0∙ HTML 4.01 oder XHTML 1.0∙ CSS∙ CVS∙ LaTeX (empfohlen)∙ Junit∙ JavaMail∙ Together/Borland Control Center

Page 38: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 38

Einführungsaufgabe

∙ Ausgabe SEP-Webseite Nächste Woche

∙ Abgabe Termin: 31. März 12:00 Uhr Per E-Mail beim jeweiligen Betreuer Lauffähiges war-Archiv incl. Quellcode Build-System: Jakarta Ant

∙ Datenbankkennung (IBM DB2) Funktioniert nur innerhalb der Uni Jeder Teilnehmer bekommt eine Später bekommt jedes Team zwei weitere

∙ Wer Abschreibt fliegt sofort raus (auch beim Prototypen)

Page 39: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum SS 2003 Technische Einführung Christian Bachmaier.

06.02.2003 SEP SS 2003 - Technische Einführung 39

Web-Seite

∙ E-Mail auch in den Ferien abholen∙ Web-Seite öfter kontrollieren∙ http://www.infosun.fmi.uni-passau.de/br/lehrstuhl/Kurse/

sep_ss03/