SlideShare uma empresa Scribd logo
1 de 81
VRaptor 4
Renan Montenegro 
Desenvolvedor Java há mais de 4 anos, 
commiter no VRaptor 4 e membro ativo da lista 
de discussão oficial do VRaptor. Entusiasta 
SEO(Search Engine Optimization). 
@renanigt 
renanigt
Matheus Fechine 
Desenvolvedor Java há 6 anos, graduado em 
Ciência da Computação, pós graduado em 
Arquitetura Java, ambas pela Unifor, 
Coordenador da comunidade JavaCE e Viciado 
em Testes automatizados. 
@matheusmoura 
matheusfechine
O que é ?
MVC
MVC 
Modelo
Visão 
MVC
MVC 
Controller
Por quê ?
CDI
Extensível
Código Fluente
Testável
Serviço REST
Controller
@Controller 
public class UsuarioController { 
}
@Controller 
public class UsuarioController { 
public void index() { 
} 
}
@Controller 
public class UsuarioController { 
public void index() { 
} 
}
@Controller 
public class UsuarioController { 
public void index() { 
} 
} 
/usuario/index
@Controller 
public class UsuarioController { 
@Path("/inicio") 
public void index() { 
} 
}
@Controller 
public class UsuarioController { 
@Path("/inicio") 
public void index() { 
} 
}
@Controller 
public class UsuarioController { 
@Path("/inicio") 
public void index() { 
} 
} 
/inicio
View
@Controller 
public class UsuarioController { 
@Inject 
private Result result; 
public void index() { 
result.include("mensagem", "Página Inicial !"); 
} 
}
@Controller 
public class UsuarioController { 
@Inject 
private Result result; 
public void index() { 
result.include("mensagem", "Página Inicial !"); 
} 
} 
CDI
@Controller 
public class UsuarioController { 
@Inject 
private Result result; 
public void index() { 
result.include("mensagem", "Página Inicial !"); 
} 
}
@Controller 
public class UsuarioController { 
@Inject 
private Result result; 
public void index() { 
result.include("mensagem", "Página Inicial !"); 
} 
}
index.jsp 
<!DOCTYPE html> 
<html> 
<head></head> 
<body> 
${mensagem} 
</body> 
</html>
CDI 
@Controller 
public class UsuarioController { 
private Result result; 
@Inject 
public UsuarioController(Result result) { 
this.result = result; 
} 
public UsuarioController() { 
} 
public void index() { 
result.include("mensagem", "Página Inicial !"); 
} 
}
@Controller 
public class UsuarioController { 
private Result result; 
@Inject 
public UsuarioController(Result result) { 
this.result = result; 
} 
public UsuarioController() { 
} 
public void index() { 
result.include("mensagem", "Página Inicial !"); 
} 
}
/** 
* @deprecated CDI eyes only. 
*/ 
protected UsuarioController() { 
this(null); 
}
Componentes
@RequestScoped 
public class UsuarioDao { 
public Usuario pesquisaUsuario(Long id) { 
//carrega Usuário do banco 
} 
}
@Controller 
public class UsuarioController { 
@Inject 
private UsuarioDao dao; 
public void pesquisarUsuario(Long id) { 
Usuario usuario = dao.pesquisaUsuario(id); 
} 
}
Redirecionamento 
e 
Forward
@Post 
public void adiciona(Usuario usuario) { 
result.redirectTo(this).index(); 
} 
Redirect
@Post 
public void adiciona(Usuario usuario) { 
result.forwardTo(this).index(); 
} 
Forward
Formulário
<form action="/vraptor-javace/usuario/adiciona" 
method="post"> 
<input name="usuario.login" /> 
<input name="usuario.senha" /> 
<input type="submit" value="Login"> 
</form>
<form action="/vraptor-javace/usuario/adiciona" 
method="post"> 
<input name="usuario.login" /> 
<input name="usuario.senha" /> 
<input type="submit" value="Login"> 
</form>
@Post 
public void adiciona(Usuario usuario) { 
}
<form action="/vraptor-javace/usuario/adiciona" 
method="post"> 
<input name="usuario.login" /> 
<input name="usuario.senha" /> 
<input type="submit" value="Login"> 
</form>
@Post 
public void adiciona(Usuario usuario) { 
}
<form action="/vraptor-javace/usuario/adiciona" 
method="post"> 
<input name="usuario.login" /> 
<input name="usuario.senha" /> 
<input type="submit" value="Login"> 
</form>
public class Usuario { 
private String login; 
private String senha; 
//getters e setters 
}
Validação
@Controller 
public class UsuarioController { 
@Inject 
private Validator validator; 
}
SimpleMessage message = new SimpleMessage("Login", 
"Login não preenchido"); 
validator.addIf(usuario.getLogin() == null, message);
validator.onErrorRedirectTo(this).index();
@Post 
public void adiciona(Usuario usuario) { 
SimpleMessage message = new SimpleMessage("Login", 
"Login não preenchido"); 
validator.addIf(usuario.getLogin() == null, message); 
validator.onErrorRedirectTo(this).index(); 
}
REST
@Get 
@Path("/usuario/{id}") 
public void visualiza(Long id) { 
}
@Get("/usuario/{id}") 
public void visualiza(Long id) { 
}
@Post("/usuario") 
public void adiciona(Usuario usuario) { 
}
@Put("/usuario") 
public void atualiza(Usuario usuario) { 
}
@Delete("/usuario") 
public void remove(Usuario usuario) { 
}
Serialização
public void carregaJson(Usuario usuario) { 
result.use(Results.json()) 
.from(usuario) 
.serialize(); 
}
public void carregaXml(Usuario usuario) { 
result.use(Results.xml()) 
.from(usuario) 
.serialize(); 
}
Interceptors
@Intercepts 
public class LoginInterceptor { 
}
@Intercepts 
public class LoginInterceptor { 
@BeforeCall 
public void before() { 
} 
@AfterCall 
public void after() { 
} 
@Accepts 
public boolean accepts(ControllerMethod method) { 
return method.containsAnnotation(Logado.class); 
} 
}
@Intercepts 
public class LoginInterceptor { 
@BeforeCall 
public void before() { 
} 
@AfterCall 
public void after() { 
} 
@Accepts 
public boolean accepts(ControllerMethod method) { 
return method.containsAnnotation(Logado.class); 
} 
}
@Intercepts 
public class LoginInterceptor { 
@BeforeCall 
public void before() { 
} 
@AfterCall 
public void after() { 
} 
@Accepts 
public boolean accepts(ControllerMethod method) { 
return method.containsAnnotation(Logado.class); 
} 
}
@Intercepts 
public class LoginInterceptor { 
@BeforeCall 
public void before() { 
} 
@AfterCall 
public void after() { 
} 
@Accepts 
public boolean accepts(ControllerMethod method) { 
return method.containsAnnotation(Logado.class); 
} 
}
@AroundCall 
public void intercept(SimpleInterceptorStack stack) { 
System.out.println("Antes da lógica."); 
stack.next(); // continua a execução 
System.out.println("Depois da lógica."); 
}
Testes Unitários
@Controller 
public class UsuarioController { 
private Result result; 
@Inject 
public UsuarioController(Result result) { 
this.result = result; 
} 
protected UsuarioController() { 
this(null); 
} 
public void index() { 
result.include("mensagem", "Página Inicial !"); 
} 
}
public class UsuarioControllerTest { 
private MockResult result; 
private UsuarioController controller; 
@Before 
public void setUp() { 
result = new MockResult(); 
controller = new UsuarioController(result); 
} 
@Test 
public void deveriaConterMensagemDeSucesso() { 
controller.index(); 
Assert.assertTrue(result.included().containsKey("mensagem")); 
Assert.assertEquals("Página Inicial !", result.included("mensagem")); 
} 
}
public class UsuarioControllerTest { 
private MockResult result; 
private UsuarioController controller; 
@Before 
public void setUp() { 
result = new MockResult(); 
controller = new UsuarioController(result); 
} 
@Test 
public void deveriaConterMensagemDeSucesso() { 
controller.index(); 
Assert.assertTrue(result.included().containsKey("mensagem")); 
Assert.assertEquals("Página Inicial !", result.included("mensagem")); 
} 
}
public class UsuarioControllerTest { 
private MockResult result; 
private UsuarioController controller; 
@Before 
public void setUp() { 
result = new MockResult(); 
controller = new UsuarioController(result); 
} 
@Test 
public void deveriaConterMensagemDeSucesso() { 
controller.index(); 
Assert.assertTrue(result.included().containsKey("mensagem")); 
Assert.assertEquals("Página Inicial !", result.included("mensagem")); 
} 
}
Plugins
vraptor-brutauth
vraptor-jpa
vraptor-hibernate
vraptor-jasperreport
Mais VRaptor 4
www.vraptor.com.br 
https://github.com/caelum/vraptor4 
https://groups.google.com/group/caelum-vraptor
Dúvidas ?

