Apache Overview HOWTO

Daniel Lopez Ridruejo, ridruejo@apache.org

v0.9, 10 ottobre 2002
Questo documento passa in rassegna i diversi progetti che riguardano Apache, come il server Apache HTTP ed il motore per Servlet e JSP Tomcat; inoltre fornisce indicazioni per ulteriori approfondimenti. Traduzione a cura di Tito Rizzo, tito.rizzo@tiscali.ite revisione a cura di Giuseppe Briotti, g.briotti@mclink.it.

1. Introduzione

Questo documento fornisce un'introduzione al mondo di Apache, includendo i vari progetti della Apache Software Foundation come il web server Apache e i vari software di terze parti, sia commerciali che open source. Apache è il server più popolare di Internet. I nuovi utilizzatori di Apache, specie quelli che provengono da Windows, sono spesso inconsapevoli delle potenzialità di Apache, della sua estensibilità e, più in generale, della efficiente interrelazione tra i vari componenti. Lo scopo di questo documento è quello di fornire una panoramica di tali possibilità, con una breve descrizione di ciascuna e indicazioni per ulteriori approfondimenti. Le informazioni sono state raccolte da varie fonti, includendo le pagine web dei vari progetti, interventi a conferenze, mailing list e siti web di Apache, oltre alla mia personale esperienza. Tali autori meritano la più ampia considerazione, poiché senza il loro lavoro, questo documento non sarebbe stato né possibile né necessario.

Copyright 2002 Daniel Lopez Ridruejo

Si accorda il permesso di copiare, distribuire e/o modificare questo documento entro i termini della Open Content Publication License, Versione 1.1. Una copia della licenza è contenuta nell'appendice "Open Content Open Publication License", o è consultabile al sito www.opencontent.org/openpub/.

1.1 Apache Software Foundation

La Apache Software Foundation fornisce il supporto alla comunità che si occupa dei progetti di software open-source per Apache, progetti caratterizzati da un processo di sviluppo collaborativo e basato sul consenso, da una licemza aperta e pragmatica e dal desiderio di creare software di alta qualità, che apra nuove strade in questo campo. Ci reputiamo non semplicemente un gruppo di progetti che abbiano in comune lo stesso server, ma piuttosto una comunità di sviluppatori e di utenti.

La ASF è la casa madre di innumerevoli progetti Open Source di successo, come il motore Tomcat per Servlet/JSP e lo strumento di compilazione ANT.

Per saperne di più sulla fondazione si veda qui.

1.2 Struttura del documento

La prima parte del documento si occupa del Web Server Apache e dei relativi moduli. Tratta la storia, l'architettura e le possibilità di questo server e descrive in quali modi lo si possa estendere e personalizzare.

La seconda parte del documento tratta i progetti della Apache Software Foundation, come quelli che costituiscono le comunità Jakarta e Java XML. Piuttosto che organizzare i progetti in base al linguaggio di programmazione o alla tecnologia impiegata, si è preferito organizzarli in base alle funzionalità che offrono.

2. Apache

Apache è il principale server web, con una quota di mercato superiore al 60%, secondo Netcraft survey. Al successo di Apache hanno contribuito svariati fattori chiave:

Svariate società commerciali hanno adottato soluzioni basate su Apache per i loro prodotti, incluse Oracle, Red Hat e IBM. In aggiunta, Covalent fornisce moduli aggiuntivi e supporto 24x7 per Apache.

I seguenti siti web usano Apache o uno dei suoi derivati. Se Apache va bene per loro, dovrebbe andare bene anche per voi :)

Dal sito web di Apache:

Il progetto del Server HTTP Apache rappresenta uno sforzo per sviluppare e mantenere un server HTTP open-source per i moderni sistemi operativi, incluso Unix e Windows NT. Il fine di questo progetto è quello di fornire un server sicuro, efficiente e estensibile che garantisca servizi HTTP in aderenza con gli standard HTTP correnti.

Il server Apache iniziò la sua vita come modifica del server Web NCSA, uno dei primi server HTTP. Per saperne di più sulla storia di Apache si veda qui.

Il progetto Apache è poi cresciuto oltre la semplice implementazione di un server web, occupandosi dello sviluppo di altre tecnologie critiche dal lato server. La Apache Software Foundation, che sarà descritta più oltre, serve da ala protettiva per questi progetti.

2.1 Architettura

Ci sono due versioni principali di Apache, la serie 1.3 e la serie 2.0. Per quanto siano da considerarsi entrambe prodotti di qualità, nondimeno differiscono per architettura e possibilità.

2.1.1 Apache 1.3

Apache 1.3 è stato portato su una grande varietà di piattaforme Unix, ed è il server Web più largamente utilizzato in Internet.

Server Web basato su processi

