O Java EE 8 chegou e com ele muitas novidades. Há atualizações nas APIs JAX-RS, Bean Validation, JSF, CDI, JSONP e Servlet. Uma das maiores atualizações está na API Servlet, que está agora na versão 4.0.
A maior novidade na API Servlet é o suporte ao protocolo HTTP/2 que traz consigo muitas melhorias, como request/response multiplexing, header compression e server push. Mas com certeza a característica mais relevante para os usuários da API Servlet é o server push, uma forma de enviar recursos (CSS, JavaScript, imagens, etc) do cliente para o servidor antes que o processamento da request termine de modo a evitar novos requests de recursos que, devido ao server push, já estarão no cache do navegador. Isso faz com o carregamento de páginas aconteça muito mais rápido.
Server Push é um mecanismo incrível e, pela forma como o exemplo do parágrafo anterior foi descrito, parece algo muito complexo para se implementar. Mas não é. Vamos ver como implementar server push na prática com Java EE 8.
Server Push na prática
A partir de uma request (HttpServletRequest) é possível criar um PushBuilder chamando o método newPushBuilder(). Com o PushBuilder construído é possível começar o envio dos recursos para o cliente. Muito simples!
A listagem de código a seguir mostra a implementação de um server push em uma servlet.
@WebServlet("/example") public class ExampleServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) { PushBuilder pushBuilder = request.newPushBuilder(); pushBuilder.path("images/example.jpg"); pushBuilder.push(); //redirect to the correct page } }
O recurso a ser enviado para o cliente deve ser colocado no PushBuilder por meio de uma chamada ao método path() passando o local do arquivo como argumento. Feito isso, basta enviar o recurso para o cliente chamando o método push(). Esse procedimento pode ser repetido para enviar diversos recursos para o cliente.
Ao testar esse código com as developer’s tools do Google Chrome é possível ver que o protocolo das requests é h2 (HTTP/2) e a request para a imagem tem como iniciador um Push.
Pronto, o Server Push, aquele mecanismo que parecia tão complexo foi implementado em menos de dez linhas de código. Está aí um recurso muito poderoso e facilitado para os desenvolvedores na nova release do Java EE.