Il RequestProcessor è la classe da riscrivere quando si vuole personalizzare il processing dell'ActionServlet.
Essa contiene un entry point predefinito che viene invocato dal controller di Struts con ciascuna richiesta. Questo entry point si chiama processPreprocess()
.
Se si desidera aggiungere il proprio processing specializzato al Controller è necessario implementare il metodo processPreprocess()
, aggiungendo la specifica logica e restituendo true per continuare con il processing normale. Se si desidera terminare il processing normale, restituire false per dire al controller che la richiesta corrente è completa.
Ecco un esempio di implementazione di default processPreprocess()
:
protected boolean processPreprocess(HttpServletRequest request, HttpServletResponse response) {
return true;
}
Per creare il proprio RequestProcessor è necessario seguire gli step seguenti:
- Creare una classe che estende org.apache.struts.action.RequestProcessor;
- Aggiungere un costruttore di default vuoto;
- Implementare il metodo
processPreprocess()
Ecco di seguito il codice per creare il RequestProcessor:
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
import java.util.*;
import org.apache.struts.action.RequestProcessor;
public class EsempioRequestProcessor extends RequestProcessor {
public EsempioRequestProcessor() { }
public boolean processPreprocess(HttpServletRequest request, HttpServletResponse response) {
System.out.println("-------------processPreprocess Logging-------------");
System.out.println("RequestedURI = " + request.getRequestURI());
System.out.println("Protocol = " + request.getProtocol());
System.out.println("Remote Address = " + request.getRemoteAddr());
System.out.println("Remote Host = " + request.getRemoteHost());
System.out.println("Remote User = " + request.getRemoteUser());
System.out.println("Requested Session Id = " + request.getRequestedSessionId());
return true;
}
}
Nel metodo processPreprocess()
reperiamo le informazioni memorizzate in request ed effettuiamo un log.
Una volta che il log è completato, il metodo processPreprocess
ritorna il valore boolean true e il processing normale prosegue.
Se il metodo processPreprocess avesse restituito false, il Controller avrebbe terminato il normale processing e l'azione non sarebbe mai stata eseguita.
Per effettuare il deploy del nostro RequestProcessor dobbiamo:
- Compilare il nostro RequestProcessor e metterlo nel classpath dell'applicazione.
- Aggiungere l'elemento <controller> al file di configurazione dell'applicazione struts-config.xml.
Ecco il contenuto totale del 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="fulvios.LookupAction" name="lookupForm" >
<forward name="success" path="/quote.jsp" />
<forward name="failure" path="/index.jsp" />
</action>
</action-mappings>
<controller processorClass="esempio.EsempioRequestProcessor" />
<plug-in className="esempio.EsempioPlugin" />
</struts-config>