SlideShare ist ein Scribd-Unternehmen logo
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

Weitere ähnliche Inhalte

PDF
Shorten Device Boot Time for Automotive IVI and Navigation Systems
PPTX
Kotlin on android
PPT
Android ppt
PDF
Apache Spark vs Apache Spark: An On-Prem Comparison of Databricks and Open-So...
PPTX
Android studio ppt
PDF
Kotlin for Android Development
PPTX
Introduction to Kotlin Language and its application to Android platform
PDF
Using the Android Native Development Kit (NDK)
Shorten Device Boot Time for Automotive IVI and Navigation Systems
Kotlin on android
Android ppt
Apache Spark vs Apache Spark: An On-Prem Comparison of Databricks and Open-So...
Android studio ppt
Kotlin for Android Development
Introduction to Kotlin Language and its application to Android platform
Using the Android Native Development Kit (NDK)

Was ist angesagt? (20)

PPTX
Domain Driven Design for Angular
PPTX
PPT
Android™組込み開発基礎コース BeagleBoard編
PDF
An Introduction to Gradle for Java Developers
PDF
Selenium Automation Testing Interview Questions And Answers
PDF
What's new in selenium 4
PPTX
Kotlin Code style guidelines
PDF
Spring boot jpa
PDF
Mongodb Aggregation Pipeline
PPTX
Single Responsibility Principle
PDF
Android Boot Time Optimization
PPTX
Android jetpack compose | Declarative UI
PDF
WSO2 Advantage Webinar - JSON Support in the WSO2 Platform
PDF
Jetpack Compose a new way to implement UI on Android
PPTX
Introduction to Android and Android Studio
PPTX
Deep dive into swift UI
PDF
Introduction to kotlin
PPTX
Android Booting Sequence
Domain Driven Design for Angular
Android™組込み開発基礎コース BeagleBoard編
An Introduction to Gradle for Java Developers
Selenium Automation Testing Interview Questions And Answers
What's new in selenium 4
Kotlin Code style guidelines
Spring boot jpa
Mongodb Aggregation Pipeline
Single Responsibility Principle
Android Boot Time Optimization
Android jetpack compose | Declarative UI
WSO2 Advantage Webinar - JSON Support in the WSO2 Platform
Jetpack Compose a new way to implement UI on Android
Introduction to Android and Android Studio
Deep dive into swift UI
Introduction to kotlin
Android Booting Sequence
Anzeige

Ähnlich wie Introduction to JEE (20)

PPTX
.NET Core, .NET Standard & ASP.NET Core - Eine Übersicht
PDF
Die Java Plattform Strategie
PDF
Java in a Nutshell A Desktop Quick Reference 7th Edition Benjamin J. Evans
PDF
Article - JDK 8 im Fokus der Entwickler
PDF
OC|Webcast "Java heute" vom 24.08.2021
PDF
JavaFX goes open source
PDF
Der Application Server ist tot (?) - es lebe Jakarta EE!
ODP
Jalimo Slides Linuxtag2007
PDF
Neue Features der Java EE 6
PDF
Java EE 7 - Enterprise-Anwendungen ohne Ballast
PDF
Java EE Microservices ohne Server
PDF
Artikel eHealthcare Kompendium: Service Orientierte Architekturen für Healthcare
PDF
Java EE 6/7 - Enterprise-Anwendungsentwicklung leicht gemacht
PDF
Wie Azure Jakarta EE Nutzt
PDF
Rapid Deployment mit JomaSoft VDCF
PDF
OC|Webcast "Java heute" vom 28.09.2021
PPTX
Die besten 10 JavaScript Frameworks für moderne Web-Apps
PDF
Java EE 7 - Enterprise-Anwendungen ohne Ballast
PPTX
Roadshow: Einstieg in die Hybrid-App Entwicklung mit dem Intel XDK und Apache...
PDF
IceFaces In Randi2 Action
.NET Core, .NET Standard & ASP.NET Core - Eine Übersicht
Die Java Plattform Strategie
Java in a Nutshell A Desktop Quick Reference 7th Edition Benjamin J. Evans
Article - JDK 8 im Fokus der Entwickler
OC|Webcast "Java heute" vom 24.08.2021
JavaFX goes open source
Der Application Server ist tot (?) - es lebe Jakarta EE!
Jalimo Slides Linuxtag2007
Neue Features der Java EE 6
Java EE 7 - Enterprise-Anwendungen ohne Ballast
Java EE Microservices ohne Server
Artikel eHealthcare Kompendium: Service Orientierte Architekturen für Healthcare
Java EE 6/7 - Enterprise-Anwendungsentwicklung leicht gemacht
Wie Azure Jakarta EE Nutzt
Rapid Deployment mit JomaSoft VDCF
OC|Webcast "Java heute" vom 28.09.2021
Die besten 10 JavaScript Frameworks für moderne Web-Apps
Java EE 7 - Enterprise-Anwendungen ohne Ballast
Roadshow: Einstieg in die Hybrid-App Entwicklung mit dem Intel XDK und Apache...
IceFaces In Randi2 Action
Anzeige

Introduction to JEE

  • 1. JEE – Was ist das? Montagsreihe, 12.03.2007
  • 2. Agenda – Teil 1 Java Plattform Standard Edition Enterprise Edition Mehrschicht-Architekturen Web-Container Servlets JavaServer Pages Tag-Libraries Struts JavaServer Faces Andere Frameworks
  • 3. Agenda – Teil 2 EJB-Container Frank Ilchmann
  • 4. JEE – Was ist das? Java Platform
  • 5. 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.ä. …
  • 6. Java Platform Editions (1) Standard Edition Enterprise Edition Micro Edition http://java.sun.com/
  • 7. 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
  • 8. 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.
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. JEE – Was ist das? Standard Edition
  • 13. Java SE 6 Platform at a Glance
  • 14. 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
  • 15. 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.”
  • 16. 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.”
  • 17. 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.“
  • 18. JEE – Was ist das? Enterprise Edition
  • 19. 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
  • 20. 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
  • 21. 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)
  • 22. 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
  • 23. JEE – Was ist das? Enterprise Edition Mehrschicht-Architekturen
  • 24. 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
  • 25. 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.
  • 26. 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.
  • 27. 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.
  • 28. Umsetzung der Schichten-Modelle in die JEE-Architektur (Einführung JEE-Terminologie)
  • 29. 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.
  • 30. Typische JEE - Architektur
  • 31. JEE – Was ist das? Enterprise Edition Web Container
  • 32. 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
  • 33. 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.
  • 34. JEE – Was ist das? Enterprise Edition Web Container Servlets
  • 35. 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.
  • 38. 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
  • 39. 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
  • 40. 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
  • 41. JEE – Was ist das? Enterprise Edition Web Container JavaServer Pages (JSP)
  • 42. 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.
  • 43. JavaServer Pages - Beispiel
  • 44. 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.
  • 45. Erzeugen eines Ad-Hoc-Servlets aus einer JSP Quelle: Kursunterlagen ORDiX AG Zwischenschritt der Erzeugung „echten“ Servlet-Codes nicht dargestellt
  • 47. 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
  • 48. 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
  • 49. 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, …)
  • 50. 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
  • 51. JEE – Was ist das? Enterprise Edition Web Container Tag-Libraries
  • 52. 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)
  • 53. 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/
  • 54. Tag Libraries – JSP mit Tag (Beispiel)
  • 55. 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.
  • 56. Tag Libraries - Tag Handler Methoden
  • 57. Tag Libraries – Tag Handler (Beispiel)
  • 58. Tag Libraries – Tag Library Descriptor (Beispiel)
  • 59. 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 )
  • 60. JEE – Was ist das? Enterprise Edition Web Container Struts
  • 61. 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/
  • 62. 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
  • 63. 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.
  • 64. 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
  • 65. 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)
  • 66. 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)
  • 67. 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/
  • 69. 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
  • 70. 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 …
  • 71. 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
  • 72. 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
  • 73. Struts - Ablauf eines Request (1)
  • 74. 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.
  • 75. JEE – Was ist das? Enterprise Edition Web Container JavaServer Faces (JSF)
  • 76. 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/
  • 77. 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
  • 78. 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
  • 80. Faces - Ablauf eines Requests (1)
  • 81. 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.
  • 82. 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
  • 83. JEE – Was ist das? Enterprise Edition Web Container Andere Frameworks
  • 84. 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
  • 85. Andere Frameworks Ruby on Rails (2) „ Convention over configuration“ Zuordnung der RoR-Komponenten über Namensgleichheit statt in aufwändigen XML-Konfigurationsdateien
  • 86. 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/
  • 87. 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/
  • 88. 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
  • 89. JEE – Was ist das? Ende Teil 1