Apache 1.3 su Unix è un server Web basato su processi. Il programma Apache, al suo avvio, genera (fork) svariati processi figli; con il fork un processo primario genera copie identiche di se stesso, chiamate figli. Ognuno di tali figli può servire una richiesta indipendente dalle altre, con il vantaggio di migliorare la stabilità: se uno di tali figli ha un comportamento anomalo (va fuori controllo o ha perdite di memoria) può essere interrotto senza alcun effetto sugli altri. La stabilità è conseguita a spese delle prestazioni. Nella maggior parte dei sistemi Unix, la creazione di processi e il cambiamento del contesto (assegnazione di tempo del processore a ogni processo) sono operazioni costose in termini di risorse di sistema, dal momento che i processi sono isolati gli uni dagli altri e non possono quindi facilmente condividere codice e dati.

Supporto per Windows

Apache 1.3 è la prima versione di Apache a supportare Windows, per quanto tale adattamento non sia considerato stabile come quello su Unix, visto che il server è stato progettato prendendo come riferimento Unix, mentre la versione per Windows ha costituito una aggiunta successiva, non molto bene integrata.

Modularità

Apache 1.3 possiede un'architettura modulare, che permette di abilitare o disabilitare moduli per aggiungere o rimuovere funzionalità al server Web. È possibile personalizzare Apache per migliorarne le prestazioni e la sicurezza. In aggiunta ai moduli di base, esiste un gran numero di moduli di terze parti, con i quali è possibile ampliare ulteriormente le funzionalità del server.

2.1.2 Apache 2.0

Apache 2.0 è la più recente e migliore versione del server Apache, la cui architettura contiene significativi miglioramenti rispetto alla serie 1.3, tra i quali si possono menzionare i seguenti.

Moduli multiprocesso

Apache 2.0 astrae l'architettura di elaborazione delle richieste tramite moduli speciali, chiamati Multi Processing modules (MPMs), ossia moduli Multi Processo, grazie ai quali Apache può essere configurato come un server basato su processi, come un server puramente basato su thread o come un misto di tali modelli. I thread sono inglobati all'interno dei processi e sono eseguiti simultaneamente; a differenza dei processi, possono condividere sia dati che codice, risultando così più "leggeri", tanto che in molti casi i server di tipo "threaded" hanno una migliore scalabilità rispetto ai server basati su processi. Il server risulta, per contro, meno affidabile, perché se un thread ha un comportamento anomalo può causare la corruzione di codice o di dati appartenenti ad altri thread.

Moduli di protocollo

La gestione dei protocolli in Apache 2.0 è stata incapsulata in un suo proprio livello, rendendo possibile la scrittura di moduli per protocolli diversi da HTTP, quali POP3 per la posta o FTP per il trasferimento di file. Questi moduli di protocollo possono trarre vantaggio dalla solida ossatura del server e dalla funzionalità dei moduli, come l'autenticazione e la generazione di contenuti dinamici. Questo significa che, per esempio, è possibile autenticare i propri utenti POP3 tramite lo stesso database di utenti che Apache usa per le richieste web e che il contenuto FTP può essere generato dinamicamente grazie a PHP, CGI o qualunque altra delle tecnologie descritte più avanti in questo stesso documento.

Architettura dei moduli e dei filtri

Apache 2.0 conserva l'architettura modulare di 1.3 con l'aggiunta di un ulteriore meccanismo di estensione rappresentato dai filtri, che consentono ai moduli di modificare il contenuto generato da altri moduli. Possono criptare, effettuare la scansione alla ricerca di virus o comprimere non solo i file statici, ma anche i contenuti generati dinamicamente.

Problemi di compatibilità

Sfortunatamente, per quanto il modulo API sia simile in entrambe le versioni, non è comunque identico e i moduli di Apache 1.3 necessitano di essere adattati alla nuova architettura. La maggioranza dei moduli più importanti, come PHP o mod_perl hanno già la versione per Apache 2.0, mentre altri, come mod_dav e mod_ssl, sono ora parte della distribuzione del server. Il funzionamento dei moduli su un'architettura "threaded" richiede modifiche specifiche ai moduli. I moduli distribuiti con Apache hanno beneficiato di tali modifiche e sono ora considerati 'thread-safe', ma i moduli e le librerie di terze parti possono non esserlo, per cui, se si ha bisogno di qualcuno di questi ci si deve limitare a usare Apache come server basato unicamente su processi.

Portabilità

Apache funziona ugualmente bene sia su piattaforme Windows che Unix grazie alla libreria Apache Portable Runtime (APR), che astrae le differenze tra sistemi operativi, come le API di accesso al network o ai file. Adattare Apache ad una nuova piattaforma risulta spesso altrettanto semplice che adattare il livello di astrazione rappresentato dalla Apache Portable Runtime, la quale provvede anche alla messa a punto e all'ottimizzazione specifica per una determinata piattaforma.

2.2 Sicurezza

Apache fornisce svariati moduli orientati alla sicurezza per regolamentare gli accessi al server.

