Die Entwicklung von Java-Webanwendungen

Die Geschichte der Entwicklung von Webanwendungen in der Programmiersprache Java mit Beispielen für ihre Verwendung im Zeitraum vom Erscheinen der Servlet-Spezifikation bis zum heutigen Tag.



Der Artikel erhebt keinen Anspruch auf akademische Vollständigkeit und Richtigkeit. Die Interpretation aller angegebenen Fakten und die angegebenen Beispiele spiegeln ausschließlich das Wissen, den Standpunkt und die Fehler des Autors des Artikels wider. Der Zweck des Schreibens besteht darin, ein vollständiges Bild der aktuellen Situation für Java- Webanwendungen zu erhalten. Darüber hinaus können die präsentierten Informationen vom Leser als Ausgangspunkt für weitere unabhängige Recherchen verwendet werden.

Der Beispielcode befindet sich in den Repositorys auf GitHub : eine Demonstration jeder Bibliothek und jedes Frameworks sowie der Anwendung aus dem letzten Teil des Artikels . Zum Zeitpunkt des Schreibens befinden sich 37 Beispiele im ersten Repository . Im Laufe der Zeit wird deren Liste aktualisiert.

Zeitleiste der Entstehung von Technologien, Bibliotheken, Frameworks und deren Beliebtheit


Zur leichteren Wahrnehmung sind die Daten tabellarisch aufgeführt und werden durch Diagramme weiter veranschaulicht. Tabellenelemente werden nach Möglichkeit bedingt gruppiert. Bibliotheken und Frameworks sind nach Beliebtheit in absteigender Reihenfolge sortiert.

Informationen zur Popularität stammen aus zwei Quellen. Die erste Quelle ist der ZeroTurnaround RebelLabs Web Framework Popularity Index . Das letzte Update war Ende 2017 und wurde zuvor von zwei Blog-Posts begleitet: dem ersten und dem zweiten . Der Autor des zweiten Blogposts, Simon Maple , schloss sich Snyk an und sammelte und analysierte weiterhin solche nützlichen Statistiken. Eine zweite Quelle ist seine Studie , die im November / Dezember 2018 im Java Magazine veröffentlicht wurde (Frage 17).

Am oberen Rand der Tabelle wurde eine Reihe von Spezifikationen hinzugefügt. Frameworks, die nicht im Beliebtheitsindex enthalten waren, aber die ich noch erwähnen wollte, wurden am Ende der Tabelle hinzugefügt.
Nein, nein.Technologie, Bibliothek, FrameworkDatum der ersten VersionDatum der letzten stabilen VersionPopularität,%
TypSubtypRebelLabs, 2017Java Magazine, 2018
1SpezifikationServlet12/199609/10/2019
2Jsp27.09.199909/10/2019
3J2EE ,
Java EE ,
Jakarta ee
12/12/199909/10/2019
4Jax-ws28.10.200309/10/2019
5Jsf11.03.200409/10/2019
6Jax-rs09/08/200809/10/2019
7FrühlingFrühling mvc12.200508/02/201928,8236
8Frühlingsstiefel04.201408/02/201913.3540
9Frühling Webflux09.201708/02/2019
10JavaServer-GesichterEclipse Mojarra03.03.200430.11.200815,219
11Apache MyFaces11.200523.05.2019
12Google Web Toolkit16.05.200619.10.20177.746
13Grale10.200507/11/20196.353
14Streben05.200001/09/20195,49
15Dropwizard21.12.201108/07/20194.93
16Spielen05/05/200819.06.20193.263
17Jipster21.10.201320.09.20192.493
18Jax-rsApache cxf04.04.200813.08.20192.44
19RESTEasy09.09.200830.08.2019
20Jersey05.201009/10/2019
21Restlet01.201301.2018
22Vaadin200616.09.20192.155
23Naht200725.07.20131,94
24Wicket2005/0609/09/20191,912
25Wandteppich200009/06/20191.9
26Spark Java201122.05.20190,77
27Vert.x.201122.08.20190,76
28Rapidoid08.201427.05.20080,25
29Lagom03.201609/04/20190,24
30Ratpack201318.08.20190,13
31Javalin24.05.201708/11/2019
32Micronaut23.10.200813.09.2019
33MikroprofilTomee27.04.201221.06.2019
34Hängematte27.02.201403/05/2018
35Thorntail01.201617.07.2019
36Kumuluzee04/04/201629.06.2019
37Payara micro07/07/201728.08.2019
38Offene Freiheit19.09.201709/06/2019
39Helidon19.09.200813.09.2019

