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.
Veja: Curso Completo de Java
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:
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.
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);
}
}
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.
Continue Artigo Introdução ao Java Server Pages