I Plugin di Struts sono estensioni modulari del controller di Struts. Introdotti con Struts 1.1, sono definiti dall'interfaccia org.apache.struts.action.Plugin. Risultano utili quando si allocano risorse o si preparano connessioni a database o su risorse JNDI.
Questa interfaccia definisce due metodi init()
e destroy()
, ovvero i metodi del ciclo di vita dei Plugin.
init()
Il metodo init()
rappresenta l'inizio della vita del plugin: viene invocato quando il container di JSP/Servlet avvia l'applicazione Web contenente il Plugin. Esaminiamone la firma:
public void init(ActionServlet servlet,
ApplicationConfig applicationConfig
) throws javax.servlet.ServletException;
Quando viene lanciato, il metodo init()
riceve un riferimento all'ActionServlet
e all'ApplicationConfig
e viene utilizzato per caricare e inizializzare risorse necessarie al Plugin.
Il riferimento ad ActionServlet
permette di referenziare le informazioni del Controller mentre l'oggetto ApplicationConfig
fornisce l'accesso alle informazioni di configurazione che descrivono l'applicazione Struts.
destroy()
Il metodo destroy()
termina la vita del Plugin: viene invocato ogni volta che il container di JSP/Servlet arresta l'applicazione Web contenente il Plugin. Questo metodo risulta molto utile perché ci sonsente di rilasciare le risorse allocate dal metodo init()
. La sua firma è molto semplice:
public void destroy();
Creare un Plugin
Ecco i passi necessari alla creazione di un Plugin:
- Creare una classe che implementi l'interfaccia
org.apache.struts.action.Plugin
- Aggiungere un costruttore di default vuoto
- Implementare i metodi
init()
edestroy()
- Compilare il Plugin e spostarlo nel classpath dell'applicazione Web
- Aggiungere l'elemento <plug-in> al file struts-config.xml
Ecco un esempio di plugin (Vedi codice completo):
public void init(ActionServlet servlet, ModuleConfig applicationConfig) throws javax.servlet.ServletException {
System.out.println("---->The Plugin is starting<----");
Properties properties = new Properties();
try {
File file = new File("c:/info/startup.info");
// Crea l'input stream
FileInputStream fis = new FileInputStream(file);
// Carica le proprietà
properties.load(fis);
ServletContext context = servlet.getServletContext();
// ...
L'obiettivo di questo Plugin è quello di rendere disponibili un set di proprietà all'avvio dell'applicazione. Per testarlo non ci resta che:
- Compilare e includere la classe del Plugin nel classpath (spostando il file in una cartella dell'applicazione, nel nostro caso si chiama
esempio
) - Aggiungere l'elemento <plug-in> al file di configurazione
struts-config.xml
- Riavviare l'applicazione.
Ecco come appare il file struts-config.xml
:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<form-beans>
<form-bean name="lookupForm" type="esempio.LookupForm" />
</form-beans>
<action-mappings>
<action path="/Lookup" type="esempio.LookupAction" name="lookupForm" >
<forward name="success" path="/quote.jsp" />
<forward name="failure" path="/index.jsp" />
</action>
</action-mappings>
<plug-in className="esempio.EsempioPlugin" />
</struts-config>