Struts2
Khadija FERJANI
tutorialspoint.
Struts 2
● Struts 2 est un framework extensible de
création des applications web en java.
Architecture
● Model View Controller (MVC).
● Model – Le niveau le plus pas du pattern.
Responsable de la gestion des informations.
● View – C'est le niveau responsible d'afficher les
informations à l'utilisateur.
● Controller – C'est le niveau qui controle les
interaction entre le modèle et la vue.
MVC2
Cycle
● L'utilisateur envoie une requête au serveur pour
demander des resources (pages, ..).
● Le FilterDispatcher traite la requête et détermine la bonne
Action.
● Les intercepteurs configurés sont exécutés (validation, ..).
● L'action est exécutée pour effectuer l'opération
demandée.
● A nouveau, les intercepteurs configurés sont exécutés
(validation, ..).
● Pour finir, le résultat est préparé par la View et le résultat
est retourné à l'utilisateur.
[Link]
● Le fichier de configration [Link] est un fichier
de configuration JEE.
● Il détermine comment le servlet container traite
les requêtes HTTP.
● C'est le point d'entrée d'une application web.
● Le point d'entrée d'une application Struts2
application est un filtre (FilterDispatcher) qui est
défini dans le [Link] (deployment descriptor).
● <?xml version="1.0" encoding="UTF-8"?>
● <web-app
xmlns:xsi="[Link]
● xmlns="[Link]
xmlns:web="[Link]
xsd"
● xsi:schemaLocation="[Link]
● [Link]
● id="WebApp_ID" version="3.0">
● <display-name>Struts 2</display-name>
● <welcome-file-list>
● <welcome-file>[Link]</welcome-file>
● </welcome-file-list>
● <filter>
● <filter-name>struts2</filter-name>
● <filter-class>
● [Link]
● </filter-class>
● </filter>
●
● <filter-mapping>
● <filter-name>struts2</filter-name>
● <url-pattern>/*</url-pattern>
● </filter-mapping>
●
● </web-app>
[Link]
● Le fichier [Link] file contient les informations
de configuration.
● Les informations seront modifiées au cours de
développement des actions.
● Ce fichier permet de surcharger les
configurations par défaut, par exemple
[Link] = false
● <struts>
● <constant name="[Link]" value="true" />
● <package name="helloworld" extends="struts-default">
●
● <action name="hello"
● class="[Link]"
● method="execute">
● <result name="success">/[Link]</result>
● </action>
●
● </package>
●
● </struts>
Actions
● Les actions sont le core du framework Struts2.
● Chaque URL est mappée à une action spécifique
qui fournit le traitement nécessaire pour répondre
à la requête de l'utilisateur.
● Les actions jouent un role important dans le
transfert d'informations à la vue (JSP, Velocity, ..)
● Les actions “aident” le framework à décider du
résulat qu'il faut retourner à la vue en tant que
réponse à une requête.
Actions - Conditions
● Une méthode sans argument (ex execute)
● Cette méthode doit retourner une String ou un
objet de type Result.
● L'action doit être un POJO.
● Une action peut hériter de la classe
ActionSupport qui implémente six interfaces (y
compris l'interface Action).
Interface Action
● public interface Action {
● public static final String SUCCESS = "success";
● public static final String NONE = "none";
● public static final String ERROR = "error";
● public static final String INPUT = "input";
● public static final String LOGIN = "login";
● public String execute() throws Exception;
● }
HelloWorldAction
● package [Link].struts2;
●
● public class HelloWorldAction{
● private String name;
●
● public String execute() throws Exception {
● if ("SECRET".equals(name))
● {
● return SUCCESS;
● }else{
● return ERROR;
● }
● }
● // getter and setter
● }
[Link]
● <struts>
● <constant name="[Link]" value="true" />
● <package name="helloworld" extends="struts-default">
● <action name="hello"
● class="[Link]"
● method="execute">
● <result name="success">/[Link]</result>
● <result name="error">/[Link]</result>
● </action>
● </package>
● </struts>
Interceptors
● Les intercepteurs sont conceptuellement
l'équivalent des proxy dans JDK.
● Ils permettent d'assurer qu'une fonctionnalité sera
exécutée indépendament d'une action.
● Les intercepteurs peuvent assurer :
● Fournit de la logique de pré-processing.
● Fournit de la logique de post-processing.
● Catche les exceptions
Exemples
● Exception: Lie les exceptions throwées d'une action à
un resultat.
● FileUpload: Permet l'upload de fichier
● I18n: Garde l'information “locale” durant une session.
● Params: Permet de setter les paramètres d'une action.
● Validation: Offre un support de validation pour les
actions
● Timer: La durée d'exécution d'une action.
[Link]
● <action name="hello"
●
class="[Link]"
● method="execute">
● <interceptor-ref name="params"/>
● <interceptor-ref name="timer" />
● <result name="success">/[Link]</result>
● </action>
Stacking
● <interceptor-stack name="basicStack">
● <interceptor-ref name="exception"/>
● <interceptor-ref name="servlet-config"/>
● <interceptor-ref name="prepare"/>
● <interceptor-ref name="checkbox"/>
● <interceptor-ref name="params"/>
● <interceptor-ref name="conversionError"/>
● </interceptor-stack>
● <action name="hello"
class="[Link]">
● <interceptor-ref name="basicStack"/>
● <result>[Link]</result>
● </action>
Validation
● Définir la méthode “validate”
● Validation basée sur XML
● public class Employee extends ActionSupport{
● private String name;
● private int age;
●
● public String execute()
● {
● return SUCCESS;
● }
● //Gets and sets
● public void validate()
● {
● if (name == null || [Link]().equals(""))
● {
● addFieldError("name","The name is required");
● }
● if (age < 28 || age > 65)
● {
● addFieldError("age","Age must be in between 28 and 65");
● }
● }
● }
[Link]
● <action name="empinfo"
● class="[Link]"
● method="execute">
● <result name="input">/[Link]</result>
● <result
name="success">/[Link]</result>
● </action>
Exemple: [Link]
● <validators>
● <field name="name">
● <field-validator type="required">
● <message>
● The name is required.
● </message>
● </field-validator>
● </field>
Exemple: [Link]
● <field name="age">
● <field-validator type="int">
● <param name="min">29</param>
● <param name="max">64</param>
● <message>
● Age must be in between 28 and 65
● </message>
● </field-validator>
● </field>
● </validators>