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