SlideShare a Scribd company logo
1 of 59
 O que é o VRaptor?
 Primeiro contato
 Injeção de dependências
 Enviando dados via form
 Escopos definidos
 Validação
 REST
 Framework MVC brasileiro
 Desenvolvido pela Caelum
 Inspirado no Ruby on Rails
 Focado no desenvolvimento ágil
 Diminui drasticamente tempo de trabalho
 Convenção sobre configuração
 Roda sobre o Spring
 O que é o VRaptor?
 Primeiro contato
 Injeção de dependências
 Enviando dados via form
 Escopos definidos
 Validação
 REST
 Convenção de acesso à view:
WEB-INF/jsp/{nomeDoResource}/{nomeDoMétodo}.jsp
 No nosso caso:
WEB-INF/jsp/olaMundo/ola.jsp
 Como acessaremos a view:
localhost:8080/PalestraVRaptor/olaMundo/ola
 O que é o VRaptor?
 Primeiro contato
 Injeção de dependências
 Enviando dados via form
 Escopos definidos
 Validação
 REST
 Quais são minhas dependências?
 Quem instanciará as classes?
 Como o Vraptor sabe disso?
 O que é o VRaptor?
 Primeiro contato
 Injeção de dependências
 Enviando dados via form
 Escopos definidos
 Validação
 REST
 O que é o VRaptor?
 Primeiro contato
 Injeção de dependências
 Enviando dados via form
 Escopos definidos
 Validação
 REST
 @RequestScoped (padrão)
 @SessionScoped
 @ApplicationScoped
 @PrototypeScoped
 @PostConstruct: assim que o escopo for
iniciado
 @PreDestroy: assim que o escopo for
finalizado
 O que é o VRaptor?
 Primeiro contato
 Injeção de dependências
 Enviando dados via form
 Escopos definidos
 Validação
 REST
 Componente Validator do VRaptor
 Maneira clássica
 Maneira fluente
 Integração com o Hibernate Validator
 Especificar para qual lógica encaminhar
 Validador do VRaptor integrado com o
Hibernate Validator
 O que é o VRaptor?
 Primeiro contato
 Injeção de dependências
 Enviando dados via form
 Escopos definidos
 Validação
 REST
 Representation State Tranfer
 Padrão arquitetural
 Endereçamento de forma padronizada (nice
urls)
 Maior visibilidade para componentes
intermediários
 Diminui acoplamento entre cliente e servidor
Substantivos
Verbos
Content types
 URI (Unified Resource Identifier)
 Nome dos recursos
 Recursos != Ações
 Má prática: /produto/adiciona
 Conjunto pequeno e fixo de operações
 Interface uniforme
 Operações HTTP:
› Get, Post, Put,
› Delete, Head, Options, Trace
 Get: recuperar dados de um recurso
 Post: adiciona dados de um recurso
 Put: adiciona ou modifica dados
 Delete: deleta o recurso representado na
URI
 Head, Options, Trace: recuperam
metadados da URI
 Alta produtividade
 Curva de aprendizado
 Testabilidade
 Economia
 Flexibilidade
 Melhores práticas de desenvolvimento
Palestra VRaptor 3

More Related Content

Viewers also liked

Viewers also liked (6)

Aula Introdução a VRaptor 4 - Pós Java UTFPR
Aula Introdução a VRaptor 4 - Pós Java UTFPRAula Introdução a VRaptor 4 - Pós Java UTFPR
Aula Introdução a VRaptor 4 - Pós Java UTFPR
 
Introdução ao vraptor
Introdução ao vraptorIntrodução ao vraptor
Introdução ao vraptor
 
VRaptor 3, JPA, Hibernate, Geotools e OpenLayers, ajudando Pedro Alvares Cabr...
VRaptor 3, JPA, Hibernate, Geotools e OpenLayers, ajudando Pedro Alvares Cabr...VRaptor 3, JPA, Hibernate, Geotools e OpenLayers, ajudando Pedro Alvares Cabr...
VRaptor 3, JPA, Hibernate, Geotools e OpenLayers, ajudando Pedro Alvares Cabr...
 
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAVRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
 
Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3
Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3
Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3
 
