Le Java Server Pages sono una tecnologia di recente introduzione di cui abbiamo avuto modo di parlare con un articolo introduttivo il mese scorso [JSP1]. Per chi non avesse letto la puntata precedente, ricordo che si tratta di un sistema di scripting simile alle ASP di Microsoft, in grado di unire HTML, servlet, Enterprise JavaBeans e applicazioni lato server per realizzare pagine web interattive a contenuto dinamico.

Dopo la parte dedicata al funzionamento e alla sintassi delle JSP, questo mese vedremo come realizzare una tipica applicazione che si trova frequentemente in rete: gli acquisti on-line per mezzo del cosiddetto “carrello della spesa”, ovviamente virtuale.

Affronteremo anche il software che è possibile utilizzare per mettere in piedi una struttura JSP. Subito dopo aver scritto l’articolo precedente, mi sono arrivate molte notizie sul rilascio di nuovi prodotti compatibili con la tecnologia JSP, dimostrazione che il settore è letteralmente in ebollizione. JRun di LiveSoftware [JRun], JView di Apache Project [JView], Java Web Server di Sun [JWS] sono solo alcuni esempi; anche Lotus Domino [R5], pur non essendo pensato esclusivamente per i servlet, ne fornisce il supporto.

Il PageCompilerServlet

Abbiamo detto che, per poter essere utilizzate, le JSP necessitano di un web server che le supporti o, caso sempre più frequente, di un application server che ne estenda le funzionalità. Consultando la documentazione del Java Web Server, però, si comprende che il tutto poggia semplicemente su un piccolo servlet, il PageCompilerServlet, che si occupa fra l’altro della compilazione di pagine HTML contenenti script Java. È lo stesso servlet che, per esempio, WebSphere Application Server utilizza per gestire le JSP.

Per far funzionare una pagina JSP è quindi sufficiente un web server che supporti i servlet e che invochi PageCompilerServlet ogni volta che viene richiesta una pagina JSP. Una direttiva da inserire nel file di configurazione del web server può essere:

*.jsp PageCompilerServlet

In questo modo ogni pagina JSP, invece di essere inviata direttamente al browser, viene elaborata dal servlet. PageCompilerServlet esegue il parsing del codice HTML, compila il codice Java inserito nella pagina e manda in esecuzione i bean o i servlet referenziati.

Un application server ottimizza l’impiego del servlet e offre ulteriori funzionalità, come il controllo delle modifiche e la ricompilazione soltanto quando è necessaria. Rispetto a un’applicazione monolitica, questa soluzione è più flessibile: tutto il lavoro relativo alle JSP è svolto da un piccolo componente, che può essere aggiornato sostituendo pochi file .class. Chi possiede conoscenze sufficienti può persino implementare una propria versione di JSP, aggiungendo funzionalità o personalizzando il comportamento del web server.

Possibili architetture

Consideriamo le soluzioni “chiavi in mano” disponibili per i web server più diffusi:

  • Apache: per impostazione predefinita non supporta servlet e JSP. JView di Java Apache Project aggiunge tale supporto e introduce le “zone” di esecuzione. In alternativa si può utilizzare JRun, disponibile per Linux e Windows NT e, nella versione Pro, dotato anche del supporto JSP.
  • Lotus Domino GoWeb: la soluzione IBM può essere estesa con WebSphere. Insieme a WebSphere Studio offre funzionalità interessanti ed è disponibile per AIX, Solaris, NT e, prossimamente, Linux. WebSphere può essere usato anche con Netscape FastTrack, Microsoft IIS e altri server HTTP.
  • Java Web Server: il prodotto Sun, nato col nome di Jeeves, con la versione 1.1 entra nella maturità. Può essere gestito interamente via web per mezzo di un’applet e costituisce il riferimento per la compatibilità con servlet e JSP.
  • Internet Information Server: non supporta direttamente servlet e JSP, ma può essere esteso con application server come JRun o WebSphere.
  • Netscape FastTrack: non offriva ancora il supporto diretto per servlet e JSP, ma poteva essere esteso con WebSphere e, nel prossimo futuro, con JRun.

Fra gli application server va citato anche ServletExec 2.0 di New Atlanta Communications [SExec], disponibile per numerosi sistemi operativi e web server, anche se non in ogni configurazione offre il supporto JSP.

Carrello della spesa

Il mantenimento dello stato è un problema ricorrente nella programmazione web: occorre conservare la traccia delle operazioni dell’utente mentre passa da una pagina HTML all’altra. Anche i servlet lavorano in parte con la modalità CGI, ma offrono qualche vantaggio grazie al dualismo dei metodi init() e service() e alla presenza di una JVM; per mantenere lo stato, tuttavia, è comunque necessario lavoro aggiuntivo.

Con le JSP possiamo risolvere il problema in modo più elegante. Nel caso di un negozio on-line, l’utente naviga fra le pagine e memorizza la merce acquistata in un carrello che verrà usato sia per visualizzare la spesa sia per calcolare il totale. La presenza di soggetti differenti — HTML, EJB e servlet — permette di separare i compiti. Possiamo memorizzare tutti i dati nel bean e accedervi dallo script JSP.

L’esempio è costituito da:

  • un file HTML che visualizza una lista di prodotti da aggiungere o togliere dal carrello;
  • un JavaBean che implementa il carrello vero e proprio;
  • un file JSP che visualizza il contenuto del carrello dopo l’aggiunta o la rimozione di un oggetto.

