Entendendo Servlet

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.

10 comentários em “Entendendo Servlet”

  1. Amigo…boa tarde, tambem sou novo em java web, minha duvida é a seguinte: utilizo o diretorio padrao do apache para guardar os arquivos ou o workspace do eclipse? não sei qual usar, ou posso criar toda a estrutura de pasta dentro do eclipse…

  2. Opa…agora entendi Camilo, estava com esta dúvida cruel porem qndo configuro o eclipse ele ja me da WEB-INF e tal… basta configurar o web.xml ……..muito obrigado..

  3. Gostei muito.Tenho conhecimento intermediário em JSE mas sempre tive muitas dúvidas sobre Servlets. Agora dos problemas estão resolvidos.
    Muito Obrigado.

Deixe um comentário

O seu endereço de e-mail não será publicado.