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.

Serialização em Java

Salve! Salve! Pessoal. Hoje vou falar de um assunto que é cobrado na certificação SCJP e que é está dentro de qualquer bom livro de Java básico. Serialização: para que serve? O que é isso? Não consigo entender a essência desse recurso?

Tentarei no post de hoje, buscar explicar  o processo de serialização.  Como envolve códigos nesse post, achei melhor colocar os códigos com a sintaxe grande para download. Assim evitando um post imenso devido aos códigos.

 Let’s GO… 

A serialização resume-se em um único objetivo salvar, gravar, capturar o estado de um objeto. Ou seja, tenho um objeto de uma classe e quero salvar seu estado uso serialização, pois quando quiser usar  esse objeto com seu ultimo estado gravado é somente des-serializa-lo.

Mas por que usar isso?

Usar serialização permite o seguinte: você cria o objeto  ou uma variável de instancia de uma class  e quer gravar em um arquivo para futuramente utilizar esse objeto/variável com seu estado que foi gravado, então basta usar serialização pelo seguinte motivo:

  • Lembre-se: quando o construtor é executado os valores são perdidos objeto = null, e os tipos primitivos recebem seus valores padrões.

Com a serialização isso é quebrado a partir que serializo um objeto ou uma variável de instancia seu valor é gravado(em um arquivo), armazenado e futuramente posso obter esse valor através da des-serialização.

Um exemplo básico do código de serialização e des-serialização de objetos.

import java.io.*;

 class Cat implements Serializable{} //1

class SerializeCat{

 public static void main(String args[]){

 Cat c = new Cat(); //criando o objeto

   //aqui vou serializar meu objeto da class cat

   try{

   FileOutputStream fo = new FileOutputStream(“test.ser”);

    ObjectOutputStream oo = new ObjectOutputStream(fo);

        oo.writeObject(c); // serializo objeto cat

         oo.close();

  System.out.println(“Class Cat – object serializado com sucesso”);

       }

    catch(Exception e){e.printStackTrace();}                            

           //des-serializo o objeto

       try{

          FileInputStream fi = new FileInputStream(“test.ser”);

          ObjectInputStream oi = new ObjectInputStream(fi);

                c =(Cat) oi.readObject();

                  oi.close();

           System.out.println(“agora ele foi des-serializado com sucesso”);

              }catch(Exception e){e.printStackTrace();}                          

                }}

//1 criei uma class Cat que implementa a interface (marcadora) Serializable (essa interface  não possui nenhum método a ser implementado)

//ObjectxxxStream é a classe que possui o método mágico de serialização write e read – Object.

//writeObject –> serializa objeto depois escreve o objeto ja serializado no arquivo

 Herança  e Serialização

Quando temos uma subclasse que herda tudo da sua class pai o que acontece com serialização? Nesse caso temos uma pequena regra a seguir, se sua class PAI, implementar Serializable então a sua subclasse implicitamente já  faz Serializable.

Agora se sua classe PAI, não implementa Serializable e sua subclasse implementa então apenas  os objetos da sua subclasse vamos serializar o da class PAI infelizmente terá seus valores iniciais ou padrão. Um exemplo prático:

class Animal{}

class Dog extends Animal implements Serializable{}

No exemplo anterior apenas Dog é serializado.

 Um exemplo mais prático:

class Foo implements Serializable{

int num = 3;

void Num(){num=10;}

}

A class Foo quando for serializada e rodar o método Num() ela vai gravar o valor 10 para a variável int que criamos e quando for des-serializada é ideal que ela mantenha esse valor.

Tenha em mente:

Um objeto des-serializado nós NÃO:

-Queremos que a inicialização normal rode.

-Não queremos que os construtores rodem.

-E não queremos que os valores explicitamente declarados sejam atribuídos.

 Na verdade QUEREMOS apenas um retorno do estado que foi gravado, serializado.


 
Serialização não estar para static  

Quando se diz: “A serialização não está para static” isso não quer dizer que seu código não vai compilar ou vai lançar alguma exceção caso tente serializar uma variável static. Simplesmente diz que não é possível gravar o estado de uma variável static. Mas por quê?

 Devido à variável static não ter objetos, ela pertence à class. Ao contrario das  variáveis de instancia que pertencem a um objeto. Sabemos que static o valor da variável é compartilhado para todos então se serializo 10, mas depois altero o valor para 20. Então  na des-serializacao retorna 20 já que não temos instancia nenhuma do static ele vai trazer o ultimo valor.

