SlideShare une entreprise Scribd logo
1  sur  40
Télécharger pour lire hors ligne
JSP & Servlets
Padrão MVC com JSP e Servlets
Por que este modelo
         não vingou?
Sistema e Requisitos

“Para que um sistema de informação
  alcance o objetivo para o qual foi
 desenvolvido deve satisfazer certos
        interesses específicos
          – os requisitos –
    sejam eles funcionais ou não
              funcionais”
Tipos de Requisitos
    Interface

    Recuperação de Dados

    Regras de Negócio

    Orientação a Objeto
       Modelagem
O que ocorre se requisitos
     estiverem acoplados?
Requisitos Acoplados
Requisitos Acoplados
                               Problemática
    Dificuldade de Manutenção
       Ex: Se o video queimar, tem que
        colocar tudo no conserto
    Difícil Evolução
           Interface



       Recuperação
        De Dados


          Regras de
          Negócios
Funcionalidades Acopladas
                       Problemática

    Interface




Recuperação                Sistemas
 De Dados



   Regras de
   Negócios
Separação de Interesses (SoC)
    Melhor maneira de criar sistemas
     gerenciáveis
        Separação de interesses, Parnas (1972)

        Modularização



    Por quê?
        Ex: Não se pode assumir que uma lógica
         de negócios somente será acessada por
         uma única interface
        Requisitos sempre mudam
O que é um
padrão de projeto?
O padrão Model-View-Controller

    Como os Requisitos sempre mudam
        é melhor que ocorra a
         separação da lógica de negócios da
         apresentação

               Lógica	
  
                                   Apresentação	
  
          de	
  Negócios	
  

         Nunca se deve assumir que uma lógica de
          negócios somente será acessada por uma
          aplicação web
O padrão Model-View-Controller

    Modelo
       Representa a lógica do negócio

       Aloja as entidades da aplicação

       Pode interagir com a base de dados



    Visão
       Responsável por exibir as informações ao
        usuário

    Controle
        Faz o meio de campo                  12
O padrão Model-View-Controller

    JSP e Servlets SEM MVC
       Podemos considerar como o nosso primeiro
        exemplo de Servlet
       Tudo estava no Servlet
O padrão Model-View-Controller

    JSP e Servlets com MVC

         MVC retira a lógica de negócios e a interface de
          dentro dos servlets,

         e põe em 2 camadas, a Modelo, usando classes
          Java simples e a Visão, com JSPs,
          respectivamente

         Os servlets atuarão como a camada de Controle
MVC no mundo dos
   CONTROLLER (Controlador)          Servlets e JSPs
   Recupera a entrada do usuário
   a partir da requisição
   e o traduz para o modelo.                      MODEL (Modelo)
   Diz ao modelo para se
   atualizar e disponibiliza             Guarda a lógica e o estado
   um novo estado para a visão              do negócio. Conhece as
                                            regras para recuperar
                                                e alterar o estado.
                                              É a parte do sistema
VIEW (Visão)                                      que interage com
                                                   a base de dados
Responsável pela
apresentação. Recupera
o estado do modelo
através do controle.
Também obtém a
entrada do usuário
e repassa para o
controle
Mini Tutorial
Mini Tutorial

    3 passos
        Estabeler a visão de usuário e uma arquitetura
         de alto nível



         Criar as classes no Eclipse



         Executar desenvolvimentos e testes iterativos
Visão do usuário
Sugestões de cervejas
O Html



    Crie 1 HTML na pasta WebContent do projeto
O HTML
<html>
<body>
<h1>Seleção de Cervejas</h1>
<form method="post“ action="SelecionarCerveja.do">

 <p> Selecione as características da cerveja</p>
  Cor:
  <select name="cor" size="1">
    <option>Clara</option>
    <option>Translucida</option>
    <option>Marron</option>
    <option>Escura</option>
  </select>
  <br/><br/>
  <p>
   <input type="submit“/>
  </p>
</form>
</body>
</html>
O Html
    Salve o HTML

    Inicie o tomcat no Eclipse

    Teste a página
       http://localhost:8080/cervejaria/form.html