Auf der ersten Zeitachse werden die Daten aus der Tabelle in derselben Reihenfolge wie in der Tabelle angezeigt. Bestehende Gruppen werden nach Beliebtheit geordnet. In Gruppen (Spezifikation, Spring , JSF , JAX-RS , MicroProfile ) sind die Elemente in chronologischer Reihenfolge ihres Erscheinungsbilds angeordnet. Sie können auf eines der Bilder klicken, um es zu vergrößern.



Auf der zweiten Zeitachse werden dieselben Informationen nach dem Datum sortiert, an dem die erste Version aller Elemente angezeigt wurde. Es ist leicht zu erkennen, dass Sie beispielsweise im Jahr 2001 zum Schreiben einer Webanwendung nur aus zwei vorhandenen Hauptframeworks auswählen konnten - Tapisserie und Streben . Zu Beginn des Jahres 2014 war es unmöglich, Spring Boot zu verwenden (die erste offizielle Version wurde später veröffentlicht), und es machte keinen Sinn, Seam zu verwenden (es existierte nicht mehr).



Das Kreisdiagramm zeigt den Framework-Beliebtheitsindex nach RebelLabs Ende 2017 . Jedes der Frameworks im Index nimmt einmal teil, dh der Gesamtzins beträgt 100. Das zweite Diagramm zeigt das Ergebnis einer Studie des Java Magazine, 2018 . In der Studie wurde gefragt, welche Web-Frameworks verwendet werden. In der Antwort durften mehrere ausgewählt werden. Aus diesem Grund ist jeder Prozentsatz unabhängig vom anderen und kann nicht zusammengefasst werden.



Technische Daten


Der Eckpfeiler der Existenz aller Bibliotheken sind die Standards und Spezifikationen, auf denen sie basieren. Spezifikationen existieren in Form von Java Specification Requests ( JSRs ), die durch ein formales Verfahren namens Java Community Process ( JCP ) entwickelt wurden.

Eine Liste der JSRs für Java Enterprise Edition finden Sie hier . Die folgende Tabelle zeigt nur die beiden wichtigsten Spezifikationen, die aus ihnen ausgewählt wurden - Servlet und Java EE (letzteres ist eine Reihe anderer Spezifikationen). Die ersten Versionen der Spezifikationen wurden nicht als Teil des JCP akzeptiert, daher haben sie keine JSR- Nummern.

Seit dem 12. September 2017 wurde Java EE an das Management der Eclipse Foundation übertragen und heißt jetzt Jakarta EE . JCP wurde durch den Jakarta EE-Spezifikationsprozess als Prozess zur Entwicklung und Annahme von Spezifikationen ersetzt.

Verwenden von HTTP-Servlets


Im Folgenden finden Sie einige Beispiele zum Erstellen einer Webanwendung ohne Bibliotheken oder Frameworks. Links zum Speicherort des Codes mit einem kurzen Kommentar werden nacheinander gegeben. Es gibt ähnlichere Methoden, von denen die offensichtlichsten demonstriert werden.

Das erste Beispiel ( Modul helloworld-web-servlet-xml ) im Deployment-Deskriptor web.xml gibt die Klasse an, die von der abstrakten Klasse HttpServlet mit einer eigenen Implementierung der Methode doGet () geerbt wurde . Zum ersten Mal wurde die Deployment-Deskriptor-Datei web.xml in der Servlet 2.2- Spezifikation (1999) erwähnt.

Im zweiten Beispiel ( Modul helloworld-web-servlet-annotation ) fehlt die Deployment-Deskriptordatei web.xml . Über derselben Klasse, die von der abstrakten Klasse HttpServlet geerbt wurde, befindet sich eine WebServlet- Annotation, die in Servlet 3.0 (2011) enthalten ist.

Das dritte Beispiel (die Module helloworld-web-servlet-interface-jar und helloworld-web-servlet-interface-war ) ist etwas komplizierter. Es zeigt, wie die Implementierung der ServletContainerInitializer- Schnittstelle verwendet wird, die auch in Servlet 3.0 enthalten ist . Im ersten Modul helloworld-web-servlet-interface-jar gibt es noch keine Deployment-Deskriptordatei web.xml . Es gibt eine Klasse, die von der abstrakten Klasse HttpServlet abgeleitet ist . Servlet 3.0 ermöglicht die Implementierung der ServletContainerInitializer- Schnittstelle, um Servlet-Komponenten programmgesteuert hinzuzufügen, einschließlich Servlet-Registrierung durchführen. Die Implementierungsklasse der ServletContainerInitializer- Schnittstelle unter Verwendung des SPI- Konzepts ( Service Provider Interface ) wird durch Angabe ihres Namens in der Datei META-INF/services/javax.servlet.ServletContainerInitializer konfiguriert. Das erste Modul erstellt eine JAR-Datei. Die WAR-Datei erstellt das zweite Modul helloworld-web-servlet-interface-war , das erste Modul ist in der Liste der Abhängigkeiten angegeben. Ein ähnlicher Ansatz zum Implementieren der ServletContainerInitializer- Schnittstelle wird von den JSF- und Spring- Frameworks in ihren FacesInitializer- bzw. SpringServletContainerInitializer- Klassen verwendet.

Servlet 3.0 führte auch asynchrone Servlets in Servlet 3.1 (2013) - nicht blockierende E / A, in Servlet 4.0 (2017) - HTTP / 2- Unterstützung ein.

Das Zeitalter vor dem Frühling


Wandteppich Apache Tapestry ist ein echtes, langlebiges Webanwendungsframework. Die erste Version wurde im Jahr 2000 veröffentlicht, neue Versionen werden weiterhin veröffentlicht. Bei der Gestaltung von Tapestry wurden Ideen von WebObjects , einem Web-Framework, das einige Jahre zuvor erschien, ausgeliehen. Anwendungen, die Tapestry verwenden (z. B. das Modul helloworld-web-tapestry ), verwenden die modulare Architektur und die Bindung der Komponenten der Benutzeroberfläche von Webseiten mit den entsprechenden Java- Klassen.

Streben Apache Struts erschien im Mai 2000 fast gleichzeitig mit dem vorherigen Framework und entwickelt sich auch bis heute weiter. In dem darauf basierenden Beispiel (dem Modul helloworld-web-struts ) sehen Sie in der Deployment-Deskriptordatei web.xml einen Hinweis auf die Klasse StrutsPrepareAndExecuteFilter als Filter. Diese Klasse dient als Anforderungsmanager und wählt eine der Anforderung entsprechende Aktion aus. Apache Struts basiert wie Tapestry auf dem MVC- Entwurfsmuster.

jsf Im März 2004 wurde die JavaServer Faces- Spezifikation und zwei aufeinanderfolgende Implementierungen veröffentlicht: jetzt Eclipse Mojarra (ehemals Sun JSF-Referenzimplementierung , JSF RI , Mojarra , Oracle Mojarra ) und Apache MyFaces . Der Hauptansatz, der von der Spezifikation unterstützt wird, ist die Verwendung von Komponenten. Beide Beispiele ( Module helloworld-web-jsf-mojarra und helloworld-web-jsf-myfaces ) sind mit Ausnahme der Abhängigkeitsbibliotheken absolut identisch. Anwendungen definieren und zeigen auf den Webseiten die Version der Implementierung der JSF- Spezifikation, den Namen der Implementierung ( Mojarra oder MyFaces ) und die Version der Implementierung an.

Wicket Juni 2005 und die Veröffentlichung der ersten Version des Wicket- Frameworks, die Tapestry und JavaServer Faces ideologisch ähnlich ist. Ein komponentenorientierter Ansatz und die Verknüpfung von HTML- Vorlagen für Webseiten mit Java- Klassen. Seit Juni 2007 gehört das Framework der Apache Software Foundation und ändert seinen Namen in Apache Wicket . Der Höhepunkt der Popularität des Frameworks war etwa 2008-2009, gefolgt von einem allmählichen Rückgang des Interesses daran. Neue Versionen werden weiterhin veröffentlicht. Eine Beispielanwendung finden Sie im Modul helloworld-web-wicket .

Grale Im Oktober 2005 wurde die erste Version von Grails veröffentlicht , einem Framework zum Erstellen von Webanwendungen in der Sprache Groovy JVM . Wie der Name des Produkts andeutet, hatte Ruby on Rails , ein in Ruby geschriebenes Framework , einen starken Einfluss auf seine Erstellung. Auch basierend auf dem MVC-Muster . Eine Besonderheit ist die Verwendung von GSP- Ansichtsdateien ( Groovy Server Pages ) als Vorlagen. Ein Beispiel ( helloworld-web-grails- Modul) wird erstellt, erstellt und kann mit dem Grails Maven Plugin , einem Plugin für Maven, ausgeführt werden .

