Applets - IC/UFF

Propaganda
Applets
Carlos Bazilio
Depto de Ciência e Tecnologia
Pólo Universitário de Rio das Ostras
Universidade Federal Fluminense
Tópicos Abordados
●
Paradigma de Requisições Web
●
Conceito de Applet
●
Implementação de um Applet
●
Exemplos de Applets
●
Limitações
●
Aspectos de Segurança
Paradigma 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
Paradigma 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)
Motivaçã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
Conceito 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):
<html>
<head>
<title>HTML Básico</title>
</head>
<body>
Olá mundo !!!
</body>
</html>
Conceito de Applet
●
●
Exemplo (HTML incluindo uma imagem):
O arquivo .html deve estar no mesmo diretório que a
imagem, neste exemplo
<html>
<head>
<title>HTML com imagem incluída</title>
</head>
<body>
<img src="maca.jpg"
title="maca“/>
</body>
</html>
Conceito de Applet
●
Exemplo (HTML incluindo um applet):
<html>
<head>
<title>HTML incluindo um applet</title>
</head>
<body>
<applet code=aulas.MeuApplet
width=800 height=600/>
</body>
</html>
Conceito 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.
<html>
<head>
<title>HTML incluindo um applet</title>
</head>
<body>
<applet code=aulas.MeuApplet width=800
height=600/>
</body>
</html>
Conceito de Applet
<html>
<head>
<title>HTML incluindo um applet</title>
</head>
<body>
<applet code=aulas.MeuApplet width=800
height=600/>
</body>
</html>
●
●
A tag <applet> 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)
Execuçã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”
Execuçã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 <applet> são ignoradas e, o que está dentro
delas, é exibido
Com isso, este se torna um local adequado para
colocar avisos de mal funcionamento
Execução do Applet
<html>
<head>
<title>HTML incluindo um applet</title>
</head>
<body>
<applet code=aulas.MeuApplet width=800 height=600>
Neste local deveria aparecer um applet !!
</applet>
</body>
</html>
Implementaçã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.awt.Container
java.awt.Panel
java.applet.Applet
javax.swing.JApplet
●
http://java.sun.com/j2se/1.4.2/docs/api/java/applet/Applet.html
Implementação de um Applet
java.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
Implementaçã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

Implementaçã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))
Ciclo de Vida de um Applet
init()
●
●
start()
stop()
destroy()
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.
Exemplo 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);
}
}
Exemplo de Applet
Saída no Navegador
Exemplo 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);
}
}
Exemplo de Applet (2)
●
HTML com a mensagem passada por parâmetro
<html>
<head>
<title>HTML incluindo um applet</title>
</head>
<body>
<applet code=aulas.AppletSimples width=200
height=150>
<param name="Mensagem" value="Olá por
Parâmetro!">
</applet>
</body>
</html>
Exemplo de Applet (2)
Saída no Navegador
●
Atualize através do navegador para ver as cores se
alternando
Exemplo 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("Mensagem"));
this.add(l);
Button bt = new Button();
bt.setLabel("Teste");
bt.addActionListener(this);
this.add(bt);
}
public void actionPerformed(ActionEvent arg0) {
Color color=new Color ((int)(Math.random()*10000000));
this.setBackground(color);
}
}
Exemplo de Applet (3)
Saída no Navegador
●
Clique no botão para alternar a cor de fundo do painel
Testando 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
Testando 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 > Error Console”

Na caixa de texto digite “java” e tecle <Enter> ou pressione
botão “Evaluate”

Daí, basta clicar na tecla “x”
Transformaçã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
Limitaçõ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
Contexto 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
Contexto 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!)
Distribuiçã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
JAR – 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
JAR – 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/technotes/guides/jar
/jar.html
Distribuiçã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
Exercício
●
Exiba a calculadora criada como um applet
Download