<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta name="author" content="troy.giunipero@sun.com">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <meta name="description" content="A brief introduction to Ajax using the NetBeans IDE, Java bundle">

        <meta name="keywords" content="NetBeans, IDE, integrated development environment, Ajax, XML,
            XMLHttpRequest, XMLHttpRequest object, callback function, asynchronous, Java, JavaScript,
            JavaScript Editor, open source, web technology">

        <link rel="stylesheet" type="text/css" href="../../../netbeans.css">
        <link rel="stylesheet" type="text/css" href="../../../lytebox.css" media="screen">
        <script type="text/javascript" src="../../../images_www/js/lytebox-compressed.js"></script>

        <title>Introdução ao Ajax para Aplicações Java Web - Tutorial do NetBeans IDE</title>
    </head>

    <body>

<!--
Copyright (c) 2009, 2010, 2011 Oracle and/or its affiliates. All rights reserved.
-->

        <h1>Introdução ao Ajax para Aplicações Java Web</h1>

        <p>Este documento oferece uma introdução ao Ajax e demonstra algumas das funncionalidades no NetBeans IDE que permitem que você programe de forma mais rápida e eficaz ao trabalhar com tecnologias relacionadas ao Ajax. Enquanto aprende sobre a funcionalidade de baixo nível do Ajax, você constrói uma aplicação simples que utiliza a função autocompletar em um campo de texto. O conteúdo aqui foi adaptado do artigo e da aplicação de amostra de Greg Murray <a href="http://weblogs.java.net/blog/gmurray71/archive/2005/12/using_ajax_with_1.html">Using Ajax with Java Technology</a>.</p>

        <p>Ajax significa Asynchronous JavaScript and XML. Na essência, o Ajax é uma forma eficiente de uma aplicação web tratar as interações do usuário com uma página web: uma forma que reduz a necessidade de fazer uma atualização da página ou uma recarga completa da página para cada interação do usuário. Isso permite um comportamento detalhado (semelhante ao de uma aplicação de área de trabalho ou aplicação web com base em plug-in) na utilização de um browser. As interações do Ajax são tratadas assincronamente em segundo plano. Enquanto isso acontece, um usuário pode continuar trabalhando com a página. As interações do Ajax são iniciadas pelo código JavaScript. Quando a interação do Ajax é concluída, o JavaScript atualiza o código-fonte HTML da página. As alterações são feitas imediatamente sem requerer uma atualização da página. As interações do Ajax podem ser utilizadas para fazer coisas como validar entradas do form (enquanto o usuário as está digitando) utilizando lógica do lado do servidor, recuperar dados detalhados do servidor, atualizar dinamicamente os dados em uma página e submeter forms parciais a partir da página.</p>


        <p><strong>Conteúdo</strong></p>

       <img alt="O conteúdo desta página se aplica ao NetBeans IDE 7.2, 7.3, 7.4 e 8.0" class="stamp" src="../../../images_www/articles/73/netbeans-stamp-80-74-73.png" title="O conteúdo desta página se aplica ao NetBeans IDE 7.2, 7.3, 7.4 e 8.0">

        <ul class="toc">
            <li><a href="#overview">Visão Geral da Aplicação</a></li>
            <li><a href="#client1">Programando o Lado do Cliente: Parte 1</a>
                <ul>
                    <li><a href="#html">Utilizando o Editor HTML</a></li>
                    <li><a href="#javascript">Utilizando o Editor JavaScript</a></li>
                </ul></li>
            <li><a href="#serverside">Programando o Lado do Servidor</a>
                <ul>
                    <li><a href="#data">Criando o Armazenamento de Dados</a></li>
                    <li><a href="#servlet">Criando um Servlet</a></li>
                </ul></li>
            <li><a href="#client2">Programando o Lado do Cliente: Parte 2</a>
                <ul>
                    <li><a href="#callback">Adicionando a Funcionalidade de Retorno de Chamada</a></li>
                    <li><a href="#htmldom">Atualizando o HTML DOM</a></li>
                    <li><a href="#stylesheet">Anexando uma Folha de Estilo</a></li>
                </ul></li>
            <li><a href="#run">Executando a Aplicação</a>
                <ul>
                    <li><a href="#httpMonitor">Utilizando o Monitor do Servidor HTTP</a></li>
                </ul></li>
            <li><a href="#conclusion">Conclusão</a></li>
            <li><a href="#seeAlso">Consulte Também</a></li>
        </ul>

        <p><strong>Para concluir este tutorial, você precisa dos seguintes recursos e softwares.</strong></p>

        <table>
            <tbody>
                <tr>
                    <th class="tblheader" scope="col">Software ou Recurso</th>
                    <th class="tblheader" scope="col">Versão Necessária</th>
                </tr>
                <tr>
                    <td class="tbltd1"><a href="https://netbeans.org/downloads/index.html">NetBeans IDE, pacote Java EE</a></td>
                    <td class="tbltd1">7.3, 7.4, 8.0</td>
                </tr>
                <tr>
                    <td class="tbltd1"><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">JDK (Java Development Kit)</a></td>
                    <td class="tbltd1">7 ou 8</td>
                </tr>
                <tr>
                    <td class="tbltd1"><a href="https://glassfish.java.net/">GlassFish Server</a> <br><em class="indent margin-around">ou</em> <br><a href="http://tomcat.apache.org/index.html">servidor Tomcat</a></td>
                    <td class="tbltd1">Open Source Edition 3.1.x ou 4.x <br><em class="margin-around indent"> </em> <br>versão 7.x ou 8.x</td>
                </tr>
            </tbody>
        </table>

        <p class="notes"><strong>Observações:</strong></p>

        <ul>
            <li>A instalação do Java EE do IDE permite instalar o servidor GlassFish e o contêiner de servlets do Apache Tomcat.</li>

            <li>Este tutorial presume que você tenha conhecimento das várias tecnologias que ele utiliza (ou seja, HTML, CSS, JavaScript, Java e JSP). Ele tenta fornecer uma visão geral da funcionalidade fornecida pelo código, mas <em>não</em> explica como o código funciona linha por linha.</li>

            <li>Se você precisar comparar seu projeto com uma solução que funciona, <a href="https://netbeans.org/projects/samples/downloads/download/Samples%252FJavaScript%252FMyAjaxApp.zip">faça download da aplicação de amostra</a>.</li>
        </ul>


        <br>
        <h2 id="overview">Visão Geral da Aplicação</h2>

        <p>Imagine uma página web em que um usuário pode procurar informações sobre compositores de música. A página inclui um campo onde o usuário pode digitar o nome do compositor. Na aplicação de exemplo, o campo de entrada possui uma funcionlidade autocompletar. Em outras palavras, o usuário pode digitar parte do nome do compositor e a aplicação web tentará completar o nome, listando todos os compositores cujo nome ou sobrenome começa com os caracteres digitados. A funcionalidade autocompletar poupa o usuário de ter que lembrar o nome completo do compositor e pode fornecer um caminho mais intuitivo e direto para a informação procurada.</p>

        <div class="indent">
            <img alt="Aplicação de amostra exibida no browser" class="margin-around b-all" src="../../../images_www/articles/73/web/ajax-intro/sample-app.png" title="Aplicação de amostra exibida no browser">
        </div>

        <p>Implementar a funcionalidade autocompletar em um campo de pesquisa é algo que pode ser feito por meio do Ajax. O Ajax funciona com o emprego de um objeto <code>XMLHttpRequest</code> para passar solicitações e respostas assincronamente entre o cliente e o servidor. O diagrama a seguir ilustra o fluxo do processo da comunicação que acontece entre o cliente e o servidor.</p>

        <div id="flow-diagram" class="indent">
            <img alt="Diagrama de fluxo de processo do Ajax" class="margin-around" src="../../../images_www/articles/73/web/ajax-intro/ajax-process-flow.png" title="Diagrama de fluxo de processo do Ajax">
        </div>

        <br>
        <p>O fluxo de processo do diagrama pode ser descrito pelas seguintes etapas:</p>

        <ol>
            <li>O usuário aciona um evento, por exemplo, liberando uma tecla ao digitar um nome. Isso resulta em uma chamada do JavaScript para uma função que inicializa um objeto <code>XMLHttpRequest</code>.</li>

            <li>O objeto <code>XMLHttpRequest</code> é configurado com um parâmetro de solicitação que inclui o ID do componente que acionou o evento e qualquer valor que o usuário digitou. O objeto <code>XMLHttpRequest</code> faz uma solicitação assíncrona ao servidor web.</li>

            <li>No servidor web, um objeto como um servlet ou um listener trata a solicitação. Os dados são recuperados do armazenamento de dados, e é preparada uma resposta contendo os dados do form em um documento XML.</li>

            <li>Finalmente, o objeto <code>XMLHttpRequest</code> recebe os dados XML utilizando uma função de chamada de retorno, processa-os e atualiza o HTML DOM (Document Object Model) para exibir a página que contém os novos dados.</li>
        </ol>

        <p>Este tutorial demonstra como construir o cenário da funcionalidade autocompletar, seguindo o fluxo do processo indicado no diagrama acima. Primeiro você cria os arquivos do lado do cliente para a apresentação e a funcionalidade necessárias para gerar o objeto <code>XMLHttpRequest</code>. Em seguida, você configura o lado do servidor, criando o armazenamento de dados e a lógica de negócio utilizando tecnologia baseada em Java. Finalmente, você retorna ao lado do cliente e implementa <code>callback()</code>, e outra funcionalidade JavaScript para atualizar o HTML DOM.</p>


        <br>
        <h2 id="client1">Programando o Lado do Cliente: Parte 1</h2>

        <p>Comece criando um novo projeto de aplicação Web no IDE. O IDE contém modelos incorporados para vários tipos de projeto.</p>

        <ol>
            <li>Escolha Arquivo > Novo Projeto. Em Categorias, selecione Java Web. Em Projetos, selecione Aplicação Web e clique em Próximo.</li>

            <li>No painel Nome e Localização, digite <code>MyAjaxApp</code> como o Nome do Projeto. O campo Localização do Projeto permite que você especifique a localização do projeto em seu computador. Deixe as outras opções como default e clique em Próximo. <br> <img alt="Assistente Aplicação Web - painel Nome e Localização" class="margin-around b-all" src="../../../images_www/articles/73/web/ajax-intro/java-name-location.png" title="Especifique o nome e a localização do seu projeto de aplicação"></li>

            <li>No painel Servidor e Definições, selecione o servidor em que deseja implantar a aplicação. Somente os servidores registrados no IDE estão listados. <br> <img alt="Assistente Nova Aplicação Web - painel Definições do Servidor" class="margin-around b-all" src="../../../images_www/articles/73/web/ajax-intro/java-server-settings.png" title="Especifique o servidor no qual sua aplicação será implantada"></li>

            <li>Aceite as outras definições default e clique em Finalizar. O projeto será gerado no sistema de arquivos e aberto no IDE.</li>
        </ol>

        <p>Quando os projetos baseados em Java são criados, é gerado automaticamente um script de construção <a href="http://ant.apache.org/">Ant</a> que lhe permite compilar o projeto de forma que ele possa ser implantado imediatamente e executado em um servidor que tenha sido registrado no IDE.</p>

        <p>Uma página de entrada default será gerada e aberta no Editor de Código-fonte do IDE. Dependendo do servidor de destino, a página de entrada será <code>index.jsp</code> ou <code>index.html</code>.
            </p>

        <div class="indent">
            <div class="indent">
                <img alt="A janela Projetos que contém o projeto recém-criado" class="margin-around b-all" src="../../../images_www/articles/73/web/ajax-intro/java-proj-win.png" title="A janela Projetos exibe o projeto MyAjaxApp">
            </div>
        </div>

        <p>Antes de começar a codificar, tente rapidamente executar a aplicação para garantir que a configuração entre o IDE, seu servidor e o browser esteja configurada corretamente.</p>

        <ol>
            <li><p>Na janela Projetos, clique com o botão direito do mouse no nó do projeto e selecione Executar.</p>

                <p>A aplicação é compilada, o servidor de aplicações é iniciado e a aplicação é implantada nele e executada. O IDE abre seu browser default e exibe a página de entrada default.</p>
            </li>
        </ol>

        <div class="indent">
            <a name="html"></a>
            <h3>Usando o Editor HTML</h3>

            <div class="indent">
                <img alt="Paleta que exibe elementos HTML" class="right margin-around b-all" src="../../../images_www/articles/73/web/ajax-intro/palette.png" title="Paleta que exibe elementos HTML"> <br>
                <p class="margin-around">Agora que você tem certeza de que seu ambiente está configurado corretamente, comece transformando sua página de índice na interface de autocompletar que será vista pelos usuários.</p>

                <p class="margin-around">Uma das vantagens do uso de um IDE é que o editor em que você trabalha normalmente fornece a funcionalidade autocompletar código, o que, se você aprender a aplicar quando codifica, pode aumentar, rapidamente, a sua produtividade. O Editor de Código-fonte do IDE geralmente se adapta à tecnologia que está sendo utilizada, portanto, se você estiver trabalhando em uma página HTML, pressionar a combinação de teclas de autocompletar código (Ctrl-Espaço) produzirá sugestões para tags e atributos HTML. Como será mostrado mais tarde, o mesmo se aplica a outras tecnologias, como CSS e JavaScript.</p>

                <p class="margin-around">
                    Uma segunda funcionalidade que pode ser utilizada é a Paleta do IDE. A Paleta fornece modelos fáceis de utilizar para elementos que são comumente aplicados na tecnologia em que você está codificando. Você simplesmente clica em um item e arrasta-o para um local no arquivo aberto no Editor de Código-Fonte.</p>

                <p class="tips margin-around">Você pode exibir ícones grandes (como exibido aqui) clicando com o botão direito do mouse na Paleta e selecionando Mostrar Ícones Grandes.</p>
            </div>

            <br clear="all">
            <ol>
                <li>Substitua o conteúdo das tags <code>&lt;title></code> e <code>&lt;h1></code> para que leia: <code>Auto-Completion using AJAX</code>. A página de índice não requer nenhuma codificação de script do lado do servidor, portanto, você pode deletar com segurança quaisquer remanescentes criados por default. A página de índice agora deve ter a seguinte aparência.

