SlideShare uma empresa Scribd logo
Vantagens e Desvantagens do
        Spring MVC
          @bregaida
Muitos Frameworks MVC
• JSF
• Struts
• Spring             • WebWork
• Mentawai           • Play Framework
• VRaptor            • Click Framework
• Demoiselle         • JBanana
• JBoss Seam         • Etc
• Neo Framework
• Brutos Framework
Qual escolher?
Escolha aquele que atende seu
negócio e te deixa confortável.
Spring Framework
• Criado por Rod Johnson
• Framework não intrusivo
• Baseado em padrões IoC e Injeção de
  Dependência
• O Container se encarrega de instanciar as
  classes Java e definir suas dependências
• Possui uma arquitetura baseada em POJOs
  e Interfaces
Vantagens
• Simples e de fácil aprendizado
• Liberdade para trabalhar na View
• Integração simples com outros frameworks
• Navegação feita por anotações
• BindResult e ModelAndView faz todo trabalho
  nas telas para validação e estado da página
• Suporte a várias Views Freemaker, JSP, Velocity
• Integração com Hibernate Validator
Anotações mais utilizadas
•   @Repository - Repositório dos dados

•   @Service - Camada de Serviços

•   @Qualifier - Qual Bean deverá ser injetado

•   @Autowired - Injeção dos Beans

•   @Controller - Camada View

•   @RequestMapping - Mapeamento do caminho

•   @RequestParam - Recebimento dos Parametros

•   @ResponseBody -Suporte a REST

•   @Valid - Responsável pela validação do parametro ou
    formulário
@Repository
@Repository
public class ProdutoDao implements ProdutoDaoI {

//Aqui código da Classe

}
@Service

@Service
public class ProdutoService implements ProdutoServiceI{

//Aqui o código da classe

}
@Controller


@Controller
public class ProdutoController {

//Aqui o código da classe
}
@Autowired
@Service
public class ProdutoService implements ProdutoServiceI{

	 @Autowired
	 private ProdutoDao	 produtoDao;

}


@Controller
@RequestMapping("/produto/**")
public class ProdutoController {

	 @Autowired
	 private ProdutoService	produtoService;

}
@Qualifier
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
 
public class Customer {
 
" @Autowired
" @Qualifier("personA")
" private Person person;
" //...
}


                Fonte: http://www.mkyong.com/spring/spring-autowiring-qualifier-example/
@RequestMapping
@Controller
@RequestMapping("/produto/**")
public class ProdutoController {

  @RequestMapping("/produto/formulario")
	 public ModelAndView formulario() {
	 	 return new ModelAndView("formulario").addObject("produtoForm", new
ProdutoForm());
	 }
	
	 @RequestMapping("/produto/adiciona")
	 public ModelAndView adiciona(@Valid ProdutoForm produtoForm,
BindingResult result) {
	 	 if (result.hasErrors()) {
	 	 	 return new
ModelAndView("formulario").addAllObjects(result.getModel());
	 	 }
	 	 populaBean(produtoForm);
	 	 produtoService.salva(produto);
	 	 return new ModelAndView("lista").addObject("produtos",
produtoService.pegaTodos());
	 }
}
@RequestParam

@RequestMapping(value = "/produto/remove", method = RequestMethod.GET)
	 public ModelAndView remove(@Valid @RequestParam(value = "produto.id") long id)
{
	 	 produto = new Produto();
	 	 produto.setId(id);
	 	 produtoService.remove(produto);
	 	 return new ModelAndView("lista").addObject("produtos", produtoService.pegaTodos());
}
@ResponseBody
      •       Basta incluir os jars Jackson no projeto e será retornado um
              JSON:

          •     jackson-core-asl-1.4.3.jar

          •     jackson-mapper-asl-1.4.3.jar


public @ResponseBody HashMap<String,Object> view(@RequestParam("start") int start,
@RequestParam("limit") int limit) {
        List<Produto> produtos = produtoService.pegaTodos();
        HashMap<String, Object> modelMap = new HashMap<String,Object>();
        modelMap.put("produtos", produtos);
        return modelMap;
	 }
@ResponseBody
                      Com Nice URL