VRaptor - Ciclo CASIN 2011
VRaptor - Ciclo CASIN 2011VRaptor - Ciclo CASIN 2011
VRaptor - Ciclo CASIN 2011
 

Similar to Palestra VRaptor 3

Consumindo dados via web service no android
Consumindo dados via web service no androidConsumindo dados via web service no android
Consumindo dados via web service no android
Alexandre Antunes
 
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsJava Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e Servlets
Eduardo Mendes
 

Similar to Palestra VRaptor 3 (20)

Automação de testes de API utilizando Postman
Automação de testes de API utilizando PostmanAutomação de testes de API utilizando Postman
Automação de testes de API utilizando Postman
 
Web Services Rest
Web Services RestWeb Services Rest
Web Services Rest
 
De Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupDe Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações Mashup
 
Consumindo dados via web service no android
Consumindo dados via web service no androidConsumindo dados via web service no android
Consumindo dados via web service no android
 
REST com Python
REST com PythonREST com Python
REST com Python
 
Te aula1
Te aula1Te aula1
Te aula1
 
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NETArquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
 
Testando API REST - Parte 1
Testando API REST - Parte 1Testando API REST - Parte 1
Testando API REST - Parte 1
 
Do Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio JugDo Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio Jug
 
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NETArquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
 
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NETArquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
 
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsJava Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e Servlets
 
365on Lab - Asp.Net MVC
365on Lab - Asp.Net MVC365on Lab - Asp.Net MVC
365on Lab - Asp.Net MVC
 
Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0
 
Dicas para migrar sua aplicação ASP.NET para ASP.NET Core 2.x
Dicas para migrar sua aplicação ASP.NET para ASP.NET Core 2.xDicas para migrar sua aplicação ASP.NET para ASP.NET Core 2.x
Dicas para migrar sua aplicação ASP.NET para ASP.NET Core 2.x
 
Web Services
Web ServicesWeb Services
Web Services
 
Trilha .NET - REST na plataforma Microsoft com ASP.NET Web API
Trilha .NET - REST na plataforma Microsoft com ASP.NET Web APITrilha .NET - REST na plataforma Microsoft com ASP.NET Web API
Trilha .NET - REST na plataforma Microsoft com ASP.NET Web API
 
Web service
Web serviceWeb service
Web service
 
Integração de Serviços Cloud com REST/JSON
Integração de Serviços Cloud com REST/JSON Integração de Serviços Cloud com REST/JSON
Integração de Serviços Cloud com REST/JSON
 
Automação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e MobileAutomação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e Mobile
 

Recently uploaded

Recently uploaded (8)

ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 

