Abituati a usare Navigator o Explorer, qualcuno Opera o HotJava, gli utenti informatici in genere collegano il termine "browser" a strumenti di questo tipo, alla loro interfaccia e alle loro opzioni. È un’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’immagine condivisa, 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 dell’HTML, ovvero la visione di documenti formattati secondo uno standard consolidato: tra le funzioni che possono avvalersi di tale prerogativa si incontrano l’uso di guide o tutorial, la consultazione di archivi documentali, la presentazione di cataloghi o manualistica interattiva, l’erogazione di materiale didattico nella formazione a distanza.

Altre applicazioni possono richiedere la ricerca e la lettura di informazioni e documenti dalla rete: disporre del Web come di una memoria di massa è un’opzione qualificante per tutti i software che consentono l’apertura di file esterni. 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 applet 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 bean 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 bean 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 bean si trova il TextBean (Textbean.jar), estensione del TextField in grado di controllare l’immissione di una URL.

L’HotJava HTML Component è fermo da tempo alla versione 1.1.2: attualmente riconosce le specifiche HTML 3.2, le applet, i cookie, 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 giorni) è disponibile all’indirizzo http://www.sun.com/software/htmlcomponent/index.html.

Sun Microsystems ha comunicato recentemente la prossima diffusione, prevista per maggio 1999, di un nuovo e potente Browser bean, compatibile con le specifiche HTML 4.0 e JavaScript.

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.*;
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() {
    setLayout(new BorderLayout(0, 0));
    setSize(600, 400);
    setTitle("HotJava HTML Component");
    add("North", toolbar);
    toolbar.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
    toolbar.setBounds(0, 0, 600, 25);
    toolbar.add(back);
    back.setText("Back");
    back.setEnabled(false);
    back.setBounds(224, 5, 73, 25);
    toolbar.add(forward);
    forward.setText("Forward");
    forward.setEnabled(false);
    forward.setBounds(302, 5, 73, 25);
    add("Center", hjbb);
    hjbb.setBounds(0, 0, 600, 375);
    hjbb.setDocumentString("http://java.sun.com");
    bListener browserListen = new bListener();
    hjbb.addBrowserHistoryListener(browserListen);
    hjds.addBrowserHistoryListener(browserListen);
    mListener mouseListen = new mListener();
    back.addMouseListener(mouseListen);
    forward.addMouseListener(mouseListen);
    wListener windowListen = new wListener();
    addWindowListener(windowListen);
  }
  static public void main(String args[]) {
    (new BrowserDemo()).setVisible(true);
  }
  class bListener implements BrowserHistoryListener {
    public void executeHistoryCommand(BrowserHistoryEvent event) {
      if (event.getSource() == hjbb) {
        hjds.executeHistoryCommand(event);
        back.setEnabled(hjds.isPreviousAvailable());
        forward.setEnabled(hjds.isNextAvailable());
      } else if (event.getSource() == hjds) {
        hjbb.executeHistoryCommand(event);
      }
    }
  }
  class mListener extends MouseAdapter {
    public void mouseClicked(MouseEvent event) {
      if (event.getSource() == back) {
        hjds.previousDocument();
      } else if (event.getSource() == forward) {
        hjds.nextDocument();
      }
    }
  }
  class wListener extends WindowAdapter {
    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 HTML, chiamato Document, esteso da un oggetto Browser che implementa le funzioni di memorizzazione della navigazione. L’ICEBrowserBean comprende anche un oggetto, denominato ICEBrowser, che contiene il parser HTML e una palette di bottoni e campi di testo per la gestione delle funzioni principali della navigazione.

Recentemente, il browser di IceSoft si è evoluto inglobando le classi Swing (il nuovo componente si chiama ICEBrowserLiteBean). Entro aprile 1999 è stato annunciato un importante aggiornamento della tecnologia IceSoft, con il package IceStorm che consentirà il parsing di tutti gli standard 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 parser HTML 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;
public class BrowserDemo extends Frame {
  NavigationPopupMenu menu;
  Browser parser = new Browser();
  public BrowserDemo() {
    setLayout(new BorderLayout(0, 0));
    setSize(600, 400);
    setTitle("ICEBrowserBean");
    add("Center", parser);
    parser.setBounds(0, 0, 300, 300);
    parser.gotoLocation("http://www.icesoft.no");
    menu = new NavigationPopupMenu(parser);
    add(menu);
    wListener windowListen = new wListener();
    addWindowListener(windowListen);
    mListener mouseListen = new mListener();
    parser.addMouseListener(mouseListen);
  }
  static public void main(String args[]) {
    (new BrowserDemo()).setVisible(true);
  }
  class wListener extends WindowAdapter {
    public void windowClosing(WindowEvent event) {
      dispose();
    }
  }
  class mListener extends MouseAdapter {
    public void mousePressed(MouseEvent event) {
      processPopup(event);
    }
    public void mouseReleased(MouseEvent event) {
      processPopup(event);
    }
    private void processPopup(MouseEvent event) {
      if (event.isPopupTrigger() && event.getSource() instanceof Component) {
        menu.show((Component) event.getSource(), event.getX(), event.getY());
      }
    }
  }
  class NavigationPopupMenu extends PopupMenu implements ActionListener {
    MenuItem back = new MenuItem("Indietro");
    MenuItem fwd = new MenuItem("Avanti");
    Browser browser;
    public NavigationPopupMenu(Browser browser) {
      super("Navigation");
      this.browser = browser;
      add(back);
      add(fwd);
      addActionListener(this);
    }
    public void actionPerformed(ActionEvent event) {
      String command = event.getActionCommand();
      if ("Indietro".equals(command)) {
        browser.goBack();
      } else if ("Avanti".equals(command)) {
        browser.goForward();
      }
    }
  }
}