@RequestMapping(value = "/{idParceiro}/{idModalidade}", method = RequestMethod.GET)
    @ResponseBody
    public Modalidade obtemModalidade(@PathVariable("idParceiro") Long idParceiro,
@PathVariable("idModalidade") Long idModalidade, HttpSession sessao){
        return modalidadeService.obtemModalidadePorParceiro(idParceiro, idModalidade);
    }
ModelAndView
@RequestMapping("/produto/formulario")
	 public ModelAndView formulario() {
	 	 return new ModelAndView("formulario").addObject("produtoForm", new ProdutoForm());
	 }
	
	 @RequestMapping("/produto/adiciona")
	 public ModelAndView adiciona(@Valid ProdutoForm produtoForm, BindingResult result) {
	 	 if (result.hasErrors()) {
	 	 	 return new ModelAndView("formulario").addAllObjects(result.getModel());
	 	 }
	 	 populaBean(produtoForm);
	 	 produtoService.salva(produto);
	 	 return new ModelAndView("lista").addObject("produtos", produtoService.pegaTodos());
	 }
@Valid
    No Atributo

     public ModelAndView remove(@Valid @RequestParam(value = "produto.id") long id) {

     //Código do método

     }


    No Formulário

	    @RequestMapping("/produto/adiciona")
	    public ModelAndView adiciona(@Valid ProdutoForm produtoForm, BindingResult result) {
	    	 if (result.hasErrors()) {
	    	 	 return new ModelAndView("formulario").addAllObjects(result.getModel());
	    	 }
	    	 populaBean(produtoForm);
	    	 produtoService.salva(produto);
	    	 return new ModelAndView("lista").addObject("produtos", produtoService.pegaTodos());
	    }
BindResult

	   @RequestMapping("/produto/adiciona")
	   public ModelAndView adiciona(@Valid ProdutoForm produtoForm, BindingResult result) {
	   	 if (result.hasErrors()) {
	   	 	 return new ModelAndView("formulario").addAllObjects(result.getModel());
	   	 }
	   	 populaBean(produtoForm);
	   	 produtoService.salva(produto);
	   	 return new ModelAndView("lista").addObject("produtos", produtoService.pegaTodos());
	   }
Hibernate Validator

import org.hibernate.validator.constraints.NotEmpty;

public class ProdutoForm {

	   private Long id;
	   @NotEmpty(message = "Valor não pode ser vazio")
	   private String nome;
	   @NotEmpty(message = "Valor não pode ser vazio")
	   private String descricao;

}
Desvantagens
Ainda tem XMLs
Application-Config.xml
spring-servlet.xml
web.xml
Desvantagens

• Tratar erros como 400, 404, 500 não são
  simples de tratar
• Poucos componentes de tela feitos
• Ainda possui configurações em XML ou
  configurações em classes.
Quer saber mais?
•   http://www.caelum.com.br/curso/fj-27-spring-framework/

•   http://www.javawora.blogspot.com

•   http://www.edsongoncalves.com.br/category/spring-mvc-3-0/

•   http://chavesrodolfo.blogspot.com.br/2011/02/anotacoes-do-spring.html

•   http://valdemarjr.net/2011/02/18/exemplo-spring-mvc-integrado-com-struts-
    tiles.html

•   http://static.springsource.org/spring/docs/2.0.x/reference/mvc.html

•   http://maestric.com/doc/java/spring

•   http://netbeans.org/kb/docs/web/quickstart-webapps-spring_pt_BR.html

•   http://www.mkyong.com/spring-mvc/spring-mvc-hello-world-example/

•   http://www.mkyong.com/spring/spring-autowiring-qualifier-example/
Obrigado!


       eduardo.bregaida@gmail.com
        http://javawora.blogspot.com
http://www.slideshare.net/eduardo.bregaida
                  @bregaida

Mais conteúdo relacionado

Mais procurados

Spring Boot—Production Boost
Spring Boot—Production BoostSpring Boot—Production Boost
Spring Boot—Production Boost
VMware Tanzu
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)
Helder da Rocha
 
Desenvolvimento de uma API RESTful com Java EE
Desenvolvimento de uma API RESTful com Java EEDesenvolvimento de uma API RESTful com Java EE
Desenvolvimento de uma API RESTful com Java EE
Luan Felipe Knebel
 