Spring MVC, Spring Boot und Spring WebFlux


Frühling Die erste Version des Spring Frameworks , einschließlich Spring MVC , erschien im Dezember 2005. Die Klasse des darin enthaltenen HTTP- Servlets ist DispatcherServlet . Im Folgenden sind einige Beispiele in chronologischer Reihenfolge für das Erscheinungsbild von Funktionen aufgeführt (neue Versionen der Servlet- Spezifikation, zuerst veröffentlicht im April 2014, dann Spring WebFlux im September 2017), die in ihnen verwendet werden.

Im ersten Beispiel (dem Modul helloworld-web-spring-mvc-xml ) wird die Deployment-Deskriptordatei web.xml als DispatcherServlet- Servlet angegeben. In der Steuerung mit der einzigen Methode, die die GET-Anforderung verarbeitet, gibt es entsprechende Anmerkungen ( Controller und RequestMapping ). Die Ansicht ist eine JSP- Datei.

Im zweiten Beispiel (dem Modul helloworld-web-spring-mvc-java ) fehlt die Deployment-Deskriptordatei web.xml und die in Servlet 3.0 angezeigte Möglichkeit wird zum Ausführen der Softwarekonfiguration verwendet. Die von AbstractAnnotationConfigDispatcherServletInitializer geerbte Klasse (die letztendlich die Implementierung der ServletContainerInitializer- Schnittstelle mit SPI implementiert) und JavaConfig (Konfiguration unter Verwendung von Programmcode mit der Konfigurationsanmerkung werden zusammen verwendet ).

Das dritte Beispiel ( helloworld-web-spring-boot-mvc- Modul) zeigt eine signifikante Vereinfachung des Projekts bei gleichzeitiger Beibehaltung der gleichen Funktionalität dank Spring Boot . Zusätzlich zur Controller-Klasse gibt es zusätzlich nur eine Klasse, die von SpringBootServletInitializer geerbt und von SpringBootApplication mit Anmerkungen versehen wurde.

Das vierte Beispiel (das Modul helloworld-web-spring-boot-webflux ) zeigt zusammen mit Spring Boot die Verwendung von Spring WebFlux , das vor relativ kurzer Zeit zum Spring Framework hinzugefügt wurde. Spring WebFlux verwendet reaktive Prinzipien und Project Reactor . Von den beiden Hauptansätzen ( funktionaler Stil und annotationsbasiert ) ist der erste an dem Beispiel beteiligt.

Nach dem Aufkommen des Frühlings in den 2000er Jahren


Vaadin Die Entwicklung von Vaadin begann im Jahr 2002 als Ergänzung zu einem anderen Framework, Millstone 3 . Im Jahr 2006 wurde das, was geschaffen wurde, als fertiges kommerzielles Produkt gerahmt. Bis Mai 2009 hatte es den Namen IT Mill Toolkit und wurde erst nach diesem Moment Vaadin . Ende 2007 wurde der zuvor unabhängig implementierte Client-Teil durch das Google Web Toolkit ( GWT ) ersetzt. Das Beispiel (Modul helloworld-web-vaadin ) zeigt, dass es nur eine Java- Klassendatei gibt, in der alle Komponenten der Benutzeroberfläche programmgesteuert erstellt werden, während technische Details auf niedriger Ebene ausgeblendet werden.

gwt Ein sehr interessantes Produkt, Google Web Toolkit ( GWT ), erschien im Mai 2006, die neueste Version wurde vor zwei Jahren veröffentlicht. Zum Schreiben der Server- und Client-Teile haben Sie die Möglichkeit, dieselbe Java-Sprache zu verwenden . Ein spezieller Compiler konvertiert Client-Code in Java in JavaScript . Das Beispiel besteht aus drei Modulen: helloworld-web-gwt-client (Client-Teil), helloworld-web-gwt-Server (Serverteil) und helloworld-web-gwt-shared (Code gemeinsam für Client- und Serverteile). Während der Entwicklung können Sie das praktische Maven-Plug-In verwenden, um den Client-Teil im Super Dev-Modus zu starten, in dem der sogenannte Code-Server das Neukompilieren des geänderten Java- Codes vereinfacht.

