SlideShare una empresa de Scribd logo
1 de 22
Descargar para leer sin conexión
Spring Web MVC	
  



                 Eder Magalhães
                   eder@yaw.com.br
                 twitter.com/edermag

       Globalcode	
  –	
  Open4education
Spring Framework para Web

! Spring Web MVC

!   Spring Web Flow

!   Spring Faces

!   Spring JavaScript




                            Globalcode	
  –	
  Open4education
Spring Web MVC

 Flexível e sofisticado framework para
 desenvolvimento de aplicativos Web em
 Java, seguindo a estrutura Model View
 Controller.

 “Open	
  for	
  extension,	
  closed	
  for	
  modifica8on”	
  
 Bob	
  Mar8n,	
  the	
  open-­‐closer	
  principle	
  




                                                          Globalcode	
  –	
  Open4education
Por falar em MVC, camadas...


            Presenta)on	
  

                Web	
  




                              Model	
  
               Service	
  

            Persistence	
  



                                          Globalcode	
  –	
  Open4education
Uma (re)visão sobre MVC




                          Globalcode	
  –	
  Open4education
Features
!     Controllers e Form-Beans são POJOS;
!     Validadores e Conversores;
!     Suporte a IoC / DI (Core Spring);
!     Flexibilidade em Mapping Request + Render Response
!     Arquitetura RESTFull;
!     Suporte a JSR 303;
!     Exception Handling;
!     Favorece Testes;
!     Plugável a outras tecnologias Web;
!     Annotation Driven Development;

                                       Globalcode	
  –	
  Open4education
Demonstração




               Globalcode	
  –	
  Open4education
Criando um Controller
                                   http://<host>/<appcontext>/produtos


@Controller
@RequestMapping("/produtos")
public class ProdutoController {

    @RequestMapping
    public String lista() {
      return "lista";
    }

}

                                   lista.jsp	
  




                                                   Globalcode	
  –	
  Open4education
Mais flexibilidade c/ RequestMapping
                                     http://<host>/<appcontext>/produtos/20
@Controller
@RequestMapping("/produtos")
public class ProdutoController {


    @RequestMapping(value="/{id}",method=RequestMethod.GET)
    public String exibe(@PathVariable("id") Integer id) {
      //...
    }

    @RequestMapping(params = "find=byDesc", method=RequestMethod.GET)
    public String filtraPorDescricao(@RequestParam String desc) {
      //...
    }

}
               http://<host>/<appcontext>/produtos?find=byDesc&desc=Livro



                                                  Globalcode	
  –	
  Open4education
Injeção de Dependência
@Controller
@RequestMapping("/produtos")
public class ProdutoController {

    @Autowire
    private ProdutoService service;

    //...

}



            @Component
            public class ProdutoServiceImpl implements ProdutoService {
              //...
            }



                                                  Globalcode	
  –	
  Open4education
Acessando atributos na Session
@Controller
@RequestMapping("/produtos")
@SessionAttribute("user")
public class ProdutoController {


    @RequestMapping(method=RequestMethod.DELETE)
    public String delete(Long id,
        @ModelAttribute("user") String username) {
      // ...
    }

}




                                                Globalcode	
  –	
  Open4education
Trabalhando com a Request
@Controller
@RequestMapping("/produtos")
public class ProdutoController {

    @RequestMapping("requestValues")
    public String requestValues(HttpServletRequest req,
      Locale locale) {
      //...
    }

}




                                                Globalcode	
  –	
  Open4education
Binding do view com model
@Controller
@RequestMapping("/produtos")
public class ProdutoController {

    @RequestMapping(method=RequestMethod.GET)
    public String formNovoProduto(Model model) {
      model.addAttribute(new Produto());
      return ”novo”;                                                novo.jsp	
  
    }

    @RequestMapping(method=RequestMethod.POST)
    public String salvar(Produto produto) {
      //...
    }

}




                                                   Globalcode	
  –	
  Open4education
Validação
public class Produto {

    @NotEmpty
    private String nome;