<pre class="examplecode">
&lt;!DOCTYPE html&gt;

&lt;html&gt;
    &lt;head&gt;
        &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;
        &lt;title&gt;Auto-Completion using AJAX&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h1&gt;Auto-Completion using AJAX&lt;/h1&gt;
    &lt;/body&gt;
&lt;/html&gt;
</pre></li>

                <li>Adicione algum texto explicativo para descrever a finalidade do campo de texto. Você pode copiar e colar no texto a seguir, no ponto logo abaixo das tags <code>&lt;h1></code>:

<pre class="examplecode">
&lt;p&gt;This example shows how you can do real time auto-completion using Asynchronous
    JavaScript and XML (Ajax) interactions.&lt;/p&gt;

&lt;p&gt;In the form below enter a name. Possible names that will be completed are displayed
    below the form. For example, try typing in &quot;Bach,&quot &quot;Mozart,&quot; or &quot;Stravinsky,&quot;
    then click on one of the selections to see composer details.&lt;/p&gt;
</pre></li>

                <li>Adicione um form HTML à página. Faça isso utilizando os elementos listados na Paleta do IDE. Se a Paleta não estiver aberta, selecione Janela > Paleta no menu principal. Em seguida, em Forms HTML, clique e arraste um elemento Form para a página, um ponto abaixo das tags <code>&lt;p></code> que você acabou de adicionar. A caixa de diálogo Inserir Form será aberta. Especifique o seguinte: <br><br>
                    <ul>
                        <li>Ação: autocompletar código</li>
                        <li>Método: GET</li>
                        <li>Nome: autofillform</li>
                    </ul>

                    <img alt="Caixa de diálogo Inserir form" class="margin-around b-all" src="../../../images_www/articles/73/web/ajax-intro/insert-form.png" title="Caixa de diálogo Inserir form">

                    <p>Clique em OK. As tags HTML <code>&lt;form></code> serão inseridas na página que contém os atributos especificados. (GET é aplicado por default e, portanto, não é declarado explicitamente.)</p></li>

                <li>Adicione uma tabela HTML à página. Na categoria HTML na Paleta, clique em um elemento Tabela e arraste-o para um ponto entre as tags <code>&lt;form></code>. A caixa de diálogo Inserir Tabela será aberta. Especifique o seguinte: <br><br>
                    <ul>
                        <li>Linhas: 2</li>
                        <li>Colunas: 2</li>
                        <li>Tamanho da Borda: 0</li>
                        <li>Preenchimento de Células: 5</li>
                    </ul>

                    <img alt="Caixa de diálogo Inserir tabela" class="margin-around b-all" src="../../../images_www/articles/73/web/ajax-intro/insert-table.png" title="Caixa de diálogo Inserir tabela">
                </li>

                <li>Clique com o botão direito do mouse no Editor de Código-Fonte e selecione Formatar. Isso limpa o código. Seu form agora deve ser semelhante ao abaixo:

<pre class="examplecode">
&lt;form name=&quot;autofillform&quot; action=&quot;autocomplete&quot;&gt;
  &lt;table border=&quot;0&quot; cellpadding=&quot;5&quot;&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;&lt;/th&gt;
        &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;/td&gt;
        &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;/td&gt;
        &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;
&lt;/form&gt;
</pre></li>

                <li>Na primeira linha da tabela, digite o seguinte texto na primeira coluna (alterações em <strong>negrito</strong>):

<pre class="examplecode">&lt;td&gt;<strong>&lt;strong&gt;Composer Name:&lt;/strong&gt;</strong>&lt;/td&gt;</pre></li>

                <li>Na segunda coluna da primeira linha, em vez de arrastar um campo Entrada de Texto da Paleta, digite o código abaixo manualmente (alterações em <strong>negrito</strong>):


<pre class="examplecode">
&lt;td&gt;
    <strong>&lt;input type=&quot;text&quot;
        size=&quot;40&quot;
        id=&quot;complete-field&quot;
        onkeyup=&quot;doCompletion();&quot;&gt;</strong>
