ridruejo@apache.org
tito.rizzo@tiscali.it
e revisione a cura di Giuseppe Briotti, g.briotti@mclink.it
.
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/.
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.
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.
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:
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.
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à.
Apache 1.3 è stato portato su una grande varietà di piattaforme Unix, ed è il server Web più largamente utilizzato in Internet.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Apache fornisce svariati moduli orientati alla sicurezza per regolamentare gli accessi al server.
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.
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.
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.
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.
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.
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/.
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.
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/
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.
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.
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:
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.
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:
Svariati moduli permettono l'integrazione con i linguaggi e le tecnologie Microsoft quali la struttura .Net o le Active Server Pages.
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, 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 è 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.
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.
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.
Una parte importante dell'amministrazione di server Web comprende la compilazione, la configurazione e il controllo di diversi server.
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.
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 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.
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.
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.
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.
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.
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.
I seguenti sono applicazioni e ambienti di sviluppo che fanno parte di ASF.
I seguenti sono alcuni progetti ASF per il lato server.
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.
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.
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 è un portale web scritto in Java. Possiede una API modulare che consente l'aggregazione di differenti fonti di dati (XML, SMTP, iCalendar)
I seguenti sono progetti relativi alla gestione dei contenuti
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 è 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
I seguenti sono infrastrutture per lo sviluppo per applicazioni
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.
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.
I seguenti sono sistemi di template, motori di trasformazione e altri progetti relativi a presentazioni.
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 è 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 è 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 è 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++.
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.
Le seguenti sono differenti librerie che possono essere usate per analizzare e manipolare una varietà di formati di documenti.
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:
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
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/
Le seguenti sono librerie per la comunicazione remota e l'interoperabilità tra i server.
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:
Il progetto XML-RPC è un'implementazione Java del protocollo XML-RPC, un protocollo leggero simile a SOAP e suo predecessore.
Il progetto sicurezza di XML fornisce la verifica della firma digitale dei documenti XML per lo scambio sicuro di documenti.
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 è 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.
La Byte Code Engineering Library (BCEL) è una libreria per analizzare, creare e manipolare i file binari delle classi Java.
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 è 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 è 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.
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.
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.
Il progetto Commons fornisce una grande varietà di componenti Java riutilizzabili con minime dipendenze.
I seguenti progetti ASF riguardano il testing e l'analisi delle prestazioni.
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 è un ambiente di test per la verifica di codice Java lato server, come Servlet e EJB.
È uno strumento per i test scritto in Java, con un'interfaccia grafica. Si può ottenere presso http://jakarta.apache.org/jmeter/.
Lakta è uno strumento end-to-end di testing HTTP.
Il progetto Watchdog è un corredo di set per la convalida delle specifiche Servlet e JavaServer Pages.
Risorse aggiuntive relative a Apache
Alcuni utili siti web
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.
È 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.
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.
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.
Open Publication License Draft v1.0, 8 June 1999 (text version)
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.
The copyright to each Open Publication is owned by its author(s) or designee.
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.
All modified versions of documents covered by this license, including translations, anthologies, compilations and partial documents, must meet the following requirements:
In addition to the requirements of this license, it is requested from and strongly recommended of redistributors that:
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.