A história do desenvolvimento da construção de aplicativos da Web na
linguagem de programação
Java, com exemplos de seu uso no período desde o aparecimento da especificação do servlet até os dias atuais.

O artigo não afirma ser acadêmico em sua totalidade e precisão. A interpretação de todos os fatos expostos e os exemplos apresentados refletem apenas o conhecimento, o ponto de vista e os erros do autor do artigo. O objetivo da redação é tentar obter uma imagem completa da situação atual dos aplicativos da web
Java . Além disso, as informações apresentadas podem ser usadas pelo leitor como ponto de partida para futuras pesquisas independentes.
O código de amostra está nos repositórios do
GitHub : uma
demonstração de cada biblioteca e estrutura e o
aplicativo da parte final do artigo . No momento da redação deste artigo, existem 37 exemplos no
primeiro repositório ; com o tempo, sua lista será atualizada.
Linha do tempo do surgimento de tecnologias, bibliotecas, estruturas e sua popularidade
Para uma percepção mais fácil, os dados são tabulados e são mais ilustrados por diagramas. Os elementos da tabela são agrupados condicionalmente, se possível. Bibliotecas e estruturas são classificadas por popularidade em ordem decrescente.
Informações sobre popularidade são obtidas de duas fontes. A primeira fonte é o
Índice de Popularidade do
ZeroTurnaround RebelLabs Web Framework . Sua última atualização foi no final de 2017 e foi acompanhada por duas postagens antes: a
primeira e a
segunda . O autor do segundo post do blog,
Simon Maple , juntou-se a
Snyk , continuando a coletar e analisar essas estatísticas úteis. Uma segunda fonte é seu
estudo , publicado na
Java Magazine, novembro / dezembro de 2018 (pergunta 17).
Um conjunto de especificações foi adicionado à parte superior da tabela, estruturas que não foram incluídas no índice de popularidade, mas que eu ainda queria mencionar, foram adicionadas ao final da tabela.
Na primeira linha do tempo, os dados da tabela são mostrados na mesma ordem que na tabela. Os grupos existentes são classificados por popularidade. Nos grupos (especificação,
Spring ,
JSF ,
JAX-RS ,
MicroProfile ), os elementos são ordenados em ordem cronológica de aparência. Você pode clicar em qualquer uma das imagens para ampliá-la.

Na segunda linha do tempo, as mesmas informações são ordenadas na data em que a primeira versão de todos os elementos apareceu. É fácil ver que, em 2001, por exemplo, para escrever um aplicativo da Web, você pode escolher apenas duas estruturas principais existentes -
Tapeçaria e
Struts . No início de 2014, era impossível usar o
Spring Boot (sua primeira versão oficial foi lançada mais tarde) e não fazia sentido usar o
Seam (deixou de existir).

O gráfico de pizza mostra o índice de popularidade da estrutura de
acordo com o RebelLabs no final de 2017 . Cada uma das estruturas do índice participa uma vez, ou seja, a quantidade total de interesse é 100. O segundo diagrama mostra o
resultado de um estudo da Java Magazine, 2018 . O estudo perguntou quais frameworks da web são usados, foi permitido escolher mais de um na resposta. Por esse motivo, cada porcentagem é independente da outra e não pode ser resumida.

