La historia del desarrollo de la creación de aplicaciones web en el
lenguaje de programación
Java con ejemplos de su uso durante el período desde la aparición de la especificación de servlet hasta la actualidad.

El artículo no pretende ser académico en su totalidad y precisión. La interpretación de todos los hechos expuestos y los ejemplos dados reflejan únicamente el conocimiento, el punto de vista y los errores del autor del artículo. El propósito de la escritura es tratar de obtener una imagen completa de la situación actual de las aplicaciones web
Java . Además, la información presentada puede ser utilizada por el lector como punto de partida para futuras investigaciones independientes.
El código de muestra está en los repositorios de
GitHub : una
demostración de cada biblioteca y marco y la
aplicación de la parte final del artículo . Al momento de escribir, hay 37 ejemplos en el
primer repositorio , con el tiempo, su lista se actualizará.
Cronología de la aparición de tecnologías, bibliotecas, marcos y su popularidad.
Para una percepción más fácil, los datos se tabulan y se ilustran adicionalmente mediante diagramas. Los elementos de la tabla se agrupan condicionalmente, si es posible. Las bibliotecas y los marcos están ordenados por popularidad en orden descendente.
La información sobre popularidad se toma de dos fuentes. La primera fuente es el
Índice de popularidad del marco web RebelLabs ZeroTurnaround . Su última actualización fue a fines de 2017 y estuvo acompañada por dos publicaciones de blog antes: la
primera y la
segunda . El autor de la segunda publicación del blog,
Simon Maple , se unió a
Snyk y continuó recopilando y analizando estadísticas tan útiles. Una segunda fuente es su
estudio , publicado en
Java Magazine, noviembre / diciembre de 2018 (pregunta 17).
Se ha agregado un conjunto de especificaciones en la parte superior de la tabla, los marcos que no se incluyeron en el índice de popularidad, pero que aún quería mencionar, se agregaron al final de la tabla.
En la primera línea de tiempo, los datos de la tabla se muestran en el mismo orden que en la tabla. Los grupos existentes se clasifican por popularidad. En grupos (especificación,
Spring ,
JSF ,
JAX-RS ,
MicroProfile ), los elementos se ordenan en orden cronológico de aparición. Puede hacer clic en cualquiera de las imágenes para ampliarla.

En la segunda línea de tiempo, la misma información está ordenada por la fecha en que apareció la primera versión de todos los elementos. Es fácil ver que en 2001, por ejemplo, para escribir una aplicación web, solo podía elegir entre dos marcos principales existentes:
Tapiz y
Struts . A principios de 2014, era imposible usar
Spring Boot (su primera versión oficial fue lanzada más tarde) y no tenía sentido usar
Seam (dejó de existir).

El gráfico circular muestra el índice de popularidad del marco
según RebelLabs a fines de 2017 . Cada uno de los marcos en el índice participa una vez, es decir, el monto total de interés es 100. El segundo diagrama muestra el
resultado de un estudio de Java Magazine, 2018 . El estudio preguntó qué marcos web se utilizan, se le permitió elegir más de uno en la respuesta. Por esta razón, cada porcentaje es independiente del otro y no puede resumirse.