O SERVLET
Criar o
                                                    Servlet
    getParameter(“nomeDoParametro”):String
        Método do HttpServletRequest

        Informe o nome de um parâmetro vindo de uma

         requisição
            E obtenha o valor(String) que o usuário informou

 No HTML (Visão)


                             No Servlet (Controle
Criar o
                                                  Servlet
public class SelecaoCerveja extends HttpServlet {
  public void doPost(HttpServletRequest request,
                  HttpServletResponse response)
      throws IOException {

        response.setContentType(“text/html”);
        PrintWriter out = response.getWriter();

        String c = request.getParameter(“cor”);

        out.println(“<h1>Cervejas sugeridas</h1><br/>”);
        out.println(“<br/>Voce escolheu a cor ” + c);
    }
}
Editar o
                        Deployment Descriptor
Mapeie o servlet
    Escolha um nome lógico

    Servlet-class

           br.com.exemplo.web.SelecaoCerveja
      Url
           /SelecionarCerveja.do
Testar
    Iniciar o Tomcat

    Teste a página
       http://localhost:8080/curso/form.html



    Selecione uma cor e clique em Enviar
O MODELO
Construir
                                                o Modelo
    Pacote
        br.com.exemplo.model

        A classe de modelo deve possuir um método

         getMarcas()
            Recebe uma cor e retorna uma lista de marcas
CervejaExpert.java
package br.com.exemplo.model;
import java.util.*;

public class CervejaExpert {
  public List<String> getMarcas(String cor) {
    List marcas = new ArrayList<String>();
    if (cor.equals(“Clara”)) {
      marcas.add(“Antarctica”);
      marcas.add(“Brahma”);
    } else {
       marcas.add(“Bohemia”);
       marcas.add(“Original”);
    }
    return marcas;
  }
}
Como fazer o Controle
   acessar o Modelo?
Como fazer o Controle
       acessar o Modelo?


   Instancie a classe
CervejaExpert no Servlet
Servlet
                                             Versão 2
public class SelecaoCerveja extends HttpServlet {
  public void doPost(HttpServletRequest request,
                  HttpServletResponse response)
      throws IOException {
    response.setContentType(“text/html”);
    PrintWriter out = response.getWriter();
    String c = request.getParameter(“cor”);
    out.println(“<h1>Cervejas sugeridas</h1><br/>”);

        CervejaExpert ce = new CervejaExpert();
        List<String> resultado = ce.getMarcas(c);
        Iterator it = resultado.iterator();
        while(it.hasNext()) {
          out.println(“<br/>Experimente ” + it.next());
        }
    }
}
O servlet deve disponibilizar
                um valor na requisição
    setAttribute(“nomeDoAtributo”, valor)
        Método do HttpRequest

        Configure um objeto como um atributo

              para ser recuperado através de um nome


         Obs:
              Esse valor será acessado pela JSP (passo 6)
Servlet prepara a bola
                             para a JSP
    getRequestDispatcher(“pagina.jsp”): RequestDispatcher
       Método do HttpRequest
       Configura um objeto capaz de redirecionar o
        fluxo da aplicação para uma JSP
Servlet passa a bola
                             para a JSP
    forward(request, response)
        Método do RequestDispatcher

        Redireciona o fluxo
Servlet
                                              Versão 3
public class SelecaoCerveja extends HttpServlet {
  public void doPost(HttpServletRequest request,
                  HttpServletResponse response)
      throws IOException {

        String c = request.getParameter(“cor”);

        CervejaExpert ce = new CervejaExpert();
        List resultado= ce.getMarcas(c);
        request.setAttribute(“marcas”, resultado);

        RequestDispatcher rd =
           request.getRequestDispatcher(“resultado.jsp”);

        rd.forward(request,response);
    }
}
Como a JSP acessará
                o atributo na requisição?
  Se  no  Servlet             Atcha, tcha, tcha, tcha!!!
   nós  usamos                   Deve ser com um
um  setA0ribute(),              getAttribute() ,
       então...              passando o nome do atributo
getAttribute(“nomeDoAtributo”)
    Método do HttpRequest
       Recupera um objeto como um atributo
        disponível na requisição
            através de um nome
Jsp como View
                              resultado.jsp
<%@ page import=“java.util” %>
<html>
<body>
<h1>Selecao de Cervejas</h1>
<p>
<%
   List marcas =
     (List) request.getAttribute(“marcas”);
   Iterator it = marcas.iterator();
   while (it.hasNext()) {
     out.println(“<br>Experimente: ” + it.next());
   }
%>
</body>
</html>

Contenu connexe

Tendances

Introduction to Struts 1.3
Introduction to Struts 1.3Introduction to Struts 1.3
Introduction to Struts 1.3Ilio Catallo
 
Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos JavaMarcio Marinho
 
Aula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaAula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaDaniel Brandão
 
Threads 10: CompletableFuture
Threads 10: CompletableFutureThreads 10: CompletableFuture
Threads 10: CompletableFutureHelder da Rocha
 
java programming - applets
java programming - appletsjava programming - applets
java programming - appletsHarshithaAllu
 
Modelos osi tcpip
Modelos osi tcpipModelos osi tcpip
Modelos osi tcpipSuguha
 
Aula 04 PHP - Utilizando Funções e Manipulando Arquivos
Aula 04 PHP - Utilizando Funções e Manipulando ArquivosAula 04 PHP - Utilizando Funções e Manipulando Arquivos
Aula 04 PHP - Utilizando Funções e Manipulando ArquivosDaniel Brandão
 
Apresentação HTML e CSS
Apresentação HTML e CSSApresentação HTML e CSS
Apresentação HTML e CSSledsifes
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Lambda Expressions in Java 8
Lambda Expressions in Java 8Lambda Expressions in Java 8
Lambda Expressions in Java 8icarter09
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em pythonAlvaro Oliveira
 
Java Lambda Expressions.pptx
Java Lambda Expressions.pptxJava Lambda Expressions.pptx
Java Lambda Expressions.pptxSameerAhmed593310
 
Exercícios - Herança - Java
Exercícios - Herança - JavaExercícios - Herança - Java
Exercícios - Herança - JavaArthur Emanuel
 
String and string buffer
String and string bufferString and string buffer
String and string bufferkamal kotecha
 
Javascript (parte 1)
Javascript (parte 1)Javascript (parte 1)
Javascript (parte 1)Alex Camargo
 

Tendances (20)

Introduction to Struts 1.3
Introduction to Struts 1.3Introduction to Struts 1.3
Introduction to Struts 1.3
 
Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos Java
 
Aula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaAula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem Java
 
Threads 10: CompletableFuture
Threads 10: CompletableFutureThreads 10: CompletableFuture
Threads 10: CompletableFuture
 
Linguagem Java
Linguagem JavaLinguagem Java
Linguagem Java
 
java programming - applets
java programming - appletsjava programming - applets
java programming - applets
 
JAVA - Herança
JAVA - HerançaJAVA - Herança
JAVA - Herança
 
Modelos osi tcpip
Modelos osi tcpipModelos osi tcpip
Modelos osi tcpip
 
Aula 04 PHP - Utilizando Funções e Manipulando Arquivos
Aula 04 PHP - Utilizando Funções e Manipulando ArquivosAula 04 PHP - Utilizando Funções e Manipulando Arquivos
Aula 04 PHP - Utilizando Funções e Manipulando Arquivos
 
Threads 09: Paralelismo
Threads 09: ParalelismoThreads 09: Paralelismo
Threads 09: Paralelismo
 
Apresentação HTML e CSS
Apresentação HTML e CSSApresentação HTML e CSS
Apresentação HTML e CSS
 
Recursividade
RecursividadeRecursividade
Recursividade
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Lambda Expressions in Java 8
Lambda Expressions in Java 8Lambda Expressions in Java 8
Lambda Expressions in Java 8
 
Curso de Java: Threads
Curso de Java: ThreadsCurso de Java: Threads
Curso de Java: Threads
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
 
Java Lambda Expressions.pptx
Java Lambda Expressions.pptxJava Lambda Expressions.pptx
Java Lambda Expressions.pptx
 
Exercícios - Herança - Java
Exercícios - Herança - JavaExercícios - Herança - Java
Exercícios - Herança - Java
 
String and string buffer
String and string bufferString and string buffer
String and string buffer
 
Javascript (parte 1)
Javascript (parte 1)Javascript (parte 1)
Javascript (parte 1)
 

Similaire à JSP e Servlets com MVC

Similaire à JSP e Servlets com MVC (20)

Servlets
ServletsServlets
Servlets
 
ApresentaçãO Mvc
ApresentaçãO MvcApresentaçãO Mvc
ApresentaçãO Mvc
 
Apresentação M V C
Apresentação M V CApresentação M V C
Apresentação M V C
 
[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
 
Curso de Servlets
Curso de ServletsCurso de Servlets
Curso de Servlets
 
Apresentação Java Web Si Ufc Quixadá - MVC
Apresentação Java Web Si Ufc Quixadá - MVCApresentação Java Web Si Ufc Quixadá - MVC
Apresentação Java Web Si Ufc Quixadá - MVC
 
ASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre TarifaASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre Tarifa
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Trabalho ProgramaçãO Comercial Ii
Trabalho ProgramaçãO Comercial IiTrabalho ProgramaçãO Comercial Ii
Trabalho ProgramaçãO Comercial Ii
 
servlet-introducao
servlet-introducaoservlet-introducao
servlet-introducao
 
Java13
Java13Java13
Java13
 
Prog web 08-php-mvc
Prog web 08-php-mvcProg web 08-php-mvc
Prog web 08-php-mvc
 
JavaScript Model-View no Frontend
JavaScript Model-View no FrontendJavaScript Model-View no Frontend
JavaScript Model-View no Frontend
 
Http Servlet
Http ServletHttp Servlet
Http Servlet
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
 
365on Lab - Asp.Net MVC
365on Lab - Asp.Net MVC365on Lab - Asp.Net MVC
365on Lab - Asp.Net MVC
 
Padrões de Projeto J2EE para Aplicações Web
Padrões de Projeto J2EE para Aplicações WebPadrões de Projeto J2EE para Aplicações Web
Padrões de Projeto J2EE para Aplicações Web
 
Mvc model view controller - java para desenvolvimento web
Mvc   model view controller - java para desenvolvimento webMvc   model view controller - java para desenvolvimento web
Mvc model view controller - java para desenvolvimento web
 
Palestra ASP.NET MVC
Palestra ASP.NET MVCPalestra ASP.NET MVC
Palestra ASP.NET MVC
 
Curso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web ApplicationCurso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web Application
 

Plus de Eduardo Mendes

JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosEduardo Mendes
 
Angular JS - Fundamentos
Angular JS - FundamentosAngular JS - Fundamentos
Angular JS - FundamentosEduardo Mendes
 
Singleton - Padrão de Projeto
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de ProjetoEduardo Mendes
 
Introdução à Internet, Http e HTML
Introdução à Internet, Http e HTMLIntrodução à Internet, Http e HTML
Introdução à Internet, Http e HTMLEduardo Mendes
 
Estimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEstimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEduardo Mendes
 
Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Eduardo Mendes
 
Validações no Ruby on Rails
Validações no Ruby on Rails Validações no Ruby on Rails
Validações no Ruby on Rails Eduardo Mendes
 
Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Eduardo Mendes
 

Plus de Eduardo Mendes (20)

JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a Objetos
 
AngularJS - Rotas
AngularJS - RotasAngularJS - Rotas
AngularJS - Rotas
 
Angular JS - Fundamentos
Angular JS - FundamentosAngular JS - Fundamentos
Angular JS - Fundamentos
 
Singleton - Padrão de Projeto
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de Projeto
 
Layout Fluido
Layout FluidoLayout Fluido
Layout Fluido
 
Web Design Responsivo
Web Design ResponsivoWeb Design Responsivo
Web Design Responsivo
 
Html - Aula 4
Html - Aula 4Html - Aula 4
Html - Aula 4
 
Html - Aula 3
Html - Aula 3Html - Aula 3
Html - Aula 3
 
Introdução à Internet, Http e HTML
Introdução à Internet, Http e HTMLIntrodução à Internet, Http e HTML
Introdução à Internet, Http e HTML
 
ExtJS-4
ExtJS-4ExtJS-4
ExtJS-4
 
Jquery 2
Jquery 2Jquery 2
Jquery 2
 
Jquery
JqueryJquery
Jquery
 
Estimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEstimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de Software
 
Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2
 
Validações no Ruby on Rails
Validações no Ruby on Rails Validações no Ruby on Rails
Validações no Ruby on Rails
 
Padrão Iterator
Padrão IteratorPadrão Iterator
Padrão Iterator
 
Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)
 
Padrão Command
Padrão CommandPadrão Command
Padrão Command
 
Padrão Fachada
Padrão FachadaPadrão Fachada
Padrão Fachada
 
Padrão Adapter
Padrão AdapterPadrão Adapter
Padrão Adapter
 

JSP e Servlets com MVC

  • 1. JSP & Servlets Padrão MVC com JSP e Servlets
  • 2. Por que este modelo não vingou?
  • 3. Sistema e Requisitos “Para que um sistema de informação alcance o objetivo para o qual foi desenvolvido deve satisfazer certos interesses específicos – os requisitos – sejam eles funcionais ou não funcionais”
  • 4. Tipos de Requisitos   Interface   Recuperação de Dados   Regras de Negócio   Orientação a Objeto   Modelagem
  • 5. O que ocorre se requisitos estiverem acoplados?
  • 7. Requisitos Acoplados Problemática   Dificuldade de Manutenção   Ex: Se o video queimar, tem que colocar tudo no conserto   Difícil Evolução Interface Recuperação De Dados Regras de Negócios
  • 8. Funcionalidades Acopladas Problemática Interface Recuperação Sistemas De Dados Regras de Negócios
  • 9. Separação de Interesses (SoC)   Melhor maneira de criar sistemas gerenciáveis   Separação de interesses, Parnas (1972)   Modularização   Por quê?   Ex: Não se pode assumir que uma lógica de negócios somente será acessada por uma única interface   Requisitos sempre mudam
  • 10. O que é um padrão de projeto?
  • 11. O padrão Model-View-Controller   Como os Requisitos sempre mudam   é melhor que ocorra a separação da lógica de negócios da apresentação Lógica   Apresentação   de  Negócios     Nunca se deve assumir que uma lógica de negócios somente será acessada por uma aplicação web
  • 12. O padrão Model-View-Controller   Modelo   Representa a lógica do negócio   Aloja as entidades da aplicação   Pode interagir com a base de dados   Visão   Responsável por exibir as informações ao usuário   Controle   Faz o meio de campo 12
  • 13. O padrão Model-View-Controller   JSP e Servlets SEM MVC   Podemos considerar como o nosso primeiro exemplo de Servlet   Tudo estava no Servlet
  • 14. O padrão Model-View-Controller   JSP e Servlets com MVC   MVC retira a lógica de negócios e a interface de dentro dos servlets,   e põe em 2 camadas, a Modelo, usando classes Java simples e a Visão, com JSPs, respectivamente   Os servlets atuarão como a camada de Controle
  • 15. MVC no mundo dos CONTROLLER (Controlador) Servlets e JSPs Recupera a entrada do usuário a partir da requisição e o traduz para o modelo. MODEL (Modelo) Diz ao modelo para se atualizar e disponibiliza Guarda a lógica e o estado um novo estado para a visão do negócio. Conhece as regras para recuperar e alterar o estado. É a parte do sistema VIEW (Visão) que interage com a base de dados Responsável pela apresentação. Recupera o estado do modelo através do controle. Também obtém a entrada do usuário e repassa para o controle
  • 17. Mini Tutorial   3 passos   Estabeler a visão de usuário e uma arquitetura de alto nível   Criar as classes no Eclipse   Executar desenvolvimentos e testes iterativos
  • 19. O Html   Crie 1 HTML na pasta WebContent do projeto
  • 20. O HTML <html> <body> <h1>Seleção de Cervejas</h1> <form method="post“ action="SelecionarCerveja.do"> <p> Selecione as características da cerveja</p> Cor: <select name="cor" size="1"> <option>Clara</option> <option>Translucida</option> <option>Marron</option> <option>Escura</option> </select> <br/><br/> <p> <input type="submit“/> </p> </form> </body> </html>
  • 21. O Html   Salve o HTML   Inicie o tomcat no Eclipse   Teste a página   http://localhost:8080/cervejaria/form.html
  • 23. Criar o Servlet   getParameter(“nomeDoParametro”):String   Método do HttpServletRequest   Informe o nome de um parâmetro vindo de uma requisição   E obtenha o valor(String) que o usuário informou No HTML (Visão) No Servlet (Controle
  • 24. Criar o Servlet public class SelecaoCerveja extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType(“text/html”); PrintWriter out = response.getWriter(); String c = request.getParameter(“cor”); out.println(“<h1>Cervejas sugeridas</h1><br/>”); out.println(“<br/>Voce escolheu a cor ” + c); } }
  • 25. Editar o Deployment Descriptor Mapeie o servlet   Escolha um nome lógico   Servlet-class   br.com.exemplo.web.SelecaoCerveja   Url   /SelecionarCerveja.do
  • 26. Testar   Iniciar o Tomcat   Teste a página   http://localhost:8080/curso/form.html   Selecione uma cor e clique em Enviar
  • 28. Construir o Modelo   Pacote   br.com.exemplo.model   A classe de modelo deve possuir um método getMarcas()   Recebe uma cor e retorna uma lista de marcas
  • 29. CervejaExpert.java package br.com.exemplo.model; import java.util.*; public class CervejaExpert { public List<String> getMarcas(String cor) { List marcas = new ArrayList<String>(); if (cor.equals(“Clara”)) { marcas.add(“Antarctica”); marcas.add(“Brahma”); } else { marcas.add(“Bohemia”); marcas.add(“Original”); } return marcas; } }
  • 30. Como fazer o Controle acessar o Modelo?
  • 31. Como fazer o Controle acessar o Modelo? Instancie a classe CervejaExpert no Servlet
  • 32. Servlet Versão 2 public class SelecaoCerveja extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType(“text/html”); PrintWriter out = response.getWriter(); String c = request.getParameter(“cor”); out.println(“<h1>Cervejas sugeridas</h1><br/>”); CervejaExpert ce = new CervejaExpert(); List<String> resultado = ce.getMarcas(c); Iterator it = resultado.iterator(); while(it.hasNext()) { out.println(“<br/>Experimente ” + it.next()); } } }
  • 33. O servlet deve disponibilizar um valor na requisição   setAttribute(“nomeDoAtributo”, valor)   Método do HttpRequest   Configure um objeto como um atributo   para ser recuperado através de um nome   Obs:   Esse valor será acessado pela JSP (passo 6)
  • 34. Servlet prepara a bola para a JSP   getRequestDispatcher(“pagina.jsp”): RequestDispatcher   Método do HttpRequest   Configura um objeto capaz de redirecionar o fluxo da aplicação para uma JSP
  • 35. Servlet passa a bola para a JSP   forward(request, response)   Método do RequestDispatcher   Redireciona o fluxo
  • 36. Servlet Versão 3 public class SelecaoCerveja extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { String c = request.getParameter(“cor”); CervejaExpert ce = new CervejaExpert(); List resultado= ce.getMarcas(c); request.setAttribute(“marcas”, resultado); RequestDispatcher rd = request.getRequestDispatcher(“resultado.jsp”); rd.forward(request,response); } }
  • 37.
  • 38. Como a JSP acessará o atributo na requisição? Se  no  Servlet   Atcha, tcha, tcha, tcha!!! nós  usamos     Deve ser com um um  setA0ribute(),   getAttribute() , então...   passando o nome do atributo
  • 39. getAttribute(“nomeDoAtributo”)   Método do HttpRequest   Recupera um objeto como um atributo disponível na requisição   através de um nome
  • 40. Jsp como View resultado.jsp <%@ page import=“java.util” %> <html> <body> <h1>Selecao de Cervejas</h1> <p> <% List marcas = (List) request.getAttribute(“marcas”); Iterator it = marcas.iterator(); while (it.hasNext()) { out.println(“<br>Experimente: ” + it.next()); } %> </body> </html>