Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras...

36
Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense

Transcript of Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras...

Page 1: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Applets

Carlos Bazilio

Depto de Ciência e TecnologiaPólo Universitário de Rio das OstrasUniversidade Federal Fluminense

Page 2: 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

Page 3: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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

Page 4: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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)

Page 5: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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

Page 6: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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>

Page 7: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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>

Page 8: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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>

Page 9: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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>

Page 10: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Conceito de Applet

● 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)

<html> <head> <title>HTML incluindo um applet</title> </head> <body> <applet code=aulas.MeuApplet width=800 height=600/> </body></html>

Page 11: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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”

Page 12: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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

Page 13: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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>

Page 14: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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

Page 15: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Implementaçã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

Page 16: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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

Page 17: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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))

Page 18: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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.

Page 19: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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);

}}

Page 20: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Exemplo de AppletSaída no Navegador

Page 21: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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);

}}

Page 22: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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>

Page 23: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Exemplo de Applet (2)Saída no Navegador

● Atualize através do navegador para ver as cores se alternando

Page 24: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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);

}}

Page 25: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Exemplo de Applet (3)Saída no Navegador

● Clique no botão para alternar a cor de fundo do painel

Page 26: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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

Page 27: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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”

Page 28: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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

Page 29: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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

Page 30: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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

Page 31: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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!)

Page 32: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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

Page 33: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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

Page 34: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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

Page 35: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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

Page 36: Applets Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Exercício

● Exiba a calculadora criada como um applet