<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Debugando.com &#187; Java</title>
	<atom:link href="http://www.debugando.com/categoria/programacao/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.debugando.com</link>
	<description>Noticias, dicas e tutorias do mundo da Tecnologia.</description>
	<lastBuildDate>Thu, 01 Dec 2011 23:44:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Tudo Sobre JavaScript</title>
		<link>http://www.debugando.com/tudo-sobre-javascript/</link>
		<comments>http://www.debugando.com/tudo-sobre-javascript/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 18:43:35 +0000</pubDate>
		<dc:creator>Lincoln César</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript/Ajax]]></category>
		<category><![CDATA[Noticias]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[o que e javascript]]></category>
		<category><![CDATA[plugin noscript]]></category>
		<category><![CDATA[tudo sobre javascript]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=957</guid>
		<description><![CDATA[



O que é Javascript? É perigoso permitir Javascript no             navegador? Quais os riscos inerentes a ele e quais formas de             se proteger? 
 

Javascript é uma linguagem de programação usada  [...]]]></description>
			<content:encoded><![CDATA[<p><em><a href="http://www.debugando.com/wp-content/uploads/2010/03/038610939-FMMP00.jpg"><img class="alignleft size-full wp-image-958" style="margin: 5px;" title="0,,38610939-FMMP,00" src="http://www.debugando.com/wp-content/uploads/2010/03/038610939-FMMP00.jpg" alt="" width="69" height="92" /></a></em></p>
<p><em><strong>O que é Javascript? É perigoso permitir Javascript no             navegador? Quais os riscos inerentes a ele e quais formas de             se proteger? </strong><br />
</em> <strong><br />
</strong></p>
<p>Javascript é uma linguagem de programação usada         por sites para adicionar recursos dinâmicos em páginas de         internet. O Javascript permite ao desenvolvedor do site muita         flexibilidade. Um exemplo é aquele botao que permite aumentar ou diminuir as fontes existentes em varios sites.</p>
<p>Há tantas possibilidades de uso de Javascript que         seria impossível citar todas. Há até mesmo joguinhos simples         feitos em Javascript.</p>
<p>É claro que essa riqueza de possibilidades resulta         em uma linguagem complexa. Para piorar, o Javascript foi         “crescendo” com o tempo e cada navegador web decidiu interpretar         comandos diferentes da mesma forma. Isso adicionou ainda mais         complexidade, tanto para quem faz códigos Javascript como para         quem faz os navegadores, que precisam funcionar com o maior         número possível de códigos.</p>
<p>O Javascript é, portanto, o tipo de código mais         complexo com o qual os navegadores precisam lidar. E quanto mais         difícil é fazer algo, maior a probabilidade de ocorrerem erros.         Não existe nenhum risco inerente ao Javascript, exceto pela         complexidade desnecessária criada pelo histórico conturbado da         linguagem.</p>
<p>De qualquer forma, problema maior está no fato de         que os programadores podem cometer muitos erros na criação do         componente responsável pelo processamento dos códigos. Isso         resulta em vulnerabilidades.</p>
<p>Como o Javascript interage com a página, além dos         erros existentes nele mesmo, ele também pode ser peça-chave na         exploração de erros em outras funcionalidades do navegador. É         por isso que tantas falhas têm como solução temporária a         desativação de Javascript.</p>
<p>Diferentemente de outras linguagens de         programação, existe muita tolerância na programação de páginas         web. Mesmo códigos “errados” funcionam devido aos esforços dos         navegadores para tentar fazer a página aparecer na tela. Além         disso, erros em navegadores web também moldaram as linguagens,         quer dizer, programadores acabaram dependendo de erros para         fazer as páginas aparecerem do jeito que queriam. Ainda hoje, os         navegadores precisam detectar esses “erros” e “saber” o que o         criador da página pretende.</p>
<p>É por isso que não apenas Javascript, mas até uma         linguagem aparentemente simples como o HTML – principal         responsável pelas páginas de internet – acabam sendo difíceis de         “digerir” pelos softwares.</p>
<p>Não é possível navegar na internet sem Javascript.         A grande maioria dos sites apresentará defeito ou perda de         funcionalidade. Para o Firefox, o <strong><a href="https://addons.mozilla.org/pt-BR/firefox/addon/722" target="_blank">plugin NoScript</a></strong> limita os poderes do         Javascript, mas também adiciona transtornos na navegação. Fica a         critério de cada um optar pela segurança ou pela comodidade. De         qualquer maneira, manter o navegador sempre atualizado é essencial         para que qualquer brecha conhecida, seja no processamento de         Javascript ou outro componente, seja eliminada.</p>
<p><strong>Fonte:</strong> G1</p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/tudo-sobre-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wrappers</title>
		<link>http://www.debugando.com/wrappers/</link>
		<comments>http://www.debugando.com/wrappers/#comments</comments>
		<pubDate>Mon, 09 Mar 2009 01:09:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[classe]]></category>
		<category><![CDATA[Wrappers]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=521</guid>
		<description><![CDATA[As classes wrappers estão correlacionadas aos tipos primitivos. Sendo assim posso converter primitivos em objetos, e vice-versa.
Funções principais:
1.	encapsular tipos primitivos para que possam ser manipulados como objetos
2.	fornecer métodos utilitários para tipo primitivos
Então agora  é possível:
1.	converter de um objeto  wrapper para primitivo
2.	converter de string  para primitivo 
3.	converter de string para objeto wrapper
Quando usar?
1.	Simples: [...]]]></description>
			<content:encoded><![CDATA[<p>As classes wrappers estão correlacionadas aos tipos primitivos. Sendo assim posso converter primitivos em objetos, e vice-versa.</p>
<p><strong><span class="c2">Funções principais:</span></strong></p>
<p>1.	encapsular tipos primitivos para que possam ser manipulados como objetos</p>
<p>2.	fornecer métodos utilitários para tipo primitivos</p>
<p><strong><span class="c2">Então agora  é possível:</span></strong></p>
<p>1.	converter de um <strong>objeto </strong> wrapper para <strong>primitivo</strong></p>
<p>2.	converter de <strong>string </strong> para <strong>primitivo </strong></p>
<p>3.	converter de string para objeto wrapper</p>
<p><strong><span class="c2">Quando usar?</span></strong></p>
<p>1.	Simples: quando deseja usar um &#8220;primitivo&#8221;como objeto.</p>
<p>2.	Quando um objeto recebe um valor e você deseja manipulá-lo como primitivo</p>
<p>3.	Para trabalhar com Conjuntos/Genéricos</p>
<p><strong><span class="c2">Wrappers no Java 5/superior</span></strong></p>
<p>A partir do java 5 o recurso de boxing permite converter tipos primitivos em wrappers ou de wrappers para primitivos automaticamente, ou seja, sem nenhum tipo de conversão o próprio compilador já faz isso para nós programadores.</p>
<p><strong><span class="c2">Regra:</span></strong></p>
<p>Para usar o == com wrappers não é como usar com os primitivos. A diferença é que valores ate 127 serão iguais, além disso não será considerado igual.</p>
<p><strong><span class="c2">Diferenciar um Wrapper de Tipos primitivos</span></strong></p>
<p>Bem há uma diferença até na nomeação. As classes wrappers têm o sua nomeação iniciada em MAIÚSCULO enquanto os tipos primitivos estão em minúsculo.</p>
<p>l	Tipo primitivo: int, double, char.</p>
<p>l	Wrapper:  Integer, Double, Long.</p>
<p><strong><span class="c2">Primitivos X Wrappers</span></strong></p>
<p>1.	int numb = 10;</p>
<p>2.	Integer numb = new Integer(10);</p>
<p>Temos situações diferentes nos códigos acima:</p>
<p>1.	uma variável do tipo primitivo com o valor 10.</p>
<p>2.	um objeto da classe Integer, e não um tipo primitivo.</p>
<p><strong><span class="c2">Os métodos de conversão:</span></strong></p>
<p>Há três métodos de conversão nas classes wrappers que são: <em>xxxValue(), parseXxx(),valueOf()</em>. Veja na tabela abaixo a definição de cada um:</p>
<p><img src="http://conteudo.imasters.uol.com.br/11801/tab1.png" alt="" /></p>
<p><strong><span class="c4">XxxValue() &#8211; objeto.tipoprimitivoValue()</span></strong></p>
<ul>
<li>serve para converter o valor de um objeto em um tipo primitivo.</li>
</ul>
<div class="codigo">
<pre><code>Integer i2 = new Integer(42);
double d = i2.doubleValue(); // aqui eh a conversão do Objeto Integer para double</code></pre>
</div>
<p><em>Obs.: então minha variável do tipo primitivo d tem o valor agora do objeto wrapper i2.</em></p>
<div class="codigo">
<pre><code>Float f2  = new Float(3.14f);
short s = f2.shortValue();//conversão do valor do objeto para tipo primitivo short.</code></pre>
</div>
<p><span class="c4"><strong>parseXXX(),  usa o argumento String.</strong></span></p>
<p><strong>Converte de String para Wrapper.  Essa classe lança uma exceção na tentativa de converter</strong> <em>&#8220;dois em um tipo primitivo&#8221;</em></p>
<p><strong><span class="c2">Exemplo:</span></strong></p>
<p><strong><span class="c2">double d4 = Double.parseDouble(&#8220;3.14&#8243;); //converto de String para double</span></strong></p>
<p>valueOf() &#8211; essa converte de String para Wrapper (Integer, Long etc.)</p>
<p>xxx.valueOf()  &#8211; tipoprimitivo.valueOf(&#8220;string&#8221;);</p>
<div class="codigo">
<pre><code>Double d5 = double.valueOf("3.14"); //converto de String em um objeto class Wrapper</code></pre>
</div>
<p>Para ficar mais claro o entendimento, desenvolvi as classes a seguir com exemplos para fixar o que já foi dito, confiram:</p>
<p><strong>code 1</strong></p>
<div class="codigo">
<pre><code><em>public class ExceWrap {
	public static void main(String[] args) {
		int z= Integer.parseInt("dois");
		System.out.println(z);
		/* codigo compila sem problemas mais uma excecao vai acontecer
		 * nao há nada de errado na sintaxe
		 * porem a jvm nao consegue converter uma string literal
		 * em um numero inteiro
		 */
	}}</em>
Exception in thread "main" java.lang.NumberFormatException: For input string: "dois"</code></pre>
</div>
<p><strong>code 2</strong></p>
<div class="codigo">
<pre><em><code>public class Par {
	public static void main(String[] args) {
		//String - primitivo
		double d = Double.parseDouble("10");
		System.out.println(d);
	}}</code></em></pre>
</div>
<p><strong>code 3</strong></p>
<div class="codigo">
<pre><em><code>public class NoValue {

	public static void main(String[] args) {
		Long l = new Long(8);
		int lh = l.longValue();
		/* nao compila o to tentando colocar um long
		 * dentro de um int nao é valido isso
		 */
	}}</code></em></pre>
</div>
<p><strong>code 4</strong></p>
<div class="codigo">
<pre><em><code>public class OfVal {

	public static void main(String[] args) {
		//String --&gt; OBJETOS
		Float f = Float.valueOf("10");
	System.out.println(f);
	Integer i = new Integer(10);
			//Objeto --&gt; Primitivo
		int g = i.intValue();
	}}</code></em></pre>
</div>
<p><strong>code 5 </strong></p>
<div class="codigo">
<pre><code><em>public class WrpObjt {

	public static void main(String[] args) {
		Integer g = new Integer (10);
		Integer h = new Integer(10);
		System.out.println(g==h);//false
		/* aqui dois objetos diferentes
		 * porem com mesmo valor
		 * == testa a referencia e nao valores dos
		 * objetos */}}</em>
</code></pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/wrappers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Validação de Formulários no NetBeans com Struts</title>
		<link>http://www.debugando.com/validacao-de-formularios-no-netbeans-com-struts/</link>
		<comments>http://www.debugando.com/validacao-de-formularios-no-netbeans-com-struts/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 23:45:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[Struts]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=475</guid>
		<description><![CDATA[Todos sabem que a validação de formulários é algo primordial para a manutenção da &#8220;saúde&#8221; de qualquer aplicação. Neste caso, em especial, uma aplicação web. Sem qualquer tipo de validação, você poderá ter inconsistências em seu banco de dados com informações inseridas de forma incorreta pelos usuários.
O Struts implementa o padrão MVC (Model-View-Controller) fazendo com [...]]]></description>
			<content:encoded><![CDATA[<p>Todos sabem que a validação de formulários é algo primordial para a manutenção da &#8220;saúde&#8221; de qualquer aplicação. Neste caso, em especial, uma aplicação web. Sem qualquer tipo de validação, você poderá ter inconsistências em seu banco de dados com informações inseridas de forma incorreta pelos usuários.</p>
<p>O Struts implementa o padrão MVC (<em>Model-View-Controller</em>) fazendo com que sua regra de negócio fique separada da parte visual de sua aplicação. Se quiser saber um pouco mais sobre Struts antes de prosseguir, leia <a class="ext" href="http://imasters.uol.com.br/artigo/3372/java/struts/">esta matéria</a> publicada aqui no iMasters.</p>
<p>Então, vamos ao que interessa: o exemplo! Para quem é iniciante em Java e/ou não conhece o NetBeans, vou prosseguir com o artigo passo a passo com as telas apresentadas pela IDE.</p>
<h4>Primeira Etapa &#8211; Criando uma aplicação web no NetBeans</h4>
<ul>
<li>Abra o seu NetBeans;</li>
<li>Vá em <strong>File &gt; New Project</strong>;</li>
</ul>
<p>A tela exibida será a seguinte:</p>
<p><img src="http://conteudo.imasters.uol.com.br/11326/img1.jpg" alt="" /></p>
<ul>
<li>Selecione em Categories a categoria Web e em Projetcs, Web Application.</li>
</ul>
<p>Na tela seguinte você irá inserir um nome para o seu Projeto e a pasta em que ele será salvo. Vou chamar o meu de ProjetoStruts.</p>
<p>Acompanhe os passos até chegar ao quarto passo de criação conforme tela abaixo:</p>
<p><img src="http://conteudo.imasters.uol.com.br/11326/img2.jpg" alt="" /></p>
<p>Nesta tela você selecionará os <em>Frameworks </em>que serão utilizados na aplicação:</p>
<ul>
<li>Selecione o Framework Struts.</li>
<li>Altere em Application Resource o nome do package inserindo o nome de seu Projeto no lugar de myapp. No meu caso ficou: <em>com.projetostruts.struts.ApplicationResource</em></li>
<li>Finalize a criação.</li>
</ul>
<h4>Segunda Etapa &#8211; Criação do formulário</h4>
<p>Antes de qualquer coisa, você deve ter percebido que foram criados dois arquivos em seu Projeto, dentro da pasta WEB-INF: index.jsp e welcomeStruts.jsp.</p>
<p>Se você rodar o seu Projeto pressionando a tecla F6, você observará no browser o funcionamento do Framework Struts.</p>
<p>Vamos então criar nosso formulário:</p>
<ul>
<li>Abra o arquivo index.jsp</li>
<li>Edite o index.jsp para deixá-lo com o seguinte código:</li>
</ul>
<pre><em><code>&lt;%@page contentType="text/html"%&gt;
&lt;%@page pageEncoding="UTF-8"%&gt;

&lt;%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %&gt;
&lt;%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %&gt;
&lt;%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %&gt;

&lt;html:html&gt;
    &lt;head&gt;
        &lt;title&gt;Trabalhando com Struts&lt;/title&gt;
        &lt;style&gt;
            .visualInputErro {
                border: 1px solid #b22222;
                font-family: Arial, Helvetica, sans-serif;
                color: #666666;
                background-color: #ffe4e1;
            }
        &lt;/style&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;html:form action="login"&gt;
        &lt;table border="0"&gt;
            &lt;thead&gt;
                &lt;tr&gt;
                    &lt;th colspan="2"&gt;&lt;html:errors property="status"/&gt;&lt;/th&gt;
                &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;bean:message key="login.usuario" /&gt;&lt;/td&gt;
                    &lt;td&gt;&lt;html:text property="usuario" errorStyleClass="visualInputErro"/&gt;&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;bean:message key="login.senha" /&gt;&lt;/td&gt;
                    &lt;td&gt;&lt;html:password property="senha" errorStyleClass="visualInputErro"/&gt;&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td colspan="2"&gt;&lt;html:submit value="Login"/&gt;&lt;/td&gt;
                &lt;/tr&gt;
            &lt;/tbody&gt;
        &lt;/table&gt;
        &lt;/html:form&gt;
    &lt;/body&gt;
&lt;/html:html&gt;

</code></em></pre>
<h4>Terceira Etapa &#8211; Criação das Ações</h4>
<p>Vamos então criar as ações que validarão nosso formulário.</p>
<ul>
<li>Clique com o botão direito sobre o seu projeto, selecione <strong>New &gt; Struts ActionForm Bean</strong>:</li>
</ul>
<p><img src="http://conteudo.imasters.uol.com.br/11326/img3.jpg" alt="" /></p>
<ul>
<li>Em Class Name digite: AcaoFormLogin</li>
</ul>
<ul>
<li>Ajuste o Package para com.projetostruts.struts</li>
<li>Neste arquivo você realizará a validação dos campos que virão do formulário. Edite o arquivo <strong>AcaoFormLogin.java</strong> conforme abaixo:</li>
</ul>
<pre><em><code>package com.projetostruts.struts;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;

/**
 *
 * @author Gustavo
 */
public class AcaoFormLogin extends org.apache.struts.action.ActionForm {

    private String usuario;
    private String senha;

    public String getUsuario() {
        return usuario;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public AcaoFormLogin() {
        super();
    // TODO Auto-generated constructor stub
    }

    @Override
    public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
        ActionErrors errors = new ActionErrors();
        boolean flag = false;
        if (getUsuario() == null || getUsuario().length() &lt; 1) {
            errors.add("usuario", new ActionMessage("error.usuario.required"));
            if (flag == false) {
                errors.add("status", new ActionMessage("error.status"));
                flag = true;
            }
        }
        if (getSenha() == null || getSenha().length() &lt; 1) {
            errors.add("senha", new ActionMessage("error.senha.required"));
            if (flag == false) {
                errors.add("status", new ActionMessage("error.status"));
                flag = true;
            }
        }
        return errors;
    }
}

</code></em></pre>
<p>Vale ressaltar que neste arquivo a única validação que estou fazendo é se o campo é nulo ou se há algum texto digitado nele. Outras validações poderão ser implementadas de acordo com a necessidade.</p>
<p>Vá ao arquivo <strong>ApplicationResource.properties</strong> no package <strong>com.projetostruts.struts</strong>. No final do arquivo, insira o seguinte código:</p>
<pre><em><code>login.usuario=Usuário
login.senha=Senha
error.usuario.required=O campo 'Usuário' deve ser preenchido
error.senha.required=O campos 'Senha' deve ser preenchido
error.status=Os campos destacados são de preenchimento obrigatório

</code></em></pre>
<p>Observe que este código descreve o retorno que será dado caso um dos erros tratados no arquivo <strong>AcaoFormLogin.java</strong> apareça. Neste exemplo, apesar de declarar as mensagens de erro para usuário e senha, eu destacarei o input que apresentou erro através do estilo <em>.visualInputErro</em> declarado no arquivo <strong>index.jsp</strong>.</p>
<p>Vamos então criar outro arquivo:</p>
<p>Clique com o botão direito sobre o pakage <strong>com.projetostruts.struts</strong>, selecione <strong>New &gt; Struts Action</strong>.</p>
<ul>
<li>Em Class Name digite: AcaoLogin</li>
<li>Ajuste o Package para com.projetostruts.struts</li>
<li>Em Action Path, digite: /login</li>
<li>Pressione next</li>
<li>Em Input Resource, localize o arquivo index.jsp</li>
<li>Em Scope, selecione request e finalize.</li>
</ul>
<p>Neste arquivo que foi criado, AcaoLogin.java, você notará a palavra success. Eu costumo alterá-la para descrever melhor o tipo de sucesso que foi obtido. Então, altere para: successLogin</p>
<ul>
<li>Encontre a pasta Configuration Files e abra o arquivo struts-config.xml</li>
<li>Encontre a seguinte linha de código:</li>
</ul>
<pre><em><code>&lt;action input="/index.jsp" name="AcaoFormLogin" path="/login" scope="request" type="com.projetostruts.struts.AcaoLogin"/&gt;

</code></em>Altere-a e deixe conforme segue:

<em><code>&lt;action input="/index.jsp" name="AcaoFormLogin" path="/login" scope="request" type="com.projetostruts.struts.AcaoLogin"&gt;
            &lt;forward name="sucessLogin" path="/login"/&gt;
&lt;/action&gt;</code></em></pre>
<h4>Quarta Etapa &#8211; Criação do Servlet</h4>
<p>Nesta etapa vamos criar o Servlet que será responsável por tratar os dados. Como o objetivo deste artigo é apenas demonstrar o funcionamento do Struts, o Servlet criado não executará nenhuma ação, apenas irá encaminhar para a página <strong>login.jsp</strong> a ser criada.</p>
<ul>
<li>Crie um novo package denominado com.projetostruts.conexao</li>
<li>Crie nesse package um Selvlet chamado Login.java</li>
<li>Na tela de configuração do Servlet, ajuste a URL Pattern para: /login</li>
</ul>
<p><img src="http://conteudo.imasters.uol.com.br/11326/img4.jpg" alt="" /></p>
<p>No Servlet <strong>Login.java</strong>, localize o método <strong>processRequest </strong>e altere-o conforme abaixo:</p>
<pre><em><code>protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            response.sendRedirect("login.jsp");
        } finally {
            out.close();
        }
    }</code></em></pre>
<p>Mais uma vez lembrando que este Servlet apenas redireciona para a página login.jsp.</p>
<h4>Quinta Etapa &#8211; Criação do Destino</h4>
<p>Nesta última etapa, vamos criar o arquivo destino que mostrará o sucesso da validação:</p>
<ul>
<li>Clique com o botão direito na pasta Web Pages e crie um novo arquivo chamado login.jsp</li>
<li>Edite o arquivo conforme abaixo:</li>
</ul>
<pre><em><code>&lt;%@page contentType="text/html" pageEncoding="UTF-8"%&gt;
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd"&gt;

&lt;html&gt;
    &lt;head&gt;
        &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
        &lt;title&gt;Login&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h2&gt;Todos os campos foram preenchidos!!!&lt;/h2&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></em></pre>
<pre>Está pronto! Esse é o conceito básico do Struts e espero que tenha ajudado.</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/validacao-de-formularios-no-netbeans-com-struts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recebendo dados de um formulário JSP</title>
		<link>http://www.debugando.com/recebendo-dados-de-um-formulario-jsp/</link>
		<comments>http://www.debugando.com/recebendo-dados-de-um-formulario-jsp/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 23:27:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[JSP]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=463</guid>
		<description><![CDATA[Nessa primeira parte, vamos criar uma página JSP. Abra o sua IDE (nosso caso Netbeans) e siga os passos abaixo:

Clique em file -&#62; new file
Na tela que aparece, escolha, em categories WEB e em files types JSP.
Clique em next  e, na próxima tela, no campo  JSP File name, dê um nome ao seu [...]]]></description>
			<content:encoded><![CDATA[<p>Nessa primeira parte, vamos criar uma página JSP. Abra o sua IDE (nosso caso Netbeans) e siga os passos abaixo:</p>
<ol>
<li>Clique em <strong>file -&gt; new file</strong></li>
<li>Na tela que aparece, escolha, em <strong>categories </strong>WEB e em <strong>files types</strong> JSP.</li>
<li>Clique em next  e, na próxima tela, no campo  <strong>JSP File name</strong>, dê um nome ao seu arquivo JSP (eu chamei de paginaform).</li>
</ol>
<p><img src="http://conteudo.imasters.uol.com.br/9582/telajsp.jpg" alt="" /></p>
<ol>
<li>Feito isso, clique em <strong>finish</strong></li>
<li>Feito isso, crie outra página em JSP, chamada contas.</li>
<p>Dentro de &lt;body&gt; &lt;/body&gt; do arquivo <strong>paginaform.jsp</strong>, digite o código abaixo que é o nosso formulário:</ol>
<pre><code><em>&lt;!--quando o cliente clicar em enviar vai para pagina de contas.jsp--&gt;
&lt;form action="contas.jsp" method="POST"&gt;
Usuario:&lt;input type="text" name="usuario"/&gt;&lt;br&gt;/&gt;
Senha:&lt;input type="password" name=senha"/&gt;&lt;br&gt;

&lt;input type="submit" value="logar/&gt;</em>
&lt;/form&gt;

</code>Na página de <strong>contas.jsp</strong>, dentro do &lt;body&gt;, digite o código abaixo:

<code>&lt;%
//recebe o valor digitado no campo usuario
String usuario = request.getParameter("usuario");

//recebe o valor digitado no campo senha
String senha = request.getParameter("senha");

if(usuario.equals("camilo")&amp;&amp; senha.equals("123")){

//Exibi o nome do usuario
    out.println("Seja bem vindo " + usuario);
    }
else{
out.println("Usuario ou senha invalidos");  

}%&gt;

</code></pre>
<h4>Objeto Request</h4>
<p>Esse objeto foi o responsável de pegar o resultado que vinha do formulário.</p>
<p>Salve e teste a página executando no browser a http://localhost/suaaplicacao/<span class="c2">paginaform.jsp</span></p>
<p>Agora  informe os dados no formulário e clique  no botão enviar.</p>
<p>Simples pegar dados de um formulário em JSP não? Lembrando que o objetivo aqui era mostrar como obter dados de um formulário em JSP, que é através do request. Usei como exemplo uma pagina simples de login e senha.</p>
<p>Outra importância desse recurso é para sistema de busca. Imagine que você quer saber tudo que seu cliente digitou no campo de busca do seu site enquanto ele estava navegando? Importante isso não?</p>
<pre></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/recebendo-dados-de-um-formulario-jsp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Plataforma JEE</title>
		<link>http://www.debugando.com/plataforma-jee/</link>
		<comments>http://www.debugando.com/plataforma-jee/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 23:17:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[JEE]]></category>
		<category><![CDATA[Plataforma]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=456</guid>
		<description><![CDATA[JEE &#8211; definição
É uma plataforma para desenvolvimento de aplicações distribuídas que apresenta facilidades para utilização dos recursos computacionais e distribuídos tais como acesso a Banco de dados, componentes Web, utilização de mensagens assíncronas, etc.
A arquitetura J2EE apresenta várias camadas composta por componentes e serviços que são providos por um container.
Mas o que vem a ser [...]]]></description>
			<content:encoded><![CDATA[<h4>JEE &#8211; definição</h4>
<p>É uma plataforma para desenvolvimento de aplicações distribuídas que apresenta facilidades para utilização dos recursos computacionais e distribuídos tais como acesso a Banco de dados, componentes Web, utilização de mensagens assíncronas, etc.</p>
<p>A arquitetura J2EE apresenta várias camadas composta por componentes e serviços que são providos por um container.</p>
<h4>Mas o que vem a ser container?</h4>
<p>Para essa resposta vou dar um exemplo no mundo real, do que poderia ser um container na arquitetura Java Enterprise Edition.</p>
<p><em>&#8220;Uma colméia de abelhas que contém pulpas, zangões, a abelha rainha, o mel etc. O container seria a Colméia que fornece recursos para as abelhas sobreviverem. Por sua vez, as abelhas têm suas diferentes funções, tais como operarias e as reprodutoras que podem ser vistas como os componentes que sobrevivem dentro do container (colméia).</em></p>
<p><em>Aproveitando vamos expandir um pouco o exemplo: imagine agora que cada colméia seja um container e todas as colméias juntam um apiário, que representa o servidor J2EE. &#8220;</em></p>
<h4>Mostrando o exemplo acima de forma técnica</h4>
<p>Na forma técnica temos o uso de paginas HTML em um web browser, onde o container é o próprio navegador que fornece recursos e facilidades para o componente. O componente, por sua vez, pode oferecer diversos serviços do usuário, através do suporte do container como facilidades visuais como: botões, figuras e tabelas, hiperlinks e o próprio serviço de navegação.</p>
<p>Voltando à J2EE, podemos ver diversos containeres interagindo entre si, na lista abaixo temos as camadas de arquitetura e os seus componentes.</p>
<p><strong>Camada cliente</strong>: nessa camada os componentes residem em um container que pode ser Web Browser, um Applet ou um Application Client.</p>
<p><strong>Camada Web</strong>:  essa aqui fornece a lógica a <em>camada cliente</em> que é implementada por uma <a class="ext" href="http://camilolopes.wordpress.com/2008/06/16/entendendo-jsp/">JSP </a>e <a class="ext" href="http://camilolopes.wordpress.com/2008/06/09/entendendo-servlet/">Servlets</a>. JSP oferecem a facilidade de apresentação em uma pagina Web. Já Servlet apresenta-se como um controlador das ações executadas pelo usuário nas páginas de apresentação, ele fornece vários recursos para obter dados dessas ações e realizar as operações desejadas.</p>
<p><strong>Camada de Negócio</strong>: essa aqui é uma das camadas mais importantes para o desenvolvedor, pois trata de toda a lógica da aplicação. É aqui que definem-se todas as regras do negócio, alocação de recursos, validação de dados segurança.</p>
<p><strong>Camada EIS</strong> (<em>Enterprise Information System</em>) &#8211; Aqui se encontram os sistemas de banco de dados, a integração com outros sistemas não J2EE.</p>
<p>Para desenvolvimento na plataforma J2EE é necessário entender cada uma dessas camadas e seu funcionamento como o todo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/plataforma-jee/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ferramentas Refactoring para Java</title>
		<link>http://www.debugando.com/ferramentas-refactoring-para-java/</link>
		<comments>http://www.debugando.com/ferramentas-refactoring-para-java/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 23:15:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Refactoring]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=453</guid>
		<description><![CDATA[No artigo de hoje irei apresentar algumas ferramentas disponíveis para aplicação de refactoring em código Java e também a importância de usar as ferramentas para uso da técnica. No artigo foi apresentado a aplicação da técnica no modo manual.
Refatorar com suporte de uma ferramenta automatizada é diferente da refatoração manual. Mesmo com a rede de [...]]]></description>
			<content:encoded><![CDATA[<p>No artigo de hoje irei apresentar algumas ferramentas disponíveis para aplicação de refactoring em código Java e também a importância de usar as ferramentas para uso da técnica. No artigo foi apresentado a aplicação da técnica no modo manual.</p>
<p>Refatorar com suporte de uma ferramenta automatizada é diferente da refatoração manual. Mesmo com a rede de segurança de conjunto de testes, a refatoração não automatizada consome tempo. Porém, não deve se descartar, já que nem sempre as ferramentas automatizadas vão atender todas as técnicas de refatoração.</p>
<p>As ferramentas que automatizam o processo diminuem o risco de erros e inconsistência no código, além de poupar um grande trabalho em se tratando de sistemas com centenas ou milhares de linhas de códigos. Com as ferramentas de refatoração automáticas, o projeto se torna mais elástico, já que alterá-lo é muito menos custoso.</p>
<p>Sendo assim, estender o projeto é adicionar flexibilidade no futuro sem grandes custos. O principal propósito de uma ferramenta de refatoração é permitir ao programador refatorar código sem ter que testar novamente o programa. A <strong>Tabela 1</strong> apresenta algumas ferramentas que implementam a técnica de refatoração. Com o crescimento do número de IDE para Java, algumas ferramentas de refatoração foram criadas como plugins para esses ambientes que é o caso do JFactor e RefactorIT apresentado na Tabela.</p>
<p><img src="http://conteudo.imasters.uol.com.br/11234/tabela1.png" alt="Tabela 1 - Ferramentas para refatoração em código Java" /></p>
<p><span class="imgdesc">Tabela 1 &#8211; Ferramentas para refatoração em código Java</span></p>
<p>A cada dia, surgem novas ferramentas para aplicação da técnica de refactoring em outras linguagens. Sendo assim, fica a importância e quanto é produtivo utilizá-las no ambiente de desenvolvimento.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/ferramentas-refactoring-para-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Entendendo os Escopos dos Objetos &#8211; Parte 02</title>
		<link>http://www.debugando.com/entendendo-os-escopos-dos-objetos-parte-02/</link>
		<comments>http://www.debugando.com/entendendo-os-escopos-dos-objetos-parte-02/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 12:09:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[JSP]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=166</guid>
		<description><![CDATA[Toda vez que um sistema web é acessado pelo browser, o conteiner web cria uma sessão para cada cliente, e nas requisições trocadas entre o browser e o servidor existe um cookie/parâmetro no cabeçalho da requisição HTTP chamado jsessionid que identifica aquele cliente, desta forma o servidor pode reservar uma área para este cliente por [...]]]></description>
			<content:encoded><![CDATA[<p>Toda vez que um sistema web é acessado pelo browser, o conteiner web cria uma sessão para cada cliente, e nas requisições trocadas entre o browser e o servidor existe um cookie/parâmetro no cabeçalho da requisição HTTP chamado jsessionid que identifica aquele cliente, desta forma o servidor pode reservar uma área para este cliente por um certo tempo. Um exemplo de utilização é manter o usuário logado no sistema, onde ele vai estar navegando entre todas páginas sem problemas. Uma forma de invalidar a sessão pelo cliente é limpar o cache do browser, assim o cookie que possuía o identificador da sessão não existe mais e o servidor irá criar uma nova sessão assim que o cliente enviar uma nova requisição.</p>
<p>Vamos começar a implementar nosso carrinho de compras.</p>
<p><strong>Classe Produto</strong></p>
<div class="codigo">
<pre><code>
<em>package vo;
     public class Produto {
	private Integer codigo;
	private String nome;
	private Double vlPreco;
	 // ocultei get/set.
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result +
                         ((codigo == null) ? 0 : codigo.hashCode());
		return result;
	}
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Produto other = (Produto) obj;
		if (codigo == null) {
			if (other.codigo != null)
				return false;
		} else if (!codigo.equals(other.codigo))
			return false;
		return true;
	}
     }</em>
</code></pre>
</div>
<p>Na classe <em>CarrinhoDeCompras</em>, criei uma Collection de objetos Produto, que armazenará os produtos selecionados pelo o usuário. Estou inicializando-a no construtor da classe, e também perceba que só existe o método de acesso getArrProdutos(). Isso vai garantir que a coleção seja inicializada apenas na criação do objeto.</p>
<div class="codigo">
<pre><code>
<em>package vo;
     import java.util.ArrayList;
     import java.util.Collection;

     public class CarrinhoDeCompras {
	  private Collection&lt;Produto&gt; arrProdutos;

	  public CarrinhoDeCompras() {
		this.arrProdutos = new ArrayList&lt;Produto&gt;();
 	  }
	  public final Collection&lt;Produto&gt; getArrProdutos() {
		return arrProdutos;
 	  }
     }</em>
</code></pre>
</div>
<p>Criei a classe LojaBO para simular estoque de produtos. A lógica desta classe é bem simples: ela possui um java.util.List de objetos Produto para representar os produtos vendidos pela nossa loja e dois voltados aos métodos: um é buscar (código), que busca o produto na coleção pelo código, e o outro é um método de acesso ao nosso List.</p>
<div class="codigo">
<pre><code>
<em>package bo;
	import java.util.ArrayList;
	import java.util.List;

	import vo.Produto;

	public class LojaBO {
	   private List&lt;Produto&gt; arrProdutosDisponiveis;

	   public LojaBO() {
		arrProdutosDisponiveis = new ArrayList&lt;Produto&gt;();
		Produto produto = null;
		for (int i = 0; i &lt; 5; i++) {
			produto = new Produto();
			produto.setCodigo(i);
			produto.setNome("Produto " + i);
			produto.setVlPreco(52.8);
			arrProdutosDisponiveis.add(produto);
		}
	  }

	  public Produto buscar(Integer codigo) {
		Produto produto = new Produto();
		produto.setCodigo(codigo);
		return	arrProdutosDisponiveis.get(arrProdutosDisponiveis.indexOf(produto));
	  }

	  public final List&lt;Produto&gt; getArrProdutosDisponiveis() {
		return arrProdutosDisponiveis;
	 }
    }</em>
</code></pre>
</div>
<p>Já criamos os objetos para representar o carrinho de compras, os produtos disponíveis. Agora criei a página que exibirá a listagem dos produtos para o usuário poder escolher qual item vai adicionar no carrinho (listarProdutos.jsp).</p>
<div class="codigo">
<pre><code>
<em>&lt;%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;

&lt;%@page import="bo.LojaBO"%&gt;
&lt;%@page import="java.util.Collection"%&gt;
&lt;%@page import="java.util.List"%&gt;
&lt;%@page import="vo.Produto"%&gt;&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Produtos Disponiveis&lt;/title&gt;
&lt;style&gt;
&lt;!--
	body {
	text-align: left;
}
--&gt;
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;h2&gt;Produtos Disponiveis:&lt;/h2&gt;
&lt;%
	/* armazena lista de produtos na sessÃ£o do usuario. */
	LojaBO lojaBO = new LojaBO();
	List&lt;Produto&gt; arrProduto = lojaBO.getArrProdutosDisponiveis();
%&gt;	&lt;table&gt;
		&lt;thead&gt;&lt;tr&gt;
				&lt;th&gt;Codigo&lt;/th&gt;
				&lt;th&gt;Nome&lt;/th&gt;
				&lt;th&gt;Preço&lt;/th&gt;
				&lt;th&gt;&lt;/th&gt;
		&lt;/tr&gt;&lt;/thead&gt;
&lt;%		for(Integer i = 0; i &lt; arrProduto.size(); i++){
			Produto produto = arrProduto.get(i);%&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;%= produto.getCodigo() %&gt;&lt;/td&gt;
			&lt;td style="width: 120px"&gt;&lt;%= produto.getNome() %&gt;&lt;/td&gt;
			&lt;td&gt;&lt;%= produto.getVlPreco() %&gt;&lt;/td&gt;
			&lt;td&gt;&lt;a href="controlCarrinhoDeCompras.jsp?a=adicionar&amp;codigo=
                        &lt;%= produto.getCodigo() %&gt;"&gt;Adicionar&lt;/a&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;% } %&gt;
	&lt;/table&gt;
	&lt;p&gt;&lt;a href="controlCarrinhoDeCompras.jsp"&gt;Meu Carrinho&lt;/a&gt;&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</em>
</code></pre>
</div>
<p>A página abaixo (controlCarrinhoDeCompras.jsp) possui a lógica das ações do carrinho de compras. Tem as seguintes funcionalidades:</p>
<ul> &#8211; Adicionar o produto na listagem do carrinho de compras.</ul>
<ul> &#8211; Excluir todos os itens do carrinho de compras.</ul>
<div class="codigo">
<pre><code>
<em>&lt;%@page import="vo.Produto"%&gt;
&lt;%@page import="bo.LojaBO"%&gt;
&lt;%@page import="vo.CarrinhoDeCompras"%&gt;&lt;%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%&gt;
&lt;%
// caso não exista um objeto CarrinhoDeCompras na session, ele cria.
if(session.getAttribute("carrinhoDeCompras") == null){
	session.setAttribute("carrinhoDeCompras", new CarrinhoDeCompras());
}
/* pega referência ao Objeto CarrinhoDeCompras que está armazenado na session. Necessário fazer um cast,
 pois o metodo "getAttribute" retorna um Object. */
CarrinhoDeCompras carrinhoDeCompras = (CarrinhoDeCompras) session.getAttribute("carrinhoDeCompras");
/* parametro que indica qual acao deve ser executada. */
String acao = request.getParameter("a");
/* indica qual pagina serÃ¡ invocada apos execucao abaixo. Por padrao,
deixei a listagem de produtos do carrinho de compras.*/
String path = "listarProdutosDoCarrinho.jsp";
if(acao != null &amp;&amp; !acao.equals("")){
	if(acao.equals("adicionar")){
		Integer codigo = Integer.parseInt(request.getParameter("codigo"));
		LojaBO lojaBO = new LojaBO();
		Produto  produto = lojaBO.buscar(codigo);
		carrinhoDeCompras.getArrProdutos().add(produto);
	}
	if(acao.equals("limpar")){
		session.setAttribute("carrinhoDeCompras", new CarrinhoDeCompras());
	}
}
RequestDispatcher requestDispacher = request.getRequestDispatcher(path);
requestDispacher.forward(request, response);
%&gt;</em>
</code></pre>
</div>
<p>Após a escolha do produtos, o usuário pode visualizar os produtos selecionados, através da página abaixo (listarProdutosDoCarrinho.jsp):</p>
<div class="codigo">
<pre><code>
<em>&lt;%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;

&lt;%@page import="bo.LojaBO"%&gt;
&lt;%@page import="java.util.Collection"%&gt;
&lt;%@page import="vo.Produto"%&gt;
&lt;%@page import="vo.CarrinhoDeCompras"%&gt;&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Produtos Adicionados no Carrinho de Compras&lt;/title&gt;
&lt;style&gt;
&lt;!--
	body {
	text-align: left;
}
--&gt;
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;%
/* É adicionado um objeto CarrinhoDeCompras na sessão, caso ainda não exista.*/
      if(session.getAttribute("carrinhoDeCompras") == null){
		session.setAttribute("carrinhoDeCompras", new CarrinhoDeCompras());
	}
	// referência do objeto CarrinhoDeCompras que esta na sessÃ£o do usuario.
	CarrinhoDeCompras carrinhoDeCompras = (CarrinhoDeCompras) session.getAttribute("carrinhoDeCompras");
	Collection&lt;Produto&gt; arrProduto = carrinhoDeCompras.getArrProdutos();
	if(!arrProduto.isEmpty()){%&gt;
		&lt;h2&gt;Produtos Adicionados:&lt;/h2&gt;
		&lt;table&gt;
			&lt;thead&gt;&lt;tr&gt;
					&lt;th&gt;Codigo&lt;/th&gt;
					&lt;th&gt;Nome&lt;/th&gt;
					&lt;th&gt;Preço&lt;/th&gt;
			&lt;/tr&gt;&lt;/thead&gt;
		&lt;%for(Produto produto : arrProduto){ %&gt;
			&lt;tr&gt;
				&lt;td&gt;&lt;%= produto.getCodigo() %&gt;&lt;/td&gt;
				&lt;td style="width: 120px"&gt;&lt;%= produto.getNome() %&gt;&lt;/td&gt;
				&lt;td&gt;&lt;%= produto.getVlPreco() %&gt;&lt;/td&gt;
			&lt;/tr&gt;
		&lt;% } %&gt;
		&lt;/table&gt;
		&lt;p&gt;&lt;a href="listarProdutos.jsp"&gt;Comprar Mais&lt;/a&gt;&lt;/p&gt;
		&lt;p&gt;&lt;a href="controlCarrinhoDeCompras.jsp?a=limpar"&gt;Limpar Carrinho&lt;/a&gt;&lt;/p&gt;
	&lt;% } else { %&gt;
		&lt;p&gt;Seu carrinho de compras está vazio&lt;/p&gt;
		&lt;p&gt;&lt;a href="listarProdutos.jsp"&gt;Voltar Listagem de Produtos&lt;/a&gt;&lt;/p&gt;
	&lt;% } %&gt;
&lt;/body&gt;
&lt;/html&gt;</em>
</code></pre>
</div>
<p>Meu simples carrinho de compras está pronto, funcionando sem problemas e utilizando o que a seção tem a oferecer. Agora fica com você a implementar uma aplicação mais complexa.</p>
<p>O projeto do Eclipse com os fontes está <a class="ext" href="http://conteudo.imasters.uol.com.br/10899/Orion.zip">disponível para download</a>. Espero que tenham gostado e a informação que escrevi seja útil. Até a próxima.</p>
<h5>Referências</h5>
<p><em><a class="ext" href="http://java.sun.com/javaee/5/docs/api/">http://java.sun.com/javaee/5/docs/api/</a></em></p>
<p><em>Fonte: <a href="http://imasters.uol.com.br/artigo/10899/java/entendendo_os_escopos_dos_objetos_-_parte_02/" target="_blank">Imasters</a><br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/entendendo-os-escopos-dos-objetos-parte-02/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criando página de erro em aplicações Java</title>
		<link>http://www.debugando.com/criando-pagina-de-erro-em-aplicacoes-java/</link>
		<comments>http://www.debugando.com/criando-pagina-de-erro-em-aplicacoes-java/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 12:06:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[JSP]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=164</guid>
		<description><![CDATA[Durante uma aplicação Web escrita em Java, existe a possibilidade de ocorrer vários erros durante o processamento de um recurso no servidor e, caso haja um erro do próprio servidor, este cuida da sua manipulação (ou não). Mas caso haja um erro da aplicação, o Container fornece meios para que o desenvolvedor possa manipulá-lo.
Os erros [...]]]></description>
			<content:encoded><![CDATA[<p>Durante uma aplicação Web escrita em Java, existe a possibilidade de ocorrer vários erros durante o processamento de um recurso no servidor e, caso haja um erro do próprio servidor, este cuida da sua manipulação (ou não). Mas caso haja um erro da aplicação, o Container fornece meios para que o desenvolvedor possa manipulá-lo.</p>
<p>Os erros de servidor podem ser considerados como exceções Java , e controlá-los é simples em aplicações web escritas em Java, não necessitando impor mudanças nas classes.</p>
<p><strong>Diretiva Page</strong>: definirá as diretivas da página. Essa diretiva permite importação de classes, customização de super classes Servlet, etc.</p>
<p>Alguns  atributos mais usados são:</p>
<p><strong>isErrorPage </strong>= &#8220;True | False&#8221; &#8211; define se é uma página de controle de erro.</p>
<p><strong>Language </strong>= &#8220;java&#8221; &#8211; especifica a linguagem que está sendo usada.</p>
<p><strong>import</strong>=&#8221;pacote.classe.*&#8221; &#8211; pacote que deve ser importado.</p>
<p>Etc&#8230;</p>
<h4>Criando e configurando página de erro</h4>
<p>Veremos abaixo, passo a passo, como configurar páginas de erros personalizadas.</p>
<p><strong>1.</strong> Abra o Netbeans 6</p>
<p><strong>2.</strong> Localize o seu projeto (usado nos outras colunas, ou crie um novo)</p>
<p><strong>3.</strong> Clique em file &gt; new file</p>
<p><strong>4.</strong> Na tela que aparece, escolha em <strong>categories </strong>WEB e, em <strong>files types</strong>, escolha JSP.</p>
<p><img src="http://conteudo.imasters.uol.com.br/9338/img1.jpg" alt="" /></p>
<p><strong>5.</strong> Clique em <strong>next </strong>e, na próxima tela, no campo <strong>JSP File name</strong>, dê um nome ao seu arquivo JSP (se quiser seguir a coluna, o meu chamei de erro).</p>
<p><strong>6.</strong> Feito isso, clique em <strong>finish</strong></p>
<p><strong>7.</strong> Clique no sinal de + de <strong>configuration files</strong> e em seguida dê dois cliques em web.xml. Aqui vamos configurar nossa página de erro.</p>
<p><img src="http://conteudo.imasters.uol.com.br/9338/img2.jpg" alt="" /></p>
<p>Nessa coluna vamos tratar o erro 404, página não encontrada. Isso pode acontecer freqüentemente na sua aplicação. O usuário pode digitar o endereço errado da aplicação e você, como um bom desenvolvedor, vai alertá-lo a respeito de forma personalizada.</p>
<h4>Erro.jsp</h4>
<p>A página de erro.jsp que acabamos de criar será responsável por capturar o erro (nesse caso 404) e exibí-lo ao usuário de forma personalizada.</p>
<p>Na tela de web.xml, clique na <strong>Pages </strong>e expanda o nó <strong>Error Pages</strong></p>
<p>.</p>
<p><img src="http://conteudo.imasters.uol.com.br/9338/img3.jpg" alt="" /></p>
<p><strong>8.</strong>Clique no botão <strong>Add</strong>. Na caixa de diálogo <strong>Add Error Page</strong> que acabou de surgir, clique em <strong>Browse</strong>&#8230; para selecionar a página de erro, no nosso caso, escolha erro.jsp.</p>
<p><strong>9.</strong> No campo <strong>Error Code</strong>, digite 404 e depois clique no <strong>OK</strong>. Não vamos configurar nenhuma exceção para esse tipo de erro, então o último campo deixe em branco.</p>
<p><strong>10.</strong> Abra o arquivo erro.jsp e altere conforme abaixo:</p>
<div class="codigo">
<pre><em><code>&lt;%@page contentType="text/html" pageEncoding="UTF-8"
        isErrorPage="true"%&gt;
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd"&gt;

&lt;html&gt;
    &lt;head&gt;
        &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
        &lt;title&gt;JSP Page&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h1&gt;Erro 404 &lt;/h1&gt;
        [cor2]Se você está vendo essa mensagem é porque o endereço que você está
        tentado acessar não existe.[/cor2] &lt;br&gt;
        Caso queira receber mais informações a respeito, entre em contato com o administrador do site.
    &lt;/body&gt;
&lt;/html&gt;</code></em></pre>
</div>
<p><strong>11.</strong> Para testar, abra o browser e digite um endereço inválido <span class="c2"><em>http://localhost/seuprojeto/invalido</em></span></p>
<p><span class="c2"><strong> isErrorPage=&#8221;true&#8221;</strong></span></p>
<p>Com essa diretiva <strong>page</strong>, informamos que se trata de uma página de erro conforme mencionei no inicio do artigo.</p>
<p>Bom, espero que tenham gostado do artigo e que a manipulação de erros passa a ser uma atividade frequente em suas aplicações. Uma dica que uso nas mensagens para o usuário é a substituição da palavra &#8220;erro&#8221; por &#8220;aviso&#8221;, e solicito ao usuário para entrar em contato com a equipe de suporte e informar que aconteceu o &#8220;aviso 404&#8243;. A palavra &#8220;erro&#8221;, na minha opinião, é muito pesada e gera desconforto e insegurança ao usuário/cliente.</p>
<p>Fonte: <a href="http://imasters.uol.com.br/artigo/9338/java/criando_pagina_de_erro_em_aplicacoes_java/" target="_blank">Imasters</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/criando-pagina-de-erro-em-aplicacoes-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Entendendo os Escopos dos Objetos &#8211; Parte 01</title>
		<link>http://www.debugando.com/entendendo-os-escopos-dos-objetos-parte-01/</link>
		<comments>http://www.debugando.com/entendendo-os-escopos-dos-objetos-parte-01/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 11:59:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[JSP]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=160</guid>
		<description><![CDATA[A linguagem Java usa fortemente o conceito de orientação a objetos. Com ela, é possível implementar softwares em diversas áreas, desde controlar aparelhos de microondas, sistemas WEB, até aplicações para celulares.
No desenvolvimento dos sistemas web, você pode criar aplicações dinâmicas e inteligentes, utilizando o máximo das vantagens que a linguagem tem a oferecer. Exemplos como [...]]]></description>
			<content:encoded><![CDATA[<p>A linguagem Java usa fortemente o conceito de orientação a objetos. Com ela, é possível implementar softwares em diversas áreas, desde controlar aparelhos de microondas, sistemas WEB, até aplicações para celulares.</p>
<p>No desenvolvimento dos sistemas web, você pode criar aplicações dinâmicas e inteligentes, utilizando o máximo das vantagens que a linguagem tem a oferecer. Exemplos como exibir o resultado de uma consulta sobre um certo cliente, receber dados de um formulário, armazenar um carrinho de compras do usuário&#8230; Ou seja, existem milhares de situações que podem ser implementadas.</p>
<p>Neste artigo comentarei sobre alguns objetos implícitos nas páginas jsp e descrever em quais escopos os objetos podem estar durante o processamento da página. Este é meu primeiro artigo aqui no iMasters, e espero que gostem e que as informações passadas sejam úteis.</p>
<p>Estes são alguns dos objetos implícitos que você usará com mais freqüência.</p>
<ul>
<li>request</li>
<li>pageContext</li>
<li>session</li>
<li>context</li>
<li>out</li>
<li>response</li>
</ul>
<p>A partir de agora, vou descrever cada objeto e criar uma situação de utilização.</p>
<p>Antes de iniciar, vou comentar sobre <em>scriptlets</em>, pois vou utilizá-los na implementação dos exemplos.</p>
<p>&lt;% %&gt; &#8211; acessar algum escopo.</p>
<p>&lt;%= %&gt; &#8211; escreve algum conteúdo na resposta.</p>
<p>Obs: utilizar <em>scriptlets </em>nas paginas jsp não é uma boa prática de programação, pois mistura código java com html, deixando o código bastante confuso. Para resolver essa questão criaram JSTL, EL (<em>Expression Language</em>). Assunto esse para próximos artigos.</p>
<h4>Request</h4>
<p>O request representa uma solicitação do browser para o servidor, e o ciclo de vida é marcado pelo recebimento da requisição e montagem da resposta para o cliente.</p>
<p>Ele trata todas as informações que o browser passou para o servidor, exemplo: sabe qual o tipo do método HTTP que deu origem à requisição, possui todos os parâmetros da requisição criados via formulário ou passados via url, também tem referência aos cookies do browser.</p>
<p>Esses são alguns métodos disponíveis:</p>
<p><strong>getParameter(java.lang.String name)</strong> &#8211; este método retorna o valor de algum parâmetro que está na requisição do browser. &#8220;name&#8221; é o identificador do parâmetro e caso não encontre o valor retorno é null.</p>
<p><em>Exemplo: um input text de nome &#8220;meuNome&#8221;:</em></p>
<div class="codigo">
<pre><code> <em>&lt;input type="text" name="meuNome"&gt;</em></code></pre>
</div>
<p>Na página que trata a requisição do browser:</p>
<div class="codigo">
<pre><em><code>&lt;%
String nmCliente = request.getParameter("meuNome");
%&gt;</code></em></pre>
</div>
<p><strong>getParameterValues(java.lang.String name)</strong> &#8211; este é semelhante ao metodo anterior, a diferença é que ele retorna um <em>array </em>de String. É utilizado nas páginas que possuem elementos com mesmo nome.</p>
<p>Geralmente é utilizado quando é necessário implementar um lista de <em>inputs </em>do tipo <em>checkbox</em>, <em>hidden</em>,.. na página jsp.</p>
<p>Exemplo:</p>
<div class="codigo">
<pre><em><code>&lt;form action="treatRequest.jsp" method="post"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input type="checkbox" name="arrCheckBox" value="radio1"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input type="checkbox" name="arrCheckBox" value="radio2"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input type="checkbox" name="arrCheckBox" value="radio3"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input type="checkbox" name="arrCheckBox" value="radio4"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;input type="submit" value="Salvar"&gt;
&lt;/form&gt;</code></em></pre>
</div>
<p>Código da página que tratará a requisição.</p>
<div class="codigo">
<pre><em><code>&lt;%
String[] arrCheckBox = request.getParameterValues("arrCheckBox");
%&gt;</code></em></pre>
</div>
<p><strong>setAttribute(java.lang.String name, java.lang.Object o)</strong> &#8211; Armazena o objeto &#8220;o&#8221; passado no escopo do request, o parâmetro &#8220;name&#8221; é um identificador do objeto dentro do request.</p>
<p><strong>getAttribute(java.lang.String name)</strong> &#8211; retorna uma referência do objeto que está no request, onde &#8220;name&#8221; é o identificador do objeto.</p>
<p>Os métodos <strong>setAttribute(String)</strong> e <strong>getAttribute(String)</strong> são utilizados quando você precisa trafegar objetos entre as páginas jsp, não os parâmetros da requisição HTTP. Exemplo: salvar um objeto Cliente para outra página utilizá-lo.</p>
<p>Para realizar a navegação entre páginas jsp, utilize a tag &lt;jsp:forward page=&#8221;nomePagina.jsp&#8221;/&gt;. Utilizando esta tag, você passa a requisição para outra página tratar, encaminhando junto todos os parâmetros e objetos salvos no request.</p>
<p>Exemplo:</p>
<p><em>Criar um formulário de cadastros de nomes</em>.</p>
<p><em>Classe Pessoa.</em></p>
<div class="codigo">
<pre><em><code>package vo;

public class Pessoa {
private String nome;

public final String getNome() {
return nome;
}
public final void setNome(String nome) {
this.nome = nome;
}
}</code></em></pre>
</div>
<h4>Fonte do formulário (exRequest.jsp)</h4>
<p>Utilizei o mesmo formulário dos exemplos anteriores, então criei uma função javascript que invoca a página para cadastrar uma pessoa.</p>
<div class="codigo">
<pre><code>
<em>&lt;script type="text/javascript"&gt;
function cadastrarPessoa() {
var meuNome = document.getElementById("meuNome");
window.location = "/Orion/request/cadastrarPessoa.jsp?meuNome=" + meuNome.value;
}
&lt;/script&gt;
&lt;p&gt;
Digite seu nome: &lt;input type="text" id="meuNome" name="meuNome"&gt;
 &lt;a href="javascript:void(0)" onclick="javascript:cadastrarPessoa();"&gt;Cadastrar Pessoa &lt;/a&gt;
&lt;/p&gt;</em>
</code></pre>
</div>
<p>Fonte <em>cadastrarPessoa.jsp</em>: esta página será responsável por pegar o valor do parâmetro &#8220;meuNome&#8221; e criar o objeto Pessoa, logo após o método &#8220;setAttribute(´pessoa´, pessoa)&#8221; salva o objeto pessoa no request. Agora é só encaminhar a requisição para a página &#8220;logicCadastrarPessoa.jsp&#8221; tratar.</p>
<div class="codigo">
<pre><code>
<em>&lt;%@page import="vo.Pessoa"%&gt;
&lt;%
String nome = request.getParameter("meuNome");
Pessoa pessoa = new Pessoa();
pessoa.setNome(nome);
/* aqui salva objeto no request */
request.setAttribute("pessoa", pessoa);
%&gt;
&lt;jsp:forward page="logicCadastrarPessoa.jsp"/&gt;</em>
</code></pre>
</div>
<p>Fonte <em>logicCadastrarPessoa.jsp</em>: esta página é responsável por aplicar algum de tipo de regra de negócio* com o objeto Pessoa que está salvo no request.</p>
<p>Também é necessário adicionar um cast implícito para o objeto que você quer utilizar, pois o método</p>
<p><em>&#8220;getAttribute(String)&#8221; retorna um Object.</em></p>
<div class="codigo">
<pre><code>
<em>&lt;%@page import="vo.Pessoa"%&gt;
&lt;%
Pessoa pessoa = (Pessoa) request.getAttribute("pessoa");
if(pessoa != null){
%&gt;
&lt;p&gt;Ola &lt;%= pessoa.getNome() %&gt; - agora poderia cadastrar você no banco de dados&lt;/p&gt;
&lt;% } %&gt;</em>
</code></pre>
</div>
<h4>PageContext</h4>
<p>Este também possui os métodos <em>setAttribute(java.lang.String name, java.lang.Object o</em>) e <em>getAttribute(java.lang.String name)</em> comentados no assunto anterior. A lógica do funcionamento destes dois métodos é igual ao request.</p>
<p>Uma diferença deste objeto é que ele possui a funcionalidade para adicionar ou pegar uma referência a um objeto em qualquer escopo da aplicação.</p>
<p><em>getAttribute(java.lang.String name, int scope)</em> e setAttribute(java.lang.String name, java.lang.Object o, int scope) &#8211; onde &#8220;name&#8221; é o identificador do objeto, e o int &#8220;scope&#8221; indica qual o escopo que será utilizado, pode ser as seguintes constantes:</p>
<ul>
<li>PageContext.PAGE_SCOPE</li>
<li>PageContext.REQUEST_SCOPE</li>
<li>PageContext.SESSION_SCOPE</li>
<li>PageContext.APPLICATION_SCOPE</li>
</ul>
<p>Agora criei um exemplo onde não é definido implicitamente o escopo dos objetos:</p>
<div class="codigo">
<pre><code>
<em>&lt;%@page import="java.util.ArrayList"%&gt;
&lt;%@page import="java.util.List"%&gt;
&lt;%
List&lt;Integer&gt; arrNumeros = new ArrayList&lt;Integer&gt;(10);
for (Integer i = 0; i &lt; 10; i++) {
arrNumeros.add(i);
}
%&gt;
&lt;p&gt;Lista de Números - total de números: &lt;%=arrNumeros.size()%&gt;&lt;/p&gt;
&lt;%
for (Integer i = 0; i &lt; arrNumeros.size(); i++) {
%&gt;
&lt;ul&gt;
&lt;li&gt;&lt;%=arrNumeros.get(i)%&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;%
}
%&gt;</em>
</code></pre>
</div>
<p>No exemplo acima, criei um coleção de <em>Integer </em>e logo após mostro a listagem completa dos objetos. E você descobriu em qual escopo a variável &#8220;<em>arrNumeros</em>&#8221; está armazenada? Vamos viajar um pouco: durante o ciclo de vida da página alguns métodos são invocados na inicialização <em>(jspInit())</em>, logo após é invocado o método <em>jspService()</em> que é o responsável por escrever todo o conteúdo html para o cliente, e toda a fonte de <em>scriptlets </em>ficam armazenados dentro deste método&#8230; Concluindo, todas as variáveis são locais, existindo apenas durante a execução do método.</p>
<p>Utilizei a diretiva <em>@page</em> para realizar os <em>imports </em>da interface <em>java.util.List</em> e a coleção <em>java.util.ArrayList</em>.</p>
<h4>Referência</h4>
<p><em><a class="ext" href="http://java.sun.com/javaee/5/docs/api/">http://java.sun.com/javaee/5/docs/api/</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/entendendo-os-escopos-dos-objetos-parte-01/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

