O documento discute o padrão MVC com JSP e Servlets, separando as funcionalidades em três camadas: Model, View e Controller. Apresenta também um mini-tutorial sobre como implementar este padrão em um sistema simples de sugestão de cervejas.
Sistema e Requisitos
“Paraque 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
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
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 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 mundodos
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
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
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
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.*;
publicclass 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 oControle
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 devedisponibilizar
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 abola
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 abola
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);
}
}
38.
Como a JSPacessará
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>