Naht Seam begann sein Leben im Mai 2007 und hörte 2012 auf zu existieren. Es basierte auf Enterprise JavaBeans ( EJB3 ) und JavaServer Faces ( JSF ). Entwickelt von JBoss , damals Teil von Red Hat . Er schlug verschiedene interessante Konzepte vor (zum Beispiel Bijektion , für die es entsprechende Anmerkungen gab ). Die Site des Frameworks ist noch vorhanden, aber in einigen Abschnitten sind einige Links nicht mehr relevant. Eine Beispielanwendung befindet sich im helloworld-Web-Seam-Modul .

jax-rs Die erste Version der Java-API- Spezifikation für RESTful Web Services ( JAX-RS ) wurde 2008 veröffentlicht ( JSR 311 ), später wurde die Spezifikation aktualisiert ( JSR 339 , JSR 370 ). Die beliebtesten JAX-RS- Implementierungen sind die Apache CXF- Frameworks (die erste Version ist April 2008), RESTEasy (September 2008), Jersey (Mai 2010) und Restlet (Januar 2013). Beispiele für ihre Verwendung finden sich in den Modulen helloworld-web-jaxrs-apache-cxf , helloworld-web-jaxrs-resteasy , helloworld-web-jaxrs-jersey bzw. helloworld-web-jaxrs-restlet .

spielen Play Framework erschien im Mai 2008. Geschrieben in der Programmiersprache Scala JVM . Ermöglicht das Erstellen von Webanwendungen, die darauf basieren, sowohl in Scala als auch in Java . Eine Besonderheit der Play- Entwickler ist ihr Engagement für das sbt- Build- Tool . Aus diesem Grund musste ich, um ein Beispiel zu schreiben ( helloworld-web-play- Modul), einige Anstrengungen unternehmen, um unter Maven mit dem entsprechenden Plug-In zu bauen.

2010s, die späteste Zeit


sparkjava Im Jahr 2011 wurde die erste Version des wunderbaren Spark- Mikroframeworks veröffentlicht, das unter dem Einfluss von Sinatra in Ruby veröffentlicht wurde. Laconicism, Leichtigkeit und Minimalismus der Syntax sind inhärent. Ein Beispiel ( helloworld-web-sparkjava-Modul ) zeigt, wie Sie eine vollständige Anwendung in nur wenigen Zeilen schreiben können. Die Funktionen des Frameworks können durchaus ausreichen, wenn Sie in Ihrer Anwendung nichts zu Kompliziertes benötigen.

vertx Im Jahr 2011 erschien Vert.x , ein ereignisorientiertes Framework, das auf der JVM ausgeführt wird . Geschrieben unter dem maßgeblichen Einfluss von Node.js , ursprünglich Node.x genannt. Es ist mehrsprachig und ermöglicht es Ihnen, Java , JavaScript , Groovy , Ruby , Ceylon , Scala oder Kotlin zu verwenden, wenn Sie das Framework verwenden. Basierend auf der Netty- Bibliothek bietet es viele Besonderheiten und Vorteile. Ein Beispiel ist das Modul helloworld-web-vertx .

Dropwizard Dezember 2011 war der erste Zeitpunkt für die Existenz von Dropwizard , dessen Autoren ihr Produkt als etwas zwischen der Bibliothek und dem Framework positionieren. Die drei Hauptteile, aus denen es besteht, sind die Bibliotheken Jetty ( HTTP ), Jersey ( JAX-RS ) und Jackson ( JSON ). Es entwickelt sich derzeit weiter und erfreut sich sogar einiger Beliebtheit. Das Beispiel ( Modul helloworld-web-dropwizard ) zeigt eine typische Struktur einer auf Dropwizard basierenden Webanwendung.

Ratpack Ratpack ist ein weiteres Framework (neben Spark ), das von der Sinatra- Bibliothek inspiriert und größtenteils in der Groovy JVM- Sprache geschrieben wurde . Frank Sinatras Verbindung mit dem sogenannten Rattenpackung ("Rattenpackung"). Die erste Version des Frameworks wurde 2013 veröffentlicht, neue Versionen werden weiterhin veröffentlicht. Basierend auf der Netty- Bibliothek, schnell, minimalistisch, benutzerfreundlich und hoch skalierbar. Ein Beispiel ist im Modul helloworld-web-ratpack zu sehen.

Jhipster Oktober 2013, das Aufkommen des neugierigen JHipster- Projekts, eines Webanwendungs-Framework-Generators. Um den Client-Teil zu erstellen, wird das JavaScript- Framework Angular , React und Vue unterstützt (letzteres wird im experimentellen Modus weiterhin unterstützt). Das Backend basiert auf Spring Boot . Um das Projekt zu erstellen, können Maven oder Gradle ausgewählt werden. Ein Beispiel für eine von JHipster generierte Anwendung befindet sich im Modul helloworld-web-jhipster .