Especificações
A pedra angular da existência de todas as bibliotecas são os padrões e especificações nas quais elas se baseiam. As especificações existem na forma de
JSRs (
Java Specification Requests ), desenvolvidas através de um procedimento formal chamado
Java Community Process (
JCP ).
Uma lista de
JSRs relacionadas ao
Java Enterprise Edition está
aqui . A tabela abaixo mostra apenas as duas especificações mais significativas selecionadas a partir delas -
Servlet e
Java EE (a última é um conjunto de outras especificações). As primeiras versões das especificações não foram aceitas como parte do
JCP , portanto, elas não têm números
JSR .
Desde 12 de setembro de 2017, o
Java EE foi transferido para o gerenciamento da
Eclipse Foundation e agora é chamado de
Jakarta EE .
O JCP foi substituído pelo
Processo de Especificação de Jakarta EE como um processo para desenvolver e adotar especificações.
Usando Servlets HTTP
A seguir, são apresentados alguns exemplos de criação de um aplicativo Web sem bibliotecas ou estruturas. Os links para a localização do código com um breve comentário serão fornecidos sequencialmente. Existem métodos mais semelhantes, os mais óbvios deles são demonstrados.
O primeiro exemplo (módulo
helloworld-web-servlet-xml ) no
descritor de implantação web.xml
especifica a classe herdada da classe abstrata
HttpServlet com sua própria implementação do método
doGet () . Pela primeira vez, o arquivo
web.xml
descritor de implementação foi mencionado na especificação
Servlet 2.2 (1999).
No segundo exemplo (módulo
helloworld-web-servlet-annotation ), o
web.xml
descritor de implementação
web.xml
ausente. Acima da mesma classe herdada da classe abstrata
HttpServlet, há uma anotação de
WebServlet que apareceu no
Servlet 3.0 (2011).
O terceiro exemplo (os módulos
helloworld-web-servlet-interface-jar e
helloworld-web-servlet-interface-war ) é um pouco mais complicado. Ele mostra como usar a implementação da interface
ServletContainerInitializer , que também apareceu no
Servlet 3.0 . No primeiro módulo
helloworld-web-servlet-interface-jar ainda não existe um
web.xml
descritor de implementação
web.xml
, existe uma classe derivada da classe abstrata
HttpServlet .
O Servlet 3.0 permite a implementação da interface
ServletContainerInitializer para adicionar componentes de servlet programaticamente, incluindo executando o registro do servlet. A classe de implementação da interface
ServletContainerInitializer usando o conceito
Service Provider Interface (
SPI ) é configurada especificando seu nome no arquivo
META-INF/services/javax.servlet.ServletContainerInitializer
. O primeiro módulo cria um arquivo JAR. O arquivo WAR cria o segundo módulo
helloworld-web-servlet-interface-war , o primeiro módulo é especificado na lista de dependências. Uma abordagem semelhante para implementar a interface
ServletContainerInitializer é usada pelas estruturas
JSF e
Spring em suas classes
FacesInitializer e
SpringServletContainerInitializer , respectivamente.
O Servlet 3.0 também introduziu servlets assíncronos, no
Servlet 3.1 (2013) - E / S sem bloqueio, no
Servlet 4.0 (2017) - suporte
HTTP / 2 .
A Era Antes da Primavera
O Apache Tapestry é uma verdadeira estrutura de aplicativo da web de longa duração. Sua primeira versão foi lançada em 2000. Novas versões continuam sendo lançadas agora. Ao projetar o
Tapeçaria , as idéias do
WebObjects , uma estrutura da Web que apareceu vários anos antes, foram emprestadas. Os aplicativos que usam o
Tapeçaria (por exemplo, o módulo
helloworld-web-tapeçaria ) usam a arquitetura modular e a ligação dos componentes da interface do usuário das páginas da web com suas classes
Java correspondentes.
O Apache Struts apareceu quase simultaneamente com a estrutura anterior, em maio de 2000, e também continua a se desenvolver até hoje. No exemplo baseado nele (o
módulo helloworld-web-struts ), é possível ver no arquivo do descritor de implementação
web.xml
uma indicação da classe
StrutsPrepareAndExecuteFilter
como um filtro. Essa classe serve como um gerenciador de solicitações, escolhendo uma ação correspondente à solicitação.
O Apache Struts , como o
Tapeçaria , é baseado no
padrão de design do
MVC .

Em março de 2004, a especificação
JavaServer Faces foi lançada e duas implementações sucessivas: agora chamada
Eclipse Mojarra (anteriormente
Implementação de Referência Sun JSF ,
JSF RI ,
Mojarra ,
Oracle Mojarra ) e
Apache MyFaces . A principal abordagem suportada pela especificação é o uso de componentes. Os dois exemplos (
módulos helloworld-web-jsf-mojarra e
helloworld-web-jsf-myfaces ) são absolutamente idênticos entre si, com exceção das bibliotecas de dependência. Os aplicativos definem e exibem nas páginas da web a versão da implementação da especificação
JSF , o nome da implementação (
Mojarra ou
MyFaces ) e a versão da implementação.