Especificaciones
La piedra angular de la existencia de todas las bibliotecas son los estándares y especificaciones en los que se basan. Las especificaciones existen en forma de
Solicitudes de especificación de
Java (
JSR ) desarrolladas a través de un procedimiento formal llamado
Proceso de comunidad de Java (
JCP ).
Una lista de
JSR relacionados con
Java Enterprise Edition está
aquí . La siguiente tabla muestra solo las dos especificaciones más significativas seleccionadas de ellas:
Servlet y
Java EE (esta última es un conjunto de otras especificaciones). Las primeras versiones de las especificaciones no fueron aceptadas como parte del
JCP , por lo que no tienen números
JSR .
Desde el 12 de septiembre de 2017,
Java EE ha sido transferido a la gerencia de la
Fundación Eclipse y ahora se llama
Jakarta EE .
JCP ha sido reemplazado por el
proceso de especificación EE de Yakarta como un proceso para desarrollar y adoptar especificaciones.
Usando Servlets HTTP
Los siguientes son algunos ejemplos de cómo crear una aplicación web sin bibliotecas ni marcos. Los enlaces a la ubicación del código con un breve comentario se darán secuencialmente. Existen métodos más similares, el más obvio de ellos se demuestra.
El primer ejemplo (módulo
helloworld-web-servlet-xml ) en el
descriptor de implementación web.xml
especifica la clase heredada de la clase abstracta
HttpServlet con su propia implementación del método
doGet () . Por primera vez, el archivo descriptor de implementación
web.xml
se mencionó en la especificación
Servlet 2.2 (1999).
En el segundo ejemplo (módulo
helloworld-web-servlet-annotation ), falta el
web.xml
descriptor de implementación
web.xml
. Por encima de la misma clase heredada de la clase abstracta
HttpServlet, hay una anotación de
WebServlet que apareció en
Servlet 3.0 (2011).
El tercer ejemplo (los módulos
helloworld-web-servlet-interface-jar y
helloworld-web-servlet-interface-war ) es un poco más complicado. Muestra cómo usar la implementación de la interfaz
ServletContainerInitializer , que también apareció en
Servlet 3.0 . En el primer módulo
helloworld-web-servlet-interface-jar todavía no hay un
web.xml
descriptor de implementación
web.xml
, hay una clase derivada de la clase abstracta
HttpServlet .
Servlet 3.0 permite la implementación de la interfaz
ServletContainerInitializer para agregar componentes de servlet mediante programación, incluyendo realizar registro de servlet. La clase de implementación de la interfaz
ServletContainerInitializer que utiliza el concepto de
interfaz de proveedor de servicios (
SPI ) se configura especificando su nombre en el archivo
META-INF/services/javax.servlet.ServletContainerInitializer
. El primer módulo crea un archivo JAR. El archivo WAR crea el segundo módulo
helloworld-web-servlet-interface-war , el primer módulo se especifica en la lista de dependencias.
Los marcos
JSF y
Spring utilizan un enfoque similar para implementar la interfaz
ServletContainerInitializer en sus clases
FacesInitializer y
SpringServletContainerInitializer , respectivamente.
Servlet 3.0 también introdujo servlets asíncronos, en
Servlet 3.1 (2013) - E / S sin bloqueo, en
Servlet 4.0 (2017) - Soporte
HTTP / 2 .
La edad antes de la primavera
Apache Tapestry es un verdadero marco de aplicaciones web de larga duración. Su primera versión fue lanzada en 2000; las nuevas versiones continúan lanzándose ahora. Al diseñar
Tapestry , se tomaron prestadas ideas de
WebObjects , un marco web que apareció varios años antes. Las aplicaciones que usan
Tapestry (por ejemplo, el módulo
helloworld-web-tapestry ) usan la arquitectura modular y el enlace de los componentes de la interfaz de usuario de las páginas web con sus clases
Java correspondientes.
Apache Struts apareció casi simultáneamente con el marco anterior, en mayo de 2000, y también continúa desarrollándose hasta el día de hoy. En el ejemplo basado en él (el
módulo helloworld-web-struts ), puede ver en el archivo descriptor de despliegue
web.xml
una indicación de la clase
StrutsPrepareAndExecuteFilter
como filtro. Esta clase sirve como administrador de solicitudes, eligiendo una acción correspondiente a la solicitud.
Apache Struts , como
Tapestry , se basa en el
patrón de diseño
MVC .

En marzo de 2004, se lanzó la especificación
JavaServer Faces y dos implementaciones sucesivas de la misma: ahora llamada
Eclipse Mojarra (anteriormente
Sun JSF Reference Implementation ,
JSF RI ,
Mojarra ,
Oracle Mojarra ) y
Apache MyFaces . El enfoque principal respaldado por la especificación es el uso de componentes. Ambos ejemplos (
módulos helloworld-web-jsf-mojarra y
helloworld-web-jsf-myfaces ) son absolutamente idénticos entre sí, con la excepción de las bibliotecas de dependencias. Las aplicaciones definen y muestran en las páginas web la versión de la implementación de la especificación
JSF , el nombre de la implementación (
Mojarra o
MyFaces ) y la versión de la implementación.

