Dissecando o Padrão MVC com Java Servlets e JSP
Introdução: A Filosofia por Trás do Padrão
No desenvolvimento de aplicações web, a complexidade pode escalar de forma exponencial. A diferença entre um sistema sustentável e um monolito caótico reside na disciplina arquitetural. O padrão Model-View-Controller (MVC) é uma filosofia de design indispensável, impondo uma separação de responsabilidades que facilita a manutenção do código, testes e escalabilidade. Este artigo disseca a implementação do MVC em Java Web, usando Servlets como controladores e JSPs para a camada de apresentação.
Os Pilares da Arquitetura MVC
Model (Modelo): A lógica de negócio e a representação dos dados. Em Java, frequentemente implementado via JavaBeans ou POJOs. Gerencia o estado e comportamento dos dados, sendo agnóstico à interface.
View (Visão): A camada de apresentação. Renderiza dados do Modelo em um formato adequado ao usuário (geralmente HTML). Em nosso escopo, a tecnologia primária é JSP. Solicita dados ao Modelo, mas não se envolve em sua obtenção ou manipulação.
Controller (Controlador): Intermediário entre Model e View. Recebe requisições do usuário, interpreta-as, aciona ações no Model e seleciona a View para apresentar a resposta. Em Java Web, Servlet é a tecnologia canônica.
Dissecação de um Projeto Exemplo: O Fluxo de uma Requisição
1. O Ponto de Partida: A Ação do Usuário (usuario.html)
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>escolhe cor fruta</title>
</head>
<body>
<h1 align="center">cor da fruta</h1>
<form method="post" action="SelectFruit.do">
<p>escolhe cor da fruta</p>
<select name="color" size="4">
<option value="fruta vermelha"> vermelha </option>
<option value="fruta amarela"> amarela </option>
<option value="fruta verde"> verde </option>
<option value="fruta laranja"> laranja </option>
</select>
<br><br>
<input type="submit">
</form>
</body>
</html>
action="SelectFruit.do" direciona a requisição para o Controller.
2. O Mapeamento da Ação: O web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app ...>
<servlet>
<servlet-name>escolher_frutas</servlet-name>
<servlet-class>banca_frutas.Banca_frutas</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>escolher_frutas</servlet-name>
<url-pattern>/SelectFruit.do</url-pattern>
</servlet-mapping>
</web-app>
Mapeia /SelectFruit.do para o servlet Banca_frutas.
3. O Processamento: O Controller (Banca_frutas.java)
package banca_frutas;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class Banca_frutas extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
String c = request.getParameter("color");
Modelo_retorna_frutas f = new Modelo_retorna_frutas();
List resultado = f.getFrutas(c);
request.setAttribute("estilos", resultado);
RequestDispatcher view = request.getRequestDispatcher("Resultado.jsp");
view.forward(request, response);
}
}
Recebe a requisição, processa o parâmetro, chama o Model, armazena o resultado e despacha para a JSP.
4. A Lógica de Negócio: O Model (Modelo_retorna_frutas.java)
package banca_frutas;
import java.util.*;
public class Modelo_retorna_frutas {
public List getFrutas(String cor) {
List frutas = new ArrayList();
if (cor.equals("fruta vermelha"))
frutas.add("morango");
// ... outras cores
return (frutas);
}
}
Lógica de negócio, independente da camada de apresentação.
5. A Apresentação Final: A View (Resultado.jsp)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" import="java.util.*" %>
<!DOCTYPE html>
<html>
<body>
<p>
<%
List estilos = (List) request.getAttribute("estilos");
Iterator i = estilos.iterator();
while(i.hasNext()) {
out.print("<br> fruta escolhida no JSP = " + i.next());
}
%>
</p>
</body>
</html>
Gera o HTML dinâmico.
Conclusão: A Relevância Perene da Estrutura
Compreender o fluxo com Servlets e JSPs é fundamental para construir sistemas complexos de forma organizada e sustentável.
Referências e Leituras de Apoio
- Basham, B., Sierra, K., & Bates, B. (2011). Servlets & JSP. O’Reilly / Alta Books.
- Fowler, M. (2002). Patterns of Enterprise Application Architecture. Addison-Wesley.
- Gamma, E., Helm, R., Johnson, R., & Vlissides, J. (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley.