MokaByte Numero 33  -  Settembre  99
Il browser personale
di 
Marco Pedroni
Il browser, strumento sempre più indispensabile per l'utente moderno, non è più un oggetto a se stante, ma empre più una parte integrante di applicazioni di terze parti


Abituati al Navigator o all'Explorer, qualcuno a Opera o a HotJava, gli utenti informatici in genere collegano il termine "browser" a questi strumenti, alla loro interfaccia e alle loro opzioni. Questa interpretazione del browser è destinata a cambiare: nuove applicazioni software con navigazione integrata si affacciano sul mercato, nuovi strumenti hardware accedono al Web

Abituati al Navigator o all'Explorer, qualcuno a Opera o a HotJava, gli utenti informatici in genere collegano il termine "browser" a questi strumenti, alla loro interfaccia e alle loro opzioni. Questa interpretazione del browser è destinata a cambiare: nuove applicazioni software con navigazione integrata si affacciano sul mercato, nuovi strumenti hardware accedono al Web.
Da pacchetto software, il browser è destinato ad evolversi, nell'interpretazione collettiva, a oggetto software, il cui layout è composto essenzialmente da un'area di visione della pagina Web e una toolbar di gestione delle principali funzionalità (Back, Forward, Reload...). Osserviamo, in breve, quali sono le potenzialità dell'inserimento del browser in un'applicazione software, e quali esigenze può soddisfare.
Il browser consente principalmente il parsing e processing del protocollo HTML, ovvero l'analisi sintattica e la visualizzazione di documenti formattati secondo uno standard consolidato: l'integrazione di queste funzioni si rivela particolarmente utile nelle applicazioni che richiedono l'uso di guide o tutorial o la consultazione di archivi documentali, quali ad esempio cataloghi, manualistica interattiva, materiale didattico per l'erogazione della formazione a distanza.
Altre applicazioni possono richiedere la ricerca e la lettura di informazioni e documenti dalla rete: in questi casi è un'opzione qualificante disporre del Web come di una memoria di massa, attraverso l'utilizzo di un browser interno. Infine, la navigazione integrata consente applicazioni a maggior grado di interazione con il Web: un possibile esempio è offerto dai programmi di gestione di acquisti in rete (le applets con funzione di Wallet non hanno, ovviamente, la possibilità di gestire un archivio in locale, contrariamente ad un'applicazione Wallet stand-alone con browser integrato).
Disporre di un oggetto software con le funzionalità dei browser, portabile e integrabile: a fronte di questa esigenza, per gli sviluppatori la scelta di un JavaBean è certamente la soluzione migliore. Tra i beans più conosciuti e usati, ne segnalo due: l'HotJava HTML Component di Sun Microsystems e l'ICEBrowserBean di IceSoft. 
 
 
 
 

HotJava HTML Component

Prodotto da Sun utilizzando gran parte del sorgente di HotJava, questo componente (HotJavaBean.jar) è composto di quattro beans separati: l'HotJavaBrowserBean gestisce la visione delle pagine Web, l'HotJavaDocumentStack memorizza la navigazione e consente le funzioni di Back e Forward, l'HotJavaSystemState consente l'accesso alle proprietà di sistema, e l'HotJavaAuthenticatorBean gestisce la sicurezza della connessione.
Associato a questi beans si trova il TextBean (Textbean.jar), estensione del TextField in grado di controllare l'inputazione di una URL.
L'HotJava HTML Component è fermo da tempo alla versione 1.1.2: se ne attende un upgrade compatibile con le specifiche HTML 4.0 e JavaScript, a seguito della diffusione di HotJava 3.
Attualmente riconosce le specifiche HTML 3.2, le applet, i cookies, i formati GIF, JPEG e AU, i protocolli HTTP 1.1, FTP, Gopher, SMTP, MIME, SOCKS; non riconosce le specifiche HTML 4, XML, JavaScript.
Il download della versione di valutazione (valida 30 gg.) è disponibile all'indirizzo http://www.sun.com/software/htmlcomponent/index.html

Vediamo come si costruisce un browser con il prodotto Sun, all'interno di un Frame.
L'esempio riportato crea un browser e apre inizialmente la pagina di entrata di java.sun.com, consente la navigazione e le funzioni back e Forward. 
 

import java.awt.*; 
import java.awt.event.*; 
import com.sun.java.swing.*; 
import sunw.hotjava.bean.*; 

// definiamo il Frame BrowserDemo, composto 
// dal parser HTML (HotJavaBrowserBean), 
// dall'oggetto che memorizza la navigazione 
// (HotJavaDocumentStack) e dai pulsanti Back e Forward 

public class BrowserDemo extends Frame { 
        JPanel toolbar = new JPanel(); 
        JButton back = new JButton(); 
        JButton forward = new JButton(); 
        HotJavaBrowserBean hjbb = new HotJavaBrowserBean(); 
        HotJavaDocumentStack hjds = new HotJavaDocumentStack(); 

        public BrowserDemo(){ 
                // il Frame 
                setLayout(new BorderLayout(0,0)); 
                setSize(600,400); 
                setTitle("HotJava HTML Component"); 
                // la palette 
                add("North",toolbar); 
                toolbar.setLayout(new FlowLayout(FlowLayout.CENTER,0,0)); 
                toolbar.setBounds(0,0,600,25); 
                // il pulsante Back 
                toolbar.add(back); 
                back.setText("Back"); 
                back.setEnabled(false); 
                back.setBounds(224,5,73,25); 
                // il pulsante Forward 
                toolbar.add(forward); 
                forward.setText("Forward"); 
                forward.setEnabled(false); 
                forward.setBounds(302,5,73,25); 
                // il parser e processor HTML, che inizialmente 
                // apre il sito java di Sun 
                add("Center",hjbb); 
                hjbb.setBounds(0,0,600,375); 
                hjbb.setDocumentString("http://java.sun.com"); 
                // il listener della navigazione 
                bListener browserListen = new bListener(); 
                hjbb.addBrowserHistoryListener(browserListen); 
                hjds.addBrowserHistoryListener(browserListen); 
                // il listener di Back e Forward 
                mListener mouseListen = new mListener(); 
                back.addMouseListener(mouseListen); 
                forward.addMouseListener(mouseListen); 
                // il listener di chiusura del Frame 
                wListener windowListen = new wListener(); 
                addWindowListener(windowListen); 
        } 

        static public void main(String args[]){ 
                (new BrowserDemo()).setVisible(true); 
        } 

        // funzioni del listener della navigazione: 
        class bListener implements BrowserHistoryListener { 
           public void executeHistoryCommand(BrowserHistoryEvent event){ 
           // quando sente il click su un link... 
                   if (event.getSource() == hjbb) { 
                     // comunica l'evento al 
                     //memorizzatore della navigazione 
                     hjds.executeHistoryCommand(event); 
                     // e attiva o disattiva Back e Forward 
                     // in funzione dello stack di memoria 
                     // della navigazione 
                     back.setEnabled(hjds.isPreviousAvailable()); 
                     forward.setEnabled(hjds.isNextAvailable()); 
                   } 
                   else if (event.getSource() == hjds) 
                      // quando è il memorizzatore 
                      // a guidare la navigazione 
                      // attraverso Back e Forward), 
                      // l'evento viene comunicato al browser, 
                      // che attiva o disattiva i pulsanti 
                      hjbb.executeHistoryCommand(event); 
                  } 
          } 

        // funzioni del listener di Back e Forward: 
        class mListener extends MouseAdapter{ 
                // al click del mouse, Back e Forward 
                // comunicano al memorizzatore il comando 
                // di navigazione alla pagina precedente 
                //o successiva dello stack di memoria 
                public void mouseClicked(MouseEvent event){ 
                        if (event.getSource() == back) 
                            hjds.previousDocument(); 
                        else if (event.getSource() == forward) 
                            hjds.nextDocument(); 
                } 
        } 

        // funzione del listener del Frame BrowserDemo. 
        class wListener extends WindowAdapter 
        { 
            // al click del mouse sul pulsante di 
            // chiusura, cancella il Frame 
            public void windowClosing(WindowEvent event) 
            { 
                dispose(); 
            } 
        } 

 
 

ICEBrowserBean

Il prodotto della IceSoft di Bergen (Norvegia) è un componente di ottima qualità, composto essenzialmente da un versatile parser e processor HTML, inserito in un oggetto Browser che implementa le funzioni di memorizzazione della navigazione. L'ICEBrowserBean comprende anche un oggetto, denominato ICEBrowser, che contiene il browser e una rudimentale palette di bottoni e campi di testo per la gestione delle funzioni principali della navigazione. In Luglio '99 è stato diffuso un importante aggiornamento della tecnologia IceSoft, con il package IceStorm che consente il parsing e processing di tutti gli standards multimediali, del VRML, dell'XML, e di Javascript. Il download della versione di valutazione di ICEBrowserBean è disponibile all'indirizzo http://www.icesoft.no
Osserviamo lo sviluppo di un Frame contenente il browser di IceSoft e le funzioni Back e Forward richiamabili da un menu pop-up. 
 

import java.awt.*;
import java.awt.event.*;
import ice.htmlbrowser.Browser;

/* definiamo il Frame BrowserDemo, che integra il Browser,
   e contiene l'oggetto NavigationPopupMenu per la gestione
   delle funzioni di navigazione */

public class BrowserDemo extends Frame{
        NavigationPopupMenu menu;
        Browser parser = new Browser();

        public BrowserDemo(){
             // il Frame
             setLayout(new BorderLayout(0,0));
             setSize(600,400);
             setTitle("   ICEBrowserBean");
             // il browser 
             add("Center",parser);
             parser.setBounds(0,0,300,300);
             parser.gotoLocation("http://www.icesoft.no");
             // il menu popUp
             menu = new NavigationPopupMenu(parser);
             add(menu);
             // il listener di chiusura del Frame
             wListener windowListen = new wListener();
             this.addWindowListener(windowListen);
             // il listener che apre il menu
             mListener mouseListen = new mListener();
             parser.addMouseListener(mouseListen);
        }

        static public void main(String args[]){
             (new BrowserDemo()).setVisible(true);
        }

        // funzione del listener del Frame BrowserDemo.
        class wListener extends WindowAdapter{
             // al click del mouse sul pulsante di chiusura, 
             // cancella il Frame
             public void windowClosing(WindowEvent event){
                dispose();
             }
        }

        // funzione del listener che apre il menu
        class mListener extends MouseAdapter{
             // è necessario processare l'evento sia alla pressione
             // che al rilascio del mouse
             public void mousePressed(MouseEvent event){
                  processPopup(event);
             }
             public void mouseReleased(MouseEvent event){ 
                  processPopup(event);
             }

             private void processPopup(MouseEvent event){
               // se l'evento è l'apertura del menu popUp 
               // (es. il click destro in Windows)
               if (event.isPopupTrigger())
               // e se l'oggetto dell'evento è una 
               // estensione della classe Component
               // (quindi un oggetto AWT con una precisa dimensione)
               if (event.getSource() instanceof Component)
               // mostra il menu popUp alle coordinate del click
                  menu.show((Component) event.getSource(), event.getX(),
                                                    event.getY());
          }
     }

   class NavigationPopupMenu extends PopupMenu implements ActionListener {
          // il menu popUp è costituito da due voci
          // e implementa l'interfaccia ActionListener che gestisce la scelta
          MenuItem back = new MenuItem("Indietro");
          MenuItem fwd = new MenuItem("Avanti");
          // le voci di menu attivano le funzioni di un browser
          // passato come parametro al metodo costruttore
          Browser browser;

          public NavigationPopupMenu (Browser browser){
                super("Navigation");
                this.browser = browser;
                add(back);
                add(fwd);
                addActionListener(this);
          }

          public void actionPerformed(ActionEvent event){
               //scelta da menu popUp: in base alla voce 
               //selezionata viene inviato un comando al browser
               String command = event.getActionCommand();
               if ("Indietro".equals(command)) browser.goBack();
               else if ("Avanti".equals(command)) browser.goForward();
          }
      }
}


  
 

MokaByte rivista web su Java

MokaByte ricerca nuovi collaboratori
Chi volesse mettersi in contatto con noi può farlo scrivendo a mokainfo@mokabyte.it