PPT - Infosun - Universität Passau

Werbung
Lehrstuhl für
Theoretische Informatik
Universität Passau
Software Engineering Praktikum
WS 2002/03
Technische Einführung
Michael Forster
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)
19.07.2002
SEP WS 2002/03 - Technische Einführung
2
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
19.07.2002
SEP WS 2002/03 - Technische Einführung
3
Ü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
19.07.2002
SEP WS 2002/03 - Technische Einführung
4
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
19.07.2002
SEP WS 2002/03 - Technische Einführung
5
HyperText Transfer Protocol (HTTP)
∙ Kommunikationsprotokoll zwischen Browser und WWW-Server
http://www.fmi.uni-passau.de/
HTTP Request
WWWBrowser
(Client)
HTTP Response
HTTP Request
WWWServer
HTTP Response
19.07.2002
SEP WS 2002/03 - Technische Einführung
6
HTTP: Gesendete Informationen
∙ 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)
19.07.2002
SEP WS 2002/03 - Technische Einführung
7
Servlets
Servlet Container
HTTP
HTTPRequest
Request
WWWBrowser
(Client)
WWWServlet
Server
Dateisystem
HTTP
HTTPResponse
Response
19.07.2002
SEP WS 2002/03 - Technische Einführung
8
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
19.07.2002
SEP WS 2002/03 - Technische Einführung
9
GET Methode (Link)
<html>
<head>
<title>Calculator</title>
</head>
<body>
<a href="servlet/sep.CalculatorServlet?x=12&y=13">
Berechnung starten
</a>
</body>
</html>
19.07.2002
SEP WS 2002/03 - Technische Einführung
10
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>
19.07.2002
SEP WS 2002/03 - Technische Einführung
11
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>
19.07.2002
SEP WS 2002/03 - Technische Einführung
12
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)
19.07.2002
SEP WS 2002/03 - Technische Einführung
13
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>");
protected
void doPost(HttpServletRequest request,
out.println("<body>");
HttpServletResponse
out.println("Berechnung:
"+x+" + "+y+"response)
= " + (x+y));
throws
ServletException, IOException
out.println("</body>");
{
out.println("</html>");
doGet(request, response);
}
}
}
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");
19.07.2002
SEP WS 2002/03 - Technische Einführung
15
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>");
19.07.2002
SEP WS 2002/03 - Technische Einführung
16
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
19.07.2002
SEP WS 2002/03 - Technische Einführung
17
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>
19.07.2002
SEP WS 2002/03 - Technische Einführung
18
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.
19.07.2002
SEP WS 2002/03 - Technische Einführung
19
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
Strichpunkt
Unterschied zu <%! … %>: Variablen sind lokal
19.07.2002
SEP WS 2002/03 - Technische Einführung
20
JSP: Vordefinierte Variablen
ServletRequest request
ServletResponse response
HttpSession session
JspWriter out
… und einige weitere
19.07.2002
SEP WS 2002/03 - Technische Einführung
21
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
19.07.2002
SEP WS 2002/03 - Technische Einführung
22
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();
19.07.2002
SEP WS 2002/03 - Technische Einführung
23
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
19.07.2002
SEP WS 2002/03 - Technische Einführung
24
JSPs und Servlets
Servlet Container
HTTP Request
WWWBrowser
(Client)
Servlet /
WWWJava Server Page
Server
HTTP Response
19.07.2002
SEP WS 2002/03 - Technische Einführung
25
Model View Controller (MVC)
Servlet Container
HTTP Request
Controller
Controller
(Servlet)
WWWBrowser
(Client)
Model
(JavaModel
Beans)
HTTP Response
19.07.2002
View
View
(JSP)
SEP WS 2002/03 - Technische Einführung
26
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
19.07.2002
SEP WS 2002/03 - Technische Einführung
27
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;
}
}
19.07.2002
SEP WS 2002/03 - Technische Einführung
28
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);
}
}
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>
19.07.2002
SEP WS 2002/03 - Technische Einführung
30
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
19.07.2002
SEP WS 2002/03 - Technische Einführung
31
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>
19.07.2002
SEP WS 2002/03 - Technische Einführung
32
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>
19.07.2002
SEP WS 2002/03 - Technische Einführung
33
Weitere Möglichkeiten
∙
∙
∙
∙
∙
<init-param> (z. B. Datenbankparameter)
<load-on-startup> (z. B. Hintergrund-Threads)
<session-timeout>
<welcome-file-list>
<error-page>
 Selber anschauen
19.07.2002
SEP WS 2002/03 - Technische Einführung
34
Datenbankzugriff
Servlet Container
HTTP Request
Controller
WWWBrowser
(Client)
Model
HTTP Response
19.07.2002
JDBC
Datenbank
View
SEP WS 2002/03 - Technische Einführung
35
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)
19.07.2002
SEP WS 2002/03 - Technische Einführung
36
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
19.07.2002
SEP WS 2002/03 - Technische Einführung
37
Herunterladen