IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Struts 1 Java Discussion :

Action par défaut


Sujet :

Struts 1 Java

  1. #1
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut Action par défaut
    Bonjour, je cherche un moyen de déclencher une action au moyen du controleur quand l'utilisateur entre une chaîne de requête vide typiquement : http://localhost/monProjet/
    J'ai trouvé ça : http://java.developpez.com/faq/strut...sdefaultaction
    dans la faq struts mais cette solution n'est pas acceptable dans la mesure ou elle rompt le contrat imposé par MVC à savoir que le controleur centralise l'arrivé des requêtes. Je le fais aisément en php avec le Zend framework, j'imagine du moins j'espère que cela est faisable sous struts puisqu'il est estampillé MVC.
    Cordialement.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  2. #2
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 50
    Points : 40
    Points
    40
    Par défaut
    lol quand tu entres une chaine vide c'est la page index.jsp / index.php / index.htm / index.html qui s'exécute.

    Si tu veux rediriger dans une action avec Struts tu peux faire un <logic:forward> dans index.jsp par exemple. Dans ce cas le nom de ton forward devra être déclaré en tant que global-forward dans ton struts-config

  3. #3
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par Tino13 Voir le message
    lol quand tu entres une chaine vide c'est la page index.jsp / index.php / index.htm / index.html qui s'exécute.
    ai je dis quelque chose de marrant?

    Citation Envoyé par Tino13 Voir le message
    Si tu veux rediriger dans une action avec Struts tu peux faire un <logic:forward> dans index.jsp par exemple. Dans ce cas le nom de ton forward devra être déclaré en tant que global-forward dans ton struts-config
    Si je suis ton raisonnement, index.jsp devient le controleur frontal puisque c'est lui qui reçoit la requête en premier, c'est bien ça? et c'est bien lui et lui seul qui recevra toutes les requêtes en premier?
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Non, index.jsp ne devient pas un contrôleur frontal, c'est juste la page appelée par défaut pour le niveau demandé.
    Si tu tappes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    http://serveur:port/nomAppli/ -> tu iras sur la page index.xxx à la racine de l'application
     
    http://serveur:port/nomAppli/unRepertoire1/unAutre/ -> tu iras sur la page index.xxx de /unRepertoire1/unAutre/ 
     
    http://serveur:port/nomAppli/unRepertoire1/unAutre/unePage.jsp -> tu appelles la page demandée
    C'est plus clair ?

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Si ça n'est pas le controleur frontal, il y a un problème avec le modèle MVC puisque dans ce cas; il ne centralise pas toutes les requêtes : si je ne précise pas d'action, c'est index.jsp qui intercepte la requête, si je précise une action (quelquechose.do) c'est le controleur (qui étant actionServlet si je ne dis pas de bêtise) qui intercepte la requête. Moi je veux faire comme dans les autres langages WEB où quoi que tu tapes, c'est le controleur qui intercepte en premier la requête.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Tu mélanges...
    Il n'y a aucun problème dans le modèle MVC2 de Struts.
    Une application Web, ce n'est pas seulement Struts, il peut y avoir d'autres frameworks impliqués.
    Le contrôleur central de struts (org.apache.struts.action.ActionServlet) s'occupe des appels à struts, et rien d'autre

    Un contrôleur (étendant Action ou DispatchAction ou LookupDispatchAction) n'est appelé que via l'appel /xxxxx.do (une référence à un mapping <action ...> dans struts-config.xml)
    Lorsque tu appelles une page html ou jsp ou une image etc... il ne passe pas par le contrôleur.

    Si tu cherches à centraliser quelque part tous les accès aux ressources de ton application, il faut passer par un filtre.
    Ci-dessous un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    public class FilterUTF8 implements Filter
    {
        public void init(FilterConfig filterConfig) throws ServletException {}
        public void destroy() {}
     
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
        {
            try
            {
                request.setCharacterEncoding("UTF-8");
                chain.doFilter(request, response);
            }
            catch (Throwable t)
            {
                ...
            }
        }
    }
     
    Et le Web.xml
     
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <filter>
          <filter-name>FiltreUTF8</filter-name>
          <filter-class>le.package.du.filtre.FilterUTF8</filter-class>
        </filter>
     
        <filter-mapping>
          <filter-name>FiltreUTF8</filter-name>
          <url-pattern>/*</url-pattern>
        </filter-mapping>
     
        <servlet>
          <servlet-name>action</servlet-name>
          <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    ... etc ...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Tu mélanges...
    Il n'y a aucun problème dans le modèle MVC2 de Struts.
    Une application Web, ce n'est pas seulement Struts, il peut y avoir d'autres frameworks impliqués.
    Le contrôleur central de struts (org.apache.struts.action.ActionServlet) s'occupe des appels à struts, et rien d'autre
    Dans le cas ou je n'utilise pas d'autre framework, Struts de vient mon application WEB, dans ce cas comment je fais pour centraliser toutes les requêtes sur son controleur frontal?

    en ce qui me concerne, une ressource c'est une image, un css ou un js mais pas un html, tout code html ne devrait pas pouvoir être appelé directement de l'extérieur sans passer par le controleur.

    Donc je réitère ma question, comment je fais, à l'instar des autres langages, pour appeler directement le controleur de Struts quand je ne précise pas d'action particulière?
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  8. #8
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    A ma connaissance, le problème ne vient pas de Struts mais plutôt du serveur d'application.
    Par exemple, il est écrit qu'avec WebLogic, on peut spécifier l'uri d'une servlet dans le welcome-file.
    Pour l'avoir testé, il est vrai qu'avec mes versions de Tomcat et JOnAS, ça ne fonctionne pas.
    Je n'ai pas eu l'occasion de tester avec Websphere ou WebLogic.

    Quel serveur d'application utilises-tu ?
    Modératrice Java - Struts, Servlets/JSP, ...

  9. #9
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Il te faut paraméter l'attribut "<url-pattern>" de ta servlet struts, dans ton web.xml.
    Généralement, on fait comme ça avec struts: <url-pattern>*.do</url-pattern>.
    Peut-être qu'un : <url-pattern>/</url-pattern> fera ton affaire.

  10. #10
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    Avec les réponses qui t'on été précedement données je ne comprend pas trop ce que tu cherches.


    à jouer sur la notion de "MVC" ce que je ne pense pas être le cas.

    quand tu attaques la racine de ton appli comme tu le dit avec une requête vide si dans ton Web.xml tu as :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <welcome-file-list>
    	<welcome-file>WEB-INF/pages/index.jsp</welcome-file>
    </welcome-file-list>
    tu ne passe pas par ton action servlet il n'y a aucun traitement à faire maintenant si tu veux absolument repasser par l'actionServelt colle toi ton action par defaut dans le web.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <welcome-file-list>
    	<welcome-file>defalutAction.do</welcome-file>
    </welcome-file-list>
    Et la tu codes ta classe defalutAction dans laquelle tu rediriges sur indej.jsp par exemple.


    note : ma redirection ne doit pas être bonne mais c'est ce qui se rapprocherait le plus de ta demande si je l'ai bien comprise.

  11. #11
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par c_nvy Voir le message
    A ma connaissance, le problème ne vient pas de Struts mais plutôt du serveur d'application.
    Par exemple, il est écrit qu'avec WebLogic, on peut spécifier l'uri d'une servlet dans le welcome-file.
    Pour l'avoir testé, il est vrai qu'avec mes versions de Tomcat et JOnAS, ça ne fonctionne pas.
    Je n'ai pas eu l'occasion de tester avec Websphere ou WebLogic.

    Quel serveur d'application utilises-tu ?
    Pour l'instant tomcat et glassfish.

    Citation Envoyé par fr1man Voir le message
    Il te faut paraméter l'attribut "<url-pattern>" de ta servlet struts, dans ton web.xml.
    Généralement, on fait comme ça avec struts: <url-pattern>*.do</url-pattern>.
    Peut-être qu'un : <url-pattern>/</url-pattern> fera ton affaire.
    Non ça ne fonctionne pas, j'avais déjà essayé, merci quand même.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  12. #12
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Dans le cas ou je n'utilise pas d'autre framework, Struts devient mon application WEB
    Mais ça ne veut rien dire ça, Struts ne sera qu'une partie de ton application WEB.
    index.jsp n'a rien à voir avec Struts, tes fichiers .js ou .css n'ont pas plus de liens avec lui.

    Je le redis, si tu veux centraliser tous les appels dans ce que tu appelles un "contrôleur", utilise un filtre, c'est fait pour ça...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Citation Envoyé par link256 Voir le message
    si tu veux absolument repasser par l'actionServelt colle toi ton action par defaut dans le web.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <welcome-file-list>
    	<welcome-file>defalutAction.do</welcome-file>
    </welcome-file-list>
    Comme je l'ai indiqué plus haut, ceci ne fonctionne qu'avec certains serveurs d'application.

    D'ailleurs, ce serait plutôt :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <welcome-file-list>
    	<welcome-file>/defaultAction.do</welcome-file>
    </welcome-file-list>
    Pour info, je viens de tester avec Websphere 6.0 et ça fonctionne très bien.
    Modératrice Java - Struts, Servlets/JSP, ...

  14. #14
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Mais ça ne veut rien dire ça, Struts ne sera qu'une partie de ton application WEB.
    index.jsp n'a rien à voir avec Struts, tes fichiers .js ou .css n'ont pas plus de liens avec lui.
    Pour toi, à quoi sert Struts?

    Citation Envoyé par c_nvy Voir le message
    Comme je l'ai indiqué plus haut, ceci ne fonctionne qu'avec certains serveurs d'application.

    D'ailleurs, ce serait plutôt :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <welcome-file-list>
    	<welcome-file>/defaultAction.do</welcome-file>
    </welcome-file-list>
    Pour info, je viens de tester avec Websphere 6.0 et ça fonctionne très bien.
    Si je te suis bien, dans ce cas même si je ne précise aucune action (i.e je mets juste le nom de domaine de mon site) il utilisera defaultAction par défaut?
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  15. #15
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    Je travaille sous RAD avec websphere 5.0 ou ca marche bien cette redirection.


    Me dit que j'aurai du mal le jour ou je repasserai à tomcat mais c'est pas le sujet du topic



    Si je te suis bien, dans ce cas même si je ne précise aucune action (i.e je mets juste le nom de domaine de mon site) il utilisera defaultAction par défaut?
    Si tu es sous websphere tu as juste à tester sans oublier de définir ton action par defaut strust-config.xml

  16. #16
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Si je te suis bien, dans ce cas même si je ne précise aucune action (i.e je mets juste le nom de domaine de mon site) il utilisera defaultAction par défaut?
    Tout à fait.

    Dans mon cas, le contexte de mon application est Test.
    Lorsque je lance l'url http://localhost:9080/Test , il exécute l'Action par défaut dont le path est spécifié dans la balise welcome-file.
    Modératrice Java - Struts, Servlets/JSP, ...

  17. #17
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Citation Envoyé par link256 Voir le message
    Je travaille sous RAD avec websphere 5.0 ou ca marche bien cette redirection.
    Comme quoi, tout s'explique.
    Modératrice Java - Struts, Servlets/JSP, ...

  18. #18
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Meric beaucoup pour ces réponses, je préfère ça, j'avais peur de ne pouvoir implémenter un modèle MVC correcte sous J2EE, je vais dont m'orienter vers un autre serveur d'application, avez vous des conseils? Websphere?
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  19. #19
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Pour faire simple, struts sert à gérer tout ce qui a trait aux <form>.
    Ça n'est qu'un framework qui standardise certains aspects de ces dialogues.
    Il centralise (entre autres) le lien entre un contrôleur et son ActionForm, les conversions String (côté navigateur) -> Objet typé cible (dans Form), il propose certaines fonctionnalités intéressantes (mais pas obligatoires) comme les contrôles etc...

    Mais une page sans <form> n'a (à priori) pas de lien avec struts (ou alors comme page de sortie d'un contrôleur, dans le genre : message générique de réussite ou d'erreur, page de liens vers d'autres fonctionnalités etc...)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  20. #20
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Attention, Websphere n'est pas Open Source.

    Dans le cadre de mon travail, j'ai eu l'occasion d'expérimenter Tomcat, JOnAS et maintenant Websphere.
    Le plus simple et le moins lourd à utiliser à mon goût est de loin Tomcat mais la plateforme officielle de développement dans ma boîte étant Websphere, je n'ai pas le choix.

    Donc, tout dépend dans quel cadre tu développes.
    Modératrice Java - Struts, Servlets/JSP, ...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [SP-2010] Supprimer les Actions par défaut sur une liste externe
    Par mrkinfo dans le forum SharePoint
    Réponses: 2
    Dernier message: 21/03/2013, 15h36
  2. [ZF 1.9] Action par défaut : __call et les controllers
    Par s.n.a.f.u dans le forum MVC
    Réponses: 4
    Dernier message: 02/10/2009, 16h39
  3. Action par défaut d'un menu contextuel (ContextMenuStrip)
    Par DranDane dans le forum Windows Forms
    Réponses: 2
    Dernier message: 06/08/2008, 16h28
  4. Réponses: 2
    Dernier message: 22/04/2008, 08h59
  5. [intput] action par défaut lorsqu'on appuit sur "Enter&
    Par pmartin8 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 25/10/2005, 18h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo