Per caricare e creare all'avvio tutti i componenti necessari all'applicazione, Struts fa riferimento ad un file di configurazione chiamato struts-config.xml
. Questo file ci permette di specificare in maniera dichiarativa il comportamento dei componenti del framework, evitando che le informazioni e il comportamento siano inseriti rigidamente nel codice delle applicazioni.
Questo fornisce agli sviluppatori la flessibilità necessaria ad inserire le proprie estensioni, che il framework può utilizzare in maniera dinamica.
Lo stuts-config si basa sul formato XML e può essere validato con il DTD di Struts, analizziamone la struttura.
Il tag root dello struts-config è <struts-config>
, all'interno del quale troviamo cinque sezioni:
- global-forwards
- form-beans
- action-mappings
- message-resources
- plug-in
In questa lezione le presentiamo brevemente, ma ce ne occuperemo più approfonditamente nel corso della guida.
global-forwards
In questa sezione possiamo creare delle associazioni tra particolari nomi (che specificano azioni del controller) e i relativi percorsi (che specificano delle viste), stabilendo dei forward validi a livello "globale" nell'applicazione.
In altre parole non si fa altro che mappare le condizioni di ritorno di una richiesta con particolari Jsp. Lo facciamo utilizzando un elemento <forward>
per ogni associazione, grazie alle proprietà name
e path
.
Un esempio può essere dato da una pagina globale per gli errori, scrivendo una entry nel global-fowards
in questo modo:
<global-forwards>
<forward name="error" path="/error.jsp"/>
</global-forwards>
Grazie a questa configurazione, quando in caso di errore viene richiamata l'action error
, l'applicazione inoltra la richiesta dell'utente alla Jsp con path /error.jsp
.
Analizziamo gli attributi più importanti per configurare un global-forward:
Attributo | Descrizione |
---|---|
className |
Serve a dichiarare la classe che estende il bean di configurazione e che manterrà tutte le informazioni di forward. Se non specificata, la classe predefinita sarà org.apache.struts.action.ForwardConfig |
Name |
È il nome (unico) che servirà a riferirsi a questo forward nell'applicazione. Questo attributo è obbligatorio |
path |
È l'URI verso cui dovrebbe avvenire il forward. È un attributo obbligatorio e deve cominciare con il carattere "/" |
form-beans
La seconda parte serve a definire i form bean, particolari classi che contengono i dati inseriti in un form all'interno di una Jsp. Si dichiara uno o più form bean nel seguente modo:
<form-beans>
<form-bean name="..." type="..." />
</form-beans>
Ecco gli attributi più importanti per configurare un form bean:
Attributo | Descrizione |
---|---|
className |
Quando non si vuole utilizzare il bean di configurazione standard di Struts, bisogna specificare in questo attributo la classe creata nell'applicazione che la sostituisce |
Name |
È il nome (unico) che servirà a riferirsi a questo form bean in tutta l'applicazione. Questo attributo è obbligatorio |
Type |
Il nome di una classe Java che estende la classe ActionForm di Struts |
Analizzeremo meglio la struttura e le tipologie dei form bean nei capitoli successivi.
action-mappings
In questa sezione definiamo le action. Per ogni azione inseriamo un elemento <action> e ne specifichiamo sia le caratteristiche (grazie alle proprietà come path
, name
, parameters
, etc.) sia i forward dell'azione stessa (grazie ad elementi <forward>
). Ecco come pùo presentarsi la dichiarazione di una action:
<action-mappings>
<action path="/..." name="..." scope="..." type="..."
parameter="..." validate="...">
<forward name="..." path="/..." />
</action>
</action-mappings>
Analizziamo gli attributi più importanti per definire un action-mapping:
Attributo | Descrizione | Necessità |
---|---|---|
path |
È il percorso per la request inviata. Deve iniziare con il carattere "/" e senza l'estensione del nome del file. In altre parole è il nome dell'azione | obbligatorio |
name |
È il nome del form bean associato all'azione | facoltativo |
input |
Il path per il modulo di immissione dati verso il quale deve essere reindirizzato il controllo se si verifica un errore di validazione | obbligatorio se è specificato l'attributo name |
validate |
Valore booleano (false o true ) che indica se il metodo validate() del form bean, deve essere invocato prima di eseguire l'action, per default è true |
facoltativo |
scope |
Indica quale visibilità abbia il form bean e assumere i valori request (relativo solamente alla sola richiesta) o session (relativo per tutta la sessione dell'utente) |
facoltativo |
Forward |
Questo elemento ci permette di indicare il nome (attributo name ) e il path (attributo path ) di una servlet o di una pagina JSP verso cui verrà effettuato il forward |
facoltativo, può non essere dichiarato se presenti gli attributi type o include . |
type |
È usato per elaborare la request se gli attributi forward o include non sono specificati. Si deve dichiarare il nome di una classe Java che estende la org.apache.struts.action.Action |
facoltativo ed esclusivo rispetto a forward e include |
include |
Indica il path di una servlet o di una pagina JSP che saranno incluse nella response | facoltativo ed esclusivo rispetto a forward e type |
attribute |
Serve a dichiarare il nome di un attributo necessario ad accedere al form bean dell'action da dichiarare (vedremo meglio questo meccanismo in seguito) | facoltativo e ha precedenza rispetto all'attributo name |
parameter |
È utilizzato per passare informazioni extra all'istanza dell'action selezionata. All'interno della action, possiamo recuperare un parametro definito in questo modo grazie al metodo getParameter() |
facoltativo |
className |
Serve ad indicare una classe alternativa per il mapping e la configurazione dell'action. Di default Struts usa org.apache.struts.ActionMapping |
facoltativo |
Ecco un esempio di action mapping, in cui associamo il path "/azione"
alla classe it.html.struts.MyAction
, indichiamo che utilizzeremo il form myForm
e che per gli errori ci serviamo della vista dataerror.jsp
:
<action path = "/azione"
type = "it.html.struts.MyAction"
name = "myForm"
input = "/WEB-INF/jsp/dataError.jsp">
<forward name="OK" path="/WEB-INF/jsp/viewResult.jsp"/>
<forward name="ERROR" path="/WEB-INF/jsp/busError.jsp"/>
</action>
message-resources
I message-resources
, sono classi utili per gestire i messaggi in modo unificato nell'applicazione. Sono particolarmente utili per applicazioni multilingua.
<message-resources parameter="MessageResources" />
Vedremo che nelle viste si farà riferimento a delle chiavi (key
) che saranno poi associate ai messaggi corrispondenti.
plug-in
Infine abbiamo la parte dedicate alla dichiarazione dei plugin usati nell'applicazione. Osserviamo come aggiungere alla nostra applicazione uno dei plugin più utilizzati del framework, il validator che permette di validare i parametri inseriti in un form:
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value="/org/apache/struts/validator/validator-rules.xml,
/WEB-INF/validation.xml"/>
</plug-in>
File di configurazione multipli
Nei progetti di grandi dimensioni è possibile specificare più di un file di configurazione. Ciò consente, ad esempio, l'importazione di componenti specifici per particolari rami dell'applicazione, o di avere più applicazioni Struts sullo stesso server.
Per dichiarare un nuovo ramo dell'applicazione, ad esempio la sezione blog, dobbiamo agire sul web.xml
ed aggiungere un parametro all'elemento <servlet>
<init-param>
<param-name>config/blog</param-name>
<param-value>/WEB-INF/struts-blog-config.xml</param-value>
</init-param>