&lt;/td&gt;
</pre>

                    Enquanto digita, tente utilizar o suporte à funcionalidade autocompletar código incorporado do IDE. Por exemplo, digite <code>&lt;i</code> e, em seguida, pressione Ctrl-Espaço. Uma lista de opções sugeridas será exibida abaixo do seu cursor e uma descrição do elemento selecionado aparecerá em uma caixa acima. De fato, você pode pressionar Ctrl-Espaço a qualquer momento em que estiver codificando no Editor de Código-Fonte para ter acesso às opções possíveis. Além disso, caso só haja uma opção possível, pressionar Ctrl-Espaço completará automaticamente o nome do elemento. <br> <img alt="Função Autocompletar Código exibida no Editor de Código-Fonte" class="margin-around b-all" src="../../../images_www/articles/73/web/ajax-intro/code-completion.png" style="width:688px" title="Pressione Ctrl-Espaço no editor para chamar o suporte a autocompletar código e à documentação">
                </li>

            </ol>

            <p>O atributo <code>onkeyup</code> que você digitou acima aponta para uma função JavaScript chamada <code>doCompletion()</code>. Essa função é chamada toda vez que uma tecla é pressionada no campo de texto do form, e mapeia para a chamada JavaScript representada no <a href="#flow-diagram">fluxograma</a> do Ajax acima.</p>


            <h3 id="javascript">Utilizando o Editor JavaScript</h3>

            <p>O novo Editor JavaScript do IDE fornece muitos recursos de edição avançados, como autocompletar código inteligente, realce de semântica, renomeação instantânea e recursos de refatoração, assim como muitas outras funcionalidades. </p>

            <p>A funcionalidade autocompletar código JavaScript é automaticamente fornecida quando você codifica em arquivos <code>.js</code>, assim como em tags <code>&lt;script></code> quando trabalha com outras tecnologias (ou seja, HTML, RHTML, JSP, PHP). O IDE por fornecer algumas dicas quando você editar o código JavaScript. É possível especificar as opções de JavaScript escolhendo Ferramentas > Opções (NetBeans > Preferências, no Mac) para abrir a janela Opções e selecionar a linguagem JavaScript na guia Dicas, categoria Editor. Você também pode adicionar seus próprios modelos de código JavaScript na guia Modelos de Código, janela Opções.</p>

            <img alt="Opções de Dicas de JavaScript na janela Opções" class="margin-around b-all" src="../../../images_www/articles/73/web/ajax-intro/javascript-options.png" title="Opções de Dicas de JavaScript na janela Opções">

            <p>Adicione um arquivo JavaScript à aplicação e comece a implementar <code>doCompletion()</code>.</p>

            <ol>
                <li>Na janela Projetos, clique com o botão direito do mouse no nó Páginas Web e escolha Novo > arquivo JavaScript. (Se o arquivo JavaScript não estiver listado, selecione Outro. Em seguida, escolha o arquivo JavaScript na categoria Web no assistente Novo arquivo.)</li>
                <li>Nomeie o arquivo como <code>javascript</code> e clique em Finalizar. O novo arquivo JavaScript aparecerá na janela Projetos, na pasta Páginas da Web.</li>
                <li>Digite o código abaixo em <code>javascript.js</code>.

<pre class="examplecode">
var req;
var isIE;

function init() {
    completeField = document.getElementById(&quot;complete-field&quot;);
}

function doCompletion() {
        var url = &quot;autocomplete?action=complete&id=&quot; + escape(completeField.value);
        req = initRequest();
        req.open(&quot;GET&quot;, url, true);
        req.onreadystatechange = callback;
        req.send(null);
}

function initRequest() {
    if (window.XMLHttpRequest) {
        if (navigator.userAgent.indexOf('MSIE') != -1) {
            isIE = true;
        }
        return new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        isIE = true;
        return new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
    }
}</pre>

                    <p class="tips">O código acima executa um verificação simples de compatibilidade do browser para o Firefox 3 e para o Internet Explorer versões 6 e 7). Se desejar incorporar um código mais robusto para problemas de compatibilidade, considere usar este <a href="http://www.quirksmode.org/js/detect.html">script de detecção de browser</a> disponível em <a href="http://www.quirksmode.org">http://www.quirksmode.org</a>.</p></li>

                <li>Volte para a página do índice e adicione uma referência ao arquivo JavaScript entre as tags <code>&lt;head></code>.

<pre class="examplecode">
&lt;script type=&quot;text/javascript&quot; src=&quot;javascript.js&quot;&gt;&lt;/script&gt;</pre>

                    <p class="tips">Você pode alternar rapidamente entre as páginas abertas no Editor de Código-fonte, pressionando Ctrl-Tab.</p></li>

                <li>Insira uma chamada a <code>init()</code> na tag de abertura <code>&lt;body></code>.

<pre class="examplecode">
&lt;body <strong>onload=&quot;init()&quot;</strong>&gt;</pre>

                    Isso garante que <code>init()</code> seja chamada toda vez que a página for carregada.</li>
            </ol>

            <p>A atribuição de <code>doCompletion()</code> é:</p>

            <ul>
                <li>criar um URL que contenha dados que possam ser utilizados pelo lado do servidor,</li>
                <li>inicializar um objeto <code>XMLHttpRequest</code>, e</li>
                <li>solicitar que o objeto <code>XMLHttpRequest</code> envie uma solicitação assíncrona para o servidor.</li>
            </ul>

            <p>O objeto <code>XMLHttpRequest</code> é o núcleo do Ajax e se tornou o padrão de fato para permitir que dados XML sejam passados assincronamente por HTTP. A interação <em>Assíncrona</em> implica que o browser pode continuar a processar eventos na página depois que a requisição tiver sido enviada. Os dados são passados em segundo plano, e podem ser carregados automaticamente na página sem exigir uma atualização da página.</p>

            <p>Observe que o objeto <code>XMLHttpRequest</code> é realmente criado por <code>initRequest()</code>, que é chamada por <code>doCompletion()</code>. A função verifica se <code>XMLHttpRequest</code> pode ser entendido pelo browser e, se for o caso, cria um objeto <code>XMLHttpRequest</code>. Caso contrário, ela executa uma verificação em <code>ActiveXObject</code> (o <code>XMLHttpRequest</code> equivalente do Internet Explorer 6) e cria um <code>ActiveXObject</code>, se identificado.</p>

            <p>Três parâmetros são especificados quando você cria um objeto <code>XMLHttpRequest</code>: um URL, o método HTTP (<code>GET</code> ou <code>POST</code>), e se a interação é assíncrona ou não. No exemplo acima, os parâmetros são:</p>

            <ul>
                <li>O URL <code>autocomplete</code>, e o texto digitado no <code>complete-field</code> pelo usuário:

<pre class="examplecode">var url = &quot;autocomplete?action=complete&id=&quot; + escape(completeField.value);</pre></li>

                <li><code>GET</code>, significando que as interações HTTP usam o método <code>GET</code>, e
                <li><code>true</code>, significando que a interação é assíncrona:

                    <pre class="examplecode">req.open(&quot;GET&quot;, url, true);</pre></li>
            </ul>

            <p>Se a interação for definida como assíncrona, uma função de chamada de retorno deve ser especificada. A função de chamada de retorno dessa interação é definida com a instrução:</p>

<div class="indent">
    <div class="indent">
        <pre class="examplecode">req.onreadystatechange = callback;</pre>
    </div>
</div>

            <p>e uma função <code>callback()</code> <a href="#callback">deve ser definida mais tarde</a>. A interação HTTP começa quando <code>XMLHttpRequest.send()</code> é chamada. Essa ação mapeia para a solicitação HTTP que é enviada para o servidor web no <a href="#flow-diagram">fluxograma</a> acima.</p>
        </div>


        <br>
        <h2 id="serverside">Programando o Lado do Servidor</h2>

        <p>O IDE oferece suporte abrangente para programação Web do lado do servidor. Embora isso inclua o suporte a editor básico para muitas linguagens de programação e de script populares, também inclui Web services, tais como SOAP, REST, SaaS e frameworks orientados a MVC, como JSF, Spring e Struts. Diversos plug-ins do NetBeans estão disponíveis no <a href="http://plugins.netbeans.org/">Portal de Plug-In do NetBeans</a> para frameworks orientados para Ajax, como <a href="https://developers.google.com/web-toolkit/">GWT</a> e <a href="http://struts.apache.org/2.x/">Struts2</a>.</p>

        <p>A lógica de negócios da aplicação processa as solicitações, recuperando dados do armazenamento de dados e, em seguida, preparando e enviando a resposta. Isso é implementado aqui por meio de um servlet. Antes de começar a codificar o servlet, configure o armazenamento de dados e a funcionalidade necessários pelo servlet para acessar os dados.</p>

        <ul>
            <li><a href="#data">Criando o Armazenamento de Dados</a></li>
            <li><a href="#servlet">Criando um Servlet</a></li>
        </ul>

        <div class="indent">
            <a name="data"></a>
            <h3>Criando o Armazenamento de Dados</h3>

            <p>Para essa aplicação simples, você cria uma classe nomeada <code>ComposerData</code> que mantém os dados do composer utilizando um <a href="http://download.oracle.com/javase/1.5.0/docs/api/java/util/HashMap.html"><code>HashMap</code></a>. Um <code>HashMap</code> permite armazenar pares de itens vinculados em pares chave-valor. Você também pode criar uma classe <code>Composer</code> que permita ao servlet recuperar dados de entradas no <code>HashMap</code>.</p>

            <ol>
                <li>Clique com o botão direito do mouse no nó do projeto na janela Projetos e selecione Novo > Classe Java.</li>
                <li>Nomeie a classe <code>ComposerData</code> e digite <code>com.ajax</code> no campo Pacote. Isso cria um novo pacote que contém a classe, assim como outras classes que serão criadas mais tarde.</li>
                <li>Clique em Finalizar. A classe será criada e aberta no Editor de Código-fonte.</li>
                <li>No Editor de Código-fonte, cole o seguinte código:

<pre class="examplecode">
package com.ajax;

import java.util.HashMap;

/**
 *
 * @author nbuser
 */
public class ComposerData {

    private HashMap composers = new HashMap();

    public HashMap getComposers() {
        return composers;
    }