Palestra VRaptor 3

  • 1.
  • 2.  O que é o VRaptor?  Primeiro contato  Injeção de dependências  Enviando dados via form  Escopos definidos  Validação  REST
  • 3.  Framework MVC brasileiro  Desenvolvido pela Caelum  Inspirado no Ruby on Rails  Focado no desenvolvimento ágil  Diminui drasticamente tempo de trabalho  Convenção sobre configuração  Roda sobre o Spring
  • 4.  O que é o VRaptor?  Primeiro contato  Injeção de dependências  Enviando dados via form  Escopos definidos  Validação  REST
  • 5.
  • 6.
  • 7.  Convenção de acesso à view: WEB-INF/jsp/{nomeDoResource}/{nomeDoMétodo}.jsp  No nosso caso: WEB-INF/jsp/olaMundo/ola.jsp  Como acessaremos a view: localhost:8080/PalestraVRaptor/olaMundo/ola
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.  O que é o VRaptor?  Primeiro contato  Injeção de dependências  Enviando dados via form  Escopos definidos  Validação  REST
  • 14.  Quais são minhas dependências?  Quem instanciará as classes?  Como o Vraptor sabe disso?
  • 15.
  • 16.
  • 17.  O que é o VRaptor?  Primeiro contato  Injeção de dependências  Enviando dados via form  Escopos definidos  Validação  REST
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.  O que é o VRaptor?  Primeiro contato  Injeção de dependências  Enviando dados via form  Escopos definidos  Validação  REST
  • 24.  @RequestScoped (padrão)  @SessionScoped  @ApplicationScoped  @PrototypeScoped
  • 25.  @PostConstruct: assim que o escopo for iniciado  @PreDestroy: assim que o escopo for finalizado
  • 26.
  • 27.  O que é o VRaptor?  Primeiro contato  Injeção de dependências  Enviando dados via form  Escopos definidos  Validação  REST
  • 28.  Componente Validator do VRaptor  Maneira clássica  Maneira fluente  Integração com o Hibernate Validator  Especificar para qual lógica encaminhar
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.  Validador do VRaptor integrado com o Hibernate Validator
  • 36.
  • 37.
  • 38.
  • 39.  O que é o VRaptor?  Primeiro contato  Injeção de dependências  Enviando dados via form  Escopos definidos  Validação  REST
  • 40.  Representation State Tranfer  Padrão arquitetural  Endereçamento de forma padronizada (nice urls)  Maior visibilidade para componentes intermediários  Diminui acoplamento entre cliente e servidor
  • 42.  URI (Unified Resource Identifier)  Nome dos recursos  Recursos != Ações  Má prática: /produto/adiciona
  • 43.  Conjunto pequeno e fixo de operações  Interface uniforme  Operações HTTP: › Get, Post, Put, › Delete, Head, Options, Trace
  • 44.  Get: recuperar dados de um recurso  Post: adiciona dados de um recurso  Put: adiciona ou modifica dados  Delete: deleta o recurso representado na URI  Head, Options, Trace: recuperam metadados da URI
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.  Alta produtividade  Curva de aprendizado  Testabilidade  Economia  Flexibilidade  Melhores práticas de desenvolvimento

