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