Title: Applets
1Applets
- Carlos Bazilio
- Depto de Ciência e Tecnologia
- Pólo Universitário de Rio das Ostras
- Universidade Federal Fluminense
2Tópicos Abordados
- Paradigma de Requisições Web
- Conceito de Applet
- Implementação de um Applet
- Exemplos de Applets
- Limitações
- Aspectos de Segurança
3Paradigma de Requisições Web
- Cliente envia requisição
- para um Servidor
- Servidor responde
- requisição de um Cliente
- Formatos de resposta
- Dados estáticos
- Dados processados no Servidor
- Dados a serem processados no Cliente
4Paradigma de Requisições Web Formatos de Resposta
- Dados estáticos
- HTML básico, estático
- Dados processados no
- Servidor
- Programas Java que rodam
- no servidor e constróem
- respostas para requisições (servlets)
- Dados processados no Cliente
- Programas Java que rodam nos clientes (applets)
5Motivação Inicial de Java
- Java foi pensada, inicialmente, como uma
linguagem que permitiria a execução de programas
sem instalação - Estes programas (bytecodes) seriam baixados da
internet e executados na máquina cliente - Ou seja, para tal, a máquina cliente necessitaria
de acesso à internet e da máquina virtual (JVM)
para execução dos bytecodes - Applets são uma forma de realização deste objetivo
6Conceito de Applet
- Um applet é um programa Java que pode ser
incluído em uma página HTML da mesma forma que
uma imagem ou algum outro recurso. - Exemplo (HTML básico)
lthtmlgt ltheadgt lttitlegtHTML Básicolt/titlegt
lt/headgt ltbodygt Olá mundo !!! lt/bodygt lt/htmlgt
7Conceito de Applet
- Exemplo (HTML incluindo uma imagem)
- O arquivo .html deve estar no mesmo diretório que
a imagem, neste exemplo
lthtmlgt ltheadgt lttitlegtHTML com imagem
incluídalt/titlegt lt/headgt ltbodygt ltimg
src"maca.jpg" title"maca/gt lt/bodygt lt/htmlgt
8Conceito de Applet
- Exemplo (HTML incluindo um applet)
lthtmlgt ltheadgt lttitlegtHTML incluindo um
appletlt/titlegt lt/headgt ltbodygt ltapplet
codeaulas.MeuApplet width800 height600/gt
lt/bodygt lt/htmlgt
9Conceito de Applet
- Apesar do HTML com a inclusão da imagem ter
obtido o mesmo resultado do applet, o resultado
do applet foi obtido pela classe
aulas.MeuApplet. - Observe que não fazemos referência explícita ao
arquivo maca.jpg, como no exemplo da imagem.
lthtmlgt ltheadgt lttitlegtHTML incluindo um
appletlt/titlegt lt/headgt ltbodygt ltapplet
codeaulas.MeuApplet width800 height600/gt
lt/bodygt lt/htmlgt
10Conceito de Applet
lthtmlgt ltheadgt lttitlegtHTML incluindo um
appletlt/titlegt lt/headgt ltbodygt ltapplet
codeaulas.MeuApplet width800 height600/gt
lt/bodygt lt/htmlgt
- A tag ltappletgt possui os atributos code (classe
que implementa o applet), width (largura do
applet) e height (altura do applet), os quais são
obrigatórios - Outros atributos align (alinha o applet dentro
da página web) name (para ser referenciado
dentro da página html) codebase (diretório base
para referenciar um applet) archive (o applet é
distribuído como um JAR)
11Execução do Applet
- Para execução do applet, crie um arquivo html com
o conteúdo apresentado - Coloque o código java compilado (.class) no mesmo
diretório do arquivo html - Caso o código java seja definido dentro de um
pacote (package), inclua o código compilado na
hierarquia de diretórios equivalente ao pacote - Por exemplo, se o código java está definido no
pacote package cursojava.applets, e o html
está no diretório c\htmls, os .class deverão
estar em c\htmls\cursojava\applets
12Execução do Applet
- Inicialmente, os browsers disponibilizavam
internamente pequenos interpretadores para Java - A tecnologia Java Plug-in estende a
funcionalidade de um browser, permitindo que
applets e outros recursos sejam executados
utilizando a JRE da máquina - Quando um navegador não reconhece um applet, as
tags ltappletgt são ignoradas e, o que está dentro
delas, é exibido - Com isso, este se torna um local adequado para
colocar avisos de mal funcionamento
13Execução do Applet
lthtmlgt ltheadgt lttitlegtHTML incluindo um
appletlt/titlegt lt/headgt ltbodygt ltapplet
codeaulas.MeuApplet width800 height600gt
Neste local deveria aparecer um applet !!
lt/appletgt lt/bodygt lt/htmlgt
14Implementação de um Applet
- Para implementar um applet, devemos estender uma
das 2 últimas classes da hierarquia abaixo
java.lang.Object java.awt.Component java.a
wt.Container java.awt.Panel java.a
pplet.Applet javax.swing.JApplet
- http//java.sun.com/j2se/1.4.2/docs/api/java/apple
t/Applet.html
15Implementação de um Appletjava.applet.Applet
- Sub-classe de Panel, do pacote gráfico awt
- É, essencialmente, um painel inserido em uma
página HTML, num navegador - Embora restrito em algumas funcionalidades (por
uma questão de segurança), pode interagir com o
usuário como qualquer aplicação gráfica awt
16Implementação de um Applet Alguns métodos da
classe java.applet.Applet
- void init() / void destroy()
- Métodos duais que inicializam/destróem um applet
- O método init() é chamado quando uma página com
uma applet é carregada - O método destroy() é chamado quando o navegador é
fechado - void start() / void stop()
- Métodos acionados quando um applet deve ser
executado/interrompido - O método start() é chamado quando uma página que
contém um applet é aberta (imediatamente após o
init() e nas cargas seguintes da página) - O método stop() é chamado quando o usuário deixa
a página que possui o applet
17Implementação de um Applet Alguns métodos da
classe java.applet.Applet
- URL getCodeBase()
- Retorna a URL base do diretório de onde o applet
foi executado - String getParameter(String name)
- Recupera o valor de um parâmetro passado no HTML
- void play(URL url)
- Toca um arquivo de áudio referenciado por um url
absolutovoid - play(URL url, String file)
- Toca um arquivo de áudio file referenciado de
forma relativa à url - Image getImage(URL url, String name)
- Retorna a imagem especificada (pode ser exibida
com o método paint(Graphics g))
18Ciclo de Vida de um Applet
- init() e destroy() são usualmente utilizados para
alocação e desalocação de recursos,
respectivamente, como arquivos, memória, etc. - start() e stop() são acionados quando um applet é
exibido e ocultado no navegador, respectivamente.
19Exemplo de Applet
- Neste primeiro exemplo, temos a exibição de um
texto no navegador
import java.awt. import java.applet. public
class AppletSimples extends Applet public void
init() String msg "Olá Mundo !!!" Label
l new Label(msg) l.setAlignment(Label.CENTER)
setLayout(new BorderLayout()) add(l,
BorderLayout.CENTER)
20Exemplo de AppletSaída no Navegador
21Exemplo de Applet (2)
- Podemos modificar o primeiro exemplo alterando de
forma aleatória a cor de fundo do painel e
passando a mensagem por parâmetro
import java.awt. import java.applet. public
class AppletSimples extends Applet public void
init() int c (int)(Math.random()
1000000) this.setBackground(new
Color(c)) Label l new Label(this.getParameter
("Texto")) l.setAlignment(Label.CENTER) this
.setLayout(new BorderLayout()) this.add(l,
BorderLayout.CENTER)
22Exemplo de Applet (2)
- HTML com a mensagem passada por parâmetro
lthtmlgt ltheadgt lttitlegtHTML incluindo um
appletlt/titlegt lt/headgt ltbodygt ltapplet
codeaulas.AppletSimples width200 height150gt
ltparam name"Mensagem" value"Olá por
Parâmetro!"gt lt/appletgt lt/bodygt lt/htmlgt
23Exemplo de Applet (2)Saída no Navegador
- Atualize através do navegador para ver as cores
se alternando
24Exemplo de Applet (3)
- Neste exemplo, adicionamos um botão e fazemos a
própria applet tratar os eventos do botão
public class AppletSimples extends Applet
implements ActionListener public void init()
Label l new Label(this.getParameter("Mensage
m")) this.add(l) Button bt new
Button() bt.setLabel("Teste") bt.addActionLi
stener(this) this.add(bt) public void
actionPerformed(ActionEvent arg0) Color
colornew Color ((int)(Math.random()10000000))
this.setBackground(color)
25Exemplo de Applet (3)Saída no Navegador
- Clique no botão para alternar a cor de fundo do
painel
26Testando um Applet
- Do Eclipse
- Selecione o arquivo que contém o applet
- Clique com o botão direito e, no item Run As
aparecerá a opção Java Applet - Da linha de comando
- Na instalação do JDK há um aplicativo chamado
appletviewer, o qual recebe um arquivo html como
parâmetro (página do applet) - Do browser
- Basta abrir o arquivo html que contém o applet
27Testando um Applet
- Há uma cache para carga de classes applet
- Esta cache costuma dificultar a atualização de
versões de uma applet em memória - A primeira alternativa é fechar o browser
- A segunda é disparar uma console do plug-in java
e realizar o esvaziamento da cache manualmente - No Firefox, selecione menu Tools gt Error
Console - Na caixa de texto digite java e tecle ltEntergt
ou pressione botão Evaluate - Daí, basta clicar na tecla x
28Transformação de Aplicações Swing/Awt em Applets
- O método main é substituído pelo método init do
applet - O frame não precisa ser criado, já que o applet é
exibido no navegador - Copie o conteúdo do construtor da janela do frame
para dentro do método init - Alguns métodos deixam de ter importância quando
são utilizados como applets, pois há comandos
html específicos - setTitle, setSize, setDefaultCloseOperation,
setVisible
29Limitações
- Applets que são executadas remotamente têm
comportamento restringido na máquina cliente - Algumas possibilidades exibição de imagens,
reprodução de som, capturar eventos de mouse e
teclado, enviar entrada do usuário de volta para
o host (máquina que hospeda o applet), etc - Estas restrições visam garantir segurança na
execução dessas aplicações - Há um gerenciador de segurança na máquina virtual
java que monitora a execução dessas aplicações - Compatibilidade entre browsers
- Melhorou com o surgimento dos plug-ins
30Contexto dos Applets
- Ambiente onde o applet executa (usualmente o
navegador ou um visualizador appletviewer) - Eventualmente, pode ser desejável que um applet
comande seu ambiente, por exemplo, pedindo a
exibição de uma nova página - Ou seja, é interessante que o applet se comunique
com o navegador - Para tal, a classe Applet possui o método
AppletContext getAppletContext() - A interface AppletContext possui vários métodos
que podem ser úteis a um applet
31Contexto dos Applets
- Alguns métodos da interface AppletContext
- Applet getApplet (String name) Retorna uma
referência para um applet com atributo name na
mesma página - void showDocument (URL url, String target)
Requisita ao browser que abra a url fornecida com
o parâmetro target (por exemplo, target_self
abre na própria página, enquanto target_blank
abre numa página nova - void showStatus(String status) Exibe a string
fornecida na barra de status do browser (atenção
pois pode haver concorrência com o browser!)
32Distribuição de Applets e Aplicativos Java
- Applets e Aplicativos Java podem ser distribuídos
de forma concisa através de um arquivo JAR - Um arquivo JAR é um arquivo compactado (formato
zip) que possui uma estrutura especial, a qual é
considerada pela JVM - Um arquivo JAR é constituído minimamente de
- uma hierarquia de pacotes que compõe a aplicação
(contem os arquivos .class) - um diretório chamado META-INF, o qual contém o
arquivo de manifesto MANIFEST.MF
33JAR Arquivo de Manifesto
- Um arquivo de manifesto simplesmente descreverá o
conteúdo do JAR - A primeira linha normalmente contém a versão do
arquivo de manifesto - Manifest-Version 1.0
- Este arquivo é dividido em seções, as quais são
separadas por linhas em branco A primeira seção
é a principal e define o que vale globalmente - Quando o JAR é gerado para ser um executável do
aplicativo, este precisa conter a classe que
inicia a aplicação - Main-Class br.com.siriusnet.cursojava.Navegador
34JAR Arquivo de Manifesto
- Outro atributo importante é o Class-Path
- Especifica urls de bibliotecas e/ou extensões
que uma aplicação necessita - Class-Path MyUtils.jar
- Documentação http//java.sun.com/javase/6/docs/te
chnotes/guides/jar/jar.html
35Distribuição de Aplicativos Java Lacre (Seal)
- Caso nossa aplicação possua membros (campos e
métodos) públicos a um pacote, a declaração de
uma nova classe com mesmo nome de pacote dá
acesso a esse conteúdo público - Para evitar essa situação, podemos lacrar nosso
pacote de forma que nenhuma classe possa ser
adicionada a ela - No arquivo manifesto, um pacote é lacrado com o
atributo - Sealed true
- No Eclipse, na geração do JAR, a caixa de diálogo
JAR Manifest Specification contém recursos para
o lacre
36Exercício
- Exiba a calculadora criada como um applet