# Apache Struts

In informatica Apache Struts è un framework open source per lo sviluppo di applicazioni web su piattaforma Java EE. Inizialmente sviluppato come sotto-progetto di Apache Jakarta, ma ora divenuto un progetto a sé, estende le Java Servlet, incoraggiando gli sviluppatori all'utilizzo del design pattern Model-View-Controller (MVC). Il suo ideatore è Craig McClanahan ed è stato donato alla Apache Software Foundation nel maggio del 2000 da parte di IBM.
L'utilizzo di Struts permette lo sviluppo di web application di notevoli dimensioni; inoltre agevola la suddivisione dello sviluppo del progetto fra vari sotto-team. In altre parole, i web designer, e i vari gruppi di sviluppatori possono gestire in parallelo e autonomamente la loro parte del progetto. Tra le funzionalità offerte c'è la i18N, ossia l'internazionalizzazione, una potente tag library e la validazione dei form.

## Descrizione

Il framework di Struts è un insieme di classi ed interfacce che costituiscono l'infrastruttura per costruire Web Application Java EE conformi al design pattern MVC. Questo framework gestisce tutte le richieste client e smista il flusso applicativo in base alla logica configurata. Si potrebbe definire come la “spina dorsale” di una applicazione che adotta tale framework.
Tutta la configurazione dell'applicazione è contenuta all'interno di uno specifico file XML che viene letto in fase di start-up dell'applicazione e definisce le associazioni tra i vari sottoelementi che compongono il sistema. Sono di seguito descritti i vantaggi di cui beneficia un'applicazione realizzata con il supporto del framework Struts.

### Rapidità di sviluppo

A differenza di quanto avveniva utilizzando il JSP Model 1, è possibile sviluppare in parallelo le varie parti dell'applicazione, view (JSP/HTML) e logica di business (Java) sfruttando al meglio le conoscenze dei componenti del team di sviluppo. Si possono utilizzare sviluppatori meno esperti e anche con poche conoscenze di Java per la realizzazione delle view, permettendo agli sviluppatori Java più esperti di concentrarsi sulla realizzazione della business logic. La versione 2.0 di Struts (Struts2) garantisce un'ulteriore riduzione dei tempi di sviluppo grazie ad un'ulteriore semplificazione della logica e della corrispettiva implementazione del framework.

### Manutenibilità

L'applicazione è costituita da livelli logici ben distinti. Una modifica in uno dei livelli non comporta modifiche negli altri. Ad esempio una modifica ad una pagina JSP non ha impatto sulla logica di controllo o sulla logica di business.

### Modularità e Riusabilità

I diversi ruoli dell'applicazione sono affidati a diversi componenti. Ciò consente di sviluppare codice modulare e più facilmente riutilizzabile.
Per quanto riguarda il livello presentazione (la view del pattern MVC), Struts supporta diverse tecnologie, inclusi JSP, XML/XSLT, Java Server Faces (JSF), Cocoon, Swing (JFC) e Velocity. Struts permette la gestione della internazionalizzazione ("I18N") dei contenuti, in pratica permette la gestione centralizzata dei file contenenti le stringhe testuali da visualizzare in dipendenza alla lingua dichiarata dal browser.
Un'altra caratteristica è la gestione automatica del pool delle connessioni al database, sollevando lo sviluppatore da tale incarico; ogni volta che bisogna accedere al database, si dichiara che è necessaria una connessione e il framework restituisce un handler alla connessione.
Per quanto riguarda il livello di modellazione dei dati sono supportati i JavaBean e EJB. Struts lega i suoi componenti in base alle direttive contenute in un file XML, il file struts-config.xml. In questo file vengono configurati i componenti e le interazioni fra gli stessi.

## Altri framework MVC

Anche se Struts è molto ben documentato, affidabile e diffuso, di recente vede la concorrenza di altri framework MVC più leggeri, come Spring e Tapestry e di altri come XWork e il più evoluto WebWork.