Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Javascript - 12, Notas de estudo de Informática

Desenvolvendo Websites Interativos com JavaScript

Tipologia: Notas de estudo

2011

Compartilhado em 20/03/2011

wwill-de-paula-3
wwill-de-paula-3 🇧🇷

18 documentos

1 / 16

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Capítulo 12 – JavaScript e Java
JS11-01-1999/01 A4 - © 1999 Helder L. S. da Rocha 12 - 1
12
JavaScript e Java
APPLETS JAVA OFERECEM RECURSOS QUE VÃO MUITO ALÉM do que se dispõe com
JavaScript e HTML. Por outro lado, applets pouco interagem com a página. Não podem
alterar propriedades da página nem utilizar formulários HTML. JavaScript oferece recursos
de programação e integração total com o browser e a página, mas não pode ir além das
limitações do HTML e do browser. Usando Java e JavaScript juntos, une-se a riqueza de
recursos de Java à integração do JavaScript com o browser o que permite permite explorar o
melhor de cada tecnologia em uma mesma aplicação.
Os browsers mais populares suportam a o controle de applets a partir de JavaScript e
vice-versa. Isto inclui os browsers Netscape Navigator a partir da versão 3.0 e o browser
Microsoft Internet Explorer a partir da versão 4.01. Neste capítulo, mostraremos como
manipular com os applets em uma página Web, e exploraremos, com exemplos e exercícios
resolvidos, a comunicação entre applets e JavaScript.
Applets Java
Applets são pequenas aplicações geralmente escritas em Java que são executadas pelo
browser. Diferentemente do que ocorre com JavaScript, o código Java não é interpretado
pelo browser. Um applet também não tem código Java que o browser possa interpretar, já
que foi compilado para uma linguagem de máquina. Browsers que suportam Java possuem
uma plataforma virtual, a “Java Virtual Machine”, que é capaz de interpretar a linguagem de
máquina Java, chamada de bytecode.
Applets podem ser usados para desenvolver aplicações que seriam impossíveis em
JavaScript por causa das limitações do HTML, do protocolo HTTP e do próprio browser.
Com um applet, é possível estender um browser fazendo-o suportar, por exemplo, novos
1 Além da comunicação entre applets e scripts, o Netscape Navigator, permite ainda que o programador
utilize diretamente classes da API Java, chame seus métodos e crie objetos Java a partir de instruções
JavaScript. Não discutiremos este recurso aqui por ele não ter suporte além dos browsers Netscape.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff

Pré-visualização parcial do texto

Baixe Javascript - 12 e outras Notas de estudo em PDF para Informática, somente na Docsity!

Capítulo 12 – JavaScript e Java

JS11-01-1999/01 A4 - © 1999 Helder L. S. da Rocha 12 - 1

JavaScript e Java

APPLETS JAVA OFERECEM RECURSOS QUE VÃO MUITO ALÉM do que se dispõe com

JavaScript e HTML. Por outro lado, applets pouco interagem com a página. Não podem

alterar propriedades da página nem utilizar formulários HTML. JavaScript oferece recursos

de programação e integração total com o browser e a página, mas não pode ir além das

limitações do HTML e do browser. Usando Java e JavaScript juntos, une-se a riqueza de

recursos de Java à integração do JavaScript com o browser o que permite permite explorar o

melhor de cada tecnologia em uma mesma aplicação.

Os browsers mais populares suportam a o controle de applets a partir de JavaScript e

vice-versa. Isto inclui os browsers Netscape Navigator a partir da versão 3.0 e o browser

Microsoft Internet Explorer a partir da versão 4.0^1. Neste capítulo, mostraremos como

manipular com os applets em uma página Web, e exploraremos, com exemplos e exercícios

resolvidos, a comunicação entre applets e JavaScript.

Applets Java

Applets são pequenas aplicações geralmente escritas em Java que são executadas pelo

browser. Diferentemente do que ocorre com JavaScript, o código Java não é interpretado

pelo browser. Um applet também não tem código Java que o browser possa interpretar, já

que foi compilado para uma linguagem de máquina. Browsers que suportam Java possuem

uma plataforma virtual, a “Java Virtual Machine”, que é capaz de interpretar a linguagem de

máquina Java, chamada de bytecode.

Applets podem ser usados para desenvolver aplicações que seriam impossíveis em