Autenticazione

I moduli di autenticazione permettono di determinare l'identità di un client, solitamente attraverso la verifica del nome utente e della password rispetto ai dati registrati in un database. Apache comprende inoltre moduli di autenticazione che connettono Apache con strutture o database di sicurezza, includendo tra gli altri: NT Domain controller, Oracle, mySQL, PostgresSQL e così via.

Particolarmente interessanti sono i moduli LDAP, in quanto consentono l'integrazione con servizi di directory a livello di compagnia o di impresa. È possibile trovare tali moduli presso http://modules.apache.org. Un modulo LDAP per Apache 2.0 può essere scaricato dal sito web di Apache.

Controllo degli accessi

Apache fornisce il modulo mod_access che può limitare l'accesso alle risorse basandosi su parametri della richiesta del client, come la presenza di una specifica intestazione o dell'indirizzo IP o del nome host del client. Moduli di terze parti permettono di limitare l'accesso per quei client responsabili di comportamenti irregolari, come spiegato più oltre nelle sezioni dedicate alle prestazioni e al controllo dell'ampiezza di banda.

SSL/TLS

I protocolli Secure Sockets Layer/Transport Layer Security consentono di criptare i dati trasmessi tra il server Web e il client. In Apache 1.3, i protocolli sono implementati con il mod_ssl, distribuito separatamente dal sito web di mod_ssl, che rende necessario applicare alcune patch al server, a causa della regolamentazione sull'esportazione di software di criptatura. La maggior parte di tali restrizioni sono nel frattempo decadute e, a partire da Apache 2.0, il modulo mod_ssl è incluso in Apache come modulo base.

2.3 Proxy

Un proxy è un programma che effettua richieste per conto di qualcun altro. Esistono diversi tipi di proxy per il Web. Un tradizionale proxy HTTP, chiamato anche forward proxy, accetta richieste dai client (solitamente browser Web), contatta il server remoto e restituisce le risposte.

Un reverse proxy è un server Web collocato di fronte a altri server, per i quali costituisce un accesso unificato sgravandoli da determinate incombenze, come l'elaborazione SSL.

Apache supporta entrambi i tipi di proxy, l'immagazzinamento di una cache di contenuti Web e differenti proxy di backend tipo FTP.

2.4 Prestazioni e scalabilità

La grezza prestazione è solo uno dei fattori da considerare in un server Web (di solito flessibilità e stabilità vengono prima).

Detto questo, ci sono soluzioni per migliorare le prestazioni in server web che forniscono contenuti statici e sottoposti a carichi gravosi. Per le imprese di hosting, Apache fornisce anche sistemi per misurare e controllare l'uso dell'ampiezza di banda. In questo contesto, abitualmente la regolazione si traduce in un rallentamento della distribuzione del contenuto in base al file richiesto, ad uno specifico indirizzo IP del client e così via. Questo è fatto al fine di prevenire gli abusi.

Bilanciamento del Carico

Usando il reverse proxy di Apache e il mod_rewrite è possibile ottenere un processo di distribuzione delle richieste tra una varietà di server web di backend. Per maggiori informazioni si veda http://www.apache.org/docs/misc/rewriteguide.html

In aggiunta, il mod_backhand è un modulo di Apache 1.3 che consente una redirezione di richieste HTTP priva di giunzioni, tra un server web e l'altro. Questa redirezione può essere usata per coinvolgere macchine le cui risorse siano sottoutilizzate, ottenendo così un granulare bilanciamento del carico delle richieste web. Per maggiori informazioni si veda http://www.backhand.org/.

Compressione

Apache 2.0 include mod_deflate, un modulo di filtraggio che comprime il contenuto prima di inviarlo al client. Questo limita lo spreco di banda ma può avere un impatto negativo sulle prestazioni. Il modulo mod_gzip fornisce questa funzionalità per Apache 1.3.

2.5 Script CGI

CGI sta per Common Gateway Interface. I programmi CGI sono programmi esterni che vengono invocati quando un utente richiede una certa pagina. Il programma CGI riceve le informazioni dal server web (valori variabili del form, tipo di browser, indirizzo IP del client e così via) e usa tali informazioni per produrre una pagina web per il client.

Apache ha il supporto per CGI e c'è un modulo di terze parti per Apache 1.3 che garantisce il supporto per il protocollo FastCGI, il quale evita le penalizzazioni prestazionali associate all'avvio ed all'arresto di un programma CGI a ogni richiesta. Lo si può trovare a http://fastcgi.com/

2.6 Integrazione delle Piattaforme di Sviluppo

Le applicazioni web sono scritte in linguaggi di alto livello come Java, Perl, C# e così via e Apache dispone di svariati moduli che ne permettono l'integrazione con il server. In molti casi i moduli espongono la API di Apache, così che tutti i moduli Apache possano essere scritti in questi linguaggi.

Perl