Consuming Restful APIs using Swagger v2.0
Consuming Restful APIs using Swagger v2.0Consuming Restful APIs using Swagger v2.0
Consuming Restful APIs using Swagger v2.0
Pece Nikolovski
 
AEM Sightly Template Language
AEM Sightly Template LanguageAEM Sightly Template Language
AEM Sightly Template Language
Gabriel Walt
 
Java OOP Programming language (Part 5) - Inheritance
Java OOP Programming language (Part 5) - InheritanceJava OOP Programming language (Part 5) - Inheritance
Java OOP Programming language (Part 5) - Inheritance
OUM SAOKOSAL
 
Maven 3 Overview
Maven 3  OverviewMaven 3  Overview
Maven 3 Overview
Mike Ensor
 
Equipamentos de Movimentação de Materiais
Equipamentos de Movimentação de Materiais Equipamentos de Movimentação de Materiais
Equipamentos de Movimentação de Materiais
Opengo,Espro,AllNet, Led Informática, Instituto Dom Bosco
 
Spring framework in depth
Spring framework in depthSpring framework in depth
Spring framework in depth
Vinay Kumar
 
Enhanced Web Service Testing: A Better Mock Structure
Enhanced Web Service Testing: A Better Mock StructureEnhanced Web Service Testing: A Better Mock Structure
Enhanced Web Service Testing: A Better Mock Structure
Salesforce Developers
 
API Gateway report
API Gateway reportAPI Gateway report
API Gateway report
Gleicon Moraes
 
API Testing Presentations.pptx
API Testing Presentations.pptxAPI Testing Presentations.pptx
API Testing Presentations.pptx
ManmitSalunke
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
ASG
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBoot
Josué Neis
 
Rest API Testing
Rest API TestingRest API Testing
Rest API Testing
upadhyay_25
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e Streams
Helder da Rocha
 
Spring Boot
Spring BootSpring Boot
Spring Boot
koppenolski
 
REST API Basics
REST API BasicsREST API Basics
REST API Basics
Tharindu Weerasinghe
 
jQuery Fundamentals
jQuery FundamentalsjQuery Fundamentals
jQuery Fundamentals
Gil Fink
 
Spring boot introduction
Spring boot introductionSpring boot introduction
Spring boot introduction
Rasheed Waraich
 

Mais procurados (20)

Spring Boot—Production Boost
Spring Boot—Production BoostSpring Boot—Production Boost
Spring Boot—Production Boost
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)
 
Desenvolvimento de uma API RESTful com Java EE
Desenvolvimento de uma API RESTful com Java EEDesenvolvimento de uma API RESTful com Java EE
Desenvolvimento de uma API RESTful com Java EE
 
Consuming Restful APIs using Swagger v2.0
Consuming Restful APIs using Swagger v2.0Consuming Restful APIs using Swagger v2.0
Consuming Restful APIs using Swagger v2.0
 
AEM Sightly Template Language
AEM Sightly Template LanguageAEM Sightly Template Language
AEM Sightly Template Language
 
Java OOP Programming language (Part 5) - Inheritance
Java OOP Programming language (Part 5) - InheritanceJava OOP Programming language (Part 5) - Inheritance
Java OOP Programming language (Part 5) - Inheritance
 
Maven 3 Overview
Maven 3  OverviewMaven 3  Overview
Maven 3 Overview
 
Equipamentos de Movimentação de Materiais
Equipamentos de Movimentação de Materiais Equipamentos de Movimentação de Materiais
Equipamentos de Movimentação de Materiais
 
Spring framework in depth
Spring framework in depthSpring framework in depth
Spring framework in depth
 
Enhanced Web Service Testing: A Better Mock Structure
Enhanced Web Service Testing: A Better Mock StructureEnhanced Web Service Testing: A Better Mock Structure
Enhanced Web Service Testing: A Better Mock Structure
 
API Gateway report
API Gateway reportAPI Gateway report
API Gateway report
 
API Testing Presentations.pptx
API Testing Presentations.pptxAPI Testing Presentations.pptx
API Testing Presentations.pptx
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBoot
 