Rapidoid Im August 2014 wurde die erste Version des Rapidoid- Frameworks veröffentlicht , einfach, schnell und modular. Das empfohlene Modul, mit dem empfohlen wird, das Framework zu verwenden, umfasst die Interaktion über HTTP , die Bibliotheken Hibernate , Hibernate Validator , MySQL Connector und Logback . Mit steigendem Bedarf kann der verwendete Modulsatz erweitert werden. Ein Beispiel ( helloworld-web-rapidoid-Modul ) ermöglicht es Ihnen, den Minimalismus des Codes zu bewerten, der zum Abrufen einer einfachen Webanwendung erforderlich ist.

Lagom März 2016, Veröffentlichung des Lagom- Frameworks. Die Autoren dieses Softwareprodukts positionieren seine Anwendung, um alte monolithische Anwendungen in reaktive Mikrodienste zu zerlegen, die sich während ihres Betriebs gut skalieren lassen. Das Framework basiert auf Akka und Play Framework . Die Programmiersprachen Java oder Scala können zur Entwicklung ihrer Anwendungen verwendet werden. Ein auf Lagom basierendes Beispiel finden Sie in den Modulen helloworld-web-lagom-api und helloworld-web-lagom-impl .

Javalin In jüngerer Zeit, im Mai 2017, wurde die leichte und einfache Javalin- Bibliothek veröffentlicht . Seine Schöpfer selbst geben dank der Autoren der bereits erwähnten Sinatra- und Spark- Frameworks an. Die Bibliothek konzentriert sich auf die Sprachen Java und Kotlin . Es garantiert das Fehlen von Anmerkungen und die Notwendigkeit, Bibliotheksklassen zu erben, so präzisen Code wie möglich, Unterstützung für WebSocket , HTTP / 2 und asynchrone Anforderungen. Ein darauf basierendes Beispiel ist im Modul helloworld-web-javalin zu sehen.

Mikronaut Der aufstrebende Stern unter den Web-Frameworks, deren erste Version erst vor einem Jahr im Oktober 2018 erschien, ist Micronaut . Unterstützt Java- , Groovy- und Kotlin- JVM- Programmiersprachen. Sein wesentlicher Vorteil ist ein schneller Start der darauf basierenden Anwendungen und ein geringer Speicherverbrauch. Dies wird durch die Implementierung von Abhängigkeiten in der Kompilierungsphase und nicht zur Laufzeit sichergestellt. Eine weitere Funktion ist die hervorragende Unterstützung der reaktiven Programmierung. Die Verwendung von RxJava- , Reactor- und Akka- Bibliotheken ist möglich . Ein Beispiel ( helloworld-web-micronaut-Modul ) zeigt die Erstellung einer einfachen Micronaut- basierten Anwendung .

Mikroprofil


Mikroprofil Aufgrund der derzeitigen Schwere von Java EE benötigen einige Unternehmen Microservices, um eine Reihe leichter Spezifikationen zu entwickeln. Dies wurde durchgeführt - im September 2016 wurde MicroProfile 1.0 veröffentlicht. Anfangs enthielt das Set nur drei Spezifikationen ( CDI , JAX-RS und JSON-P ). Die Anforderungen wurden schrittweise erhöht, und ab Version 3.0 ist die Liste der Spezifikationen erheblich gewachsen.

Nein, nein.SpezifikationMicroProfile-Version
1.01.11.21.31.42.02.12.23.0
1Cdi1.21.21.21.21.22.02.02.02.0
2Konfig1.01.11.21.31.31.31.31.3
3Fehlertoleranz1.01.01.11.11.12.02.0
4Gesundheit1.01.01.01.01.01.02.0
5Jax-rs2.02.02.02.02.02.12.12.12.1
6Json-b1.01.01.01.0
7Json-p1.01.01.01.01.01.11.11.11.1
8JWT Auth1.01.01.11.11.11.11.1
9Metriken1.01.11.11.11.11.12.0
10API öffnen1.01.01.01.01.11.1
11Öffnen Sie die Ablaufverfolgung1.01.11.11.21.31.3
12Geben Sie Safe Rest Client ein1.01.11.11.11.21.3

