Desenvolvimento Web

Padrão MVC com Java Servlets e JSP: Um Guia Prático

29/08/2025

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

Voltar