    public ComposerData() {

        composers.put(&quot;1&quot;, new Composer(&quot;1&quot;, &quot;Johann Sebastian&quot;, &quot;Bach&quot;, &quot;Baroque&quot;));
        composers.put(&quot;2&quot;, new Composer(&quot;2&quot;, &quot;Arcangelo&quot;, &quot;Corelli&quot;, &quot;Baroque&quot;));
        composers.put(&quot;3&quot;, new Composer(&quot;3&quot;, &quot;George Frideric&quot;, &quot;Handel&quot;, &quot;Baroque&quot;));
        composers.put(&quot;4&quot;, new Composer(&quot;4&quot;, &quot;Henry&quot;, &quot;Purcell&quot;, &quot;Baroque&quot;));
        composers.put(&quot;5&quot;, new Composer(&quot;5&quot;, &quot;Jean-Philippe&quot;, &quot;Rameau&quot;, &quot;Baroque&quot;));
        composers.put(&quot;6&quot;, new Composer(&quot;6&quot;, &quot;Domenico&quot;, &quot;Scarlatti&quot;, &quot;Baroque&quot;));
        composers.put(&quot;7&quot;, new Composer(&quot;7&quot;, &quot;Antonio&quot;, &quot;Vivaldi&quot;, &quot;Baroque&quot;));

        composers.put(&quot;8&quot;, new Composer(&quot;8&quot;, &quot;Ludwig van&quot;, &quot;Beethoven&quot;, &quot;Classical&quot;));
        composers.put(&quot;9&quot;, new Composer(&quot;9&quot;, &quot;Johannes&quot;, &quot;Brahms&quot;, &quot;Classical&quot;));
        composers.put(&quot;10&quot;, new Composer(&quot;10&quot;, &quot;Francesco&quot;, &quot;Cavalli&quot;, &quot;Classical&quot;));
        composers.put(&quot;11&quot;, new Composer(&quot;11&quot;, &quot;Fryderyk Franciszek&quot;, &quot;Chopin&quot;, &quot;Classical&quot;));
        composers.put(&quot;12&quot;, new Composer(&quot;12&quot;, &quot;Antonin&quot;, &quot;Dvorak&quot;, &quot;Classical&quot;));
        composers.put(&quot;13&quot;, new Composer(&quot;13&quot;, &quot;Franz Joseph&quot;, &quot;Haydn&quot;, &quot;Classical&quot;));
        composers.put(&quot;14&quot;, new Composer(&quot;14&quot;, &quot;Gustav&quot;, &quot;Mahler&quot;, &quot;Classical&quot;));
        composers.put(&quot;15&quot;, new Composer(&quot;15&quot;, &quot;Wolfgang Amadeus&quot;, &quot;Mozart&quot;, &quot;Classical&quot;));
        composers.put(&quot;16&quot;, new Composer(&quot;16&quot;, &quot;Johann&quot;, &quot;Pachelbel&quot;, &quot;Classical&quot;));
        composers.put(&quot;17&quot;, new Composer(&quot;17&quot;, &quot;Gioachino&quot;, &quot;Rossini&quot;, &quot;Classical&quot;));
        composers.put(&quot;18&quot;, new Composer(&quot;18&quot;, &quot;Dmitry&quot;, &quot;Shostakovich&quot;, &quot;Classical&quot;));
        composers.put(&quot;19&quot;, new Composer(&quot;19&quot;, &quot;Richard&quot;, &quot;Wagner&quot;, &quot;Classical&quot;));

        composers.put(&quot;20&quot;, new Composer(&quot;20&quot;, &quot;Louis-Hector&quot;, &quot;Berlioz&quot;, &quot;Romantic&quot;));
        composers.put(&quot;21&quot;, new Composer(&quot;21&quot;, &quot;Georges&quot;, &quot;Bizet&quot;, &quot;Romantic&quot;));
        composers.put(&quot;22&quot;, new Composer(&quot;22&quot;, &quot;Cesar&quot;, &quot;Cui&quot;, &quot;Romantic&quot;));
        composers.put(&quot;23&quot;, new Composer(&quot;23&quot;, &quot;Claude&quot;, &quot;Debussy&quot;, &quot;Romantic&quot;));
        composers.put(&quot;24&quot;, new Composer(&quot;24&quot;, &quot;Edward&quot;, &quot;Elgar&quot;, &quot;Romantic&quot;));
        composers.put(&quot;25&quot;, new Composer(&quot;25&quot;, &quot;Gabriel&quot;, &quot;Faure&quot;, &quot;Romantic&quot;));
        composers.put(&quot;26&quot;, new Composer(&quot;26&quot;, &quot;Cesar&quot;, &quot;Franck&quot;, &quot;Romantic&quot;));
        composers.put(&quot;27&quot;, new Composer(&quot;27&quot;, &quot;Edvard&quot;, &quot;Grieg&quot;, &quot;Romantic&quot;));
        composers.put(&quot;28&quot;, new Composer(&quot;28&quot;, &quot;Nikolay&quot;, &quot;Rimsky-Korsakov&quot;, &quot;Romantic&quot;));
        composers.put(&quot;29&quot;, new Composer(&quot;29&quot;, &quot;Franz Joseph&quot;, &quot;Liszt&quot;, &quot;Romantic&quot;));

        composers.put(&quot;30&quot;, new Composer(&quot;30&quot;, &quot;Felix&quot;, &quot;Mendelssohn&quot;, &quot;Romantic&quot;));
        composers.put(&quot;31&quot;, new Composer(&quot;31&quot;, &quot;Giacomo&quot;, &quot;Puccini&quot;, &quot;Romantic&quot;));
        composers.put(&quot;32&quot;, new Composer(&quot;32&quot;, &quot;Sergei&quot;, &quot;Rachmaninoff&quot;, &quot;Romantic&quot;));
        composers.put(&quot;33&quot;, new Composer(&quot;33&quot;, &quot;Camille&quot;, &quot;Saint-Saens&quot;, &quot;Romantic&quot;));
        composers.put(&quot;34&quot;, new Composer(&quot;34&quot;, &quot;Franz&quot;, &quot;Schubert&quot;, &quot;Romantic&quot;));
        composers.put(&quot;35&quot;, new Composer(&quot;35&quot;, &quot;Robert&quot;, &quot;Schumann&quot;, &quot;Romantic&quot;));
        composers.put(&quot;36&quot;, new Composer(&quot;36&quot;, &quot;Jean&quot;, &quot;Sibelius&quot;, &quot;Romantic&quot;));
        composers.put(&quot;37&quot;, new Composer(&quot;37&quot;, &quot;Bedrich&quot;, &quot;Smetana&quot;, &quot;Romantic&quot;));
        composers.put(&quot;38&quot;, new Composer(&quot;38&quot;, &quot;Richard&quot;, &quot;Strauss&quot;, &quot;Romantic&quot;));
        composers.put(&quot;39&quot;, new Composer(&quot;39&quot;, &quot;Pyotr Il'yich&quot;, &quot;Tchaikovsky&quot;, &quot;Romantic&quot;));
        composers.put(&quot;40&quot;, new Composer(&quot;40&quot;, &quot;Guiseppe&quot;, &quot;Verdi&quot;, &quot;Romantic&quot;));

        composers.put(&quot;41&quot;, new Composer(&quot;41&quot;, &quot;Bela&quot;, &quot;Bartok&quot;, &quot;Post-Romantic&quot;));
        composers.put(&quot;42&quot;, new Composer(&quot;42&quot;, &quot;Leonard&quot;, &quot;Bernstein&quot;, &quot;Post-Romantic&quot;));
        composers.put(&quot;43&quot;, new Composer(&quot;43&quot;, &quot;Benjamin&quot;, &quot;Britten&quot;, &quot;Post-Romantic&quot;));
        composers.put(&quot;44&quot;, new Composer(&quot;44&quot;, &quot;John&quot;, &quot;Cage&quot;, &quot;Post-Romantic&quot;));
        composers.put(&quot;45&quot;, new Composer(&quot;45&quot;, &quot;Aaron&quot;, &quot;Copland&quot;, &quot;Post-Romantic&quot;));
        composers.put(&quot;46&quot;, new Composer(&quot;46&quot;, &quot;George&quot;, &quot;Gershwin&quot;, &quot;Post-Romantic&quot;));
        composers.put(&quot;47&quot;, new Composer(&quot;47&quot;, &quot;Sergey&quot;, &quot;Prokofiev&quot;, &quot;Post-Romantic&quot;));
        composers.put(&quot;48&quot;, new Composer(&quot;48&quot;, &quot;Maurice&quot;, &quot;Ravel&quot;, &quot;Post-Romantic&quot;));
        composers.put(&quot;49&quot;, new Composer(&quot;49&quot;, &quot;Igor&quot;, &quot;Stravinsky&quot;, &quot;Post-Romantic&quot;));
        composers.put(&quot;50&quot;, new Composer(&quot;50&quot;, &quot;Carl&quot;, &quot;Orff&quot;, &quot;Post-Romantic&quot;));

    }
}</pre></li>
            </ol>
            <p>Você observará que uma advertência será exibida na margem esquerda do editor porque a classe <tt>Composer</tt> não pode ser encontrada. Execute as etapas a seguir para criar a classe <code>Composer</code>.</p>

            <ol>
                <li>Clique com o botão direito do mouse no nó do projeto na janela Projetos e selecione Novo > Classe Java.</li>
                <li>Nomeie a classe <code>Composer</code> e selecione <code>com.ajax</code> na lista drop-down no campo Pacote. Clique em Finalizar.
                <p>Quando você clica em Finalizar, o IDE cria a classe e abre o arquivo no Editor de Código-fonte.</p></li>
                <li>No Editor de Código-fonte, cole o seguinte código:

<pre class="examplecode">
package com.ajax;

public class Composer {

    private String id;
    private String firstName;
    private String lastName;
    private String category;

    public Composer (String id, String firstName, String lastName, String category) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
        this.category = category;
    }

    public String getCategory() {
        return category;
    }

    public String getId() {
        return id;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }
}</pre></li>
            </ol>
            <p>Depois que você cria a classe <tt>Composer</tt>, se você observar a classe <tt>ComposerData</tt> no editor, poderá ver que as anotações de advertência não existem mais. Se ainda você vir as anotações de advertência no <tt>ComposerData</tt> você pode tentar resolver o erro adicionando as instruções de importação ausentes.</p>
            