Exemplo prático

Algumas regras importantes:

– modificador Transient:  ignora o objeto ou variável durante a serialização, isso aqui não vai serializado. (exemplos veja)

– Caso o arquivo especificado na des-serialização não exista ele não é des-serializado e então acontece a serialização mais uma exceção é lançada por o arquivo não existir

– as classes precisam implementar a interface Serializable para que os seus objetos possam ser serializados (exemplos veja).

– Se a superclasse implementar Serializable, então as suas subclasses também a implementam automaticamente.

– Se  a superclass não implementar Serializable, então quando um objeto da subclasse for des-serializado o construtor da superclasse será executado.

– Se sua class serializable tiver referencia para outra classe que não eh serializable uma exceção ocorre em tempo de exceção.

– Posso serializar apenas objeto (autoboxing funciona primitivo >> objeto)

– ObjectInputStream à ler e dês-serializa

– ObjectOutputStream à escreve e serializa

 

Essas são algumas regras e funcionamento de Serialização, espero ter tirado as duvidas e contribuído para o aprendizado. Um abraço a todos! E até a próxima!

 

Conheça o Google

HOJE É SEU ANIVERSÁRIO!!!!! Parabéns! Visitantes do blog! Hoje o blog completa um mês e consta no sistema de acesso do wordpress mais de 4 mil acessos. ( 4,862 acessos)

Na verdade nem sei o que dizer aos visitantes/Amigos, para ser sincero nem esperava essa quantidade de acesso.

Em função disso cada dia que chego da faculdade, do trabalho etc. Fico pensando qual será o post do dia X?

A inspiração que tenho a cada minuto é graças a vocês que estão contribuindo diretamente e indiretamente para que isso aconteça!!!

Obrigado pelos e-mails com sugestões de temas, pelas criticas, elogios, os comentários aqui no blog enfim sem esse feedback não sei se estaria aqui hoje postando.

Agradeço também ao pessoal do Javaranch (ler português mais/menos) que acessa o blog e que na ultima semana me solicitaram a tradução de algumas colunas para o inglês. Estou analisando com “carinho” esse ponto hehe!

Criei um formulário de Contato para facilitar o envio de criticas, sugestões, elogios etc.

Bom abaixo reunir os posts que teve o maior número de visualizações durante esses 30 dias do blog, confira:

O artigo de hoje é sobre Google recebi as fotos abaixo de um amigo (Razec), e resolvi divulgar para aqueles que morrem de curiosidade ou tem dúvidas da estrutura do gigante da web.

Let’s GO…

Ángel Jiménez de Luis, editor do Gadgetoblog del Diario El Mundo, fez uma visita a oficina do Google en Zurich (Suiça) e regressou com uma série de fotos que despertam a mais terrível inveja de todas.

O tobogã conecta a zona de oficinas do primeiro andar com a cafeteria e a academia. Para descer e comer não precisa esperar o elevador. Os recém chegados têm que descer por ele para se apresentar a todos, além de usar um ridículo chapéu colorido durante algumas horas.

A cafeteria serve café da manhã, almoço e janta preparados por cozinheiros contratados exclusivamente para o edifício. Tem comida para vegetarianos e como prato principal, um buffet de saladas com comidas feitas com ingredientes frescos do local.

As crianças são bem vindas e não é estranho ver os ‘Googlers’ indo trabalhar acompanhados de seus mascotes. Não há berçários embora a empresa toda se pareça com uma quase sempre – mas sim, uma sala especial para trocar os bebês.

A boa comida grátis e os petiscos entre as horas sempre trazem uns ‘quilinhos’ a mais aos recém chegados que ficam popularmente conhecidos como ‘os Os (letra O) do Google’.A academia do piso superior – que também é grátis – é o lugar onde se queimam os ‘quilinhos’.

A sala de massagem é quase que um santuário. As poltronas vibradoras são gratuitas. Apenas o serviço de massagens é que são pagos, mas são subsidiados e com valores baixos. A empresa presenteia bônus de massagem ou reservas de horários.

Em cada andar tem ao menos 2 áreas de descanso com comida e bebida – é claro, grátis. Refrescos, sucos e café, muito café, mas também cerais, chocolates, sorvetes, batata fritas, frutas e uma ampla seleção de lanches saudáveis que tentam compensar o excesso de carboidratos.