Derzeit gibt es Web-Frameworks, die MicroProfile in unterschiedlichem Maße erfüllen. Sieben davon wurden zur Demonstration ausgewählt. Das Folgende ist die Entsprechung der Framework-Versionen zu den MicroProfile- Versionen. Ausführliche Informationen zu allen vorhandenen Frameworks, die MicroProfile implementieren, finden Sie hier .
Nein, nein.FrameworkMicroProfile-Version
1.01.11.21.31.42.02.12.23.0
1Tomee7.1.08.0.0-M18.0.0-M28.0.0-M3
2Hängematte2.0
3Thorntail2.1.0
Finale
2.3.0
Finale
2.4.0
Finale
2.5.0
Finale
4Kumuluzee2.1.02.5.23.0.03.2.03.2.03.2.03.2.03.5.0
5Payara micro174181182183183191192
6Offene Freiheit17.0.
0,3
18.0.
0,1
18.0.
0,3
18.0.
0,3
18.0.
0,4
19.0.
0,3
19.0.
0,7
7Helidon0.9.41.01.2.01.2.01.2.01.2.01.2.0

Mikroprofil1 Die erste Gruppe von Frameworks umfasst diejenigen, die zum Zeitpunkt der Veröffentlichung von MicroProfile 1.0 bereits vorhanden waren: TomEE (die erste Version wurde im April 2012 veröffentlicht), Hammock (Februar 2014), Thorntail (zuvor WildFly Swarm , Januar 2016) und KumuluzEE (April 2016). In den meisten Fällen wurde die Einhaltung neuer Spezifikationen für sie erreicht, indem alles Überflüssige aus dem vorhandenen Produkt entfernt wurde. Anwendungsbeispiele sind in den Modulen helloworld-web-microprofile-tomee , helloworld-web-microprofile-hängematte , helloworld-web-microprofile- thorntail und helloworld-web-microprofile-kumuluzee .

Mikroprofil2 Die zweite Gruppe von Frameworks umfasst diejenigen, die später als die erste Version von MicroProfile erschienen sind : Payara Micro (Juli 2017), Open Liberty (September 2017) und Helidon (September 2018). Für diese Frameworks wurde das Gegenteil möglich - beispielsweise wurde Helidon von Beginn der Implementierung an speziell für die Einhaltung von MicroProfile entwickelt , weshalb es in seiner Zusammensetzung nichts Überflüssiges enthält. Beispiele für Gebäudeanwendungen finden Sie in den Modulen helloworld-web-microprofile-payara , helloworld-web-microprofile-openliberty und helloworld-web-microprofile-helidon .

Servlet-Container und Anwendungsserver


Webanwendungen werden in einer speziellen Software ausgeführt, die die relevanten Spezifikationen implementiert (z. B. die Servlet-API ). Im Folgenden finden Sie die derzeit beliebtesten Servlet-Container und Anwendungsserver. Der Prozentsatz der Popularität wird auch den Ergebnissen der Studie entnommen (Frage 20).
Nein, nein.Servlet-Container, AnwendungsserverDatum der ersten VersionDatum der letzten stabilen VersionPopularität,%
FamilieName
1KaterKater11/199817.08.201941
2Tomee04.201221.06.2019
3JbossJboss eap199922.01.201915
4Wildfliege199907/03/2019
5Steg200014.08.20199
6Weblogic Server11/199730.08.20176
7WebsphereWebSphere Application Server199804/02/20195
8Offene Freiheit09.201714.08.2019
9GlasfischGlassfish Server06/06/200528.01.20195
10Payara Server31.10.201429.08.2019

Die Zeitleiste zeigt die Lebensdauer der einzelnen Softwareprodukte in der Tabelle. Sie können die Reihenfolge ihres Auftretens und den Zeitpunkt der Veröffentlichung der neuesten Versionen sehen.



Beim Bereitstellen und Veröffentlichen von Anwendungen wird immer mehr Containerisierung verwendet, sodass die Verwendung von Anwendungsservern immer weniger relevant wird.

Verwendung anderer Sprachen als Java in Anwendungen


In letzter Zeit gab es eine Tendenz, Hybridanwendungen zu erstellen, zu deren Komponenten Java- Code gehört. Entsprechend dem Trend im Java Magazine , dessen Hauptthema die Programmiersprache Java war , wurde in der Kolumne des Chefredakteurs in der Januar / Februar 2017- Ausgabe „The Polyglot Future“ die Aufnahme von JavaScript in die Interessenzone proklamiert.