Junho de 2005 e o lançamento da primeira versão do framework
Wicket , ideologicamente semelhante ao
Tapestry e
JavaServer Faces . Uma abordagem orientada a componentes e vinculação de modelos
HTML para páginas da web com classes
Java . Desde junho de 2007, a estrutura pertence à
Apache Software Foundation , alterando seu nome para
Apache Wicket . O pico de popularidade da estrutura ocorreu em 2008-2009, seguido por um declínio gradual no interesse por ela. Novas versões continuam a ser lançadas; um exemplo de aplicativo pode ser visto no módulo
helloworld-web-wicket .

Em outubro de 2005
, foi lançada a primeira versão do
Grails , uma estrutura para a criação de aplicativos da Web escritos na
linguagem Groovy JVM . Como o nome do produto indica, o
Ruby on Rails , uma estrutura escrita em
Ruby, teve uma forte influência em sua criação. Também baseado no
padrão MVC . Um recurso distintivo é o uso da exibição
GSP (
Groovy Server Pages ) como arquivos. Um exemplo (módulo
helloworld-web-grails ) é criado, construído e pode ser executado usando o
plug-in Grails Maven , um plugin para o
Maven .
Spring MVC, Spring Boot e Spring WebFlux

A primeira versão do
Spring Framework , incluindo o
Spring MVC , apareceu em dezembro de 2005. A classe do servlet
HTTP nele é
DispatcherServlet . A seguir, são apresentados alguns exemplos em ordem cronológica da aparência dos recursos (novas versões da especificação
Servlet , lançadas pela primeira vez no
Spring Boot em abril de 2014 e, em seguida, no
Spring WebFlux em setembro de 2017), usadas neles.
No primeiro exemplo (o módulo
helloworld-web-spring-mvc-xml ), o
web.xml
descritor de implementação
web.xml
é especificado como o servlet
DispatcherServlet . No controlador com o único método que processa a solicitação GET, há anotações correspondentes (
Controller e
RequestMapping ). A
visualização é um arquivo
JSP .
No segundo exemplo (o módulo
helloworld-web-spring-mvc-java ), o
web.xml
descritor de implementação
web.xml
ausente e o recurso introduzido no
Servlet 3.0 é usado para executar a configuração do software. A classe herdada de
AbstractAnnotationConfigDispatcherServletInitializer (implementando finalmente a implementação da interface
ServletContainerInitializer com
SPI ) e
JavaConfig (a configuração usando o código do programa com a anotação
Configuration é usada em
conjunto ).
O terceiro exemplo (módulo
helloworld-web-spring-boot-mvc ) demonstra uma simplificação significativa do projeto, mantendo a mesma funcionalidade graças ao advento do
Spring Boot . Além da classe de controlador, há apenas uma classe herdada de
SpringBootServletInitializer e anotada por
SpringBootApplication .
O quarto exemplo (o
módulo helloworld-web-spring-boot-webflux ) mostra, junto com o
Spring Boot, o uso do
Spring WebFlux , que foi adicionado ao
Spring Framework relativamente recentemente.
O Spring WebFlux usa princípios reativos e o
Project Reactor . Das duas abordagens principais (
estilo funcional e
baseada em anotação ), a primeira está envolvida no exemplo.
Após o advento da primavera, os anos 2000
O desenvolvimento do
Vaadin começou em 2002 como um complemento para outro framework, o
Millstone 3 . Durante 2006, o que foi criado foi enquadrado como um produto comercial acabado. Até maio de 2009, tinha o nome
IT Mill Toolkit , somente após esse momento se tornando
Vaadin . No final de 2007, sua parte do cliente anteriormente implementada de forma independente foi substituída pelo
Google Web Toolkit (
GWT ). No exemplo (módulo
helloworld-web-vaadin ), pode-se ver que há apenas um arquivo de classe
Java no qual todos os componentes da interface com o usuário são criados programaticamente, enquanto ocultam detalhes técnicos de baixo nível.

