tag:blogger.com,1999:blog-58654291073163624172024-03-13T10:28:27.212-07:00Pinguim na Janela tomando caféUnknownnoreply@blogger.comBlogger42125tag:blogger.com,1999:blog-5865429107316362417.post-49193417802275005242011-02-19T12:57:00.000-08:002011-02-19T13:06:25.403-08:00JSF – Inicio Rápido – Final<span style="font-size: small;"></span><br />
<span style="font-size: small;"><a href="http://pinguimtomandocafe.blogspot.com/2011/02/jsf-inicio-rapido-parte-5.html" target="_self">PASSO ANTERIOR (PASSO 5).</a></span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Agora vamos a melhor parte do nosso projeto, os testes!<br />
</span><br />
<span style="font-size: small;">Veremos agora se tudo o que fizemos nos passos anteriores deu certo.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Primeiramente abra o navegador e digite <span style="color: red;"><b>http://localhost:8080/ProjetoX</b></span> (ou o nome do seu projeto caso tenha utilizado outro).</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Abriu a página inicial (<span style="color: #999999;">menu.jsp</span>)?</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Se a resposta for afirmativa, teste a navegação, acesse o cadastro, veja como seu projeto está funcionando.<br />
</span><br />
<span style="font-size: small;">Se a resposta for negativa acredito que o <b>server.xml</b> não foi configurado automaticamente pela IDE, então vamos fazer a configuração manual.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Abra o arquivo <b>server.xml</b>, que está localizado dentro da pasta <b>conf </b>do seu Tomcat (<a href="http://codeerror.wordpress.com/2009/04/28/javaeetomcat-preparando-o-ambiente-de-desenvolvimento/" target="_blank">instalou o Tomcat né?</a>).<br />
</span><br />
<span style="font-size: small;">Vá para o final do arquivo e procure alguma tag parecida com esta:</span><br />
<blockquote><span style="font-size: small;"><span style="color: #888888;"><i><Host appbase=”webapps” name=”localhost”………..<br />
<!– Um monte de comentários –><br />
</Host></i></span></span></blockquote><span style="font-size: small;"><span style="color: #333333;">Esta tag indica que sempre que digitarmos <b>localhost:8080</b> no navegador, alguma página (a do tomcat)</span> irá abrir.<br />
</span><br />
<span style="font-size: small;">Mas não queremos ver a página do Tomcat, queremos ver a nossa página!</span><br />
<span style="font-size: small;">Então entre as tags <b><Host></b> e <b></Host></b>, alí onde estão os comentários, insira a seguinte tag:</span><br />
<blockquote><span style="font-size: small;"><i><span style="color: green;"><Context</span> <span style="color: red;">path=</span><span style="color: blue;">“/ProjetoX”</span> <span style="color: red;">docBase=</span><span style="color: blue;">“c:\projetos\ProjetoX\WebContent”</span><br />
<span style="color: red;">workDir=</span><span style="color: blue;">“c:\projetos\ProjetoX\work”</span> <span style="color: red;">reloadable=</span><span style="color: blue;">“true”</span><span style="color: green;">/></span></i></span></blockquote><span style="font-size: small;">O que é isso?</span><br />
<span style="font-size: small;"><span style="color: #339966;"><b>Context </b></span>é a tag que devemos criar para indicar um contexto do localhost, um “subdominio”.<br />
<b><span style="color: red;">path=”"</span></b> </span><span style="font-size: small;"> é o nome que devemos indicar no navegador, ou seja, devemos digitar <span style="color: #999999;"><b>“http://localhost:8080/<span style="color: red;">ProjetoX</span>“</b></span>.<br />
<span style="color: red;"><b>docBase=”"</b></span> </span><span style="font-size: small;"> é o local onde estão as páginas e o <b>WEB-INF</b> de sua aplicação, neste caso o MEU projeto está em <b>c:\projetos\ProjetoX</b>, e onde está a pasta <b>WEB-INF</b>? Exato, dentro da pasta <b>WebContent</b>, então devemos informar o caminho <b>c:\projetos\ProjetoX\WebContent</b>, mas esse é no <span style="text-decoration: underline;">meu computador</span>, altere este caminho para o diretório onde a aplicação está instalada no <span style="text-decoration: underline;">seu computador</span>.<br />
<span style="color: red;"><b>workDir=”"</b></span> </span><span style="font-size: small;">, funciona da mesma maneira que o <b>docBase</b>, porém aqui devemos informar onde está a pasta <b>work </b>do projeto.<br />
<span style="color: red;"><b>reloadable=”true”</b></span> </span><span style="font-size: small;">, esta linha indica que nosso projeto está em modo de <span style="text-decoration: underline;">desenvolvimento</span>, e o servidor irá acompanhar de perto todas as mudanças que fazemos recarregando as classes do projeto todas as vezes que alguma alteração for detectada, porém para ambiente de produção, é recomendável colocar o atributo <b>false</b>, para desativar este acompanhamento de alterações.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Pronto, agora salve o arquivo e reinicie o Tomcat.<br />
</span><br />
<span style="font-size: small;">Abra o navegador e digite: <b>http://localhost:8080/ProjetoX</b>.<br />
</span><br />
<span style="font-size: small;">Se divirta!</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;"><span style="text-decoration: underline;"><b>Recomendações / Exercícios:</b></span></span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">1 – Crie novas páginas para navegação, por exemplo, crie uma nova página de cadastro, com mais campos como <i>Sobrenome</i>, <i>Endereço</i>, <i>idade</i>, etç.<br />
</span><br />
<span style="font-size: small;">2 – Crie outro <b>bean </b>para este cadastro e crie métodos para validar se é menor de idade, redirecionando para páginas diferentes caso maior ou menor de idade, exibindo páginas de “erro” caso algo esteja errado, mais especificamente, crie uma página (jsp) genérica de erro que exiba uma mensagem do bean (o outputText pega uma variável do bean), se não foi digitado o endereço, coloque a mensagem na variável do bean “<i>favor preencher o endereço”</i>, se não preencheu a idade, coloque a mensagem “<i>Favor preencher a idade</i>“, etç. e retorna para a página de erro, esta página de erro vai exibir um outputText que copia a informação contida na variável do bean, a mensagem que você personalizou no método.<br />
</span><br />
<span style="font-size: small;">3 – Não se esqueça de configurar o faces-config, definindo as regras de navegação e o managed-bean.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Agora que você chegou até aqui e seu projeto está funcionando perfeitamente, você pode gritar ai “<span style="color: #3366ff;"><b>EU SEI FAZER UM SITE UTILIZANDO O FRAMEWORK JSF!!!!!!!!!!!!!!!!</b></span>“.<br />
</span><br />
<span style="font-size: small;">E parabéns, agora você realmente conhece as principais funcionalidades do JSF, agora não pare por aqui, brinque, altere, crie, e desenvolva mais e mais páginas utilizando estas dicas.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Se quiser baixar este projeto (<b>ProjetoX</b>) finalizado e funcionando clique nestes links: <a href="http://codeerror.background.googlepages.com/ProjetoX.rar" target="_blank">RAR</a>, <a href="http://codeerror.background.googlepages.com/ProjetoX.zip" target="_blank">ZIP </a>ou <a href="http://codeerror.background.googlepages.com/ProjetoX.jar" target="_blank">JAR</a>.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Para baixar um projeto <b>JSF em branco</b>, com toda a estrutura de pastas, arquivos de configuração criados e as bibliotecas necessárias, clique nos links: <a href="http://codeerror.background.googlepages.com/Projeto_JSF_EmBranco.rar" target="_blank">RAR </a>ou <a href="http://codeerror.background.googlepages.com/Projeto_JSF_EmBranco.zip" target="_blank">ZIP</a>.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Agora é por sua conta!</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Obrigado por ter lido este tutorial, em caso de dúvidas em qualquer um dos passos, por favor comente!</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;"><b>Autor: </b><br />
<span style="color: #888888;"><b>Reinaldo Elias</b><br />
Analista de Sistemas – JavaMan<br />
reinaldo558@gmail.com</span></span> <span style="font-size: small;"><br />
<span style="color: #888888;">http://codeerror.wordpress.com</span></span><br />
<span style="font-size: small;"><span style="color: #888888;">http://pinguimtomandocafe.blogspot.com </span></span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5865429107316362417.post-89302161330775312412011-02-19T12:54:00.000-08:002011-02-19T13:06:42.594-08:00JSF, Inicio Rápido – Parte 5<span style="font-size: small;"><a href="http://pinguimtomandocafe.blogspot.com/2011/02/jsf-inicio-rapido-parte-4.html" target="_self">PASSO ANTERIOR (PASSO 4).</a></span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Se você chegou até aqui, parabéns! Já leu muita coisa e já escreveu (ou copiou…) muitas linhas de código, mas o importante não é escrever com os próprios dedos, mas sim saber o que aquele trecho de código sgnifica, o que ele faz, como ele se comporta, etç.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Apenas recapitulando um pouco:</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Criamos um Bean (<b>testeBean.java</b>) que tem um método<b> testar()</b>, este método faz uma verificação e retorna “<span style="color: red;"><b>falhou</b></span>” caso não tenha sido digitado nada na tela, ou retorna “<span style="color: red;"><b>sucesso</b></span>” caso os dois campos tenham sido populados pelo usuário.<br />
</span><br />
<span style="font-size: small;">Criamos também uma página de menu (<b>menu.jsp</b>) que tem um botão que direciona para “<span style="color: red;"><b>cadastro</b></span>“.<br />
</span><br />
<span style="font-size: small;">Criamos uma página de cadastro (<b>inicio.jsp</b>), esta página tem alguns campos que fazem referência à “<span style="color: red;"><b>teste</b></span>“.<br />
</span><br />
<span style="font-size: small;">Criamos uma página <b>sucesso.jsp</b> que tem um botão enviando para “<span style="color: red;"><b>inicio</b></span>” e uma página <b>falha.jsp</b> com um botão direcionando para “<span style="color: red;"><b>cadastro</b></span>“.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Ao longo deste projeto, criamos diversas páginas, todas apontando para algum “<i><b>apelido</b></i>“, para algum lugar imaginário que não existe. Todos estes apelidos são configurados no arquivo de configuração <span style="color: blue;"><b>FACES-CONFIG.XML</b></span>, é sobre este arquivo que iremos falar agora!</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Faces-config, o coração do projeto JSF, o arquivo que faz todas as páginas se conectarem, se conhecerem, pode ser considerado também o “orkut” de uma aplicação JSF…</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Este faces-config é um “arquivinho” xml qualquer, com algumas tags especiais que fazem o servidor encontrar todos os apelidos que distribuimos em nossas páginas.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Já criamos o arquivo nos passos anteriores, vamos então enfiar códigos nele!</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Abra o arquivo<span style="text-decoration: underline;"><span style="color: blue;"><b> faces-config.xml</b></span></span> e insira as seguintes linhas de código:</span><br />
<blockquote><span style="font-size: small;"><i> <span style="color: silver;"><?xml version=”1.0″?><br />
<!DOCTYPE faces-config PUBLIC<br />
“-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN”<br />
“http://java.sun.com/dtd/web-facesconfig_1_1.dtd”></span></i></span><br />
<span style="font-size: small;"><span style="color: #339966;"><i><faces-config></i></span></span><br />
<span style="font-size: small;"><i><!– ################### NAVIGATION ###################–></i></span><br />
<span style="font-size: small;"><span style="color: red;"><i><navigation-rule></i></span><i><br />
<span style="color: blue;"><from-view-id>*</from-view-id></span><br />
<span style="color: #ff9900;"><navigation-case><br />
<from-outcome>cadastro</from-outcome><br />
<to-view-id>/pages/inicio.jsf</to-view-id><br />
</navigation-case></span><br />
<navigation-case><br />
<from-outcome><span style="color: magenta;"><b>falhou</b></span></from-outcome><br />
<to-view-id>/pages/falha.jsf</to-view-id><br />
</navigation-case><br />
<navigation-case><br />
<from-outcome><span style="color: magenta;"><b>sucesso</b></span></from-outcome><br />
<to-view-id>/pages/sucesso.jsf</to-view-id><br />
</navigation-case><br />
<navigation-case><br />
<from-outcome><span style="color: magenta;"><b>inicio</b></span></from-outcome><br />
<to-view-id>/pages/menu.jsf</to-view-id><br />
</navigation-case><br />
<span style="color: red;"></navigation-rule></span></i></span><br />
<span style="font-size: small;"><i><!– ################### MANAGED-BEAN ###################–><br />
<span style="color: red;"><managed-bean></span><br />
<span style="color: blue;"><managed-bean-name><b>teste</b></managed-bean-name></span><br />
<span style="color: #339966;"><managed-bean-class>br.com.projetox.view.bean.testeBean</managed-bean-class></span><br />
<span style="color: #ff6600;"><managed-bean-scope>session</managed-bean-scope></span><br />
<span style="color: red;"></managed-bean></span></i></span><br />
<span style="font-size: small;"><span style="color: #339966;"><i></faces-config></i></span></span></blockquote><span style="font-size: small;">Agora o que interessa, a explicação!</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">As primeiras linhas:<br />
<i><span style="color: #999999;"><i><?xml version=”1.0″?><br />
<!DOCTYPE faces-config PUBLIC<br />
“-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN”<br />
“http://java.sun.com/dtd/web-facesconfig_1_1.dtd”></i></span> </i></span> <span style="font-size: small;">indicam que tipo de arquivo é este, são <span style="text-decoration: underline;">tags padrões</span> que devem estar no cabeçalho de cada arquivo XML, dependendo da funcionalidade do arquivo as propriedades destas tags mudam um pouco, estas indicam que o arquivo é um “faces-config”<i>.</i></span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">As tags<i> </i><span style="color: #339966;"><b><faces-config></faces-config></b></span> presentes no inicio e no fim do arquivo indicam o começo e o fim dos comandos de configuração<i>.<br />
</i> </span><br />
<span style="font-size: small;">Assim como em <span style="color: #999999;">JavaScript </span>todos os comandos devem ser scritos dentro das tags<span style="color: #999999;"> <script></span> e <span style="color: #999999;"></scritp></span>, todos os comandos de configuração do faces-config devem ser escritos entre as tags <span style="color: #339966;"><b><faces-config></faces-config></b></span>, se você escrever alguma coisa fora não vai conseguir nem acessar a aplicação.<i>..</i></span><br />
<span style="font-size: small;"><i><br />
</i><b><span style="color: red;"><navigation-rule></span></b> e<b><span style="color: red;"></navigation-rule></span></b><i><br />
</i><b><span style="text-decoration: underline;"> </span></b></span><br />
<span style="font-size: small;"><b><span style="text-decoration: underline;">Regras de navegação.</span></b><i><br />
</i>Dentro destas tags indicaremos todas as nossas regras de navegação, mas o que seria uma regra de navegação? Seria basicamente informar: “saindo do jsp X, vai para o jsp Y”. Vamos ver com mais detalhes nas tags que estão dentro das navigation-rules<i>.</i></span><br />
<span style="font-size: small;"><span style="color: blue;"><from-view-id>*</from-view-id></span><i><span style="color: blue;"><br />
</span></i><span style="color: blue;"><span style="color: #333333;">Aqui estamos informando “saindo da jsp X…”</span><span style="color: #333333;">, neste caso não temos uma regra específica, apenas informamos *, ou seja, qualquer página. Isso significa que não importa de onde venha a solicitação sempre terá o o destino, então a nossa “frase”</span><span style="color: #333333;"> ficaria mais ou menos assim: “Saindo de qualquer lugar, vai para o jsp Y” </span></span><i><span style="color: blue;"><span style="color: #333333;">…</span></span></i><br />
<i><span style="color: #ff9900;"><navigation-case><br />
<from-outcome>cadastro</from-outcome><br />
<to-view-id>/pages/inicio.jsf</to-view-id><br />
</navigation-case></span></i></span> <br />
<span style="font-size: small;">Estas tags indicam o destino, o “vai para o jsp Y” e aqui definimos os apelidos dos destinos.<br />
Todos os mapeamentos de destinos devem estar entre as tags <b><navigation-case></b> e <b></navigation-case></b>.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">A tag <span style="color: #ff9900;"><from-outcome></span><span style="color: #ff6600;"><b>cadastro</b></span><span style="color: #ff9900;"></from-outcome></span> é muito importante, aqui que configuramos um de nossos “apelidos”, neste caso o apelido “<b>cadastro</b>” que informamos na página <i><b>menu.jsp</b></i>, e também na página falha.jsp. Ou seja, a página menu.jsp, por exemplo, tem um link que direciona para o apelido “cadastro”, quando este link for acionado o servidor vai procurar o arquivo faces-config.xml, e perguntar para ele quem é “cadastro”, o faces-config por sua vez vai informar para o servidor que “cadastro” é…</span><br />
<span style="font-size: small;"><to-view-id>/pages/inicio.jsf</to-view-id> esta linha que indica que página o apelido cadastro deve chamar, neste caso estamos chamando /pages/inicio.jsf, note que estou chamando uma página com a extensão JSF e não com a extensão JSP, conforme explicação no passo anterior.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Então, de acordo com esta regra de navegação, sempre que de qualquer lugar do projeto alguem clicar em algum link “cadastro” a página inicio.jsp será acionada.</span><br />
<blockquote><span style="font-size: small;"><span style="color: silver;"><i><span style="text-decoration: underline;"><b>Nota adicional</b></span>: Se quisermos deixar a arquitetura um pouco mais fechada, por exemplo, não queremos que “<b>cadastro</b>” seja chamado de qualquer lugar do projeto, mas somente da página principal, então na tag <b><from-view-id></b> devemos informar o nome da página principal.</i></span></span></blockquote><span style="font-size: small;">As demais informações dentro das tags<b> <navigation-rule></b> seguem o mesmo padrão do caso “<i><b>cadastro</b></i>“, nelas estamos configurando os outros apelidos como <span style="color: magenta;"><b>falhou </b></span>e <span style="color: magenta;"><b>sucesso</b></span>, que estão sendo utilizados no método<b> testar()</b> do nosso bean, e o apelido <span style="color: magenta;"><b>inicio </b></span>que está sendo utilizado na página <b>sucesso.jsp</b>. Todos estes apelidos direcionam para alguma página dentro do nosso projeto.<span style="color: #333333;"><br />
</span></span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;"><span style="color: #333333;">Agora já configuramos quase todos os apelidos, falta o “teste” que está sendo utilizado na página inicio.jsp.<br />
</span></span><br />
<span style="font-size: small;"><span style="color: #333333;">Neste caso é um pouco diferente, não estamos direcionando para alguma página, mas sim utilizando variáveis e métodos de uma classe, uma classe bean, então não podemos configurar uma regra de navegação pois esta não é uma regra, neste caso possuimos um BEAN, então é isto que devemos configurar.</span></span><br />
<span style="font-size: small;"><span style="color: red;"><b><managed-bean</b></span><span style="color: red;"><b>></b></span> e <b><span style="color: red;"></managed-bean></span></b>, estas tags informam o inicio e o fim da configuração de beans do projeto, todos os beans que vamos utilizar devem ser configurados dentro destas tags<i>.</i></span><br />
<span style="font-size: small;"><b><span style="color: blue;"><managed-bean-name>teste</managed-bean-name></span></b>, é nesta linha que definimos o <b>apelido </b>do nosso bean, como ele deverá ser referenciado dentro de nossas páginas, neste casos estamos dizendo que o apelido do nossa classe <b>testeBean.java</b> será simplesmente <span style="color: blue;"><b>teste</b></span><i>.</i></span><br />
<span style="font-size: small;"><i><span style="color: #339966;"><b><managed-bean-class>br.com.projetox.view.bean.testeBean</managed-bean-class></b></span>, </i>nesta linha informamos o caminho completo e o nome da classe, para que o servidor consiga achar nosso bean quando este for solicitado por alguma página, neste caso a classe é<i> </i><b>testeBean</b><i><b> </b>(</i>note que não é necessário informar a extensão da classe), e esta classe está dentro das pastas (pacote) <b>br.com.projetox.view</b><i>.</i></span><br />
<span style="font-size: small;"><span style="color: #ff6600;"><b><managed-bean-scope>session</managed-bean-scope></b></span> esta linha indica como o servidor vai fazer a comunicação entre a página e o bean, se é por<i> </i><b>aplicação </b><i>(</i><code class="cCode">application</code><i>), </i>se é por <b>sessão </b><code class="cCode">(session</code><i>) </i>ou se é por <b>solicitação</b><i><b> </b></i><code class="cCode">(request</code><i>). </i>No nosso caso definimos que a comunicação entre as páginas e o bean será por sessão<i>.</i></span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Pronto! Configuramos nossos apelidos e nosso bean! Falta agora configurar nosso projeto!</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Somente com o que temos até agora a aplicação não irá funcionar, por que o servidor ainda não sabe que nosso projeto está utilizando o framework JSF.<br />
</span><br />
<span style="font-size: small;">Mas como informar para o servidor que nosso projeto é um projeto JSF? </span><br />
<span style="font-size: small;">Atraves do arquivo web.xml!</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Neste caso não existe muito o que falar, por enquanto. O arquivo web.xml é um arquivo padrão de configuração das aplicações web, tanto faz se é um projeto JSF, ou Struts, ou Raptor ou se não utiliza nenhum framework, o web.xml deve estar lá, devidamente configurado para que o servidor entenda que nosso projeto é assim ou assado.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Então abra o arquivo web.xml e insira as seguintes linhas de código:</span><br />
<blockquote><span style="font-size: small;"><span style="color: grey;"><i><?xml version=”1.0″?><br />
<!DOCTYPE web-app PUBLIC<br />
“-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN”<br />
“http://java.sun.com/dtd/web-app_2_3.dtd”><br />
<web-app></i></span></span><br />
<span style="font-size: small;"><i><context-param><br />
<param-name>javax.faces.STATE_SAVING_METHOD</param-name><br />
<param-value>server</param-value><br />
</context-param></i></span><br />
<span style="font-size: small;"><i><context-param><br />
<param-name>javax.faces.CONFIG_FILES</param-name><br />
<param-value>/WEB-INF/faces-config.xml</param-value><br />
</context-param></i></span><br />
<span style="font-size: small;"><i><listener><br />
<listener-class>com.sun.faces.config.ConfigureListener</listener-class><br />
</listener></i></span><br />
<span style="font-size: small;"><i><!– Faces Servlet –><br />
<servlet><br />
<servlet-name>Faces Servlet</servlet-name><br />
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class><br />
<load-on-startup> 1 </load-on-startup><br />
</servlet></i></span><br />
<span style="font-size: small;"><i><!– Faces Servlet Mapping –><br />
<servlet-mapping><br />
<servlet-name>Faces Servlet</servlet-name><br />
<url-pattern>*.jsf</url-pattern><br />
</servlet-mapping></i></span><br />
<span style="font-size: small;"><i></web-app></i></span></blockquote><span style="font-size: small;">Estas são tags padrões que devem ser inseridas no arquivo web.xml para que o servidor interprete corretamente nosso projeto JSF.<br />
</span><br />
<span style="font-size: small;"> Em outro post irem mostrar algumas configurações mais avançadas deste arquivo e do faces-config.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Agora nosso projeto está concluído! Todas as páginas estão criadas e todos os arquivos devidamente configurados e se comunicando!</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Vamos para a parte final deste tutorial…</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;"><a href="http://pinguimtomandocafe.blogspot.com/2011/02/jsf-inicio-rapido-final.html" target="_self">PRÓXIMO PASSO (FINAL).</a></span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5865429107316362417.post-68621431931308420022011-02-19T12:50:00.000-08:002011-02-19T13:06:59.151-08:00JSF, Inicio Rápido – Parte 4<span style="font-size: small;"><a href="http://pinguimtomandocafe.blogspot.com/2011/02/jsf-inicio-rapido-parte-3.html" target="_self">PASSO ANTERIOR (PARTE 3).</a></span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Já estamos bem avançados em nosso projeto, já temos uma boa base, vamos agora criar as páginas necessárias para a navegação, aliás, vamos inserir códigos por que as páginas ja foram criadas no passo 2.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Puxando pela memória, na introdução foi informado que se chamarmos uma página pela extensão JSP, as tags não funcionariam, devemos invocar as páginas sempre utilizando a extensão JSF, neste post abordaremos um pouco deste assunto.</span><br />
<span style="font-size: small;">Antes de mais nada, nosso projeto precisa de uma pagina principal, então no arquivo <span style="text-decoration: underline;"><b>index.jsp</b></span> insira as seguintes linhas de código:</span><br />
<blockquote><span style="font-size: small;"><i><html><br />
<body><br />
<jsp:forward page=”/pages/menu.jsf” /><br />
</body><br />
</html></i></span><br />
<span style="font-size: small;"><i><br />
</i></span></blockquote><span style="font-size: small;">Mas por que logo na página inicial estamos redirecionando para outro lugar?<br />
Simples, se colocarmos as tags do JSF diretamente na página index.jsp elas não funcionariam, por que o servidor está invocando <b>index.jsp</b> e não <b> index.jsf</b>.</span><br />
<span style="font-size: small;"><br />
Existem outras formas até mais elegantes para contornar este problema, por exemplo configurando o <i>web.xml</i> para chamar index.jsf e não index.jsp, mas por enquanto este redirecionamento resolve nosso problema, e serve também como um ótimo exemplo para sempre lembrarmos que devemos invocar as páginas utilizando a extensão <b>JSF</b> para que elas funcionem…</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Ok, ok, redirecionamos a página principal para “menu.jsf”, mas não tem nada nesta página!<br />
Vamos inserir códigos nela então!</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Abra o arquivo <span style="text-decoration: underline;"><b>menu.jsp</b></span> (lembre-se que JSF é uma extensão “imaginária”, as páginas reais possuem a extensão JSP), e insira as seguintes linhas de código:</span><br />
<blockquote><span style="font-size: small;"><i><%@ taglib uri=”http://java.sun.com/jsf/html” prefix=”h” %><br />
<%@ taglib uri=”http://java.sun.com/jsf/core” prefix=”f” %><br />
<f:loadBundle basename=”br.com.projetox.view.bundle.messages” var=”msg”/><br />
<html><br />
<head></head><br />
<body><br />
<f:view><br />
<h1><br />
<h:outputText value=”#{msg.pagina_principal_label_titulo}”/><br />
</h1><br />
<h3><br />
<h:outputText value=”#{msg.pagina_principal_label_site}”/><br />
</h3><br />
<h:form id=”helloForm”><br />
<h:commandButton action=”cadastro” value=”#{msg.pagina_principal_label_link}” /><br />
</h:form><br />
</f:view><br />
</body><br />
</html></i></span></blockquote><span style="font-size: small;">Agora vamos às explicações!</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">As duas primeiras linhas, <span style="text-decoration: underline;"><b>taglib</b></span>, informam que utilizaremos nesta página algumas tags <b>JSTL </b>específicas do framework JSF.</span><br />
<span style="font-size: small;"><br />
JSTL são bibliotecas, conjuntos de códigos personalizados, para serem utilizados dentro das páginas JSPs, existem várias JSTLs, e é possível até criar a sua propria linguagem, porém o assunto aqui não é este então não falaremos muito disso, mas já estou preparando um post sobre isso. Vale saber que alguns dos arquivos JAR que fizemos download na introdução são responsáveis por estas JSTLs que utilizaremos agora.</span><br />
<span style="font-size: small;"><br />
Na taglib informamos a propriedade <span style="text-decoration: underline;"><b>prefix</b></span>, que é um apelido para utilizarmos esta JSTL dentro da página.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">A terceira linha utilizamos<span style="text-decoration: underline;"><b> f:loadBundle</b></span>, aqui já estamos utilizando uma JTSL! Enfim, este comando serve para carregar o arquivo <i>messages.properties</i> e é claro que você já está craque em properties né?</span><br />
<span style="font-size: small;"><br />
Note que informamos nesta linha o <b>caminho inteiro</b> (pacote) do arquivo properties, mas não é necessário informar a extensão, a propriedade <span style="text-decoration: underline;"><b>var=”msg”</b></span> funciona igual o prefix da taglib, é um apelido para utilizarmos na página.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Na tag <span style="text-decoration: underline;"><b>h:outputText</b></span> utilizamos a segunda taglib importada, esta é utilizada mais para campos de formulário e similares, como por exemplo neste caso estamos criando um <b>outputText</b>, que é como um “label” do VB ou de aplicações Java Desktop, simplesmente inserção de texto!</span><br />
<span style="font-size: small;"><br />
E nesta linha já invocamos uma variável do arquivo properties “<b>msg.pagina_principal_label_site</b>“, o msg. é apelido do properties que definimos na terceira linha, o resto é o nome da variável que está declarada no properties, fazendo isso, a página vai procurar no arquivo properties a variável <i>pagina_principal_label_site</i>, e vai escrever ná página o valor desta variável.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Na tag <span style="text-decoration: underline;"><b>h:form</b></span>, estamos criando um formulário, assim como no HTML, precisamos iniciar um formulário quando quisermos criar campos e botões válidos.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;"><span style="text-decoration: underline;"><b>h:commandButton</b></span>, aqui que está o pulo do gato! Este comando é similar ao botão <b>SUBMIT </b>do HTML, e funciona da mesma maneira, ele pega todos os campos do formulário e envia para algum lugar.</span><br />
<span style="font-size: small;"><br />
Vamos ver com um pouco de calma cada propriedade deste comando.</span><br />
<span style="font-size: small;"><b>action=”cadastro”</b>, mas o que é isso? “<b>cadastro</b>“, essa porcaria não é sequer uma página!<br />
Realmente isto não é uma página, não é nada, “cadastro” não existe!</span><br />
<span style="font-size: small;"><br />
Essa string é outro apelido, que definiremos no arquivo de configuração, quando informamos para a página, “ao clicar neste botão vai para <b><i>cadastro</i></b>” ela procura esse tal de cadastro no arquivo faces-config.xml, e este se encarrega de informar qual página deve ser invocada.</span><br />
<span style="font-size: small;"><br />
A propriedade value é a mesma dos botões SUBMIT do HTML, aqui será inserida a informação que ficará escrita no botão, neste caso estamos procurando alguma informação no arquivo properties.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Com isso encerramos as explicações desta página!</span><br />
<span style="font-size: small;">Agora abra o arquivo <span style="text-decoration: underline;"><b>inicio.jsp</b></span> e insira as seguintes linhas de código:</span><br />
<blockquote><span style="font-size: small;"><i><%@ taglib uri=”http://java.sun.com/jsf/html” prefix=”h” %><br />
<%@ taglib uri=”http://java.sun.com/jsf/core” prefix=”f” %><br />
<f:loadBundle basename=”br.com.projetox.view.bundle.messages” var=”msg”/><br />
<html><br />
<head></head><br />
<body></i></span><br />
<span style="font-size: small;"><i><f:view><br />
<h1><br />
<h:outputText value=”#{msg.pagina_cadastro_label_titulo}”/><br />
</h1><br />
<h3><br />
<h:outputText value=”#{msg.pagina_cadastro_label_site}”/><br />
</h3><br />
<h:form id=”helloForm”><br />
<h:outputText value=”#{msg.pagina_cadastro_label_nome}”/><br />
<h:inputText value=”#{teste.nome}” /><br />
<f:verbatim><br />
<br><br />
</f:verbatim><br />
<h:outputText value=”#{msg.pagina_cadastro_label_email}”/><br />
<h:inputText value=”#{teste.email}” /><br />
<f:verbatim><br />
<br><br />
</f:verbatim><br />
<h:commandButton action=”#{teste.testar}” value=”#{msg.pagina_principal_botao_ok}” /><br />
</h:form><br />
</f:view></i></span><br />
<span style="font-size: small;"><i></body><br />
</html></i></span><br />
<span style="font-size: small;"><i><br />
</i></span><br />
<span style="font-size: small;"><i><br />
</i></span></blockquote><span style="font-size: small;">Nesta página, praticamente todos os comandos são similares aos da página anterior, com exeção de três que merecem uma explicação melhor:</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;"><b><h:inputText value=”#{teste.nome}” /></b><br />
Aqui estamos criando um inputText, que como você deve estar imaginando é uma caixa de texto, igual ao do HTML, mas o que precisa de uma explicação especial nesta tag é o <b>value</b>.<br />
</span><br />
<span style="font-size: small;">Note que estamos informando<span style="color: red;"><b> #{teste.nome}</b></span>, fazendo isso estamos falando que este campo está vinculado à variável nome da classe teste. Ainda não sabemos quem é esse <i>teste</i>, por que não configuramos o faces-config.xml ainda, porém este é o nosso bean, a classe testeBean.java, lembra que criamos uma variável<span style="color: blue;"><b> private String nome</b></span> lá? Então, é aqui que ela está sendo referenciada.<br />
</span><br />
<span style="font-size: small;">Se a variável possuir algum valor, a página vai mostrar este valor no campo quando a página for carregada, e se o usuário digitar alguma coisa no campo, o valor do campo será copiado para a variável <i>nome </i>quando for clicado no botão de submit (o <i>commandButton</i>).<br />
</span><br />
<span style="font-size: small;">Então podemos imaginar, para efeito de analogia, que este campo é a própria variável da classe testeBean! Certo, certo, não são a mesma coisa, mas uma está vinculada diretamente com a outra, são irmãs gêmeas, e siamesas ainda por cima, o valor que uma possuir a outra vai copiar, tanto pra ir quando pra vir.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Um pouco mais abaixo temos a tag <b><f:verbatim><br></f:verbatim></b>, esta tag DEVE ser criada sempre que desejar inserir algum comando HTML puro na página, nunca se deve utilizar tags HTML em páginas JSF, nunca!<br />
</span><br />
<span style="font-size: small;">Mas, eu estou utilizando alguns comandos HTML diretamente, e ai?<br />
</span><br />
<span style="font-size: small;">Bem, eu posso explicar, este projeto é algo extremamente simples, apenas para exemplo, e as configurações do projeto deixam passar estas coisinhas, porém quando for fazer um projeto mais avançado onde as configurações também são mais avançadas, com certeza vai dar um erro quando sua página for chamada, o JSF não vai conseguir compilar a página por que não entenderá os comandos HTML, então já fica avisado aqui, sempre que for utilizar algum comando HTML, utilize-os dentro das tags <f:verbatim></f:verbatim>.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;"><b><h:commandButton></b> Novamente nos encontramos com o “SUBMIT” do JSF, porém ele está um pouco diferente agora…<br />
</span><br />
<span style="font-size: small;">A propriedade <b>action </b>não está mais chamando um apelido, e sim um método! Percorra um pouco as lembranças de sua memória ou abra o arquivo testeBean.java no seu projeto, verifique que ele tem um método <span style="color: red;"><b>testar()</b></span> que retornar uma ou outra String, dependendo da situação do IF, certo? Então, para a propriedade action devemos SEMPRE informar um alias, uma String, porém não precisa ser diretamente, podemos chamar um método e este método retorna a tal String, no nosso caso estamos enviando as informações cadastradas na tela para o método <b>testar()</b> da classe testeBean (aqui está com o nome <b>teste</b>, mas teste é o apelido que daremos para a classe testeBean nos arquivos de configuração…) ao entrar no método testar(), fazemos algumas verificações e retornamos alguma string, esta string que será a página de destino de nossa aplicação!<br />
</span><br />
<span style="font-size: small;">Se não entendeu muito bem essa explicação, tenha calma no proximo post vamos preparar os arquivos de configuração, então você poderá entender melhor essa questão.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Agora não sobrou muito o que falar sobre as tags do JSF, então vamos inserir os códigos nos arquivos restantes!</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Códigos da página <span style="text-decoration: underline;"><b>sucesso.jsp</b></span></span><br />
<blockquote><span style="font-size: small;"><i><%@ taglib uri=”http://java.sun.com/jsf/html” prefix=”h” %><br />
<%@ taglib uri=”http://java.sun.com/jsf/core” prefix=”f” %><br />
<f:loadBundle basename=”br.com.projetox.view.bundle.messages” var=”msg”/><br />
<html><br />
<head></head><br />
<body></i></span><br />
<span style="font-size: small;"><i><f:view><br />
<h1><br />
<h:outputText value=”#{msg.pagina_sucesso_label_titulo}”/><br />
</h1><br />
<h3><br />
<h:outputText value=”#{msg.pagina_sucesso_label_site}”/><br />
</h3><br />
<h:form id=”helloForm”><br />
<h:outputText value=”#{msg.pagina_sucesso_label_texto}”/><br />
<f:verbatim><br />
<br><br />
</f:verbatim><br />
<h:commandButton action=”inicio” value=”#{msg.pagina_sucesso_botao_voltar}” /><br />
</h:form><br />
</f:view></i></span><br />
<span style="font-size: small;"><i></body><br />
</html></i></span></blockquote><span style="font-size: small;">Código da página <span style="text-decoration: underline;"><b>falha.jsp</b></span></span><br />
<blockquote><span style="font-size: small;"><i><%@ taglib uri=”http://java.sun.com/jsf/html” prefix=”h” %><br />
<%@ taglib uri=”http://java.sun.com/jsf/core” prefix=”f” %><br />
<f:loadBundle basename=”br.com.projetox.view.bundle.messages” var=”msg”/><br />
<html><br />
<head></head><br />
<body></i></span><br />
<span style="font-size: small;"><i><f:view><br />
<h1><br />
<h:outputText value=”#{msg.pagina_falha_label_titulo}”/><br />
</h1><br />
<h3><br />
<h:outputText value=”#{msg.pagina_falha_label_site}”/><br />
</h3><br />
<h:form id=”helloForm”><br />
<h:outputText value=”#{msg.pagina_falha_label_texto}”/><br />
<f:verbatim><br />
<br><br />
</f:verbatim><br />
<h:commandButton action=”cadastro” value=”#{msg.pagina_falha_botao_voltar}” /><br />
</h:form><br />
</f:view></i></span><br />
<span style="font-size: small;"><i></body><br />
</html></i></span></blockquote><span style="font-size: small;">Pronto! Ou melhor, quase pronto!</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Já inserimos os códigos de todas as páginas, do arquivo de propriedades e até do nosso bean, falta agora configurar o arquivo faces-config.xml, que é a alma de um projeto JSF!<br />
</span><br />
<span style="font-size: small;"> Mas isso colocarei em outro post…</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;"><a href="http://pinguimtomandocafe.blogspot.com/2011/02/jsf-inicio-rapido-parte-5.html">PRÓXIMO PASSO (PARTE 5) </a></span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;"><br />
</span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5865429107316362417.post-30775636298996523192011-02-19T12:41:00.000-08:002011-02-19T13:07:31.919-08:00JSF, Início Rápido – Parte 3<span style="font-size: small;"><a href="http://pinguimtomandocafe.blogspot.com/2011/02/jsf-inicio-rapido-parte-2.html" target="_self">PASSO ANTERIOR (PARTE 2).</a></span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Se você chegou até aqui acho que você já leu a <b><a href="http://pinguimtomandocafe.blogspot.com/2011/02/jsf-inicio-rapido-introducao.html" target="_blank">introdução</a></b>, e a <b><a href="http://pinguimtomandocafe.blogspot.com/2011/02/jsf-inicio-rapido-parte-2.html" target="_blank">parte 2</a></b> do tutorial de JSF.</span><br />
<span style="font-size: small;">Presumindo que estas tarefas já estejam feitas, as pastas e o bean criados, é hora de falar do arquivo <b>messages.properties</b>.<br />
</span><br />
<span style="font-size: small;">Este arquivo é utilizado abrangentemente, em vários frameworks, não somente em JSF. Mas afinal pra serve este bendito arquivo?</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Este arquivo nada mais é que algum txt, que contém nomes de váriáveis e seus conteúdos, ele nem ao menos precisa ter esse nome, poderia ser <b>sorvetechocolate.properties</b>, também funcionaria, porém como tudo em java precisa seguir certos padrões de programação, principalmente para futuras manutenções, este nome foi adotado.<br />
</span><br />
<span style="font-size: small;">O arquivo funciona da seguinte maneira:</span><br />
<div style="padding-left: 30px;"><span style="font-size: small;"><span style="color: #333399;">variavel_nome1.variavel_sobrenome.variavel_maisumnome = valor1<br />
variavel_nome2.variavel_sobrenome.variavel_maisumnome = valor2<br />
variavel_nome3.variavel_sobrenome.variavel_maisumnome = valor3</span></span></div><span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Em suas páginas, ao invés de escrever os textos diretamente no JSP você importa estas “variáveis” do messages.properties, e assim o texto é escrito na página, sem ter sido inserido diretamente entre as tags html.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Isso é útil por que?</span><br />
<span style="font-size: small;"><span style="color: red;"><b>Para manutenções</b></span>, por exemplo, o telefone do PABX da empresa mudou, se você não estiver utilizando algum “messages.properties” ou similares, provavelmente você terá que abrir página por página e alterar todos os telefones, e é quase certeza que alguma página irá passar em branco, porém se você estiver utilizando o messages.properties, e mapeando a variável “telefone.pabx”, basta alterar o valor desta variável no messages.properties e pronto! Todas as páginas serão atualizadas, sem complicações.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;"><span style="color: red;"><b>Internacionalização</b></span>, digamos que sua empresa tem um portal, todo gerenciavel, em determinado dia acionistas estrangeiros compram ações da sua empresa e querem o site em inglês. Se você não estiver utilizando algum mapeamento de textos como o messages.properties, provavelmente vai ter que abrir página por página, coletar texto por texto e traduzir cada um, compilar o site inteiro novamente, mas com o messages.properties devidamente configurado <span style="text-decoration: underline;"><b>e utilizado</b></span> isso não será preciso, e o tempo para traduzir o site será muito pequeno, aliás, não demandará tempo algum, basta anexar o messages.properties no e-mail e enviar para o departamento responsável e informar “Aqui estão todos os textos do site, traduz ai que eu vou pra casa descansar”.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Agora que ja sabemos o que é, como funciona e pra que serve este famoso quebra-galhos, messages.properties, podemos configurá-lo em nossa aplicação.</span><br />
<span style="font-size: small;">Na parte 2 deste tutorial criamos o arquivo messages.properties dentro do pacote <b>br.com.projetox.view.bundle</b>, mas não colocamos nenhum conteúdo nele.<br />
Abra o arquivo messages.properties e insira as seguintes linhas de código:</span><br />
<blockquote><span style="font-size: small;"><i>##### Textos da Página Principal #####<br />
pagina_principal_label_titulo=JSF Inicio Rápido<br />
pagina_principal_label_site=http://codeerror.wordpress.com<br />
pagina_principal_label_link=Página de Cadastro</i></span><br />
<span style="font-size: small;"><i>##### Textos da página de cadastro #####<br />
pagina_cadastro_label_titulo=JSF Inicio Rápido<br />
pagina_cadastro_label_site=http://codeerror.wordpress.com<br />
pagina_cadastro_label_nome=Nome<br />
pagina_cadastro_label_email=E-mail<br />
pagina_principal_botao_ok=Ok</i></span><br />
<span style="font-size: small;"><i>#### Textos da página Sucesso ####<br />
pagina_sucesso_label_titulo=Cadastro efetuado com sucesso!!!<br />
pagina_sucesso_label_site=http://codeerror.wordpress.com<br />
pagina_sucesso_label_texto=Parabéns, o projeto JSF Inicio Rápido está dando resultados!<br />
pagina_sucesso_botao_voltar=Voltar</i></span><br />
<span style="font-size: small;"><i>#### Textos da página Falha ####<br />
pagina_falha_label_titulo=Falha ao realizar o cadastro…<br />
pagina_falha_label_site=http://codeerror.wordpress.com<br />
pagina_falha_label_texto=Acho que você não preencheu os campos na página anterior, por favor preencha!<br />
pagina_falha_botao_voltar=Tentar novamente</i></span></blockquote><span style="font-size: small;">Este arquivo está totamemte intuitivo, os nomes das variáveis foram criados com base em nome da página, tipo de texto e nome do campo.<br />
Por exemplo a primeira linha:<br />
<span style="color: #339966;"><b>pagina_principal_label_titulo=</b></span> </span><span style="font-size: small;"><b><span style="color: blue;">JSF Inicio Rápido</span></b></span><br />
<span style="font-size: small;"><span style="color: #339966;"><b>pagina_principal_label_titulo</b></span> é o nome da variável, este nome que invocaremos nas páginas JSP da aplicação.<br />
<b><span style="color: blue;">JSF Inicio Rápido</span></b> </span><span style="font-size: small;"> é o valor da variável, este que será apresentado na tela sempre que a variável for solicitada.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Os textos precedidos por sustenido (#) são comentários, que inseri para separar mais ainda as variáveis, facilitando futuras manutenções no código.</span><br />
<span style="font-size: small;">Agora podemos criar as páginas JSP da aplicação, mas isso fica pra outro post.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;"><a href="http://pinguimtomandocafe.blogspot.com/2011/02/jsf-inicio-rapido-parte-4.html" target="_self">PRÓXIMO PASSO (PARTE 4).</a></span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5865429107316362417.post-60979428926047169422011-02-19T12:35:00.000-08:002011-02-19T12:42:15.452-08:00JSF, Inicio Rápido – Parte 2<span style="font-size: x-small;"><a href="http://pinguimtomandocafe.blogspot.com/2011/02/jsf-inicio-rapido-introducao.html" target="_self"><b>Já leu a introdução?</b></a></span><br />
<span style="font-size: x-small;"><br />
Então vamos à parte 2 deste tutorial.</span><br />
<span style="font-size: x-small;">Agora vamos criar algumas páginas JSP e Java, para começar a transformar nosso projeto em um “projeto”.</span><br />
<br />
<span style="font-size: x-small;">Mas primeiro, deixa eu explicar a finalidade destas páginas.</span><br />
<span style="font-size: x-small;">Vamos desenvolver um projetinho simples de JSF, para exemplificar a comunicação e configuração das páginas e do projeto em si, para isso iremos construir uma páginazinha index com uma opção de cadastro, ao clicar no link será aberta uma página de cadastro com 3 campos: Nome, e-mail e um “botão” submit, ao enviar este formulário os beans serão populados e estas informações serão exibidas em outra página, com um botão de voltar para a página inicial.</span><br />
<br />
<span style="font-size: x-small;">Ficará mais ou menos assim:</span><br />
<br />
<br />
<span style="font-size: x-small;">Página inicial / Menu:<br />
<img alt="Imagem de exemplo do projeto JSF concluído, Pagina inicial/Menu." border="1" src="http://codeerror.background.googlepages.com/JSF_3.jpg" /><br />
</span><br />
<span style="font-size: x-small;"> Página de cadastro:<br />
<img alt="Imagem de exemplo do projeto JSF concluído, Página de cadastro." border="1" src="http://codeerror.background.googlepages.com/JSF_4.jpg" /><br />
</span><br />
<span style="font-size: x-small;"> Página de Falha no cadastro (Caso não tenha sido digitado nada na tela):<br />
<img alt="Imagem de exemplo do projeto JSF concluído, Página de falha no cadastro." border="1" src="http://codeerror.background.googlepages.com/JSF_5.jpg" /><br />
</span><br />
<span style="font-size: x-small;"> Página de cadastro (Após clicar no botão “Tentar novamente” da página de erro):<br />
<img alt="Imagem de exemplo do projeto JSF concluído, Página de cadastro." border="1" src="http://codeerror.background.googlepages.com/JSF_6.jpg" /><br />
</span><br />
<span style="font-size: x-small;"> Página de sucesso (Ao preencher os campos de cadastro corretamente):<br />
<img alt="Imagem de exemplo do projeto JSF concluído, Página de cadastro realizado com sucesso." border="1" src="http://codeerror.background.googlepages.com/JSF_7.jpg" /><br />
</span><br />
<span style="font-size: x-small;"> Página principal (Ao clicar no botão “Voltar” da página de Sucesso.)<br />
<img alt="Imagem de exemplo do projeto JSF concluído, Página principal/Menu." border="1" src="http://codeerror.background.googlepages.com/JSF_3.jpg" /></span> <br />
<br />
<br />
<span style="font-size: x-small;">Agora que já sabemos como o projeto irá ficar no final, podemos começar a construir as páginas.<br />
Aqui vale uma explicação sobre as páginas. Em JSF nenhuma tag especial consegue ser executada se a página não for chamada “página.jsf”, se você chamar em algum link “página.jsp”, por exemplo, o console irá acusar um erro, informando que as tags da página solicitada são inválidos. Não se esqueça disso!</span><br />
<br />
<span style="font-size: x-small;">Crie a seguinte estrutura de arquivos (dentro das pastas indicadas nas imagens, crie as pastas que não existirem):</span><br />
<span style="font-size: x-small;"><br />
<img alt="Imagem da estrutura de arquivos que deve ser criada." height="400" src="http://codeerror.background.googlepages.com/JSF_8.jpg" width="283" /><br />
</span><br />
<span style="font-size: x-small;"> Então teremos os seguintes arquivos criados:<br />
<b>testeBean</b></span> <span style="font-size: x-small;"> dentro das pastas (pacote) br.com.projetox.view.bean;<br />
<b>messages.properties</b></span> <span style="font-size: x-small;"> dentro das pastas (pacote) br.com.projetox.view.bundle;<br />
<b>index.jsp</b></span> <span style="font-size: x-small;"> dentro da pasta WebContent;<br />
<b>falha.jsp</b></span> <span style="font-size: x-small;"> dentro da pasta WebContent/pages;<br />
<b>inicio.jsp</b></span> <span style="font-size: x-small;"> dentro da pasta WebContent/pages;<br />
<b>menu.jsp</b></span> <span style="font-size: x-small;"> dentro da pasta WebContent/pages;<br />
<b>sucesso.jsp</b></span> <span style="font-size: x-small;"> dentro da pasta WebContent/pages;</span><br />
<br />
<span style="font-size: x-small;">Agora que criamos todos os arquivos, vamos preenchê-los com códigos, começando do <b>BEAN</b>.</span><br />
<span style="font-size: x-small;">Abra o arquivo<b> testeBean.java</b> e crie duas váriáveis String, uma nome e outra email (exatamente com estes nomes) e faça os gets e sets das variáveis. Crie também um método testar(), para executar alguma ação e retornar algum “endereço” para a aplicação.</span><br />
<span style="font-size: x-small;">Segue o código:</span><br />
<blockquote><pre><span style="font-size: x-small;">//----INICIO DO CÓDIGO DA CLASSE testeBean.java
<i>package br.com.projetox.view.bean;
/**
* @author codeerror.wordpress.com
*/
public class testeBean {
private String nome;
private String email;</i>
<i> public String testar(){
String retorno = "falhou";
if(!this.nome.equals("") && !this.email.equals("")){
retorno = "sucesso";
}
return retorno;
}</i>
<i> public String getNome() {
return nome;
}</i>
<i> public void setNome(String novoNome) {
this.nome = novoNome;
}</i>
<i> public String getEmail() {
return email;
}</i>
<i> public void setEmail(String novoEmail) {
this.email = novoEmail;
}
}
//----- FIM DO CÓDIGO DA CLASSE testeBean.java</i></span></pre></blockquote><span style="font-size: x-small;">Sim eu sei, falta <i>JavaDoc</i>, mas precisamos economizar linhas aqui no post…</span><br />
<span style="font-size: x-small;">Deixa eu explicar o que significa cada coisa.</span><br />
<br />
<span style="font-size: x-small;">As variáveis são <b>private String</b>, por que queremos variáveis do tipo String, e private por que não é pra mais ninguém (nenhuma outra classe) acessar estas variáveis diretamente, isto é um padrão de desenvolvimento.</span><br />
<br />
<span style="font-size: x-small;">O método <b>testar()</b> verifica se os campos <b>nome </b>e <b>e-mail</b> possuem algum valor, se eles possuirem algum valor o método irá retornar “<i>sucesso</i>” caso eles estejam em branco, o método irá retornar “<i>falha</i>“, irei falar o significado destes retornos mais pra frente, mas já da pra se ter uma idéia.</span><br />
<br />
<span style="font-size: x-small;">Depois do método <b>testar()</b> estão os <i>gets </i>e <i>sets </i>das variáveis. Estes métodos são necessários (e muito) para praticamente tudo em java, eles que controlam a entrada e saida das variáveis, por exemplo o método <b>getNome()</b> retorna o valor contido na variável nome, o método <b>setNome(String novoNome)</b> copia o valor da variável novoNome para a variável nome do bean.</span><br />
<br />
<span style="font-size: x-small;">Agora vamos falar do arquivo messages.properties, mas a explicação deste arquivo é um pouco extensa, e este post já está bem grande, então continuarei no proximo post!</span><br />
<br />
<span style="font-size: x-small;"><a href="http://pinguimtomandocafe.blogspot.com/2011/02/jsf-inicio-rapido-parte-3.html" target="_self">PRÓXIMO PASSO (PARTE 3).</a></span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5865429107316362417.post-6070888169774734042011-02-19T12:29:00.000-08:002011-02-19T13:07:51.554-08:00JSF, Inicio Rápido – Introdução<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;"><b>Java Server Faces</b>, ou <b>JSF</b> para os mais íntimos é basicamente um framework que trabalha com modelos de interfaces gáficas sobre eventos, é um framework baseado no conceito <b>MVC</b> para desenvolvimento web.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;"><br />
</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">MVC é o conceito <b>Model-View-Controler</b>, que consiste em separar seu código em camadas de visualização, controle e negócios, mas a princípio esta sigla é inútil. Mais para frente retomarei o assunto.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;"><br />
</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">Em JSF todo o controle é feito por um Servlet (<b>FacesServlet</b>) por um conjunto de manipuladores de ações e eventos e alguns arquivos de configuração. Não vou entrar muito no detalhe de cada bit que compõe a arquitetura senão daria uma biblia.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;"><br />
</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">O que importa é que JSF é um framework “simples”, fácil de configurar e utilizar, ágil e quebra muito o galho.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;"><br />
</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">A principal diferença entre <b>Struts</b> e <b>JSF</b> é:</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">O Struts sempre chama Actions primeiro(<b>Classes</b>, o famoso *.do) e JSPs depois, isso é configurado no Struts-config.xml.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">O JSF chama JSPs primeiro (*.JSF) e dentro destas páginas você decide o que quer fazer.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">Mas o retorno configurado é basicamente o mesmo, você configura um arquivinho XML, informa um parâmetro e dentro diz uma string de retorno e seu destino, ou várias strings de retorno e vários destinos.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;"><br />
</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">Fácil né?</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">Se você é iniciante em JSF ou em Struts não se desespere essa é só uma comparação, a parte legal vai começar em algumas linhas.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;"><br />
</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">O Objetivo deste post (e dos próximos) é apresentar a quem interessar um tutorial fácil de JSF, literalmente uma “Receita de bolo”. Como não da pra explicar tudo em um único post, separei por partes e irei postando aqui todos os links. também existe no menu um link próprio para JSF contendo todas os posts da categoria.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;"><br />
</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">Então vamos ao que interessa:</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;"><br />
</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">Parte 1.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">- Pra que lado eu atiro?</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">Primeiro você precisa ter um ambiente configurado, se ainda não configurou o seu, clique <a href="http://codeerror.wordpress.com/2009/04/28/javaeetomcat-preparando-o-ambiente-de-desenvolvimento/">neste link</a> e veja como configurar, tem também <a href="http://codeerror.wordpress.com/2009/04/29/plugun-sysdeo-tomcat-no-eclipse/">este link</a> que mostra como configurar o plugin Sysdeo do Tomcat no Eclipse.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">Se você<b> ja configurou o ambiente</b> e já está com o <b>Eclipse</b> ou outra IDE preparada, podemos começar.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;"><br />
</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">Vou mostrar como funciona a organização e fornecer todos os arquivos separadamente, mas irei fornecer o projeto final completo para download no final.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;"><br />
</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">Crie um novo projeto com um nome qualquer e defina a seguinte estrutura de pastas:</span><br />
<div class="separator" style="clear: both; text-align: center;"><span style="font-size: small;"><a href="http://sites.google.com/site/codeerrorbackground/JSF_1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="171" src="http://sites.google.com/site/codeerrorbackground/JSF_1.jpg" width="200" /></a></span></div><span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;"><br />
</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;"><br />
</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">É com esta estrutura de pastas que iremos trabalhar.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;"><br />
</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">Na pasta <b>ant</b> armazenaremos os arquivos de build.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">Na pasta<b> JavaSource </b>armazenaremos todos os pacotes e classes.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">Na pasta <b>WebContent</b> colocaremos todos os JSPs.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">A pasta <b>WEB-INF</b> deve obrigatóriamente estar dentro da pasta WebContents, é nela que colocaremos os arquivos de configuração do JSF. Crie também dentro da pasta WEB-INF mais duas pastas, uma com o nome <b><span style="color: red;">classes</span></b> e outra com o nome <b><span style="color: red;">lib</span></b>.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">A pasta <b>works</b> não serve para nada, ao menos para nós, ela será usada pelo servidor, para ir guardando os arquivos “temporários”, compilando as classes, etç, etç.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;"><br />
</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">Agora que criamos a estrutura de classes, vamos criar os arquivos.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">Dentro da pasta WEB-INF, crie um arquivo chamado <b>faces-config.xml</b>.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">Ainda na pasta WEB-INF, crie outro arquivo chamado<b> web.xml</b>.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;"><br />
</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">No arquivo faces-config.xml escreveremos todas as configurações do JSF, como managed-beans e regras de navegação.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">No arquivo web.xml, escreveremos as configurações do projeto, como por exemplo: “Ô Tomcat, esse troço aqui é JSF!” ou “Tomcat, quando eu escrever <i>algumacoisa.JSF</i>, faz o favor de entender!”, entre outros.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;"><br />
</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">Agora é necessário baixar as<b> bibliotecas</b> JSF, afinal é um framework.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;"><a href="http://codeerror.background.googlepages.com/JSF_libs.zip">Clique aqui</a> para baixar as bibliotecas, descompacte o conteúdo deste arquivo em qualquer lugar e copie tudo que for <b>JAR</b> para a pasta<b> lib</b>.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;"><br />
</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">Então até agora já criamos a estrutura de pastas, criamos os arquivos de configuração e baixamos as bibliotecas, então o projeto deve estar como a figura abaixo:</span><br />
<div class="separator" style="clear: both; text-align: center;"><span style="font-size: small;"><a href="http://sites.google.com/site/codeerrorbackground/JSF_2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="http://sites.google.com/site/codeerrorbackground/JSF_2.jpg" width="293" /></a></span></div><span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;"><br />
</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;"><br />
</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;"><br />
</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;">Esse é o fim de primeira parte, o proximo passo será a criação dos <b>JSPs</b> e <b>Java</b> necessários para nossa aplicação.</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;"><br />
</span><br />
<span style="font-family: "Arial [monotype]","Helvetica",sans-serif; font-size: small;"><a href="http://pinguimtomandocafe.blogspot.com/2011/02/jsf-inicio-rapido-parte-2.html">PRÓXIMO PASSO (PARTE 2)</a>.</span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5865429107316362417.post-49264452254286514902011-02-16T15:09:00.000-08:002011-02-16T15:09:06.042-08:00Swing: JFrame e Imagem<span class="Apple-style-span" style="color: #333333; font-family: Tahoma, Verdana, Arial, sans-serif; font-size: 12px; line-height: 21px;"></span><br />
<div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Se você está querendo criar um “programinha” ou um “programão” em java, certamente vai querer colocar uma ou algumas imagens nas janelas que criar, porém ao procurar algum código swing ou, se estiver utilizando o netbeans ou algum outro editor visual (arrastar e soltar), repara que não existe uma opção para inserir imagens no jFrame.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Mas como fica o programa nesse caso? Não existe forma de colocar uma imagem na janela?<br />
Claro que tem, existem diversas formas de se fazer isso, mas vou falar de uma forma em específico, a forma mais simples.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Veja, no exemplo abaixo, uma imagem inserida dentro de um JFrame.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><img alt="Imagem exemplo - JFrame com imagem de fundo" src="http://codeerror.background.googlepages.com/JFrame_imagem_fundo.jpg" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 100%; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;" /></div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><br />
</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Para colocar essa imagem no JFrame eu não coloquei a imagem no JFrame.<br />
Confuso? Eu explico.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Realmente não dá, ou não é tão “acessível” com os códigos convencionais do swing, colocar uma imagem diretamente na janela, como se coloca qualquer componente como labels, botões, etç. Mas é extremamente simples colocar uma imagem em um componente como um label ou botão.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">O mais indicado para esse caso é o JLabel, ficando basicamente assim, você tem seu JFrame e insere nele um JLabel, esse label no lugar de exibir um texto vai exibir uma imagem!</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Simples né?<br />
Vamos ver se o código também fica simples:</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><br />
</div><blockquote style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://s0.wp.com/wp-content/themes/pub/greyzed/images/quote.gif); background-origin: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #747775; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 10px; margin-right: 30px; margin-top: 15px; min-height: 32px; padding-bottom: 0px; padding-left: 60px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">{<br />
labelImagemFundo = new JLabel();<br />
getContentPane().add(labelImagemFundo);<br />
labelImagemFundo.setIcon(new ImageIcon(getClass().getClassLoader().getResource(“java_job.gif”)));<br />
}</div></blockquote><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Enjoy!</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5865429107316362417.post-69527486313789081202011-02-16T14:58:00.000-08:002011-02-16T14:58:26.585-08:00Swing – WindowListener<span class="Apple-style-span" style="color: #333333; font-family: Tahoma, Verdana, Arial, sans-serif; font-size: 12px; line-height: 21px;"></span><br />
<div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Iniciando a seção Swing (não pense em outra coisa, esse blog é de Java!!), vou postar um código-exemplo de WindowListener, mais precisamente o evento “Fechando a janela”, com esse exemplo é possível escolher qualquer comportamento ao fechar a jenela, só vai depender da sua criatividade:<br />
Quer impossibilitar o fechamento? A vontade!<br />
Quer enviar a janela para a bandeja do sistema? Você pode! (este exemplo não ensina a fazer isso, mas darei algumas dicas desta “POG” no final).</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Enfim, vamos ao que interessa, capturar o evento windowClosing, ou fechando a janela para os mais íntimos.</div><blockquote style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://s0.wp.com/wp-content/themes/pub/greyzed/images/quote.gif); background-origin: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #747775; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 10px; margin-right: 30px; margin-top: 15px; min-height: 32px; padding-bottom: 0px; padding-left: 60px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><br />
</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//Importação das bibliotecas que iremos precisar<br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">import</strong> </span>java.awt.event.WindowAdapter;<br />
<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">import</span></strong> java.awt.event.WindowEvent;<br />
<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">import</span></strong> javax.swing.JFrame;<br />
<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">import</span></strong> javax.swing.JOptionPane;<br />
<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">import</span></strong> java.awt.*; <br />
<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">import</span></strong> javax.swing.*; </em></div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">public class</span></strong> JanelaTeste <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">extends</span></strong> JFrame{</em></div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">private static void</span></strong> criaJanelaExemploGUI() {<br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//Cria uma nova janela, instanciando um JFrame, afinal para fechar<br />
//uma janela, primeiro precisamos da janela!</span> JFrame frame = <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">new</strong> </span>JFrame<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #333399; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(“Janela Teste – Brincando com o botão Fechar”</span>);<br />
<br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//Seta o comportamento padrão para a ação “Fechar” da janela.<br />
//Neste caso, estamos informando “Não faça nada ao fechar” </span></em><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> frame.setDefaultCloseOperation(JFrame.<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">DO_NOTHING_ON_CLOSE</span>);<br />
</em></div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//Esse bloco não tem a menor necessidade, coloquei apenas para ter algo<br />
//adicional no código, neste caso a primeira linha dentro do TRY recolhe<br />
//todos os looks instalados na máquina, depois eu seleciona o terceira da lista.<br />
//lembrando que o array começa em zero, então 0, 1, 2…</span></em><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">try</strong> </span>{<br />
UIManager.LookAndFeelInfo[] instalados = UIManager.getInstalledLookAndFeels();<br />
UIManager.setLookAndFeel(instalados[2].getClassName());<br />
}<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">catch</span></strong>(Exception e) { <br />
e.printStackTrace();<br />
} <br />
<br />
<br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//Seta uma dimensão para a janela, que será assumida na inicialização;<br />
//porporção larguxa x altura</span><br />
frame.setSize(<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">400</span>,<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">100</span>);<br />
<br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//Adiciona o WindowListener ao frame, este listener possibilita capturar todos os eventos<br />
//da janela, ex.: Fechando, Minimizando, Restaurando, Recebendo Foco, Perdendo Foco, etç.</span><br />
frame.addWindowListener(<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">new </strong></span>WindowAdapter() {<br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//aqui estou informando que quero o evento fechando a janela</span> <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">public void</span></strong> windowClosing (WindowEvent e) {<br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> //Nesta parte devemos colocar todo o que queremos que aconteça quando o botão<br />
//fechar for pressionado, neste caso apenas é exibida uma mensagem simples<br />
//e depois a aplicação é encerrada.</span> JOptionPane.showMessageDialog(<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">null</strong></span>,<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">“A janela será fechada.”</span>,<br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">“Você clicou em fechar.”,</span>JOptionPane.<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">PLAIN_MESSAGE</span>);<br />
<br />
System.exit(<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">0</span>);<br />
}<br />
});<br />
<br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> //Deixa o frame visivel aos olhos dos mortais.</span> frame.setVisible(<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">true</span></strong>);<br />
}<br />
<br />
<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">public static void</span></strong> main(String[] args){<br />
criaJanelaExemploGUI();<br />
}</em></div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">}</em></div></blockquote><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><br />
</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> Alguns comentários adicionais…</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">No comando “<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: xx-small; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">frame.setDefaultCloseOperation(JFrame.</span><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0000c0; font-family: inherit; font-size: xx-small; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0000c0; font-family: inherit; font-size: xx-small; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">DO_NOTHING_ON_CLOSE</span></span><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: xx-small; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">);</span></em>“, estou setando a operação padrão de fechamento do frame, neste caso a opção desejada foi uma constante da classe JFrame, a constante DO_NOTHING_ON_CLOSE, não faça nada ao fechar, porém não existe somente esta, outras constantes podem ser passadas como parâmetros:<br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">DISPOSE_ON_CLOSE</span>: Induzir ao Fechar, fecha a janela.<br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">HIDE_ON_CLOSE</span>: Esconder ao Fechar, se quiser ver a jenela novamente basta aplicar um “setVisible(true)”.<br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">EXIT_ON_CLOSE</span>: Sai ao fechar, sai do sistema.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Dentro do listener (windowListener), estamos invocando o evento windowClosing, para fiscalizar quando a janela é fechada, existem vários outros eventos úteis que podem ser utilizados, como por exemplo:<br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">windowClosed</span>: Invocado quando a janela é fechada<br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">windowLostFocus</span>: Invocado quando a janela perde o foco.<br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">windowIconified</span>: Invocado quando a janela é minimizada.<br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">windowOpened</span>: Invocado quando a janela é aberta.<br />
E outros mais, que podem ser consultados na API da classe <a href="http://java.sun.com/javase/6/docs/api/java/awt/event/WindowAdapter.html" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #cc0000; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" target="_blank" title="Classe WindowAdapter">WindowAdapter</a>.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Agora sobre enviar a janela para a bandeja do sistema (ao lado do reógio), que comentei no inicio do tópico, bem isso não existe nenhum programa (ao menos em java) faz isso, o que acontece é o seguinte: Em determinado momento, quando é decidido que o programa tem que ir para a bandeja do sistema, deve-se esconder a janela, isso mesmo “setVisible(false)”, desta forma a janela some da visão do usuário, porém continua ativa.<br />
Mas como fazer aquele icone com um menu bonitinho do lado do relógio? Para isso é preciso utilizar algumas artimanhas da classe <a href="http://java.sun.com/javase/6/docs/api/java/awt/TrayIcon.html" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #cc0000; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" target="_self" title="TrayIcon - Sun">TrayIcon </a>para colocar um icone na bandeja, mas o icone por si só não faz nada! É preciso também criar um <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/awt/event/MouseAdapter.html" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #cc0000; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" target="_blank" title="MouseAdapter - Sun">MouseAdapter</a> (mouseClicked, mousePressed, etç, basta seguir o mesmo exemplo do WindowAdapter acima), para capturar o evento do mouse clicando neste icone e quando isso for feito devemos abrir um <a href="http://java.sun.com/javase/6/docs/api/javax/swing/JPopupMenu.html" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #cc0000; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" target="_blank" title="JPopupMenu - Sun">JPopupMenu</a>, para abrir um menuzinho com as opções “Mostrar Janela”, “Sair”, “Etç, etç, etç”.<br />
Dependendo da sua criatividade e boa vontade, da até pra fazer um efeitozinho da janela sendo “enviada” para a bandeja, exemplo: Um loop que vai alterando o tamanho e a posição da janela fazendo-a ficar menor e mais próxima do relógio antes de a escondermos.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Fazer um exemplo/modelo de uma janela sendo enviada para a bandeja do sistema está na minha lista de tarefas, em breve postarei aqui!</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5865429107316362417.post-88724609586650332042011-02-16T14:55:00.001-08:002011-02-16T14:55:27.372-08:00JSF – actionListener, outra possibilidade…<span class="Apple-style-span" style="color: #333333; font-family: Tahoma, Verdana, Arial, sans-serif; font-size: 12px; line-height: 21px;"></span><br />
<div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">ActionListener </strong></span>é uma outra funcionalidade (propriedade) da taglib <a href="http://codeerror.wordpress.com/2009/05/15/jsf-inicio-rapido-parte-4/" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #cc0000; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" target="_blank"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">commandButton</strong></span></a>, utilizado nas páginas JSPs.<br />
Apenas para recapitular, um <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #3366ff; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">commandButon </span>(taglig do JSF) simula um botão Submit do HTML, porém com inúmeras possibilidades, como por exemplo o action.<br />
Existe também uma outra propriedade, que serve basicamente para chamar métodos, ela se chama ActionListener, e é invocada sempre antes da propriedade Action.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Mas qual a utilidade dela se já podemos utilizar o action?<br />
Inúmeras são as possibilidades para o uso das duas propriedades em conjunto, <strong style="font-weight: bold;">action </strong>e <strong style="font-weight: bold;">actionListener</strong>, por exemplo, podemos definir um padrão para nosso projeto onde em todas as propriedades <strong style="font-weight: bold;">action </strong>só informamos as strings de navegação, e as chamadas de métodos devem ser feitas unicamente pelo <strong style="font-weight: bold;">actionListener</strong>, tudo é válido quando não queremos ter trabalho em futuras manutenções. Outro uso para estas tags em conjunto seria chamadas diferentes para camadas diferentes (<a href="http://codeerror.wordpress.com/2009/05/19/mvc-e-pra-comer/" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #cc0000; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" target="_blank"><strong style="font-weight: bold;">MVC</strong></a>), a propriedade <strong style="font-weight: bold;">actionListener </strong>se encarrega de chamar os métodos responsáveis pelo controle de negócios, e a propriedade <strong style="font-weight: bold;">action </strong>se encarrega da camada de visualização, enfim, <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;">é útil</span>só depende do projeto.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;"><strong style="font-weight: bold;">Como utilizar?</strong></span></em></div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Existem três passos básicos, e tudo começa no JSP, com a propriedade do commandButton.<br />
<strong style="font-weight: bold;">Primeiro:</strong></div><blockquote style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://s0.wp.com/wp-content/themes/pub/greyzed/images/quote.gif); background-origin: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #747775; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 10px; margin-right: 30px; margin-top: 15px; min-height: 32px; padding-bottom: 0px; padding-left: 60px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><h:commandButton<br />
action=”string_mapeada_no_faces_config_xml”<br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #3366ff; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">actionListener=”<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">#{</span><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">meuBean.metodoActionListener</span><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">}</span>” </strong></span><br />
value=”Texto_do_botao” /></div></blockquote><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Na tag <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #3366ff; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">commandButton </span>estamos informando que a ação (<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #3366ff; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">action</span>) será uma string que foi mapeada no <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #3366ff; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">faces-config.xml</em></span>(a página jsp que será exibida quando este botão for acionado), também pode-se chamar um método cujo retorno seja alguma string mapeada no faces-config.<br />
Na tag <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #3366ff; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">actionListener </strong></span>estamos invocando o metodo <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">metodoActionListener</strong></span> do nosso bean.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">É importante informar (novamente) que a propriedade actionListener<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;"> é executada antes</span> da propriedade action, ou seja, primeiro o servidor irá executar o método que está definido na propriedade actionListener, depois que este método acabar o servidor vai prosseguir para a página ou método informado na propriedade action.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">Segundo:</strong><br />
O método tem que ser void!<br />
Bem, não precisa ser exatamente void, se você fizer este método com algum retorno não vai dar erro, porém o retorno não vai ser utilizado pra nada, então vamos evitar código e processamento desnecessário.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">Terceiro:</strong><br />
O método <strong style="font-weight: bold;">DEVE </strong>receber como parâmetro um <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">ActionEvent</strong></span>, do pacote<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;"> javax.faces.event</strong></span>.<br />
Este parâmetro é passado automaticamente pelo servlet durante a execução, e deve ser informado para que a comunicação entre a página e o bean ocorra através do actionListener.<br />
Então nosso método ficaria assim:</div><blockquote style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://s0.wp.com/wp-content/themes/pub/greyzed/images/quote.gif); background-origin: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #747775; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 10px; margin-right: 30px; margin-top: 15px; min-height: 32px; padding-bottom: 0px; padding-left: 60px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">import import javax.faces.event.ActionEvent;</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">public void <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #3366ff; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">metodoActionListener</span>(<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">ActionEvent e</span>){<br />
//alguma coisa é feita aqui.<br />
}</div></blockquote><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Agora divirta-se!</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5865429107316362417.post-36474035797263841952011-02-16T14:53:00.000-08:002011-02-16T14:53:32.160-08:00web.xml – Alguns conceitos e exemplos…<span class="Apple-style-span" style="color: #333333; font-family: Tahoma, Verdana, Arial, sans-serif; font-size: 12px; line-height: 21px;"></span><br />
<div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Em várias postagens deste blog este arquivo foi mencionado, bem como algumas configurações, mas o que é este arquivo? Pra que serve?</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">O arquivo web.xml está presente praticamente em todas as aplicações web – Java, não importa se você utiliza o framework A, B ou C, sempre terá um arquivo chamado web.xml dentro da pasta WEB-INF, isso por que este arquivo contém todas as informações do seu projeto. Este arquivo é lido diretamente pelo seu servidor, e é através dele que o servidor fica sabendo qual framework você está utilizando, quais os níveis de segurança que ele deve utilizar, qual o tempo de vida de seus servlets, até mesmo qual será sua página inicial.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Nota: O arquivo web.xml é case-sensitive, ou seja AAA é diferente de aaa, então cuidado ao escrever. Por padrão, todas as tags são escrita com letras minúsculas, e hífens (-) são utilizados para separar palavras (Exemplos: <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #ff8000; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">error-code</em></span>,<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #ff8000; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">web-app</em></span>,<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #ff8000; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> param-name</em></span>, etç.)</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">O arquivo web.xml precisa de uma inicialização, um cabeçalho padrão que define como o servidor fará a leitura do arquivo.</div><blockquote style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://s0.wp.com/wp-content/themes/pub/greyzed/images/quote.gif); background-origin: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #747775; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 10px; margin-right: 30px; margin-top: 15px; min-height: 32px; padding-bottom: 0px; padding-left: 60px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: grey; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><?xml version=”1.0″ encoding=”ISO-8859-1″?><br />
<!DOCTYPE web-app PUBLIC “-/Sun Microsystems, Inc.//DTD Web Application 2.3//EN” “http://java.sun.com/dtd/web-app_2_3.dtd”></span></div></blockquote><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Agora que o servidor sabe como interpretar este arquivo, ele precisa de um começo e de um fim, todas as tags de configuração do arquivo web.xml devem obrigatoriamente ser inseridas entre as tags <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: grey; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><web-app></span> e <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: grey; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"></web-app>.</span></div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Outra tag muito utilizada é a tag display-name, que define o título padrão do seu projeto, a mensagem informada dentro desta tag será utilizada por todas as páginas da aplicação.<br />
Exemplo: <em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: grey; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><display-name><strong style="font-weight: bold;">Meu projeto!!!</strong></display-name></span></em></div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">É possível também definir alguns parâmetros universais para seu projeto, por exemplo, queremos definir uma variável global para armazenar o nome do site, e em qualquer página podemos capturar e exibir este valor. Para isso utilizamos a seguinte configuração no web-xml:</div><blockquote style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://s0.wp.com/wp-content/themes/pub/greyzed/images/quote.gif); background-origin: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #747775; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 10px; margin-right: 30px; margin-top: 15px; min-height: 32px; padding-bottom: 0px; padding-left: 60px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #888888; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><context-param><br />
<param-name>nomeSite</param-name><br />
<param-value>Meu Projeto!</param-value><br />
</context-param></span></div></blockquote><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Onde <strong style="font-weight: bold;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">param-name</em></strong> guarda o nome do parâmetro, é esta informação que devemos solicitar em nossas páginas, e<strong style="font-weight: bold;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">param-value</em></strong> é o valor que esta variável irá nos retornar sempre que à chamarmos.<br />
Para recuperar esta variável em qualquer lugar da aplicação, basta utilizar o seguinte comando (retorna String):<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #404040; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">getServletContext().getInitParameter(“<strong style="font-weight: bold;">nomeSite</strong>“);</span></em></div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Uma coisa muito importante é a configuração dos servlets no web.xml!<br />
Calma, não é preciso configurar cada jsp, somente as classes que irão trabalhar de forma visual, diretamente na tela do usuário, jsps apesar de serem servlets não precisam ser configurados.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Para configurar um servlet temos as seguintes tags:</div><blockquote style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://s0.wp.com/wp-content/themes/pub/greyzed/images/quote.gif); background-origin: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #747775; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 10px; margin-right: 30px; margin-top: 15px; min-height: 32px; padding-bottom: 0px; padding-left: 60px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #888888; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><servlet><br />
<servlet-name>meuServlet</servlet-name><br />
<description></description><br />
<servlet-class>com.meu.pacote.ServletTal</servlet-class><br />
<load-on-startup>1</load-on-startup><br />
</servlet></span></div></blockquote><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Aqui funciona mais ou menos assim:<br />
As tags <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0080c0; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><servlet></span></strong> e <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0080c0; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"></servlet></span></strong> indicam que entre elas está a configuração de um servlet.<br />
A tag<strong style="font-weight: bold;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> servlet-name</span></em></strong> contém o apelido que iremos dar ao nosso servlet, e é este apelido que será invocado pela aplicação quando formos utilizar este servlet, é uma tag obrigatória.<br />
A tag <strong style="font-weight: bold;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">description</span></em></strong> é apelas ilustrativa, ela não é funcional, serve para escrevermos uma breve descrição desta servlet, muito importante para futuras manutenções, porém não é obrigatória, coloca quem quer.<br />
A tag <strong style="font-weight: bold;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">servlet-class</span></em></strong> também é obrigatória, ela indica onde está a classe propriamente dita, aqui devemos informar o caminho completo do servlet, com pacote e tudo mais.<br />
A tag <strong style="font-weight: bold;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">load-on-startup</span></em></strong> não é obrigatória, mas se você colocá-la, estará informando ao servidor que este servlet deve ser carregado sempre que o projeto for iniciado, e o número que informamos dentro desta tag indica a ordem em que ele deve ser carregado, se na aplicação quisermos que 10 servlets sejam carregadas durante a inicialização do projeto, então devemos colocar esta tag<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> load-on-startup</em> na configuração de todas as 10 servlets, e em cada uma definimos a ordem de inicialização com números inteiros. Não precisa ser exatamente na sequencia, nem começar do 1, mas tem que ser inteiros! Se várias servlets possuirem o mesmo número, o servidor carrega alguma aleatóriamente.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">É possível também chamar algum servlet diretamente pela URL, por exemplo<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: grey; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">http://localhost:8080/Projeto/Chamandoservlet</span></em>. Mas para isso é necessário uma pequena configuraçãozinha…</div><blockquote style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://s0.wp.com/wp-content/themes/pub/greyzed/images/quote.gif); background-origin: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #747775; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 10px; margin-right: 30px; margin-top: 15px; min-height: 32px; padding-bottom: 0px; padding-left: 60px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #888888; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><servlet-mapping><br />
<servlet-name>meuServlet</servlet-name><br />
<url-pattern>/ChamandoServlet</url-pattern><br />
</servlet-mapping></span></div></blockquote><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">A tag <strong style="font-weight: bold;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">url-pattern</span></em></strong> indica qual url deve ser informada para ativarmos nossa servlet.<br />
A tag <strong style="font-weight: bold;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">servlet-name</span></em></strong> indica o nome da servlet que deve ser chamada, aqui devemos informar o nome de alguma servlet mapeada no passo anterior.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">É possível também determinar o tempo de vida das sessões de sua aplicação, muito útil quando se tem uma aplicação que transporta na sessão dados importantes.</div><blockquote style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://s0.wp.com/wp-content/themes/pub/greyzed/images/quote.gif); background-origin: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #747775; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 10px; margin-right: 30px; margin-top: 15px; min-height: 32px; padding-bottom: 0px; padding-left: 60px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #888888; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><session-config><br />
<session-timeout>10</session-timeout><br />
</session-config></span></div></blockquote><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Neste caso estamos configurando o tempo das sessões em <strong style="font-weight: bold;">10 minutos</strong>, ou seja, se a aplicação ficar parada por 10 minutos, as sessões são eliminadas na memória!</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Outra configuração interessante é a configuração dos <strong style="font-weight: bold;">arquivos iniciais</strong>, estes arquivos são procurados sempre que alguem acessa algum diretório da sua aplicação, sem informar um arquivo, por exemplo, para acessar algum site você informa apenas <strong style="font-weight: bold;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">www.site.com.br</em></strong> e não <strong style="font-weight: bold;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">www.site.com.br/paginaInicial.jsp</em></strong>, se os arquivos de inicialização estiverem configurados, digitando apenas <strong style="font-weight: bold;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">www.site.com.br</em></strong> o servidor saberá que tem que mostrar a página<strong style="font-weight: bold;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">paginaInicial.jsp</em></strong>.</div><blockquote style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://s0.wp.com/wp-content/themes/pub/greyzed/images/quote.gif); background-origin: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #747775; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 10px; margin-right: 30px; margin-top: 15px; min-height: 32px; padding-bottom: 0px; padding-left: 60px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #888888; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><welcome-file-list><br />
<welcome-file><strong style="font-weight: bold;">index.jsp</strong></welcome-file><br />
<welcome-file><strong style="font-weight: bold;">paginaInicial.jsp</strong></welcome-file><br />
</welcome-file-list></span></div></blockquote><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Com estas tags, sempre que um diretório da sua aplicação for chamado o servidor vai procurar dentro deste diretório um arquivo <strong style="font-weight: bold;">index.jsp</strong> ou um arquivo <strong style="font-weight: bold;">paginaInicial.jsp</strong> e exibi-los.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Estas são as principais tags genéricas do arquivo web.xml, existem trocentas outras tags para este arquivo, porém da pra se virar com estas dicas por enquanto!</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5865429107316362417.post-71696079754776302322011-02-16T14:51:00.000-08:002011-02-16T14:51:11.762-08:00JSF – HTTP Status 500<span class="Apple-style-span" style="color: #333333; font-family: Tahoma, Verdana, Arial, sans-serif; font-size: 12px; line-height: 21px;"></span><br />
<div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">Descrição</strong>: The server encountered an internal error () that prevented it from fulfilling this request.<br />
<strong style="font-weight: bold;">Exceção</strong>:<br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">org.apache.jasper.JasperException: Can’t find bundle for base name “<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">xxxxxx</span>“<br />
java.util.MissingResourceException: Can’t find bundle for base name “<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">xxxxxx</span>“<br />
java.util.ResourceBundle.throwMissingResourceException<br />
java.util.ResourceBundle.getBundleImpl<br />
com.sun.faces.taglib.jsf_core.LoadBundleTag.doStartTag<br />
org.apache.jsp.pages.menu_jsp._jspx_meth_f_loadBundle</em></div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">O que é?</strong><br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">“Erro 500, falha interna do servidor.<br />
Este erro ocorre sempre que o servidor não consegue interpretar algo estranho no código, todos os códigos de erro que começam com 5 (500, 501, 502, etç.) significam basicamente isto, falha ao tentar entender o código, porém o erro 500 é genérico, o servidor não conseguir realizar a solicitação do código, mas também não sabe por que, os demais erros cujo prefixo é 5, o servidor ao menos sabe por que ocorreu o erro.”</em></div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">Como resolver?</strong><br />
Repare que as linhas da exeção indicam todas as mesmas coisas:<br />
<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;">Can’t find bundle for base name</span></strong> ou <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;">throwMissingResourceException</span></strong>, trazendo isso para o português ficaria mais ou menos “<strong style="font-weight: bold;">Não foi possível encontrar o pacote que se chama <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">XXXXX</span></strong>“, ou seja, nosso pacote não foi encontrado, mas que pacote? basta reparar no que vem descrito depois de <em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Can’t find bundle for base name,</em> no caso do exemplo “<strong style="font-weight: bold;">XXXXXX</strong>“, este é o nome que à página está procurando, mas não o encontrou.<br />
Verifique se este arquivo (properties, bean, xml, etç.) realmente existe e está no local indicado, se ele realmente existir, verifique se o nome tanto do arquivo quando do caminho está correto (<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">br.com.projeto.pasta1.pasta2.arquivo</em>, etç.) e não se esqueça que java é <strong style="font-weight: bold;">case</strong> <strong style="font-weight: bold;">sensitive</strong>, <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #993300; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">minhaClasse</span> é diferente de <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #993300; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">MinhaClasse</span>.</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5865429107316362417.post-44073026635615462832011-02-16T14:50:00.000-08:002011-02-16T14:50:04.646-08:00JSF – HTTP Status 500<span class="Apple-style-span" style="color: #333333; font-family: Tahoma, Verdana, Arial, sans-serif; font-size: 12px; line-height: 21px;"></span><br />
<div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">Descrição</strong>: The server encountered an internal error () that prevented it from fulfilling this request.<br />
<strong style="font-weight: bold;">Exceção</strong>:<br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">javax.servlet.ServletException: Error testing property <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">‘XXXX’</span> in bean of type null javax.faces.webapp.FacesServlet.service<br />
javax.faces.el.PropertyNotFoundException: Error testing property <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">‘XXXX’</span> in bean of type null</em></div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">O que é?</strong><br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">“Erro 500, falha interna do servidor.<br />
Este erro ocorre sempre que o servidor não consegue interpretar algo estranho no código, todos os códigos de erro que começam com 5 (500, 501, 502, etç.) significam basicamente isto, falha ao tentar entender o código, porém o erro 500 é genérico, o servidor não conseguir realizar a solicitação do código, mas também não sabe por que, os demais erros cujo prefixo é 5, o servidor ao menos sabe por que ocorreu o erro.”</em></div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">Como resolver?</strong><br />
As mensagens de erro falam <strong style="font-weight: bold;">“a propriedade <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">XXXX</span> do bean<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> NON ECZISTE</span>!”</strong>Neste caso, existe um campo (input) na página que faz referência à uma variável de algum bean.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Primeiro verifique se a variávei existe, e se está com mesmo nome (não esqueça do <strong style="font-weight: bold;">case</strong> <strong style="font-weight: bold;">sensitive</strong>!).<br />
Se o nome da variável estiver correto, verifique se ela possui os métodos gets e sets.<br />
Se os métodos estiverem corretos, procure no <strong style="font-weight: bold;">faces-config.xml</strong> se o bean está corretamente mapeado.<br />
Se tudo isso estiver certo, só resta uma alternativa, verifique no seu <strong style="font-weight: bold;">JSP</strong> se o nome do bean está exatamente igual ao alias dele definido no faces-config.<br />
E boa sorte!</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5865429107316362417.post-48203301723370551842011-02-16T14:40:00.000-08:002011-02-16T14:40:32.571-08:00Tomcat – HTTP Status 404<span class="Apple-style-span" style="color: #333333; font-family: Tahoma, Verdana, Arial, sans-serif; font-size: 12px; line-height: 21px;"></span><br />
<div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">Tipo</strong>: Status report<br />
<strong style="font-weight: bold;">Mensagem</strong>: [[Nome do Projeto]]<br />
<strong style="font-weight: bold;">Descrição</strong>: The requested resource [[<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Nome do Projeto</span>]] is not available.<br />
<strong style="font-weight: bold;">Exceção</strong>:<br />
Não é exibida exceção no navegador, mas ela pode ser encontrada nos logs do tomcat, pelo console onde o tomcat está sendo iniciado.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">LifecycleException: Container StandardContext [[<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Nome do Projeto</span>]] has not been started.<br />
org.apache.catalina.core.StandardContext<br />
org.apache.catalina.core.ContainerBase<br />
org.apache.catalina.core.StandardHost<br />
org.apache.catalina.core.ContainerBase<br />
org.apache.catalina.core.StandardEngine<br />
org.apache.catalina.startup.Catalina<br />
java.lang.IllegalArgumentException: Document base [[<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Endereço</span>]] does not exist or is not a readable directory.<br />
org.apache.naming.resources.FileDirContext</em><br />
<strong style="font-weight: bold;">O que é?<br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">404</em></strong> é um erro do tipo “<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">client error</em>“, ou seja, “<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">erro no cliente</em>“, basicamente o cliente (computador do usuário) fez alguma solicitação incorreta, neste caso (404) o cliente tentou solicitar algo que não existe, por exemplo, digitou uma URL que o servidor não conhece.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">Como resolver?</strong><br />
1º – Verifique se digitou a URL corretamente, observe o <strong style="font-weight: bold;">case sensitive</strong>!<br />
2º – Se o problema não é “<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">de usuário</em>” pode ser a configuração do projeto, então verifique os logs do tomcat no console, se estiver aparecendo mensagens como as descritas à cima, “<strong style="font-weight: bold;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Document base <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">XXX </span>does not exist…</em></strong>” ou “<strong style="font-weight: bold;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">StandardContext has not been started</em></strong>” é provável que a configuração do arquivo <strong style="font-weight: bold;">server.xml</strong> esteja incorreta.<br />
Se seu tomcat está com os contextos configurados no server.xml, procure o contexto da sua aplicação “<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #3366ff; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><context path=”/Projeto” docBase=”algum_lugar”></em></span>” e verifique se o <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">docBase</span></strong> está realmente apontando para a pasta certa da sua aplicação.<br />
A pasta certa é aquela que abriga o <strong style="font-weight: bold;">WEB-INF</strong>, por exemplo, a pasta WEB-INF está dentro da pasta WebContent, então no docBase deve estar algo como “<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #3366ff; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">c:\blábláblá\Projeto\WebContent\</span></strong>“.<br />
Se os seus contextos estão configurados via <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">catalina</span></strong>, então abra o xml que está com o nome do seu projeto dentro da pasta Catalina (<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #3366ff; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">exemplo: PastaDoTomcat \ conf \ Catalina \ localhost \ Projeto.xml</strong></span>) e proceda da mesma forma como no arquivo server.xml, verifique se o caminho descrito no docBase do contexto está correto.</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5865429107316362417.post-11009657475418071802011-02-16T14:11:00.001-08:002011-02-16T14:42:42.416-08:00Container, o que é isso?<span class="Apple-style-span" style="color: #333333; font-family: Tahoma, Verdana, Arial, sans-serif; font-size: 12px; line-height: 21px;"></span><br />
<div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">Container</strong> é uma especie de caçamba, uma caixa de metal grande, aquela parte de tras de um caminhão “baú”.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Exemplo de container:</div><div align="center" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><img alt="Imagem de um container de carga de mercadorias, para facilitar o entendimento do que é um container em programação" height="145" src="http://codeerror.background.googlepages.com/container_1.gif" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 100%; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;" width="194" /></div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Mas o que seria um container <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;">em programação</span></strong>?</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Seria basicamente, em orientação à objetos, <strong style="font-weight: bold;">um objeto que contém outros objetos</strong>, exatamente como o container demonstrado acima, um objeto grande que contém outros menores e os transporta de um lugar para outro, os objetos do container (de programação) podem ser incluídos ou excluídos em tempo de execução!</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Agora falando mais especificamente em <strong style="font-weight: bold;">Java</strong>!<br />
Um container possui os componentes da aplicação, como por exemplo os <strong style="font-weight: bold;">servlets</strong> (JSPs são servlets!), e quando você digita no navegador <em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0080c0; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">http://localhost:8080/MeuProjeto</span></em>, o servidor não passa a solicitação para o JSP diretamente, ele passa o controle para o Container e este se encarrega de administrar o ciclo de vida desse servlet, a segurança, o suporte à exibição na tela, etç.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Alguns exemplos de Servlet Conteiners (containers web):</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Comerciais:</span></span></strong><br />
<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"></span></span></strong>JBoss<br />
Oracle Application Server<br />
WebSphere (IBM)<br />
Netweaver (SAP)<br />
JRun (Adobe)<br />
GlassFish (Código Aberto)</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #008040; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Não Comerciais (Free!!!)</span></span></strong><br />
Tomcat<br />
Jetty<br />
Winstone<br />
Apache Gerônimo</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5865429107316362417.post-75601515889240656132011-02-16T14:07:00.000-08:002011-02-16T14:09:53.121-08:00Lançar exceções quando quiser<span class="Apple-style-span" style="color: #333333; font-family: Tahoma, Verdana, Arial, sans-serif; font-size: 12px; line-height: 21px;"></span><br />
<div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Algumas vezes criamos um programa/site/portal com muita dificuldade e o fazemos funcionar perfeitamente na máquina de desenvolvimento e até mesmo em servidores de teste, mas quando chega no cliente algo acontece, o fantasma de <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #333333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Murph </em></span>aparece para fazer suas leis entrarem em cena e mensagens de erro do servidor pipocam na tela, como por exemplo o odiado erro 500…</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Nessas horas algumas das coisas mais comuns:</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #eeeeee; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">“Por hora não é necessário resolver a situação”</em></span>, ou.<br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #eeeeee; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">“Quem configura o servidor não está conseguindo acertar os ponteiros do servidor”</em></span>, ou.<br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #eeeeee; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">“Após explicar ao usuário que isso não é um erro, ele pediu para alterar a tela “</em></span>, ou.<br />
Qualquer outra coisa que impeça o reparo deste erro e nos forçam simplesmente a tratá-lo.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Como é um erro 500, muitas vezes ele nem passa por classes, então nossos<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #333333; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;"> try-catch</strong></em></span> podem não surtir efeito.<br />
Pode-se então mapear códigos de erro, como explicado <a href="http://codeerror.wordpress.com/2009/05/23/jsf-configurar-pagina-padrao-de-erro/" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #cc0000; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" target="_blank">NESTE</a> post, facilitando muito a vida, porém surge uma questão.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Como podemos simular erros, como o<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;"> erro 500</strong></span>?</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">A resposta vem de forma fácil, basta criar um JSP com uma simples linha de comando e o erro informado nesta linha irá aparecer na tela.</div><blockquote style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://s0.wp.com/wp-content/themes/pub/greyzed/images/quote.gif); background-origin: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #747775; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 10px; margin-right: 30px; margin-top: 15px; min-height: 32px; padding-bottom: 0px; padding-left: 60px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: grey; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span class="postbody" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><%@ page import=”javax.servlet.http.HttpServletResponse” %><br />
<%<br />
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,”");<br />
%></span></em></span></div></blockquote><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Neste exemplo estamos simulando o erro 500, indicado pela String <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">HttpServletResponse.SC_INTERNAL_SERVER_ERROR</strong></span>.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><a href="http://en.wikipedia.org/wiki/List_of_HTTP_status_codes" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #cc0000; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" target="_blank">Neste link</a> da wikipédia contém uma listagem com todos códigos de erro HTTP, com a descrição em inglês.<br />
<a href="http://java.sun.com/javaee/5/docs/api/javax/servlet/http/HttpServletResponse.html" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #cc0000; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" target="_blank">Neste link</a> da Sun, documentação da linguagem J2EE, estão descritas todas as Strings de erro que podem ser utilizadas pelo response.sendError().</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5865429107316362417.post-43646960291642453332011-02-16T14:03:00.000-08:002011-02-16T14:42:52.965-08:00MVC - É pra comer?<span class="Apple-style-span" style="color: #333333; font-family: Tahoma, Verdana, Arial, sans-serif; font-size: 12px; line-height: 21px;"></span><br />
<div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">Model-View-Controler</strong>, ou <strong style="font-weight: bold;">MVC</strong> para os mais íntimos, isso não é uma linguagem, não é um framework, tão pouco uma IDE, mas então o que pode ser?</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">MVC é um padrão de desenvolvimento para projetos, principalmente, de grande porte cuja manutenção/mudança é constante, trabalhando com este padrão de desenvolvimento que separa o projeto em três partes, a manutenção e até o desenvolvimento ficam mais fáceis. </div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Como funciona?</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">Model</strong> – Camada de negócios.<br />
<strong style="font-weight: bold;">View</strong> – Camada de visualização.<br />
<strong style="font-weight: bold;">Controller</strong> – Camada de controle e validações.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: grey; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Nota: Apesar de muitas biografias dizerem que não existe “<strong style="font-weight: bold;">camadas</strong>” na MVC, estas também não informam o que realmente é esta separação, porém a separação destas partes do projeto são, a grosso modo, realmente separadas em camadas, que é a definição utilizada aqui.</span></em> </div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Durante a programação do projeto, deve-se separar todas as classes, jsps, imagens, xmls e demais arquivos em algumas camadas, em se tratando de Java, podemos trabalhar com pacotes. </div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #333399; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">MODEL, tudo aquilo que se refere à regras de negócio deve ser guardado no(s) pacote(s) da camada model</span><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #333399; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">.</span><br />
<span class="Apple-style-span" style="color: #6aa84f;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"></span><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">VIEW, tudo que for relativo à tela, o que o usuário pode enxergar pertence à camada view e deve ser colocado no(s) pacote(s) referente à view, no caso dos jsps e imagens não á necessidade pois é subentendido que mesmo não estando em pacotes, todos os arquivos jsp, HTML, javascript, css, etç pertencem a esta camada.</span></span></span><br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: green; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #333300; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"></span></span><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">CONTROLLER, aqui é onde a porca torce o rabo, ou melhor, onde a discussão se inicia, uma das práticas da MVC diz que esta camada serve para fazer a comunicação entre a VIEW e a MODEL, porém uma outra prática da MVC informa que esta camada serve apenas para efetuar as validações da camada VIEW.</span></div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> A partir deste ponto, irei falar sobre duas formas diferentes de MVC, pois hoje em dia existe uma vasta discussão que nunca chega ao fim sobre a “verdadeira” forma da MVC. Por tanto irei comentar sobre as duas variações desta arquitetura, para você poder ter uma noção de como funciona e procurar realmente o que quer pra você.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;">Primeiro, irei apontar a camada controller como uma comunicação entre as outras duas camadas, segue imagem.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: center; vertical-align: baseline;"><img alt="Imagem exemplo MVC: Passando pela camada controller" border="1" class="aligncenter" src="http://codeerror.background.googlepages.com/MVC-1.JPG" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; display: block; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: auto; margin-right: auto; margin-top: 0px; max-width: 100%; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;" /></div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;">Neste caso, é possível notar que a camada view não enxerga de forma alguma a camada model.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Vejamos no exemplo:<br />
Em um cadastro on-line, possuímos as páginas e imagens que o cliente pode ver e tocar com o mouse (view), temos as validações (controller) e após isso temos as regras de negócio e gravação em banco de dados (model).<br />
Neste mesmo exemplo, o cliente preenche todos os dados na tela e clica em no botão de envio do formulário, neste momento todos os dados são repassados para a camada controller, as classes desta camada fazem a verificação dos dados informados, verificam se estão corretos, fazem a validação do CPF, etç. Se algo estiver errado o controller retorna uma mensagem de erro para a camada view, que a exibe na tela, se estiver tudo correto a camada controller repassa estas informações para a camada model.<br />
A camada model, recebe as informações e verifica se o cliente é menor de idade (regra de negócio), em caso positivo estas informações são armazenadas na tabela X, caso negativo (cliente maior de idade) as informações são armazenadas na tabela Y.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Existe também a definição que inutiliza a camada Controller, informando que esta só serve para realizar validações, é um suporte da camada view.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: center; vertical-align: baseline;"><img alt="Imagem exemplo MVC: inutilizando a camada controller" border="1" class="aligncenter" src="http://codeerror.background.googlepages.com/MVC-2.JPG" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; display: block; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: auto; margin-right: auto; margin-top: 0px; max-width: 100%; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;" /></div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">No mesmo exemplo do cadastro citado acima, quando o cliente clica no botão de envio do formulário, este é repassado à camada controller que efetua as validações e repassa para a camada model, até aqui está igual a definição anterior, porém, em uma tela que não existe validação de formulário, por exemplo “escolha as opções A ou B”, como não há validação neste caso (validação de campo nulo pode ser realizada direto no jsp/html) ao ser acionado o botão de ação, a camada view repassa as informações diretamente para a camada model.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Nesta definição possuímos duas estradas virtuais, na imagem representada pela seta vermelha (ida e volta passando pelo controller) e pela seta verde (ida e volta sem passar pelo controller).</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Mas como fazer as separações?</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Se fosse fácil não teria graça…As camadas têm que ser muito bem planejadas, e deve ser impressa a seguinte frase “Não importar classes e métodos do pacote xx.xxx.xxx pelo pacote xx.xxx.xxx”, esta frase deve ser colada na mesa de cada desenvolvedor…</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Como MVC é um padrão de desenvolvimento, não existe uma barreira que impeça você de, por exemplo, fazer a validação do CPF na camada de modelo, ou efetuar uma gravação em banco de dados na camada de visualização, porém se a MVC for seguida muito tempo e sangue serão economizados e casamentos poderão ser mantidos (viradas de noite prestando manutenção em código pode causar divórcio).</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Algumas práticas em Java podem ser utilizadas para ajudar a manter o padrão de desenvolvimento, por exemplo a utilização de Implements e classes Abstratas, que bloqueiam a utilização em determinadas ocasiões, os modificadores de acesso Private, Public e Protected devem ser utilizados com sabedoria também, para restringir e/ou permitir acesso as classes e métodos corretos.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Agora, com a faca e o queijo na mão, boa sorte na implementação da MVC</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5865429107316362417.post-35463783622293026552011-02-16T13:53:00.000-08:002011-02-16T14:47:50.784-08:00Swing: Ícone na area de notificação<span class="Apple-style-span" style="color: #333333; font-family: Tahoma, Verdana, Arial, sans-serif; font-size: 12px; line-height: 21px;"></span><br>
<div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Aviso: Este post é quase um livro!</span></span></strong></div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Algum tempo atraz, mas precisamente na matéria sobre <a href="http://codeerror.wordpress.com/2009/07/03/swing-windowlistener/" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #cc0000; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" target="_blank" title="WindowListener">WindowListener</a>, comentei sobre a lógica necessária para enviar uma Janela <em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Swing</em> para a bandeja do sistema, ou Area de Notificação, ou SystemTray, ou como você gosta de chamar aquele cantinho inferior direito, ao lado do relógio, onde fica um aglomerado de ícones que as vezes nem conhecemos.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Teoricamente tudo é facil, o difícil é apenas implementar a solução ao nosso projeto já finalizado…<br>
Mas vamos parar no pensamento que “tudo é facil”, e seguir em frente com este tutorial que ficou bem grande, e é quase todo código!</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Primeiro vamos à lógica necessária:<br>
Se você deseja enviar uma janela para a bandeja do sistema, desista, você nunca vai conseguir isso (ao menos em java), missão impossível.<br>
O que podemos fazer é uma pequena “gambiarra”, invisível aos olhos de meros mortais.<br>
Essa “POG” consiste em:</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: teal; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">1º</strong> – Capturar o evento “<strong style="font-weight: bold;">MINIMIZAR</strong>” ou “<strong style="font-weight: bold;">FECHAR</strong>” ou qualquer outra porcaria que você queira.<br>
<strong style="font-weight: bold;">2º</strong> – Deixar a janela que foi minimizada <strong style="font-weight: bold;">INVISÍVEL</strong>!<br>
<strong style="font-weight: bold;">3º</strong> – Instanciar uma nova classe que coloca um icone bonitinho ao lado do relógio.<br>
<strong style="font-weight: bold;">4º</strong> – Colocar um menu flutuante nesse icone (Menu Popup)<br>
<strong style="font-weight: bold;">5º</strong> – Capturar os eventos de click nos itens deste menu<br>
<strong style="font-weight: bold;">6º </strong>- Caso o item selecionado seja “Abrir novamente a jenela principal” deve-se deixar o frame principal <strong style="font-weight: bold;">VISIVEL</strong>novamente e “<strong style="font-weight: bold;">matar</strong>” as variáveis utilizadas para criar o icone bonitinho ao lado do relógio.</span></div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: teal; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"></span></div><a href="http://pinguimtomandocafe.blogspot.com/2011/02/swing-icone-na-area-de-notificacao.html#more">Mais informações »</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5865429107316362417.post-16141154270226165272011-02-16T13:27:00.000-08:002011-02-16T13:27:38.620-08:00MasterReplace - Manipulação de ArquivosMasterReplace, é um projeto swing sem nenhuma utilidade aparente. Sua única utilidade, ao menos para mim, é educativa, visando aprender e treinar além de um pouco de Orientação à Objetos, também a manipulação de arquivos.<br />
<br />
Este programa altera letras, palavras ou textos em arquivos de texto, convertendo entre sí códigos de base HEXA, HTML ou ALPHA.<br />
Um exemplo mais prático:<br />
<br />
Supondo que eu possua um arquivo de 500 mil linhas, e em vários lugares deste arquivo existem letras acentuadas (á, ç, õ, etç), porém eu preciso destas letra em html (&Acute, &ccedil, etç), então eu seleciono um arquivo, escolho as opções “De Alpha” e “Para HTML”, e o programa se vira fazendo as alterações necessárias, sem perder nenhuma outra informação do arquivo.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://sites.google.com/site/codeerrorbackground/master_raplace_1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://sites.google.com/site/codeerrorbackground/master_raplace_1.JPG" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: left;">Existe também a possibilidade de “traduzir” trechos de texto, em outra aba é possível digitar um texto qualquer, abaixo é possível selecionar “DE” e “PARA”, e na mesma caixa de texto o programa efetua a tradução.</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="http://sites.google.com/site/codeerrorbackground/master_raplace_2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://sites.google.com/site/codeerrorbackground/master_raplace_2.JPG" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: left;"><span class="Apple-style-span" style="color: #333333; font-family: Tahoma, Verdana, Arial, sans-serif; font-size: 12px; line-height: 21px;"></span></div>Apesar desta aparente “inutilidade”, o programa serve como exemplo para muitas outras coisas, principalmente para manipulação de arquivos, que será o foco dos próximos posts relacionados.<br />
<br />
Downloads:<br />
<a href="http://sites.google.com/site/codeerrorbackground/MasterReplace.jar" title="Aplicação executável.">JAR </a>(projeto executável – Java 6)<br />
<a href="http://sites.google.com/site/codeerrorbackground/MasterReplace.rar" title="Fontes do projeto Master Replace">RAR </a>(fontes do projeto – Java 6)<br />
<br />
OBS.: Para executar o jar, digite no prompt de comando <strong style="font-weight: bold;">“java -jar ARQUIVO”</strong>, substituindo obviamente a palavra<strong style="font-weight: bold;">“ARQUIVO” </strong>pelo caminho e/ou nome do arquivoUnknownnoreply@blogger.com0tag:blogger.com,1999:blog-5865429107316362417.post-66547866452847452882011-02-05T09:13:00.000-08:002011-02-16T14:48:10.529-08:00Descompactador de Arquivos<span class="Apple-style-span" style="color: #333333; font-family: Tahoma, Verdana, Arial, sans-serif; font-size: 12px; line-height: 21px;"></span><br />
<div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Há alguns dias eu havia mostrado como criar um <a href="http://pinguimtomandocafe.blogspot.com/2011/01/compactador-de-arquivos.html" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #cc0000; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" target="_blank" title="Post "Compactador de arquivos"">compactador de arquivos</a>, agora vou demonstrar como criar um descompactador de arquivos, para trabalhar em conjunto com o compactador.<br />
Falando à nível de código, é praticamente a mesma coisa, apenas precisamos inverter os objetos.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Para relembrar, segue o código do compactador, a explicação do código está <a href="http://pinguimtomandocafe.blogspot.com/2011/01/compactador-de-arquivos.html" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #cc0000; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" target="_blank" title="Post "Compactador de Arquivos"">aqui</a>.</div><blockquote style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://s0.wp.com/wp-content/themes/pub/greyzed/images/quote.gif); background-origin: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #747775; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 10px; margin-right: 30px; margin-top: 15px; min-height: 32px; padding-bottom: 0px; padding-left: 60px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">public </span><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">static void</span></strong> compactar(String <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">arquivoOrigem</span>, String <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">arquivoZipado</span>) {<br />
<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">byte</span></strong>[] <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">buf </span>= <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">new byte</span></strong>[<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">1024</span>];<br />
<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">try </span></strong>{<br />
ZipOutputStream <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">out </span><br />
= <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">new </span></strong>ZipOutputStream(<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">new </span></strong>FileOutputStream(<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">arquivoZipado</span>));<br />
FileInputStream <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">in </span>= <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">new </span></strong>FileInputStream(<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">arquivoOrigem</span>);<br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">out</span>.putNextEntry(<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">new </span></strong>ZipEntry(<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">arquivoOrigem</span>));<br />
<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">int </span></strong><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">len</span>;<br />
<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">while</span></strong>((<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">len </span>= <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">in</span>.read(<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">buf</span>)) > <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">0</span>) {<br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">out</span>.write(<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">buf</span>, <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">0</span>, <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">len</span>);<br />
}<br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">out</span>.closeEntry();<br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">in</span>.close();<br />
<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">out</span>.close();<br />
} <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">catch </span></strong>(Exception <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">e</span>) {<br />
System.<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">out</em>.println(<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">“deu erro”</span>);<br />
}<br />
}</div></blockquote><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Esse método cria um objeto <strong style="font-weight: bold;">ZipOutPutStream </strong>para representar o <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;">arquivo compactado</span> e um arquivo<strong style="font-weight: bold;">FileInputStream </strong>para representar o <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;">arquivo de origem</span>, que será lido.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Para descompactar um arquivo precisamos basicamente inverter esses dois objetos, e suas referências no resto do código, ficando um objeto <strong style="font-weight: bold;">ZipInputStream </strong>para <strong style="font-weight: bold;">ler </strong>o arquivo compactado e um objeto <strong style="font-weight: bold;">FileOutputStream </strong>para<strong style="font-weight: bold;">criar </strong>um novo arquivo.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span id="more-263" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"></span></div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Simples né?</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Outro esquema interessante, no compactador adicionamos uma nova entrada ao arquivo compactado, utilizando o código <strong style="font-weight: bold;">putNextEntry</strong>, mas no descompactador devemos capturar uma entrada existente, com o código<strong style="font-weight: bold;">getNextEntry</strong>.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Para sabermos o nome do arquivo que está dentro da compactação, para poder criá-lo, basta utilizar adicionar ao getNextEntry um <strong style="font-weight: bold;">getName</strong>, ficando <strong style="font-weight: bold;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">objeto</em>.getNextEntry().getName().</strong></div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Uma observação importante, se você informar apenas o nome para criação do arquivo ele será criado dentro de um buraco negro, ou no melhor dos casos, na pasta do projeto, então você deve obrigatoriamente informar <strong style="font-weight: bold;">caminho + nome</strong>. Para descobrir o caminho onde o arquivo deve ser criado, eu simplesmente pego todos os caracteres do arquivo de origem (c:\pasta\pasta\arquivo.zip) até o ultimo separador de diretório, nesse caso o caractere barra (\).</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Está dificil de entender?</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Então vamos ver na prática, como estou presumindo que você já fez o compactador e a lógica dele está toda comentada, então só adicionei comentários nos códigos novos/trocados.</div><blockquote style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://s0.wp.com/wp-content/themes/pub/greyzed/images/quote.gif); background-origin: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #747775; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 10px; margin-right: 30px; margin-top: 15px; min-height: 32px; padding-bottom: 0px; padding-left: 60px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">public static void</span></strong> descompactar(String arquivoZipado) {<br />
<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">byte</span></strong>[] buf = <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">new byte</span></strong>[<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">1024</span>];<br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//verifica o local onde o arquivo compactado está, para salvar</span></em><br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//o arquivo que será criado pega todos os caracteres da string</span></em><br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//até a última barra, ou seja, a string do arquivoZipado está</span></em><br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//”c:\pasta\pasta\pasta\arquivo.zip” e a variável pathArquivo</span></em><br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//ficará c:\pasta\pasta\pasta</span></em><br />
String pathArquivo = arquivoZipado.substring(<br />
0, arquivoZipado.lastIndexOf(<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: navy; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">“\\”</span>));<br />
<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">try </span></strong>{<br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//O arquivo de escrita ZipOutputStream foi trocado por um</span></em><br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//arquivo de leitura (queremos ler o zip)</span></em><br />
ZipInputStream in = <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">new </span></strong>ZipInputStream(<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">new </span></strong>FileInputStream(arquivoZipado));<br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//O arquivo de leitura FileInputStream foi trocado por um</span></em><br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//arquivo de escrita (queremos criar um arquivo)</span></em><br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//O arquivo será criado no mesmo diretório do arquivo compactado</span></em><br />
FileOutputStream out = <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">new</span></strong> FileOutputStream(<br />
pathArquivo +<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: navy; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> “\\”</span> + in.getNextEntry().getName());<br />
<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">int </span></strong>len;<br />
<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">while </span></strong>((len = in.read(buf)) > <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">0</span>) {<br />
out.write(buf, <span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: red; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">0</span>, len);<br />
}<br />
in.closeEntry();<br />
out.close();<br />
in.close();<br />
} <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">catch </span></strong>(Exception e) {<br />
System.out.println(<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: blue; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">“deu erro”</span>);<br />
}<br />
}</div></blockquote><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">É possível compactar/descompactar arquivos compactados com qualquer extensão (você pode criar a sua extensão), desde que o arquivo esteja compactado a extensão não importa, também é possível descompactar um arquivo que foi compactado pelo winrar ou winzip, só testei com esses dois mas deve funcionar com outros também.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Esses dois códigos de exemplo só compactam/descompactam um único arquivo, mas não fique desanimado, é possível aprimorar o código.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Uma dica é criar um loop de controle e, para compactar, repete todo o código desde <strong style="font-weight: bold;">FileInputStream </strong>e<strong style="font-weight: bold;">putNextEntry </strong>(que adiciona um novo arquivo ao zip) até o final do <strong style="font-weight: bold;">while</strong>. Para descompactar em massa, crie um loop para controlar desde o <strong style="font-weight: bold;">FileOutputStream </strong>e <strong style="font-weight: bold;">getNextEntry </strong>(que captura o próximo arquivo que está dentro do zip) até o final do <strong style="font-weight: bold;">while</strong>. Importante, para o descompactador verifica se existe uma próxima entrada adicionando um tratamento de erro para finalizar a descompactação caso não exista mais arquivos dentro do zip.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Qualquer dúvida, comentários abaixo!</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Enjoy.</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5865429107316362417.post-39608834770628947832011-02-05T09:09:00.000-08:002011-02-16T14:48:21.349-08:00Swing: Abrindo uma URL<span class="Apple-style-span" style="color: #333333; font-family: Tahoma, Verdana, Arial, sans-serif; font-size: 12px; line-height: 21px;"></span><br />
<div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Se você fazendo ou fará um programa para desktop, de preferencia em java que é o assunto principal desse blog, você certamente precisará, em algum momento, em algum lugar da aplicação, criar um link para algum site ou documento, pode ser o link de acesso ao site do programa para compra de licença, um manual do usuário ou simplesmente para ver sua página no orkut, pra mostrar que foi você quem fez aquele software.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Qualquer que seja o motivo, o fato é a necessidade de criar um link para fora do programa, isso não é muito complicado, mas também não é tão simples como no html, que apenas um <em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><a href></em> resolveria, no programinha feito em java precisaremos manipular alguns objetos, que são <strong style="font-weight: bold;">java.awt.Desktop</strong> e <strong style="font-weight: bold;">java.net.URI.</strong></div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">O esquema não fica difícil, primeiro deve ser criado um objeto <strong style="font-weight: bold;">Desktop</strong>, recebendo o desktop padrão do usuário com o <strong style="font-weight: bold;">getDesktop</strong>, esse método retorna a area de trabalho do navegador padrão do usuário.<br />
Criado o objeto Desktop, agora precisamos criar um objeto <strong style="font-weight: bold;">URI</strong>, esse objeto representa um “<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Identificador de Recursos Uniforme</em>” ou seguindo a descrição da sigla, em ingles, “<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Uniform Resource Identifier</em>“. Ele serve para criarmos paths identificadores de acessos à recursos diversos, como por exemplo, a URL de um site.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span id="more-269" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"></span></div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Muita calma que ainda não acabou!</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Você vai precisar criar dois tratamentos de erro, para cada uma das ações tomadas acima.<br />
Para criar uma URL no objeto URI é necessário tratar uma exceção, caso a URL informada não seja válida, para isso utilizamos a exception <strong style="font-weight: bold;">java.net.URISyntaxException</strong>. Vai ser necessário tratar também a abertura da url, quando mandarmos o objeto Desktop abrir a url criada pode ocorrer uma exceção qualquer de entrada e saida, como por exemplo um rato dentro do seu computador roendo a placa de rede que entra em curto justamente quando você clicar no botão para abrir a url. Para que isso não aconteça precisamos tratar esse tipo de erro com a exception<strong style="font-weight: bold;">java.io.IOException</strong>.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Agora chega de conversa fiada, vamos ao que interessa, o código de exemplo!!</div><blockquote style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://s0.wp.com/wp-content/themes/pub/greyzed/images/quote.gif); background-origin: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #747775; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 10px; margin-right: 30px; margin-top: 15px; min-height: 32px; padding-bottom: 0px; padding-left: 60px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;">public static void</strong></span> main(String[] args) {<br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//Cria um objeto Desktop vazio</span></em><br />
Desktop desktop = <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">null</span></strong>;<br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//Cria um objeto URI vazio</span></em><br />
URI uri = <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">null</span></strong>;<br />
<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">try </span></strong>{<br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//inicia a variável desktop, recebendo a area de trabalho do navegador</span></em><br />
desktop = Desktop.getDesktop();<br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//inicia a variável URI com uma endereço http</span></em><br />
uri = <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">new </span></strong>URI(<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #3366ff; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">“http://codeerror.wordpress.com”</span>);<br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//manda o desktop abrir a url criada acima</span></em><br />
desktop.browse(uri);<br />
} <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">catch </span></strong>(URISyntaxException erroUri) {<br />
System.<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">out</em>.println(<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #3366ff; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">“deu erro ao criar a url, acho que ela está errada”</span>);<br />
} <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">catch </span></strong>(IOException desktopErro) {<br />
System.<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">out</em>.println(<span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #3366ff; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">“deu erro ao abrir o navegador com o endereço informado”</span>);<br />
}<br />
}</div></blockquote><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Enjoy!</div>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-5865429107316362417.post-50238239190971313392011-01-09T16:26:00.001-08:002011-02-16T14:43:07.051-08:00Acessibilidade, parte 1Quando falamos de acessibilidade em sites (e programas), logo nos vem a mente um site preparado para atender portadores de deficiência, qualquer que seja a deficiência.<br />
Esse pensamento é correto, mas não abrange o total significado desse termo.<br />
Acessibilidade deve ser pensada em como uma adaptação à todo o tipo de restrição, afinal estamos falando de programas e web sites, que são acessados de qualquer lugar, de qualquer equipamento, por qualquer pessoa.<br />
Um exemplo prático, eu, por enquanto, não sou portador de nenhuma deficiência física ou motora que me impeça de acessar e navegar por qualquer web site, porém nem sempre uso a internet em um computador, afinal a cada dia que se passa surgem novas e formas de ficar conectado o tempo todo, mas voltando ao assunto principal, possuo um Smartfone que utilizo para ver notícias, informações diversas e porcarias. Apesar de não possuir deficiências em meu corpo, possui deficiências em meu equipamento, que são Tela reduzida, Conexão lenta e baixo processamento, dessa forma fica quase impossível navegar pela maioria de sites que existem hoje no mundo.<br />
<span id="more-257"></span><br />
Com a popularização de blogs, microblogs, minimicroblogs e coisas do tipo, qualquer pessoa que tenha uma conexão com a internet é capaz de “criar” um site, porém essas pessoas, desprovidas de conhecimento técnico, acabam por vezes complicando a vida de quem quer ver as informações postas nesses sites. Muitas foram as vezes em eu quiz ver um vídeo em um blog qualquer mas não consegui, por que o próprio site não me deixou ver o famigerado vídeo, colocando tantos banners e imagens pesadas que levaria mais tempo pra carregar a página do que o vídeo. Só por que o dono do blog possui uma conexão banda larga de alguns mega, isso não significa que todas as pessoas que passarem pelo blog também possuam a mesma conexão, afinal a internet é mundial, e no mundo possuimos todos os tipos de equipamentos e velocidades de conexão, e devo frisar que não é só no Brasil que se fala portugues, isso sem contar os milhares de brasileiros que vivem em outros países e gostam de ficar atualizados com os acontecimentos.<br />
Perceberam que o assunto de acessibilidade vai muito além de se adequar as necessidades de portadores de deficiência física e motora?<br />
Para possuir um site acessível a TODOS os públicos, devemos ter um pensamento simples<br />
<blockquote>Prepare seu site para atender ao pior caso possível.</blockquote>E o que poderia ser um ”pior caso possível”?<br />
Isso vai depender do seu público-alvo.<br />
Digamos que você não tenha um público alvo, o assunto de seu site atende desde crianças até adultos, pessoas pobres e ricas, gordos e magros, altos e baixos. Então para o pior caso possível, poderia sugerir o seguinte.<br />
<blockquote>Uma pessoa cega, com deficiência motora, acessando o site do celular ou de um computador com windows 95 e conexão discada.</blockquote>Esse caso é ruim o bastante? Pode ter certeza que existem piores, mas vamos parar por aqui, esse caso já nos atende como exemplo. Certamente, pelo menos 20% do público de seu site, é ou será (se você ainda não fez o site) portador de alguma deficiência ou impedimento, você quer deixar essas pessoas de fora? E os cliques que eles podem dar nas propagandas? Vale a pena perder 20% (no mínimo) de sua receita? E se você possuir um e-commerce, valerá a pena perder 20% de suas vendas? Pensa com calma.<br />
Antes de partir para as dicas de códigos, devemos ter um pouco de teoria e técnicas.<br />
Primeiramente, para atender à conexão discada ou acesso via celular, devemos deixar o site o mais limpo o possível, isso não significa que você não poderá colocar imagens em seu site, muito pelo contrário, você deve por imagens no seu site, imagens, banners em flash, etç. mas tome cuidado.<br />
Se cada página de seu site possuir mais de 500k, já é um problema. Esse número não é um padrão, é um número pensado por mim, de acordo com os vários testes que já fiz. Uma página com 500k ou menos, já atente a muitos dos impedimentos.<br />
Se sua página ultrapassa os 500k, como é o caso da maioria absoluta dos blogs e sites existentes hoje no mundo, é melhor dar uma reformulada no visual.<br />
Algo interessante é tratar imagens, você tem 30 imagens em cada página? Isso é realmente necessário? Se você colocar 10 ou 15 imagens, que já é muito, garanto que seu site não vai ficar mais feio, pelo contrário, é capaz que fique mais bonito e menos cansativo.<br />
Se mesmo diminuindo a quantidade de imagens as páginas continuam pesadas, ou se você tem poucas imagens, pode ser que as imagens que você tem hoje sejam muito pesadas.<br />
Por exemplo, você quer exibir em seu site uma imagem e define seu tamanho, no site, para 100x100px, mas essa imagem tem uma resolução de 1024x1024px e quase 1 mb de tamanho. Percebeu quanto de desempenho você está perdendo aqui? Abra qualquer programa editor de imagem (que não seja o paint) e reduza o tamanho dela, deixe a imagem do tamanho correto para exibição em seu site, se vai exibi-la com tamanho de 100x100px, então deixe-a com esse tamanho, isso não causará a perda de qualidade da imagem.<br />
Outra coisa importante é o tipo (extensão) da imagem. Uma imagem BMP, PNG, TIFF ou etç. ocupam muito mais espaço que imagens JPG ou GIF, evite usar BMP e TIFF, se você tentou converter para GIF e perdeu a qualidade, tente converter para JPG, se ainda assim perdeu qualidade, tente deixar como PNG, em ultimo caso, evite ao máximo utilizr BMP e TIFF, esses formatos são muito pesados, a imagem fica desnecessáriamente grande. Para converter a imagem, abra o mesmo editor de imagens que utilizou para diminuir a resolução acesse a opção “salvar como”, para escolher um novo tipo de imagem.<br />
Preste atenção também nos banners, os famosos flash animados, que hoje já tem vários concorrentes como o Java Flex ou o Microsoft Silverlite.<br />
Você pode sim ter banners animados em seu site, tomando as mesmas precauções que se tem com as imagens. Se é você que faz as animações é melhor ainda, trate as imagens antes de utilizá-las, não crie áreas inúteis, ou seja, certifique-se de que não tem nada saindo muito para fora da área de trabalho do banner, pois apesar de não aparecer na animação, essas coisas continuam lá dentro, deixando o arquivo com alguns kb a mais. Não crie muitos objetos, principalmente se ele já foi criado, faça uso das chamadas bibliotecas e reutilize imagens e componentes que já foram importados anteriormente. Já crie a animação com o tamanho que ela assumirá em seu site e se essa animação não for possuir nenhuma interação, como passar o mouse e mudar alguma coisa, então converta para GIF, que é muitas vezes mais leve que a animação. Se a interação que você precisa é um simples clique (se clicar no banner abre uma página), não há a necessidade de deixar animação em seu formato original, converta para GIF e utilize eventos HTML + JavaScript para controlar a ação do mouse.<br />
Com essas pequenas ações, que nem te tomarão tanto tempo, você já se assegura que seu site estará leve e acessível a vários tipos de conexão.<br />
Por enquanto podemos parar por aqui, em breve mais dicas sobre como deixar seu site acessívelUnknownnoreply@blogger.com0tag:blogger.com,1999:blog-5865429107316362417.post-32665484428166329592011-01-09T15:39:00.000-08:002011-02-16T14:48:39.285-08:00Compactador de Arquivos<span class="Apple-style-span" style="color: #333333; font-family: Tahoma, Verdana, Arial, sans-serif; font-size: 12px; line-height: 21px;"></span><br />
<div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Se você não estiver gostando de como os compactadores de mercado funcionam, ou se quiser criar um você mesmo um compactador para utilizar em sua aplicação, então veio ao lugar certo!<br />
Então vamos ver, passo a passo o que precisamos.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;"><strong style="font-weight: bold;">Materiais:</strong></span></div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Uma string, com o caminho do arquivo original (C:\pasta\arquivo.txt)<br />
Uma string, com o nome do arquivo compactado (arquivo.zip)<br />
Um array de bytes<br />
Um objeto <strong style="font-weight: bold;">ZipOutputStream </strong><br />
Um objeto <strong style="font-weight: bold;">FileInputStream</strong><br />
Um laço, bem preparado<br />
Paciência e determinação para forjar o compactador.</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><br />
</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;"><strong style="font-weight: bold;">Modo de preparo.</strong></span></div><blockquote style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: url(http://s0.wp.com/wp-content/themes/pub/greyzed/images/quote.gif); background-origin: initial; background-position: 0% 0%; background-repeat: no-repeat no-repeat; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #747775; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 10px; margin-right: 30px; margin-top: 15px; min-height: 32px; padding-bottom: 0px; padding-left: 60px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #993300; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">public static void </span></strong></em>compactarArquivo(String origem, String destino) {<br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//Array de bytes que será utilizado para a compactação</span></em><br />
<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #993300; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">byte</span></strong>[] buf = <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #993300; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">new byte</span></strong>[1024];<br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//É necessário inserir o código dentro de um try, para capturar possíveis erros</span></em><br />
<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #993300; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">try</span></strong>{<br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//Nome do arquivo de destino (não é necessário o caminho)</span></em><br />
String compac = destino;<br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//Criação do objeto ZIP, criando um arquivo de saída com o nome informado</span></em><br />
ZipOutputStream out = <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #993300; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">new </span></strong>ZipOutputStream(new FileOutputStream(compac));<br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//Criação de um arquivo de entrada, para ser lido e compactado</span></em><br />
FileInputStream in = <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #993300; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">new </span></strong>FileInputStream(origem);<br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//Aqui informamos que o objeto ZipOutputStream será criado com base</span></em><br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//no arquivo de origem.</span></em><br />
out.putNextEntry(<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #993300; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">new </span></strong>ZipEntry(origem));<br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//Variável de controle do laço.</span></em><br />
<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #993300; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">int </span></strong>loop;<br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//Esse loop irá ler cada byte do arquivo de origem, e irá copiá-lo</span></em><br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//de forma comprimida para o arquivo compactado.</span></em><br />
<strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #993300; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">while</span></strong>((loop= in.read(buf)) > 0){<br />
out.write(buf, 0, loop);<br />
}<br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//Aqui é finalizada a compactação</span></em><br />
out.closeEntry();<br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//Podemos fechar o arquivo de entrada (origem)</span></em><br />
in.close();<br />
<em style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: italic; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #339966; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">//Fechamos (e criamos) o arquivo compactado</span></em><br />
out.close();<br />
} <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #993300; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">catch</span></strong>(FileNotFoundException mensagem) {<br />
mensagem.printStackTrace();<br />
} <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #993300; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">catch</span></strong>(IOException erro) {<br />
erro.printStackTrace();<br />
} <strong style="font-weight: bold;"><span style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #993300; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">catch</span></strong>(Exception erro) {<br />
erro.printStackTrace();<br />
}<br />
}</div></blockquote><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><br />
</div><div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 12px; font-style: inherit; font-weight: inherit; margin-bottom: 1.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">Se os comentários dentro do método não estiverem ajudando muito, deixe um comentário que ajudarei no que for possível.<br />
Boa sorte!<br />
<br />
Esse arquivo pode ser visto também <a href="http://codeerror.wordpress.com/2011/01/09/compactador-de-arquivos/">aqui</a>.</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5865429107316362417.post-70178811848755737582010-10-24T08:04:00.001-07:002010-10-24T08:04:23.950-07:00JFileChooser, com algumas dicas fica melhor ainda.<p>Em algum momento você precisou, precisa ou precisará utilizar essa Classe, que contém os métodos necessários para<em>"abrir"</em> um arquivo.<br>Com ele, você pode exibir aquela janelinha legal do Sistema Operacional que permite ao usuário selecionar algum arquivo, para que ele seja <em>"aberto"</em> pelo seu sistema.<br>Mas não existe nada de complicado, muito pelo contrário, é muito simples fazer essa janelinha aparecer. <p>Crie uma classe chamada FileChooser, e copie o código abaixo para ela. <blockquote> <p>package br.teste;<br> import javax.swing.JFileChooser;<br> public class FileChooser {<br> public static void main(String[] args){<br> JFileChooser arquivo = new JFileChooser();<br> arquivo.showOpenDialog(null);<br> }<br> }</p></blockquote> <p>Pode executar!<br>Viu que legal?<br>Mas o que acontece com o arquivo selecionado? Por enquanto nada! Seu código está apenas mandando a janela abrir, mas não está nem ao menos verificando se ela abriu!<br>Podemos contornar esse pequeno problema com o seguinte ajuste. <p><img title="Mais..." alt="" src="http://codeerror.wordpress.com/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif"> <blockquote> <p>package br.teste;<br> import javax.swing.JFileChooser;<br> public class FileChooser {<br> public static void main(String[] args){<br> JFileChooser arquivo = new JFileChooser();<br> int retorno = arquivo.showOpenDialog(null);<br> if(retorno == JFileChooser.APPROVE_OPTION){<br> //abriu!<br> }else{<br> //não abriu<br> }<br> }<br> }</p></blockquote> <p>A janelinha retorna um <strong>INTEIRO</strong>, dizendo se foi clicado no botão <strong>Abrir</strong>, no botão <strong>Cancelar</strong>, se deu <strong>Erro</strong>, ou qualquer outra coisa que aconteça, mas não nos interessa saber quais são esses inteiros, por que a própra classe tem<strong>Constantes</strong> para esse tipo de situação.<br>O ajuste acima cria um inteiro para receber o retorno do <strong>JFileChooser</strong>, se o retorno for o botão <strong>"Abrir"</strong>, representado pela constante <strong>APPROVE_OPTION</strong>, então faz alguma coisa, senão faz outra coisa. <p>Mas o que fazer? <p>O JFileChooser serve "apenas" para localizar um arquivo, mas abrir, deletar, copiar, etç, deve ser feito por você, utilizando algum outro código. O JFileChooser te ajuda informando o caminho do arquivo, e é isso que devemos pegar depois que o botão "Abrir" for selecionado. <p>O comando que faz essa magica é o <strong>getSelectedFile().getAbsolutePath()</strong>, que retorna uma String. Depois você decide o que faz com essa String. <p>O código atualizado. <blockquote> <p> package br.teste;<br> import javax.swing.JFileChooser;<br> import javax.swing.JOptionPane;<br> public class FileChooser {<br> public static void main(String[] args){<br> String caminhoArquivo = "";<br> JFileChooser arquivo = new JFileChooser();<br> int retorno = arquivo.showOpenDialog(null);<br> if(retorno == JFileChooser.APPROVE_OPTION){<br> caminhoArquivo = arquivo.getSelectedFile().getAbsolutePath();<br> JOptionPane.showMessageDialog(null, caminhoArquivo);<br> }else{<br> //não abriu<br> }<br> }<br> }</p></blockquote> <p>Como pode ver, logo no inicio é criada uma String, para armazenar o path do arquivo, e se o botão "Abrir" for acionado, o caminho do arquivo que foi selecionado vai ser armazenado nessa variável.<br>Pronto, agora você sabe "abrir" um arquivo. <p><strike>Quer saber como ler e manipular o arquivo depois de obter o caminho? </strike>(Em breve) <p>O JFileChooser possui mais algumas utilidades, e as veremos agora. <h6>Filtro de extensões</h6> <p>É possível definir um filtro, para abrir somente arquivos *.xxx, deixando a extensão a seu critério, é claro.<br>Antes de abrir a janela de seleção, configure a variável do JFileChooser com o seguinte código. <blockquote> <p> arquivo.setFileFilter(new javax.swing.filechooser.FileFilter(){<br> //Filtro, converte as letras em minúsculas antes de comparar<br> public boolean accept(File f){<br> return f.getName().toLowerCase().endsWith(".jpg") || f.isDirectory();<br> }<br> //Texto que será exibido para o usuário<br> public String getDescription() {<br> return "Arquivos de imagem (.jpg)";<br> }<br> });</p></blockquote> <p>O primeiro método converte todas as letras em minúsculas e depois compara as extensões, exibindo somente as que forem iguais as definidas dentro dos parênteses de endsWith, no exemplo, estou criando o filtro para exibir somente arquivos com a extensão JPG.<br>O segundo método serve apenas para avisar ao usuário que só serão exibidos somente os arquivos desta extensão.<br>É possível definir vários filtros, para isso crie vários métodos <strong>setFileFilter.</strong> <h6>Alterando o título da janela</h6> <p>Essa é mais fácil, se quiser alterar o título da janelinha, configure a variável do JFileChooser com o comando<strong>setDialogTitle("")</strong>, antes de mandar abrir a janela. <blockquote> <p> arquivo.setDialogTitle("Selecione uma imagem");</p></blockquote> <h6>Configurar o diretorio/pasta inicial do JFileChooser</h6> <p>Isso é muito útil, evita que o usuário perca a paciência sempre que quiser abrir um arquivo, porque, por padrão, o JFileChooser abre sempre a pasta principal do usuário, configurada pelo sistema operacional, no meu caso é a pasta "Meus Documentos" do windows e "/home" do Linux. <p>O comando que configura o diretório inicial é o <strong>setCurrentDirectory()</strong> que recebe um objeto <strong>File</strong>, esse método deve ser utilizado exatamente da mesma maneira que os anteriores, antes de mandar abrir a janela. <p>Uma dica legal é, crie uma variável para armazenar o caminho do ultimo arquivo selecionado, e crie um objeto File utilizando esse caminho, desta forma o JFileChooser irá abrir sempre na ultima pasta utilizada! <blockquote> <p>String caminhoCompleto = arquivo.getSelectedFile().getAbsolutePath();<br>caminhoUltimoArquivo = caminhoCompleto.substring(0,caminhoCompleto.lastIndexOf("\\"));</p></blockquote> <p>Explicação: Na primeira linha, é coletado o path completo do arquivo selecionado, e isso inclui o nome do arquivo<strong>(c:\pasta\pasta\arquivo.jpg)</strong>. Na segunda linha estou fazendo um SubString, pegando esse caminho completo da primeira letra até a ultima barra encontrada<strong> (c:\pasta\pasta\)</strong>, desta forma conseguimos pegar somente a pasta do arquivo selecionado. <p>Este comando você coloca dentro daquele IF que verifica se o botão "Abrir" foi acionado, e a variável<strong>caminhoUltimoArquivo</strong> tem que estar acessível da proxima vez que o JFileChooser for chamado. <p>Antes de abrir a janela, você insere o código abaixo, <strong>verificando se a variável caminhoUltimoArquivo não está em branco ou nula</strong>, porque se for a primeira vez que o JFileChooser estiver sendo chamado, essa variável estará vazia, e você vai ser surpreendido com uma <strong>NullPointerException</strong> ou alguma de suas irmãs. <blockquote> <p> File pathInicial = new File(caminhoUltimoArquivo);<br> arquivo.setCurrentDirectory(pathInicial);</p></blockquote> <p>No exemplo que estou utilizando isso não irá funcionar, por que não possui um JFrame, Classe e nem ao menos um botão controlando a abertura do JFileChooser, então não existe uma classe "Pai" que eu possa guardar a variável caminhoUltimoArquivo, mas se você está precisando utilizar o JFileChooser, obviamente tem uma(s) janela(s) pai(s) para fazer esse controle. <p>Qualquer dúvida ou sugestão, pode postar aqui. <p>Boa sorte!</p> Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5865429107316362417.post-11411940368915604082010-10-24T08:03:00.001-07:002010-10-24T08:03:27.329-07:00Gerar Executáveis em JAVA! JAR e EXE<p>Sim, você não leu errado, é exatamente isso o que está escrito.<br>Mas como? Por que?? Pra que??? Você deve estar se perguntando! E eu respondo: “Simplesmente por que eu quero” ou melhor ainda “Estou acostumado com programas executáveis” (não é o meu caso), ou por qualquer que seja o motivo. <p>Antes de chegar ao <strong>X</strong> da questão, deixe-me falar algumas coisas e sugerir outras. <p>Primeiramente gostaria de comentar sobre a dificuldade que temos em apenas tocar neste assunto (<em>gerar um executável em java</em>) em comunidades próprias dessa linguagem, porque Java não foi criado pra este propósito, e blá-blá-blá, e o pessoal simplesmente não dá nenhuma informação, apenas vem com críticas destrutivas. Realmente, java não foi criado para este propósito, e gerando um arquivo <strong>*.EXE</strong> você perde a portabilidade e etç, mas não me importo eu quero gerar um executável! <p><img title="Mais..." alt="" src="http://codeerror.wordpress.com/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif"> <p><strong>Opções! E por que escolhê-las:</strong> <p><strong><u></u></strong> <p><strong><u>JAR</u></strong><br>Você conhece o <strong>JAR</strong>? É um coleguinha do <strong>RAR</strong> e do <strong>ZIP</strong>.<br>A linguagem Java dispõe de uma opção muito interessante, largamente utilizada na distribuição de programas e bibliotecas, e consiste simplesmente em <em>um grupo de classes compactados</em>, da mesma forma como você compacta seus arquivos em um ZIP ou um RAR, você pode compactar suas classes em um JAR. Claro que não dá pra usar o Winzip ou o Winrar pra gerar um arquivo JAR, mas você pode utilizar esses programas ou qualquer outro do tipo para<strong>ler</strong> e <strong>descompactar</strong> o JAR. <p><strong>Como fazer?</strong> Muito simples.<br>A primeira opção é utilizando uma IDE, como <em>Eclipse</em> ou <em>NetBeans</em>. No caso do eclipse, você clica com o botão direito em cima da pastinha raiz do seu projeto, vai até Exportar e escolhe a opção <em>Java Arquive File (JAR)</em>, segue algumas orientações na tela como escolher onde o arquivo será salvo e o nome do arquivo, clica em um botãozinho e pronto, seu jar está criado, mas digamos que você não use uma IDE, você criou todas as suas <strong>999</strong> classes na mão, utilizando o notepad! Como fazer? <p>Se você é um guerreiro, e quer continuar lutando, pode utilizar o console para criar seu jar, mas é um pouco mais dificil que utilizando uma IDE. <p>Primeiro você vai precisar escolher qual é sua classe principal (Main class), não importa se seu projeto é pequeno, grande ou gigante, com certeza ele tem uma classe principal, que deve ser iniciada primeiro.<br>Agora que você sabe o nome da sua classe principal, abra o notepad e escreva os seguintes dizeres. <blockquote> <p>Main-Class: <sua classe></p></blockquote> <p>Muito importante, aliás, extremamente importante,<strong> pule uma linha</strong> quando terminar de escrever isso ai acima, senão nada funciona. Esse arquivo será o <strong>MANIFEST</strong>, o jar utiliza isso pra saber o que fazer quando alguem o executar. <p>Feito isso, salve esse arquivo em qualquer lugar, eu não me importo, apenas salve com um nome facil de decorar. <p>Agora vá até o console e digite: <blockquote> <p><strong>jar cmvf</strong> <<NOME-DO-JAR>>.jar <<SEU-ARQUIVO-MANIFEST>>.txt <<A PASTA DA SUA APLICAÇÃO>></p></blockquote> <p><strong>Calma</strong>, eu explico.<br>O que está em vermelho é um código que precisa ser digitado para criar o jar, da mesma forma como você digita<strong>JAVAC</strong> para compilar uma classe, esses dois (<strong>jar cmvf</strong>) servem pra “compilar” um jar.<br>Na parte <strong><<NOME-DO-JAR>>.jar</strong>, você deve sobstituir obviamente <strong><<NOME-DO-JAR>></strong> pelo nome que você quer dar ao jar quando este for compilado, por exemplo “minhaAplicacao.jar”.<br>Em <strong><<SEU-ARQUIVO-MANIFEST>>.txt</strong> você vai trocar o <strong><<SEU-ARQUIVO-MANIFEST>></strong> pelo nome do arquivo que você criou, que contém o nome da sua classe principal (você lembra o nome do arquivo “né”?).<br>E por ultimo, você troca <strong><<A PASTA DA SUA APLICAÇÃO>></strong> pelo caminho inteiro até a pasta raiz onde seus arquivos<strong> .CLASS</strong> estão. <p>Pronto, você criou um jar! <p>Esse arquivo jar, para ser executado precisa que alguem vá até o console e digite: <blockquote> <p>java –jar programa.jar</p></blockquote> <p>Não dá para apenas clicar duas vezes e abrir, quer dizer, dá sim, você tem que configurar o computador da vítima, ou melhor, do usuário, para associar a extensão .jar ao arquivo java.exe ou javaw.exe, da pra fazer esquemas assim alterando chaves no registro, mas isso é outra história. <p>Formas de utilizar/distribuir. <p>Você sabe que pra executar algum programa feito em java, é preciso que o usuário tenha alguma JRE instalada no computador “né”? Se o usuário não a tiver, seu programa não vai rodar.<br>Se você não quiser fazer o povo baixar e instalar a jre pra utilizar seu programa, você pode embutir uma jre junto aos seus arquivos e entregar tudo pro usuário.<br>Ficaria mais ou menos assim, você baixa a JRE, separa as coisas inúteis que vem junto com ela (tipo exemplos, programas pra rodar applet, documentos, etç) deixa só o necessário pra tentar reduzir o tamanho final da pasta. Depois você coloca seu JAR dentro das pastas da JRE, em qualquer lugar, isso não me importa em nada, apenas escolha um lugar e joga o jar lá.<br>Depois você cria um arquivo BAT ou se você souber programar em C, VB, Delphi ou qualquer outra coisa, cria um arquivo que execute o comando “java –jar programa.jar”, porém com uma diferença, você não vai mandar o console executar o “JAVA” que está ou não instalado na máquina do usuário, você vai mandar o console executar o programa<strong>JAVA.EXE</strong> ou <strong>JAVAW.EXE</strong> que está dentro da pasta <strong>BIN</strong> da JRE e passar como parametro o nome do seu jar. Pronto, basta enviar a pasta inteira pro seu usuário e mandar clicar duas vezes no arquivinho BAT que você fez. <p>Outra dica legal é alterar o nome do programa JAVA.EXE para qualquer coisa parecida com o nome do seu programa, é claro que se você alterar o nome de JAVA.EXE para <em><strong>XPTO.EXE</strong></em>, você tem que chamar <strong><em>XPTO –jar programa.jar</em></strong>. Se você fizer isso, no gerenciador de tarefas vai aparecer o nome do seu programa e não “java.exe”. <p><strong><u>EXE</u></strong><br>Bem, se mesmo com as dicas acima você ainda quiser criar um arquivo EXE vou explicar aqui como faz, mas funciona basicamente da mesma forma como acima. <p>Existem duas formas, a primeira é você pegar um programa que Cria Instaladores, e configurar o instalador pra fazer tudo o que foi dito acima (associar arquivos jar ao programa java.exe ou javaw.exe, copiar o jar para algum lugar, colocar um atalho na area de trabalho, etç, etç, etç), ou: <p>A segunda forma, utilizar o programa JSmooth. <p>Para utilizar o JSMooth, você precisa ter um jar criado, então siga um dos passos acima primeiro, depois abra o JSmooth, fala onde está seu JAR, onde está a JRE (se quiser que a jre vá junto com o programa, se não quiser o usuário terá que ter a jre instalada), escolhe o nome e onde salvar o arquivo, clica no botãozinho mágico e “voalá” seu EXE está criado. <p>Para baixar o programinha mágico, tenta acessar esse <a href="http://jsmooth.sourceforge.net/">site aqui</a>. <p>Boa sorte! Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5865429107316362417.post-10620473754751225712010-10-24T08:02:00.001-07:002011-02-16T14:43:18.684-08:00Remover tags HTML de uma StringBom dia, tarde e/ou noite! <br />
Em determinadas situações podemos precisar remover formatações em HTML de uma determinada String, como no meu caso, um aplicativo (Gestor de Conteúdo) espera um texto digitado pelo usuário, que formata como se estivesse em um editor de texto, colocando negrito, cor, tamanho, etç. O gestor de conteúdo armazena este texto no banco de dados, para que ele possa ser lido em outro(s) programas web. O problema é que toda a formatação incluída pelo usuário é transformada em HTML, já que o texto será exibido em um site. <br />
Em determinado momento foi necessário utilizar o texto limpo, sem nenhuma formatação, mas o que fazer para limpar o texto? <br />
Nem precisa pensar muito, a solução está aqui.<br />
Basta utilizar o código (método) abaixo e pronto! <br />
<blockquote><b>public</b> <b>static</b> String <u>removeCodigoAcentos</u>(String texto){ <br />
texto = texto.replaceAll("<[/]*?.+?[/]* ?>",""); <br />
<b> return</b> texto; <br />
}</blockquote>Calma, calma, eu explico. <br />
O método apenas recebe uma String, de preferência o texto que se deseja limpar. É aplicada uma alteração nessa string e depois o resultado é devolvido. O pulo do gato está na “expressão regular” utilizada. <br />
A Expressão Regular dentro do replaceAll significa mais ou menos isso,<br />
Remove dessa string tudo que:<br />
- Possuir um sinal de menor à extrema esquerda;<br />
- E talvez tenha uma barra após o sinal de menor;<br />
- E possuir um sinal de maior à extrema direita;<br />
- E talvez tenha uma barra antes do sinal de maior;<br />
- E tenha qualquer tipo de texto entre essas coisas descritas acima. <br />
Entendeu? Então boa sorte!Unknownnoreply@blogger.com0