Cada um administra seu tempo e seu trabalho como quer. Não há horário e nas horas de descansos é permitido jogar uma partida de Guitar Hero (jogo de vídeo game onde os jogadores tocam uma guitarra virtual), sinuca ou um jogo de mesa. Os prazos de entregas e desenvolvimento/ produção, isso sim, tem que ser cumprido.

Esta barra, similar a de uma estação de bombeiros, liga o segundo andar com a sala de jogos.Não precisa esperar o elevador para se divertir um pouco.

O espaço de trabalho é pequeno, mas as áreas de reuniões são muito amplas e temáticas. Esta cabine é de um autêntico teleférico e está situada em um andar decorado com fotos e objetos que lembram uma estação de esquí nos Alpes.

Nessas alturas você deve estar perguntando se no Google realmente se trabalha. Esta é uma área de trabalho convencional. Duas telas (monitores) é o padrão – economiza tempo e aumenta a produtividade – e os lugares são escolhidos livremente. Não é difícil ver os ‘Googlers’ mudando o lugar de trabalho com freqüência.

O serviço técnico está em uma área do prédio decorada com ambiente hawaiano. Aqui se pode vir e buscar um cabo ou consertar um problema no seu laptop. As áreas de recreação estão repartidas por todo o prédio para que os ‘Googlers’ caminhem e se vejam.

As áreas de trabalho são sempre abertas. Para se ter privacidade durante uma conversa no telefone, tem que ‘prender’ em uma das múltiplas cabinas divididas pelo edifício. Em todas as paredes do prédio existem blocos de anotações, porque nunca se sabe em que momento pode surgir uma boa idéia.

O Salão da Água é uma área de paz e relaxamento no prédio. Há poltronas de massagens e a iluminação é mínima. É o lugar ideal para tirar aquela dormidinha básica após o almoço e descansar um pouco antes de uma reunião.

No entanto, é proibido o uso de celulares e despertadores. A única atividade possível, além de descansar, é olhar os peixes tropicais nos aquários nas
paredes.

As salas de reuniões do prédio têm nomes tirados de séries de TV e filmes famosos.

Estes iglús estão na área do Star Wars e são autênticos refúgios que foram utilizados em missões científicas na Antártida.

Google é mais que uma empresa. Os trabalhadores se encontram na sede de forma periódica para realizarem atividades em conjunto e festas. Também não é raro encontrar grupos para praticar esportes desde ciclismo até esqui alpino. Além de tudo, os funcionários têm o famoso 20% de tempo de trabalho onde cada um pode dedicar-se a projetos pessoais e 10% para livre disposição absoluta.

Os trabalhadores passam apenas uma fração de seu tempo na mesa de trabalho. Na maioria das vezes trabalham com o laptop nas áreas de descanso, em pequenos grupos. Isto favorece a criatividade e a sociabilidade.

A biblioteca é uma das salas mais surpreendentes do prédio e a que tem as melhores vistas. Uma área de descanso com uma imensa cozinha e uma chaminé
‘virtual’. Toda a mobília é reciclável e foram adquiridas de lojas de segunda mão.

E agora como se sente? Que salve os brasileiros marcando presença na equipe do Google, fico feliz em saber que temos um percentual de presença dentre os 13 mil ‘Googlers’.

Lembrando que o Google não é um sonho apenas dos programadores, desenvolvedores, gerente de projetos etc. Os administradores, empreendedores de todo mundo admira o nível e a forma de administração (que é mais empreendedor que administração em si) da equipe do Google e o poder que a marca adquiriu em pouco tempo diante do mercado é muito alto. Olha a matéria abaixo:

Noticia

Flw! Bom final de semana a todos! E até segunda-feira. E espero que tenha matado a curiosidade, e tirado as duvidas sobre Google!!

Já escolheu sua xícara?

Instalando TomCat 15min

Salve! Salve! Pessoal,

“Hoje resolvi mudar…” hehe Nesse post vou mostrar como é fácil e rápido instalar um ambiente web(Servlet & JSP) sem precisar ficar com dor de cabeça. Em 15 minutos você tem o ambiente todo configurado e funcionando como manda o “figurino”.

Primeiramente quero informá-los! que a partir de hoje estou participando da coluna de Java lá no Imasters. E ja tem um artigo publicado,(em 2 dias mais de 550 acessos) como recebi aprovação do Imasters na segunda-feira ainda nao tive tempo de me organizar para os assuntos que vou tratar lá onde serão diferentes do Blog! Já que o meu intuito é que a galera que acessa o blog visitem também minha coluna no imasters e que a galera do imasters acessem o blog e que se possivel comentem e dai quem sabe criar uma rede de profissionais e trocar experiencias, compartilhar conhecimentos etc, esse foi um dos meus objetivos com o blog e que graças a vocês, estou aqui marcando presença com mais um post viável para uns e inviável para outros.