            <h3 id="servlet">Criando um Servlet</h3>

            <p>Crie um servlet para tratar o URL <code>autocomplete</code> que é recebido pela solicitação de entrada.</p>

            <ol>
                <li>Clique com o botão direito do mouse no nó do projeto na janela Projetos e escolha Novo > Servlet para abrir o assistente para Novo Servlet. (Escolha Outros e selecione Servlet na categoria da Web se Servlet não for exibido por default no menu pop-up).</li>
                <li>Nomeie o servlet <code>AutoCompleteServlet</code> e selecione <code>com.ajax</code> na lista drop-down no campo Pacote. Clique em Próximo.<br> <img alt="Assistente Novo Servlet, painel Nome e Localização concluído" class="margin-around b-all" src="../../../images_www/articles/73/web/ajax-intro/newservlet-name-location.png"></li>
                <li>No painel Configurar a Implantação do Servlet, altere o padrão do URL para <strong><code>/autocomplete</code></strong> para que ele corresponda ao URL que foi definido anteriormente no objeto <code>XMLHttpRequest</code>. <br> <img alt="Assistente Novo Servlet, painel Configurar Implantação do Servlet concluído" class="margin-around b-all" src="../../../images_www/articles/73/web/ajax-intro/newservlet-configure-deployment.png">
                    
                    <p>Esse painel elimina a necessidade de adicionar manualmente esses detalhes no descritor de implantação.</p></li>
                <li>como opção, selecione "Adicionar informações do servlet ao descritor da implantação". Isso faz com que seu projeto seja o mesmo da amostra da qual fez download. Com versões posteriores do IDE, por default o servlet é registrado por uma anotação <code>@WebServlet</code>, em vez de um descritor da implantação. O projeto ainda funcionará se você usar a anotação <code>@WebServlet</code>, em vez de um descritor de implantação.</li>
                <li>Clique em Finalizar. O servlet será criado e aberto no Editor de Código-fonte.</li>
            </ol>

            <p>Os únicos métodos que você precisa substituir são <code>doGet()</code>, para definir como o servlet trataa solicitação <code>autocomplete</code> <code>GET</code>, e <code>init()</code>, que precisa iniciar um <code>ServletContext</code> de forma que o servlet possa acessar outras classes na aplicação, depois de ter sido posto em serviço.</p>

            <p>Você pode substituir métodos de superclasses usando o menu pop-up Inserir Código do IDE. Implemente <code>init()</code> executando as etapas a seguir.</p>

            <ol>
                <li>Coloque o seu cursor embaixo da declaração de classe <code>AutoCompleteServlet</code> no Editor de Código-fonte. Pressione Alt-Insert (Ctrl-I no Mac) para abrir o menu pop-up Gerar Código. <br> <img alt="Menu pop-up Inserir Código exibido no Editor de Código-fonte" class="margin-around b-all" src="../../../images_www/articles/73/web/ajax-intro/insert-code.png" title="Menu pop-up Inserir Código exibido no Editor de Código-fonte"></li>

                <li>Selecione Substituir Método. Na caixa de diálogo que é exibida, todas as classes que <code>AutoCompleteServlet</code> herda são exibidas. Expanda o nó GenericServlet e selecione <code>init(Servlet Config config)</code>. <br> <img alt="A caixa de diálogo Substituir listando classes herdadas" class="margin-around b-all" src="../../../images_www/articles/73/web/ajax-intro/new-override.png" title="A caixa de diálogo Substituir lista classes herdadas"></li>

                <li>Clique em OK. O método <code>init()</code> é adicionado no Editor de Código-fonte.</li>

                <li>Adicione uma variável para um objeto <code>ServletContext</code> e modifique <code>init()</code> (alterações em <strong>negrito</strong>):

<pre class="examplecode">
<strong>private ServletContext context;</strong>

@Override
public void init(ServletConfig <strong>config</strong>) throws ServletException {
    <strong>this.context = config.getServletContext();</strong>
}</pre></li>

                <li>Adicione uma instrução de importação para <code>ServletContext</code>. Você pode fazer isso clicando no ícone da lâmpada exibido na margem esquerda do Editor de Código-fonte <br> <img alt="Dica de importação exibida na margem esquerda do Editor de Código-fonte" class="margin-around b-all" src="../../../images_www/articles/73/web/ajax-intro/import-hint.png" title="Dicas de importação são exibidas na margem esquerda do Editor de Código-fonte"></li>
            </ol>

            <p>O método <code>doGet()</code> precisa fazer parsing do URL da solicitação, recuperar dados do armazenamento de dados e preparar uma resposta em formato XML. Note que a declaração do método foi gerada quando você criou a classe. Para exibi-la, pode ser necessário expandir métodos HttpServlet clicando no ícone de expansão (<img alt="ícone de expansão" src="../../../images_www/articles/73/web/ajax-intro/expand-icon.png">) na margem esquerda.</p>

            <ol>
                <li>Adicione as declarações de variável a seguir embaixo da declaração da classe <code>AutocompleteServlet</code>.

<pre class="examplecode">
private ComposerData compData = new ComposerData();
private HashMap composers = compData.getComposers();</pre>

                    Isso cria um <code>HashMap</code> de todos os dados do composer, que é, em seguida, utilizado por <code>doGet()</code>.</li>

                <li>Role para baixo para <code>doGet()</code> e implemente o método da seguinte forma:

<pre class="examplecode">
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException {

    String action = request.getParameter(&quot;action&quot;);
    String targetId = request.getParameter(&quot;id&quot;);
    StringBuffer sb = new StringBuffer();

    if (targetId != null) {
        targetId = targetId.trim().toLowerCase();
    } else {
        context.getRequestDispatcher(&quot;/error.jsp&quot;).forward(request, response);
    }

    boolean namesAdded = false;
    if (action.equals(&quot;complete&quot;)) {

        // check if user sent empty string
        if (!targetId.equals(&quot;&quot;)) {

            Iterator it = composers.keySet().iterator();

            while (it.hasNext()) {
                String id = (String) it.next();
                Composer composer = (Composer) composers.get(id);

                if ( // targetId matches first name
                     composer.getFirstName().toLowerCase().startsWith(targetId) ||
                     // targetId matches last name
                     composer.getLastName().toLowerCase().startsWith(targetId) ||
                     // targetId matches full name
                     composer.getFirstName().toLowerCase().concat(&quot; &quot;)
                        .concat(composer.getLastName().toLowerCase()).startsWith(targetId)) {

                    sb.append(&quot;&lt;composer&gt;&quot;);
                    sb.append(&quot;&lt;id&gt;&quot; + composer.getId() + &quot;&lt;/id&gt;&quot;);
                    sb.append(&quot;&lt;firstName&gt;&quot; + composer.getFirstName() + &quot;&lt;/firstName&gt;&quot;);
                    sb.append(&quot;&lt;lastName&gt;&quot; + composer.getLastName() + &quot;&lt;/lastName&gt;&quot;);
                    sb.append(&quot;&lt;/composer&gt;&quot;);
                    namesAdded = true;
                }
            }
        }

        if (namesAdded) {
            response.setContentType(&quot;text/xml&quot;);
            response.setHeader(&quot;Cache-Control&quot;, &quot;no-cache&quot;);
            response.getWriter().write(&quot;&lt;composers&gt;&quot; + sb.toString() + &quot;&lt;/composers&gt;&quot;);
        } else {
            //nothing to show
            response.setStatus(HttpServletResponse.SC_NO_CONTENT);
        }
    }
    if (action.equals("lookup")) {

        // put the target composer in the request scope to display 
        if ((targetId != null) && composers.containsKey(targetId.trim())) {
            request.setAttribute("composer", composers.get(targetId));
            context.getRequestDispatcher("/composer.jsp").forward(request, response);
        }
    }
}</pre></li>
            </ol>

            <p>Como pode ver neste servlet, não há nada exatamente novo que você precise aprender para escrever código do lado do servidor para processamento Ajax. O tipo de conteúdo da resposta precisa ser definido como <code>text/xml</code> para casos em que você deseje trocar documentos XML. Com o Ajax você também pode trocar texto simples ou até mesmo snippets de JavaScript, que podem ser avaliados ou executados pela função chamada de retorno no cliente. Observe também que alguns browsers podem armazenar no cache os resultados; portanto, talvez seja necessário definir o cabeçalho Cache-Control HTTP como <code>no-cache</code>.</p>

            <p>Nesse exemplo, o servlet gera um documento XML que contém todos os composers com nome ou sobrenome começando com os caracteres digitados pelo usuário. Este documento mapeia para os dados XML ilustrados no <a href="#flow-diagram">fluxograma</a> acima. Aqui está um exemplo de um documento XML que é retornado para o objeto <code>XMLHttpRequest</code>:</p>