Rest API Testing
Rest API TestingRest API Testing
Rest API Testing
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e Streams
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
REST API Basics
REST API BasicsREST API Basics
REST API Basics
 
jQuery Fundamentals
jQuery FundamentalsjQuery Fundamentals
jQuery Fundamentals
 
Spring boot introduction
Spring boot introductionSpring boot introduction
Spring boot introduction
 

Destaque

Cultura da empresa - um problema na adoção ágil
Cultura da empresa - um problema na adoção ágilCultura da empresa - um problema na adoção ágil
Cultura da empresa - um problema na adoção ágil
Eduardo Bregaida
 
DDD + BDD + TDD + Scrum
DDD + BDD + TDD + ScrumDDD + BDD + TDD + Scrum
DDD + BDD + TDD + Scrum
Eduardo Bregaida
 
DDD + BDD + TDD - RF 2015
DDD + BDD + TDD - RF 2015 DDD + BDD + TDD - RF 2015
DDD + BDD + TDD - RF 2015
Eduardo Bregaida
 
Java Generics - Quiz Questions
Java Generics - Quiz QuestionsJava Generics - Quiz Questions
Java Generics - Quiz Questions
Ganesh Samarthyam
 
Software Architecture - Quiz Questions
Software Architecture - Quiz QuestionsSoftware Architecture - Quiz Questions
Software Architecture - Quiz Questions
Ganesh Samarthyam
 
DDD - Linguagem Ubíqua
DDD - Linguagem UbíquaDDD - Linguagem Ubíqua
DDD - Linguagem Ubíqua
Eduardo Bregaida
 
Introdução aos computadores e à World Wide Web
Introdução aos computadores e à World Wide WebIntrodução aos computadores e à World Wide Web
Introdução aos computadores e à World Wide Web
Cícero Quarto
 
Get into Functional Programming with Clojure
Get into Functional Programming with ClojureGet into Functional Programming with Clojure
Get into Functional Programming with Clojure
John Stevenson
 
Scrum - IMES 2013 (Remodelada)
Scrum - IMES 2013 (Remodelada)Scrum - IMES 2013 (Remodelada)
Scrum - IMES 2013 (Remodelada)
Eduardo Bregaida
 
Sailing with Java 8 Streams
Sailing with Java 8 StreamsSailing with Java 8 Streams
Sailing with Java 8 Streams
Ganesh Samarthyam
 
Java 8 Date and Time API
Java 8 Date and Time APIJava 8 Date and Time API
Java 8 Date and Time APISualeh Fatehi
 

Destaque (11)

Cultura da empresa - um problema na adoção ágil
Cultura da empresa - um problema na adoção ágilCultura da empresa - um problema na adoção ágil
Cultura da empresa - um problema na adoção ágil
 
DDD + BDD + TDD + Scrum
DDD + BDD + TDD + ScrumDDD + BDD + TDD + Scrum
DDD + BDD + TDD + Scrum
 
DDD + BDD + TDD - RF 2015
DDD + BDD + TDD - RF 2015 DDD + BDD + TDD - RF 2015
DDD + BDD + TDD - RF 2015
 
Java Generics - Quiz Questions
Java Generics - Quiz QuestionsJava Generics - Quiz Questions
Java Generics - Quiz Questions
 
Software Architecture - Quiz Questions
Software Architecture - Quiz QuestionsSoftware Architecture - Quiz Questions
Software Architecture - Quiz Questions
 
DDD - Linguagem Ubíqua
DDD - Linguagem UbíquaDDD - Linguagem Ubíqua
DDD - Linguagem Ubíqua
 
Introdução aos computadores e à World Wide Web
Introdução aos computadores e à World Wide WebIntrodução aos computadores e à World Wide Web
Introdução aos computadores e à World Wide Web
 
Get into Functional Programming with Clojure
Get into Functional Programming with ClojureGet into Functional Programming with Clojure
Get into Functional Programming with Clojure
 
Scrum - IMES 2013 (Remodelada)
Scrum - IMES 2013 (Remodelada)Scrum - IMES 2013 (Remodelada)
Scrum - IMES 2013 (Remodelada)
 