Junio de 2005 y el lanzamiento de la primera versión del framework
Wicket , ideológicamente similar a
Tapestry y
JavaServer Faces . Un enfoque orientado a componentes y vinculación de plantillas
HTML para páginas web con clases
Java . Desde junio de 2007, el marco pertenece a
Apache Software Foundation , cambiando su nombre a
Apache Wicket . El pico de popularidad del marco se produjo aproximadamente en 2008-2009, seguido de una disminución gradual del interés en él. Se siguen lanzando nuevas versiones; se puede ver una aplicación de ejemplo en el módulo
helloworld-web-wicket .

En octubre de 2005
, se lanzó la primera versión de
Grails , un marco para crear aplicaciones web escritas en el
lenguaje Groovy JVM . Como el nombre del producto implica,
Ruby on Rails , un marco escrito en
Ruby, tuvo una fuerte influencia en su creación. También basado en el
patrón MVC . Una característica distintiva es el uso de archivos de vista
GSP (
Groovy Server Pages ) como plantillas. Un ejemplo (módulo
helloworld-web-grails ) se crea, construye y puede ejecutarse utilizando el
complemento Grails Maven , un complemento para
Maven .
Spring MVC, Spring Boot y Spring WebFlux

La primera versión de
Spring Framework , incluida
Spring MVC , apareció en diciembre de 2005. La clase del servlet
HTTP en él es
DispatcherServlet . Los siguientes son algunos ejemplos en orden cronológico de la aparición de características (nuevas versiones de la especificación
Servlet , lanzadas por primera vez
Spring Boot en abril de 2014, luego
Spring WebFlux en septiembre de 2017), que se utilizan en ellas.
En el primer ejemplo (el módulo
helloworld-web-spring-mvc-xml ), el
web.xml
descriptor de implementación
web.xml
se especifica como el servlet
DispatcherServlet . En el controlador con el único método que procesa la solicitud GET, hay anotaciones correspondientes (
Controlador y
RequestMapping ). La
vista es un archivo
JSP .
En el segundo ejemplo (el módulo
helloworld-web-spring-mvc-java ), falta el
web.xml
descriptor de implementación
web.xml
y la característica introducida en
Servlet 3.0 se utiliza para realizar la configuración del software. La clase heredada de
AbstractAnnotationConfigDispatcherServletInitializer (en última instancia, implementando la implementación de la interfaz
ServletContainerInitializer con
SPI ) y
JavaConfig (la configuración usando el código del programa con la anotación de
configuración se usan
juntos ).
El tercer ejemplo (módulo
helloworld-web-spring-boot-mvc ) demuestra una simplificación significativa del proyecto al tiempo que mantiene la misma funcionalidad gracias a la llegada de
Spring Boot . Además de la clase de controlador, adicionalmente solo hay una clase heredada de
SpringBootServletInitializer y anotada por
SpringBootApplication .
El cuarto ejemplo (el
módulo helloworld-web-spring-boot-webflux ) muestra, junto con
Spring Boot, el uso de
Spring WebFlux , que se agregó al
Spring Framework relativamente recientemente.
Spring WebFlux utiliza principios reactivos y
Project Reactor . De los dos enfoques principales (
estilo funcional y
basado en anotaciones ), el primero está involucrado en el ejemplo.
Después de la llegada de la primavera, los años 2000
El desarrollo de
Vaadin comenzó en 2002 como complemento de otro marco,
Millstone 3 . Durante 2006, lo que se creó fue enmarcado como un producto comercial terminado. Hasta mayo de 2009, se llamaba
IT Mill Toolkit , solo después de ese momento se convirtió en
Vaadin . A finales de 2007, su parte de cliente previamente implementada de forma independiente fue reemplazada por
Google Web Toolkit (
GWT ). En el ejemplo (módulo
helloworld-web-vaadin ), se puede ver que solo hay un archivo de clase
Java en el que todos los componentes de la interfaz de usuario se crean mediante programación, mientras se ocultan detalles técnicos de bajo nivel.

