Les Intercepteurs - ESISA.pdf
-
Upload
mohamed-el-mourabit -
Category
Documents
-
view
25 -
download
4
Transcript of Les Intercepteurs - ESISA.pdf
-
Par N. Chenfour
5.1 Principe de base
Avant dexpliquer le principe des Intercepteurs (Interceptors), il faut
comprendre le cycle de vie dune action qui se droule en six tapes :
1. La requte est tout dabord reue par le framework, laide de FilterDispatcher du package org.apache.struts2.dispatcher
ou encore StrutsPrepareAndExecuteFilter du package
org.apache.struts2.dispatcher.ng.filter (puisque la classe
FilterDispatcher est devenue deprecated ). Le framework
dtermine les composantes relies la requte : Interceptors,
action et results. Et ce conformment au contenu du fichier
struts.xml ou aux dcisions prises par la Convention Plugin. Les
Interceptor
Results : Pages JSP
Action
FilterDispatcher
Chapitre 5. Les Intercepteurs
-
N. Chenfour 2
interceptors sont crs une fois pour toutes au niveau session, alors
que laction est instancie ce stade mme et chaque nouvelle
requte une nouvelle instance est cre.
2. La requte passe ensuite par une srie dintercepteurs qui sont programms pour fournir une liste de prtraitements avant que la
requte narrive finalement laction.
3. Laction est ensuite invoque par lintermdiaire de lune de ses mthodes daction.
4. Le vue est enfin appele. Elle pourra accder laction pour rcuprer des donnes calcules par celle-ci.
5. La requte passe de nouveau par la liste des intercepteurs pour offrir la possibilit dappliquer un post-traitement ou tout traitement
de nettoyage pouvant tre programm en ce niveau.
6. en fin la rponse HTML est retourne au client final.
5.2 Liste dintercepteurs prdfinis
Ci-dessous une liste dintercepteurs issus directement de la classe
AbstractInterceptor ; Mais, il existe bien dautres qui sont des classes
filles des classes suivantes :
ActionAutowiringInterceptor
AliasInterceptor
AnnotationParameterFilterIntereptor
ChainingInterceptor
ClearSessionInterceptor
ConversionErrorInterceptor
CookieInterceptor
CreateSessionInterceptor
ExceptionMappingInterceptor
FileUploadInterceptor
I18nInterceptor
LoggingInterceptor
-
N. Chenfour 3
MethodFilterInterceptor ParametersInterceptor ModelDrivenInterceptor ParameterFilterInterceptor
ParameterRemoverInterceptor
ProfilingActivationInterceptor
RolesInterceptor
ScopedModelDrivenInterceptor
ScopeInterceptor
ServletConfigInterceptor StaticParametersInterceptor
TimerInterceptor
5.3 Intercepteur avec Injection de Dpendances
5.3.1 Injection des paramtres de formulaire
Nous avons dj vue (fin du chapitre 3) que les paramtres dun
formulaire sont injects dans laction laide de setters appropris quil
faut prvoir dans la classe daction. Le composant qui se charge dappeler
ces setters est un intercepteur qui fait donc lopration en prtraitement
avant que la mthode daction ne soit excute. Lintercepteur en question
est le ParametersInterceptor .
5.3.2 Injection base sur les interfaces Interface Injection
Lintercepteur ServletConfigInterceptor est conu pour injecter
toutes les proprits dont une action peut avoir besoin, condition quelle
en soit consciente (aware), cd quelle doit implmenter linterface
approprie. On site :
-
N. Chenfour 4
- ServletContextAware
- ServletRequestAware
- ServletResponseAware
- ParameterAware
- RequestAware
- SessionAware
- ApplicationAware
- PrincipalAware
Par la suite quelques exemples dinjections utiles bases sur cet
intercepteur :
Injection dun objet HttpServeletRequest
- Interface : ServletRequestAware
- Mthode implementer :
public void setServletRequest(HttpServletRequest request)
Exemple :
public class UneAction implements ServletRequestAware {
private HttpServletRequest request;
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public String execute() throws Exception {
return success;
}
}
-
N. Chenfour 5
Injection dun objet HttpServletResponse
- Interface : ServletResponseAware
- Mthode implmenter :
void setServletResponse(HttpServletResponse response)
Injection dun object ServletContext
- Interface : ServletContextAware
- Mthode implmenter :
void setServletContext(ServletContext context)
Injection des attributs dune Session
- Interface : SessionAware
- Mthode implmenter :
void setSession(Map session)
Injection des paramtres (autre solution)
- Interface : ParameterAware
- Mthode implmenter :
void setParameters(Map parameters)
-
N. Chenfour 6
5.4 Le ModelDrivenIntercepteur
Injection dans le modle rcupr par lintercepteur
public class Produit { private String id,
private String name; private double price; private double amount; ... }
Id : Desig : PU : QS :
public class ProduitAction implements ModelDriven { private Produit produit; public ProduitAction() { produit = new Produit(); } public Produit getModel() { return produit; } ... }
-
N. Chenfour 7
5.5 Ralisation de nouveaux intercepteurs
La ralisation dun intercepteur exige le passage par les tapes suivantes :
1. Raliser la classe intercepteur qui devrait implmenter linterface
Interceptor du package
com.opensymphony.xwork2.interceptor :
public interface Interceptor {
public void init();
public void destroy();
public String intercept(ActionInvocation a);
}
Ceci peut tre ralis par extension de la classe abstraite
AbstractInterceptor du mme package qui implmente
linterface Interceptor en fournissant une implmentation vide
des deux mthodes init() et destroy().
2. Fournir une implmentation de la mthode intercept(). Son
paramtre ActionInvocation donne accs aussi bien laction
quau rsultat (la vue). Les deux mthodes suivantes sont
disponibles :
- getAction() : Object
- getResult() : Result
Il est alors possible de communiquer la donne quon veut laction
une fois rcupre.
-
N. Chenfour 8
Exemple 1 :
package com.acs.lab.struts2; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class TestInterceptor extends AbstractInterceptor { public String intercept(ActionInvocation invocation) throws Exception { Action1 a = (Action1)invocation.getAction(); a.setData(); return invocation.invoke(); } }
En supposant que lon dispose dune action qui sappelle Action1 qui
offre une mthode setData().
3. Configuration : lintercepteur doit ensuite tre configur dans le
fichier struts.xml
/result.jsp
-
N. Chenfour 9
Remarque :
Lextension du package struts-default permet de charger les
intercepteurs par dfaut.
Exemple 2 : Code de lintercepteur : Un intercepteur qui gre une base de donnes stock en communicant une rfrence sur celle-ci laction : package com.acs.lab.struts2; import java.util.HashMap; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class StockInterceptor extends AbstractInterceptor { private HashMap stock; public StockInterceptor() { stock = new HashMap(); } public String intercept(ActionInvocation invocation) throws Exception
{ ProduitAction action = (ProduitAction)invocation.getAction(); action.setStock(stock); return invocation.invoke(); } }
-
N. Chenfour 10
Code de laction : Celle-ci fourni 3 mthodes daction :
- insert - select - list
public class ProduitAction implements ModelDriven { private HashMap stock; private Produit produit; private Collection produits = new Vector(); public ProduitAction() { produit = new Produit(); } public String insert() { stock.put(produit.getId(), produit); return "success"; } public String select() { String id = produit.getId(); produit = stock.get(id); if (produit==null) return "error"; else return "success"; } public String list() { produits = stock.values(); return "success"; } public Produit getModel() { return produit; } public Produit getProduit() { return produit; } public Collection getProduits() { return produits; } public HashMap getStock() { return stock; } public void setStock(HashMap stock) { this.stock = stock; } }
-
N. Chenfour 11
Configuration :
/insererResponse.jsp
/selectResponse.jsp
/errorSelect.jsp
/lister.jsp