Il bean raccoglie gli item, che possono essere aggiunti o rimossi mediante i metodi addItem() e removeItem(). La richiesta HTTP viene passata direttamente al bean mediante l’istruzione:

SETFROMREQUEST beanproperty="*"

Tutti i parametri contenuti nella richiesta vengono così passati al bean. Quest’ultimo gestisce il caso tramite il metodo:

public void processRequest(HttpServletRequest request)

Si può immaginare che l’application server effettui una sorta di fusione tra un servlet modello e il bean. Il corpo di processRequest() aggiunge i vari item alla lista interna. Se il parametro submit è nullo, si presume che l’utente abbia premuto Invio anziché il pulsante del form:

// Il valore null per submit implica che l'utente ha premuto
// Invio invece di fare clic sul pulsante "aggiungi" o "togli".
if (submit == null)
    addItem(item);

Con poche righe si affrontano così i punti più delicati della tecnologia JSP.

WebSphere

Il problema maggiore delle Java Server Pages è che esistono ancora pochi strumenti di sviluppo capaci di creare soluzioni complete con poco lavoro. Un buon ambiente deve consentire la produzione sia di script HTML e JSP, sia di codice Java — bean, servlet e applicazioni — e soprattutto deve permettere a tutte queste parti di interagire correttamente.

Fra le alternative, WebSphere Studio offre alcune funzionalità utili:

  • consente di creare un progetto da zero, produrre codice HTML, JavaBean e servlet e impostare automaticamente i collegamenti incrociati;
  • permette la creazione di DataBean capaci di interfacciarsi con i database più diffusi mediante SQL;
  • compila i sorgenti Java e ne permette l’installazione remota, purché sul server sia presente WebSphere Application Server della stessa versione.

Il tallone d’Achille del prodotto è una correttezza di funzionamento non ancora perfetta, che talvolta obbliga a verificare e modificare manualmente il codice generato.

Meglio di ASP

Le ASP non si possono confrontare direttamente con i servlet: le prime sono essenzialmente una tecnica di scripting, mentre i secondi sono programmi Java che si interfacciano con il resto del sistema. Con le JSP esiste invece un corrispettivo Java delle ASP. In entrambi i casi si usa un linguaggio di script per “incollare” componenti compilati: OCX da una parte, Enterprise JavaBeans e servlet dall’altra.

Le ASP hanno il vantaggio di una piattaforma di sviluppo consolidata e facile da usare. Le JSP hanno ancora strada da fare, ma ASP e tecnologie collegate non sono portabili e limitano alla piattaforma Windows NT. JSP, servlet, EJB e l’intera piattaforma Java sono invece svincolati dal sistema operativo e dall’hardware.

La portabilità è importante anche sul server: consente di non pregiudicare un futuro passaggio a sistemi differenti e rende il software più longevo. Le doti di scalabilità di Java costituiscono inoltre un vantaggio notevole. Infine, per scrivere OCX occorre conoscere DCOM e la piattaforma sottostante, cosa non necessaria con Java grazie al suo livello di astrazione.

Le Java Server Pages sono quindi consigliabili quando si vuole implementare una struttura solida, sicura e portabile che debba interfacciarsi con software esistente, anche legacy tramite CORBA.

Conclusioni

  • Le JSP consentono di separare la gestione delle operazioni e la produzione dei contenuti dalla visualizzazione, permettendo a gruppi diversi di lavorare in parallelo.
  • Richiedono web server progettati appositamente o estesi tramite application server.
  • L’offerta di prodotti sta crescendo rapidamente.
  • Gli strumenti di sviluppo non sono ancora abbastanza potenti e molto lavoro deve essere svolto a mano.
  • Sono una valida alternativa alle ASP: queste ultime sono più mature, ma le JSP beneficiano della portabilità e della sicurezza di Java.

Al momento in cui è stato scritto l’articolo è ancora presto per considerare le JSP una soluzione adatta ad ambiti mission critical. Quando la versione 1.0 e gli strumenti di sviluppo saranno più affidabili, potranno però colmare una delle ultime lacune di Java: la mancanza di un sistema facile e flessibile per presentare contenuti dinamici.

Bibliografia

  • -
  • [JSP1] Giovanni Puliti, *Web a contenuto dinamico con Java Server Pages - I parte*, Computer Programming, marzo 1999.
  • -
  • [JSPSun] *JSP Public Review 0.92*, documentazione ufficiale Sun:
  • [java.sun.com/products/jsp](http://java.sun.com/products/jsp).
  • -
  • [JRun] JRun e JRun Pro:
  • [LiveSoftware](http://www.livesoftware.com/).
  • -
  • [JView] Java Apache Project:
  • [java.apache.org](http://java.apache.org/).
  • -
  • [JWS]
  • [Sun Microsystems](http://www.sun.com/).
  • -
  • [R5]
  • [Lotus](http://www.lotus.com/).
  • -
  • [SExec] ServletExec 2.0 di New Atlanta Communications:
  • [newatlanta.com](http://www.newatlanta.com/).
  • -
  • [JSPML] Mailing list JSP: `JSP-INTEREST@JAVA.SUN.COM`; per iscriversi, inviare un messaggio a `listserv@java.sun.com` con `help` nel corpo.