Sailing with Java 8 Streams
Sailing with Java 8 StreamsSailing with Java 8 Streams
Sailing with Java 8 Streams
 
Java 8 Date and Time API
Java 8 Date and Time APIJava 8 Date and Time API
Java 8 Date and Time API
 

Semelhante a Spring MVC - QConSP

Introducao ao Spring Web MVC
Introducao ao Spring Web MVCIntroducao ao Spring Web MVC
Introducao ao Spring Web MVC
Eder Magalhães
 
VRaptor4
VRaptor4VRaptor4
Vraptor
VraptorVraptor
Vraptor
clauvane1708
 
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
Kaio Valente
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
grupoweblovers
 
JavaScript Model-View no Frontend
JavaScript Model-View no FrontendJavaScript Model-View no Frontend
JavaScript Model-View no Frontend
Henrique Gogó
 
Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01
Maurício Linhares
 
365on Lab Asp.Net MVC Fundamentos 01 Overview
365on Lab Asp.Net MVC Fundamentos 01 Overview365on Lab Asp.Net MVC Fundamentos 01 Overview
365on Lab Asp.Net MVC Fundamentos 01 Overview
Alexsandro Almeida
 
ASP .NET 4.0 WebForms, Novas funcionalidades
ASP .NET 4.0 WebForms, Novas funcionalidadesASP .NET 4.0 WebForms, Novas funcionalidades
ASP .NET 4.0 WebForms, Novas funcionalidades
C. Augusto Proiete
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
Rafael Benevides
 
Apache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesApache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentes
CI&T
 
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
Rafael Garcia
 
LPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdfLPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdf
GabrielaMota46
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
Claudio Miranda
 
KnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realKnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida real
Comunidade NetPonto
 
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
Daniel Faria Gomes
 
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 ServletsEduardo Mendes
 
[CLPE] Novidades do Asp.net mvc 2
[CLPE] Novidades do Asp.net mvc 2[CLPE] Novidades do Asp.net mvc 2
[CLPE] Novidades do Asp.net mvc 2Felipe Pimentel
 
Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5
Marcelo Rodrigues
 
PDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETPDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETslides_teltools
 

Semelhante a Spring MVC - QConSP (20)

Introducao ao Spring Web MVC
Introducao ao Spring Web MVCIntroducao ao Spring Web MVC
Introducao ao Spring Web MVC
 
VRaptor4
VRaptor4VRaptor4
VRaptor4
 
Vraptor
VraptorVraptor
Vraptor
 
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
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
 
JavaScript Model-View no Frontend
JavaScript Model-View no FrontendJavaScript Model-View no Frontend
JavaScript Model-View no Frontend
 
Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01
 
365on Lab Asp.Net MVC Fundamentos 01 Overview
365on Lab Asp.Net MVC Fundamentos 01 Overview365on Lab Asp.Net MVC Fundamentos 01 Overview
365on Lab Asp.Net MVC Fundamentos 01 Overview
 
ASP .NET 4.0 WebForms, Novas funcionalidades
ASP .NET 4.0 WebForms, Novas funcionalidadesASP .NET 4.0 WebForms, Novas funcionalidades
ASP .NET 4.0 WebForms, Novas funcionalidades
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Apache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesApache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentes
 
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
 
LPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdfLPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdf
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
 
KnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realKnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida real
 
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
 
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
 
[CLPE] Novidades do Asp.net mvc 2
[CLPE] Novidades do Asp.net mvc 2[CLPE] Novidades do Asp.net mvc 2
[CLPE] Novidades do Asp.net mvc 2
 
Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5
 
PDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETPDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NET
 

Mais de Eduardo Bregaida

War Room - Bregaida - V1
War Room - Bregaida - V1War Room - Bregaida - V1
War Room - Bregaida - V1
Eduardo Bregaida
 
Feedbacks - V1
Feedbacks - V1Feedbacks - V1
Feedbacks - V1
Eduardo Bregaida
 
Treinamento Agile com Scrum - V2
Treinamento Agile com Scrum - V2Treinamento Agile com Scrum - V2
Treinamento Agile com Scrum - V2
Eduardo Bregaida
 