Mais conteúdo relacionado

Mais procurados

Fazendo Injeção de dependência com Unity 1.2
Fazendo Injeção de dependência com Unity 1.2Fazendo Injeção de dependência com Unity 1.2
Fazendo Injeção de dependência com Unity 1.2Giovanni Bassi
 
Android - Programação para dispositivos móveis (Aula 2)
Android - Programação para dispositivos móveis (Aula 2)Android - Programação para dispositivos móveis (Aula 2)
Android - Programação para dispositivos móveis (Aula 2)Ricardo Longa
 
Aula 05/06 (Service)
Aula 05/06 (Service)Aula 05/06 (Service)
Aula 05/06 (Service)Ricardo Longa
 
TDD - Algumas lições aprendidas com o livro GOOS
TDD - Algumas lições aprendidas com o livro GOOSTDD - Algumas lições aprendidas com o livro GOOS
TDD - Algumas lições aprendidas com o livro GOOSFábio Miranda
 
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Rafael Ponte
 
Vraptor - Alta produtividade no Desenvolvimento Web em Java
Vraptor - Alta produtividade no Desenvolvimento Web em JavaVraptor - Alta produtividade no Desenvolvimento Web em Java
Vraptor - Alta produtividade no Desenvolvimento Web em JavaKaio Valente
 
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Caelum
 