JavaScript por causa das limitações do HTML, do protocolo HTTP e do próprio browser.

Com um applet, é possível estender um browser fazendo-o suportar, por exemplo, novos

(^1) Além da comunicação entre applets e scripts, o Netscape Navigator, permite ainda que o programador

utilize diretamente classes da API Java, chame seus métodos e crie objetos Java a partir de instruções JavaScript. Não discutiremos este recurso aqui por ele não ter suporte além dos browsers Netscape.

Desenvolvendo Web Sites Interativos com JavaScript

12 - 2 JS11-01-1999/01 A4 - © 1999 Helder L. S. da Rocha

protocolos de comunicação e segurança, novos formatos de mídia, etc. O preço dessa

liberdade é sua fraca integração com o HTML da página. Aplicações Web baseadas em Java

pouco ou nada aproveitam do HTML da página a não ser um espaço gráfico para sua

exibição. Com JavaScript, é possível aumentar essa integração.

Applets são aplicações gráficas e precisam de uma página HTML para poderem

executar. São exibidos na página de forma semelhante a imagens: carregam um arquivo

externo, ocupam um espaço com determinada altura e largura, e podem ter seu alinhamento

em relação ao texto definido pelos mesmos atributos presentes em . A sintaxe do

elemento HTML está mostrada abaixo. Tudo o que não estiver em negrito é

opcional:

...

Diferentemente de , o elemento é um bloco e possui um descritor de

fechamento . Entre e pode haver nenhum ou vários

elementos , que contém parâmetros necessários ou não (depende do applet) para o

funcionamento da aplicação. Cada elemento contém um par de atributos

obrigatórios. O valor do atributo NAME é definido pelo programador do applet. Através dele,

o programa pode recuperar um valor que o autor da página (que não precisa saber Java)

definiu no atributo VALUE.

O atributo MAYSCRIPT é necessário se o applet pretende ter acesso ao código

JavaScript da página. Sem este atributo, qualquer tentativa do applet de acessar variáveis ou

executar funções ou métodos JavaScript causará em uma exceção de segurança no applet.

Existem muitos applets úteis disponíveis gratuitamente na Web que podem ser usados

por autores de páginas Web e programadores JavaScript sem que precisem saber Java. Os

mais populares implementam banners para rolagem de texto, ícones inteligentes, gráficos,

planilhas de dados e interfaces para bancos de dados. A maioria são configuráveis através de

Desenvolvendo Web Sites Interativos com JavaScript

12 - 4 JS11-01-1999/01 A4 - © 1999 Helder L. S. da Rocha

Objeto Applet

O tipo de objeto Applet representa, no modelo de objetos JavaScript, um applet Java

embutido em uma página Web. Tendo uma referência para um objeto Applet , o

programador pode controlar um applet Java usando JavaScript, sem que precise ter acesso ao

código do applet. Precisará apenas saber os nomes dos métodos públicos do applet para que

possa invocá-los via JavaScript. É possível também fazer o inverso: controlar JavaScript a

partir de applets. Neste caso, é preciso ter acesso ao código do applet e conhecer a linguagem

Java.

Não é possível criar objetos Applet usando JavaScript, apenas. Objetos Applet são

fornecidos pelo código HTML da página. Se houver na página um bloco que

tenha carregado um arquivo executável Java, existe um objeto Applet utilizável em JavaScript.

Uma página pode ter vários applets. Eles podem ser obtidos através da propriedade

document.applets – um vetor que, como document.images e document.forms,

contém referências para todos os applets presentes na página, na ordem em que aparecem

no código. Por exemplo, em uma página com três applets, o primeiro e terceiro podem ser

referenciados da forma:

appy1 = document. applets[0]; // primeiro applet da página atual appy3 = document. applets[2]; // terceiro applet da página atual

Os applets de uma página também são são acessíveis através de um nome,

especificado pelo atributo HTML opcional NAME. Acessar um applet pelo nome é mais

prático e evita que a modificação da ordem dos applets na página afete o funcionamento da

aplicação. Por exemplo, o applet:

pode ser referenciado em qualquer atributo de eventos ou bloco

Capítulo 12 – JavaScript e Java

JS11-01-1999/01 A4 - © 1999 Helder L. S. da Rocha 12 - 5

Controle de Applets via JavaScript

O controle de applets a partir do código JavaScript é bastante simples, pois em muitas

aplicações não exige conhecimentos de Java nem dos detalhes internos do applet.

