MokaByte
Numero 20 - Giugno 1998
|
|||
|
|
||
Daniela Ruggeri |
|
||
In questo articolo analizziamo il pacchetto HotJava Html Component che supporta circa l’80% delle funzionalità del browser HotJava Browser. Proveremo poi a vedere come si costruisce e si utilizza un browser.
Introduzione
Il
Bean HotJavaSystemStack
Il
Bean HotJavaBrowserBean
Il
Bean AuthenticatorBean
Il
Bean HotJavaSystemState
Esempio
di costruzione Browser entro il contenitore BeanBox
Analisi
del pacchetto
Conclusione
Il pacchetto scaricabile in versione try (versione attuale 1.1.2) dal sito JavaSoft ha la durata di 1 mese di prova.
Queste funzionalità sono fornite dai quattro componenti JavaBeans che costituiscono il pacchetto HotJava HTML Component e che possono essere assemblati insieme abbastanza semplicemente e usati per visualizzare documenti sia in locale che sotto Internet.
Questi componenti riguardano:
Il primo
è il bean più importante e rappresenta il centro del browser,
e gli altri beans forniscono solo funzionalità di supporto.
Questo Bean è il visualizzatore della pagina HTML nonché di tutte le pagine HTML di supporto necessarie a gestire ogni tipo di problema, nel caricamento del documento (esempio Host sconosciuto, invio posta, file non trovato e così via…).
Associato ad esso esiste una classe BeanInfo, la HotJavaBrowserBeanBeanInfo, che permette di ricavare proprietà, metodi ed eventi.
Per quanto riguarda la personalizzazione, piuttosto che fornire una classe BeanCustomizer è stato messo a disposizione un bean apposito (HotJavaSystemState) sia per rilevare lo stato del componente HTML sia per impostare le variabili che riguardano l’ambiente di connessione.
Lo stato del bean si intercetta attraverso il cambiamento delle proprietà che sono tutte di tipo bound e quindi intercettabili dall’esterno. Gestendo l’evento PropertyChangeEvent associato alla lista ascoltatrice PropertyChangeListener, è possibile intervenire a modificare l’aspetto e il comportamento del bean.
Le proprietà
gestite sono mostrate in tabella
String documentString | L’URL del documento corrente in formato stringa |
URL documentURL | L’URL del documento corrente |
Reader documentSource | L’ input stream del documento corrente |
String documentTitle | Il titolo del documento corrente |
String errorMessage | Il più recente errore dovuto all’interpretazione dei tag HTML |
String statusMessage | L’ultimo
messaggio di stato.
Esempio: Applet loaded |
double loadingProgress | Informazioni
numeriche circa il caricamento del documento:
|
boolean documentReloadable | True se il documento può essere ricaricato |
boolean secureConnection | True se la corrente connessione è sicura |
String[] frameList | Un vettore contenente il nome di tutti i frames HTML |
DocumentSelection selection | La corrente selezione dell’utente |
ElementInfo indicatedElement | Il link (se esiste) sotto il cursore |
String charset | L’insieme di tipo caratteri usati da tradurre in Unicode |
Una delle proprietà più interessanti è la proprietà indicatedElement e che gestisce la classe ElementInfo formata dai seguenti metodi
class ElementInfo {Tramite questa classe è possibile ottenere informazioni sul link dove è posizionato il cursore, e operare opportune modifiche. Per esempio tramite il campo MouseEvent è possibile risalire al componente puntato dal cursore e cambiare il tipo cursore da quello standard a quello di tipo HAND_CURSOR.public String imageURL; // link dell’immagine
public String hrefURL; // link HREF
public String altText; // Testo alternativo
public MouseEvent event; // Timpo di evento interessato riguardante la tipologia Mouse
};
Per quanto riguarda
i metodi, oltre ai metodi get e set associati alle proprietà, e
i metodi add e remove associati alle liste ascoltatrici abbiamo:
find() | Ricerca una stringa all’interno del documento |
print() | Stampa il documento |
clearImageCache() | Cancella le immagini dalla cache |
ExecuteHistoryCommand() | Gestisce l’evento BrowserHistoryEvent. Questo metodo è usato per abilitare il bean HotJavaDocumentStack a ricevere notifiche riguardanti i documenti caricati dal browser. |
reload() | Ricarica il documento |
stopLoading() | Ferma il caricamento del documento se possibile. |
stop() | Ferma momentaneamente il processo di caricamento del documento delle animazioni e delle immagini. E’ usato quando il browser è momentaneamente nascosto alla vista, per non utilizzare inutilmente le risorse del sistema. |
start() | Riprende il processo di caricamento bloccato dal metodo stop(). |
Gli eventi:
Inteso come sorgente degli eventi il bean supporta le seguenti interfacce estensioni di EventListener:
La prima
interfaccia è necessaria a far comunicare questo bean con il bean
stack HotJavaDocumentStack che fornisce informazioni sui documenti
caricati, e le ultime due comuni a tutti i bean serve per l’intercettamento
delle priorità di tipo bound e per impedire il cambiamento
del valore delle stesse in particolari condizioni.
Come ascoltatore il bean supporta invece
Questo bean è invisibile ed è usato per comunicare con il bean HotJavaBrowserBean. Esso fornisce la navigazione indietro e avanti tra i documenti caricati.
Quindi questo bean non fa altro che gestire una collezione di documenti visitati dall’utente.
Tra le possibilità può indicare l’esistenza di un documento precedente e di uno successivo e può azzerare la memoria dai documenti caricati.
L'introspezione. È fornita attraverso la classe che forisce la classe BeanInfo, HotjavaDocumentStackBeanInfo.
Per usare questo bean basta creare una sua istanza, un’istanza di HotJavaBrowserBean e un’istanza di due bottoni rispettivamente con Label "Avanti" e "Indietro". Al verificarsi dell’evento ActionEvent sul bottone con Label "Avanti" si fa eseguire il metodo nextDocument() di questo bean. Analogamente il bottone con label "Indietro" farà eseguire il metodo previousDocument().
L’esecuzione di questi metodi scatena l’evento BrowserHistoryEvent, e quindi connettendo questo bean al bean HotJavaBrowserBean (cioè iscrivendo l’istanza di HotJavaBrowserBean alla lista ascoltatrice BrowserHistoryListener dell’istanza di questo bean) viene eseguito il metodo executeHistoryCommand() associato a HotJavaBrowserBean, e visualizzato il nuovo documento.
Proprietà
gestite:
int | logicalDepth | Numero di documenti caricati |
int | contentsDepth | Numero di tipi di oggetti caricati in memoria (applets in esecuzione, oggetti contenuti nella pagina HTML, ecc.) |
boolean | nextDocumentAvailable | Indica se il prossimo documento esiste |
boolean | previousDocumentAvailable | Indica se il precedente documento esiste |
Tra le proprietà solo le ultime due sono di tipo bound
Tra i metodi
trattati, oltre che ai metodi get, set e is delle proprietà relative
e ai metodi add e remove dalle liste ascoltatrici supportate ci sono:
nextDocument() | Passa al prossimo documento |
previousDocument() | Passa al precedente documento |
eraseDocumentHistory() | Cancella i documenti dalla memoria |
executeHistoryCommand() | Processa l’evento BrowserHistoryEvent |
PropertyChangeListener
BrowserHistoryListener
La prima interfaccia serve per intercettare l’evento PropertyChangeEvent che viene spedito agli ascoltatori ogni volta che cambiano una delle due proprietà di tipo bound di questo bean.
La seconda interfaccia serve per intercettare il cambiamento del corrente documento nell’esecuzione del metodo nextDocument() o previousDocument()
Inteso come ascoltatore degli eventi il bean supporta invece:
BrowserHistoryListener
Questa interfaccia
serve ad intercettare il cambiamento del corrente documento ed ha come
conseguenza l’aggiunta del nuovo documento da gestire.
Questo bean è un componente JavaBeans invisibile per l’uso del bean HotJavaBrowserBean.
Esso permette connessioni a servers sicuri semplicemente aggiungendolo allo stesso contenitore del bean HotJavaBrowserBean.
Questo bean non supporta alcuna classe BeanInfo per l’introspezione. Ne consegue che l’introspezione è quella di default.
Tra le proprietà
supportate (nessuna di tipo bound) abbiamo:
String | userName | L’utente corrente |
String | password | La password di autorizzazione alla connessione |
int | requestingPort | La porta utilizzata dal richiedente |
String | requestingScheme | |
InetAddress | requestingSite | L’indirizzo internet del sito richiesto |
URL | requestingURL | L’URL richiesto |
Questo bean è un componente JavaBeans invisibile usato per impostare tutte le variabili di sistema necessarie per il corretto funzionamento browser e per impostare le preferenze.
Per quanto riguarda
l'introspezione esiste una classe apposita, HotJavaSystemStateBeanInfo,
che fornisce esplicitamente informazioni sulle proprietà, eventi
e metodi.
CookieJar | cookies | Una collezione di cookies |
URLPool | URLPool | La lista degli URL visitati |
SystemProperties | UserProperties | Le proprietà del sistema fornite dall'utente. |
SystemProperties | SystemPropertyDefaults | Le proprietà del sistema che lo sviluppatore può personalizzare. |
Le prime 3 sono proprietà di tipo Bound.
Tra i metodi gestiti, oltre che i metodi set e get relativi alla gestione delle proprietà e ai metodi add e remove nelle liste ascoltatrici, c'è il metodo editUserProperties() che apre una finestra di dialogo per la digitazione da parte dell'utente di alcune proprietà di sistema.
Per quanto riguarda gli eventi questo bean supporta come sorgente le sole interfacce PropertyChangeListener e VetoableChangeListener, per il cambiamento delle proprietà bound e le proprietà con condizioni.
Non supporta nulla invece come ascoltatore.
Esempio di costruzione Browser entro il contenitore BeanBox
In questo articolo viene utilizzato come contenitore il BeanBox, ma nulla vieta di avere un’applet o un frame come contenitore; il risultato della scelta sarebbe assolutamente identico, salvo la possibilità nel secondo caso di poter intervenire sul codice permettendo più possibilità.
I passi da fare
in questo caso sono:
HotjavaSystemState
(file HotJavaBean.jar).
AuthenticatorBean
(file HotJavaBean.jar).
HotJavaBrowserBean
(file HotJavaBean.jar).
HotJavaDocumentStack
(file HotJavaBean.jar).
TextBean
(file TextBean.jar).
Abbiamo quindi
A tale proposito
cliccate sul bean HotjavaSystemState e poi nella finestra Properties
sulla voce Edit relativa a SystemPropertyDefault. Apparirà
una finestra con le proprietà necessarie a far funzionare il browser.
Per la semplice navigazione WEB basta impostare i primi due valori (figura
3).
Corrisponde
ad iscrivere il bean alla lista ascoltatrice java.awt.event.ActionListener
associata al bottone.
Si effettua
selezionando il bottone e poi cliccando sulla voce di menù Edit->Events->button
push->actionPerformed.
Successivamente
si presenterà una linea rossa che partirà dal bottone, allora
cliccate sul bean HotJavaDocumentStack. Apparirà la finestra
di figura 4.
Corrisponde
ad iscrivere il secondo bean alla lista ascoltatrice suw.hotjava.bean.BrowserHistoryListener
associata al primo.
Si effettua
selezionando HotJavaDocumentStack e poi cliccando sulla voce di
menù Edit->Events->browser history commands->executeHistoryCommand.
Successivamente si presenterà una linea rossa, allora cliccate sul
bean HotJavaBrowserBean. Apparirà una finestra dove dovrete
selezionate la voce executeHistoryCommand e premere OK.
Corrisponde
ad iscrivere il secondo bean alla lista ascoltatrice suw.hotjava.bean.BrowserHistoryListener
associata al primo.
Si effettua
selezionando HotJavaBrowserBean e poi cliccando sulla voce di menù
Edit-> bind property….
Successivamente
apparirà una finestra nella quale dovrete selezionare la voce documentString
e premere OK; poi si presenterà una linea rossa, allora dovrete
cliccare sul bean HotJavaBrowserBean. Apparirà una finestra
dove dovrete selezionate la voce text e premere OK.
Corrisponde
ad iscrivere il secondo bean alla lista ascoltatrice java.beans.PropertyChangeListener
associata al primo.
Si effettua
selezionando HotJavaBrowserBean e poi cliccando sulla voce di menù
Edit->bind property….
Successivamente
apparirà una finestra nella quale dovrete selezionare la voce text
(cambiamento del testo) e premere OK; poi si presenterà una linea
rossa, allora dovrete cliccare sul bean HotJavaBrowserBean. Apparirà
una finestra dove dovrete selezionate la voce documentString e premere
OK.
Corrisponde
ad iscrivere il bean alla lista ascoltatrice java.awt.event.ActionListener
associata al bottone.
Si effettua
selezionando il bottone e poi cliccando sulla voce di menù Edit->Events->button
push->actionPerformed.
Successivamente
si presenterà una linea rossa che partirà dal bottone, allora
cliccate sul bean HotJavaBrowserBean. Apparirà la finestra
di figura 5.
Selezionate la voce Print se avete cliccato su "Stampa", Reload se avete cliccato su "Ricarica" e Stoploading se avete cliccato su "Stampa", e premete OK.
Tramite questo
browser è possibile navigare anche in locale. Per esempio digitando
l’URL file:d:/Acrobat3/Reader, sul mio computer si vede la figura
7.
Inoltre ci sono un certo numero di pagine html parametrizzate che gestiscono vari servizi o problemi. Per esempio nella figura 8 vediamo una pagina che appare quando il browser incontra un’estensione di file che non riconosce e da’ tre possibilità:
Un altro esempio è quando si clicca su un indirizzo di posta elettronica. Per esempio in figura 9 è mostrato cosa compare cliccando sull’indirizzo mailto:webmaster@jia.it: è una pagina per spedire messaggi di posta elettronica.
I file .jar sui
quali lavora questo pacchetto sono due
In particolare
il secondo file contiene:
sunw.hotjava.applet
sunw.hotjava.bean
sunw.hotjava.doc
sunw.hotjava.forms
sunw.hotjava.misc
sunw.hotjava.protocol
sunw.hotjava.security
sunw.hotjava.tables
sunw.hotjava.tags
sunw.hotjava.ui
sunw.html
che contengono tutte le classi per far funzionare il browser
Abbiamo:
#
# HTML Dialog templates
#
template.mailto.html=/lib/templates/bean/mailto.html
template.app-launch-error.html=/lib/templates/bean/app-launch-error.html
template.viewer.unknown.html=/lib/templates/bean/viewer.unknown.html
template.socks.open.html=/lib/templates/bean/socks.open.html
template.unknown.host.html=/lib/templates/bean/unknown.host.html
template.unknown.url.html=/lib/templates/bean/unknown.url.html
Come si può vedere per esempio la pagina mailto.html che appare in figura 9., può essere sostituita da un'altra qualsiasi costruita ad hoc per la procedura.
Altro esempio. Nel file hotjavaBean.properties possiamo cambiare le scritte contenute nelle applet delle figure 8. e 9.
Abbiamo:
# Figura 8
button.viewerunknown.save.text=Save...
button.viewerunknown.view.text=View
in HotJava
button.viewerunknown.application.text=View
in Application...
# Figura 9
# MailToApplet
#
mailto.to.text=To:
mailto.subject.text=Subject:
mailto.from.text=From:
mailto.cc.text=CC:
mailto.error.message=Could not
deliver mail: {0}
mailto.notoaddr.message=Could
not deliver mail: The "To:" address was not specified
mailto.success.message=Your
message has been sent.
# checkboxes
maildoc.formatted.text=Message
in HTML
Come si può
vedere possono essere cambiate tutte le scritte mettendole per esempio
in italiano.
Il pacchetto
così come si trova in versione try rappresenta una scelta
interessante nella costruzione di un browser personalizzato.
Ritengo quindi
utile continuare a studiare le successive versioni che saranno depurate
dagli inevitabili bugs.
MokaByte Web 1998 - www.mokabyte.it MokaByte ricerca nuovi collaboratori. Chi volesse mettersi in contatto con noi può farlo scrivendo a mokainfo@mokabyte.it |