Bom vamos largar de papo e mãos à obra!!

Pré-Requisito

JDK 1.5 ou superior e configurado corretamente

http://tomcat.apache.org/

Arquivo para Teste

Estou disponibilizando o arquivo desenvolvido para teste.Após à instalação para verificar se realmente seu ambiente está em pleno funcionamento.

estudojee.zip

Hierarquia TomCat

Agradecimentos

Para que esse tutorial fosse criado, a Verônica (Desenvolvedora da IBM e participante ativa Veronicaaa – guj.com.br) colaborou diretamente, na verdade ela que me indicou todos os caminhos para instalar, eu apenas peguei o coloquei em forma de tutorial. Já que tivemos sucesso na instalação no menor tempo possível. Então venho agradecê-la por ter disponibilizado o seu dia para chegarmos a uma resolução da instalação/configuração apesar de que os testes que fizemos foi na versão .exe. (isso foi em 2007)

Depois testei os mesmo procedimentos na versão .zip e funcionou tranqüilo.

Forma automática – arquivo .exe

Instalar e configurar o TomCat de forma automática, para aqueles tem o arquivo de instalação .exe. Em apenas 15 minutos sua maquina já está apta a rodar Servlets e JSP.

Sigao modo padrão de instalação sem mudar nenhum caminho sugerido pelo TomCat exceto os de configuração da JVM que veremos ao final desse tutorial.

Passo 1:

– clicar para executar o arquivo de instalação

– escolha a opção Full na segunda tela após clicar no primeiro next.

– Observe que o tomcat tem um caminho de instalação deixe o que ele sugere mais grave esse caminho mentalmente.

No meu caso o caminho foi:

C:\Arquivos de programas\Apache Software Foundation\Tomcat 5.5

– em seguida vem o pedido para configurar a porta deixe a 8080 e pede também a configuração de login e senha para a parte administrativa deixe como estar Login sendo: admin Senha: Vazio

– Muita atenção nessa tela, ela está apontando para um JRE, porém é o que está na pasta principal Java. Configure o JRE que está dentro do JDK. Se está seguindo a instalação padrão o caminho deve ser o abaixo:

C:\Arquivos de programas\Java\jdk1.5.0\jre

– clique em install.

Passo 2

– Agora teste para ver se o tomcat está instalado. HTTP://localhost:8080

– Clique em manager e coloque o login: admin e a senha deixem em branco

– Veja as aplicações disponíveis. Na tabela Applications clique em servlets-examples e escolha uma das aplicações se executarem normalmente é porque está tudo ok. Faça o mesmo com os exemplos JSP.

– volte para a pagina principal clicando /

– Se você clicar em Administration você vera que ele vai pedi para você baixar o pacote de admin.

– procure no site do apache o seguinte arquivo para download: apache-tomcat-5.5.25-admin.zip

agora o descompacte e dentro dele temos duas pastas conf e serv, copie elas.

– e agora cole dentro desse diretório C:\Arquivos de programas\Apache Software Foundation\Tomcat 5.5 substituindo as do tomcat.

– agora clique em administration e use o mesmo login sendo assim você está na parte de administração do tomcat. A partir da versão 5.0 quando você coloca sua aplicação dentro de webapps ele automaticamente já cria o context.

A vantagem de ter um admin é que você pode parar uma aplicação sem precisar dar um restart no tomcat parando assim todas as aplicações.

Passo 3

– Agora criei uma variável chamada CLASSPATH

Valor da Variável: C:\Arquivos de programas\Apache Software Foundation\Tomcat 5.5\common\lib\servlet-api.jar;.

*O ponto-e-vírgula e o ponto no final é para que você possa compila seus arquivos normais que não sejam um servlet e qualquer diretório Java.

-Clica em OK

Passo 4

– para parar a execução observe perto do relógio do Windows que tem estlá o tomcat rodando. Clique com o botão direito e escolha o que fazer

– para o tomcat não inicializar de forma automática vá então para Painel de controle à Ferramenta administrativaà Serviçosà e procure por apache tomcat e mude o tipo para manual.

Flw! Pessoal! Espero que tenha gostado do post!!! E agora é so mandar ver nos estudos/trabalhos!!

E até Sexta!!