Conhecendo-se os métodos e variáveis públicas de um applet, pode-se acessá-los

diretamente pelo nome através do objeto, que é referência ao applet em JavaScript^2.

No ambiente de desenvolvimento Java (JDK – Java Development Kit), há uma

ferramenta chamada javap que imprime uma lista das assinaturas de todos os métodos e

variáveis públicas de um programa Java compilado (arquivo com extensão .class). A

assinatura consiste do nome do método, seu tipo de retorno e os tipos de seus argumentos.

Por exemplo, suponha que você possua um arquivo Carta.class, que é um applet Java e

está incluído em uma página HTML através do bloco:

Você não conhece o formato e nome dos métodos de Carta.class mas possui o

JDK, que tem a ferramenta javap. Rodando a ferramenta javap sobre o arquivo

Carta.class, obtém-se o seguinte:

c:> javap Carta (é preciso omitir a extensão .class )

public class Carta extends java.applet.Applet { public int numero; public void mudarMensagem(String); public String lerMensagem(); } C:>_

A primeira linha, identifica a classe java (Carta), que é um applet. Todo programa em

Java é considerado uma classe. A segunda linha contém a declaração de uma variável

chamada numero. A palavra public indica que se trata de uma variável pública (pode ser

usada em JavaScript) e a palavra int indica que é um número inteiro. Se formos atribuir um

valor à variável numero, através de JavaScript, precisaremos ter o cuidado de passar um

número inteiro e não um String ou outro tipo de dados. Java, diferente de JavaScript, só

permite que uma variável receba um valor, se for de um tipo previamente declarado para a

variável.

As duas últimas linhas contém as assinaturas dos métodos mudarMensagem() e

lerMensagem(). A palavra public indica que ambos são públicos e portanto podem ser

usados em JavaScript. O método mudarMensagem() é declarado void, o que significa que

ele não retorna valor. Ele recebe como argumento uma variável que deve necessariamente

(^2) Variáveis e métodos em Java que são declarados ‘static’ não são acessíveis através da referência da applet

mas através do tipo Applet , da forma Applet.variavel ou Applet.metodo().

Capítulo 12 – JavaScript e Java

JS11-01-1999/01 A4 - © 1999 Helder L. S. da Rocha 12 - 7

que mudem as cores de fundo e do texto.

d) programar os botões para que invoquem métodos que façam o texto parar (botão

“[ ]”), andar mais rápido para a esquerda (botão “<<”), e para a direita (botão “>>”).

Solução

A primeira tarefa é colocar o applet na página. Definimos o parâmetro MSG com o valor

“Bom Dia!”, como foi pedido no requisito (a):

Applets controlados por JavaScript **

**

(...)

Com o bloco de código acima, o applet já deve aparecer na página e começar a rolar

para a esquerda. Para permitir a mudança do texto durante a execução do applet, chamamos

o método mensagem(), que muda o texto para o string recebido. O string é obtido do

campo de textos novotexto::

Texto:

A mudança das cores exige mais trabalho já que os métodos corDeFundo() e

corDoTexto() recebem três parâmetros inteiros, e a lista fornece apenas um

valor String , com os valores RGB separados por vírgulas:

Criamos então, uma função cor(), que converte o valor da opção selecionada em três

números inteiros. A função, que recebe um objeto Select como argumento, também

identifica qual das duas listas foi selecionada, para invocar o método correto:

_Desenvolvendo Web Sites Interativos com JavaScript_

12 - 8 JS11-01-1999/01 A4 - © 1999 Helder L. S. da Rocha

} else if (selObj. name == " fg ") { document.applets[0].corDoTexto(r, g, b); } }

A única alteração necessária nos blocos a programação do atributo

ONCHANGE, para chamar a função, passando o próprio Select como argumento:

Cor de fundo:

(...)

A programação dos botões é simples. Eles simplesmente chamam o método

correspondente à sua função:

A listagem completa desta solução está no arquivo Bannersol.html.

Exercícios

12.1 Se o applet Desenho.class (disponível no diretório cap12/) for instalado em uma

página HTML, a página passará a ter uma área onde o usuário poderá fazer desenhos

em preto-e-branco. Há, porém, dois

métodos públicos no applet:

mudaCor() e clear() que

permitem respectivamente mudar a

cor e limpar a tela. Inclua o applet