mod_perl è un veterano tra i progetti Apache e uno dei più fortunati. Ingloba all'interno di Apache un interprete Perl e consente l'accesso, tramite Perl, all'interno di Apache. Permette che interi moduli possano essere scritti in Perl o in un misto di Perl e di codice C. Nella versione 1.3 di Apache, in ogni processo figlio deve essere incluso un interprete, visto che il server si basa sul multiprocesso. In siti dinamici a alto traffico, l'accresciuta dimensione può fare la differenza. Nelle versioni threaded di Apache 2.0, il mod_perl permette la condivisione del codice, dei dati e dello stato della sessione tra i vari interpreti, tendendo a una soluzione più snella e veloce.

mod_perl costituisce di per sé un'altra piattaforma, con una grande varietà di moduli disponibili, come Mason e Embperl per l'inclusione del Perl in pagine HTML e AxKit per template ricavati da XML.

PHP

Dal sito web di PHP: PHP è un linguaggio di scripting, lato server, indipendente dalla piattaforma, inserito in HTML.. È il modulo per Apache più popolare e questo grazie ad una varietà di ragioni:

PHP ha una concezione modulare. Tra molti altri, ci sono moduli che garantiscono il supporto per: Non bisogna fare altro che compilare/usare il modulo di cui si ha bisogno. PHP può essere usato con Apache, come CGI esterno o con altri server web. È indipendente dalla piattaforma e funziona sulla maggior parte delle versioni di Unix e di Windows. Chiunque provenga da un ambiente Windows, avrà probabilmente usato Internet Information Server con Active Server Pages e MS-SQL Server. Un sostituto comune per questo terzetto nel mondo Unix è Apache con PHP e MySQL. Dal momento che PHP funziona: si ha a disposizione un percorso di migrazione piacevole e graduale da una soluzione incentrata su Microsoft a soluzioni basate su Unix.

Python

Python è un popolare linguaggio di scripting orientato agli oggetti. Mod_Python, che è ora un progetto Apache ufficiale, permette di integrare Python con il server web Apache. È possibile sviluppare applicazioni web complesse o sveltire script CGI Python esistenti. Le versioni recenti funzionano su Apache 2.0.

Tcl

Il Progetto Tcl Apache integra Tcl con il server web Apache. Tcl è un linguaggio di scripting leggero e estensibile. Per saperne di più su Tcl si veda qui. Ci sono attualmente svariati moduli sotto l'ala di Apache Tcl:

Tecnologie Microsoft

Svariati moduli permettono l'integrazione con i linguaggi e le tecnologie Microsoft quali la struttura .Net o le Active Server Pages.

.Net

mod_haydn integra Mono con Apache e espone la API di Apache alla struttura .Net, permettendo, per esempio, la scrittura di moduli in C#. Covalent fornisce mod_asp.net, un modulo commerciale Windows che permette ad Apache di lanciare applicazioni ASP.Net, consentendo di rimpiazzare Microsoft IIS.

ASP

ASP, che sta per Active Server Pages, è una tecnologia Microsoft che permette di inserire codice, abitualmente Visual Basic, nelle pagine HTML. Diverse compagnie come ChilliSoft e Stryon forniscono prodotti in grado di far funzionare applicazioni ASP in ambiente Unix.

ISAPI

ISAPI è una API utilizzabile per estendere Microsoft IIS, in modo simile a come si userebbe la API di Apache. Apache include un modulo mod_isapi che rispecchia questa funzionalità e permette di usare moduli ISAPI.

Java

La maggior parte dei server di applicazioni, come quelli di Oracle, IBM e BEA forniscono moduli per l'integrazione con il server web Apache. In aggiunta, svariati moduli come mod_jk e mod_webapp permettono la connessione con Tomcat, un contenitore di Servlet e JSP (JavaServer Pages) che fa sempre parte della Apache Software Foundation.

Moduli per altri linguaggi

Questo documento ha descritto moduli per linguaggi lato server popolari come Perl, Python e PHP. Moduli aggiuntivi per altri linguaggi (JavaScript, Haskell, Ruby e altri) si possono trovare nella directory dei moduli di Apache.

2.7 Gestione

Una parte importante dell'amministrazione di server Web comprende la compilazione, la configurazione e il controllo di diversi server.

Strumenti di compilazione

Apache può essere esteso e personalizzato in molti modi differenti. L'integrazione di moduli esterni con il server può talvolta costituire un compito difficile. Strumenti come Apache Toolbox possono semplificare questo compito, fornendo un ambiente di compilazione dotato di menu.

Interfacce Utente per Apache

Apache è configurato tramite file di testo, il che talvolta può risultare ostico, specie per chi provenga da un ambiente Windows. Esistono strumenti grafici open source che facilitano questo compito:

SNMP

