Os materiais didáticos aqui disponibilizados estão licenciados através de Creative Commons Atribuição-SemDerivações-SemDerivados CC BY-NC-ND. Você possui a permissão para visualizar e compartilhar, desde que atribua os créditos do autor. Não poderá alterá-los e nem utilizá-los para fins comerciais.
Atribuição-SemDerivações-SemDerivados
CC BY-NC-ND
Cursos / Informática para Internet / Desenvolvimento Web I / Aula
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.
<html>
<body>
<% int cont = 1; %>
Este é o acesso de número: <%= cont %>
<% cont = cont + 1; %>
</body>
</html>
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?
Vamos observar um possível código de Servlet gerado para esse JSP:
public class contadorAcessos_jsp extends HttpJspBase {
public void _jspService(HttpServletRequest request,
HttpServletResponse response) throws java.io.IOException,
ServletException {
PrintWriter out = response.getWriter();
response.setContentType("text/html");
out.write("<html><body>");
int cont = 1;
out.write("Este é o acesso de número: ");
out.print(cont);
cont = cont + 1;
out.write("</body></html>");
}
}
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:
<%! 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:
public class contadorAcessos_jsp extends HttpJspBase {
int cont = 1;
public class _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException {
PrintWriter out = response.getWriter();
response.setContentType("text/html");
out.write("<html><body>");
out.write("Este é o acesso de número: ");
out.print(cont);
cont = cont + 1;
out.write("</body></html>");
}
}
Versão 5.3 - Todos os Direitos reservados