Um produto muito interessante, o
Google Web Toolkit (
GWT ), apareceu em maio de 2006, a versão mais recente foi lançada há dois anos. Para gravar as partes do servidor e do cliente, você tem a oportunidade de usar a mesma
linguagem Java . Um compilador especial converte o código do cliente em
Java em
JavaScript . O exemplo consiste em três módulos -
helloworld-web-gwt-client (parte do cliente),
helloworld-web-gwt-server (parte do servidor) e
helloworld-web-gwt-shared (código comum para partes do cliente e do servidor). Durante o desenvolvimento, você pode usar o
conveniente plug-in Maven para iniciar a parte do cliente no
Modo Super Dev , no qual o chamado
Code Server facilita a recompilação do código
Java alterado.
Seam começou sua vida em maio de 2007 e deixou de existir em 2012. Foi baseado no
Enterprise JavaBeans (
EJB3 ) e
JavaServer Faces (
JSF ). Desenvolvido pelo
JBoss , então parte do
Red Hat . Ele propôs vários conceitos interessantes (por exemplo,
bijeção , para os quais havia
anotações correspondentes ). O site da estrutura ainda existe, mas em algumas de suas seções alguns links não são mais relevantes. Um aplicativo de exemplo está no
módulo helloworld-web-seam .

A primeira versão da especificação da
API Java para RESTful Web Services (
JAX-RS ) foi lançada em 2008 (
JSR 311 ); posteriormente, a especificação foi atualizada (
JSR 339 ,
JSR 370 ). As implementações mais populares do
JAX-RS são as estruturas
Apache CXF (a primeira versão é abril de 2008),
RESTEasy (setembro de 2008),
Jersey (maio de 2010) e
Restlet (janeiro de 2013). Exemplos de seu uso são encontrados nos módulos
helloworld-web-jaxrs-apache-cxf ,
helloworld-web-jaxrs-resteasy ,
helloworld-web-jaxrs-jersey e
helloworld-web-jaxrs-restlet, respectivamente .
O Play Framework apareceu em maio de 2008. Escrito na
linguagem de programação
Scala JVM . Permite criar aplicativos da Web baseados no
Scala e no
Java . Uma característica peculiar dos desenvolvedores do
Play é o compromisso com a
ferramenta de construção
sbt . Por esse motivo, para escrever um exemplo (módulo
helloworld-web-play ), tive que fazer alguns esforços para criar no
Maven , usando o
plug-in apropriado para isso.
2010, a última hora

Em 2011, foi lançada a primeira versão do maravilhoso micro-trabalho
Spark , lançado sob a influência de
Sinatra , escrito em
Ruby . Laconicismo, leveza e minimalismo de sintaxe são inerentes a ele. Um exemplo (
módulo helloworld-web-sparkjava ) demonstra como você pode escrever um aplicativo completo em apenas algumas linhas. Os recursos da estrutura podem ser suficientes se você não precisar de algo muito complicado em seu aplicativo.

Em 2011, o
Vert.x , uma estrutura orientada a eventos em execução na
JVM, apareceu . Escrito sob a influência significativa do
Node.js , originalmente chamado
Node.x. Possui uma natureza multilíngue, permitindo que você use
Java ,
JavaScript ,
Groovy ,
Ruby ,
Ceilão ,
Scala ou
Kotlin ao usar a estrutura. Baseado na biblioteca
Netty , possui muitos recursos e vantagens distintas. Um exemplo está no
módulo helloworld-web-vertx .