Desenho na página Desenho.html

(figura ao lado) e programe: a) o

_Desenvolvendo Web Sites Interativos com JavaScript_

12 - 10 JS11-01-1999/01 A4 - © 1999 Helder L. S. da Rocha

necessidade de usar tipos primitivos em parâmetros eles precisam ser encapsulados em

objetos como Integer, Boolean, etc.:

Assinatura do método de instância

(public)

Descrição

Object getMember (String nome ) Recupera uma propriedade de um objeto

JavaScript pelo nome.

Object getSlot (int indice ) Recupera uma propriedade de um objeto

JavaScript pelo índice.

Object eval (String expressao ) Executa expressões JavaScript.

Object call (String nomeMetodo , Object[] args )

Chama um método ou função JavaScript. Os

argumentos da função devem ser passados no

vetor args.

void setMember (String nome , Object valor )

Define um novo valor para uma

propriedade de um objeto JavaScript pelo

nome.

public void setSlot (int indice , Object valor )

Define um novo valor para uma

propriedade de um objeto JavaScript pelo

índice.

void removeMember (String nome ) Remove uma propriedade de um objeto

JavaScript pelo nome.

String toString () Devolve uma String com uma descrição do

objeto.

Qualquer elemento HTML referenciado na hierarquia de objetos JavaScript pode ser

obtido a partir da referência à janela do browser. O método getMember(), invocado em

qualquer JSObject, retorna uma referência Java para a o nome da propriedade passada

como parâmetro ou null se a propriedade não existir. Se a propriedade for um vetor em

JavaScript, cada elemento pode ser recuperado com o método getSlot(), passando o

índice correspondente como argumento. Como exemplo do uso desses métodos, considere

o seguinte trecho HTML:

As seguintes operações, dentro do codigo do applet (Java), permitem que ele tenha

acesso ao conteúdo de um campo de textos na página HTML:

JSObject janela = JSObject.getWindow( this ); // código Java! JSObject docmt = (JSObject) janela .getMember("document"); JSObject frmArray = (JSObject) docmt .getMember("forms");

Capítulo 12 – JavaScript e Java

JS11-01-1999/01 A4 - © 1999 Helder L. S. da Rocha 12 - 11

JSObject form1 = (JSObject) frmArray .getSlot(0); JSObject campoTxt = (JSObject) form1 .getMember("dados"); String valor = (String) campoTxt .getMember("value");

Expressões em JavaScript podem ser executadas a partir de applets Java usando o

método eval(). É semelhante à função eval() do JavaScript só que neste caso, é um

método Java, que opera sobre um JSObject. A obtenção da janela do browser é o

suficiente para usar eval(). Com eval(), applets poderão ter diálogos modais: applets não

possuem janelas de diálogo pré-definidas como as janelas de alerta e confirmação do

JavaScript. Essas janelas, disponíveis em JavaScript, podem ser usadas em Java com eval():

JSObject.getWindow(). eval ("alert("Saudações Javanesas!"");

O método eval() também pode ser usado para obter referências a propriedades de

Window e objetos de sua hierarquia de forma mais direta que usando sucessivas chamadas a

getMember() e getSlot(). O código abaixo tem o mesmo efeito que o listado

anteriormente para acessar o valor de um campo de texto:

JSObject janela = JSObject.getWindow(this); String valor = (String) janela.eval("document.form1.campo.value");

Outra forma de chamar métodos ou funções JavaScript a partir de Java é usando o

método call(). Este método recebe dois argumentos: o primeiro é o nome da função ou

método, o segundo, os argumentos que esta função ou método recebem, dentro de um

vetor. O vetor pode ser de qualquer descendente de java.lang.Object. Para passar

argumentos de tipos primitivos, é necessário empacotá-los em objetos como Integer,

Boolean, etc.

O exemplo abaixo é semelhante ao mostrado anteriormente com eval(). Desta vez

usamos call():

JSObject win = JSObject.getWindow(); String[] args = {"Saudações Javanesas!"}; win. call ("alert", args);

Neste outro trecho de código, chamamos uma função soma(), disponível na página

JavaScript, que recebe dois inteiros (os números 7 e 9) e retorna a soma. Precisamos colocar

valores do tipo int dentro de objetos Integer:

JSObject win = JSObject.getWindow(); Object[] args = {new Integer( 7 ), new Integer( 9 )}; Integer intObj = (Integer)win. call ("soma", args); int resultado = intObj.intValue();