Editor's Notes

  1. O VRaptor 3 foca em simplicidade e, portanto, todas as funcionalidades que você verá têm como meta resolver o problema do programador da maneira menos intrusiva possível em seu código. Sempre procura encapsular HttpServletRequest, Response, Session e toda a API do javax.servlet. Deixar que o framework cuide da parte web e deixe você focar na linguagem de programação. Os criadores tentaram pegar o melhor de vários frameworks para fazer o próprio.
  2. O VRaptor trabalha muito com convenções em vez de configurações, portanto, para que nosso sistema funcione, devemos organizar nossos arquivos obedecendo a seguinte convenção: ao criar um controller, suas views devem ficar dentro de uma pasta com o nome idêntico ao do mesmo sendo que com a inicial minúscula. Cada .jsp dentro desta pasta deverá possuir o mesmo nome que os métodos correspondentes em seus respectivos controllers. Cada pasta deve ficar dentro de uma pasta chamada “jsp”
  3. Repare que a classe não herda de nenhuma outra classe nem implementa nenhuma interface. É um exemplo claro de um POJO. Anotando o controller com @Resource, seus métodos públicos ficarão disponíveis para receber requisições web.
  4. Ao terminar a execução do método, por convenção, o VRaptor fará o dispatch da requisição para o JSP /WEB-INF/jsp/olaMundo/ola.jsp
  5. No VRaptor, o retorno do método é exportado para a JSP por meio de atributos da requisição.
  6. No caso do método lista, vai existir um atributo chamado stringList contendo a lista retornada Se for uma classe qualquer vai ser o nome da classe com a primeira letra minúscula
  7. O VRaptor está fortemente baseado no conceito de injeção de dependências do Spring, uma vez que chega até mesmo a utilizar dessa ideia para juntar seus componentes internos. Dependência é tudo que um objeto precisa para que seus métodos executem com sucesso. O conceito básico de DI (Dependency Injection) é que tudo que um objeto depende deve ser entregue a ele, em vez de ele ter que ir atrás de cada uma de suas dependências. Pra isso, anotamos com @Component todas as classes que são dependência de alguma outra. Então o VRaptor se encarregará de instanciar as classes e injetar as dependências quando ele ver que determinada classe pede um certo objeto em seu construtor.
  8. Nesse caso, Result é uma classe interna do próprio VRaptor que já está configurada como dependência. Já ProdutoDao foi anotada como dependência por nós.
  9. Geralmente em outros framekworks, quando termina uma ação a gente manda para a aplicação ir para uma determinada URI. Mas se essa URI mudar um dia quebra toda tua aplicação. Em vez de, por exemplo, ir num arquivo de configuração (que é uma terceirização), a gente faz isso a nível de código no próprio controller. Isso favorece o refactor, pois por exemplo, se eu refatorar meu método, eu reflito isso nos meus redirecionamentos. O redirect acontece no lado do cliente, através de códigos HTTP que farão o browser acessar uma nova URL; Já o forward acontece no lado do servidor, totalmente transparente para o cliente/browser. Um bom exemplo de uso do redirect é no chamado 'redirect-after-post'. Por exemplo: quando você adiciona um cliente e que, após o formulário submetido, o cliente seja retornado para a página de listagem de clientes. Fazendo isso com redirect, impedimos que o usuário atualize a página (F5) e reenvie toda a requisição, acarretando em dados duplicados. No caso do forward, um exemplo de uso é quando você possui uma validação e essa validação falhou, geralmente você quer que o usuário continue na mesma tela do formulário com os dados da requisição preenchidos, mas internamente você vai fazer o forward para outra lógica de negócios (a que prepara os dados necessários para o formulário).
  10. @Request: o componente será criado sempre a cada requisição @Session: o compoenente será criado um vez por sessão @Application: o componente será criado uma única vez em todo o tempo de vida da aplicação @Prototype: o componente será criado sempre que for solicitado
  11. VRaptor permite anotações bem uteis do Java EE 5, as quais devem ser utilizadas em métodos Dessa forma podemos usar o @PostConstruct para criação da fábrica de sessões E usar o @PreDestroy pra fechar a nossa fábrica
  12. Maneira clássica: você faz os if’s e coloca as mensagens manualmente; Maneira fluente: você diz o que quer que seja verdade, e caso não seja, adiciona uma mensagem internacionalizada (tem colocar as chaves no seu arquivo message.properties); Em ambas as maneiras é preciso indicar para onde voltar quando ocorrer algum erro. No nosso caso, queremos voltar para o formulário.
  13. No estilo fluente, estabelecemos a regra. Se não for obedecida, estouramos o erro A ideia é que o código para fazer a validação seja algo muito parecido com a linguagem natural
  14. No estilo fluente, a ideia é que o código para fazer a validação seja algo muito parecido com a linguagem natural
  15. REST é um conjunto de restrições que define um padrão arquitetural com características específicas. Permite o endereçamento dos recursos de forma padronizada.
  16. Requisição HTTP tem três tipos de componentes importantes. Uma aplicação RESTful costuma reforçar mais ss sbustantivos do que os verbos. A vantagem de seguir isso é que conseguimos aproveitar toda a estrutura que o protocolo HTTP proporciona
  17. Quando fazemos requisições web nós precisamos falar o caminho da mesma, a URI, ou seja, o identificador de um recurso. Para representar a adição de um produto por exemplo, podemos usar a URI /produto aliado ao método Post do HTTP, o qual representa adição de dados.
  18. Uma boa e importante prática do REST é que você tenha uma conjunto pequeno e fixo de operações bem definidas, gerando assim uma interface uniforme. É interessante que duas aplicações diferentes conversem entre si sem implementar várias operações diferentes. Perceba que adicionar um produto é basicamente a mesma ação que adicionar um usuário. Padronize isto!
  19. Put != Post, pois no Post a URI indica o local onde será tratada a informação, já no Put indica o local será armazenada a informação. Head: recupera o Header Options: recupera quais métodos são possíveis Trace: informações de debug. Quando fazemos uma aplicação, não trafegamos um recurso pela rede, mas sim a representação dele.
  20. Cada verbo HTTP tem uma semântica diferente, se uma operação não segue a semântica dos verbos, não se deve aceitar o mesmo. Exemplo: o método “listaTudo()” é uma operação idempotente, ou seja, pode ser chamada quantas vezes quiser que não vai haver nenhum efeito colateral, e se o banco não mudou, vai ter sempre o mesmo resultado. Logo, faz sentido que o verbo HTTP para acessar esse método seja o Get. A partir do momento que colocamos uma anotação de verbo HTTP no nosso método, ele não pode mais ser acessado pelos outros verbos. Se tentarmos fazer uma requisição Post pra “/produto”, a requisição vai retornar um status 405 (Método não suportado), que quer dizer que existe um recurso nessa URI, mas que não suporta o verbo HTTP Post.
  21. Mas podemos colocar mais um método que responda à mesma URI, desde que os verbos HTTP sejam diferentes. Nesse nosso caso, fazemos com que o método “add()” seja atendido pela mesma URI “/produto” do método “listaTudo()” porém, usando o verbo HTTP Post. E como esta operação não é idempotente, se eu repetir duas vezes uma requisição, vou estar adicionando dois produtos, não sabemos qual vai ser a URI dele, por isso cabe perfeitamente usar o verbo Post.
  22. No momento de criar os links e formulários HTML devemos tomar um cuidado muito importante pois os browsers só dão suporte aos métodos POST e GET por meio de formulários hoje em dia. Por isso, você deverá criar as requisições para métodos do tipo DELETE, PUT etc usando JavaScript ou passando um parâmetro extra, chamado _method. O último só funciona em requisições POST. Esse parâmetro sobrescreverá o método HTTP real sendo invocado.
  23. No momento de criar os links e formulários HTML devemos tomar um cuidado muito importante pois os browsers só dão suporte aos métodos POST e GET por meio de formulários hoje em dia. Por isso, você deverá criar as requisições para métodos do tipo DELETE, PUT etc usando JavaScript ou passando um parâmetro extra, chamado _method. O último só funciona em requisições POST. Esse parâmetro sobrescreverá o método HTTP real sendo invocado.
  24. No momento de criar os links e formulários HTML devemos tomar um cuidado muito importante pois os browsers só dão suporte aos métodos POST e GET por meio de formulários hoje em dia. Por isso, você deverá criar as requisições para métodos do tipo DELETE, PUT etc usando JavaScript ou passando um parâmetro extra, chamado _method. O último só funciona em requisições POST. Esse parâmetro sobrescreverá o método HTTP real sendo invocado.
  25. ALTA PRODUTIVIDADEa Usar o VRaptor 3 é simples e intuitivo. Você atingirá níveis altíssimos de produtividade com Java para Web. CURVA DE APRENDIZADO Em pouco tempo você conseguirá aprender tudo o que é necessário para desenvolver suas aplicações com o VRaptor. TESTABILIDADE Escreva código modularizado e desacoplado do VRaptor. Sua aplicação fica altamente testável e de fácil manutenção. ECONOMIA Economize muitas horas de trabalho com a alta produtividade do VRaptor, a facilidade em treinar a sua equipe e a qualidade final do seu projeto. FLEXIBILIDADE Integre o seu projeto com qualquer framework de sua preferência. Você não estará preso a nenhuma tecnologia específica. MELHORES PRÁTICAS DE DESENVOLVIMENTO Utilizando os conceitos de Injeção de Dependência, Inversão de Controle e POJOs, seu código fica simples e testável.