SNMP sta per Simple Network Management Protocol. Consente il controllo e la gestione di server di rete, attrezzature e così via. I moduli SNMP per Apache aiutano nella gestione di vasti spiegamenti di server web, misurano la qualità del servizio offerto e l'integrazione di Apache con le preesistenti infrastrutture di gestione.

2.8 Publishing

Gli autori di contenuti Web richiedono uno strumento per gestire tali contenuti e per l'upload sul server. Uno dei protocolli usati a questo scopo è DAV (Distributed Authoring and Versioning). DAV è un'estensione del protocollo HTTP che permette a utenti e applicazioni di pubblicare e modificare contenuti Web. La tecnologia DAV è ampiamente implementata, Microsoft la supporta a livello di sistema operativo (WebFolders) e nella sua suite Office. Lo stesso vale per Apple OS-X e una varietà di prodotti di terze parti come Adobe, Oracle e così via. Il modulo mod_dav per Apache 1.3 si può trovare presso http://www.webdav.org/mod_dav/. In Apache 2.0, il mod_dav è incluso nella distribuzione di base.

Antecedentemente a DAV, Microsoft disponeva di un proprio protocollo per il publishing, integrato nell'applicazione Microsoft FrontPages. Un supporto lato server per FrontPages si può ottenere con i moduli di http://www.rtr.com/Ready-to-Run_Software/, tuttavia, a causa del modo con cui si integrano con Apache, non sono da ritenere sicuri.

2.9 Moduli di Protocollo

Apache 2.0 introduce il concetto di moduli di protocollo. Il che significa che gli sviluppatori possono riutilizzare l'infrastruttura del server Apache per implementare nuovi protocolli, come quelli che si occupano della posta o del trasferimento di file. mod_ftp è un modulo FTP commerciale basato su Apache fornito da Covalent. mod_pop3 è un modulo open source che implementa il protocollo POP3, comunemente usato per recuperare i messaggi di posta dai relativi server.

2.10 Hosting virtuale

Apache fornisce supporto estensivo per l'hosting virtuale, il che realizza la possibilità di servire vari siti web con un singolo server. In Apache 2.0, con i MPM si possono avere svariati processi "figli", ognuno dei quali al servizio di un dominio differente sotto identificativi di utente Unix differenti. Questo è molto importante per la sicurezza in scenari di hosting condiviso, in quanto permette di isolare i clienti l'uno dall'altro. I seguenti sono alcuni moduli addizionali, alternativi, per l'hosting virtuale.

2.11 Supporto commerciale

Apache è il server web d'elezione per svariate entità commerciali, incluse le grandi imprese. Tali compagnie chiedono determinati requisiti alle tecnologie da adottare, specie a quella che costituirà il nucleo della loro strategia Internet, come i server Web. Tali requisiti comprendono prestazioni, stabilità, possibilità di gestione, supporto, servizi professionali e integrazione con i sistemi proprietari. Compagnie commerciali, come IBM, Red Hat e Covalent, forniscono i prodotti e i servizi necessari affinché Apache soddisfi le esigenze della clientela Enterprise.

In aggiunta, svariate altre compagnie ed OEM offrono Apache come server web incluso nei loro prodotti.

3. Progetti ASF

Per quanto Apache sia probabilmente il più popolare, la Apache Software Foundation è la casa madre di molti altri progetti. Questa sezione fornisce una rassegna dei più rilevanti, organizzati con criterio logico. La maggioranza di essi appartiene al progetto Jakarta od al progetto XML. Il progetto Jakarta ospita i progetti basati su Java mentre il progetto XML ospita, manco a farlo apposta, i progetti collegati all'XML.

3.1 Applicazioni e Ambienti

I seguenti sono applicazioni e ambienti di sviluppo che fanno parte di ASF.

3.1.1 Server

I seguenti sono alcuni progetti ASF per il lato server.

Tomcat

Tomcat è la nave ammiraglia del progetto Jakarta. Costituisce l'implementazione ufficiale di riferimento per le tecnologie Servlet Java e JavaServer Pages.

Per saperne di più si consulti la homepage di Tomcat.

JAMES (Java Apache Mail Enterprise Server)

Complementare rispetto alle altre tecnologie Apache lato server, JAMES fornisce un server 100% Java, concepito come completa e portabile soluzione per un motore di posta per l'impresa, basato sui protocolli "aperti" attualmente disponibili (SMTP, POP3, IMAP, HTTP)

Maggiori informazioni si possono trovare qui.

Lucene

Jakarta Lucene è un motore per la ricerca testuale, ad alte prestazioni, perfettamente attrezzato, scritto in Java e parte del progetto Jakarta. Per maggiori informazioni si veda http://jakarta.apache.org/lucene/

Jetspeed

Jetspeed è un portale web scritto in Java. Possiede una API modulare che consente l'aggregazione di differenti fonti di dati (XML, SMTP, iCalendar)

3.1.2 Gestione dei contenuti

I seguenti sono progetti relativi alla gestione dei contenuti

Slide

Slide è un ambiente ad alto livello per la gestione dei contenuti. Concettualmente, fornisce un'organizzazione gerarchica del contenuto binario che può essere immagazzinato in archivi dati arbitrari, eterogenei e distribuiti. In aggiunta, Slide integra servizi di sicurezza, di bloccaggio e di versioning. Provvede anche all'implementazione server e client di WebDAV. Maggiori informazioni sulla home page di Slide

Alexandria

Alexandria è un sistema integrato di gestione della documentazione. Mette insieme tecnologie comuni a molti altri progetti open source come CVS e JavaDoc. L'intento è quello di integrare codice sorgente e documentazione per incoraggiare la documentazione e la condivisione del codice. Maggiori informazioni presso http://jakarta.apache.org/alexandria/index.html

3.1.3 Ambienti

I seguenti sono infrastrutture per lo sviluppo per applicazioni

Turbine

Turbine è un ambiente basato su servlet che permette a esperti sviluppatori Java di sviluppare rapidamente applicazioni web sicure. Turbine mette insieme una piattaforma per eseguire codice Java e componenti riutilizzabili. Alcune delle sue caratteristiche includono: integrazione con sistemi di template, sviluppo secondo il modello MVC, Access Control List, supporto per la localizzazione e così via. Maggiori informazioni si possono trovare sul sito web di Turbine.

Avalon

Per chi abbia familiarità con sistemi Perl o BSD, Avalon è grosso modo l'equivalente di CPAN o della collezione di Port per le tecnologie Java di Apache. Non si limita a fornire linee guida per un deposito comune di codice, ma va oltre: costituisce uno sforzo per creare, progettare, costruire e mantenere una infrastruttura comune per applicazioni server scritte usando il linguaggio Java. Fornisce i mezzi affinché progetti lato server in Java possano essere facilmente integrati e compilati l'uno sull'altro. Ulteriori informazioni si trovano sul sito web di Avalon.

3.2 Presentazione

I seguenti sono sistemi di template, motori di trasformazione e altri progetti relativi a presentazioni.

Cocoon

Cocoon trae vantaggio da altre tecnologie XML di Apache come Xerces, Xalan e FOP per fornire un completo ambiente XML per il publishing. L'ambiente può dialogare con molte fonti di dati diverse e può rendere il contenuto in svariati formati finali come PDF, HTML, XML e RTF. Può essere eseguito come servlet o come programma da linea di comando. È possibile saperne di più, riguardo a Cocoon, sulla homepage del progetto

Velocity

Velocity è un motore di template basato su Java. Può essere usato come utilità indipendente per generare codice sorgente, HTML, relazioni o può essere combinato con altri sistemi per fornire servizi di template. Velocity è basato sul paradigma "Model View Controller", che rafforza la separazione tra il codice Java e il template HTML. È possibile saperne di più su Velocity qui.

AxKit

AxKit è un popolare Application Server basato su XML per mod_perl e Apache. Consente la separazione tra contenuto e presentazione e permette la conversione al volo da XML a ogni altro formato.

Xalan

Xalan è un processore XSLT disponibile per Java e C++. XSL è un linguaggio stylesheet per XML. La T sta per Transformation. XML è valido per l'archiviazione di dati strutturati (informazioni). Talvolta può rendersi necessario visualizzare tali dati o applicare qualche altra trasformazione. Xalan prende il documento XML originale, legge la configurazione per le conversioni (stylesheet) e lo restituisce come HTML, testo semplice o come altro documento XML. Per saperne di più su Xalan si consultino le homepage dei progetti Xalan Java e Xalan C++.

FOP

Dal sito web: FOP è un'applicazione Java che legge l'albero degli oggetti di formattazione e lo trasforma in un documento PDF . FOP prende dunque un documento XML e lo restituisce come PDF, in modo simile a quanto fa Xalan con l'HTML o i file di testo. Per saperne di più su FOP si veda qui.

3.3 Parser e Librerie per l'Accesso ai Documenti

Le seguenti sono differenti librerie che possono essere usate per analizzare e manipolare una varietà di formati di documenti.

Xerces

Il progetto Xerces fornisce un parser XML per una varietà di linguaggi, inclusi Java, C++ e Perl. I binding Perl sono basati sui sorgenti C++. Un parser XML è uno strumento usato per l'accesso programmatico a documenti XML. Ecco una descrizione degli standard supportati da Xerces:

L'iniziale codice di base per il progetto XML di Xerces fu donato da IBM. Maggiori informazioni si possono ottenere presso le homepage Xerces Java, Xerces C++ e Xerces Perl .

Batik

Batik è un toolkit basato su Java per applicazioni che vogliano usare immagini nel formato Scalable Vector Graphics (SVG) per vari scopi come la visualizzazione, la generazione o la manipolazione.

