Il linguaggio Java fu concepito inizialmente per essere utilizzato in piccoli dispositivi integrati. Inizialmente venne publicizzato come linguaggio per lo sviluppo di contenuto elaborato sul lato client sotto forma di Applet. Ora invece Java è riuscito a farsi riconoscere come linguaggio ideale per lo sviluppo di applicazioni lato server.
La capacità di Java di abbracciare diverse piattaforme si rivela particolrmante utile per le organizzazioni che dispongono di un insieme eterogeneo di Server che eseguono diverse varianti di sistemi operativi Unix e Windows (e sempre piu' anche Mac OS X).
La moderna concezione a oggetti e a memoria protetta di Java permette agli sviluppatori di ridurre i cicli di sviluppo per incrementare l'affidabilità del loro codice.
Oltre a questo, il supporto incorporato di Java per le API di rete e a livello di impresa consente di accedere ai dati gestiti di sistemi legacy come i mainframe, agevolando la transizione dai sistemi client/server più datati.
Le servlet Java sono componenti chiave dello sviluppo Java con un grado di portabilità, flessibilità e facilità d'uso finora sconosciuto.
Sebbene le servlet possano essere impiegate per estendere la fuzionalità di qulunque server con supporto Java, nella maggior parte dei casi esse vengono utilizzate per estendere i server Web, configurandosi come potenti ed efficienti sostituti degli script CGI.
Quando si utilizza una servlet per la creazione di contenuto dinamico per una pagina Web o per estendere in altro modo la funzionalità di un server Web, ciò che in effetti avviene è la creaziione di un'applicazione Web.
Mentre una pagina Web si limita a visualizzare un contenuto statico e permette all'utente di spostarsi al suo interno, un'applicazione Web offre agli utenti un'esperienza più interattiva.
Un'applicazione Web può essere una semplice funzione di ricerca con parola chiave in un archivio di documenti oppure un complesso sito di commercio elettronico.
Le applicazioni Web interessano sia Internet sia le Intranet ed Extranet aziendali, dove sono in grado di aumentare la produttività e cambiare il modo in cui società grandi e piccole gestiscono la loro attività commerciale.
Per comprendere la potenza delle servlet, dobbiamo però fare un passo indietro ed esaminare alcune delle altre soluzioni che è possibile adottare per creare applicazioni Web.
Common Gateway Interface
La Common Gateway Interface, nota comunemente come CGI, è stata una delle prime tecniche pratiche per la creazione di contenuto dinamico. Grazie a essa un server Web passa determinate richieste a un programma esterno, il cui output viene poi inviato al client al posto di un file statico. L'avvento della tecnologia CGI ha reso possibile l'implementazione di funzionalità nuove di ogni genere nelle pagine Web, tanto che essa è diventata rapidamente uno standard di fatto, implementato su tantissimi sever Web.
E' interessante osservare che la capacità dei programmi CGI di creare pagine Web dinamiche è un effetto collaterale dello scopo originale per il quale questa tecnica era stata concepita, ossia definire un metodo standard che consentisse a un server di informazioni di comunicare con le applicazioni esterne.
Questa origine spiega perchè il ciclo di vita di CGI è forse il peggiore che si possa immaginare.
Quando un server riceve una richiesta che accede a un programma CGI, deve creare un nuovo processo per eseguire il programma CGI e poi passare a quest'ultimo, tramite variabili di ambiente e standard input, tutte le informazioni che potrebbero essere necessarie per generare una risposta.
La creazione di un processo per tutte le richieste di questo tipo richiede tempo e impegna notevolmente le risorse del server, fattori che limitano il numero di richieste che un server può gestire contemporeanemente.
Anche se un programma CGI può essere scritto con quasi tutti i linguaggi oggi conosciuti, il linguaggio di programmazione Perl è diventata la scelta predominante.
Un altro problema spesso trascurato della tecnica CGI è che questo genere di programm non può interagire con il server Web o sfruttare le capacità di quest'ultimo una volta che inizia l'esecuzione in quanto essa ha luogo in un processo separato. Per esempio, uno script CGI non può scrivere sul file log del server.
FastCGI
Una società denominata Open Market ha sviluppato un'alternativa alla tecnologia CGI standard denominata FastCGI. Per molti aspetti FastCGI funziona come CGI, con l'importante differenza che la prima crea un singolo processo persistente per ogni programma FastCGI. Ciò elimina la necessita di creare un nuovo processo per ogni richiesta e aumenta considerevolmente la velocità di risposta alle richieste dei client.
Sebbene costituisca un passo in avanti, FastCGI presenta ancora un problema di proliferazione: esiste infatti almeno un processo per ogni programma FastCGI. Se un programma FastCGI deve gestire richieste concorrenti, ha bisogno di un pool di processi, uno per richiesta.
Se si considera che ciascun processo potrebbe esesguire un interprete Perl, questo metodo non riduce il carico sul sistema nella misura che si potrebbe sperare. Va detto comunque a favore di FastCGI che è una tecnica in grado di distribuire i suoi processi su più server.
Un altro problema di FastCGI è che non contribuisce in alcun modo a far si che il programma FastCGI interagisca in modo più stretto con il Web server. Infine,i programmi FastCGI sono portabili solo nella misura in cui lo è il linguaggio nel quale sono scritti. Per maggiori informazioni su FastCGI, si veda il sito http://www.fastcgi.con
PerlEx
Perl,sviluppato da ActiveState, migliora le prestazioni degli script CGI scritti in Perl che vengono eseguiti su server Web Windows (Internet Information Server di Microsoft, WebSite Professional di O'Reilly e Enterprise Server di iPlanet). Esso presenta vantaggi e svantaggi simili a quelli di FastCGI.
Per maggiori informazioni su PerlEx, si veda il sito http://www.activestate.com/plex.
mod_perl
Se si utilizza il Web Server Apache, per migliorare la prestazione della tecnologia CGI si puo ricorrere a mod_perl, un modulo per server Apache che incorpora una copia dell'interprete Perl nell'eseguibile di Apache, offrendo un accesso completo alla funzionalità Perl all'interno di Apache. Gli script CGI vengono precompilati da server ed eseguiti senza operazioni di forking, consentendo pertanto una maggiore velocità ed efficienza nelle operazioni.
Lo svantaggio è che l'applicazione è compatibile solo con il server Apache.
Per maggiori informazioni su mod_perl, si veda il sito http://perl.apache.org.
API di estensione del server
Sono diverse le società che hanno creato delle API di estensione del server proprietarie per i loro server Web. Per esempio,iPlanet/Netscape offre un'API interna chiamata WAI (inizialmente NSAPI), mentre Microsoft fornisce ISAPI. Con una di queste API è possibile scivere estensioni del server che ne potenziano o ne cambiano le funzionalità di base, permettendogli di gestire operazioni un tempo relegate a programmi CGI esterni. Le estensioni del server esistono all'interno del processo principale di un Server Web. Dato che le API specifiche del server usano codice C o C++ collegato tramite un linker, le estensioni del server possono offrire un'esecuzione molto rapida e sfruttare appieno le risorse del sistema. Le estensioni del server sono tuttavia ben lungi dall'essere una soluzioni perfetta. Oltre a presentare difficoltà di sviluppo e manutenzione, pongono seri rischi di sicurezza e affidabilità: un'estensione in crash può interrompere il funzionamento dell'intero server, mentre una maligna potrebbe sottrarre informazioni, come le password e i numeri di carta di credito degli utenti di un sito. Inoltre, le estensioni del server proprietarie sono ovviamente legate in modo inscindibile alle API del server per la quale sono state scritte e spesso anche a un particolare sistema operativo.
Server-Side JavaScript
Anche iPlanet/Netscape offre una tecnica per lo scripting sul lato server chiamata SSJS (Server-Side JavaScript). Come ASP, SSJS permette di incorporare frammenti di codice nelle pagine HTML per generare un contenuto Web dinamico. La differenza è che SSJS utilizza JavaScript come linguaggio di scipting. Con SSJS le pagine Web vengono precompilate per migliorare le prestazioni. Il supporto per Server-Side JavaScript e' disponibile solo con i server iPlanet/Netscape.
Active Server Pages
Microsoft ha messo a punto una tecnica per la generazione di contenuto Web dinamico chiamata ASP (Active Server Pages), per mezzo della quale una pagina HTML sul server Web può contenere frammenti di codice incorporato (in genere VBScript o JScript, anche se è possibile utilizzare quasi tutti i linguaggi). Tale codice viene letto ed eseguito dal server Web prima che questo invii la pagina al client, ASP è ottimizzato per la gnerazione di piccole parti di contenuto dimamico, sfruttando i componenti COM per compiere il lavoro pesante.
Il supporto per ASP è integrato in MIcrosoft Internet Information Server versione 3.0 e successive, disponibile gratuitamente all'indirizzo http://www.microsoft.com/iis.
Il supporto per altri server Web è disponibile come prodotto commerciale presso Chili!Soft, http://www.chilisoft.com. E' importante tenere presente che le pagine ASP in esecuzione su una piattaforma differente da Windows potrebbero incontrare difficoltà nello svolgimento di operazioni avanzate senza la libreria COM di Windows.
PHP
PHP, che significa "PHP: Hypertext Preprocessor", è un linguaggio di scripting general-purpose Open Source molto utilizzato, è specialmente indicato per lo sviluppo Web e può essere integrato nell'HTML. La sua sintassi è basata su quella di C, Java e Perl, ed è molto semplice da imparare. L'obiettivo principale del linguaggio è quello di permettere agli sviluppatori web di scrivere velocemente pagine web dinamiche, ma con PHP si possono fare molte altre cose.
Tra i vantaggi di PHP sicuramente sta nel fatto che è completamente open source, quindi molto usato e conosciuto. Inoltre è integrabile in numerosi server Web.
Tra i contro è poco orientato agli oggetti, le librerie standard hanno aspetto procedurale e caratteristiche importanti sono disponibili soltanto nelle recenti versioni.
Il manuale e maggiori informazioni dono disponibili sul sito http://www.php.net/.
JavaServer Pages
JSP(JavaSeverPages) è un'alternativa ad ASP basata su Java, inventata e standardizzata da Sun. JSP utilizza una sintassi simile a quella di ASP, con la differenza che il linguaggio di scripting è Java.
A differenza di ASP, JSP è uno standard aperto implementato da moltissimi produttori su tutte le piattaforme. JSP è strettamente legato alle servlet, perchè una pagina JSP viene trasformata in un servlet come parte della sua esecuzione. Per maggiori informazioni su JSP, si veda il sito http://java.sun.com/products/jsp.
Servlet Java
Una servlet è un'estensione del server generica, una classe Java che può essere caricata in modo dinamico per espandere la funzionalità di un server. Le servlet sono utilizzate comunemente con i server Web, dove possono prendere il posto degli script CGI. Una servlet è simile a un'estensione del server proprietaria, tranne per il fatto che la sua esecuzione ha luogo all'interno di una JVM(Java Virtual Machine) sul server e pertanto è sicura e portabile.
Le servlet operano unicamente all'interno del dominio del server. A differenza delle applet, non richiedono che il browser Web offra il supporto Java.
A differenza di CGI e FastCGI, che devono usare più processi per gestire programmi e/o richieste separati, tutte le servlet possono essere gestite da thread separati all'interno dello stesso processo o da thread a più processi diffusi su diversi server backend. Ciò significa che le servlet sono sia efficienti sia scalabili. Instaurando una comunicazione bidirezionale con il server Web, le servlet possono interagire in modo molto stretto con il server per fare ciò che non è possibile con gli script CGI.
Un altro vantaggio delle servlet è la loro portabilità, relativa sia ai sistemi operativi, caratteristica già presente in Java, sia ai server Web.
Lo svantaggio maggiore è una certa pesantezza dovuta alla necessità di avere in memoria un intera Java Virtual Machine al cui interno devono andare in esecuzione le servlet.