Download - Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum WS 2002/03 Technische Einführung Michael Forster.

Transcript
Page 1: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum WS 2002/03 Technische Einführung Michael Forster.

Lehrstuhl fürTheoretische Informatik

Universität Passau

Software Engineering PraktikumWS 2002/03

Technische Einführung

Michael Forster

Page 2: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 (demnächst)

Page 3: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - Technische Einführung 3

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

Page 4: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 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>&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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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: <%= 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

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

Page 21: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 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

Page 28: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 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

Page 35: Lehrstuhl für Theoretische Informatik Universität Passau Software Engineering Praktikum WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - 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 WS 2002/03 Technische Einführung Michael Forster.

19.07.2002 SEP WS 2002/03 - Technische Einführung 37

Einführungsaufgabe

∙ Ausgabe SEP-Webseite Nächste Woche Ankündigung per E-Mail

∙ Abgabe Termin: 30. September Per E-Mail 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