È incentrato su XML e aderente alle specifiche W3C. È un po' atipico rispetto agli altri progetti Apache, in quanto fornisce un componente grafico. Batik fornisce degli hook per estendere la struttura tramite tag personalizzati e permette la conversione da SVG ad altri formati come JPEG o PNG. Si può saperne di più sulla homepage di Batik

POI

Il progetto POI consiste di API per manipolare vari formati di file basati sul formato OLE 2 Compound Document di Microsoft usando soltanto Java. Questo include i documenti Word e Excel. Si possono trovare maggiori informazioni presso http://jakarta.apache.org/poi/

3.4 Interoperabilità

Le seguenti sono librerie per la comunicazione remota e l'interoperabilità tra i server.

SOAP

Apache SOAP ("Simple Object Access Protocol") e Axis sono implementazioni del protocollo SOAP

SOAP è un protocollo leggero per lo scambio di informazioni in ambiente decentralizzato e distribuito. È un protocollo basato su XML che consiste di tre parti:

Fondamentalmente, si può pensare a SOAP come a un sistema di chiamate di procedura remota, basato su HTTP e XML. Da un lato questo comporta verbosità e lentezza rispetto ad altri sistemi. Dall'altro agevola l'interoperabilità, il debugging e lo sviluppo di client e di server per una varietà di linguaggi, dal momento che la maggioranza dei moderni linguaggi dispone di moduli HTTP e XML. Per saperne di più si veda la homepage di Apache SOAP

XML-RPC

Il progetto XML-RPC è un'implementazione Java del protocollo XML-RPC, un protocollo leggero simile a SOAP e suo predecessore.

Sicurezza XML

Il progetto sicurezza di XML fornisce la verifica della firma digitale dei documenti XML per lo scambio sicuro di documenti.

3.5 Sviluppo

Apache Portable Runtime

Il progetto APR fornisce uno strato di portabilità che astrae un certo numero di API per la manipolazione di file, l'accesso alla rete e così via. È scritto in C e funziona sulla maggior parte delle versioni di Unix, su Windows e una varietà di altri sistemi. Costituisce la base di Apache 2.0.

Ant

Ant è uno strumento di compilazione scritto in Java. Dispone di una API modulare e può essere esteso con la creazione di nuovi task. È governato da file di configurazione in XML.

Byte Code Library

La Byte Code Engineering Library (BCEL) è una libreria per analizzare, creare e manipolare i file binari delle classi Java.

Log4j

Questo pacchetto fornisce una infrastruttura per la gestione dei log compatibile con le applicazioni Java. Può essere abilitato all'avvio senza modificare il file binario ed è stato progettato con un occhio alle prestazioni. Può essere trovato presso http://jakarta.apache.org/log4j/

ORO and Regexp

ORO è un pacchetto completo che fornisce supporto alle espressioni regolari per Java. Include il supporto alle espressioni regolari Perl5, alle espressioni glob e così via. Il tutto sotto licenza Apache. Per saperne di più su ORO si veda http://jakarta.apache.org/oro/index.html. Un altro pacchetto leggero, della ASF, per espressioni regolari, è Regexp.

Struts

Struts è un progetto Apache che tenta di trasportare il paradigma progettuale Model-View-Controller (MVC) nello sviluppo web. È basato sulle tecnologie Servlet e JavaServer Pages. La parte "modello" è composta di oggetti Java lato server, che rappresentano lo stato interno dell'applicazione. La parte "vista" è costruita attraverso le JavaServer Pages (JSP), che sono una combinazione di HTML/XML statico e di Java. Le JSP permettono inoltre allo sviluppatore di definire nuovi tag. La parte "controller" consiste di servlet, che accolgono le richieste (GET/POST) del client, agiscono sul modello e aggiornano la vista fornendo la JSP appropriata. È possibile saperne di più sulla pagina del progetto Struts.

Taglibs

La tecnologia JavaServer Pages permette agli sviluppatori di aggiungere funzionalità tramite tag personalizzati. Il progetto Taglibs intende essere un archivio comune per tali estensioni. Include tag per utilità comuni (per es. date), per l'accesso a database SQL e così via.

Per saperne di più su TagLibs si veda http://jakarta.apache.org/taglibs/. Una più ampia documentazione è inclusa nel pacchetto.

Database

OJB è uno strumento per la mappatura di database che permette la persistenza e l'archiviazione di oggetti Java nei database relazionali. Xindice è un database nativo XML per l'archiviazione e l'interrogazione di documenti XML.

Commons

Il progetto Commons fornisce una grande varietà di componenti Java riutilizzabili con minime dipendenze.

3.6 Testing

I seguenti progetti ASF riguardano il testing e l'analisi delle prestazioni.

httpd-test

Il progetto httpd-test fornisce un ambiente di test per il server web Apache e strumenti come flood per il test del carico HTTP.

Cactus

Cactus è un ambiente di test per la verifica di codice Java lato server, come Servlet e EJB.

JMeter

