Como exibir dados através de um Servlet/JSP

Ao desenvolver uma aplicação Web, muitas vezes se faz necessário obter dados de uma fonte qualquer (normalmente um banco de dados) e exibi-los em uma página web (normalmente na forma de uma tabela). Nesse artigo iremos mostrar exemplos de código de como fazer isso usando Servlets Java e páginas JSP.

Todo o processo de capturar os dados e exibi-los em uma página web pode ser feito com três estruturas fundamentais do ambiente de programação Java para web:

  • um formulário HTML de onde serão obtidos os parâmetros e pesquisa;
  • um Servlet Java, que processará os parâmetros de pesquisa informados e gerará uma lista de dados que serão exibidos em uma tabela HTML;
  • um arquivo JSP que montará a tabela HTML com base na lista gerada pelo Servlet.

O primeiro e mais simples passo desse processo é o formulário HTML. A seguir um exemplo de código HTML para exibir um formulário onde o usuário poderá informar os parâmetros desejados:

<html>
<body>
<Form action="DisplayCar" method="post">
<TABLE BORDER=0>
<TR>
    <TD>Category</TD>
    <TD>
    <SELECT name="category">
        <OPTION VALUE="1">1</OPTION>
        <OPTION VALUE="2">2</OPTION>
        <OPTION VALUE="3">3</OPTION>
        <OPTION VALUE="4">4</OPTION>
        <OPTION selected VALUE="5">5</OPTION>
    </SELECT>
    </TD>
</TR>
<TR>
    <TD>Date</TD>
    <TD>
        <P>Starting date: <input type="text" name="dstart" />
        <P>End date <input type="text" name="dend" />
    </TD>
</TR>
<TR>
    <TD>Place</TD>
    <TD>
    <SELECT name="place">
        <OPTION VALUE="4">4</OPTION>
        <OPTION VALUE="5">5</OPTION>
    </SELECT>
    </TD>
</TR>
<TR>
    <TD COLSPAN=2>
    <INPUT type="submit" value="Send">
    </TD>
</TR>
</TABLE>
</Form>
</body>
</html>

Como pode-se verificar na linha:

<Form action="DisplayCar" method="post">

Esse formulário irá submeter os dados de seus campos para um Servlet Java (que deve estar descrito no arquivo web.xml de seu projeto web), cujo exemplo de código é mostrado a seguir:

public class SDisplayCar extends HttpServlet{
private static final long serialVersionUID = 1L;
private Gestion gestion = Gestion.getInstance();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
    int category = Integer.parseInt(request.getParameter("category"));
    int place = Integer.parseInt(request.getParameter("place"));
    String startingDate = request.getParameter("dstart");
    String endingDate = request.getParameter("dend");
    Date start = gestion.getDate(startingDate);
    Date end =  gestion.getDate(endingDate);
    List<Vehicle> list = gestion.getVehiclesAvailable(category,place,start,end);
    HttpSession session=request.getSession();
    session.setAttribute("list", list);
    request.getRequestDispatcher("listeOfVehicle.jsp").forward(request,response);
}
}

O Servlet faz seu trabalho em três etapas: capturando os dados do formulário (linhas 7-13), criando uma estrutura de dados onde serão armazenados os dados que coincidam com o parâmetros informados (linha 15), que será vinculada a uma sessão Http que será enviada ao arquivo JSP (linhas 17-20).
Nota: Normalmente a origem dos dados a serem exibido é um banco de dados. Se for esse o caso, deve-se substituir a linha:

private Gestion gestion = Gestion.getInstance();

por comando de conexão ao banco de dados, e adicionar dentro do método doPost (logo depois da primeira etapa), comando que extraiam os dados desejados do banco de dados (com base nos parâmetros lidos do formulário HTML) e adicionem esses dados na estrutura de dados (list em nosso exemplo).
O arquivo JSP então lê os dados salvos na estrutura de dados list e exibe-os em uma tabela HTML, com o uso da estrutura c:forEach / c:out (código a seguir).

<table border="1">
            <thead>
                <tr>
                    <th>Category</th>
                    <th>Brand</th>
                    <th>Model</th>
                    <th>Places</th>
                </tr>
            </thead>
            <tbody>
                <c:forEach var="vehicle" items="${list}">
                <tr>
                    <td><c:out value="${vehicle.category}"  /></td>
                    <td><c:out value="${vehicle.brand}" /></td>
                    <td><c:out value="${vehicle.model}" /></td>
                    <td><c:out value="${vehicle.places}"  /></td>
                </tr>
                </c:forEach>
            </tbody>
        </table>