Introdução a Servlets

Algum tempo atrás a Internet era composta principalmente de páginas estáticas com conteúdo institucional, hoje ela oferece uma infinidade de aplicações com conteúdo dinâmico e personalizado. Neste artigo apresentaremos duas tecnologias da plataforma JEE a tecnologia Servlets/JSP, e mostraremos algumas características que a tornam tão atraente para o desenvolvimento de aplicações WEB.

A utilização de Servlets e de páginas JSP oferecem diversas vantagens em relação ao uso de outras tecnologias (como PHP, ASP e CGI). As principais vantagens são herdadas da própria linguagem Java, como:

  • Portabilidade: a aplicação desenvolvida pode ser implantada em diversas plataformas, como por exemplo, Windows, Unix, GNU/Linux e Macintosh, sem que seja necessário modificar ou mesmo reconstruir a aplicação.
  • Facilidade de programação: a programação é orientada a objetos, simplificando o desenvolvimento de sistemas complexos. Além disso, a linguagem oferece algumas facilidades, como por exemplo, o gerenciamento automático de memória (estruturas alocadas são automaticamente liberadas, sem que o desenvolvedor precise se preocupar em gerenciar esse processo).
  • Flexibilidade: o Java já se encontra bastante difundido, contando com uma enorme comunidade de desenvolvedores, ampla documentação e diversas bibliotecas e códigos prontos, dos quais o desenvolvedor pode usufruir.

Além dessas vantagens, a arquitetura de Servlets e páginas JSP possibilitam alguns benefícios adicionais, como:

  • Escalabilidade: na maior parte dos servidores de aplicações modernos, é possível distribuir a carga de processamento de aplicações desenvolvidas em diversos servidores, sendo que servidores podem ser adicionados ou removidos de maneira a acompanhar o aumento ou decréscimo dessa carga de processamento.
  • Eficiência: os Servlets carregados por um servidor persistem em sua memória até que ele seja finalizado. Assim, ao contrário de outras tecnologias, não são iniciados novos processos para atender cada requisição recebida; por outro lado, uma mesma estrutura alocada em memória pode ser utilizada no atendimento das diversas requisições que chegam a esse mesmo Servlet.
  • Recompilação automática: páginas JSP modificadas podem ser automaticamente recompiladas, de maneira que passem a incorporar imediatamente as alterações sem que seja necessário interromper o funcionamento da aplicação como um todo.

O que são Servlets?

Servlets são classes Java, desenvolvidas de acordo com uma estrutura bem definida que quando instaladas e configuradas em um Servidor que implemente um Servlet Container, podem tratar requisições recebidas de clientes Web, como por exemplo os Browsers (Internet Explorer® e Mozilla Firefox®).

Ao receber uma requisição, um Servlet pode capturar os parâmetros desta requisição, efetuar qualquer processamento inerente a uma classe Java, e devolver uma página HTML. A listagem abaixo, retorna uma página para o cliente WEB, com o endereço IP do servidor, a Listagem 2, mostra o código HTML gerado pelo Servlet da Listagem 1 e a Figura 1 mostra a página carregada no cliente WEB.


package org.computer.br;



import java.io.*;

import java.net.*;



import javax.servlet.*;

import javax.servlet.http.*;



public class EnderecoIpRemoto extends HttpServlet {



    protected void processRequest(HttpServletRequest request, HttpServletResponse

        response) throws ServletException, IOException {

        response.setContentType("text/html;charset=UTF-8");

        PrintWriter out = response.getWriter();



        out.println("<html>");

        out.println("<head>");

        out.println("<title>Servlet EnderecoIpRemoto</title>");

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

        out.println("<body>");

        out.println("<h1>Endereco ip Remoto:" + request.getRemoteAddr() +

            "</h1>");

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

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



        out.close();

    }



    protected void doGet(HttpServletRequest request, HttpServletResponse

        response) throws ServletException, IOException {

        processRequest(request, response);

    }



    protected void doPost(HttpServletRequest request, HttpServletResponse

        response) throws ServletException, IOException {

        processRequest(request, response);

    }



    public String getServletInfo() {

        return "Short description";

    }

}
Listagem 1: Exemplo de um Servlet java.

<html>
   <head>
      <title>Servlet EnderecoIpRemoto</title>
   </head>
   <body>               

    <h1>Endereco ip Remoto:127.0.0.1</h1>       

    </body>
</html>
Listagem 2: Código HTML gerado pela Listagem 1.
Página gerada pelo Servlet e carregada no cliente WEB
Figura 1: Página gerada pelo Servlet e carregada no cliente WEB.

O que são páginas JSP?

As páginas JSP, ou Java Server Pages, foram criadas para contornar algumas das limitações no desenvolvimento com Servlets: se em um Servlet a formatação da página HTML resultante do processamento de uma requisição se mistura com a lógica da aplicação em si, dificultando a alteração dessa formatação, em uma página JSP essa formatação se encontra separada da programação, podendo ser modificada sem afetar o restante da aplicação.

Assim, um JSP consiste de uma página HTML com alguns elementos especiais, que conferem o caráter dinâmico da página. Esses elementos podem tanto realizar um processamento por si, como podem recuperar o resultado do processamento realizado em um Servlet, por exemplo, e apresentar esse conteúdo dinâmico junto à página JSP.

Existe também um recurso adicional bastante interessante na utilização de páginas JSP: a recompilação automática, que permite que alterações feitas no código da página sejam automaticamente visíveis em sua apresentação. Assim, não é necessário interromper o funcionamento da aplicação para incorporar uma modificação de layout, por exemplo. A listagem abaixo, retorna uma página para o cliente WEB, com o endereço IP do servidor, a Listagem 4, mostra o código HTML gerado pelo JSP da Listagem 3 e a Figura 2 mostra a página carregada no cliente WEB.


<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>JSP Page</title>
   </head>
   <body>
      <h1>O seu endereço ip: <%= request.getRemoteAddr() %></h1>
   </body>
</html>
Listagem 3: Exemplo de um JSP.

<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>JSP Page</title>
   </head>
   <body>
      <h1>O seu endereço ip: 127.0.0.1</h1>
   </body>
</html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   <title>JSP Page</title>
</head>
<body>
   <h1>O seu endereço ip: <%= request.getRemoteAddr() %></h1>
</body>
</html>
Listagem 4: Código HTML gerado pela Listagem 3.
Página gerada pelo JSP e carregada no cliente WEB
Figura 2: Página gerada pelo JSP e carregada no cliente WEB.

Confira também