In der oben bereits erwähnten Studie in Frage 16 waren sie daran interessiert, welche Nicht- JVM- Sprachen in JVM- Anwendungen verwendet werden. Der Anführer (57%) war JavaScript , das im Frontend verwendet wurde. Angesichts der Tatsache, dass einige Webanwendungen überhaupt keine grafische Benutzeroberfläche haben (Dienste, Microservices, Dienste), können wir mit Sicherheit sagen, dass die Verwendung von JavaScript- Frameworks für die grafische Oberfläche in Java- Anwendungen weit verbreitet ist.



Beispiel einer typischen Java-Anwendung heute


Um eine typische Java- Webanwendung mit einer grafischen Oberfläche zu demonstrieren, wurde ein Programm mit Emulation der grundlegenden Twitter-Funktionen geschrieben : Authentifizierung, Kontoverwaltung (Erstellen, Bearbeiten, Löschen, Suchen nach Teilzeichenfolgen), Hauptseite (Kontoeigenschaften, Nachrichten-Feed), Erstellen Tweets, abonnieren / abbestellen.

Das Backend wird mit Spring Boot geschrieben , das Frontend mit dem beliebten Angular JavaScript Framework. Im Java- Teil der Anwendung sind die Komponenten der Spring- Familie maximal vertreten: Spring MVC , Spring Boot , Spring Security , Spring Test , Spring Boot Admin . Die Backend- REST-API wird mit Swagger gerendert.

JUnit , Spring Test , Mockito , TestContainers (unit- Java -) Jasmine Protractor (unit- end-to-end- JavaScript Angular ).

( Spring Boot Angular ) , TechTrain 2019 .

Schlussfolgerungen


Java , -, . , , , , .

, , GitHub : , .

JUG Ru Group
Spring :
  • «Spring the Ripper», ( JPoint 2014 : , )
  • «Spring Data? , !», ( Joker 2014 : , )
  • «Spring Puzzlers: Spring», ( Joker 2014 : )
  • «Spring Puzzlers — », ( JPoint 2015 : , )
  • «The Bootiful Application», Josh Long ( Joker 2015 : , )
  • « Spring Boot Starter», ( JPoint 2016 : , )
  • «Spring – », ( JPoint 2017 : , )
  • « Spring Test», ( JPoint 2017 : , )
  • «Boot yourself, Spring is coming», ( Joker 2017 : )
  • « Spring 5/Reactor», ( Joker 2017 : )
  • «Spring Framework 5.0 on JDK 8 & 9», Juergen Hoeller ( JPoint 2018 : , )
  • «Spring Framework 5: feature highlights and hidden gems», Juergen Hoeller ( JPoint 2018 : , )
  • «Camel microservices with Spring Boot and Kubernetes», Claus Ibsen ( JPoint 2018 : , )
  • «Spring Boot Xtend: c », ( JPoint 2018 : , )
  • «Boot yourself, Spring is coming», ( JPoint 2018 : 1 2 , )
  • «Spring Boot 2: release notes», ( Joker 2018 : , )
  • «The Proxy fairy and the magic of Spring», Victor Rentea ( JPoint 2019 : , )
  • « Spring Boot, : AOT- Spring-», ( JPoint 2019 : , )
  • «Reactive reactive, », ( JPoint 2019 : , )
  • « Spring Boot- Java 8 11: ?», ( JPoint 2019 : , )

Play :
  • «50 Play!», ( Joker 2015 : )

Vaadin :
  • « — web UI Java desktop-», ( JPoint 2018 : , )
  • « Vaadin Flow», ( JPoint 2019 : , )

Vert.x :
  • «Vert.x: », ( Joker 2015 : )
  • «Vert.x: », ( Joker 2016 : , )
  • « Vert.x », ( JPoint 2018 : , )

Micronaut :
  • «Micronaut vs Spring Boot, ?», ( Joker 2018 : , )

MicroProfile :
  • «Microprofile.io: », ( Joker 2018 : , )

Java JavaScript :
  • «JavaScript in the nterprise», Markus Eisele ( Joker 2014 : , )
  • «Java(Script) on JVM», ( Joker 2015 : )


UPD : Quarkus ( helloworld-web-quarkus ) ActFramework ( helloworld-web-actframework ), .. 39.

25-26 2019 - Java- Joker 2019 , 1 .

8-9 2019 JavaScript- HolyJS 2019 Moscow , 1 .

Source: https://habr.com/ru/post/de453468/


All Articles