// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Integrando um Applet em uma Aplicação Web
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Integrando um Applet em uma Aplicação Web - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Integrando um Applet em uma Aplicação Web

Um applet é um programa escrito na linguagem de programação Java que pode ser incluído em uma página HTML, de forma semelhante a que uma imagem é incluída em uma página. A aplicação que você constrói neste tutorial mostra como construir e implantar applets no IDE.

*Observação: *embora não haja modelos de projeto que sejam especificamente destinados a criar applets no IDE, você pode facilmente desenvolvê-los em um projeto Java e encapsulá-los em um projeto Web, como mostrado neste tutorial.


image::images/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"]


*Para acompanhar este tutorial, você precisa dos recursos e softwares a seguir.*

|===
|Software ou Recurso |Versão Necessária 

|link:https://netbeans.org/downloads/index.html[+NetBeans IDE+] |Versão Java 7.2, 7.3, 7.4, 8.0 

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+JDK (Java Development Kit)+] |versão 7 ou 8 

|GlassFish Server Open Source Edition 
_ou_ 
Contêiner do servlet Tomcat |3.x ou 4.x
_ _ 
versão 7.x ou 8.x 
|===


== Criando ou Importando um Arquivo de Código Fonte de um Applet

Nesta seção, você criará seu primeiro applet. Possivelmente, você já tem um applet e, nesse caso, você pode usar as instruções abaixo para importá-lo para o IDE.


=== Crie o projeto Java do zero ou a partir de códigos-fonte existentes

1. Selecione Arquivo > Novo Projeto (Ctrl-Shift-N). Em Categorias, selecione Java.
2. Selecione uma das seguintes opções:
* Se você estiver criando um novo código-fonte de applet, selecione Biblioteca de Classe Java em Projetos. Clique em Próximo.
* Se você quiser importar um arquivo de código-fonte de applet, selecione Projeto Java com Códigos-Fonte existentes. Clique em Próximo. Especifique a localização do arquivo na caixa de texto Pasta de Pacotes de Códigos-Fonte.


. Em Nome do Projeto, Digite  ``HelloApplet`` . Altere o Local do Projeto para qualquer pasta do computador.


. Clique em Finalizar. Se você tiver importado um arquivo de código-fonte do applet, <<runanddebug,execute-o>>.


=== Crie o arquivo de código-fonte do applet

1. Clique com o botão direito do mouse no projeto HelloApplet e selecione Propriedades para abrir a janela Propriedades.
2. Selecione o Formato de Código-Fonte / Binário desejado para o projeto e clique em OK.

*Observação:* Por exemplo, se selecionar JDK 6, o applet poderá não ser executado em máquinas que tenham uma versão mais antiga do plug-in JRE ou do browser Java.



. Clique com o botão direito do mouse no nó do projeto HelloApplet na janela Projetos e selecione Novo > Outro (Ctrl-N).


. Em Categorias, selecione Java. Em Tipos de Arquivos, selecione Applet.

Como alternativa, se você quiser criar visualmente o applet, selecione Forms de GUI do Swing > Form JApplet.

Clique em Próximo.



. Em Nome da Classe, Digite  ``MyApplet`` . Em Pacote, digite  ``org.me.hello`` .


. Clique em Finalizar.

O IDE criará o arquivo de código-fonte do applet no pacote especificado. O arquivo de código-fonte do applet será aberto no editor de Código-fonte.



. Defina a classe do seu applet, copiando e colando o seguinte código sobre o código default existente:

[source,java]
----

     package org.me.hello;

     import java.applet.Applet;
     import java.awt.Graphics;

     public class MyApplet extends Applet {
         @Override
         public void paint(Graphics g) {
             g.drawString("Hello applet!", 50, 25);
         }
     }
                    
----

Como alternativa, se você estiver criando um Form de Applet, use o documento link:../java/quickstart-gui.html[+Criando uma GUI Swing no NetBeans IDE+] para criar algo como o seguinte:

image::images/movie-magic-quiz-design.png[]

Para obter informações detalhadas sobre como escrever applets, consulte a seção link:http://download.oracle.com/javase/tutorial/deployment/applet/index.html[+Applets+] do Tutorial do Java^TM^.


== Executando um Arquivo de Código-Fonte do Applet

O applet que você criou pode ser executado a partir do IDE. Esta seção mostra como fazê-lo.


=== Construa e execute o arquivo de código-fonte do applet

Clique com o botão direito do mouse no nó do arquivo MyApplet.java na janela Projetos e selecione Executar Arquivo no menu de contexto. O arquivo acionador  ``MyApplet.html`` , com o applet incorporado, é criado na pasta  ``build`` , que você poderá ver se alternae para a janela Arquivos (Ctrl-2):

image::images/built-project-files.png[]

O applet é acionado no Visualizador de Applets:

image::images/appletviewer.png[]

Os forms do applet também são exibidos no Visualizador de Applets:

image::images/movie-magic-quiz.png[]


== Incorporando um Applet em uma Aplicação Web

Seu applet está concluído. Agora você precisa torná-lo disponível para o usuário. Para fazê-lo, crie uma aplicação Web, coloque o JAR do applet em seu classpath, e adicione uma tag do applet ao arquivo HTML da aplicação Web.


=== Criar o projeto Web