Mais procurados (10)

Fazendo Injeção de dependência com Unity 1.2
Fazendo Injeção de dependência com Unity 1.2Fazendo Injeção de dependência com Unity 1.2
Fazendo Injeção de dependência com Unity 1.2
 
Android - Programação para dispositivos móveis (Aula 2)
Android - Programação para dispositivos móveis (Aula 2)Android - Programação para dispositivos móveis (Aula 2)
Android - Programação para dispositivos móveis (Aula 2)
 
Aula 05/06 (Service)
Aula 05/06 (Service)Aula 05/06 (Service)
Aula 05/06 (Service)
 
TDD - Algumas lições aprendidas com o livro GOOS
TDD - Algumas lições aprendidas com o livro GOOSTDD - Algumas lições aprendidas com o livro GOOS
TDD - Algumas lições aprendidas com o livro GOOS
 
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
 
Java www
Java wwwJava www
Java www
 
Artigoajax
ArtigoajaxArtigoajax
Artigoajax
 
Vraptor - Alta produtividade no Desenvolvimento Web em Java
Vraptor - Alta produtividade no Desenvolvimento Web em JavaVraptor - Alta produtividade no Desenvolvimento Web em Java
Vraptor - Alta produtividade no Desenvolvimento Web em Java
 
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
 

Semelhante a VRaptor 4 Introdução MVC Java Web

Introducao ao Spring Web MVC
Introducao ao Spring Web MVCIntroducao ao Spring Web MVC
Introducao ao Spring Web MVCEder Magalhães
 
VRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em JavaVRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em JavaDaniel Faria Gomes
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dadosHenrique Fernandes
 