Un producto muy interesante,
Google Web Toolkit (
GWT ), apareció en mayo de 2006, la última versión se lanzó hace dos años. Para escribir las partes del servidor y del cliente, tiene la oportunidad de usar el mismo
lenguaje Java . Un compilador especial convierte el código del cliente en
Java a
JavaScript . El ejemplo consta de tres módulos:
helloworld-web-gwt-client (parte del cliente),
helloworld-web-gwt-server (parte del servidor) y
helloworld-web-gwt-shared (código común para partes de cliente y servidor). Durante el desarrollo, puede usar el
conveniente complemento Maven para iniciar la parte del cliente en modo
Super Dev , en el que el denominado
Code Server facilita la recompilación del código
Java modificado.
Seam comenzó su vida en mayo de 2007 y dejó de existir en 2012. Se basó en
Enterprise JavaBeans (
EJB3 ) y
JavaServer Faces (
JSF ). Desarrollado por
JBoss , entonces parte de
Red Hat . Propuso varios conceptos interesantes (por ejemplo,
biyección , para los cuales había
anotaciones correspondientes ). El sitio del marco todavía existe, pero en algunas de sus secciones algunos enlaces ya no son relevantes. Una aplicación de ejemplo está en el
módulo helloworld-web-seam .

La primera versión de la
especificación API de Java para RESTful Web Services (
JAX-RS ) se lanzó en 2008 (
JSR 311 ), luego se actualizó la
especificación (
JSR 339 ,
JSR 370 ). Las implementaciones más populares de
JAX-RS son los marcos
Apache CXF (la primera versión es abril de 2008),
RESTEasy (septiembre de 2008),
Jersey (mayo de 2010) y
Restlet (enero de 2013). Ejemplos de su uso se encuentran en los módulos
helloworld-web-jaxrs-apache-cxf ,
helloworld-web-jaxrs-resteasy ,
helloworld-web-jaxrs-jersey y
helloworld-web-jaxrs-restlet, respectivamente .
Play Framework apareció en mayo de 2008. Escrito en el
lenguaje de programación
Scala JVM . Le permite crear aplicaciones web basadas en ella tanto en
Scala como en
Java . Una característica peculiar de los desarrolladores de
Play es su compromiso con la
herramienta de compilación
sbt . Por esta razón, para escribir un ejemplo (
helloworld-web-play module), tuve que hacer algunos esfuerzos para construir bajo
Maven , usando el
complemento apropiado para esto.
2010, la última vez

En 2011, se lanzó la primera versión del maravilloso microframework
Spark , lanzado bajo la influencia de
Sinatra , escrito en
Ruby . El laconismo, la ligereza y el minimalismo de la sintaxis son inherentes a ella. Un ejemplo (
módulo helloworld-web-sparkjava ) demuestra cómo puede escribir una aplicación completa en solo un par de líneas. Las capacidades del marco pueden ser suficientes si no necesita algo demasiado complicado en su aplicación.

En 2011,
apareció Vert.x , un marco orientado a eventos que se ejecuta en la
JVM . Escrito bajo la influencia significativa de
Node.js , originalmente llamado
Node.x. Tiene una naturaleza multilingüe, lo que le permite utilizar
Java ,
JavaScript ,
Groovy ,
Ruby ,
Ceylon ,
Scala o
Kotlin cuando utiliza el marco. Basado en la biblioteca
Netty , tiene muchas características y ventajas distintivas. Un ejemplo está en el
módulo helloworld-web-vertx .

Diciembre de 2011 fue el momento inicial para la existencia de
Dropwizard ,
cuyos autores posicionan su producto como algo entre la biblioteca y el marco. Las tres partes principales en las que consiste son las bibliotecas
Jetty (
HTTP ),
Jersey (
JAX-RS ) y
Jackson (
JSON ). Continúa desarrollándose en la actualidad, incluso teniendo algo de popularidad. El ejemplo (
módulo helloworld-web-dropwizard ) muestra una estructura típica de una aplicación web basada en
Dropwizard .
Ratpack es otro marco (además de
Spark ), inspirado en la biblioteca
Sinatra y escrito en gran parte en el
lenguaje Groovy JVM . La conexión de Frank Sinatra con los llamados
paquete de ratas ("paquete de ratas"). La primera versión del marco se lanzó en 2013, se siguen lanzando nuevas versiones. Basado en la biblioteca
Netty , rápido, minimalista, fácil de usar, altamente escalable. Se puede ver un ejemplo en el
módulo helloworld-web-ratpack .

Octubre de 2013, el advenimiento del curioso proyecto
JHipster , un generador de marcos de aplicaciones web. Para construir la parte del cliente,
se admite el marco de
JavaScript Angular ,
React y
Vue (este último aún se admite en
modo experimental ). El backend se basa en
Spring Boot . Para construir el proyecto, se puede seleccionar
Maven o
Gradle . Un ejemplo de una aplicación
generada por JHipster se encuentra en el
módulo helloworld-web-jhipster .

En agosto de 2014, se
lanzó la primera versión del marco
Rapidoid , simple, rápida y modular. El módulo recomendado con el que se recomienda comenzar a usar el marco incluye la interacción a través de
HTTP , las
bibliotecas Hibernate ,
Hibernate Validator ,
MySQL Connector y
Logback . Con necesidades crecientes, el conjunto de módulos usados se puede ampliar. Un ejemplo (
módulo helloworld-web-rapidoid ) le permite evaluar el minimalismo del código requerido para obtener una aplicación web simple.

Marzo de 2016, lanzamiento del marco de trabajo
Lagom . Los autores de este producto de software posicionan su aplicación para dividir viejas aplicaciones monolíticas en microservicios reactivos que se escalan bien durante su operación. El marco está basado en
Akka y
Play Framework . Los lenguajes de programación
Java o
Scala se pueden usar para desarrollar sus aplicaciones. Un ejemplo basado en
Lagom se encuentra en los
módulos helloworld-web-lagom-api y
helloworld-web-lagom-impl .
Más recientemente, en mayo de 2017, se
lanzó la biblioteca
Javalin , liviana y simple. Sus propios creadores lo indican en agradecimiento a los autores de los ya mencionados marcos
Sinatra y
Spark . La biblioteca se centra en los lenguajes
Java y
Kotlin . Garantiza la ausencia de anotaciones y la necesidad de heredar cualquier clase de biblioteca, con el código más conciso posible, soporte para
WebSocket ,
HTTP / 2 y solicitudes asíncronas. Se puede ver un ejemplo basado en él en el
módulo helloworld-web-javalin .

La estrella en ascenso entre los frameworks web, cuya primera versión apareció hace solo un año, en octubre de 2018, es
Micronaut . Admite los
lenguajes de programación
Java ,
Groovy y
Kotlin JVM . Su ventaja significativa es un inicio rápido de aplicaciones basadas en él y un bajo consumo de memoria. Esto se garantiza mediante la implementación de dependencias en la etapa de compilación, y no en tiempo de ejecución. Otra de las características es un excelente soporte para la programación reactiva, es
posible el uso de las
bibliotecas RxJava ,
Reactor y
Akka . Un ejemplo (
módulo helloworld-web-micronaut ) demuestra
cómo construir una
aplicación simple basada en
Micronaut .
Microperfil

Debido a la pesadez actual de
Java EE , varias compañías necesitan microservicios para desarrollar un conjunto de especificaciones livianas, lo que se hizo; en septiembre de 2016 se lanzó
MicroProfile 1.0. Inicialmente, el conjunto incluía solo tres especificaciones (
CDI ,
JAX-RS y
JSON-P ). Los requisitos aumentaron gradualmente; en la versión 3.0, la lista de especificaciones ha crecido significativamente.
Actualmente, existen marcos web que satisfacen
MicroProfile en diversos grados. Siete de ellos fueron elegidos para demostración, la siguiente es la correspondencia de las versiones de marco a las versiones de
MicroProfile . La información completa sobre todos los marcos existentes que implementan
MicroProfile está
aquí .