1. Escolha Arquivo > Novo Projeto.
2. Na categoria Java Web, selecione Aplicação Web. Clique em Próximo.
3. Em Nome do Projeto, digite  ``HelloWebApplet`` .
4. Altere o Local do Projeto para qualquer pasta do computador. Clique em Próximo.
5. Selecione o servidor de destino. Clique em Finalizar.


=== Adicione o arquivo JAR do applet ao projeto Web

Quando quiser incluir um arquivo JAR do applet em um projeto Web, você poderá fazê-lo adicionando o projeto Java que contém o arquivo JAR, ou adicionando o próprio arquivo JAR. Embora a escolha seja sua, observe que quando adiciona o projeto Java ao projeto Web, você permite que o IDE construa o applet sempre que você constrói a aplicação Web. Portanto, quando você modifica o applet no projeto Java, o IDE constrói uma nova versão do applet sempre que o projeto Web é construído. Por outro lado, se o arquivo JAR do applet não estiver em um projeto do NetBeans IDE, o código-fonte do applet não será recriado quando você construir o projeto web.

*Observação:* neste ponto, se você estiver usando o projeto  ``HelloApplet``  no IDE, não há um arquivo  ``HelloApplet.jar`` . Isso é normal. O arquivo  ``HelloApplet.jar``  será construído quando você construir o projeto  ``HelloWebApplet`` .

1. Na janela Projetos, clique com o botão direito do mouse no nó do projeto HelloWebApplet e selecione Propriedades no menu contextual.
2. Selecione a categoria Encapsulamento.
3. Selecione uma das seguintes opções:
* Se o applet estiver em um projeto Java, clique em Adicionar Projeto e localize a pasta que contém o projeto Java. Clique em Adicionar Jar/Pasta.

*Observação.* Os projetos do IDE são marcados pelo ícone de projeto do NetBeans IDE.

* Se estiver usando um arquivo JAR do applet que não está no projeto IDE, clique em Adicionar Arquivo/Pasta e localize a pasta que contém o arquivo JAR. Clique em Escolher.


. Confirme se o JAR que contém o arquivo do código-fonte do applet está listado na tabela na janela Propriedades do Projeto. Clique em OK.

Por default, o arquivo JAR do applet será copiado para a biblioteca da página Web da aplicação Web, que é a pasta  ``build/web `` . A pasta  ``build/web `` é o diretório-raiz da aplicação e é exibido como " ``/`` " no Caminho na coluna WAR da tabela. Você pode modificar a localização do applet no WAR digitando uma nova localização para o applet no Caminho na coluna WAR.



. Clique em Fechar para fechar a janela Propriedades do Projeto.

Quando você constrói o projeto  ``HelloWebApplet``  escolhendo Executar > Construir Projeto (HelloWebApplet) no menu principal do IDE, o arquivo JAR do applet é gerado no projeto  ``HelloApplet``  original e é encapsulado no arquivo WAR do projeto  ``HelloWebApplet`` . Ele também é adicionado à pasta  ``build/web`` . Você pode seguir este processo na janela de Saída e ver os resultados na janela Arquivos.

[.feature]
--
image:images/helloapplet-jar-in-files-small.png[role="left", link="images/helloapplet-jar-in-files.png"]
--


=== Crie e execute o arquivo JSP ou o arquivo HTML

1. Selecione uma das seguintes opções:
* Se você quiser incorporar o applet em um arquivo JSP, clique duas vezes no arquivo  ``index.jsp``  default na janela Projetos. Esse arquivo é criado pelo IDE quando você cria um projeto Web. Ele será aberto no Editor de Código-fonte.
* Se você quiser incorporar o applet em um arquivo HTML, clique com o botão direito do mouse no nó do projeto HelloWebApplet e selecione Novo > Outro a partir do menu de contexto. Em Categorias, selecione Web. Em Tipos de Arquivos, selecione HTML. Clique em Próximo. Forneça um nome para seu arquivo HTML, selecione a pasta Web como sua localização e clique em Finalizar.


. Incorpore o applet no arquivo, adicionando a seguinte tag de applet em qualquer local entre as tags  ``<body>``  ``</body>``  do arquivo:

* Em um arquivo HTML: [examplecode]# ``<applet code="org.me.hello.MyApplet" archive="HelloApplet.jar"></applet>``  #
* Em um arquivo JSP: [examplecode]# ``<applet code="org.me.hello.MyApplet" archive="HelloApplet.jar" width="600" height="480"/>`` #

*Observações.*

* Para este tutorial você pode ignorar o glifo de dica na margem esquerda se estiver adicionando o código do applet em um arquivo HTML.
*  ``org.me.hello.MyApplet``  é o nome de classe completo para seu applet.
*  ``HelloApplet.jar``  é o arquivo JAR que contém o applet.


. Clique com o botão direito do mouse no nó JSP ou no nó HTML na janela Projetos e selecione Executar Arquivo no menu de contexto.

O servidor implanta o arquivo JSP ou o arquivo HTML no browser default do IDE.

Você deve ver algo semelhante à ilustração abaixo (após permitir a execução da aplicação, clicando em Executar na caixa de diálogo Advertência de Segurança).

[.feature]
--
image:images/appletinbrowser-small.png[role="left", link="images/appletinbrowser.png"]
--

Para forms do applet, será preciso ver algo semelhante ao seguinte:

image::images/movie-magic-quiz-html.png[]


link:/about/contact_form.html?to=3&subject=Feedback:%20Introduction%20to%20Developing%20Applets[+Enviar Feedback neste Tutorial+]