TDC Florianópolis 2018 - Bolovo 2.0: Indo do EJB 2.0 ao Domain Driven Design
TDC Florianópolis 2018 - Bolovo 2.0: Indo do EJB 2.0 ao Domain Driven DesignTDC Florianópolis 2018 - Bolovo 2.0: Indo do EJB 2.0 ao Domain Driven Design
TDC Florianópolis 2018 - Bolovo 2.0: Indo do EJB 2.0 ao Domain Driven DesignAlexandre Rodrigues
 
Android DevConference - Dagger 2: uso avançado em projetos Android
Android DevConference - Dagger 2: uso avançado em projetos AndroidAndroid DevConference - Dagger 2: uso avançado em projetos Android
Android DevConference - Dagger 2: uso avançado em projetos AndroidiMasters
 
Integração do Flex com PHP através do AMFPHP
Integração do Flex com PHP através do AMFPHPIntegração do Flex com PHP através do AMFPHP
Integração do Flex com PHP através do AMFPHPelliando dias
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014David Robert Camargo de Campos
 
Automação e virtualização de serviços
Automação e virtualização de serviçosAutomação e virtualização de serviços
Automação e virtualização de serviçosElias Nogueira
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#Felipe Pimentel
 
Persistência com JPA e Hibernate
Persistência com JPA e HibernatePersistência com JPA e Hibernate
Persistência com JPA e HibernateFernando Oliveira
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Anderson Araújo
 
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em açãoRafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em açãoRafael Garcia
 

Semelhante a VRaptor 4 Introdução MVC Java Web (20)

Spring MVC - QConSP
Spring MVC - QConSPSpring MVC - QConSP
Spring MVC - QConSP
 
Introducao ao Spring Web MVC
Introducao ao Spring Web MVCIntroducao ao Spring Web MVC
Introducao ao Spring Web MVC
 
VRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em JavaVRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em Java
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dados
 
TDC Florianópolis 2018 - Bolovo 2.0: Indo do EJB 2.0 ao Domain Driven Design
TDC Florianópolis 2018 - Bolovo 2.0: Indo do EJB 2.0 ao Domain Driven DesignTDC Florianópolis 2018 - Bolovo 2.0: Indo do EJB 2.0 ao Domain Driven Design
TDC Florianópolis 2018 - Bolovo 2.0: Indo do EJB 2.0 ao Domain Driven Design
 
Android DevConference - Dagger 2: uso avançado em projetos Android
Android DevConference - Dagger 2: uso avançado em projetos AndroidAndroid DevConference - Dagger 2: uso avançado em projetos Android
Android DevConference - Dagger 2: uso avançado em projetos Android
 
Tutorial Dwr - Configuração e Uso
Tutorial Dwr - Configuração e UsoTutorial Dwr - Configuração e Uso
Tutorial Dwr - Configuração e Uso
 
Android na Prática
Android na PráticaAndroid na Prática
Android na Prática
 
Integração do Flex com PHP através do AMFPHP
Integração do Flex com PHP através do AMFPHPIntegração do Flex com PHP através do AMFPHP
Integração do Flex com PHP através do AMFPHP
 
Use CDI em seus projetos Java !
Use CDI em seus projetos Java !Use CDI em seus projetos Java !
Use CDI em seus projetos Java !
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
 
Automação e virtualização de serviços
Automação e virtualização de serviçosAutomação e virtualização de serviços
Automação e virtualização de serviços
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#
 
Persistência com JPA e Hibernate
Persistência com JPA e HibernatePersistência com JPA e Hibernate
Persistência com JPA e Hibernate
 
Programação Orientada por Objectos - Aula 2
Programação Orientada por Objectos - Aula 2Programação Orientada por Objectos - Aula 2
Programação Orientada por Objectos - Aula 2
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?
 
Git, GitHub e OO
Git, GitHub e OOGit, GitHub e OO
Git, GitHub e OO
 
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em açãoRafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
 

VRaptor 4 Introdução MVC Java Web