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.
Saiba mais: Introdução ao Java Server Pages
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®).
Saiba mais: Declaração e utilização de classes no Java
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";
}
}
<html>
<head>
<title>Servlet EnderecoIpRemoto</title>
</head>
<body>
<h1>Endereco ip Remoto:127.0.0.1</h1>
</body>
</html>
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.
Saiba mais: Criando um serviço RESTful com Java
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>
<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>