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

Servlets/JSP Java Discussion :

Appliquer un filtre a une page JSP précise


Sujet :

Servlets/JSP Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 174
    Points : 51
    Points
    51
    Par défaut Appliquer un filtre a une page JSP précise
    Bonjour ,

    J'ai une question a propos des filters en JEE , en fait je veux exécuter mon filter qui affiche la liste des clients même si la session des clients est null , mais cela juste dans une seule page situé dans le WEB-INF de l'application et pas dans toute l'application (<url-pattern>/*</url-pattern>) , j'ai testé dans le web.xml plusieurs url , dans le <url-pattern> , la page s'affiche mais le filter ne s’exécute pas sur la page .

    Voila mon web.xml :

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>SiteWeb</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
     
      <filter>
      <filter-name>MapFilter</filter-name>
      <filter-class>com.tomo.filter.MapFilter</filter-class>
      </filter>
      <filter-mapping>
      <filter-name>MapFilter</filter-name>
      <url-pattern>/list_tomodachi.jsp</url-pattern>
      </filter-mapping>
     
    </web-app>
    Voila mon filter MapFilter :

    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.tomo.filter;
     
    public class MapFilter implements Filter {
     
        private static final String sessionTomodachi  = "TomodachiSession";
     
        private TomodachiDAO        tomodachiDAO;
     
        public static final String  InisialDaoFactory = "daoFactory";
     
     
        public MapFilter() {
            // TODO Auto-generated constructor stub
        }
     
     
          public void doFilter( ServletRequest req, ServletResponse res, FilterChain chain ) throws IOException,
                ServletException {
     
            HttpServletRequest request = (HttpServletRequest) req;
     
            HttpSession session = request.getSession();
     
            if ( session.getAttribute( sessionTomodachi ) == null ) {
     
                ArrayList<Tomodachi> listeTomo = tomodachiDAO.listTomodachi();
     
                Map<Long, Tomodachi> mapTomo = new HashMap<Long, Tomodachi>();
     
                for ( Tomodachi tomodachi : listeTomo ) {
                    mapTomo.put( tomodachi.getId_tomodachi(), tomodachi );
                }
     
                session.setAttribute( sessionTomodachi, mapTomo );
     
            }
     
            chain.doFilter( request, res );
        }}
    Et voila arborescence de mon application :
    Images attachées Images attachées  

  2. #2
    Membre régulier
    Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Points : 78
    Points
    78
    Par défaut
    Bonjour,

    le plus naturellement dans ton cas est d'utiliser une Servlet et pas un filtre. un filtre pour une seule JSP est possible mais me semble un peu loin du but des Filtres. donc je te propose de faire une Servlet et puis redirigé vers la JSP. Sinon c'est la liste des clients n'est pas lié à un user vaut mieux le faire pour toute l'appli dans l'init de la servlet par exemple.

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Je dirais, mais je n'ai pas testé...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <url-pattern>/WEB-INF/list_tomodachi.jsp</url-pattern>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 174
    Points : 51
    Points
    51
    Par défaut
    Citation Envoyé par chortani Voir le message
    Bonjour,

    le plus naturellement dans ton cas est d'utiliser une Servlet et pas un filtre. un filtre pour une seule JSP est possible mais me semble un peu loin du but des Filtres. donc je te propose de faire une Servlet et puis redirigé vers la JSP. Sinon c'est la liste des clients n'est pas lié à un user vaut mieux le faire pour toute l'appli dans l'init de la servlet par exemple.
    Vous avez raison sur ce propos , mais mon but a vrai dire c'est pour m’entraîner plus et découvrir plus les filtres car je viens de débuter en langage JEE , c'est pour ça que je veux s'avoir comment procéder avec une seule page ..

    Citation Envoyé par OButterlin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <url-pattern>/WEB-INF/list_tomodachi.jsp</url-pattern>
    Non ça ne marche pas , le filtre ne s’exécute toujours pas sur la page list_tomodachi.jsp :/

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 174
    Points : 51
    Points
    51
    Par défaut
    Up

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Bon j'ai pris le temps de faire un test...

    Si tu mets une URL comme "http://localhost:8080/uneAppli/WEB-INF/maPage.jsp", le filtre est bien appelé mais bien sûr, la page n'est pas trouvée après (on ne peut pas appeler directement un contenu dans WEB-INF).

    Si dans une page jsp, tu as du code ressemblant à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    request.getRequestDispatcher("/WEB-INF/maPage.jsp").forward(request, response);
    elle sera bien appelée mais là, tu es derrière le(les) filtre(s) et il(s) n'est(ne sont) pas appelé(s).

    Pourquoi avoir mis ces pages dans WEB-INF, tu veux les protéger ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 174
    Points : 51
    Points
    51
    Par défaut
    Oui tout a fait , on as toujours appris a les mettre dans des WEB-INF ..

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    ça évite de pouvoir appeler directement une page jsp par son url, mais dans ce cas, le filtre doit être mis sur le contrôleur (servlet à priori) qui demande l'affichage de cette page... et dans ce cas, autant mettre le code spécifique dans ce contrôleur directement...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 174
    Points : 51
    Points
    51
    Par défaut
    Donc si j'ai bien compris , je dois a la place de mettre le code dans mon filtre le mettre dans la Servlet et ça vas s'exécuter que sur ma servlet qui appel ma page jsp .. comme 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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    @WebServlet( "/listTomodachi" )
    public class ListTomodachi extends HttpServlet {
        private static final long   serialVersionUID  = 1L;
     
        private static final String sessionTomodachi  = "TomodachiSession";
     
        private TomodachiDAO        tomodachiDAO;
     
        public static final String  InisialDaoFactory = "daoFactory";
     
        private static final String vue_listTomodachi = "/WEB-INF/list_tomodachi.jsp";
     
     
        public ListTomodachi() {
            super();
            // TODO Auto-generated constructor stub
        }
     
        public void init() throws ServletException {
    	this.tomodachiDAO = ( (DAOFactory) getServletContext().getAttribute( InisialDaoFactory ) )
                    .getTomodachiDAO();
        }
     
        protected void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException,
                IOException {
     
    	 HttpSession session = request.getSession();
     
            if ( session.getAttribute( sessionTomodachi ) == null ) {
     
                ArrayList<Tomodachi> listeTomo = tomodachiDAO.listTomodachi();
     
                Map<Long, Tomodachi> mapTomo = new HashMap<Long, Tomodachi>();
     
                for ( Tomodachi tomodachi : listeTomo ) {
                    mapTomo.put( tomodachi.getId_tomodachi(), tomodachi );
                }
     
                session.setAttribute( sessionTomodachi, mapTomo );
     
            }
     
            this.getServletContext().getRequestDispatcher( vue_listTomodachi ).forward( request, response );
        }
     
     
        protected void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException,
                IOException {
            // TODO Auto-generated method stub
        }
     
    }

  10. #10
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tu peux mettre le filtre directement sur le JSP. Tu as juste oublié de préciser qu'il faut que le filtre se déclenche aussi en cas de forward:
    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>MapFilter</filter-name>
        <filter-class>com.tomo.filter.MapFilter</filter-class>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>REQUEST</dispatcher>
      </filter>
      <filter-mapping>
        <filter-name>MapFilter</filter-name>
        <url-pattern>/list_tomodachi.jsp</url-pattern>
      </filter-mapping>

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 174
    Points : 51
    Points
    51
    Par défaut
    Ca me donne cette erreur :
    Images attachées Images attachées  

  12. #12
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    mea culpa, dispatcher, c'est dans filter mapping

  13. #13
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 174
    Points : 51
    Points
    51
    Par défaut
    Quand je met :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <filter>
        <filter-name>MapFilter</filter-name>
        <filter-class>com.tomo.filter.MapFilter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>MapFilter</filter-name>
        <url-pattern>/WEB-INF/list_tomodachi.jsp</url-pattern>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>REQUEST</dispatcher>
      </filter-mapping>
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <url-pattern>/list_tomodachi.jsp</url-pattern>
    ou quand je met le lien de la servlet qui l'invoque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <url-pattern>/listTomodachi</url-pattern>
    Ça me donne cette erreur :

    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
    Grave: Exception au démarrage du filtre MapFilter
    java.lang.ClassNotFoundException: com.tomo.filter.MapFilter
    	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
    	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
    	at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:527)
    	at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:509)
    	at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:137)
    	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
    	at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:107)
    	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4746)
    	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5399)
    	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    	at java.util.concurrent.FutureTask.run(Unknown Source)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    	at java.lang.Thread.run(Unknown Source)
    Et ça m'affiche une page 404

  14. #14
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    java.lang.ClassNotFoundException: com.tomo.filter.MapFilter
    Visiblement, le filtre que tu veux utiliser n'existe pas dans ton application.

  15. #15
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 174
    Points : 51
    Points
    51
    Par défaut
    Maintenant la page s'affiche mais le filtre ne s'applique pas quand je m'authentifie , j'ai essayer les differents url-paternes indiquer précédemment mais toujours pas

Discussions similaires

  1. [XML][XSL][Mozilla Firefox] Integraton dans une page JSP
    Par BANATACH dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 05/08/2004, 14h46
  2. [Debutant(e)]Appel d'une servlet dans une page jsp
    Par kouadjalain dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 20/07/2004, 15h02
  3. [EJB+JSP+Tomcat] Appel d'une page JSP à partir d'un bean
    Par Hakkou dans le forum Tomcat et TomEE
    Réponses: 8
    Dernier message: 02/06/2004, 15h26
  4. [Débutant][Application web] : context d'une page JSP
    Par silver_dragoon dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 14/02/2004, 11h53
  5. [Débutant] Problème de déconnexion d'une page JSP
    Par amal9 dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 22/01/2004, 13h40

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