• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Introduction to JEE
 

Introduction to JEE

on

  • 6,270 views

 

Statistics

Views

Total Views
6,270
Views on SlideShare
6,249
Embed Views
21

Actions

Likes
2
Downloads
67
Comments
0

1 Embed 21

http://www.slideshare.net 21

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Introduction to JEE Introduction to JEE Presentation Transcript

    • JEE – Was ist das?
        • Montagsreihe, 12.03.2007
    • Agenda – Teil 1
      • Java Plattform
      • Standard Edition
      • Enterprise Edition
        • Mehrschicht-Architekturen
        • Web-Container
          • Servlets
          • JavaServer Pages
          • Tag-Libraries
          • Struts
          • JavaServer Faces
          • Andere Frameworks
    • Agenda – Teil 2
        • EJB-Container
          • Frank Ilchmann
    • JEE – Was ist das?
        • Java Platform
    • Java Platform
      • “ The Java platform is the name for a bundle of related Programs … from Sun Microsystems which allow for developing and running programs written in the Java programming language.“
        • http://en.wikipedia.org/wiki/Java_platform
      • Die Java Platform ist ein Sammelbegriff von Sun für:
        • die Programmiersprache Java
        • einer Vielzahl standardisierter APIs sowie deren Implementierung in umfangreichen Klassenbibliotheken
        • einer Reihe von Programmen, wie Compiler, Virtueller Maschine, u.ä.
    • Java Platform Editions (1)
      • Standard Edition
      • Enterprise Edition
      • Micro Edition
        • http://java.sun.com/
    • Java Platform Editions (2)
      • “… Standard Edition … lets you develop and deploy Java applications on desktops and servers, as well as today's demanding Embedded and Real-Time environments. Java SE includes classes that support the development of Java Web Service and provides the foundation for Java Platform, Enterprise Edition (Java EE).”
        • http://java.sun.com/javase
      • “… Enterprise Edition … is the industry standard for developing portable, robust, scalable and secure server-side Java applications. Building on the solid foundation of Java SE, Java EE provides web services, component model, management, and communications APIs that make it the industry standard for implementing enterprise class service-oriented architecture (SOA) and next generation web applications.”
        • http://java.sun.com/javaee
    • Java Platform Editions (3)
      • „… Micro Edition … is the most ubiquitous application platform for mobile devices across... It provides a robust, flexible environment for applications running on a broad range of other embedded devices, such as mobile phones, PDAs, TV set-top boxes, and printers. The Java ME platform includes … a broad range of built-in network protocols, and extensive support for networked and offline applications .. Applications based on Java ME software are portable across a wide range of devices, yet leveraging each device's native capabilities.”
        • http://java.sun.com/javame/index.jsp
      • 2004 lag die Zahl der Handys mit Java-Unterstützung bei 1,5 Milliarden, Schätzungen für 2006 gehen von 2,5 Milliarden Geräten aus
        • http://www.java-tutor.com/seminare/java-schulung/j2me-seminar.html
      • Auf Java ME wird hier nicht weiter eingegangen.
    • History of Product Naming (1) Dec.1999 Java 2 EE, J2EE Java 2 Platform, Enterprise Edition 1.0 2000 1.2 Aug.2001 1.3 Nov.2003 1.4 May 2006 Java EE, JEE Java Platform, Enterprise Edition 5 Enterprise 1996 (1.0) Java Java 1.0 .. 1.1.x J2SE Java 2 Platform, Standard Edition 1.2 .. 1.4.2 Sept.2004 5 Dec.2006 Java SE, JSE Java Platform, Standard Edition 6 Standard Year Abbr. Naming Version Edition
    • History of Product Naming (2)
      • History of naming scheme:
        • http://de.wikipedia.org/wiki/Java_Platform,_Standard_Edition
        • http://de.wikipedia.org/wiki/Java_Platform,_Enterprise_Edition
      • Motivation for changing naming scheme:
        • http://java.sun.com/developer/technicalArticles/JavaOne2005/java_naming_aag.pdf
    • Product- and Developer version
      • The version numbers 6 and 1.6.0 are used to identify this release of the Java Platform.
      • Version 6 is the product version , while 1.6.0 is the developer version .
      • Sun: “The number 6 is used to reflect the evolving level of maturity, stability, scalability and security of Java SE.”
      • http://java.sun.com/javase/6/webnotes/version-6.html
    • JEE – Was ist das?
        • Standard Edition
    • Java SE 6 Platform at a Glance
    • JRE and JDK
      • “ Sun Microsystems provides two principal software products in the Java Platform, Standard Edition (Java SE) family”:
      • Java SE Runtime Environment (JRE)
      • Java SE Development Kit (JDK)
      • http://java.sun.com/javase/6/docs/technotes/guides/index.html
    • Java SE Runtime Environment (JRE)
      • Java ist ein Zwitter zwischen Compiler- und Interpretersprache:
        • Quellcode wird vom Compiler in einen plattformunabhängigen Bytecode übersetzt.
        • Bytecode wird von einem plattformabhängigen Interpreter, der Java Virtual Machine (JVM), ausgeführt.
        • Sun-Slogan: „Write once run anywhere.“
      • Java-Programme sind keine echten Executables, sondern nur in einer „Virtuellen Maschine“ lauffähig, die den vom Compiler erzeugten Bytecode interpretiert.
      • “ The JRE provides the libraries, Java virtual machine, and other components necessary for you to run applets and applications written in the Java programming language. This runtime environment can be redistributed with applications to make them free-standing.”
    • Java SE Development Kit (JDK)
      • “ The JDK includes the JRE plus command-line development tools such as compilers and debuggers that are necessary or useful for developing applets and applications.”
    • Java Language - Eigenschaften
      • Allzweck-Sprache, die nicht auf bestimmte Einsatzgebiete beschränkt ist.
      • Stark objektorientiert.
      • Streng typisierend.
        • Aufwertung ab Java 5 durch Einführung von „Generics“.
      • Multithreading-fähig.
      • Exception-Handling.
      • Pragmatisches „Sprachdesign“.
      • ORDiX: „Mit Java ist Programmentwicklung nach dem Stand der Technik möglich.“
    • JEE – Was ist das?
        • Enterprise Edition
    • JEE-Spezifikation
      • JEE ist eine Spezifikation für eine Softwarearchitektur zur transaktionsbasierten Ausführung von in Java programmierten Anwendungen
      • Salopp: “JEE ist Java auf Serverseite für Unternehmensanwendungen.”.
      • JEE basiert auf der Java Platform, Standard Edition (Java SE).
      • Definiert Softwarekomponenten und Dienste, die primär in der Programmiersprache Java erstellt werden.
      • Stellt einen allgemein akzeptierten Rahmen zur Verfügung, auf dessen Basis aus modularen Komponenten verteilte, mehrschichtige Anwendungen entwickelt werden können.
      • Klar definierte Schnittstellen zwischen den Komponenten und Schichten sollen dafür sorgen, dass Softwarekomponenten unterschiedlicher Hersteller interoperabel sind und dass die verteilte Anwendung gut skalierbar ist.
      • JEE ist kein Produkt und oder fertiges System.
      • Die aktuelle Version der JEE-Spezifikation ist die Version 5.0.
        • http://java.sun.com/javaee/technologies/javaee5.jsp
    • Application-Server (1)
      • Implementierungen der JEE-Spezifikation heißen Application-Server (Anwendungsserver, JEE-Server).
      • Bietet eine Laufzeitumgebung für den Server-Teil einer Client-Server Anwendung.
      • Hersteller können sich von SUN ihre Konformität zur JEE-Spezifikation bestätigen lassen.
        • „ The J2EE Compatibility Test Suite (CTS) is available for the J2EE platform. The J2EE CTS contains over 5,000 tests for J2EE 1.4 and will contain more for later versions. This test suite tests compatibility by performing specific application functions and checking results. For example,...“
        • “ Look for the J2EE brand which signifies that the specific branded product has passed the Compatibility Test Suite (CTS) and is compatible.”
        • http://java.sun.com/javaee/overview/faq/j2ee.jsp#compatibility
    • Application Server (2)
      • Wichtigste Aufgaben eine Application-Servers:
        • Thread- und Prozeßmanagement
        • Unterstützung von Clustering (Verbindung mehrerer Instanzen eines JEE-Servers auf einem oder mehreren Rechnern)
        • Gleichmäßige Verteilung von Anfragen and verschiedene JEE-Server-Instanzen
        • Verwaltung von Systemresource (CPU, Speicher)
        • Verwaltung und Überprüfung von Sicherheitsanforderungen
        • Integration von Middleware-Diensten (Messaging-, Namens-, Verzeichnisdienst)
    • Application Server (3)
      • Anbieter für Application-Server gibt es wie Sand am Meer.
      • Den besten Application-Server gibt es nicht.
      • Einige (populäre) Application-Server:
      Geronimo (Apache) Application Server 10g (Oracle) JOnAS (ObjectWeb) Websphere (IBM) JBoss (JBoss) Enterprise Server (Borland) Java System Application Server bzw. Glassfish (SUN, Referenzimpl.d.JEE-Spez.) WebLogic (BEA) frei kommerziell
    • JEE – Was ist das?
        • Enterprise Edition
        • Mehrschicht-Architekturen
    • Schichtenmodelle
      • Je nach dem wie und wo Darstellung, Logik und Datenhaltung einer Anwendung implementiert sind, unterscheidet man zwischen:
        • Zwei-Schichten-Modell
        • Drei-Schichten-Modell
        • Vier-Schichten-Modell
      • Sonderfall:
        • Zweieinhalb-Schichten-Modell
      • Begriff:
        • Schicht = tier
        • Mehrschicht-Modell = multitier model
    • Zwei-Schichten-Modell (Allgemein)
      • Vorteile:
        • Einfach.
        • Datenbank verwaltet gleichzeitigen Zugriff mehrerer Benutzer.
      • Nachteile:
        • Änderung der Geschäftslogik erfodert Neuinstallation aller Clients.
        • Jeder Client benötigt eigene Datenbank-Anbindung.
        • Bei „unsauberer“ Programmierung verschmelzen Präsentations- und Geschätslogik.
      • Beispiel:
        • Java-Programm mit Swing-Oberfläche und Datenbankanbindung über JDBC.
    • Drei-Schichten-Modell (Allgemein)
      • Vorteile:
        • Präsentations- und Geschäftslogik getrennt.
        • Application-Server verwaltet Datenbank-Zugriffe.
      • Nachteile:
        • Weiterhin Client-Installation notwendig.
        • Geschäftslogik muss gleichzeitig Anfrage mehrerer Clients bearbeiten.
        • Aufwändige Programmierung (Multi-Threading, Multi-User).
      • Beispiel:
        • Java-Client mit Swing-Oberfläche, C++-Server, embedded SQL und CORBA zur Client-Server-Kommunikation.
    • Vier-Schichten-Modell (Allgemein)
      • Vorteile:
        • Keine Client-Installation (nur Browser).
        • Änderungen zentral auf dem Application-Server.
        • Präsentations- und Geschäftslogik getrennt.
      • Nachteile:
        • Präsentations- und Geschäftslogik müssen gleichzeitig mehrere Anfragen bearbeiten.
        • Aufwändige Programmierung (Multi-Threading, Multi-User).
        • Eingeschränkter Benutzerkomfort durch Browser.
    • Umsetzung der Schichten-Modelle in die JEE-Architektur (Einführung JEE-Terminologie)
    • Sonderfall: Zweieinhalb-Schichten-Modell
      • Weder Zwei-Schichten-Modell, da Anwendung nicht auf Cleint läuft und weder Drei-Schichten-Modell, da Präsentations- und Geschäftslogik nicht getrennt.
      • Vorteile:
        • Keine Client-Installation (nur Browser).
        • Änderungen zentral auf dem Application-Server.
      • Nachteile:
        • Präsentations- und Geschäftslogik können nicht von anderen Anwendungen wiederverwendet werden.
        • Weitere Nachteile wie bei Vier-Schicht-Modell.
    • Typische JEE - Architektur
    • JEE – Was ist das?
        • Enterprise Edition
        • Web Container
    • Web-Container (1)
      • Stellen Laufzeitumgebung für Servlets bzw. darauf aufsetzende Komponenten, wie JavaServer Pages, … bereit:
        • Verwalten Servlets während ihrer Lebensspanne.
        • Leiten HTTP-Anfragen eines Clients an ein Servlet und liefert dessen HTTP-Anwtorten zurück
      • Sun beschränkt sich auf die Spezifikation und überläßt die Implementierung anderen
      • Web-Container können direkt im Application-Server (IBM WebSphere, BEA Weblogic Server, Borland AppServer) oder als eigenständiges, in den Application Server integrierbares Produkt (Apache Tomcat, Jetty), implementiert werden
    • Web-Container (2)
      • häufig kommunizieren Clients nicht direkt mit einem Web-Container, sondern über einen Web-Server als Vermittler
      • Vorteile:
        • Sicherheitsgewinn
          • Weil aus Internet immer erreichbar, ist ein Web-Server auf Sicherheit hin entworfen worden.
        • Lastverteilung
          • Statischer Inhalt (z.B. Bilder) werden direkt vom Web-Server ausgeliefert.
          • Anfragen können auf mehrere Web-Container verteilt werden.
    • JEE – Was ist das?
        • Enterprise Edition
        • Web Container
        • Servlets
    • Servlets
      • Vollwertige Java-Klassen, die einen Web-Container als Laufzeitumgebung benötigen.
        • Stellen eine Alternative zum Common Gateway Interface (CGI), PHP oder Active Server Pages (ASP) von Microsoft dar.
      • Ein Servlet nimmt HTTP-Anfragen entgegen und generiert HTTP-Antworten mit dynamischen Inhalten, wie HTML-Seiten, Grafiken, etc.
      • Bei der Implementierung kann auf andere Java-API (JDBC, ...) zugegriffen werden.
      • Die Basisklasse HttpServlet stellt Standard-Implementierungen für diverse Service-Methoden ( service() , doXxx() , …), die nach Bedarf überschrieben werden können.
      • Jeder HTTP-Request wird von der Servlet-Engine in einem eigenen Thread ausgeführt.
    • Servlets - Beispiel (1)
    • Servlets - Beispiel (2)
    • Servlets - Wichigste Methoden
      • HTTP-Protkoll (1.1) unterscheidet zwischen verschiedenen Request-Anfragen:
      Keine Impl. UNLINK Keine Impl. LINK doOption() Abfrage zulässiger Request-Typen für spezifiziertes Dokument OPTION doTrace() Zum Protokoll-Debugging TRACE doDelete() Client fordert Löschen eines Dokuments auf dem Server an DELETE doPut() Client fordert Ablage von Dokumenten auf Server an PUT doHead() Client fordert nur den Response-Header, nicht jedoch das resultierende Dokument ab HEAD doPost() Anforderung einhält zusätzliche Daten vom Client, z.B. Formulare POST doGet() Anforderung einer Ressource, z.B. einer Webseite GET Servlet-Methode Verwendung Request
    • Servlets - Lebenszyklus Servlet- code Servlet Zeit Servlet- code 1.HTTP-Request/-Response HTTP-Request/-Responses 2.initialisieren init() 3.Anfragen bearbeiten service(), doGet(), ... 4.zerstören destroy()) Web-Container 1.laden u. instanziieren class-Datei vom: - lokalen Dateisystem - entfernten Dateisystem - Netzwerkservice Kursiv : Servlet-Methoden
    • Servlets - Weiterführende Themen
      • Web Deployment Descriptor (web.xml)
      • Übergabe von Konfigurationsparametern aus Web Deployment Descriptor an init(javax.servlet.ServletConfig)
      • Cookies (Klasse C ookie() ), zum Speichern und Übertragen von Zustandsinformationen zwischen Browser und Web-Container.
        • Typischer Anwendungsfall: Zuordnung von HTTP-Anfragen zu einer Sitzung.
      • Senden von Binärdaten(-strömen) an Client, z.B. für Grafiken.
      • Einbinden und Weiterleiten externer Ressourcen (R equestDispatcher() )
      • Überwachung aktiver Sitzungen ( HttpSessionListener() )
      • Manipulation des Servlet-Ein-/Ausgaben (Request/Response) durch Servlet-Filter
      • Tipp: Thomas Stark, „Java EE5 – Einstieg für Anspruchsvolle“, Addison-Wesley
    • JEE – Was ist das?
        • Enterprise Edition
        • Web Container
        • JavaServer Pages (JSP)
    • JavaServer Pages (1)
      • Da ca.99% von Web-Anfragen erwarten eine Antwort im HTML-Format. Mit Servlets kann dies eine recht mühevolle Aufabe sein, weshalb Sun die Servlet-Spezifikation um JavaServer Pages (JSP) ergänzte.
      • JSP sind ein Hilfsmttel, um die Erstellung der Java-Klassen in den Hintergund zu verlagern und den Fokus auf die grafischen Elemente und HTML zu legen.
      • JSP betten Fragmente von Java-Code in HTML-Seiten ein (bei Servlets dagegen wird HTML-Code in Java eingebettet).
      • Alle JSP-Anweisungen werden von den Symbolen <% bzw. %> umschlossen, um den Java-Quelltext vom restlichen Markup (z.B. HTML) zu unterscheiden.
    • JavaServer Pages - Beispiel
    • JavaServer Pages (2)
      • Wird JSP zum erstmalig aufgerufen, setzt ein Hintergrundprozess des Web-Containers die JSP in ein Ad-Hoc-Servlet um, kompiliert es in Java-Bytecode (javac) und überrgibt es an die Servlet-Engine zur Ausführung in einem eigenen Thread.
      • Analog den Servlets können JSPs auf Ressourcen des Servers (Datenbanken, Dateien) zugreifen. Daneben gibt es eine einfache Schnittstelle um auf fertige Java-Komponenten (Beans, Enterprise Java Beans (EJB)) zuzugreifen.
      • Trotz begrenzter Syntax lassen sich mit JSPs mächtige Anwendungen erzeugen.
    • Erzeugen eines Ad-Hoc-Servlets aus einer JSP
      • Quelle: Kursunterlagen ORDiX AG
      • Zwischenschritt der Erzeugung „echten“ Servlet-Codes nicht dargestellt
    • Generierter Servlet-Code
    • JavaServer Pages - Bausteine
      • mehrere Anweisungen möglich
      • HTML-Ausgaben über vordefiniertes Object o ut (print())
      <% Java-Code %> Scriplets
      • nur eine Java-Anweisung zulässig (keine Semikolon am Ende erlaubt)
      • nur String, primitiver Datentyp und Object ( toString() )
      <%= Java-Ausdruck %> Ausdrücke
      • zur Definition globaler Variablen und Methoden
      • Code wird nicht bei jedem Request ausgeführt; Variablenwerte bleiben z.B. über mehrere Requests erhalten
      • Code kann von JSP-Ausdrücken und –Scriptlets aufgerufen werden
      <%! Java-Code %> Deklarationen
      • werden anders als HTML-Kommentare (< -- … -- >) nicht zum Client übertragen und sind daher unter Sicherheitsaspekten vorzuziehen
      <%-- Kommentartext --%> Kommentare
    • JavaServer Pages - Lebenszyklus
      • ähnlich wie bei Servlets; falls JSP noch nicht kompiliert vorliegt, wird JSP-Servlet zunächst generiert und übersetzt
      • Initialisierung
        • einmalig nach dem Laden und vor der Bearbeitung der ersten Anfrage
        • jspInit() kann überschrieben werden
        • Abarbeitung der JSP-Deklarationen
      • Bearbeitung der HTTP-Requests
      • Zerstörung
        • eimalig nach dem Beenden der Web-Anwendung
        • alle HTTP-Requests müssen abgeschlossen sein
        • jspDestroy() kann überschrieben werden
    • JavaServer Pages - Weiterführende Themen
      • (Java-)Kontrollstrukturen
        • if-else, switch, for, while-do, do-while
      • vordefinierte (Java-)Variablen
        • out, request, response, session, application, config, pageContext, page
      • Direktiven
        • <%@ NameDerDirektive attribut=„Wert1“ … %> mit NameDerDirektive = page, include, taglib
      • Arbeiten mit Benutzer-Sessions
        • Hinterlegen von Werten zwischen mehreren HTTP-Anfragen
        • Kodieren von URLs (jsessionid), wenn Cookies vom Client nicht akzeptiert
      • Auslagern der Geschäftslogik in JavaBeans (interessant, da getrennte Entwicklung des Web-Design und der Datenverarbeitung möglich)
      • JSP-Tags/Tag-Library (jsp:include, jsp:forward, jsp:getProperty, jsp:setProperty, jsp:useBean, …)
    • Vergleich: Servlets - JavaServer Pages
      • Gemeinsamkeiten:
        • plattformunabhängig, serverunabhängig
        • Unterstützung von Session-Konzepten
        • Zugriff auf gesamtes Java-API (z.B. über JDBC auf alle Datenbanken)
      • Unterschiede:
        • Servlet
          • Layout (HTML) muss in Applikationslogik erzeugt werden
          • Nur für Web-Seiten mit geringem Anteil an HTML-Code oder zur Erzeugung von Nicht-HTML-Daten geeignet
        • JSP
          • Direkte Verwendung von HTML-Tags
          • Logik kann in JavaBeans ausgelagert werden
          • Getrennte Entwicklung von Web-Design und Datenverarbeitung möglich
    • JEE – Was ist das?
        • Enterprise Edition
        • Web Container
        • Tag-Libraries
    • Tag Libraries (1)
      • Servlet und JSP
        • verbinden HTML und Java um dynamische Webseiten zu erstellen
        • dabei spielt Markup in Form von Tags eine große Rolle; es werden aber auch immer grundlegende Java-Kentnisse benötigt
      • Tag Libraries (Taglibs, Tag-Bibliotheken)
        • gestatten die Implementierung eigener Tags, bei deren Verwendung in einer JSP (zusätzlich zu HTML-Tags) kein Java-Code mehr sichtbar ist
        • dem Web-Designer sollen beliebige Java-Objekte (Tag-Handler) transparent zur Verfügung gestellt werden
        • Ziel: Tags sollen JSPs von “lästigem” Java-Code befreien, der sie häufig aufbläht und unübersichtlich macht
        • Taglibs sind über Projektgrenzen hinaus wiederverwendbar (portabel)
    • Tag Libraries (2)
      • Es existieren viele frei verfügbare Tag-Bibliotheken, die einen riesigen Satz an vordefinierter Funktionalität bereitstellen:
        • JSP StandardTag Library (JSTL)
          • Manipulation von Datenbanken
          • Lesen von XML-Dateien
          • Internationalisierung
          • http://java.sun.com/products/jsp/jstl/
        • Struts Tag Library
          • Umsetzung des Model-View-Controller-Prinzips für JSP
        • Regexp Tag-Library
          • Reguläre Ausdrücke für JSP
      • Sammlung von Tag-Bibliotheken des Jakarta Apache Project :
        • http://jakarta.apache.org/taglibs/
    • Tag Libraries – JSP mit Tag (Beispiel)
    • Tag Libraries - Implementierung
      • Um Tags benötigt man einen
        • Tag-Handler
          • In Java implementiert.
          • Der Web-Container ersetzt zur Laufzeit das Tag in der JSP durch die Ausgabe des zugeordneten Tag-Handlers.
        • Tag Library Descriptor (TLD)
          • Der TLD teilt dem Web-Container mit, welcher Tag-Handler das Tag (im Beispiel <data>) implementiert.
        • Web Deployment Descriptor (web.xml)
          • Hier nicht weiter beschrieben.
    • Tag Libraries - Tag Handler Methoden
    • Tag Libraries – Tag Handler (Beispiel)
    • Tag Libraries – Tag Library Descriptor (Beispiel)
    • Tag Libraries – Weiterführende Themen
      • Einbinden der Tag-Bibliothek (öffentliche URL, Web Deployment Descriptor)
      • Attribute, z.B. <montagsreihe:date format=„dd.MM.yyyy HH:mM “ />
        • Tag-Handler als JavaBean mit Getter- und Setter-Methoden für Tag-Attribute
      • Tag-Rumpf manipulieren (Klasse BodyTagSupport )
      • Script-Variablen
        • Zugriff aus demTag-Handler von in JSPs erzeugten Variablen
      • Tag-Kontext ( findAncestorWithClass )
        • Traversieren in der Tag-Hierarchie
      • Entscheidungen
        • <montagsreihe:if condition=„ <%= isParamSet %> “ >
        • <montagsreihe:then> vorhanden. </ montagsreihe:then>
        • <montagsreihe:else> nicht vorhanden. </ montagsreihe:else>
        • </montagsreihe:if>
      • Vordefinierte Variablen in Tag-Handlern ( pageContext )
    • JEE – Was ist das?
        • Enterprise Edition
        • Web Container
        • Struts
    • Struts
      • ist ein (komplexes) Open-Source-Framework für die Präsentationsschicht von Java-Webanwendungen , das dem „architektonischen Muster“ von Model-View-Controller (MVC) folgt
      • ist nicht Bestandteil der JEE-Spezifikation von Sun, sondern ein im Jahr 2000 gegründetes Projekt der Apache Software Foundation (ASF)
      • ist De-facto der Standard für in Java entwickelte Web-Applikationen
      • beschleunigt die Entwicklung von Webanwendungen, indem es HTTP-Anfragen in einem standardisierten Prozess verarbeitet
      • bedient sich dabei standardisierter Technologien wie Servlets, JSP, JavaBeans, Resource Bundles …
      • heißt übersetzt soviel wie „Stütze“ oder „Strebe“
      • http://struts.apache.org/
    • Struts - Was ist ein Framework?
      • bedeutet (Programm-)Gerüst, Rahmen oder Skelett und bildet eine (Laufzeit-)Plattform für Anwendungen
      • gibt eine Anwendungsarchitektur vor, an der der Entwickler konkrete Implementierungen registriert, die dann durch das Framework, d.h. nicht durch die Implementierung, gesteuert werden („Umkehr der Kontrolle“)
      • wenn das Registrieren der Klassen nicht fest im Programmcode verankert ist, sondern wird „von außen“ konfiguriert wird, so spricht man auch von Dependency Injection
      • definiert den Kontrollfluss der Anwendung (Workflow) und die Schnittstellen für die Klassen
      • werden mit dem Ziel einer Wiederverwendung „architektonischer Muster“ für bestimmte Anwendungsbereiche entwickelt
        • ein Web-Framework ist demzufolge ein Framework für Web-Anwendungen, dass sich auf Web-Technologien stützt
      • http://de.wikipedia.org/wiki/Framework
    • Struts – Warum ein Framework benutzen?
      • Die JEE ist eine Sammlung abgestimmter Technologien (Spezifikation), mit denen sich unternehmensweite Lösungen erstellen lassen. Wie man die JEE-Technologien anwendet, ist lediglich in der Dokumentation und in Entwurfsmustern von Sun beschrieben; JEE selbst stellt jedoch keine Software dar, die man einfach einsetzen könnte.
      • Die Architektur vieler Web-Frameworks basiert auf JEE-Patterns wie z. B. dem Front-Controller ( ActionServlet ) . Web-Frameworks erleichtern den Einsatz von JEE-Patterns, bspw. in dem Muster nicht manuell implementiert, sondern über eine Datei konfiguriert werden (struts_config.xml).
      • Gleichnis: http://www.oio.de/webframeworks.htm
        • Servlets und JSP gleichen einem Spaten, mit dem Erde ausgehoben werden kann. Ein Spaten beherrscht man in nur wenigen Minuten. Danach ist man in der Lage ganze Baugruben auszuheben. Der Spaten ist preiswert, einfach zu bedienen und benötigt kaum Wartung.
        • Ein Framework gleicht einem Bagger. Baggerfahren ist schwierig und erfordert einige Tage zum Lernen und Üben. Bevor ein Bagger eingesetzt werden kann, muß er zum Einsatzort gebracht werden. Und von Zeit zu Zeit muss ein Bagger auch betankt werden. Die Arbeit mit einem Bagger geht im Vergleich zu einem Spaten dafür wesentlich zügiger.
    • Struts - Model-View-Controller (MVC)
      • MVC teilt eine Applikation in drei Schichten
        • Datenpräsentation und Geschäftslogik (Model)
        • Darstellung und Interaktion mit dem Benutzer (View)
        • Vermittler zwischen beiden Schichten (Controller)
      • Ziel: lose Kopplung zwischen Model und View, was dadurch erreicht wird, dass beide nur über den Controller kommunizieren
      • Vorteil:
        • ein flexibles Programmdesign, um spätere Änderungen oder Erweiterungen einfach zu halten und die Wiederverwendbarkeit der einzelnen Komponenten zu ermöglichen
        • sorgt bei großen Anwendungen für eine gewisse Übersicht und Ordnung durch Reduzierung der Komplexität
      • http://de.wikipedia.org/wiki/Model_View_Controller
    • Struts - MVC Model 1 Architektur
      • http://www.javaworld.com/javaworld/jw-12-1999/jw-12-ssj-jspmvc.html
      • JSP nimmt HTTP-Anfragen selbst entgegen und gibt HTTP-Antworten direkt an Client zurück
      • kein Servlet involviert
      • zwar Separierung von Präsentation (JSP) und Datenhaltung (JavaBean), aber Scriptlets in JSP enthalten noch Anwendungslogik
      • unklare Arbeitsteilung zwischen Web-Designer (JSP) und Anwendungsentwicker (Java)
    • Struts - MVC Model 2 Architektur
      • Servlet
        • nimmt HTTP-Anfragen entgegen
        • ruft Geschäftslogik auf, die das Ergebnis in JavaBeans ablegt
        • Anfrage im letzten Schritt an JSP weiter
      • JSP
        • nur noch für Präsentation zuständig; enthält keine Anwendungslogik mehr
        • liefert HTTP-Antwort an Client auf Basis der JavaBean-Daten aus
      • klare Arbeitsteilung zwischen Web-Designer (JSP) und Anwendungsentwicker (Java)
    • JavaBeans
      • sind Software-Komponenten für Java
      • entwickelten sich aus der Notwendigkeit, GUI-Klassen (AWT, Swing) einfach instanziieren (Reflections) und übertragen (RMI) zu können
      • werden als Container zur Datenübertragung verwendet
      • haben einen parameterlosen Konstruktor
      • speichern persistente Daten in Form von Attributen (properties) und kapseln darauf basierende Anwendungslogik
      • Attribute bestehen aus nicht-öffentlicher Instanzvariablen (private) und öffentlichen Zugriffsmethoden (Getter- und Setter-Methoden)
      • Zugriffsmethoden haben immer die Form setXxx() und getXxx() bzw. isXxx() bei booleschen Attributen
      • sind serialisierbar (Serializable)
      • kann aus anderen JavaBeans aufgebaut sein
      • müssen der JavaBeans Spezifikation genügen
      • http://java.sun.com/products/javabeans/
    • Struts – Komponenten (1)
    • Struts – Komponenten (2)
      • JavaServer Pages (JSP)
        • dienen ausschließlich der Darstellung und enthalten deshalb keine JSP-Scriptlets und –Deklarationen
        • legen Daten unter Verwendung der Bean-Tag-Bibliothek in JavaBeans ab
        • generieren HTML-Antworten
      • Tag-Bibliotheken
        • kapseln die in den JSPs benötigte Logik
        • Struts wird mit vielen bereits vordefinierten Tag-Bibliotheken ausgeliefert
    • Struts – Komponenten (3)
      • ActionServlet
        • genau ein Servlet (Controller)
        • nimmt HTTP-Anfragen entgegen und füllt ActionForm mit HTTP-Parametern
        • leitete HTTP-Anfragen an Action weiter
        • nimmt ActionForward von Action entgegen und leitet an nächste Action bzw. JSP weiter
        • Forwarding wird durch Deklarationen in der struts_config.xml gesteuert
        • Authentifizierung, Authorisierung
        • Logging
    • Struts – Komponenten (4)
      • ActionForm (auch FormBean)
        • spezielle JavaBean, die alle benötigten Daten für die JSP und die Action enthält
        • ist die Schnittstelle zwischen JSP und Action und wird über die struts-config.xml mit einem Formular in der JSP verknüpft
        • wenn das Formular abgeschickt wird, wird die Bean durch das ActionServlet (noch bevor die Action ausgeführt wird) über die Setter-Methoden mit den entsprechenden Eingabewerten gefüttert
        • die Übertragung der Daten übernimmt das Framework
      • Action
        • enthalten die (Geschäfts-)Logik
        • greifen auf Backend-Komponenten, wie etwa Datenbanken zu
        • lesen die in den ActionForms gesammelten Daten aus und schreiben ihre Daten dorthin zurück
        • gibt eine ActionForward für die weitere Navigation zurück
        • der Forward hat einen bestimmten Namen über den das ActionServlet anhand der struts-config.xml entscheidet, zu welcher Seite weitergeleitet werden soll
    • Struts – Komponenten (5)
      • ActionForward
        • realisieren lose Kopplung zwischen JSPs und Anwendungslogik
        • einzelne Komponenten werden ausgetauscht, in dem das Ziel des ActionForward umkonfiguriert wird
      • Konfigurationsdatei struts-config.xml
        • „ Herz“ jeder Struts-Applikation, in der den Komponenten Aufgaben zugeteilt werden und der Workflow definiert wird
      • Ressourcen
        • Struts-Anwendungen enthalten i.d.R. keinen Text: alle Zeichenketten werden über Ressouce-Dateien verwaltet und erst zur Laufzeit integriert
        • Vorteile:
          • Überarbeitung von Texten, ohne JSP zu editieren
          • Gemeinsame benutzung von bezeichnungen über JSPs hinweg
          • Unterstützung von Mehrsprachigkeit
    • Struts - Ablauf eines Request (1)
    • Struts - Ablauf eines Requests (2)
      • Der vom Client gesendete Request wird vom ActionServlet entgegen genommen.
      • Das ActionServlet überträgt die Daten des Requests in die ActionForm, welche diese ggf. validiert.
      • Anschließend übergibt das ActionServlet das gefüllte ActionForm an die zugehörige Action.
      • Die Action kann die Daten der Form auch verwenden, um auf in JavaBeans implementierte Geschäftslogik zuzugreifen.
      • Anschließen wird über die Konfigurationsdatei struts_config.xml bestimnmt, welche JSP zur Darstellung des Ergebnisses verwendet werden soll.
      • Die JSP hat nun ihrerseits die Möglichkeit, auf die Daten der ActionForm und darin enthaltener Business-Logik Beans zuzugreifen, …
      • … um schließlich das Ergebnis darzustellen und die Kontrolle an den Client zurückzugeben.
    • JEE – Was ist das?
        • Enterprise Edition
        • Web Container
        • JavaServer Faces (JSF)
    • Faces
      • ein Web-Framework, das Bestandteil der JEE-Spezifikation ist
      • als Antwort von Sun auf den Erfolg von Apache Struts zu verstehen
      • konzeptionell eine Mischung aus Struts und Java-Swing
      • es existieren zwei unabhängige Implementierungen der Spezifikation
        • Referenzimplementierung von Sun
          • http ://java.sun.com/javaee/javaserverfaces/
        • MyFaces-Implementierung der Apache Software Foundation
          • http://myfaces.apache.org/
      • hat das Potenzial Struts zu verdrängen, da es aus dessen Fehlern lernen konnte (Spezifikation 1.1 wurde im Mai 2004 veröffentlicht)
      • Struts-Anwendungen können nach JSF-Anwendungen migriert werden
        • http://struts.apache.org/1.x/struts-faces/
    • Faces - Grundidee (1)
      • stellen GUI-Komponenten für Buttons, Labels, Eingabefelder, Checkboxen, etc. in Form von JSP-Tags zur Verfügung;
        • Faces Tag-Bibliothek: entält Core-Tags des Frameworks
        • HTML Tag-Bibliothek: enthält Faces-Pedants von HTML
      • Erweiterungen zu komplexeren Elementen wie Tabellen, Bäume, … sind möglich
      • die GUI-Komponeten sind für jede JSP als Baumstruktur am Server vorhanden (Analogie zu Java-Swing)
        • für jedes Oberflächenelement gibt es im Hintergrund eine korrespondierendes UIComponent -Objekt, wie UIInput , UICommand, …
        • Container-Komponenten, wie UIPanel, sorgen eigenständig für das Layout iher Sub-Komponenten
        • die zu den GUI-Komponenten korrespondierenden Objekte können den Zustand des GUI-Elements, z.B. Eingabedaten, speichern
    • Faces - Grundidee (2)
      • zur Darstellung der GUI-Komponeten werden diese über einen separaten Renderer serverseitig in HTML umgewandelt
      • der Renderer kann ausgetauscht werden; jedem GUI-Element kann sogar ein eigener Renderer zugewiesen werden
      • Kommunikation zwischen GUI-Elementen und verarbeitenden Funktionen findet über Event/Listener-Konzept statt
      • jeder GUI-Komponente kann ein Validator zugeordnet werden, der das Format eingegebener Daten prüft
      • Dialogabläufe werden in der Datei f ace-config.xml spezifiziert
        • http://www.sigs.de/publications/js/2004/04/beneken_JS_04_04.pdf
    • Faces - Grundidee (3)
    • Faces - Ablauf eines Requests (1)
    • Faces - Ablauf eines Requests (2)
      • Der vom Client gesendete Request wird vom FacesServlet entgegen genommen.
      • Das FacesServlet leitet den Request an die dafür konfigirierte JSP weiter.
      • Die JSP verwendet die JSF Tag Library und baut für jede JSP einen eigenen GUI-Komponentenbaum auf. Die Daten aus dem Request werden auf dem Komponentenbaum abgebildet.
      • Die Daten aus dem Komponentenbaum werden ihrerseits auf JavaBeans abgebildet.
      • Werden an der Oberfläche Buttons (oder vergleichbare Elemente) betätigt, werden über einen Event-Mechanismus die ActionListener aufgerufen, die an dem Element angemeldet sind.
    • Faces - Weiterführende Themen
      • JSF Request Processing Lifecycle
        • Restore View, Apply Request Values, Process Validations, Update Model Values, Invoke Application, Render Response
      • Renderer
      • Validatoren
      • Events und Listener
      • Dialogablauf
        • Workflow in face-config.xml spezifizieren
      • Datenaustausch mit JavaBeans
        • Datenbindungssyntax
      • Internationalisierung
    • JEE – Was ist das?
        • Enterprise Edition
        • Web Container
        • Andere Frameworks
    • Andere Frameworks Ruby on Rails (1)
      • „ Ruby on Rails“, kurz auch nur „Rails“ oder RoR
      • im Sommer 2004 veröffentlicht; seit dem gibt es einen „Hype“ um RoR
      • ist als Gegenstück zu schwergewichtigen Web-Frameworks zu verstehen
      • MVC-Framework
      • DRY – „Don‘t repeat youself“
        • Wissen zentral an einer Stelle halten, um Redundanz zu vermeiden
        • angeblich enthalten Ruby-Programme und damit auch RoR-Anwendungen weniger Redundanz als Java-Programme
      • „ scaffholding“ (Gerüstbau)
        • mit wenigen Kommandos wird Grundgerüst einer RoR-Anwendung erstellt
    • Andere Frameworks Ruby on Rails (2)
      • „ Convention over configuration“
      • Zuordnung der RoR-Komponenten über Namensgleichheit statt in aufwändigen XML-Konfigurationsdateien
    • Andere Frameworks Ruby on Rails (3)
      • rechts: Zuordnung JEE- zu RoR-Welt
      • Zukunft muss zeigen, ob RoR JEE verdrängen kann oder nur eine weitere Nischenlösung, insbesondere für kleinere Web-Anwendungen, wird.
      • http://www.rubyonrails.org/
    • Andere Frameworks Groovy on Grails
      • Groovy
        • ist Skriptsprache mit Java-ähnlicher Syntax, die um dynamische Elemente angereichert wurde
        • wird vor Ausführung in Java-Bytecode übersetzt und ist daher in einer JVM lauffähig ist
      • Groovy on Grails
        • wird mit dem Ziel entwickelt, viele Effekte von “Ruby on Rails” auf die JEE-Plattform zu übertragen
        • leichte Einarbeitung durch einheitliche Vorgaben (“convention over configuration”)
        • teilautomatiserte Erstellung von Artefakten aus Vorlagen (“scaffholding”)
        • Eingestzte Technologien und Produkte: Java EE, Groovy, Spring, Hibernate, Sitemash, Prototype, Dojo, Junit, Canoo WebTest
      • http://grails.org/
    • Andere Frameworks
      • Web-Frameworks gibt es wie “Sand am Meer”
      • http://java-source.net/open-source/web-frameworks
        • Spring
        • Tapestry
        • Cocoon
        • … und viele andere mehr
    • JEE – Was ist das? Ende Teil 1