Java Web - MVC básico com JSP e Servlets

Post on 25-May-2015

12.090 views 2 download

Transcript of Java Web - MVC básico com JSP e Servlets

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

Recuperação De Dados

Regras de Negócios

Interface

Funcionalidades Acopladas Problemática

Interface

Recuperação De Dados

Regras de Negócios

Sistemas

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

  Nunca se deve assumir que uma lógica de negócios somente será acessada por uma aplicação web

Lógica  de  Negócios   Apresentação  

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

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 Servlets e JSPs

VIEW (Visão) 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

CONTROLLER (Controlador) Recupera a entrada do usuário a partir da requisição e o traduz para o modelo. Diz ao modelo para se atualizar e disponibiliza um novo estado para a visão

MODEL (Modelo)

Guarda a lógica e o estado do negócio. Conhece as regras para recuperar

e alterar o estado. É a parte do sistema

que interage com a base de dados

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  nós  usamos    

um  setA0ribute(),  então...  

Atcha, tcha, tcha, tcha!!! Deve ser com um

getAttribute() , 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>