View
12.090
Download
2
Category
Preview:
Citation preview
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>
Recommended