Quando as
aplicações misturam códigos de apresentação, de acesso a dados e de lógica ou
regra de negócios, tornam-se difíceis de manter. Primeiro por que a
interdependência dos componentes faz com que alterações no código se propaguem
como ondas; segundo, por que o forte acomplamento torna difícil ou impossivel a
reutilização das classes; terceiro, por que a adição de novas views requer
reimplementação ou CTRL+C e CTRL+V de lógica de negócios, o que também acontece
com o código de acesso aos dados. A solução? Separá-los em "camadas".
E separar
códigos em camada é a motivação da arquitetura Model-View-Controller (MVC).
Como conseqüências de sua aplicação, temos maior reúso de componentes e suporte
a novos clientes (HTML, WML, JFC/Swing, Web service). Entrentanto, aumenta a
complexidade do projeto.
Em
primeiro lugar criaremos noss JSP que atuara como VIEW (INPUT):
<!—índex.jsp à
<%@ page
language="java" contentType="text/html; charset=ISO-8859-1"
ageEncoding="ISO-8859-1"%> <html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=ISO-8859-1">
<title>Exemplo MVC</title>
</head>
<body>
<h1>Model-View-Controller</h1>
<h3>Informe os dados solicitados:</h3>
<form action="ServletController">
Nome<input type="text"
name="nome" /><br />
Sobrenome<input
type="text" name="sobrenome" /><br />
<input type="submit"
value="Enviar" />
< type="reset"
value="Limpar" />
</form>
</body></html> E
nosso JSP (VIEW) de exibição (OUTPUT).<!—saudacao.jsp à
<%@ page language="java" contentType="text/html;
charset=UTF-8" pageEncoding="UTF-8"%> <html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>Exemplo MVC</title>
</head>
<body>
<h1>Model-View-Controller</h1>
<jsp:useBean id="pessoa"
type="br.pro.passos.model.Pessoa" scope="session"/>
Hello,
<jsp:getProperty name="pessoa" property="nome"/>
<jsp:getProperty name="pessoa" property="sobrenome"/>
</body></html>
Apos
isto criaremos o servlet que recebera as requisições da JSP e atuará como
CONTROLLER, que instanciara os beans. (criamos assim o pacote br.pro.passos.controller)
package br.pro.passos.controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import br.pro.passos.model.Pessoa;
public class ServletController extends javax.servlet.http.HttpServlet
implements javax.servlet.Servlet {
static final long serialVersionUID = 1L;
public ServletController() {
super();
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
String nome = request.getParameter("nome");
String sobrenome = request.getParameter("sobrenome");
Pessoa p = new Pessoa();
p.setNome(nome);
p.setSobrenome(sobrenome);
HttpSession sessao = request.getSession();
sessao.setAttribute("pessoa", p);
String url = "saudacao.jsp";
RequestDispatcher dispatcher = request.getRequestDispatcher(url);
dispatcher.forward(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
Criamos
a camada MODEL agora que representara os dados (pacote br.pro.passos.model).
package br.pro.passos.model;
public class Pessoa {
private String nome;
private String sobrenome;
public Pessoa() {
super();
}
public Pessoa(String nome, String sobrenome)
{
super();
this.setNome(nome);
this.setSobrenome(sobrenome);
}
public void setNome(String nome)
{
this.nome = nome;
}
public String getNome() {
return nome;
}
public void setSobrenome(String sobrenome)
{
this.sobrenome = sobrenome;
}
public String getSobrenome() {
return sobrenome;
}
}
Representação gráfica do projeto:

Nenhum comentário:
Postar um comentário