Blog

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!

 

Nova certificação em T.I – Teste Software

Salve! Salve! Pessoal! Hoje vou falar sobre o novo mercado, que pode estourar daqui alguns anos! É o testador de software. Mas nao pensem que isso é algo q nasceu ontem nao, ja existe a um bom tempo, é tanto que na india há mais de 10 mil profissionais certificado, e tem demanda para profissionais com essa qualificação. Aqueles profissionais que nao valorizam certificação e acham que é algo de “meia-boca” leiam o artigo e vejam  o que especialistas dizem…

let’s go! have nice a read!

Essa nova certificação promete ser bastante requisitada pelo mercado de trabalho: Teste de software.

A certificação de testador de software habilita avaliar a qualidade das aplicações dentro de padrões internacionais para corrigir falhas de programas ainda na fase inicial. É uma mão-de-obra que começa a ser valorizada no Brasil por desenvolvedoras, compradores de serviços e órgãos de governo.

Segundo Osmar Higashi presidente do BSTQB (Brazilian Software Testing Qualifications Board), braço oficial do ISTQB (International Software Testing Qualifications Board  , o credenciamento em teste de software é uma disciplina nova no mercado brasileiro e espera atingir a mesma maturidade adquirida pelos selos que habilitam engenheiro de software.

A BSTQB (Brazilian Software Testing Qualifications Board) iniciou operação em 2006 é uma das instituições internacionais que testam o conhecimento de talentos. Higashi diz que a certificação em teste de software é bastante requisitada em outros países, mas no Brasil é uma novidade recente. Ele acredita que será bastante (ou mais ) valorizada pelas organizações por causa do crescimento do mercado brasileiro de T.I.

Um exemplo é as empresa de T.I que tem como cliente órgãos do governo, onde é cobrado rigorosamente o processo de teste de software.  Como o numero de empresas /projetos são maiores que o numero de profissionais capacitados então considero um investimento  valido para médio/longo prazo.

Outro exemplo é a chegada do 3G (celular) onde vai exigir o desenvolvimento de novas soluções embarcadas para os terminais moveis, abrindo oportunidades para testadores de software, já que todas as aplicações precisam passar por extensões avaliações antes de entrarem em produção.

Higashi observa que companhias estão investindo na contratação de profissionais com essa qualificação para desenvolver software com qualidade dentro do orçamento e prazo estabelecidos.

Em outros países, a cerificação de Testes em Software já é muito procurada pelos profissionais para aprimoramento da carreira. Na Índia, por exemplo, há mais de dez mil profissionais com esse selo.

O papel do testador

A função é analisar as aplicações para que os bug possam ser corrigidos durante o desenvolvimento. O trabalho do testador começa na etapa inicial antes de algum código ser escrito.

Higashi diz que falhas em uma aplicação, alem de encarecer o preço final da solução, podemos trazer muitos problemas para as corporações. Um bug numa aplicação de internet banking pode trazer transtornos para o banco.

Então imagine se o banco que você tem conta e o sistema tem um bug que começa a “esquecer” daquele empréstimo de 10 mil. Nem precisa falar nas conseqüências…

“O teste de software evita retrabalho e da mais credibilidade aos serviços” diz Fernando diretor geral da QAI (Quality Assurance Institute) centro instituição internacional que credencia testadores, que chegou ao país em 2006. A QAI (Quality Assurance Institute) já certificou 60 talentos no Brasil em dois selos: CSTE (Certified Software Tester) e CSQA (Certified Software Quality Analisty).

Requisitos para certificação

As certificações emitidas pelos dois institutos  acima são reconhecidas no Brasil e exterior.

No QAI (Quality Assurance Institute), os candidatos devem ter experiência mínima  em T.I de seis anos, que pode ser somado com o curso superior e tempo de trabalho. A taxa de inscrição custa U$350,00. E quem optar por fazer o curso a media é de R$ 2.000,00.

Na BSTQB há uma alternativa de o aluno baixar o material na internet para estudo, e mandar ver por conta própria. A taxa da prova é R$ 350,00.

A BSTQB – certificou 140 profissionais com a CTFL (Certified Tester, Foundation
Level)
. A QAI certificou 60 talentos com: CSTE (Certified Software Tester) e CSQA (Certified Software Quality Analisty).

A CBTS (Certificação Brasileira de Teste de Software) capacitou mais de 140 profissionais.

As informações sob re os selos podem ser obtidas nos sites das credenciadoras:

http://www.bstqb. org.br/
http://www.qaibrasi l.com.br/ index.php
http://www.alats. org.br/Default. aspx?tabid= 28

De olho no mercado

Vaga para Testador, em 19/05/2008

Convidamos você a participar da nossa seleção para Testador de Código (TESTER).

Requisitos:
• Curso superior (completo ou em fase de finalização) em Análise de Sistemas, Ciências da Computação ou Administração.
• Experiência mínima comprovada de 06 meses na função.
• Experiência em Requisito de Caso de Teste (RCT).

Habilidades:

• Disciplinado, dinâmico, comprometido, criativo e com boa comunicação interpessoal

Os currículos devem ser enviados para rh@naconsult.com.br com assunto Testador.

Visite nosso site www.naconsult.com.br

Espero que tenham gostado do post! E fica ai mais uma área para se investir à médio/longo prazo de acordo com o mercado. Acredito que seja um bom investimento a ser feito.  Levando em conta que ele custa R$ 350,00 + tempo + material ou R$ 350,00 + tempo + curso + material.  Porem a escolha é de cada um.

Bom em minha opinião a função de testador de software não vem para solucionar todos os problemas existentes no desenvolvimento de software, porém é mais uma ferramenta em mãos.

Um abraço a todos a ate a próxima!!

A busca – metodologia de estudo

Salve! Salve! Pessoal!  Para começar a semana! resolvi montar mais um post sobre estudo(s) para auxiliar, aos colegas, visitantes e amigos, que querem buscar um e-mail para estudar de forma disciplina e produtiva. Claro que o exposto aqui, é apenas minha experiência, e materias de que li sobre especialistas na área.

let’s go..

Alguns colegas me perguntam onde encontrei “tantas” metodologias de estudo para área?! Bom primeiro foi usar o velho Google, e daí buscar artigos, discussão etc. Em primeiro momento não fazia um filtro no que encontrava simplesmente arquivava e depois imprimia lia todos e separava o que considerava útil para meus estudos e meu perfil.

Outro ponto importante é não se conformar com os resultados na primeira tentativa, sempre buscar mais, porém o ponto importante é como pesquisar? Usar palavras relacionadas ao que deseja influencia em encontrar novos materiais. Veja alguns exemplos:

 

Como estudar

Dicas para estudo

Estudando em casa

 

Vimos que os resultados sofreram alterações e nisso você pode encontrar ótimo, excelente matérias, com dicas para estudo (consultar apenas a primeira pagina do Google, não é o suficiente).

Mas um ponto chave é que as metodologias encontradas servem para uns mais não pode servir para outros. Porém ajuda a encontrar a sua.

Há pessoas que somente estuda com um professor, com um amigo, ou em grupo. Há outras que prefere estudar sozinho sem ninguém por perto. Porém isso é algo muito pessoal. E há pessoas que tem uma vontade enorme de estudar usando livros, apostilas, web buscando economizar $$, porém falta disciplina. Ou seja, não adianta ter uma estante de livros (os mais conceituados), porém faltar à disciplina. Mas se você tem vontade então busque a disciplina e descubra como seu cérebro armazena as informações da melhor forma possível. O cronograma que desenvolvi e que mais se adequou a minha modalidade de estudo de acordo com meu tempo livre (durante a semana, feriados e finais de semana). Outro fator que considero importante é traçar metas e buscar alcançá-la. Tem que ter disciplina para fazer as atividades de cada dia e não deixar acumular. Não perder o foco é fundamental.

No meu caso, cada semana é um cronograma novo de acordo com o período especificado e são segmentados, durante a semana estudo X e nos finais de semana Y.

 Todas as sextas-feiras, faço “estudo do final da semana”, e todos os domingos desenvolvo os estudos da semana e caso tenha ficado  algo pendente da ultima semana acrescento de imediato.

Enfim independente qual seja sua maneira de estudar você vai precisar de alguma metodologia para evoluir seu conhecimento de maneira mais rápida e isso vai exigir um esforço físico e psicológico. Há um ditado assim: “sem esforço, não há recompensa” conhecido no inglês como: “No pain no gain”.

 

Dicas que pesquisei

 

Espero ter ajudado aqueles que buscam, ou querem melhorar seus estudos.  Mas é importante lembrar que nada aqui foi comprovado cientificamente, são apenas nomeações que serviram para me, mas para você não pode servir.

Até a próxima!

Bye!

Boas práticas de programação Assert

Salve! Salve! Pessoal! Hoje vou falar Assert – Assertions. Quem está estudando para certificação ou java 1.5 / superior , em algum capitulo vai se deparar com a tecnica de assert. Mas a questão que ja vi  é: Para que serve mesmo? Parece que é igual ao comando if/else. Não consigo entender…
Bom vou buscar nesse post explicar um pouco da tecnica com base no livro Certificação Java – exame 310-055 – da kathy.

let’s go…

 A partir da vesão 1.4, o recurso de assertivas (assert) permitirão que você teste suposições durante o desenvolvimento sem o desgaste de escrever manipuladores para exceções que se supõe nunca ocorrerão, uma vez que o programa tiver saído da fase de desenvolvimento e for totalmente distribuído.

Se você não quer perder tempo ou trazer impacto ao desempenho do programa escrevendo um código de manipulação de exceções ou não deseja teste IF/else já que se chegar a condição else, significa que a lógica anterior falhou então  as assertivas permite que você teste suas suposições durante a fase de desenvolvimento.

 

Assertivas funcionam de maneira bem simples sempre que você quer ter certeza que o valor testado jamais pode vai ser falso caso contrario m erro  AssertionError (que não é possível manipular) é lançado.

assert (boolean) : string;

Entre (  ) sempre terá que ser um valor booleano e true, caso contrario uma exceção é lançada (AssertionError).

Por padrão assert vem desabilitado para desfrutar do recurso é necessário ativá-lo.

1.Compilando

javac  -source 1.5 classe.java

2.Habilita

java –ea classe

ou

java –enableAssertion minhaclss

3.Desabilita

java –de classe

ou

java –disableAssertion classe

Regras de uso Assert:

-Assertion não pode ser usado no lugar do IF

-Assertion não pode testar métodos públicos ou argumento digitado pelo usuário

-Não pode apresentar efeitos colaterais* no programa. Ou seja, o seu programa deve rodar tanto com ele habilitado ou não.

 Usar assertivas capazes de causar efeitos colaterais pode levar a alguns dos bugs mais enlouquecedores e difíceis de encontrar (Kathy Sierra, 2006)

Não é objetivo de assertivas substituir o uso IF/ELSE, tratamentos de exceções. O uso de assertivas é no ambiente de desenvolvimento (debug) e não distribuição.

Na prática:

class Asert{

      private static void setD(int z){

            boolean b=true;

            assert(z>0):” alguém alterou o valor da linha 3 “;

            assert(b=false);

            System.out.println(z);

      }

      public static void main(String args[]){

            setD(1);

      }}

………………

class Assert{

      //usando assertivas    

      public static void main(String args[]){       

            int taxajuros=4;

            assert(taxajuros==2):“algum programador mudou o valor da int taxajuros na linha 6”;

            System.out.println(true);

      }}

Agora basta compilar com assert, e ativar em tempo de execução! E verificar a essência desse recurso.

Eu mesmo tenho habito de usar assertivas, acho uma boa pratica de programação. Espero que tenham gostado e até a próxima!!