Os métodos setMember() e setSlot() são usados para definir novos valores ou

novas propriedades em JavaScript a partir de Java. Por exemplo, para definir a propriedade

value de um campo de textos, pode-se usar:

Capítulo 12 – JavaScript e Java

JS11-01-1999/01 A4 - © 1999 Helder L. S. da Rocha 12 - 13

e irá alterar os valores dos campos de texto coordx e coordy, definidos no formulário:

x y

(...)

Agora precisamos alterar o programa em Java. Uma listagem parcial do programa está

mostrada abaixo. Os trechos que foram adicionados ao programa original estão em negrito:

import java.awt.; import java.awt.event.; import java.applet.; import netscape.javascript.; // suporte a JavaScript pelo Applet

public class Desenha2 extends Applet implements MouseMotionListener, MouseListener { private Dimension dim; private int x, y, oldx, oldy; private boolean clearAll = false; private Color cor = Color.black; private JSObject win; // janela do browser private String[] args; // argumentos da função setCoords()

public void init() { dim = getSize(); this.addMouseMotionListener(this); this.addMouseListener(this); win = JSObject.getWindow(this); args = new String[2]; // são 2 os argumentos da função }

public void mouseDragged(MouseEvent e { if ((x == 0) && (y == 0)) { x = e.getX(); y = e.getY(); } oldx = x; oldy = y; x = e.getX(); y = e.getY(); args[0] = "" + x; args[1] = "" + y; win.call("setCoords", args); repaint(); }

public void mouseMoved(MouseEvent e) {

Desenvolvendo Web Sites Interativos com JavaScript

12 - 14 JS11-01-1999/01 A4 - © 1999 Helder L. S. da Rocha

args[0] = "" + e.getX(); // String com o valor de x args[1] = "" + e.getY(); // String com o valor de y win.call("setCoords", args); // Chama função setCoords(x, y) }

// (... restante do código inalterado: métodos não // mostrados aqui nao foram modificados ... ) }

Para compilar o programa^3 , precisamos definir o caminho onde o compilador poderá

procurar pelo pacote netscape.javascript. Isto é feito através da variável de ambiente

CLASSPATH e só é necessário para a compilação, portanto, podemos defini-la na linha de

comando.

A localização do pacote netscape.javascript depende do browser instalado e da

plataforma. Se o seu browser é Microsoft Internet Explorer em Windows95/98, ele está em

C:\Windows\Java\Classes\classes.zip (se o seu Windows estiver instalado no drive

C:) , portanto defina o CLASSPATH da seguinte forma:

set CLASSPATH=%CLASSPATH%;C:\Windows\Java\Classes\classes.zip

Se seu browser é Netscape 4, nas plataformas Windows95/98 o pacote está em no

caminho { diretório_de_instalação }\Program\Java\Classes\java40.jar, e nos browsers

Netscape 3, no caminho { diretório_de_instalação }\Program\java\classes\java_30, que

devem ser usados para definir o CLASSPATH em cada caso.

Tendo-se definido o CLASSPATH, pode-se compilar, usando o compilador Java do

JDK da Sun (ou outro compatível):

javac Desenha2.java

Corrija quaisquer erros e depois teste o applet, carregando-o no browser. Para ver

possíveis mensagens de erro, abra o “Java Console” do seu browser. Após a correção de

erros, e recompilação, pode ser necessário fechar todas as janelas do browser e abri-lo

novamente para que a versão atualizada do applet seja carregada corretamente.

Conversão de tipos

Java é uma linguagem rigorosa em relação a tipos de dados. Na comunicação entre Java e

JavaScript ocorrem diversas conversões de tipos. Quando valores são passados de Java para

JavaScript, eles obedecem às conversões mostradas na tabela abaixo:

Tipo de dados Java Tipo de dados (objeto) JavaScript

byte, char, short, int, long, float, double Number

boolean Boolean

java.lang.String String

(^3) O procedimento descrito é referente ao JDK da Sun, que roda em linha de comando.

Desenvolvendo Web Sites Interativos com JavaScript

12 - 16 JS11-01-1999/01 A4 - © 1999 Helder L. S. da Rocha

12.3 Realize a validação dos campos do formulário do exercício anterior. Informe que os

dados estão incorretos usando uma janela de alerta JavaScript (alert()).