            <div class="indent">
                <div class="indent">
<pre class="examplecode">
&lt;composers&gt;
    &lt;composer&gt;
        &lt;id&gt;12&lt;/id&gt;
        &lt;firstName&gt;Antonin&lt;/firstName&gt;
        &lt;lastName&gt;Dvorak&lt;/lastName&gt;
    &lt;/composer&gt;
    &lt;composer&gt;
        &lt;id&gt;45&lt;/id&gt;
        &lt;firstName&gt;Aaron&lt;/firstName&gt;
        &lt;lastName&gt;Copland&lt;/lastName&gt;
    &lt;/composer&gt;
    &lt;composer&gt;
        &lt;id&gt;7&lt;/id&gt;
        &lt;firstName&gt;Antonio&lt;/firstName&gt;
        &lt;lastName&gt;Vivaldi&lt;/lastName&gt;
    &lt;/composer&gt;
    &lt;composer&gt;
        &lt;id&gt;2&lt;/id&gt;
        &lt;firstName&gt;Arcangelo&lt;/firstName&gt;
        &lt;lastName&gt;Corelli&lt;/lastName&gt;
    &lt;/composer&gt;
&lt;/composers&gt;
</pre>
                </div>
            </div>

            <p class="tips">Você pode utilizar o <a href="#httpMonitor">Monitor HTTP</a> do IDE para exibir os dados XML retornados ao concluir a aplicação.</p>

        </div>


        <h2 id="client2">Programando o Lado do Cliente: Parte 2</h2>

        <p>Você deve definir a função de chamada de retorno para tratar a resposta do servidor, e adicionar qualquer funcionalidade necessária para refletir alterações na página exibida pelo usuário. Isso requer a modificação do HTML DOM. Você precisa criar páginas JSP para exibir os resultados de uma solicitação bem-sucedida ou as mensagens de erro de uma solicitação com falha. Em seguida, é possível criar uma folha de estilo simples para a apresentação.</p>

        <ul>
            <li><a href="#callback">Adicionando a Funcionalidade de Retorno de Chamada</a></li>
            <li><a href="#htmldom">Atualizando o HTML DOM</a></li>
            <li><a href="#displayresults">Exibindo os Resultados</a></li>
            <li><a href="#stylesheet">Anexando uma Folha de Estilo</a></li>
        </ul>

        <div class="indent">

            <a name="callback"></a>
            <h3>Adicionando a Funcionalidade de Retorno de Chamada</h3>

            <p>A função de retorno de chamada é chamada assincronamente em pontos específicos durante a interação HTTP quando a propriedade <code>readyState</code> do objeto <code>XMLHttpRequest</code> é alterada. Na aplicação que está sendo construída, a função chamada de retorno é <code>callback()</code>. Você lembra que em <code>doCompletion()</code>, <code>callback</code> foi definido como a propriedade <code>XMLHttpRequest.onreadystatechange</code> para uma função. Agora, implemente a função de retorno de chamada da seguinte forma.</p>

            <ol>
                <li>Abra <code>javascript.js</code> no Editor de Código-fonte e digite o código abaixo.

<pre class="examplecode">
function callback() {
    if (req.readyState == 4) {
        if (req.status == 200) {
            parseMessages(req.responseXML);
        }
    }
}</pre></li>
            </ol>

            <p>Um <code>readyState</code> de "4" significa a conclusão da interação HTTP. A API de <code>XMLHttpRequest.readState</code> indica que há 5 valores possíveis que podem ser definidos. São elas:</p>

            <div class="indent">
                <div class="indent">
                    <table class="half-width">
                        <thead class="tblheader">
                            <tr>
                                <th class="innerpadding">Valor <code>readyState</code></th>
                                <th class="innerpadding">Definição do Status do Objeto</th>
                            </tr>
                        </thead>
                        <tbody class="tbltd0 align-center">
                            <tr>
                                <td>0</td>
                                <td>não inicializado</td>
                            </tr>
                            <tr>
                                <td>1</td>
                                <td>carregando</td>
                            </tr>
                            <tr>
                                <td>2</td>
                                <td>carregado</td>
                            </tr>
                            <tr>
                                <td>3</td>
                                <td>interativo</td>
                            </tr>
                            <tr>
                                <td>4</td>
                                <td>completo</td>
                            </tr>
                        </tbody>
                    </table>
                </div>
            </div>

            <br>
            <p>Observe que a função <code>parseMessages()</code> somente é chamada quando o <code>XMLHttpRequest.readyState</code> é "4" e o <code>status</code> (a definição do código de status HTTP da solicitação) é "200", significando êxito. Você definirá <code>parseMessages()</code> em seguida em <a href="#htmldom">Atualizando o HTML DOM</a>.</p>

            <a name="htmldom"></a>
            <h3>Atualizando o HTML DOM</h3>

            <p>A função <code>parseMessages()</code> trata os dados XML de entrada. Fazendo isso, ela conta com várias funções auxiliares, como <code>appendComposer()</code>, <code>getElementY()</code> e <code>clearTable()</code>. Você também deve introduzir novos elementos na página de índice, como uma segunda tabela HTML que serve como a caixa autocompletar, e os IDs dos elementos, para que eles possam ser referenciados em <code>javascript.js</code>. Finalmente, crie novas variáveis que correspondam aos IDs para os elementos na página do índice, inicialize-as na função <code>init()</code> implementada anteriormente e adicione alguma funcionalidade que seja necessária sempre que a página do índice for carregada.</p>

            <p class="notes"><strong>Observação: </strong>As funções e elementos que você cria nas etapas seguintes funcionam de forma interdependente. Recomendamos que você percorra esta seção e, em seguida, examine o código quando tudo estiver no lugar.</p>

            <ol>
                <li>Abra a página do índice no Editor de Código-fonte e digite o código abaixo para a segunda linha da tabela HTML que você criou anteriormente.

<pre class="examplecode">
&lt;tr&gt;
    <strong>&lt;td id=&quot;auto-row&quot; colspan=&quot;2&quot;&gt;
        &lt;table id=&quot;complete-table&quot; /&gt;
    &lt;/td&gt;</strong>
&lt;/tr&gt;</pre>

                    A segunda linha da tabela contém outra tabela HTML. Essa tabela representa a caixa autocompletar que será utilizada para preencher os nomes do composer.</li>

                <li>Abra <code>javascript.js</code> no Editor de Código-fonte e as três variáveis seguintes no início do arquivo.

<pre class="examplecode">
var completeField;
var completeTable;
var autoRow;</pre></li>

                <li>Adicione as seguintes linhas (em <strong>negrito</strong>) na função <code>init()</code>.

<pre class="examplecode">
function init() {
    completeField = document.getElementById(&quot;complete-field&quot;);
    <strong>completeTable = document.getElementById(&quot;complete-table&quot;);
    autoRow = document.getElementById(&quot;auto-row&quot;);
    completeTable.style.top = getElementY(autoRow) + &quot;px&quot;;</strong>
}</pre>

                    Uma finalidade de <code>init()</code> é tornar os elementos que estão dentro da página de índice acessíveis para outras funções que modificarão o DOM da página de índice.</li>

                <li>Adicione <code>appendComposer()</code> a <code>javascript.js</code>.

 <pre class="examplecode">
function appendComposer(firstName,lastName,composerId) {

    var row;
    var cell;
    var linkElement;

    if (isIE) {
        completeTable.style.display = 'block';
        row = completeTable.insertRow(completeTable.rows.length);
        cell = row.insertCell(0);
    } else {
        completeTable.style.display = 'table';
        row = document.createElement(&quot;tr&quot;);
        cell = document.createElement(&quot;td&quot;);
        row.appendChild(cell);
        completeTable.appendChild(row);
    }

    cell.className = &quot;popupCell&quot;;

    linkElement = document.createElement(&quot;a&quot;);
    linkElement.className = &quot;popupItem&quot;;
    linkElement.setAttribute(&quot;href&quot;, &quot;autocomplete?action=lookup&id=&quot; + composerId);
    linkElement.appendChild(document.createTextNode(firstName + &quot; &quot; + lastName));
    cell.appendChild(linkElement);
}</pre>

                    Essa função cria uma nova linha da tabela, insere um link em um criador utilizando os dados passados para a função por meio de seus três parâmetros e insere a linha no elemento <code>complete-table</code> da página de índice.</li>

                <li>Adicione <code>getElementY()</code> a <code>javascript.js</code>.

                <pre class="examplecode">
function getElementY(element){

    var targetTop = 0;

    if (element.offsetParent) {
        while (element.offsetParent) {
            targetTop += element.offsetTop;
            element = element.offsetParent;
        }
    } else if (element.y) {
        targetTop += element.y;
    }
    return targetTop;
}</pre>

                    Essa função é aplicada para localizar a posição vertical do elemento pai. Isso é necessário porque a posição real do elemento, quando ele é exibido, frequentemente depende do tipo e da versão do browser. Note que o elemento <code>complete-table</code>, quando é exibido contendo nomes de criador, é deslocado para o lado direito inferior da tabela em que ele está. O posicionamento correto da altura é determinado por <code>getElementY()</code>. <br><br>
                    <p class="notes"><strong>Observação: </strong>Consulte <a href="http://www.quirksmode.org/js/findpos.html">esta explicação</a> de <code>offset</code> em <a href="http://www.quirksmode.org/">http://www.quirksmode.org/</a>.</p></li>

                <li>Adicione <code>clearTable()</code> a <code>javascript.js</code>.