Treinamento Agile com scrum
Treinamento Agile com scrumTreinamento Agile com scrum
Treinamento Agile com scrum
Eduardo Bregaida
 
Aviação Civil LT sciensa
Aviação Civil  LT sciensaAviação Civil  LT sciensa
Aviação Civil LT sciensa
Eduardo Bregaida
 
Management 3.0 - V. Revisada
Management 3.0 - V. RevisadaManagement 3.0 - V. Revisada
Management 3.0 - V. Revisada
Eduardo Bregaida
 
Minha história
Minha históriaMinha história
Minha história
Eduardo Bregaida
 
Java acsp
Java acspJava acsp
Java acsp
Eduardo Bregaida
 
Aula 15 minutos
Aula 15 minutosAula 15 minutos
Aula 15 minutos
Eduardo Bregaida
 
Java+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso TotalJava+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso Total
Eduardo Bregaida
 
Cultura da Empresa - um problema na Adoção Ágil - Conexão Java
Cultura da Empresa - um problema na Adoção Ágil - Conexão JavaCultura da Empresa - um problema na Adoção Ágil - Conexão Java
Cultura da Empresa - um problema na Adoção Ágil - Conexão Java
Eduardo Bregaida
 
Scrum - passos e desafios - agile tour
Scrum - passos e desafios - agile tourScrum - passos e desafios - agile tour
Scrum - passos e desafios - agile tour
Eduardo Bregaida
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
Eduardo Bregaida
 
Falhas nos projetos é culpa da Cultura da Empresa e não das metodologias ágeis
Falhas nos projetos é culpa da Cultura da Empresa e não das metodologias ágeisFalhas nos projetos é culpa da Cultura da Empresa e não das metodologias ágeis
Falhas nos projetos é culpa da Cultura da Empresa e não das metodologias ágeis
Eduardo Bregaida
 
Virus em Hw
Virus em HwVirus em Hw
Virus em Hw
Eduardo Bregaida
 
JSF & REST
JSF & RESTJSF & REST
JSF & REST
Eduardo Bregaida
 
Cloud Computing Apresentacao Uscs Final
Cloud Computing Apresentacao Uscs FinalCloud Computing Apresentacao Uscs Final
Cloud Computing Apresentacao Uscs Final
Eduardo Bregaida
 
Metodologias Ágeis no Estilo Dr House
Metodologias Ágeis no Estilo Dr HouseMetodologias Ágeis no Estilo Dr House
Metodologias Ágeis no Estilo Dr House
Eduardo Bregaida
 
Java E O Mercado De Trabalho
Java E O Mercado De TrabalhoJava E O Mercado De Trabalho
Java E O Mercado De Trabalho
Eduardo Bregaida
 
Agile SCRUM
Agile SCRUMAgile SCRUM
Agile SCRUM
Eduardo Bregaida
 

Mais de Eduardo Bregaida (20)

War Room - Bregaida - V1
War Room - Bregaida - V1War Room - Bregaida - V1
War Room - Bregaida - V1
 
Feedbacks - V1
Feedbacks - V1Feedbacks - V1
Feedbacks - V1
 
Treinamento Agile com Scrum - V2
Treinamento Agile com Scrum - V2Treinamento Agile com Scrum - V2
Treinamento Agile com Scrum - V2
 
Treinamento Agile com scrum
Treinamento Agile com scrumTreinamento Agile com scrum
Treinamento Agile com scrum
 
Aviação Civil LT sciensa
Aviação Civil  LT sciensaAviação Civil  LT sciensa
Aviação Civil LT sciensa
 
Management 3.0 - V. Revisada
Management 3.0 - V. RevisadaManagement 3.0 - V. Revisada
Management 3.0 - V. Revisada
 
Minha história
Minha históriaMinha história
Minha história
 
Java acsp
Java acspJava acsp
Java acsp
 
Aula 15 minutos
Aula 15 minutosAula 15 minutos
Aula 15 minutos
 
Java+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso TotalJava+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso Total
 
Cultura da Empresa - um problema na Adoção Ágil - Conexão Java
Cultura da Empresa - um problema na Adoção Ágil - Conexão JavaCultura da Empresa - um problema na Adoção Ágil - Conexão Java
Cultura da Empresa - um problema na Adoção Ágil - Conexão Java
 
