JSP sem Java: 3 abordagens poderosas do JSP 2 para código limpo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Adeus, código espaguete: como eliminar o Java do JSP de uma vez por todas

\n\n

Se você já abriu um arquivo JSP antigo e viu uma mistura de HTML, <% %> scriptlets e lógica Java, sabe exatamente do que estou falando. Essa mistura de apresentação com lógica de negócios transforma a manutenção do projeto em um verdadeiro inferno. A pergunta "How can I avoid Java code in JSP files, using JSP 2?" no Stack Overflow tem milhares de visualizações — e por um bom motivo.

\n\n

A boa notícia é que o JSP 2 (Java Server Pages versão 2) nos deu as ferramentas para esquecer os scriptlets de uma vez por todas. Neste artigo, vou mostrar três abordagens reais que transformarão seus JSPs em templates limpos e legíveis. Sem enrolação — apenas código e prática.

\n\n

Por que scriptlets são um problema? A visão do desenvolvedor

\n\n

Scriptlets (aqueles <% ... %>) violam o princípio fundamental do MVC: separação entre lógica e apresentação. Aqui estão três razões para se livrar deles:

\n\n
    \n
  • Dificuldade de manutenção. Quando o JSP contém consultas SQL e condicionais, o designer não pode alterar o layout com segurança.
  • \n
  • Testabilidade comprometida. A lógica dentro do JSP não pode ser testada com testes unitários.
  • \n
  • Baixa legibilidade. O código vira um "espaguete", onde o Java se mistura com o HTML.
  • \n
\n\n

O JSP 2 oferece alternativas elegantes. Vamos analisá-las com um problema real: exibir uma lista de usuários do banco de dados.

\n\n

Abordagem 1: Expression Language (EL) — seu novo melhor amigo

\n\n

A Expression Language (EL) permite acessar objetos Java diretamente no JSP sem uma única linha de código Java. A sintaxe ${...} é intuitiva.

\n\n

Antes (com código Java):

\n\n
<% \n    User user = (User) request.getAttribute("user"); \n    out.println("Olá, " + user.getName());\n%>
\n\n

Depois (com EL):

\n\n
<p>Olá, ${user.name}</p>
\n\n

A EL chama automaticamente os getters. Se user.getName() retorna uma string — ela será inserida no HTML. Se o objeto for null — a EL simplesmente não exibe nada (sem NullPointerException).

\n\n

Onde usar: para exibir dados do request, session, application scope ou parâmetros da requisição.

\n\n

Abordagem 2: JSTL (JSP Standard Tag Library) — loops e condicionais sem Java

\n\n

JSTL é um conjunto de tags prontas que cobrem 90% das tarefas comuns: loops, condicionais, formatação, manipulação de URLs. Para usar, basta adicionar a dependência no pom.xml (Maven) ou baixar o JAR.

\n\n

Exemplo: exibindo uma lista de usuários em uma tabela.

\n\n

Antes (scriptlets):

\n\n
<table>\n    <%\n        List<User> users = (List<User>) request.getAttribute("users");\n        for (User u : users) {\n    %>\n        <tr><td><%= u.getName() %></td><td><%= u.getEmail() %></td></tr>\n    <%\n        }\n    %>\n</table>
\n\n

Depois (JSTL + EL):

\n\n
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>\n<table>\n    <c:forEach var="u" items="${users}">\n        <tr>\n            <td>${u.name}</td>\n            <td>${u.email}</td>\n        </tr>\n    </c:forEach>\n</table>
\n\n

Perceba: nenhuma linha de Java! A tag <c:forEach> funciona como um loop foreach, e ${u.name} é uma expressão EL. O código ficou legível e seguro.

\n\n

Outras tags úteis do JSTL:

\n
    \n
  • <c:if test="${condition}"> — exibição condicional
  • \n
  • <c:choose> — equivalente ao switch
  • \n
  • <c:set var="x" value="..." /> — criação de variável
  • \n
  • <fmt:formatDate> — formatação de datas
  • \n
\n\n

Abordagem 3: Custom Tags (tags personalizadas)

Blogs

Book Recommendations