El primer grupo de marcos incluye los que ya existían en el momento del lanzamiento de
MicroProfile 1.0:
TomEE (la primera versión se lanzó en abril de 2012),
Hammock (febrero de 2014),
Thorntail (anteriormente llamado
WildFly Swarm , enero de 2016) y
KumuluzEE (abril de 2016). La mayoría de las veces, el cumplimiento de un nuevo conjunto de especificaciones se logró al eliminar del producto existente todo lo que era superfluo. Ejemplos de uso se encuentran en los módulos
helloworld-web-microprofile-tomee ,
helloworld-web-microprofile-hammock ,
helloworld-web-microprofile-thorntail y
helloworld-web-microprofile-kumuluzee .

El segundo grupo de marcos incluye los que aparecieron después de la primera versión de
MicroProfile :
Payara Micro (julio de 2017),
Open Liberty (septiembre de 2017) y
Helidon (septiembre de 2018). Para estos marcos, se hizo posible lo contrario: desde el comienzo de la implementación, por ejemplo,
Helidon se desarrolló específicamente para el cumplimiento de
MicroProfile , por lo tanto, no tiene nada superfluo en su composición. Se pueden ver ejemplos de aplicaciones de construcción en los módulos
helloworld-web-microprofile-payara ,
helloworld-web-microprofile-openliberty y
helloworld-web-microprofile-helidon .
Contenedores de Servlet y Servidores de Aplicaciones
Las aplicaciones web se ejecutan en software especializado que implementa las especificaciones relevantes (por ejemplo, la
API de Servlet ). A continuación se muestran los contenedores de servlets y servidores de aplicaciones más populares en este momento. El porcentaje de popularidad también se toma de los resultados del
estudio (pregunta 20).
La línea de tiempo muestra la vida útil de cada uno de los productos de software en la tabla. Puede ver la secuencia de su aparición y el momento del lanzamiento de las últimas versiones.

Ahora se usa cada vez más contenedorización al implementar y publicar aplicaciones, por lo que el uso de servidores de aplicaciones es cada vez menos relevante.
Uso de lenguajes distintos de Java en aplicaciones
Recientemente, ha habido una tendencia a crear aplicaciones híbridas, como uno de los componentes de los cuales hay código
Java . De acuerdo con la tendencia en
la revista Java , cuyo tema principal era el
lenguaje de programación
Java , en la columna del editor en jefe en la
edición de enero / febrero de 2017 , se proclamó "El futuro políglota" y la inclusión de
JavaScript en la zona de interés.
En el
estudio ya mencionado anteriormente
, en la pregunta 16, estaban interesados en qué lenguajes no
JVM se utilizan en las aplicaciones
JVM . El líder (57%) fue
JavaScript , utilizado en la interfaz. Dado el hecho de que algunas aplicaciones web no tienen una
GUI (servicios, microservicios, servicios), podemos decir con confianza que el uso de marcos
JavaScript para la interfaz gráfica en aplicaciones
Java está muy extendido.

Ejemplo de una aplicación típica de Java hoy

Para demostrar una aplicación web
Java típica con una interfaz gráfica, se escribió un
programa con la emulación de la funcionalidad básica de Twitter : autenticación, gestión de cuentas (crear, editar, eliminar, buscar por subcadena), la página principal (propiedades de la cuenta, alimentación de mensajes), creación Tweets, suscribirse / darse de baja.
El backend está escrito usando
Spring Boot , el frontend está escrito usando el popular framework
Angular JavaScript . En la parte
Java de la aplicación, los componentes de la familia
Spring están representados al máximo:
Spring MVC ,
Spring Boot ,
Spring Security ,
Spring Test ,
Spring Boot Admin .
La API REST de back-end se procesa usando
Swagger .
JUnit ,
Spring Test ,
Mockito ,
TestContainers (unit-
Java -)
Jasmine Protractor (unit- end-to-end-
JavaScript Angular ).
(
Spring Boot Angular )
,
TechTrain 2019 .
Conclusiones
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 .