Scrum - passos e desafios - agile tour
Scrum - passos e desafios - agile tourScrum - passos e desafios - agile tour
Scrum - passos e desafios - agile tour
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
 
Falhas nos projetos é culpa da Cultura da Empresa e não das metodologias ágeis
Falhas nos projetos é culpa da Cultura da Empresa e não das metodologias ágeisFalhas nos projetos é culpa da Cultura da Empresa e não das metodologias ágeis
Falhas nos projetos é culpa da Cultura da Empresa e não das metodologias ágeis
 
Virus em Hw
Virus em HwVirus em Hw
Virus em Hw
 
JSF & REST
JSF & RESTJSF & REST
JSF & REST
 
Cloud Computing Apresentacao Uscs Final
Cloud Computing Apresentacao Uscs FinalCloud Computing Apresentacao Uscs Final
Cloud Computing Apresentacao Uscs Final
 
Metodologias Ágeis no Estilo Dr House
Metodologias Ágeis no Estilo Dr HouseMetodologias Ágeis no Estilo Dr House
Metodologias Ágeis no Estilo Dr House
 
Java E O Mercado De Trabalho
Java E O Mercado De TrabalhoJava E O Mercado De Trabalho
Java E O Mercado De Trabalho
 
Agile SCRUM
Agile SCRUMAgile SCRUM
Agile SCRUM
 

