Cursos / Informática para Internet / Desenvolvimento Web I / Aula

arrow_back Aula 05 - Introdução e Recursos JavaServer Pages

Declaração de variáveis

Nas páginas anteriores, você viu a implementação de uma página JSP (acessos.jsp) para contagem da quantidade de acessos realizados. Para implementar essa página, foi utilizada a classe Contador, bem como seus métodos estáticos novoAcesso() e getQuantidadeAcessos(). Vamos tentar agora implementar essa mesma funcionalidade, sem fazer uso da classe auxiliar Contador.

Você já aprendeu que os marcadores <% e %> são utilizados para delimitar scriptlets, ou seja, código Java embutido nos arquivos JSP. Sendo assim, será que podemos utilizar scriptlets para declarar uma variável no próprio arquivo JSP e utilizá-la como contador (antigo código da classe Contador)? Veja o código JSP a seguir.

AخA
1
<html>
2
    <body>
3
    <% int cont = 1; %>
4
    Este é o acesso de número: <%= cont %>
5
    <% cont = cont + 1; %>
6
    </body>
7
</html>
Listagem 6 - Código JSP declarando e usando variáveis

No código mostrado na Listagem 6, temos a declaração de uma variável de nome cont e sua inicialização com o valor 1. Seu valor é impresso indicando a quantidade de acessos já realizada (inicialmente igual a 1) e depois o seu valor é incrementado em uma unidade, indicando que o próximo valor a ser impresso deve ser 2 (segundo acesso). Ao rodar esse código, a tela da Figura 1 é apresentada, indicando que o código está correto. Entretanto, os acessos posteriores também apresentarão o número 1, como se fosse o primeiro acesso. Você consegue perceber qual o problema do código mostrado?

Figura 04 - Página JSP mostrando primeiro acesso.
Página JSP mostrando primeiro acesso.

Vamos observar um possível código de Servlet gerado para esse JSP:

14
1
public class contadorAcessos_jsp extends HttpJspBase {
2
   public void _jspService(HttpServletRequest request,
3
      HttpServletResponse response) throws java.io.IOException,
4
      ServletException {
5
    PrintWriter out = response.getWriter();
6
    response.setContentType("text/html");
7
    out.write("<html><body>");
8
    int cont = 1;
9
    out.write("Este é o acesso de número: ");
10
    out.print(cont);
11
    cont = cont + 1;
12
    out.write("</body></html>");
13
   }
14
}
Listagem 7 - Código (simplificado) do Servlet correspondente ao JSP da Listagem 1.

Quando o arquivo JSP foi traduzido para um Servlet, a variável cont virou uma variável local ao método _jspService(). Sendo uma variável local, seu valor final é perdido no final da execução do método.

Então, o que nós precisamos para resolver nosso problema é fazer com que essa variável cont seja uma variável de instância (atributo do Servlet) e não simplesmente uma variável local. Isso pode ser feito através de um elemento JSP chamado de declaração. Uma declaração é delimitada pelos marcadores <%! e %> e contém a declaração de uma variável. Na tradução do JSP para o Servlet, essa variável será traduzida para um atributo da classe gerada. Vejamos agora como deve ficar a declaração da variável cont:

1
1
<%! int cont = 1; %>

E vejamos também como fica o Servlet gerado para o JSP com a nova forma de declaração de variável:

13
1
public class contadorAcessos_jsp extends HttpJspBase {
2
    
3
    int cont = 1; 
4
    public class _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException {
5
        PrintWriter out = response.getWriter();
6
        response.setContentType("text/html");
7
        out.write("<html><body>");
8
        out.write("Este é o acesso de número: ");
9
        out.print(cont);
10
        cont = cont + 1;
11
        out.write("</body></html>");
12
   }
13
}
Listagem 8 - Código (simplificado) do Servlet correspondente ao JSP usando <%! %>

Versão 5.3 - Todos os Direitos reservados