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.
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
 Apache Tapestry
 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.
 Apache Struts
 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.

 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.

 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 .

 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

 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
 Die
 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.

 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.
 Seam
 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 .

 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 .
 Play Framework
 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

 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.

 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 .

 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.

 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 .

 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.

 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 .
 In jüngerer
 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.

 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

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

 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 .

 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).
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 GroupSpring :
- «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 .