Spring MVC - QConSP

  • 1. Vantagens e Desvantagens do Spring MVC @bregaida
  • 3. • JSF • Struts • Spring • WebWork • Mentawai • Play Framework • VRaptor • Click Framework • Demoiselle • JBanana • JBoss Seam • Etc • Neo Framework • Brutos Framework
  • 5. Escolha aquele que atende seu negócio e te deixa confortável.
  • 6. Spring Framework • Criado por Rod Johnson • Framework não intrusivo • Baseado em padrões IoC e Injeção de Dependência • O Container se encarrega de instanciar as classes Java e definir suas dependências • Possui uma arquitetura baseada em POJOs e Interfaces
  • 7. Vantagens • Simples e de fácil aprendizado • Liberdade para trabalhar na View • Integração simples com outros frameworks • Navegação feita por anotações • BindResult e ModelAndView faz todo trabalho nas telas para validação e estado da página • Suporte a várias Views Freemaker, JSP, Velocity • Integração com Hibernate Validator
  • 8. Anotações mais utilizadas • @Repository - Repositório dos dados • @Service - Camada de Serviços • @Qualifier - Qual Bean deverá ser injetado • @Autowired - Injeção dos Beans • @Controller - Camada View • @RequestMapping - Mapeamento do caminho • @RequestParam - Recebimento dos Parametros • @ResponseBody -Suporte a REST • @Valid - Responsável pela validação do parametro ou formulário
  • 9. @Repository @Repository public class ProdutoDao implements ProdutoDaoI { //Aqui código da Classe }
  • 10. @Service @Service public class ProdutoService implements ProdutoServiceI{ //Aqui o código da classe }
  • 12. @Autowired @Service public class ProdutoService implements ProdutoServiceI{ @Autowired private ProdutoDao produtoDao; } @Controller @RequestMapping("/produto/**") public class ProdutoController { @Autowired private ProdutoService produtoService; }
  • 13. @Qualifier import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier;   public class Customer {   " @Autowired " @Qualifier("personA") " private Person person; " //... } Fonte: http://www.mkyong.com/spring/spring-autowiring-qualifier-example/
  • 14. @RequestMapping @Controller @RequestMapping("/produto/**") public class ProdutoController { @RequestMapping("/produto/formulario") public ModelAndView formulario() { return new ModelAndView("formulario").addObject("produtoForm", new ProdutoForm()); } @RequestMapping("/produto/adiciona") public ModelAndView adiciona(@Valid ProdutoForm produtoForm, BindingResult result) { if (result.hasErrors()) { return new ModelAndView("formulario").addAllObjects(result.getModel()); } populaBean(produtoForm); produtoService.salva(produto); return new ModelAndView("lista").addObject("produtos", produtoService.pegaTodos()); } }
  • 15. @RequestParam @RequestMapping(value = "/produto/remove", method = RequestMethod.GET) public ModelAndView remove(@Valid @RequestParam(value = "produto.id") long id) { produto = new Produto(); produto.setId(id); produtoService.remove(produto); return new ModelAndView("lista").addObject("produtos", produtoService.pegaTodos()); }
  • 16. @ResponseBody • Basta incluir os jars Jackson no projeto e será retornado um JSON: • jackson-core-asl-1.4.3.jar • jackson-mapper-asl-1.4.3.jar public @ResponseBody HashMap<String,Object> view(@RequestParam("start") int start, @RequestParam("limit") int limit) { List<Produto> produtos = produtoService.pegaTodos(); HashMap<String, Object> modelMap = new HashMap<String,Object>(); modelMap.put("produtos", produtos); return modelMap; }
  • 17. @ResponseBody Com Nice URL @RequestMapping(value = "/{idParceiro}/{idModalidade}", method = RequestMethod.GET)     @ResponseBody     public Modalidade obtemModalidade(@PathVariable("idParceiro") Long idParceiro, @PathVariable("idModalidade") Long idModalidade, HttpSession sessao){         return modalidadeService.obtemModalidadePorParceiro(idParceiro, idModalidade);     }
  • 18. ModelAndView @RequestMapping("/produto/formulario") public ModelAndView formulario() { return new ModelAndView("formulario").addObject("produtoForm", new ProdutoForm()); } @RequestMapping("/produto/adiciona") public ModelAndView adiciona(@Valid ProdutoForm produtoForm, BindingResult result) { if (result.hasErrors()) { return new ModelAndView("formulario").addAllObjects(result.getModel()); } populaBean(produtoForm); produtoService.salva(produto); return new ModelAndView("lista").addObject("produtos", produtoService.pegaTodos()); }
  • 19. @Valid No Atributo public ModelAndView remove(@Valid @RequestParam(value = "produto.id") long id) { //Código do método } No Formulário @RequestMapping("/produto/adiciona") public ModelAndView adiciona(@Valid ProdutoForm produtoForm, BindingResult result) { if (result.hasErrors()) { return new ModelAndView("formulario").addAllObjects(result.getModel()); } populaBean(produtoForm); produtoService.salva(produto); return new ModelAndView("lista").addObject("produtos", produtoService.pegaTodos()); }
  • 20. BindResult @RequestMapping("/produto/adiciona") public ModelAndView adiciona(@Valid ProdutoForm produtoForm, BindingResult result) { if (result.hasErrors()) { return new ModelAndView("formulario").addAllObjects(result.getModel()); } populaBean(produtoForm); produtoService.salva(produto); return new ModelAndView("lista").addObject("produtos", produtoService.pegaTodos()); }
  • 21. Hibernate Validator import org.hibernate.validator.constraints.NotEmpty; public class ProdutoForm { private Long id; @NotEmpty(message = "Valor não pode ser vazio") private String nome; @NotEmpty(message = "Valor não pode ser vazio") private String descricao; }
  • 27. Desvantagens • Tratar erros como 400, 404, 500 não são simples de tratar • Poucos componentes de tela feitos • Ainda possui configurações em XML ou configurações em classes.
  • 28. Quer saber mais? • http://www.caelum.com.br/curso/fj-27-spring-framework/ • http://www.javawora.blogspot.com • http://www.edsongoncalves.com.br/category/spring-mvc-3-0/ • http://chavesrodolfo.blogspot.com.br/2011/02/anotacoes-do-spring.html • http://valdemarjr.net/2011/02/18/exemplo-spring-mvc-integrado-com-struts- tiles.html • http://static.springsource.org/spring/docs/2.0.x/reference/mvc.html • http://maestric.com/doc/java/spring • http://netbeans.org/kb/docs/web/quickstart-webapps-spring_pt_BR.html • http://www.mkyong.com/spring-mvc/spring-mvc-hello-world-example/ • http://www.mkyong.com/spring/spring-autowiring-qualifier-example/
  • 29. Obrigado! eduardo.bregaida@gmail.com http://javawora.blogspot.com http://www.slideshare.net/eduardo.bregaida @bregaida

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n