Dezembro de 2011 foi o momento inicial da existência do
Dropwizard ,
cujos autores posicionam seu produto como algo entre a biblioteca e a estrutura. As três partes principais das quais ele consiste são as bibliotecas
Jetty (
HTTP ),
Jersey (
JAX-RS ) e
Jackson (
JSON ). Ele continua a se desenvolver atualmente, tendo até alguma popularidade. O exemplo (
módulo helloworld-web-dropwizard ) mostra uma estrutura típica de um
aplicativo da web baseado no
Dropwizard .
O Ratpack é outro framework (além do
Spark ), inspirado na biblioteca
Sinatra e escrito amplamente na
linguagem Groovy JVM . A conexão de Frank Sinatra com o chamado
pacote de ratos ("pacote de ratos"). A primeira versão do framework foi lançada em 2013, novas versões continuam sendo lançadas. Baseado na biblioteca
Netty , rápido, minimalista, fácil de usar, altamente escalável. Um exemplo pode ser visto no
módulo helloworld-web-ratpack .

Outubro de 2013, o advento do curioso projeto
JHipster , um gerador de framework de aplicativos da web. Para criar a parte do cliente, a estrutura
JavaScript Angular ,
React e
Vue é suportada (a última ainda é suportada no
modo experimental ). O back-end é baseado no
Spring Boot . Para criar o projeto,
Maven ou
Gradle podem ser selecionados. Um exemplo de aplicativo
gerado pelo JHipster está no
módulo helloworld-web-jhipster .

Em agosto de 2014, foi
lançada a primeira versão do framework
Rapidoid , simples, rápida e modular. O módulo recomendado com o qual é recomendado começar a usar a estrutura inclui a interação através de
HTTP , as
bibliotecas Hibernate ,
Hibernate Validator ,
MySQL Connector e
Logback . Com necessidades crescentes, o conjunto de módulos usado pode ser expandido. Um exemplo (
módulo helloworld-web-rapidoid ) permite avaliar o minimalismo do código necessário para obter um aplicativo da web simples.

Março de 2016, lançamento do framework
Lagom . Os autores deste produto de software posicionam seu aplicativo para dividir aplicativos monolíticos antigos em microsserviços reativos que escalam bem durante sua operação. A estrutura é baseada no
Akka and
Play Framework . As
linguagens de programação
Java ou
Scala podem ser usadas para desenvolver seus aplicativos. Um exemplo baseado em
Lagom é encontrado nos
módulos helloworld-web-lagom-api e
helloworld-web-lagom-impl .
Mais recentemente, em maio de 2017, foi
lançada a biblioteca
Javalin leve e simples. Seus próprios criadores indicam em agradecimento aos autores dos frameworks
Sinatra e
Spark já mencionados. A biblioteca está focada nas
linguagens Java e
Kotlin . Garante a ausência de anotações e a necessidade de herdar qualquer classe de biblioteca, o mais conciso possível, suporte para
WebSocket ,
HTTP / 2 e solicitações assíncronas. Um exemplo baseado nisso pode ser visto no
módulo helloworld-web-javalin .

A estrela em ascensão entre os frameworks da web, cuja primeira versão apareceu apenas um ano atrás, em outubro de 2018, é o
Micronaut . Suporta
linguagens de programação Java ,
Groovy e
Kotlin JVM . Sua vantagem significativa é o início rápido de aplicativos baseados nele e baixo consumo de memória. Isso é garantido pela implementação de dependências no estágio de compilação e não no tempo de execução. Outro dos recursos é o excelente suporte para programação reativa, é
possível o uso das bibliotecas
RxJava ,
Reactor e
Akka . Um exemplo (
módulo helloworld-web-micronaut ) demonstra a construção de um
aplicativo simples baseado em
Micronaut .
Microprofile

Devido ao peso atual do
Java EE , várias empresas precisam de microsserviços para desenvolver um conjunto leve de especificações, o que foi feito - em setembro de 2016, o
MicroProfile 1.0 foi lançado. Inicialmente, o conjunto incluía apenas três especificações (
CDI ,
JAX-RS e
JSON-P ). Os requisitos aumentaram gradualmente; na versão 3.0, a lista de especificações aumentou significativamente.
Atualmente, existem estruturas da web que satisfazem o
MicroProfile em vários graus. Sete deles foram escolhidos para demonstração. A seguir, a correspondência das versões do framework com as versões do
MicroProfile . Informações completas sobre todas as estruturas existentes que implementam o
MicroProfile estão
aqui .

