Este pequeno artigo apresenta a tecnologias JSP e Servlets, sendo o suficiente para o desenvolvimento de sites dinâmicos de razoável complexidade. Se a aplicação exigir uma grande robustez e escalabilidade deve se considerar o uso em conjunto de outras tecnologias da plataforma J2EE.

Tecnologias

Para tirar um bom proveito do JSP é preciso entender a linguagem ou ter um conhecimento básico em Java. Isso porque, a parte lógica do JSP envolve Java Beans, Objetos JDBC, Enterprise Java Beans(EJB) entre outros componentes que interagem com a plataforma Java. Portanto, para aqueles que pretendem desenvolver uma aplicação mais sofisticada que entendam um pouco mais de programação em Java.

O ideal é que se conheça um pouco de HTML (Hyper Text Markup Language). É comum em grandes aplicações que o programador JSP e o Designer sejam pessoas diferentes. Portanto, será usado pouquíssimas tags HTML, porque a preocupação está voltada para a parte das aplicações e não para a parte visual.

JSP

Um acrônimo para Java Server Pages e consiste numa linguagem de script baseada em java para criação de sites com conteúdo dinâmicos.

Inicialmente as páginas na Web eram apenas páginas estáticas, isto é, seu conteúdo não variava a cada solicitação conforme algum parâmetro. Com a sofisticação dos serviços disponibilizados via Web, surgiu a necessidade de disponibilizar informações com natureza dinâmica (lista de preços atualizados, compras on-line, etc). Isso exigiu que o servidor web fizesse algum processamento adicional da solicitação a fim de gerar uma resposta personalizada.

Quando uma página JSP é requisitada pelo cliente através de um Browser, esta página é executada pelo servidor, e a partir daí será gerada uma página HTML que será enviada de volta ao browser do cliente. A Figura 1 ilustra esse funcionamento:

Página JSP requisitada pelo Browser
Figura 1. Página JSP requisitada pelo Browser

Servlets

Servlets são programas simples feitos em Java os quais rodam em um Servlet Container. Um Recipiente (Container) Servlet é como um servidor Web que trata requisições do usuário e gera respostas. Recipiente Servlet é diferente de Servidor Web porque ele é feito somente para Servlets e não para outros arquivos (como .html etc). O Recipiente Servlet é responsável por manter o ciclo de vida do Servlet. Pode ser usado sozinho (standalone) ou conjugado com um servidor Web. Exemplo de Recipiente Servlet é o Tomcat, e de servidor Web o Apache.

Servlets são na verdade simples classes Java as quais necessitam implementar a interface javax.servlet.Servlet. Esta interface contém cinco métodos que precisam ser implementados. Na maioria das vezes você não precisa implementar esta interface. Por que? Porque o pacote javax.servlet já provê duas classes que implementam esta interface i.e. GenericServlet e HttpServlet.

Então tudo que você precisa fazer é estender uma dessas classes e sobrescrever o método que você precisa para seu Servlet. GenericServlet é uma classe muito simples que somente implementa a interface javax.servlet.Servlet e fornece apenas funcionalidades básicas. Enquanto HttpServlet é uma classe mais útil que fornece métodos para trabalhar com o protocolo HTTP. Assim se seu servlet usa o protocolo HTTP (o que ocorrerá na maioria dos casos) então ele deveria estender a classe javax.servlet.http.HttpServlet para construir um servlet e isto é o que faremos na nossa aplicação. Servlets uma vez iniciados são mantidos na memória. Então toda requisição que chega, vai para o Servlet na memória e este gera uma resposta.

Esta característica de “manter na memória” faz com que usar Java Servlets seja um método extremamente rápido e eficiente para construir aplicações Web.

A Figura 2 ilustra o funcionamento de um relacionamento entre um servlet, container e um servidor web.

Funcionamento de um relacionamento entre um servlet, container e um servidor we
Figura 2. Funcionamento de um relacionamento entre um servlet, container e um servidor web

A Listagem 1 mostra o uso de um objeto HttpSession para armazenar as informações digitadas em um formulário.


      import java.io.*;

      import java.util.*;

      import javax.servlet.*;

      import javax.servlet.http.*;

       

      public class SessionTeste extends HttpServlet

      {

        public void doGet(HttpServletRequest req, HttpServletResponse resp)

           throws IOException, ServletException

        {

           resp.setContentType("text/html");

       

         PrintWriter out = resp.getWriter();

         out.println("<html><head>");

         out.println("<title>Teste de Sessao</title>");

         out.println("</head>");

         out.println("<body>");

         out.println("<h3>Teste de Sessao</h3>");

         HttpSession session = req.getSession(true);

         out.println("Identificador: " + session.getld());

         out.println("<br>");

         out.println("Data: ");

         out.println(new Date(session.getCreationTime()) + "<br>");

         out.println("Último acesso: ");

         out.println(new Date(session.getLastAccessedTime()));

       

           String nomedado = req.getParameter("nomedado");

           String valordado = req.getParameter("valordado");

           if (nomedado != null && valordado != null)

           {

              session.setAttribute(nomedado, valordado);

           }

          

         out.println("<P>");

         out.println("Dados da Sessao:" + "<br>");

         Enumeration valueNames = session.getAttributeNames();

          

           while (valueNames.hasMoreElements())

           {

               String name = (String)valueNames.nextElement();

               String value = (String) session.getAttribute(name);

               out.println(name + "=" + value+ "<br>");

           }

       

         out.println("<P>");

         out.println("<form action=\"SessionTeste\" method=POST>");

         out.println("Nome: <input type=text size=20 name=nomedado><br>");

         out.println("Valor: <input type=text size=20 name=valordado><br>");

         out.println("<input type=submit>");

         out.println("</form>");

         out.println("</body></html>");

           }

       

        public void doPost(HttpServletRequest req, HttpServletResponse resp)

              throws IOException, ServletException

           {

              doGet(req, resp);

           }
       }
Listagem 1. Armazenando as informações digitadas em um formulário

Para controlar a sessão é necessário obter um objeto HttpSession por meio do método getSession() do objeto HttpServletRequest. Opcionalmente, o método getSession() recebe como argumento um valor booleano que indica se é para criar o objeto HttpSession se ele não existir (argumento true) ou se é para retorna null caso ele não exista (argumento false). Para se associar um objeto ou informação à sessão usa-se o método setAttribute() do objeto HttpSession, passando para o método um String e um objeto que será identificado pelo String. Note que o método aceita qualquer objeto e, portanto, qualquer objeto pode ser associado à sessão. Os objetos associados a uma sessão são recuperados com o uso método getAttribute() do objeto HttpSesion, que recebe como argumento o nome associado ao objeto. Para se obter uma enumeração dos nomes associados à sessão usa-se o método getAttributeNames() do objeto HttpSession.

rcpjspndcfig03.jpg
Figura 3. Resultado da execução do exemplo
Continue Artigo Introdução ao Java Server Pages