 <pre class="examplecode">
function clearTable() {
    if (completeTable.getElementsByTagName("tr").length > 0) {
        completeTable.style.display = 'none';
        for (loop = completeTable.childNodes.length -1; loop >= 0 ; loop--) {
            completeTable.removeChild(completeTable.childNodes[loop]);
        }
    }
}</pre>

                    Essa função define a exibição do elemento <code>complete-table</code> como "none" (ou seja, o torna invisível) e remove quaisquer entradas de nome de criador existentes que tenham sido criadas.</li>

                <li>Modifique a função <code>callback()</code> para que chame <code>clearTable()</code> cada vez que novos dados forem recebidos do servidor. Quaisquer entradas do criador que já existam na caixa autocompletar serão, portanto, removidas, antes que esta seja preenchida com novas entradas.

<pre class="examplecode">
function callback() {

    <strong>clearTable();</strong>

    if (req.readyState == 4) {
        if (req.status == 200) {
            parseMessages(req.responseXML);
        }
    }
}</pre></li>

                <li>Adicione <code>parseMessages()</code> a <code>javascript.js</code>.

<pre class="examplecode">
function parseMessages(responseXML) {

    // no matches returned
    if (responseXML == null) {
        return false;
    } else {

        var composers = responseXML.getElementsByTagName(&quot;composers&quot;)[0];

        if (composers.childNodes.length &gt; 0) {
            completeTable.setAttribute(&quot;bordercolor&quot;, &quot;black&quot;);
            completeTable.setAttribute(&quot;border&quot;, &quot;1&quot;);

            for (loop = 0; loop &lt; composers.childNodes.length; loop++) {
                var composer = composers.childNodes[loop];
                var firstName = composer.getElementsByTagName(&quot;firstName&quot;)[0];
                var lastName = composer.getElementsByTagName(&quot;lastName&quot;)[0];
                var composerId = composer.getElementsByTagName(&quot;id&quot;)[0];
                appendComposer(firstName.childNodes[0].nodeValue,
                    lastName.childNodes[0].nodeValue,
                    composerId.childNodes[0].nodeValue);
            }
        }
    }
}</pre></li>
            </ol>

            <p>A função <code>parseMessages()</code> recebe como parâmetro uma representação de objeto do documento XML retornado pelo servlet <code>AutoComplete</code>. A função percorre programaticamente o documento XML, extraindo <code>firstName</code>, <code>lastName</code> e <code>id</code> de cada entrada e, em seguida, ela passa esses dados para <code>appendComposer()</code>. Isso resulta em uma atualização dinâmica do conteúdo do elemento <code>complete-table</code>. Por exemplo, uma entrada que é gerada e inserida em <code>complete-table</code> deve ter a seguinte aparência:

                <div class="indent">
                    <div class="indent">
<pre class="examplecode">
&lt;tr&gt;
    &lt;td class=&quot;popupCell&quot;&gt;
        &lt;a class=&quot;popupItem&quot; href=&quot;autocomplete?action=lookup&id=12&quot;&gt;Antonin Dvorak&lt;/a&gt;
    &lt;/td&gt;
&lt;/tr&gt;</pre>

                    </div>
                </div>

            <p>A atualização dinâmica do elemento <code>complete-table</code> representa a etapa final do fluxo do processo de comunicação que acontece durante a comunicação por meio do Ajax. Essa atualização mapeia para os dados HTML e CSS sendo enviados para a apresentação no <a href="#flow-diagram">fluxograma</a> acima.</p>

            <h3 id="displayresults">Exibindo os Resultados</h3>
            <p>Para exibir os resultados, você precisa de um arquivo JSP chamado <code>composers.jsp</code>. Esta página é chamada a partir do <code>AutoCompleteServlet</code> durante uma ação de busca. Você também precisa de um arquivo <code>error.jsp</code>, que é chamado a partir do <code>AutoCompleteServlet</code> se o composer não puder ser encontrado.</p>
            <p><strong>Para exibir resultados e erros:</strong></p>
            <ol>
                <li>Na janela Projetos, clique com o botão direito do mouse na pasta Páginas Web e selecione Novo > JSP. O assistente Novo JSP será aberto.</li>
                <li>No campo Nome do Arquivo, digite <code>composer</code>. No campo Arquivo Criado, você verá um caminho que termina em <code>/web/composer.jsp</code>.</li>
                <li>Clique em Finalizar. O arquivo <code>composer.jsp</code> será aberto no editor. Aparecerá um nó para o arquivo na janela Projetos na pasta Páginas Web. </li>
                <li>Substitua o código do placeholder no <code>composer.jsp</code> pelo seguinte código:
                    <pre class="examplecode">&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Composer Information&lt;/title&gt;

    &lt;link rel="stylesheet" type="text/css" href="stylesheet.css"&gt;
  &lt;/head&gt;
  &lt;body&gt;

    &lt;table&gt;
      &lt;tr&gt;
        &lt;th colspan="2"&gt;Composer Information&lt;/th&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;First Name: &lt;/td&gt;
        &lt;td&gt;${requestScope.composer.firstName}&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Last Name: &lt;/td&gt;
        &lt;td&gt;${requestScope.composer.lastName}&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;ID: &lt;/td&gt;
        &lt;td&gt;${requestScope.composer.id}&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Category: &lt;/td&gt;
        &lt;td&gt;${requestScope.composer.category}&lt;/td&gt;
      &lt;/tr&gt;      
    &lt;/table&gt;

    &lt;p&gt;Go back to &lt;a href="index.html" class="link"&gt;application home&lt;/a&gt;.&lt;/p&gt;
  &lt;/body&gt;
&lt;/html&gt;</pre>
                <p class="notes"><strong>Observação.</strong> Você precisará alterar o link para voltar à página de índice, se sua página de índice for <tt>index.jsp</tt>.</p>
                </li>
<li>Crie outro arquivo JSP na pasta Páginas Web do projeto. Nomeie o arquivo de <code>error.jsp</code>.</li>
<li>Substitua o código do placeholder no <code>error.jsp</code> pelo seguinte código:
    <pre class="examplecode">&lt;!DOCTYPE html&gt;

&lt;html&gt;
    &lt;head&gt;
        &lt;link rel="stylesheet" type="text/css" href="stylesheet.css"&gt;      
        &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
        &lt;title&gt;Seach Error&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h2&gt;Seach Error&lt;/h2&gt;
        
        &lt;p&gt;An error occurred while performing the search. Please try again.&lt;/p&gt;
        
        &lt;p&gt;Go back to &lt;a href="index.html" class="link"&gt;application home&lt;/a&gt;.&lt;/p&gt;
    &lt;/body&gt;
&lt;/html&gt;</pre>
    <p class="notes"><strong>Observação.</strong> Você precisará alterar o link para voltar à página de índice, se sua página de índice for <tt>index.jsp</tt>.</p>
</li>
            </ol>
            <h3 id="stylesheet">Anexando uma Folha de Estilo</h3>

            <p>Nesse estágio, você concluiu todo o código necessário para a funcionalidade da aplicação. Para ver os resultados dos seus esforços, tente executar a aplicação agora.</p>

            <ol>
                <li>Na janela Projetos, clique com o botão direito do mouse no nó do projeto e selecione Executar. O projeto será recompilado e implantado no servidor de destino. Seu browser será aberto e você poderá ver a página de índice. <br> <img alt="Aplicação exibida no browser sem folha de estilo" class="margin-around b-all" src="../../../images_www/articles/73/web/ajax-intro/no-css.png" title="Implantação com sucesso sem folha de estilo"></li>
            </ol>

            <p>Para adicionar uma folha de estilo à sua aplicação, basta criar um arquivo <code>.css</code> e vinculá-lo a partir da(s) página(s) da sua apresentação. Quando você trabalha em arquivos <code>.css</code>, o IDE oferece o suporte para autocompletar código. assim como as seguintes janelas, para ajudá-lo a gerar e editar regras de folhas de estilo:</p>

            <ul>
                <li><strong>Janela Estilos de CSS.</strong> A janela Estilos de CSS permite editar as declarações de regras de elementos e seletores HTML em um arquivo CSS.</li>
                <li><strong>Caixa de diálogo Criar Regras CSS.</strong> A caixa de diálogo Criar Regras de CSS permite criar novas regras em uma folha de estilos de CSS. </li>
                <li><strong>Caixa de diálogo Adicionar Propriedade de CSS.</strong>A caixa de diálogo Adicionar Propriedade de CSS permite adicionar declarações a uma regra de CSS em uma folha de estilos, adicionando propriedades e valores. </li>
            </ul>

            <p>Para adicionar uma folha de estilo à sua aplicação execute as etapas a seguir.</p>

            <ol>
                <li>Na janela Projetos, clique com o botão direito do mouse no nó Páginas Web e selecione Novo > Folha de Estilo em Cascata (caso Folha de Estilo em Cascata não esteja listado, selecione Outro. Em seguida, escolha Folha de Estilo em Cascata na categoria Web no assistente Novo arquivo.)</li>

                <li>No campo de texto Nome do Arquivo CSS, digite <strong><code>stylesheet</code></strong>. Clique em Finalizar. 
                    <p>O movo arquivo será criado e aberto no editor.</p></li>