È uno strumento per i test scritto in Java, con un'interfaccia grafica. Si può ottenere presso http://jakarta.apache.org/jmeter/.

Lakta

Lakta è uno strumento end-to-end di testing HTTP.

Watchdog

Il progetto Watchdog è un corredo di set per la convalida delle specifiche Servlet e JavaServer Pages.

4. Dove trovare maggiori informazioni

Risorse aggiuntive relative a Apache

4.1 Siti Web

Alcuni utili siti web

4.2 Libri

L'autore mantiene una lista di libri correlati a questo documento. Non è un elenco esaustivo, ma piuttosto include quei libri che l'autore ha personalmente trovato ben scritti e utili.

4.3 Forum di supporto

È possibile trovare la mailing list degli utenti Apache presso http://httpd.apache.org/lists.html. Esistono liste simili per gli altri progetti documentati qui. Prima di inviare richieste di aiuto si legga il documento delle "Frequently Asked Questions". Si può ottenere supporto anche nel newsgroup comp.infosystems.www.servers.unix presso http://groups.google.com.

Se si desidera un supporto commerciale, si valuti se contattare Covalent, che fornisce supporto di esperti per Apache (ovviamente, a pagamento). Se si sta usando Apache sotto Linux, il proprio venditore Linux potrebbe avere piani di supporto che comprendano anche Apache.

5. Contattare l'Autore

Potete contattarmi all'indirizzo daniel @ rawbyte.com . Suggerimenti e correzioni saranno graditi, vi prego però di non spedirmi messaggi chiedendomi di risolvere i malfunzionamenti della vostra installazione di Apache. Non ho proprio il tempo di rispondere individualmente a tutti. Se avete bisogno di supporto, fate riferimento alle risorse citate sopra.

5.1 Traduzioni

Chiunque desideri contribuire alla traduzione di questo documento dovrebbe utilizzare il sorgente SGML. Si veda http://www.tldp.org per informazioni. Mandatemi una nota così che io possa essere certo che otteniate la versione più recente.

6. Open Content Open Publication License

Open Publication License Draft v1.0, 8 June 1999 (text version)

6.1 REQUIREMENTS ON BOTH UNMODIFIED AND MODIFIED VERSIONS

The Open Publication works may be reproduced and distributed in whole or in part, in any medium physical or electronic, provided that the terms of this license are adhered to, and that this license or an incorporation of it by reference (with any options elected by the author(s) and/or publisher) is displayed in the reproduction.

Proper form for an incorporation by reference is as follows:

Copyright (c) <year> by <author's name or designee>. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, vX.Y or later (the latest version is presently available at http://www.opencontent.org/openpub/). The reference must be immediately followed with any options elected by the author(s) and/or publisher of the document (see section VI).

Commercial redistribution of Open Publication-licensed material is permitted.

Any publication in standard (paper) book form shall require the citation of the original publisher and author. The publisher and author's names shall appear on all outer surfaces of the book. On all outer surfaces of the book the original publisher's name shall be as large as the title of the work and cited as possessive with respect to the title.

6.2 COPYRIGHT

The copyright to each Open Publication is owned by its author(s) or designee.

6.3 SCOPE OF LICENSE

The following license terms apply to all Open Publication works, unless otherwise explicitly stated in the document.

Mere aggregation of Open Publication works or a portion of an Open Publication work with other works or programs on the same media shall not cause this license to apply to those other works. The aggregate work shall contain a notice specifying the inclusion of the Open Publication material and appropriate copyright notice.

SEVERABILITY. If any part of this license is found to be unenforceable in any jurisdiction, the remaining portions of the license remain in force.

NO WARRANTY. Open Publication works are licensed and provided "as is" without warranty of any kind, express or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose or a warranty of non-infringement.

6.4 REQUIREMENTS ON MODIFIED WORKS

All modified versions of documents covered by this license, including translations, anthologies, compilations and partial documents, must meet the following requirements:

6.5 GOOD-PRACTICE RECOMMENDATIONS

In addition to the requirements of this license, it is requested from and strongly recommended of redistributors that:

6.6 LICENSE OPTIONS

The author(s) and/or publisher of an Open Publication-licensed document may elect certain options by appending language to the reference to or copy of the license. These options are considered part of the license instance and must be included with the license (or its incorporation by reference) in derived works.

A. To prohibit distribution of substantively modified versions without the explicit permission of the author(s). "Substantive modification" is defined as a change to the semantic content of the document, and excludes mere changes in format or typographical corrections.

To accomplish this, add the phrase 'Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder.' to the license reference or copy.

B. To prohibit any publication of this work or derivative works in whole or in part in standard (paper) book form for commercial purposes is prohibited unless prior permission is obtained from the copyright holder.

To accomplish this, add the phrase 'Distribution of the work or derivative of the work in any standard (paper) book form is prohibited unless prior permission is obtained from the copyright holder.' to the license reference or copy.