Salve! Salve! Hoje vou falar um pouco sobre Servlet. O intuito aqui é mostrar para que serve, quando usar e se você está começando no mundo J2EE 99% dos desenvolvedores começa conhecendo servlet & JSP. Espero que gostem do post.
let’s go…
Pré-Requisito:
Ambiente web – Instalação & Configuração (há uma aplicação completa com Servlet como teste)
Servlet são classes Java para Web. Um Servlet é uma classe normal como qualquer outra. Você pode usar “quase tudo” que aprendeu no JSE. Porém agora para Web.
Um Servlet não tem o método main que temos em uma clãs padrão Java.
Quando usar?
Simples quando você quer que aquela aplicação “hello world” seja exibida no browser usado Java, ou seja, você que sua classe Java rode na web.
Por que não tem main em um Servlet?
Por que Servlet estão sob controle de outra aplicação Java chamada container (ex.: Tomcat, glassfish etc.)
Quando sua aplicação web recebe uma solicitação para um Servlet o servidor entrega a solicitação não ao Servlet em si, mas para o container no qual o Servlet é distribuído.
O container que entrega ao Servlet a solicitação e a resposta HTTP e chama os métodos do Servlet (doPost() e doGet()) .
Mas para que esse tal de container?
Veja o poder dele:
– Suporte para comunicações: o container oferece uma maneira simples e para seus servlets se comunicarem com seu servidor. Onde você não precisa construir ServerSocket, escutar a porta etc. o container conhece o protocolo entre o servidor e ele mesmo, isso para que o Servlet não tenha que se preocupar com uma API entre servidor e com o código da própria aplicação. O que precisa se preocupar na realidade é com a lógica do negócio que está contida em seu Servlet.
Ex.: como aceitar um pedido na sua loja virtual?
Como cancelar um pedido?
É com isso que seu Servlet deve se preocupar, o restante deixe por conta do container.
-Gerenciamento de ciclo de vida: o container controla a vida e a morte dos servlets.
Suporte
-Suporte a multithread: O container cria automaticamente uma nova thread em Java para cada solicitação Servlet recebida.
– Certeza de segurança: com o container, você pode usar XML para configurar a segurança, sem ter escrever direto no código da class Servlet.
-Suporte JSP: o container se encarrega de traduzir código JSP em Java
Percebeu a eficiência e importância do container dentro de sua aplicação?
Segundo a Kathy Sierra:
“Servlet vivem para servir clientes. A função de um Servlet é receber uma solicitação do cliente e devolver uma resposta. A solicitação talvez seja simples: Traga-me a pagina de boas vindas. Ou pode ser complexa: Finalize o processo do meu carrinho de compras.
A solicitação traz dados importantes e seu código Servlet tem que saber como encontrá-los e utilizá-los.
Estrutura de um Servlet – Padrão
PadraoServlet.java
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
/* 99% de todos os servkets sai HttpServlet */
public class PadraoServlet extends HttpServlet{
/* É aqui que seu Servlet consegue as referencias dos objetos solicitacao e resposta
No mundo real 99% de todos os Servlet anulam ou o metodo doGet() ou o doPost()
*/
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException,
ServletException{
/* Utilize PrintWriter para escrever texto html no objeto de resposta*/
PrintWriter out = response.getWriter();
out.println(“Hello World”);
}}
XML para um Servlet
<?xml version=”1.0″ encoding=”UTF-8″?>
<web-app id=”WebApp_ID” version=”2.4″ xmlns=”http://java.sun.com/xml/ns/j2ee”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd”>
<!–chamando um Servlet –>
<servlet>
<servlet-name>servletteste</servlet-name>
<servlet-class>PadraoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletteste</servlet-name>
<url-pattern>/compras.do</url-pattern>
</servlet-mapping>
</web-app>
Pontos importantes:
– um XML pode declarar vários Servlet
– <servlet-name> amarra o elemento servlet ao elemento <servlet-mapping>
-<servlet-class> é a classe Java
-<url-pattern> é o que o cliente usa na solicitação.
Exemplos no mundo real: HTTP://www.globo.com.br/bbb ; www.suaaplicacao/loja
Classificação dos nomes Servlet
<servlet-name> nome conhecido pelo container
<servlet-class> arquivo class Servlet do desenvolvedor (.java)
<url-pattern> endereço para usuário, normalmente é falso.
Mapear Servlet
Aumenta à flexibilidade a segurança da aplicação.
Mapear o nome em vez de coloca o verdadeiro caminho e nome do arquivo garantem flexibilidade ao mover as coisas. E evita aquele pesadelo na hora de acompanhar e mudar o código do cliente que aponta pra antiga localização dos arquivos Servlets.
Segurança: você realmente quer que o cliente saiba exatamente a estrutura no seu servidor? Passar um caminho falso é zelar pela segurança.
Compilando Servlet
Caso esteja usando o prompt de comando do Windows, vá ao diretório da sua aplicação: webapps/suaplicacao/src (caso esteja seguindo a nomeação os arquivos .java devem ficar dentro do diretório src)
Após o prompt está no diretório da aplicação digite o comando abaixo informando que o .class deve ir para para WEB-INF/classes
javac –d WEB-INF/classes src/PadraoServlet.java
obs.: Se não entendeu o por que do caminho veja lei o artigo Instalação e configuração do ambiente Web – TomCat.
Agora caso esteja usando uma IDE e ela está configurada não é necessário se preocupar com isso, já que essa parte a própria IDE executa por você.
Testando
Após ter compilado corretamente basta, abrir o browser e informar a url para seu Servlet de acordo com o mapeamento:
localhost:8080/suaplicacao/compras.do
No browser a mensagem: Hello World
Há muito mais detalhes a ser explicado a respeito de Servlet, porém busquei mostrar para que serve e sua real utilidade. Por exemplo, não é recomendável embutir Servlet com HTML, isso não é uma boa prática, porém não abordei nesse post, já que o assunto de Servlet dar um livro (e dos grandes). Para detalhes mais técnico a respeito da sintaxe e nomeações você vai encontrar no livro Servlet & JSP (o qual estou terminando de ler) ou na própria web.
Espero que tenham gostado do post,a respeito desse tal Servlet. Aproveitando o momento convido vocês para mais uma coluna minha no imasters sobre Servlet usando netbeans 6.