                <li>Digite as seguintes regras em <code>stylesheet.css</code>, no editor. Você pode utilizar o suporte à funcionalidade autocompletar código do IDE pressionando Ctrl-Espaço nos pontos em que desejar acionar sugestões.

<pre class="examplecode">
body {
   font-family: Verdana, Arial, sans-serif;
   font-size: smaller;
   padding: 50px;
   color: #555;
   width: 650px;
}

h1 {
   letter-spacing: 6px;
   font-size: 1.6em;
   color: #be7429;
   font-weight: bold;
}

h2 {
   text-align: left;
   letter-spacing: 6px;
   font-size: 1.4em;
   color: #be7429;
   font-weight: normal;
   width: 450px;
}

table {
   width: 550px;
   padding: 10px;
   background-color: #c5e7e0;
}

td {
   padding: 10px;
}

a {
  color: #be7429;
  text-decoration: none;
}

a:hover {
  text-decoration: underline;
}

.popupBox {
  position: absolute;
  top: 170px;
  left: 140px;
}

.popupCell {
   background-color: #fffafa;
}

.popupCell:hover {
  background-color: #f5ebe9;
}

.popupItem {
  color: #333;
  text-decoration: none;
  font-size: 1.2em;
}</pre>

                </li>
                <li>Abra a janela Estilos de CSS escolhendo Janela > Web > Estilos CSS. <br> <img alt="Janela Estilos de CSS exibindo as propriedades de regra h1" class="margin-around b-all" src="../../../images_www/articles/73/web/ajax-intro/css-styles-window.png" title="Janela Estilos de CSS exibindo as propriedades de regra h1">

                <p>Você pode usar a janela Estilos de CSS para exibir rapidamente as propriedades e editar as regras de estilo. Quando você seleciona uma regra no painel superior da janela Estilo de CSS, pode ver as propriedades da regra no painel inferior. Você pode adicionar uma Regra de CSS à folha de estilos clicando no ícone Editar Regras de CSS (<img alt="Ícone Nova Propriedade de CSS" src="../../../images_www/articles/73/web/ajax-intro/newcssrule.png" title="Ícone Nova Propriedade de CSS">) na barra de ferramentas do painel superior. Você pode modificar as regras no painel inferior, editando a folha de propriedades, e adicionar propriedades clicando no ícone Adicionar Propriedade (<img alt="Ícone Nova Propriedade de CSS" src="../../../images_www/articles/73/web/ajax-intro/newcssproperty.png" title="Ícone Nova Propriedade de CSS">) na barra de ferramentas do painel inferior.
                </li>

                <li>Alterne para a página no Editor de Código-fonte, e adicione uma referência à folha de estilo entre as tags <code>&lt;head></code>.

<pre class="examplecode">
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;stylesheet.css&quot;&gt;</pre></li>


                <li>Adicione a classe <code>popupBox</code> que está definida na folha de estilo ao elemento <code>complete-table</code> (alterações em <strong>negrito</strong>).

<pre class="examplecode">
&lt;tr&gt;
    &lt;td id=&quot;auto-row&quot; colspan=&quot;2&quot;&gt;
        &lt;table id=&quot;complete-table&quot; <strong>class=&quot;popupBox&quot;</strong> /&gt;
    &lt;/td&gt;
&lt;/tr&gt;</pre>
                    <p>É possível usar o recurso autocompletar código no editor para ajudá-lo a selecionar a regra de estilo que você quer aplicar ao seletor.</p>
                    <img alt="Recurso autocompletar código no editor" class="margin-around b-all" src="../../../images_www/articles/73/web/ajax-intro/css-completion.png" title="Recurso autocompletar código no editor">

                    <p>Como indicado em <code>stylesheet.css</code>, esta regra posiciona o elemento <code>complete-table</code> para que seja exibido um pouco à direita de seu elemento pai.</p></li>
            </ol>
            <p>Quando você salva a página de índice, a aplicação é automaticamente reimplantada no servidor. Se a página ainda estiver aberta no browser, você poderá recarregá-la para ver se ela agora é renderizada de acordo com as regras da folha de estilos de CSS. </p>
        </div>


        <br>
        <h2 id="run">Executando o Projeto</h2>

        <p>Quando você executar a aplicação novamente, ela será exibida no browser utilizando a folha de estilo que acabou de ser criada. Toda vez que você digita um caractere, uma solicitação assíncrona é enviada para o servidor e retornada com dados XML que foram preparados por <code>AutoCompleteServlet</code>. Conforme você digita mais caracteres, o número de nomes de criador diminui para refletir a nova lista de correspondências.</p>


        <h3 id="httpMonitor">Utilizando o Monitor do Servidor HTTP</h3>

        <p>Você pode utilizar o monitor do Servidor HTTP do IDE para verificar a comunicação HTTP que acontece quando as solicitações e as respostas são passadas entre o cliente e o servidor. O Monitor do Servidor HTTP exibe informações como cabeçalhos do cliente e do servidor, propriedades da sessão, detalhes do cookie, assim como parâmetros de solicitação.</p>

        <p>Antes de começar a utilizar o monitor HTTP, você deve primeiro ativá-lo no servidor que está utilizando.</p>

        <ol>
            <li>Abra a janela Servidores, selecionando Ferramentas > Servidores no menu principal.</li>

            <li>No painel esquerdo, selecione o servidor que está usando com o projeto. Em seguida, no painel direito, selecione a opção Ativar Monitor HTTP.
                <p class="notes"><strong>Observação:</strong> essa opção é exibida na guia Comum do GlassFish Server. Para Tomcat, ela reside na guia Conexão.</p></li>
            <li>Clique em Fechar.</li>
        </ol>

        <p class="alert">Se o servidor já estiver em execução, você precisará reiniciá-lo para permitir que as alterações tenham efeito. Você pode reiniciar o servidor, abrindo a janela Serviços (Janela > Serviços) e, em seguida, clicando com o botão direito do mouse no servidor embaixo do nó Servidores e selecionando Reiniciar.</p>

        <p>Agora, quando você executar a aplicação novamente, o monitor HTTP será aberto na região inferior do IDE. Você pode selecionar um registro no painel esquerdo e, em seguida, clicar nas guias na janela principal para exibir as informações sobre cada solicitação que é feita.</p>

        <div class="indent">
            <img alt="O monitor do Servidor HTTP é exibido no IDE" class="margin-around b-all" src="../../../images_www/articles/73/web/ajax-intro/http-monitor.png" style="width:688px" title="O monitor do Servidor HTTP é exibido no IDE"></div>

        <p>Você pode verificar os dados XML que são enviados do servidor como resultado da solicitação assíncrona feita quando um usuário indica um caractere no campo autocompletar.</p>

        <ol>
            <li>Na view em árvore do lado esquerdo do monitor HTTP, clique com o botão direito do mouse no registro de uma solicitação e selecione Reexecutar.</li>
        </ol>

        <p>A resposta será gerada em seu browser. Nesse caso, como a resposta consiste em dados XML, o browser exibirá os dados em seu visualizador XML nativo.</p>

        <div class="indent">
            <img alt="O monitor do Servidor HTTP é exibido no IDE" class="margin-around b-all" src="../../../images_www/articles/73/web/ajax-intro/xml-data.png" style="width:688px" title="O monitor do Servidor HTTP é exibido no IDE"></div>


        <h3 id="conclusion">Conclusão</h3>

        <p>Isso conclui a Introdução ao Ajax. Esperamos que agora você saiba que o Ajax está simplesmente trocando informações por HTTP em segundo plano, e atualizando essa página dinamicamente, com base nos resultados.</p>

        <p>Você talvez note que a aplicação que construiu tem vários problemas, como, por exemplo, nada acontece quando o nome de um criador é selecionado na caixa autocompletar! Você é bem-vindo a <a href="https://netbeans.org/projects/samples/downloads/download/Samples%252FJavaScript%252FMyAjaxApp.zip">fazer download do projeto de solução</a> para ver como isso pode ser implementado utilizando tecnologia JSP. Além disso, talvez queira investigar a validação do lado do servidor que impede que um usuário solicite um nome que não existe no armazenamento de dados. Você pode aprender mais sobre essas técnicas e tecnologias, seguindo outros tutoriais na <a href="../../trails/java-ee.html">Trilha de Aprendizado do Java Web e do Java EE</a>.</p>

        <div class="feedback-box">
            <a href="/about/contact_form.html?to=3&amp;subject=Feedback:%20Introduction%20to%20Ajax%20(Java)">Envie-nos Seu Feedback</a></div>

        <br style="clear:both;">


        <h2 id="seeAlso">Consulte Também</h2>

        <p>Para obter mais informações sobre a tecnologia Ajax e Java em <a href="https://netbeans.org/">netbeans.org</a>, consulte os seguintes recursos:</p>

        <ul>
            <li><a href="../../docs/web/js-toolkits-jquery.html">Usando jQuery para Melhorar a Aparência e o Uso de uma Página Web</a>. Demonstra como integrar o núcleo jQuery e bibliotecas UI em um projeto NetBeans.</li>

            <li><a href="../../docs/web/js-toolkits-dojo.html">Conectando um Dojo Tree a uma ArrayList utilizando JSON</a>. Com base em um JavaOne Hands-On Lab, esse documento mostra como implementar um widget Dojo Tree em uma página web e permitir que o servidor responda a solicitações Tree no formato JSON.</li>

            	<li><a href="http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG2272">Criando Arquivos JavaScript</a> em <i>Desenvolvendo Aplicações com o NetBeans IDE</i></li>

            <li><a href="quickstart-webapps-wicket.html">Introdução ao Wicket Web Framework</a>. Uma introdução para criar componentes reutilizáveis e aplicá-los a uma aplicação Web utilizando o framework Wicket.</li>

            
            
        </ul>

    </body>
</html>
