lehrstuhl für theoretische informatik universität passau software engineering praktikum ss 2003...
TRANSCRIPT
Lehrstuhl fürTheoretische Informatik
Universität Passau
Software Engineering PraktikumSS 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/
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
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
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>Ü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
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
06.02.2003 SEP SS 2003 - Technische Einführung 7
∙ HTTP Request URL
http://server:port/pfad/seite?param1=wert1¶m2=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
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
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
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)
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)
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
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)
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); }}
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");
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>");
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
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>
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.
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
06.02.2003 SEP SS 2003 - Technische Einführung 21
JSP: Vordefinierte Variablen
ServletRequest requestServletResponse responseHttpSession sessionJspWriter out
… und einige weitere
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
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();
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
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
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)
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
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; }}
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); }}
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
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
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>
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>
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
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
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)
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
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)
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/