    @NumberFormat(pattern="$###,#0")
    private Double preco;
    //...
}

                  public class ProdutoController {

                          @RequestMapping(method=RequestMethod.POST)
                          public String salvar(
                              @Valid Produto p,
                              BindingResult result) {
                            //...
                          }
                  }	
  


                                                     Globalcode	
  –	
  Open4education
RESTful
@Controller
@RequestMapping("/produtos")
public class ProdutoController {

    @RequestMapping(value="atualizar", method=RequestMethod.PUT)
    public String atualizar(Produto produto) { //... }

    @RequestMapping(value="delete", method=RequestMethod.DELETE)
    public String delete(Produto produto) { //... }

}


          //view jsp
          <form:form action=“./produtos/delete“ method="DELETE">
          ...
          </form:form>   //fake	
  



                                                Globalcode	
  –	
  Open4education
Render Response
@Controller
@RequestMapping("/produtos")
public class ProdutoController {

    @RequestMapping(value="/{id}",method=RequestMethod.GET)
    public String exibeProduto(@PathVariable("id") Integer id,
      Model model) {
      //...
      return "produto";
    }

    @RequestMapping(params = "find=byId", method=RequestMethod.GET)
    public @ResponseBody Produto getProdutoPorId(
        @RequestParam Long id) {
      Produto produto = service.findById(id);
      return produto;
    }
}



                                                Globalcode	
  –	
  Open4education
JSON
public class ProdutoController {

    @RequestMapping(value = "/status", method=RequestMethod.GET)
    public @ResponseBody String getStatusProduto(Integer idProd) {
      return service.situacaoEmEstoque(idProd);
    }

}
                 //view jsp usando JQuery
                 function checkStatusProduto() {
                       $.getJSON("produtos/status",
                         { idProd: $('#inputId').val },
                         function (status) {
                           $('#lStat').appendHtml("<h6>"+status+"</h6>");
                         });	
  
                 }	
  



                                                   Globalcode	
  –	
  Open4education
Custom tags <JSP>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s"%>
<%@ taglib uri="http://www.springframework.org/tags/form"
  prefix="form"%>

  ...

  <s:url value="/produtos/novo" var="save_form_url"/>
  <form:form id="form" method="post" action="${save_form_url}"
      modelAttribute="produto" cssClass="cleanform">

      <form:label path="descricao“>Descricao</form:label>
      <form:input path="descricao" />
      ...
  </form:form>

  ...




                                              Globalcode	
  –	
  Open4education
O que mais?
!   @RequestHeader
!   @RequestBody
!   @CookieValue
!   @ExceptionHandler
!   MultipartFile
!   Etags / HttpEntity / ResponseEntity




                                          Globalcode	
  –	
  Open4education
Mais informações
!     http://www.springsource.org/documentation
!     http://static.springsource.org/spring/docs/3.0.x/reference/mvc.html
!     http://blog.springsource.com/2009/03/08/rest-in-spring-3-mvc/
!     http://src.springsource.org/svn/spring-samples/mvc-showcase
!     http://blog.springsource.com/2010/01/25/ajax-simplifications-in-spring-3-0/
!     http://blog.springsource.com/2011/01/04/green-beans-getting-started-with-
spring-mvc/
!   http://blog.globalcode.com.br/search/label/Spring
!   http://www.springbrasil.com.br/



                                                         Globalcode	
  –	
  Open4education
Follow
!   @springrod
!   @kdonald
!   @poutsma
!   @benalexau
!   @youandwe
!   @globalcode




                  Globalcode	
  –	
  Open4education
Obrigado !




                      Eder Magalhães
               eder@yaw.com.br
             twitter.com/edermag

             Globalcode	
  –	
  Open4education

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Vue.js
Vue.jsVue.js
Vue.js
 
Java script aula 09 - JQuery
Java script   aula 09 - JQueryJava script   aula 09 - JQuery
Java script aula 09 - JQuery
 
Java www
Java wwwJava www
Java www
 
Oficina jQuery
Oficina jQueryOficina jQuery
Oficina jQuery
 
JavaScript Model-View no Frontend
JavaScript Model-View no FrontendJavaScript Model-View no Frontend
JavaScript Model-View no Frontend
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Curso de Introdução - PHP Zend Framework
Curso de Introdução - PHP Zend FrameworkCurso de Introdução - PHP Zend Framework
Curso de Introdução - PHP Zend Framework
 
ZF Básico - 3. Quick Start
ZF Básico - 3. Quick StartZF Básico - 3. Quick Start
ZF Básico - 3. Quick Start
 
Backbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosBackbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectados
 
VueJS - Uma alternativa elegante
VueJS - Uma alternativa eleganteVueJS - Uma alternativa elegante
VueJS - Uma alternativa elegante
 
Autenticação com AngularJS e loadOnDemand
Autenticação com AngularJS e loadOnDemandAutenticação com AngularJS e loadOnDemand
Autenticação com AngularJS e loadOnDemand
 
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphere
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphereCriando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphere
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphere
 
AngularJS com loadOnDemand
AngularJS com loadOnDemandAngularJS com loadOnDemand
AngularJS com loadOnDemand
 
Criando serviços com AngularJS
Criando serviços com AngularJSCriando serviços com AngularJS
Criando serviços com AngularJS
 
Java script aula 10 - angularjs
Java script   aula 10 - angularjsJava script   aula 10 - angularjs
Java script aula 10 - angularjs
 
Java script aula 07 - eventos
Java script   aula 07 - eventosJava script   aula 07 - eventos
Java script aula 07 - eventos
 
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
 
Construindo Diretivas com AngularJS
Construindo Diretivas com AngularJSConstruindo Diretivas com AngularJS
Construindo Diretivas com AngularJS
 
LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.js
 
Jquery - Dicas e Truques
Jquery - Dicas e TruquesJquery - Dicas e Truques
Jquery - Dicas e Truques
 

Destacado

Java Spring MVC Framework with AngularJS by Google and HTML5
Java Spring MVC Framework with AngularJS by Google and HTML5Java Spring MVC Framework with AngularJS by Google and HTML5
Java Spring MVC Framework with AngularJS by Google and HTML5
Tuna Tore
 
Back From the Social Future
Back From the Social FutureBack From the Social Future
Back From the Social Future
Stephen Selby
 
Internet ve e posta yönetimi
Internet ve e posta yönetimiInternet ve e posta yönetimi
Internet ve e posta yönetimi
Erol Dizdar
 
Iliad or Seaside
Iliad or SeasideIliad or Seaside
Iliad or Seaside
Sho Yoshida
 
GlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EEGlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EE
Bruno Borges
 
mapserver_install_linux
mapserver_install_linuxmapserver_install_linux
mapserver_install_linux
tutorialsruby
 
Caderno SISP 2012
Caderno SISP 2012Caderno SISP 2012
Caderno SISP 2012
GovBR
 

Destacado (20)

Spring mvc
Spring mvcSpring mvc
Spring mvc
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 
Webinar: Spring Framework - Introduction to Spring WebMVC & Spring with BigData
Webinar: Spring Framework - Introduction to Spring WebMVC & Spring with BigData Webinar: Spring Framework - Introduction to Spring WebMVC & Spring with BigData
Webinar: Spring Framework - Introduction to Spring WebMVC & Spring with BigData
 
Spring MVC - The Basics
Spring MVC -  The BasicsSpring MVC -  The Basics
Spring MVC - The Basics
 
Introduction to Spring MVC
Introduction to Spring MVCIntroduction to Spring MVC
Introduction to Spring MVC
 
Java Spring MVC Framework with AngularJS by Google and HTML5
Java Spring MVC Framework with AngularJS by Google and HTML5Java Spring MVC Framework with AngularJS by Google and HTML5
Java Spring MVC Framework with AngularJS by Google and HTML5
 
Back From the Social Future
Back From the Social FutureBack From the Social Future
Back From the Social Future
 
Planet talent
Planet talentPlanet talent
Planet talent
 
¡This is drupal! - Global Training Days
¡This is drupal! - Global Training Days¡This is drupal! - Global Training Days
¡This is drupal! - Global Training Days
 
Internet ve e posta yönetimi
Internet ve e posta yönetimiInternet ve e posta yönetimi
Internet ve e posta yönetimi
 
Tomcat Maven Plugin
Tomcat Maven PluginTomcat Maven Plugin
Tomcat Maven Plugin
 
Iliad or Seaside
Iliad or SeasideIliad or Seaside
Iliad or Seaside
 
Web service overview
Web service overviewWeb service overview
Web service overview
 
GlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EEGlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EE
 
Bug x tracker
Bug x trackerBug x tracker
Bug x tracker
 
mapserver_install_linux
mapserver_install_linuxmapserver_install_linux
mapserver_install_linux
 
Lean web architecture mit jsf 2.0, cdi & co.
Lean web architecture mit jsf 2.0, cdi & co.Lean web architecture mit jsf 2.0, cdi & co.
Lean web architecture mit jsf 2.0, cdi & co.
 
Caderno SISP 2012
Caderno SISP 2012Caderno SISP 2012
Caderno SISP 2012
 
AngularJS and SPA
AngularJS and SPAAngularJS and SPA
AngularJS and SPA
 
FinistJUG - Apache TomEE
FinistJUG - Apache TomEEFinistJUG - Apache TomEE
FinistJUG - Apache TomEE
 

Similar a Introducao ao Spring Web MVC

Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Framework
elliando dias
 

Similar a Introducao ao Spring Web MVC (20)

Spring MVC - QConSP
Spring MVC - QConSPSpring MVC - QConSP
Spring MVC - QConSP
 
VRaptor4
VRaptor4VRaptor4
VRaptor4
 
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
 
Vraptor
VraptorVraptor
Vraptor
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computing
 
Android na Prática
Android na PráticaAndroid na Prática
Android na Prática
 
JSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com JavaJSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com Java
 
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
 
Desenvolvimento web com VRaptor
Desenvolvimento web com VRaptorDesenvolvimento web com VRaptor
Desenvolvimento web com VRaptor
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Framework
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToys
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToys
 
O Aduino ama a Internet - TDC 2012
O Aduino ama a Internet - TDC 2012O Aduino ama a Internet - TDC 2012
O Aduino ama a Internet - TDC 2012
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?
 
Construindo portlets para IBM WebSphere Portal – Parte 2
Construindo portlets para IBM WebSphere Portal – Parte 2Construindo portlets para IBM WebSphere Portal – Parte 2
Construindo portlets para IBM WebSphere Portal – Parte 2
 
Lidando com desafios dos microserviços com a stack Spring Cloud Netflix
Lidando com desafios dos microserviços com a stack Spring Cloud NetflixLidando com desafios dos microserviços com a stack Spring Cloud Netflix
Lidando com desafios dos microserviços com a stack Spring Cloud Netflix
 
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesJSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
 
Desenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkDesenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana framework
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
 
Angular js
Angular jsAngular js
Angular js
 

Más de Eder Magalhães

Richfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais ricoRichfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais rico
Eder Magalhães
 

Más de Eder Magalhães (20)

Cvc programacao reativa
Cvc programacao reativaCvc programacao reativa
Cvc programacao reativa
 
Concorrencia, baixa Latência e alta disponibilidade
Concorrencia, baixa Latência e alta disponibilidadeConcorrencia, baixa Latência e alta disponibilidade
Concorrencia, baixa Latência e alta disponibilidade
 
Java Is Back, Novidade do Java 8
Java Is Back, Novidade do Java 8Java Is Back, Novidade do Java 8
Java Is Back, Novidade do Java 8
 
Desenvolva uma app Java web em poucos passos, com o Forge
Desenvolva uma app Java web em poucos passos, com o ForgeDesenvolva uma app Java web em poucos passos, com o Forge
Desenvolva uma app Java web em poucos passos, com o Forge
 
MongoDB outras alternativas de persistência
MongoDB outras alternativas de persistênciaMongoDB outras alternativas de persistência
MongoDB outras alternativas de persistência
 
Java e uma visão sobre PaaS
Java e uma visão sobre PaaSJava e uma visão sobre PaaS
Java e uma visão sobre PaaS
 
JDK8: Lambda, Jigsaw e novidades
JDK8: Lambda, Jigsaw e novidadesJDK8: Lambda, Jigsaw e novidades
JDK8: Lambda, Jigsaw e novidades
 
Introdução a Plataforma Java EE
Introdução a Plataforma Java EEIntrodução a Plataforma Java EE
Introdução a Plataforma Java EE
 
As modificações na Linguagem: Java 7 e Java 8
As modificações na Linguagem: Java 7 e Java 8As modificações na Linguagem: Java 7 e Java 8
As modificações na Linguagem: Java 7 e Java 8
 
Desenvolvimento Produtivo com Spring Roo
Desenvolvimento Produtivo com Spring RooDesenvolvimento Produtivo com Spring Roo
Desenvolvimento Produtivo com Spring Roo
 
Futuro da linguagem e plataforma: Java 7 e 8
Futuro da linguagem e plataforma: Java 7 e 8Futuro da linguagem e plataforma: Java 7 e 8
Futuro da linguagem e plataforma: Java 7 e 8
 
Arquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineArquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App Engine
 
Java7 tdc2011
Java7 tdc2011Java7 tdc2011
Java7 tdc2011
 
Richfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais ricoRichfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais rico
 
JSF 2 Components JustJava2011
JSF 2 Components JustJava2011JSF 2 Components JustJava2011
JSF 2 Components JustJava2011
 
Introducao Spring ROO
Introducao Spring ROOIntroducao Spring ROO
Introducao Spring ROO
 
Introducao Google GO
Introducao Google GOIntroducao Google GO
Introducao Google GO
 
JavaFX: Abordagem Prática
JavaFX: Abordagem PráticaJavaFX: Abordagem Prática
JavaFX: Abordagem Prática
 
Desenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringDesenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e Spring
 
Profissao java gwt e javafx
Profissao java gwt e javafxProfissao java gwt e javafx
Profissao java gwt e javafx
 

Último

Último (9)

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
 
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 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 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
 
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
 
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
 
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
 
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
 

Introducao ao Spring Web MVC

  • 1. Spring Web MVC   Eder Magalhães eder@yaw.com.br twitter.com/edermag Globalcode  –  Open4education
  • 2. Spring Framework para Web ! Spring Web MVC !   Spring Web Flow !   Spring Faces !   Spring JavaScript Globalcode  –  Open4education
  • 3. Spring Web MVC Flexível e sofisticado framework para desenvolvimento de aplicativos Web em Java, seguindo a estrutura Model View Controller. “Open  for  extension,  closed  for  modifica8on”   Bob  Mar8n,  the  open-­‐closer  principle   Globalcode  –  Open4education
  • 4. Por falar em MVC, camadas... Presenta)on   Web   Model   Service   Persistence   Globalcode  –  Open4education
  • 5. Uma (re)visão sobre MVC Globalcode  –  Open4education
  • 6. Features !   Controllers e Form-Beans são POJOS; !   Validadores e Conversores; !   Suporte a IoC / DI (Core Spring); !   Flexibilidade em Mapping Request + Render Response !   Arquitetura RESTFull; !   Suporte a JSR 303; !   Exception Handling; !   Favorece Testes; !   Plugável a outras tecnologias Web; !   Annotation Driven Development; Globalcode  –  Open4education
  • 7. Demonstração Globalcode  –  Open4education
  • 8. Criando um Controller http://<host>/<appcontext>/produtos @Controller @RequestMapping("/produtos") public class ProdutoController { @RequestMapping public String lista() { return "lista"; } } lista.jsp   Globalcode  –  Open4education
  • 9. Mais flexibilidade c/ RequestMapping http://<host>/<appcontext>/produtos/20 @Controller @RequestMapping("/produtos") public class ProdutoController { @RequestMapping(value="/{id}",method=RequestMethod.GET) public String exibe(@PathVariable("id") Integer id) { //... } @RequestMapping(params = "find=byDesc", method=RequestMethod.GET) public String filtraPorDescricao(@RequestParam String desc) { //... } } http://<host>/<appcontext>/produtos?find=byDesc&desc=Livro Globalcode  –  Open4education
  • 10. Injeção de Dependência @Controller @RequestMapping("/produtos") public class ProdutoController { @Autowire private ProdutoService service; //... } @Component public class ProdutoServiceImpl implements ProdutoService { //... } Globalcode  –  Open4education
  • 11. Acessando atributos na Session @Controller @RequestMapping("/produtos") @SessionAttribute("user") public class ProdutoController { @RequestMapping(method=RequestMethod.DELETE) public String delete(Long id, @ModelAttribute("user") String username) { // ... } } Globalcode  –  Open4education
  • 12. Trabalhando com a Request @Controller @RequestMapping("/produtos") public class ProdutoController { @RequestMapping("requestValues") public String requestValues(HttpServletRequest req, Locale locale) { //... } } Globalcode  –  Open4education
  • 13. Binding do view com model @Controller @RequestMapping("/produtos") public class ProdutoController { @RequestMapping(method=RequestMethod.GET) public String formNovoProduto(Model model) { model.addAttribute(new Produto()); return ”novo”; novo.jsp   } @RequestMapping(method=RequestMethod.POST) public String salvar(Produto produto) { //... } } Globalcode  –  Open4education
  • 14. Validação public class Produto { @NotEmpty private String nome; @NumberFormat(pattern="$###,#0") private Double preco; //... } public class ProdutoController { @RequestMapping(method=RequestMethod.POST) public String salvar( @Valid Produto p, BindingResult result) { //... } }   Globalcode  –  Open4education
  • 15. RESTful @Controller @RequestMapping("/produtos") public class ProdutoController { @RequestMapping(value="atualizar", method=RequestMethod.PUT) public String atualizar(Produto produto) { //... } @RequestMapping(value="delete", method=RequestMethod.DELETE) public String delete(Produto produto) { //... } } //view jsp <form:form action=“./produtos/delete“ method="DELETE"> ... </form:form> //fake   Globalcode  –  Open4education
  • 16. Render Response @Controller @RequestMapping("/produtos") public class ProdutoController { @RequestMapping(value="/{id}",method=RequestMethod.GET) public String exibeProduto(@PathVariable("id") Integer id, Model model) { //... return "produto"; } @RequestMapping(params = "find=byId", method=RequestMethod.GET) public @ResponseBody Produto getProdutoPorId( @RequestParam Long id) { Produto produto = service.findById(id); return produto; } } Globalcode  –  Open4education
  • 17. JSON public class ProdutoController { @RequestMapping(value = "/status", method=RequestMethod.GET) public @ResponseBody String getStatusProduto(Integer idProd) { return service.situacaoEmEstoque(idProd); } } //view jsp usando JQuery function checkStatusProduto() { $.getJSON("produtos/status", { idProd: $('#inputId').val }, function (status) { $('#lStat').appendHtml("<h6>"+status+"</h6>"); });   }   Globalcode  –  Open4education
  • 18. Custom tags <JSP> <%@ taglib uri="http://www.springframework.org/tags" prefix="s"%> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> ... <s:url value="/produtos/novo" var="save_form_url"/> <form:form id="form" method="post" action="${save_form_url}" modelAttribute="produto" cssClass="cleanform"> <form:label path="descricao“>Descricao</form:label> <form:input path="descricao" /> ... </form:form> ... Globalcode  –  Open4education
  • 19. O que mais? !   @RequestHeader !   @RequestBody !   @CookieValue !   @ExceptionHandler !   MultipartFile !   Etags / HttpEntity / ResponseEntity Globalcode  –  Open4education
  • 20. Mais informações !   http://www.springsource.org/documentation !   http://static.springsource.org/spring/docs/3.0.x/reference/mvc.html !   http://blog.springsource.com/2009/03/08/rest-in-spring-3-mvc/ !   http://src.springsource.org/svn/spring-samples/mvc-showcase !   http://blog.springsource.com/2010/01/25/ajax-simplifications-in-spring-3-0/ !   http://blog.springsource.com/2011/01/04/green-beans-getting-started-with- spring-mvc/ !   http://blog.globalcode.com.br/search/label/Spring !   http://www.springbrasil.com.br/ Globalcode  –  Open4education
  • 21. Follow !   @springrod !   @kdonald !   @poutsma !   @benalexau !   @youandwe !   @globalcode Globalcode  –  Open4education
  • 22. Obrigado ! Eder Magalhães eder@yaw.com.br twitter.com/edermag Globalcode  –  Open4education