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 :

[Struts 1.3] executer servlet


Sujet :

Struts 1 Java

  1. #1
    Membre éclairé
    Inscrit en
    Mars 2006
    Messages
    408
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 408
    Par défaut [Struts 1.3] executer servlet
    Bonjour,

    J'ai une classe qui est bien réferencée dans le fichier xml struts conf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <action
          path="/Compteur"
          type="monpackage.Compteur"
          scope="request"
          unknown="false"
          validate="true"
        >
    Celle ci s'execute bien quand on tape dans le browser http://localhost:7001/mondoc/Compteur.do .

    Je voudrais maintenant savoir comment faire (sous struts ? ou autre) pour que pour chaque page (toutes les url), ça execute cette servlet ?

    Merci pour votre aide.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 98
    Par défaut
    Je débute en Struts mais je dirai (au pif !)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <action
          path="*"
          type="monpackage.Compteur"
          scope="request"
          unknown="false"
          validate="true"
        >

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2006
    Messages
    408
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 408
    Par défaut
    Je débute en Struts mais je dirai (au pif !)


    Code :
    <action
    path="*"
    type="monpackage.Compteur"
    scope="request"
    unknown="false"
    validate="true"
    >
    Merci pour votre réponse, mais je l'avais déjà essayé, et ça ne fonctionne pas...

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Syntaxe error

    Ce n'est pas comme ça que ça fonctionne, un contrôleur struts ne peut pas être mis en frontal d'un autre comme ceci, mais il y a plusieurs possibilités pour faire ce compteur :

    1- utiliser un filtre qui interceptera les url contenant un ".do"

    2- créer une classe étendant RequestProcessor ou TilesRequestProcessor ou LayoutRequestProcessor (en fonction de ce que tu utilises), la définir dans le struts-config.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <controller
            processorClass="com.obia.safe.struts.StrutsProcessor"
            contentType="text/html;charset=ISO-8859-1" />
    3- créer une classe étendant Action (et/ou DispatchAction et/ou LookupDispatchAction en fonction du choix que tu auras fait pour tes propres contrôleurs)

    Là, tu pourras faire ton traitement générique du compteur.

    (la solution 1 est certainement la plus facile à mettre en œuvre)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éclairé
    Inscrit en
    Mars 2006
    Messages
    408
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 408
    Par défaut
    Bonjour,
    Voici ma classe :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    package monpackage.common;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import org.apache.log4j.Logger;
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import monpackage.util.Constants;
    import monpackage.util.MyException;
     
    /**
     * @struts.action path="/HitCounter" name="success" scope="request" validate="true"
     * 
     */
    public class HitCounter extends Action {
    	public ActionForward execute(ActionMapping mapping, 
    		   ActionForm form, HttpServletRequest request, 
    		   HttpServletResponse response) throws MyException 
    		   {
     
        String driverClass    = "oracle.jdbc.driver.OracleDriver";
        String connectionURL  = "jdbc:oracle:thin:@maBDD";
        String userID         = "username";
        String userPassword   = "password";
        Connection   con                   = null;
     
     
            try {
                Class.forName(driverClass).newInstance();
               con = DriverManager.getConnection(connectionURL, userID, userPassword);
            } catch (ClassNotFoundException e) {e.printStackTrace();} 
    		  catch (InstantiationException e) {e.printStackTrace();} 
    		  catch (IllegalAccessException e) {e.printStackTrace();} 
    		  catch (SQLException e) {e.printStackTrace();}
     
            ResultSet rset      = null;
            String queryString = "UPDATE hits SET counter = counter + 1";
            try {
            	Statement stmt = con.createStatement ();
                rset = stmt.executeQuery(queryString);         
                System.out.println("compteur maj");
                rset.close();
                stmt.close();
     
            } catch (SQLException e) { e.printStackTrace(); }
     
        /**
         * Close down Oracle connection.
         */
    //    public void closeConnection() {
            try {con.close();} catch (SQLException e) {e.printStackTrace();}
     
            return mapping.findForward("success");
     
     
      }
     
    }
    mon action dans le fichier struts config

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <action
          path="/HitCounter"
          type="monpackage.HitCounter"
          name="success"
          scope="request"
          unknown="false"
          validate="true"
        >
        </action>
    mon servlet-mappings
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <servlet>		
            <servlet-name>HitCounter</servlet-name>
            <servlet-class>monpackage.HitCounter</servlet-class>
    </servlet>
    <servlet-mapping>
      <servlet-name>HitCounter</servlet-name>
      <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    Remarque : la servlet s'execute uniquement si je la tape dans l'url... moi ce que je voudrais c'est qu'elle s'execute pour toutes les url...

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    J'avais bien compris...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre chevronné Avatar de JoloKossovar
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 532
    Par défaut
    Dans le cadre d'un compteur, un filtre parait le mieux adapté.

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <filter>
        <filter-name>CompteurFilter</filter-name>
        <filter-class>com.apps.compteur.CompteurFilter</filter-class>
      </filter>
     
      <filter-mapping>
        <filter-name>CompteurFilter</filter-name>
        <url-pattern>*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
      </filter-mapping>
    Ainsi toiutes tes requetes passeront par ce filtre ou tu pourra faire le traitement que tu souhaites.

  8. #8
    Membre éclairé
    Inscrit en
    Mars 2006
    Messages
    408
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 408
    Par défaut
    Dans le cadre d'un compteur, un filtre parait le mieux adapté.

    exemple :

    Code :

    <filter>
    <filter-name>CompteurFilter</filter-name>
    <filter-class>com.apps.compteur.CompteurFilter</filter-class>
    </filter>

    <filter-mapping>
    <filter-name>CompteurFilter</filter-name>
    <url-pattern>*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    </filter-mapping>Ainsi toiutes tes requetes passeront par ce filtre ou tu pourra faire le traitement que tu souhaites.
    Merci pour ta réponse, j'ai bien ajouté les "dispatcher" mais elle ne s'execute toujours pas ...

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Non mais là, il ne s'agit plus d'une servlet mais d'un filtre.
    Il faut donc créer une classe qui étende javax.servlet.Filter.

    Tu peux t'inspirer de ceci
    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
    39
    40
     
    package com.obia.safe.struts;
     
    import java.io.IOException;
     
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
     
    public class MonFiltre implements Filter
    {
     
        public void init(FilterConfig filterConfig) throws ServletException {}
     
        public void destroy() {}
     
        /**
         * Filtrage de la requête http
         */
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
        {
            try
            {
                System.out.println("Appel->" + ((HttpServletRequest)request).getRequestURI());
                chain.doFilter(request, response);
            }
            catch (Throwable t)
            {
                System.out.println("doFilter error : " + t.toString());
            }
            finally
            {
                System.out.println("<-Fin" + ((HttpServletRequest)request).getRequestURI());
            }
        }
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre éclairé
    Inscrit en
    Mars 2006
    Messages
    408
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 408
    Par défaut
    Non mais là, il ne s'agit plus d'une servlet mais d'un filtre.
    Il faut donc créer une classe qui étende javax.servlet.Filter.

    Tu peux t'inspirer de ceci
    Ah ok merci pour l'exemple, la ça marche mais au lieu d'avoir le compteur incrémenté une fois, ça le fait deux fois... on dirait que mon filtre est lu 2 fois (uniquement après avoir fait un build).
    Ensuite sur chaque page il m'incremente bien de 1 => ce qui est bon.

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Qu'as-tu mis au niveau de l'attribut "url-pattern" dans le web.xml ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Membre éclairé
    Inscrit en
    Mars 2006
    Messages
    408
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 408
    Par défaut
    Qu'as-tu mis au niveau de l'attribut "url-pattern" dans le web.xml ?
    j'ai mis url-pattern="*.do"
    Ce qui fonctionne mais quand je fais un deploiement, cela l'execute deux fois...

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Tu n'aurais pas un "redirect" par hasard ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [Struts] [Oracle] Datasource et Servlet indispo
    Par babylone7 dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 01/01/2009, 20h16
  2. execution servlet via jsp
    Par argon dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 15/06/2008, 10h07
  3. [Struts 2] action executé 2 fois
    Par voodoo_mg dans le forum Struts 2
    Réponses: 2
    Dernier message: 10/01/2008, 08h23
  4. Executer servlet dans classe java ?
    Par Tail dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 12/03/2007, 16h32
  5. [servlet][struts] Appelle des actions/servlet
    Par AnKhCHFR dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 07/03/2005, 12h55

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