O primeiro grupo de estruturas inclui as que já existiam no momento do lançamento do
MicroProfile 1.0:
TomEE (a primeira versão foi lançada em abril de 2012),
Hammock (fevereiro de 2014),
Thorntail (anteriormente chamado
WildFly Swarm , janeiro de 2016) e
KumuluzEE (abril de 2016). Na maioria das vezes, a conformidade com um novo conjunto de especificações foi alcançada removendo do produto existente tudo o que era supérfluo. Exemplos de uso estão nos módulos
helloworld-web-microprofile-tomee ,
helloworld-web-microprofile-hammock ,
helloworld-web-microprofile-thorntail e
helloworld-web-microprofile-kumuluzee .

O segundo grupo de estruturas inclui as que apareceram depois da primeira versão do
MicroProfile :
Payara Micro (julho de 2017),
Open Liberty (setembro de 2017) e
Helidon (setembro de 2018). Para essas estruturas, o oposto se tornou possível - desde o início da implementação, por exemplo, o
Helidon foi desenvolvido especificamente para conformidade com o
MicroProfile , portanto, não possui nada supérfluo em sua composição. Exemplos de aplicações de construção podem ser vistos nos módulos
helloworld-web-microprofile-payara ,
helloworld-web-microprofile-openliberty e
helloworld-web-microprofile-helidon .
Contêineres de Servlet e Servidores de Aplicativos
Os aplicativos da Web são executados em software especializado que implementa as especificações relevantes (por exemplo, a
API do
Servlet ). Abaixo estão os contêineres de servlets e servidores de aplicativos mais populares no momento. A porcentagem de popularidade também é obtida nos resultados do
estudo (pergunta 20).
A linha do tempo mostra a vida útil de cada um dos produtos de software na tabela. Você pode ver a sequência de sua aparência e o tempo de lançamento das versões mais recentes.

Cada vez mais contêineres estão sendo usados ao implantar e publicar aplicativos, portanto, o uso de servidores de aplicativos está se tornando cada vez menos relevante.
Uso de idiomas diferentes de Java em aplicativos
Recentemente, houve uma tendência para criar aplicativos híbridos, como um dos componentes dos quais existe código
Java . De acordo com a tendência da
Java Magazine , cujo tema principal era a
linguagem de programação
Java , na coluna do editor-chefe da edição de
janeiro / fevereiro de 2017 , “The Polyglot Future” foi declarado e incluído na zona de interesse da linguagem
JavaScript .
No
estudo já mencionado acima
, na pergunta 16, eles estavam interessados em quais idiomas não
JVM são usados nos aplicativos
JVM . O líder (57%) era
JavaScript , usado no frontend. Dado o fato de que alguns aplicativos da Web não possuem uma
GUI (serviços, microsserviços, serviços), podemos afirmar com confiança que o uso de estruturas
JavaScript para a interface gráfica em aplicativos
Java é generalizado.

Exemplo de um aplicativo Java típico hoje

Para demonstrar um aplicativo da Web
Java típico com uma interface gráfica, foi criado um
programa com emulação da funcionalidade básica do Twitter : autenticação, gerenciamento de contas (criar, editar, excluir, pesquisar por substring), a página principal (propriedades da conta, feed de mensagens), criação Tweets, inscreva-se / cancele a inscrição.
O back-end é escrito usando o
Spring Boot , o front-end é escrito usando a popular estrutura
JavaScript Angular . Na parte
Java do aplicativo, os componentes da família
Spring são representados no máximo:
Spring MVC ,
Spring Boot ,
Spring Security ,
Spring Test ,
Spring Test ,
Spring Boot Admin .
A API REST de back-end é renderizada usando o
Swagger .
JUnit ,
Spring Test ,
Mockito ,
TestContainers (unit-
Java -)
Jasmine Protractor (unit- end-to-end-
JavaScript Angular ).
(
Spring Boot Angular )
,
TechTrain 2019 .
Conclusões
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 .