Java Server Pages

O que é necessário para começar? Desenvolvida pela Sun para desenvolvimento de aplicações Web, a partir de componentes Java que executem no lado servidor.

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:

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.

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.

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

Artigos relacionados