Cos’è Apache Struts

Il framework Struts e il pattern Model View Controller nello sviluppo di applicazioni web Java

Struts è un framework open source utilizzato per lo sviluppo di applicazioni web su piattaforma Java EE. Apache Struts introduce il pattern MVC tramite l’utilizzo delle Servlet separando le varie parti dell’applicazione (le interfacce grafiche scritte in JSP/HTML, dalla parte di modello (classi Java) e dalla parte di logica (Servlet). Struts consente una facile manutenibilità del codice e di diminuire i tempi di sviluppo della web application consentendo di far lavorare i vari team di sviluppo in parallelo e in maniera autonoma. Nello specifico, in Struts il Model View Control è così costituito:

  • Model: insieme di classi java (tipicamente sono dei Java Bean) che implementano la logica applicativa ed hanno il compito di interagire con la persistenza dei dati;
  • View: si tratta di pagine scritte in HTML/JSP che hanno il compito di mostrare i risultati all’utente;
  • Controller: gestisce le richieste dell’utente e seleziona la view da visualizzare.

Per gestire le richieste dell’utente e la scelta della view da visualizzare viene utilizzato il file struts-config.xml che definisce i componenti dell’applicazione:

  • global-forwards: si tratta di variabili globali utilizzate per l’indirizzamento delle action;
  • form-beans: sono i form utilizzati nelle pagine JSP;
  • action-mappings: in questa sezione vengono dichiarate e configurate le action per gestire le richieste dell’utente. In questa sezione vengono indicate le pagine da visualizzare quando l’utente richieste un’operazione associata a quell’action;
  • message-resources: utilizzati per definire dei messaggi;
  • plug-in: contiene possibili estensioni di Struts.

Ecco un esempio di del file struts-config.xml in cui vengono definiti due form, due variabili globali e due action, una gestisce l’inserimento di una stringa da parte dell’utente, e l’altra visualizza i dati inseriti.

    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <!DOCTYPE struts-config PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
        "http://struts.apache.org/dtds/struts-config_1_3.dtd">
    <struts-config>
    
        <form-beans>
            <form-bean name="helloUserForm" type="stage.adv.form.HelloUserForm" />
            <form-bean name="inputStringForm" type="stage.adv.form.InputStringForm" />
        </form-beans>
    
        <global-forwards>
            <forward name="helloWorld" path="/helloWorld.do" />
            <forward name="inputString" path="/inputString.do" />
        </global-forwards>
    
        <action-mappings>
            <action path="/helloWorld" type="stage.adv.struts.HelloUserAction"
                name="helloUserForm">
                <forward name="success" path="/pages/success-page.jsp" />
                <forward name="error" path="/pages/error-page.jsp" />
            </action>
    
            <action path="/inputString" type="stage.adv.struts.InputStringAction"
                input="/" validate="false" name="inputStringForm">
                <forward name="success" path="/pages/string-page.jsp" />
            </action>
    
        </action-mappings>
    
    </struts-config>

Un altro file molto importante è il file web.xml, si tratta di un file di configurazione per la web application, come le action utilizzate e la prima pagina da visualizzare (detta welcome page).

    <?xml version="1.0" encoding="ISO-8859-1"?>
        <!DOCTYPE web-app PUBLIC
            "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
            "http://java.sun.com/dtd/web-app_2_3.dtd">
    
    <web-app>
        <display-name>Struts Blank Application</display-name>
    
        <!-- Standard Action Servlet Configuration -->
        <servlet>
            <servlet-name<action</servlet-name>
            <servlet-class<org.apache.struts.action.ActionServlet</servlet-class>
            <init-param>
                <param-name<config</param-name>
                <param-value</WEB-INF/struts-config.xml</param-value>
            </init-param>
            <load-on-startup<2</load-on-startup>
        </servlet>
    
        <!-- Standard Action Servlet Mapping -->
        <servlet-mapping>
            <servlet-name<action</servlet-name>
            <url-pattern<*.do</url-pattern>
        </servlet-mapping>
    
        <!-- The Usual Welcome File List -->
        <welcome-file-list>
            <welcome-file<index.jsp</welcome-file>
        </welcome-file-list>
    
    </web-app>

Le action dovranno fare l’override del metodo execute che ha il compito di gestire la richiesta dell’utente e instradare la richiesta al framework indicando il passo successivo da effettuare. Nel nostro esempio, se l’utente ha inserito una stringa, nell’action corrispondente dobbiamo recuperare i dati contenuti nell’ActionForm e salvarli da qualche parte (nel nostro caso in sessione). Infine, nel metodo execute bisogna indicare cosa fare dopo, nel nostro caso inoltriamo un messaggio di “success” che nel file struts-config.xml abbiamo indicato che la pagina da visualizzare deve essere successPage.jsp.

  public class InputStringAction extends Action {
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
      HttpServletResponse response) throws Exception {
      
      String inputString;
      
      InputStringForm inputStringForm = (InputStringForm) form;
      inputString = inputStringForm.getInputString();
      request.getSession().setAttribute("inputString", inputString);
      
      return mapping.findForward("success");
    }
  }

Una possibile struttura della pagina success-page.jsp è la seguente:

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html<
    <head<
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title<Titolo</title>
    </head>
    <body>
        Hai inserito:
        <%=session.getAttribute("inputString")%>
    
    </body>
    </html>

Avendo definito nel struts-config.xml anche la error-page.jsp si potrebbe verificare nella InputStringAction che se il dato inserito è null si passi come messaggio “error”.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *