Skip to content

1. Einführung

1.1. Contexte

Das PDF des Dokuments ist unter |HIER| zu finden.

Die Beispiele des Dokuments sind unter |HIER| verfügbar.

Dieses Dokument ist sowohl ein Kurs als auch eine TD (Übung) an der Universität. Es richtet sich an Anfänger. Es stützt sich auf folgende Quellen:

Literaturhinweise:

  1. Einführung in die Programmiersprache Java;
  2. Nutzung einer relationalen Datenbank mit dem Spring-Ökosystem;

Wir bezeichnen diese Quellen jeweils als [ref1] und [ref2]. Die Quelle [ref1] ist veraltet (2002), reicht jedoch für dieses Dokument aus, in dem sie lediglich zur Darstellung der Syntax der Programmiersprache Java und ihrer grundlegenden Befehle verwendet wird. Der für die Erstellung von TD erforderliche Rest wird in diesem Dokument in Kapiteln mit dem Titel [Cours] vorgestellt. Diese Kapitel stammen direkt aus [ref2] (2015) und wurden teilweise vereinfacht.

Ziel dieses Dokuments ist es, die Programmiersprache Java aus beruflicher Perspektive zu vermitteln. Aus diesem Grund stützen wir uns stark auf das Spring-Framework [http://spring.io/], das in der Entwicklung von JEE (Java Enterprise Edition) weit verbreitet ist. Logischerweise sollte auf diesen Kurs ein JEE-Kurs folgen. Dies ist an der Istia (Universität Angers) der Fall. JEE ist derzeit (November 2015) die wichtigste Quelle für Arbeitsplätze für junge Entwickler mit einem Master-Abschluss. In der Welt von JEE gibt es neben Spring noch viele andere Technologien. Spring hat den Vorteil, dass es leicht verständlich ist und vor allem bewährte Programmierpraktiken vermittelt, die auch außerhalb des Spring-Ökosystems wiederverwendbar sind. Das erklärt die Wahl dieses Kurses.

Dieses TD wird seit über 10 Jahren verwendet und hat sich mit den Technologien weiterentwickelt. Es folgt (auf das IstiA) ein TD, JEE und [Einführung in Java EE mit der NetBeans-IDE und dem GlassFish-Anwendungsserver (2012)]. Diese letzte Version TD stammt aus dem Jahr 2012 (wir schreiben hier das Jahr 2015) und wäre einer Aktualisierung bedürftig. Es stellt die JEE-Orthodoxie anhand des Web-Frameworks JSF2 (Java Server Faces) und der EJB3 (Enterprise Java Bean) vor. In der Summe haben diese beiden TD es zahlreichen Studierenden ermöglicht, Praktika JEE im Bereich ESN (Digitaldienstleistungsunternehmen) zu ergattern und dort im Anschluss eine Festanstellung zu erhalten.

In diesem Dokument findet man keine formale Darstellung aller Facetten von Java. Im Laufe der Jahre hat sich das Verhalten von Nachwuchsentwicklern im Umgang mit einem Problem stark verändert. Mittlerweile nutzen sie fast ausnahmslos das Internet, um Code-Schnipsel zu finden, die zusammengesetzt ein Programm ergeben. Wenn man ihnen einen Kurs zur Verfügung stellt, nutzen sie diesen eher selten und ziehen es erneut vor, im Internet zu suchen. Obwohl ich dieser Arbeitsweise anfangs skeptisch gegenüberstand, war ich dennoch von den erzielten Ergebnissen überrascht. So gelang es auch schwächeren Studierenden, funktionierende Programme zu erstellen, während sie dies ohne die Hilfe des Internets wahrscheinlich nicht geschafft hätten. Ich setze nun auf diese Arbeitsweise.

Code-Schnipsel vermitteln keinen Überblick über die Architektur einer Lösung, und genau das ist eines der Ziele dieses Dokuments: diesen Überblick zu vermitteln. Die Studierenden bearbeiten dieses TD ebenso wie das TP selbstständig. Es gibt keine Vorlesung. Es gibt einen Zeitplan, der ihnen den erwarteten Fortschritt im Verlauf der Sitzungen vorgibt. Sie können diesem Zeitplan hinterherhinken oder ihm voraus sein. Ihr Fortschritt wird durch eine Reihe von Nachweisen überprüft, die sie dem Dozenten vorlegen müssen. Dieser ist sowohl dazu da, ihnen auf Anfrage Erklärungen zu geben, als auch ihre Arbeit zu bewerten. Jeder arbeitet in seinem eigenen Tempo. Am Ende der 36 Stunden, die für dieses TD vorgesehen sind, werden einige 50 % mehr Nachweise erbracht haben als andere, aber jeder – so lautet jedenfalls das Ziel – wird verstanden haben, was er selbstständig erarbeitet hat. Dieser TD kann ohne Begleitung eines Lehrers absolviert werden. Aus diesem Grund ist er auf [https://stahe.github.io] verfügbar.

Dieses Dokument eignet sich nicht für diejenigen, die einen akademischen Kurs zu Java suchen – also etwas, in dem Java schrittweise und strukturiert erklärt wird und jedes Detail der Syntax erläutert und begründet wird. Vielmehr wird hier ein experimenteller Ansatz vorgeschlagen. Es ist wahrscheinlich, dass der Lernende nicht alles versteht, was ihm in diesem Dokument angeboten wird, aber er wird den Inhalt wahrscheinlich sinnvoll wiederverwenden können, und das Verständnis der Details wird mit der Erfahrung kommen.

Dieses Dokument ist auch kein Kurs in Algorithmik. Der Algorithmus von TD ist einfach und kann von jedem Anfänger gelöst werden, der gerade seine ersten Kurse in Algorithmik besucht. Das Dokument konzentriert sich auf die professionelle Entwicklungsumgebung in Java mit ihren zahlreichen Bibliotheken und Frameworks sowie auf die Code-Architektur. Die meisten Studierenden, die ich unterrichte, weisen Schwächen in der Algorithmik auf, die anschließend von den Praktikumsbetreuern bestätigt werden. Ja, die Beherrschung von Algorithmen ist wichtig, aber sie ist nicht Gegenstand dieser Übung.

Schließlich behandelt dieses Dokument (Dezember 2015) nicht die neuesten Entwicklungen in Java, insbesondere Streams und Lambda-Funktionen. Dennoch werden darin einige Elemente der neuesten Version JDK, nämlich JDK 1.8, verwendet, und die folgenden Codes müssen mit dieser Version JDK kompiliert werden.

1.2. Contenu

Kapitel 2 befasst sich mit dem Thema TD, der Berechnung von Wahlergebnissen. Die Aufgabe ist einfach. In Kapitel 2 soll die Lösung in den beiden sehr ähnlichen Sprachen C# und Java implementiert werden. Die Implementierung erfolgt ohne Klassen. Ziel ist es, die Syntax von Java, seine grundlegenden Anweisungen sowie die integrierte Entwicklungsumgebung (IDE) Eclipse vorzustellen, die zum Erstellen von Java-Projekten dient.

In Kapitel 3 soll die Lösung aus TD in Java mit Klassen implementiert werden. Ziel ist es, die Konzepte von Klassen, Vererbung, Schnittstellen und generischen Klassen vorzustellen. Das Konzept des Unit-Tests JUnit wird eingeführt.

Kapitel 4 führt in die Konzepte ein, die den folgenden Kapiteln zugrunde liegen:

  • Schichtarchitekturen;
  • die Schnittstellenprogrammierung;
  • die Verwendung von Spring zur Umsetzung der beiden vorgenannten Konzepte;

Image

Kapitel 5 stellt das Spring-Framework anhand von vier Projekten vor.

Kapitel 6 stellt das API JDBC vor, bei dem es sich um eine Schnittstelle für den Datenbankzugriff handelt.

Kapitel 7 implementiert die [DAO]-Schicht (Data Access Object) des TD mit dem API JDBC und Spring.

Image

Kapitel 8 implementiert die Schicht [métier] von TD:

Image

Kapitel 9 implementiert die Schicht [ui] des TD mit einer Konsolenanwendung:

Image

Kapitel 10 implementiert die Schicht [ui] von TD mit einer grafischen Anwendung unter Verwendung der Swing-Komponentenbibliothek:

Image

Image

Kapitel 11 behandelt die Datenbankverwaltung mit dem Framework [Spring Data], einem Zweig des Spring-Ökosystems. Es wird die Spezifikation JPA (Java Persistence API) vorgestellt, die es der Schicht [DAO] ermöglicht, Objekte anstelle von SQL (Structured Query Language) zu arbeiten. Die Schichtenarchitektur entwickelt sich wie folgt weiter:

Image

Kapitel 12 wendet die Inhalte aus Kapitel 11 an, indem der Zugriff auf die Datenbank von TD mit [Spring Data] implementiert wird.

Kapitel 13 zeigt, wie man eine Datenbank mit [Spring MVC], einem weiteren Zweig des Spring-Ökosystems, im Web bereitstellt. Die Architektur entwickelt sich zu einer Client-Server-Architektur:

Image

In den Kapiteln 14 und 15 wird die Anwendung aus TD in eine Client-Server-Anwendung umgewandelt:

Image

Kapitel 16 zeigt, wie man den Zugriff auf eine Webanwendung mit [Spring Security], einem weiteren Zweig des Spring-Ökosystems, absichert.

Image

Kapitel 17 greift das Thema TD wieder auf und befasst sich mit der Absicherung des Webdienstes für Wahlen.

Kapitel 18 befasst sich mit dem Problem der domänenübergreifenden Anfragen:

  • In [1] liefert eine Webanwendung Seiten im Format HTML / JavaScript aus;
  • in [2] führt der Browser das in den Seiten HTML eingebettete JavaScript aus, um den gesicherten Webdienst [3-4] abzufragen;

Angenommen, D1 = http://machine1:port1t die Domäne des Servers [1] und D4 = http://machine4:port4t die Domäne des Servers [4]. Wenn sich die Server [1] und [4] nicht in derselben Domäne [D1!=D4] befinden, dann werden die Anfragen von [3] an [4] als domänenübergreifende Anfragen bezeichnet. Aufgrund von Sicherheitsbeschränkungen, die von Browsern umgesetzt werden, kann deren Einrichtung problematisch sein. Wir werden eine Lösung untersuchen.

In Kapitel 19 werden domänenübergreifende Anfragen anhand der Wahlanwendung umgesetzt.

1.3. Verwendete Tools

Die folgenden Beispiele wurden in der folgenden Umgebung getestet:

  • Windows 10 Pro 64-Bit-Rechner;
  • JDK 1.8 (Absatz 22.1);
  • IDE Spring Tool Suite 3.6.3 (Absatz 1);
  • NetBeans 8.1 (Absatz 22.4);
  • Chrome-Browser (andere Browser wurden nicht verwendet);
  • Chrome-Erweiterung [Advanced Rest Client] (Absatz 1);
  • WampServer, das die Tools SGBD, MySQL und [PhpMyAdmin] zur Verwaltung bereitstellt (Absatz 22.7);

Es ist wichtig, JDK 1.8 zu verwenden. In einigen Beispielen werden Elemente dieses JDK verwendet. Die meisten Beispiele sind Maven-Projekte, die wahlweise mit den IDE Eclipse-[https://www.eclipse.org/], der IntellijIDEA Community Edition, der [https://www.jetbrains.com/idea/download/] und in NetBeans ([https://netbeans.org/]) geöffnet werden. Im Folgenden stammen die Screenshots aus der IDE Spring Tool Suite, einer Variante von Eclipse.

1.4. Support

Die Eclipse-Projekte dieses Dokuments sind auf der Website [https://tahe.developpez.com/tutoriels-cours/intro-java-spring/serge-tahe-introduction-au-langage-java-et-a-l-ecosysteme-spring/] verfügbar.

Um die Projekte eines Kapitels zu importieren, gehen Sie in Eclipse wie unter [1-8] beschrieben vor:

Die meisten Projekte sind Maven-Projekte. Sollten nach dem Laden Fehler auftreten, führen Sie [Alt-F5] aus und befolgen Sie die Anleitung in [9-10]. Die ausgewählten Maven-Projekte werden neu erstellt.