Primeiros passos com a especificação do MVC 1.0

Primeiros passos com a especificação do MVC 1.0
rodrigo.turini
rodrigo.turini

Compartilhe

Temos participado da especificação do MVC 1.0, uma das mais esperadas para o Java EE 8. Já há uma versão inicial para download. Você pode baixar sua especificação e API diretamente pela página do JCP, ou via maven, para o caso da API:

 <dependency> <groupId>javax.mvc</groupId> <artifactId>javax.mvc-api</artifactId> <version>1.0-edr1</version> </dependency> 

Vale ressaltar que a ideia dessa especificação não é substituir o JSF, que é um modelo de MVC baseado em componentes (component-based). Diferente disso, o MVC 1.0 propoe suporte para um framework MVC baseado em ações (action-based), assim como o VRaptor, Spring MVC e outros.

Integração com outras specs

Banner promocional da Alura, com um design futurista em tons de azul, apresentando dois blocos de texto, no qual o bloco esquerdo tem os dizeres:

A API do MVC se integra com diversas especificações do Java EE, como CDI, Bean Validation, e JAX-RS (The Java API for RESTful Web Services), sendo a última utilizada como base dessa nova spec. Na prática, isso significa que todo controller do MVC é um resource do JAX-RS e, por esse motivo, curiosamente podemos definir a anotação @Controller no escopo do método:

 @Path("usuarios") public class UsuarioController {

@Controller @GET public String lista() { // ... } } 

Interessante, não é? Com isso podemos ter classes hibridas, onde alguns métodos são controllers do MVC e outros serviços do JAX-RS. Mas claro, você também pode adicionar a anotação no escopo da classe, definindo assim que todos os seus métodos serão controllers.

 @Path("usuarios") @Controller public class UsuarioController { // ... } 

Ozark, a implementação de referência

A implementação de referência dessa nova especificação é o Ozark, que também já possui uma versão para download disponível via maven e pode ser testado com um nightly build do Glassfish.

 <dependency> <groupId>com.oracle.ozark</groupId> <artifactId>ozark</artifactId> <version>1.0.0-m01</version> <scope>compile</scope> </dependency> 

Para facilitar esse setup inicial, também foi disponibilizada uma imagem de Docker que já inclui o Ozark, Glassfish e todos os seus exemplos.

Conhecendo um pouco do código

É assim que se parece um primeiro exemplo do MVC com Ozark:

 @Controller @Path("olaMundoMVC") public class PrimeiroController {

@GET public String olaMundo() { return "olaMundo.jsp"; } } 

Neste caso, o método olaMundo poderá ser acessado pela URL http://localhost:8080/projeto/olaMundoMVC. Após executá-lo, o Ozark despachará a requisição para a jsp de seu retorno, olaMundo.jsp, que deve estar presente em /WEB-INF/views/.

Além do retorno do método, existem diversas variações para definição da view que deve ser renderizada. Retornar um Viewable ou anotar o método com @View são algumas delas.

 @GET public String olaMundo() { return "olaMundo.jsp"; }

@GET public Viewable olaMundo() { return new Viewable("olaMundo.jsp"); }

@GET @View("olaMundo.jsp") public void olaMundo() { } 

Você encontra esse e diversos outros exemplos de uso do MVC em um mirror de seu repositório no Github, criado e atualizado para facilitar a navegação do código.

https://github.com/spericas/ozark/tree/master/test

Trabalhando com diferentes tipos de view

Além do JSP e Facelets, que são as definições de view do Java EE, o Ozark também oferece uma serie extensões que possibilitam integração com os mais diferentes tipos de mecanismos de template existentes no mercado. FreeMarker, Velocity, Mustache, Handlebars e Thymeleaf são algumas das possibilidades atuais.

Para utilizar o Mustache, por exemplo, você só precisa adicionar a dependência do ozark-mustache em seu classpath e pronto!

 <dependency> <groupId>com.oracle.ozark.ext</groupId> <artifactId>ozark-mustache</artifactId> <version>1.0.0-m01</version> <scope>compile</scope> </dependency> 

Conveniente, não é? Nenhuma configuração adicional será necessária. Com isso você já poderá retornar views com a extensão .mustache nos métodos de seu controller:

 @Path("mustache") @Controller public class MustacheController {

@GET public String hello() { return "hello.mustache"; } } 

Claro, muito além das que já estão implementadas, você pode usar qualquer tecnologia de view desenvolvendo sua própria implementação de ViewEngine. Veja aqui como a MustacheViewEngine foi desenvolvida.

Como contribuir

É importante lembrar que esse é um trabalho em progresso e que está em estágio inicial, mas desde já você pode contribuir enviando ideias, sugestões, dúvidas e críticas. Todos serão importantíssimos para definirmos o futuro do MVC do Java EE 8. Seu feedback pode ser postado aqui, ou enviado diretamente na lista de usuários [email protected].

Veja outros artigos sobre Inovação & Gestão