thegoodfellas/blogset-br huggingface dataset:
Usuario criada:Usuario.hbm.xmlAlem disso devemos incluir ao arquivo hibernate.cfg.xml:<mapping resource=sbusca/Usuario.hbm.xml> </mapping>Apos todas estas codificacoes teremos duas entidades: Usuario e Sites. Alem delas vamos definir uma classe chamada MotorBusca, que fara a logica mais importante do sistema, isto e, a busca em si. Nao e nada complicado e seria possivel fazer o codigo diretamente nos Actions do Struts, mas vamos abusar um pouco de orientacao a objeto. Olhando este exemplo simples quem sabe em um trabalho mais complexo voce nao se intimide. A classe devera ter: MotorBusca:Propriedade keyword: String e metodo executar() com e sem parametro;E o codigo da classe ficara:MotorBusca.javaJa definimos nesta aula um modelo quase completo para o nosso sistema. Deixei para depois somente o Cadastro de Sites, pois para implementa-lo sera necessario falarmos de um CRUD, tambem conhecida como tela de Cadastro. Iremos ter uma aula somente sobre isso, quando voltaremos para tornar completo o modelo.Para que voce possa verificar se a busca esta funcionando, criei uma classe simples de teste:TesteBusca.javaDuvidas? Comente!Pois e senhores, esta e a ultima aula do curso de programacao para Web em java.
O Java SE 7 e a ultima versao para Java que contem muitos recursos novos, melhorias e correcoes de bug para melhorar a eficiencia para desenvolver e executar os programas Java.Aqui esta um breve resumo das melhorias incluidas com a versao Java SE 7:Desempenho, estabilidade e seguranca melhorados.Melhorias no Java Plug-in para desenvolvimento e implantacao dos Aplicativos Rich Internet.Melhorias na linguagem de programacao do Java que permite aos desenvolvedores gravar e otimizar o codigo Java do facilidade.Melhorias na maquina virtual do Java para suportar as linguagens nao Java.Por que o Java SE 7 ainda nao esta disponivel no java.com?A nova versao do Java esta disponivel primeiramente para desenvolvedores para garantir que nao sejam encontrados maiores problemas antes de disponibilizarmos no site java.com para usuarios finais para fazerem download da ultima versao.MAIS INFORMACOES TECNICAS Se voce e um desenvolvedor e esta interessado em fazer download, va para downloads do Java SE 7.Se voce e um desenvolvedor e quer obter mais informacoes sobre os recursos incluidos nesta versao, consulte a documentacao do Java SE 7. Palavras-ChaveNa linguagem Java, 49 sao as palavras chaves e voce devera memoriza-las. Nao tente fazer como faziamos no ensino fundamental para decorar a tabuada (como era dificio a do 9, lembra?), essa assimilacao sera com o tempo, mesmo assim, de uma olha na lista a seguir, e observe que TODAS as palavras chaves sao definidas em letras minusculas:byte - short - int - long - char - booleandouble - float - public - private - protectedstatic - abstract - final - strictfp - transientsynchronized - native - void - class - interfaceimplements - extends - if - else - dodefault - switch - case - break - continueassert - const - goto - throws - thrownew - catch - try - finally - returnthis - package - import - instaceofwhile - for - volatile - superNao tente decorar todas elas, tente entender o que elas fazem, isso sera possivel com o desenvolver dos capitulos.LEMBRE-SE: null, false, true (Nao sao palavras chaves, sao valores literais!)Tipos primitivos:byte - Inteiro de 8 bits com sinalshort - Inteiro de 16 bits com sinalint - Inteiro de 32 bits com sinallong - Inteiro de 64 bits com sinalchar - Caracter Unicode (16 bits sem sinal)float - Ponto flutuante de 32 bits com sinaldouble - Ponto flutuante de 64 bits com sinalboolean - Valor indicando true ou falseModificadores de acesso:private - Define que um metodo ou variavel seja acessada somente pela propria classe protected - Faz com que uma subclasse acesse um membro da superclasse, mesmo estando em pacotes diferentespublic - Faz com que um identificador possa ser acessado de qualquer outra classe.Modificadores de classe, metodos e variavel:abstract - Define uma classe abstrata class - Define a implementacao de uma classeextends - Define qual a hierarquia de classes, quem e a superclassefinal - Faz com que um identificador nao possa ser alteradoimplements - Faz com que uma classe implemente todos os metodos de uma interfaceinterface - Define uma interfacenative - Define que o metodo sera escrito em linguagem nativa como C, C++new - Instancia um
novo objeto na pilhastatic - Defina um identificado de classe e nao de instanciastrictfp - Define que o metodo esta segundo o padrao IEE754synchronized - Define que um metodo so podera ser acessado por uma unica thread por veztransient - Faz com que uma variavel nao seja serializadavolatile - Indica que uma variavel pode nao ficar sincronizada ao ser usada por threadsControle de Fluxo:break - Faz com que o fluxo seja desviado para o fim do blococontinue - Muda o curso do fluxo para a proxima iteracao do loopif - Testa o valor logico de uma condicaoelse - Indica qual o bloco que devera ser executado caso o teste feito pelo if seja falsodefault - Bloco que sera executado caso nenhuma condicao case satisfaca o swicthswitch - Iniciar uma sequencia de testes para uma variavel a ser testada pelo casecase - Testa o valor de uma variavel indicada pelo switchfor - Usado para executar um bloco quantas vezes forem necessarias para satisfazer sua condicaodo - Executa um bloco quantas vezes a condicao se fizer verdadeira. A condicao e testada depois do blocowhile - Executa um bloco quantas vezes a condicao se fizer verdadeira. A condicao e testada antes do blocoreturn - Finaliza a execucao de um metodo, podendo opcionalmente retornar um valorinstanceof - Testa se um objeto e instancia de uma classe qualquerTratamento de erros:catch - Define o bloco de decisao que executara se por acaso ocorrer no bloco try uma excecao pre-definidafinally - Bloco que sempre sera executado, mesmo que uma excecao seja lancadathrow - Lanca uma excecaothrows - Indica que um metodo pode lancar algum tipo de excecaotry - Iniciar um bloco com auditoriaassert - Usado no projeto, testa uma expressao para verificar alternativas para o programador.Controle de pacotes:import - Importa uma ou todas as classes de um pacotepackage - Define que a(s) classes farao parte de um pacote; Variaveis/Heranca:super - Refere-se a superclasse imediatathis - Refere-se a instancia do objeto Retorno:void - Define que um metodo nao retorna nadaReservadas mas nao utilizadas:const - Nao use para definir uma variavel, use finalgoto - Nao serve para nadaTipo primitivos:Voce precisara saber "tudo" sobre os tipos primitivos, suas faixas de valores, valores padroes, conversoes implicitas e explicitas, e muito mais. Por isso, prepare-se o seu pesadelo comecou! Mas nao se preocupe, com um pouco de fe e perseveranca, tudo se resolve! A Java e composta por 8 (oito) tipos primitivos, e como voce ja deve ter percebido, todos comecam com letras minusculas (pois tambem sao palavras chaves), portanto se voce for tiver que responder uma pergunta onde aparece perguntando por exemplo se String e um tipo primitivo, nao hesite em responder que NAO!Outro conceito importante sobres os tipos primitivos em Java e que todos os tipos numericos tem sinal. Mas o que isso significa? - deve ter vindo a sua mente! Significa que podem ser negativos ( - ) ou positivos ( + ), ou seja, o tipo int pode ter o numero -1 como tambem o numero +1. Observe a tabela de valores abaixo:tipo bits formula faixa byte 8 -2^7 a
2^7-1 -128 a +127 short 16 -2^15 a 2^15-1 -32768 a +32767 int 32 -2^31 a 2^31-1 -2147483648 a +2147483647 long 64 -2^63 a 2^63-1 -9223372036854775808 a +9223372036854775807 Dica sem onus: Lembre-se da palavrinha bsil (ja esta no aurelio), que indica os tipos b-byte, s-short, i-int, l-long ! Pois "1 byte e representado por 8 bits", isso ate Hitler morreu sabendo!Entendendo essa formula maluca...Voce deve estar se perguntando, porque deve elevar a 7 (sete) no caso do byte e nao a 8 (oito), certo ? 1 Bit e usado para guardar o sinal. E porque so subtrai -1 da faixa positiva ? Porque o zero e incluido no intervalo tambem. Se ainda ficou confuso, vamos fazer um teste. Um regra nos sabemos: o tipo byte em Java e representado por oito bits. Se 1 bit e usado para guardar o sinal (+) ou (-), entao sobrou 7 bits para representar um numero. Se convertermos o numero +125 em bits teremos 1111101 e ficaria representado da seguinte forma: 01111101 (observe que o zero inicial indica que e um numero positivo, estranho mas se o primeiro digito fosse um 1, seria um numero negativo). Agora se convertermos o numero +128 em bits, teremos 10000000, como esse numero e composto por oito bits nao e possivel adicionar o bit do sinal portanto o numero 128 positivo nao esta no intervalo do tipo byte, e esta na faixa negativa pois o bit mais significativo a esquerda e 1 que indica sinal negativo. Quais os bits representam o numero 127 ?Tipos primitivos (nao acabou):Os demais tipos primitivos sao: char, float, double, boolean !char - E representado por caracter Unicode de 16 bits (sem sinal). Tambem pode ser representado por um numero inteiro de 16 bits sem sinal, ou seja, pode-se atribuir a uma variavel char o valor 100 ou 14555 ou 65535, mas nao 65536 ! Pois essa e a faixa de valores da tabela Unicode para representacao de caracteres de qualquer idioma. Mas a unica coisa que voce precisa saber e a faixa de valores do tipo char. 2 ^ 16 - 1 = 65535 (valores possiveis). float - E um tipo numerico ponto flutuante de 32 bits (COM SINAL) !! Apesar de ter um tamanho definido por 32 bits, nao e necessario saber a faixa de valores. double - E um tipo numerico ponto flutuante de 64 bits (COM SINAL) ! Apesar de ter um tamanho definido por 64 bits, nao e necessario saber a faixa de valores. boolean - Um valor que indicado pelos valores literais: true ou false.Conversoes implicitas/explicitas:Voce pode sempre que precisar, fazer conversoes entre os tipos numericos, mas uma regra nao pode ser quebrada: nunca voce podera convertar um tipo de maior valor (bits) em um numero de menos valor. Por exemplo: 1. public class Conversao { 2. public static void main(String[] args) { 3. int x = 10; 4. long y = 20; 5. y = x; // perfeitamente possivel 6. x = y; // nao e possivel 7. x = (int)y; // quero correr o risco e deixa eu
queto ! 8. } 9. } Na linha 5 houve um conversao implicita perfeitamente possivel pois o tipo da variavel y e long, ou seja, maior que o tipo da variavel x.Na linha 6 houve um tentativa de conversao, mas o compilador nao permitira essa operacao, pois o tipo long e maior que int.Na linha 7,uma conversao explicita foi realizada e o compilador gentilmente atendeu a solicitacao do programador.Literais Inteiros:Um valor literal em Java e um valor escrito no codigo fonte e identificado como um tipo primitivo como por exemplo: int x = 10; // literal inteiro char u = 'k'; // literal char boolean b = false; // literal boolean double d = 9832.11; // literal double Ha tres maneiras de representar valores inteiros em Java: octal (base 8), decimal (base 10) e hexadecimal (base 16) ! Sera bom voce estudar um pouco sobre esses sistemas de numeracao, pode-se que os sacanas dos caras que fazem a prova, possa testar voce em alguma questao! Mas observe o codigo abaixo e veja como se representam valores literais em octal e hexadecimal (pois decimal voce viu acima): public class Octal { public static void main(String[] args) { int seis = 06; // idem ao decimal 6 int sete = 07; // idem ao decimal 7 int oito = 010; // idem ao decimal 8 int nove = 011; // idem ao decimal 9 } } Ou seja, se voce ver o numero 0 antes de um numero, saiba que esta representando um numero octal.public class Hexadecimal { public static void main(String[] args) { int quinze = 0xF; // 15 (decimal) int vinte_e_nove = 0x1D; // 29 (decimal) int vinte_e_nove = 0x1D; // 29 (decimal) int valor = 0xBAFAFA; // 12253946 (decimal) int valor = 0XBaFaFa; // 12253946 (decimal) } } Deve vir precedido do sufixo (0x) ! E um dos poucos casos na linguagem em que nao importa se as letras forem maiusculas ou minusculas. Todos os tipos inteiros literais (tanto octal quanto hexa) sao por padrao definidos como int, portanto se ver no exame um questao que atribui a uma variavel menor que int (em bits) isso dara erro de compilacao. Veja o codigo a seguir:1. public class ConversaoHexa { 2. public static void main(String[] args) { 3. int a = 0xbafa; // ok, sem conversao 4. long b = 0xfff; // ok, conversao implicita 5. long c = 0xfffL; // ok, conversao explicita 6. byte d = 0xf; // ok, conversao implicita 7. byte e = 0xff; // erro! - 255 nao e comportado 8. byte f = (int)0xff; // erro! - 255 nao e comportado 9. } 10.} Na linha 6 o compilador sabe que F em hexa equivale a 15, o que pode ser perfeitamente suportado no tipo byte, entao ele realiza a conversao.Na linha 7 o compilador sabe que FF em hexa equivale a +255 o que nao pode ser suportado, por isso, erro!Na linha 8 o compilador so nao chinga o programador por conflito de drivers entre seu sistema operacional com sua placa de som, ou seja,
mas intimamente ele fala: CARA OLHA O QUE VOCE ESTA QUERENDO ME FORCAR A FAZER !!! (%#%$!#%)Literais de ponto flutuante:Um valor literal de ponto flutuante por padrao em Java e definido com double de 64 bits, portanto de voce quiser atribuir um valor literal float voce devera adicionar o sufixo f no final do valor como o exemplo:1.public class Teste { 2.public static void main(String[] args) { 3.double a = 9223372036854775807.0; // ok tipo double 4.float b = 2147483647; // ok tipo int para float conv implicita 5.float c = 2147483647.0; // erro! double -> float 6.float d = (float)2147483647.0; // ok - conversao 7.float e = 2147483647.0f; // ok 8.} 9.} Na linha 4, funciona pois 2147483647 e um literal int e nao double! Nao tem decimal !Na linha 5, o compilador reclamara pois 2147483647.0 e um tipo double (o padrao dos literais de ponto flutuante) nao pode ser atribuido a uma variavel float.Na linha 6 e feito uma conversao explicita.Na linha 7 e atribuido um valor float por causa do sufixo fLiterais booleanos:Os valores literais booleanos sao compreendidos entre true ou false e so ! public class LitBoo { public static void main(String[] args) { boolean a = true; // ok boolean b = false; // ok boolean c = 1; // erro de compilacao } } Cuidado que em Java diferentemente de C e outras linguagens nao se pode atribuir o valor 0 ou 1 para literais booleanos.Literais Caracteres:Os valores literais caracteres sao compreendidos com um unico caracter entre apostrofo - se voce nao sabe o que e apostrofo, e o mesmo que aspas simples 'public class Carac { public static void main(String[] args) { char a = 'a'; // ok char b = '@'; // ok char c = '\u004E'; // refere-se a letra N } } Como foi falado, o tipo char nada mais e do que um tipo inteiro sem sinal de 16 bits, portanto voce podera atribuir 2 ^ 16 - 1 = 65535. Veja no codigo abaixo: public class A { public static void main(String[] args) { char a = 65; char b = (char)-65; // fora do intervalo, precisa de conversao char c = (char)70000; // fora do intervalo, precisa de conversao } } O tipo char pode aceitar valores fora de sua faixa, desde haja uma conversao explicita.ARRAY Um array em Java e um objeto criado na pilha (memoria), usado para armazenar e trabalhar com elementos semelhantes por seu tipo.Para que se possa utilizar um array voce devera: Declarar - Especificar um nome e o tipo do array.Construir - Informar o tamanho do array, ou seja, numero de elementos.Inicializar - Atribuir valores aos elementos do array. Declarando um arrayint[] a; // RecomendadoThread b[];String []c;Observe que ainda nao se sabe quantos elementos esses array armazenara, ou seja, nao sabe qual sera o custo para a memoria desse array. Nunca coloque a quantidade de elementos do array no passo de declaracao, a nao ser que voce faca tudo em uma unica linha (isso sera mostrado posteriormente). Se voce ver uma questao onde aparece algo
como no trecho a seguir, marque sempre erro de compilacao.int[3] a; // so pode mencionar a quantidade de elementos, na construcao :shock: Construindo um arrayint[] a = new int[3]; // Recomendado :o Thread b[] = new Thread[1];String []c = new String[19];Usa-se a palavra new conjugada com o tipo do array. Nunca se esqueca, em Java a contagem dos elementos SEMPRE COMECARA EM 0 (ZERO), portando uma referencia ao elemento a[3] (no array a acima) causara um erro, pois so existem os elementos 0, 1, 2 -> com um total de 3 elementos. Esse passo reserva espaco na memoria para os elementos do objeto array, pois somente na construcao que a JVM sabera quantos elementos serao composto o array, com isso cria-se um objeto na pilha com espaco necessario para armazenar os elementos do objeto. No passo de construcao, todos os elementos sao inicializados com seus valores padrao. Veja a tabela a seguir:TIPO VALOR PADRAO byte 0 short 0 int 0 long 0 float 0.0 double 0.0 boolean false char '\u0000' Object nullInicializando um arrayAtribuir valores aos elementos de um objeto array. Quando um array e contruido, seus elementos sao automaticamente inicializados com seus valores padrao. int[] x; // declaradox = new int[2]; // construindox[0] = 10; // inicializandox[1] = 20; // inicializandoObserve o seguinte codigo:1.public class ArrayInicia { 2.public static void main(String[] args) { 3.float[] f; 4.f = new float[1]; 5.System.out.println("valor antes "+f[0] ); 6.f[0] = 9.0; 7.System.out.println("valor depois "+f[0] ); 8.} 9.} O que sera impresso na linha 5 e 7 ??? ( Feche os olhos e responda !!, Nao vale olhar...) Se voce respondeu 0.0 e 9.0, parabens por voce ser uma pessoa de opniao! Mas infelizmente voce errou !!! Lembra-se que todo valor literal ponto flutuante em Java e por padrao double, portanto esse codigo nao compila. Se alterarmos esse codigo e adicionar o sufixo f na linha 6 => f[0] = 9.0f;, o resultado seria 0.0 e 9.0, por isso: PRESTE MAIS ATENCAO !!! :x Os tres passos para a utilizacao de um array: declaracao, construcao e inicializacao podem ser realizados em uma unica linha de codigo. EUREKA !!! :!: boolean[] c = { false, true, false };int[] a = {0,1,1,1};char[] b = {'a','b','c'};Observe que a palavra chave new nao foi utilizada, visto que esta implicito o tipo no inicio, o numero de elementos entre as chaves { }. Caso voce se depare com uma questao (como o codigo abaixo) que especifica o numero de elementos juntamente com a inicializacao na mesma linha, nao hesite em marcar a resposta: Erro de compilacao !!! int[3] a = {1, 2, 1}; // erro de compilacao :x Array MultidimensionalUm array multidimensional e um array com mais de uma dimensao (isso e ridiculo de dizer!), ou seja, e uma colecao de objetos array dentro de um objeto array. Portanto um array definido como: int[][] i = new int[3][]; nada mais e do que um objeto array i que contem tres objeto array (ainda nao construido) dentro. (Complicado?) int[][] i = new int[2][];O que isso significa ? O que sao os elementos de
i ?? Significa que foi criado um objeto na pilha chamado a, e seus elementos ainda nao foram contruidos. Para utilizar seus elementos, voce devera construi-los como mostra o codigo a seguir:i[0] = new int[2]; // construido o elemento 0 do array ii[1] = new int[3]; // construido o elemento 1 do array iQuantos objetos foram criados na pilha ?1 referenciado por a2 referenciados por a[0] e a[1]Total de objetos criados: 3 (tres)Agora observe o seguinte codigo:public class TestArray { public static void main(String[] args) { String s = new String("Kuesley"); String[] nomes = { s, null, new String("Kuesley") }; } } Quantos objetos foram criados na pilha ?? :shock: 1 obj String referencido por s1 obj array de String referenciado por nomes1 obj String referenciado por nomes[2]Observe que o elemento 0 e apenas uma referencia para s portanto nao e criado um novo objeto. O elemento 1 nao tem um objeto referenciado, ja o elemento 2 e um objeto String.Array AnonimoComo o proprio nome ja diz, e um objeto array criado sem a definicao de um nome. Imagine que voce precise passar um objeto array como parametro para um metodo, e voce nao queira criar um array, basta passar anonimamente. Veja como no codigo abaixo: public class A { public static void main(String[] args) { A obj_a = new A(); int soma = obj_a.somarArray( new int[] { 0,1,2,3 } ); System.out.println("Soma do array e: "+soma); } public int somarArray( int[] a ) { int rc = 0; for ( int i=0; i < a.length; i++) { rc += a[i]; } return rc; } } Observe que nao foi criado um objeto array com um identificador especifico e passado como parametro, foi criado no momento em que se passara o argumento.Outro exemplo:int[][] numeros = new int[3][];numeros[0] = new int[10];numeros[1] = numeros[0];numeros[2] = new int[] { 0,1,2,3 };LEMBRE-SE: NUNCA ESPECIFIQUE O TAMANHO ENTRE OS COLCHETES, ISSO SERA DEDUZIDO DOS ELEMENTOS ENTRE O PAR DE CHAVES !!! Array - ObservacoesAlgumas regras devem ser consideradas no uso de array que referenciam objetos! Dado as classes:class Car implements CarMove { } class Mazda extends Car { } class Fusca extends Car { } class VMax { } interface CarMove { } 1. public class Test { 2. public static void main(String[] args) { 3. Car[] cars = new Car[3]; 4. Fusca f = new Fusca(); // instanciando um obj do tipo Fusca 5. cars[0] = f; 6. } 7. } Observe que na linha 5, um objeto Fusca foi armazenado em um array do tipo Car. Por que isto e possivel ?Existe um pergunta que voce sempre devera fazer, para saber se uma classe X pode ser armazenada em um array do tipo Y.X e membro de YEm nosso contexto: Fusca e membro de Car ?Em outras palavras, Fusca e uma subclasse de Car ?Se a resposta for positiva, essa atribuicao e perfeitamente possivel !Agora observe o seguinte codigo (baseando-se nas mesmas classes Car, Fusca ):1. public class Test { 2. public static void main(String[] args) { 3. Fusca[] fuscas = new Fusca[3]; 4. Car c
= new Car(); 5. fuscas[0] = c; 6. } 7. } Isso e possivel ?? Se tem duvida, faca voce mesmo e faca o teste e sem preguica !!!Aproveite e teste o seguinte:1. public class Test { 2. public static void main(String[] args) { 3. Car[] c = new Fusca[1]; 4. Fusca[] f = new Car[1]; 5. } 6. } O que acontecera com o codigo acima ?Mudando um pouco de assunto!Um objeto array de uma interface, pode receber referencias de instancias de classes que implementem essa interface.public class Test { public static void main(String[] args) { CarMove[] cm = new CarMove[4]; cm[0] = new Car(); // ok! Car implementa CarMov cm[1] = new Fusca(); // ok! Fusca implementa CarMov cm[2] = new Mazda(); // ok! Mazda implementa CarMov cm[3] = new VMax(); // erro de compilacao } } LEMBRE-SE: Vmax e membro de CarMove ???Cuidado com detalhes de atribuicoes tais como:int[] n = new int[10];int[] m = new int[] {8,2,1,2,0};n = m; // ok! mesmo tipoint[][] n = new int[3][];int[] m = new int[] {1,2,3};n = m; // erro! objetos diferentesA JVM nao elimina o objeto n da pilha e subtitui pelo valor de m!Observe tambem que o array n tem 2 dimensoes, enquanto que m tem apenas uma!Porem o seguinte codigo seria perfeitamente possivel:n[0] = m; // ok!
camada Control (controle) e a camada que controla o processo. Cada requisicao do usuario e primeiro interpretado pela camada de controle que determina qual acao deve ser executada no modelo e encaminha depois a resposta do modelo para a camada de visao. No nosso exemplo quem ira fazer toda a camada de controle sera o Struts.