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 :

Nombre de servlet ?


Sujet :

Servlets/JSP Java

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 236
    Points : 133
    Points
    133
    Par défaut Nombre de servlet ?
    Bonjour a tous,

    Je débute en Java web et après avoir suivi plusieurs tuto et réussi à faire 2 ou 3 trucs, une question me turlupine !!!

    Faut-il faire autant de servlet que l'on a de jsp ou peut-on en faire qu'une ?

    Je m'explique :

    J'ai réalisé en architecture MVC un petite appli web qui permet d'enregistrer des mots de passes dans une base de donnée (le tout est fait sous NetBean avec glassfish)

    J'ai :
    - une page index.jsp qui contient 3 formulaires (j'ai pas trouvé mieux pour mettre 3 boutons avec des actions différentes , en y pensant j'aurais pu mettre des simples liens mais je voulais passer par la servlet pour dispatcher) :

    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
     
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Gestion des utilisateurs</title>
            <link rel="stylesheet" media="screen" type="text/css" title="style" href="styles.css" />
     
        </head>
        <body>
            <div id="en-tete">
                <p class="p_entete">
                    <label>GESTION DES UTILISATEURS</label>
                </p>
            </div>
     
            <div id="Corps">
                <p>Bienvenue sur le site de gestion des utilisateurs de la base de données BDD1</p>
                <p>Veuillez sélectionner une tâche à réaliser sur la base :</p>
                <form method="post" action="test/add">
                    <input type="submit" class="submit" value="Créer un utilisateur" />
                </form>
     
                <form method="post" action="test/liste">
                    <input type="submit" class="submit" value="Liste des utilisateurs"/>
                </form>
     
                <form method="post" action="test/del">
                    <input type="submit" class="submit" value="Supprimer un utilisateur"/>
                </form>
            </div>
        </body>
    </html>
    - une page avec un formulaire pour saisir l'utilisateur (je passe les en-tete...):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <form method="post" action="test/ajouter">
                <p>
                    <label>Saisir votre login</label> : <input type="text" name="pseudo" maxlength="10" />
                </p>
                <p>
                    <label>Saisir votre mot de passe</label> : <input type="password" name="Passwd" maxlength="10" />
                </p>
                <p>
                    <input type="submit" />
                </p>
                </form>
    - la servlet :

    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
     
     
    package com.test.jdbc;
     
    import [...] 
     
    public class test extends HttpServlet {
     
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            boolean test;
            RequestDispatcher rd = null;
     
            try {
                String path=request.getPathInfo();
     
                   //Affichage des différentes pages à partir de index.jsp
     
                if(path.equals("/add")){
                    rd = getServletContext().getRequestDispatcher("/CreateUtil.jsp");
                }else if (path.equals("/liste")){
                    rd = getServletContext().getRequestDispatcher("/listeUsers.jsp");
                }else if (path.equals("/del")){
                    rd = getServletContext().getRequestDispatcher("/DelUsers.jsp");
                }else if (path.equals("/styles.css")){
                    rd = getServletContext().getRequestDispatcher("/styles.css");
     
                //Traitement
     
                }else if (path.equals("/test/ajouter")){
                    //rd = getServletContext().getRequestDispatcher("/DelUsers.jsp");
     
                    [...] // j'ai enlevé le code de traitement
                    rd = getServletContext().getRequestDispatcher("/AfficheUser.jsp");
     
                    [...]
                    }
     
                }else{
                    rd = getServletContext().getRequestDispatcher("/error.jsp");
                }
                    rd.forward(request, response);
     
     
            } finally {
                out.close();
            }
        } 
     
     [...] //méthodes doGet et doPost
    }
    et le fichier 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
    <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
        <servlet>
            <servlet-name>test</servlet-name>
            <servlet-class>com.test.jdbc.test</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>test</servlet-name>
            <url-pattern>/test/*</url-pattern>
        </servlet-mapping>
        <session-config>
            <session-timeout>
                30
            </session-timeout>
        </session-config>
    </web-app>
    Jusqu'ici tout fonctionne par contre et ma question est au sujet de l'URL :

    la 1ère est : http://localhost:8080/TestJDBC/

    quand je clique sur le bouton ajouter dans index.jsp, l'URL devient

    http://localhost:8080/TestJDBC/test/add

    puis quand je rempli les cases du formulaire et que je valide elle devient :

    http://localhost:8080/TestJDBC/test/test/ajouter

    La dernière URL ouvre une autre jsp qui contient le nom et le mot de passe qui a été enregistré dans la base.

    Si a chaque fois que j'ai une jsp, que je valide et que je passe par la même servlet plusieurs fois comment faire pour pas se retrouver avec une URL du genre http://localhost:8080/TestJDBC/test/...est/test/test/....


    Doit on faire plusieurs servlets ? comment fait on à partir de la dernière page pour revenir au sommaire (quel lien je mets ) ? Dois-je modifier le mapping dans web.xml ? en fait je suis complètement perdu donc si vous pouvez m'aider merci d'avance.

    Et merci à ceux qui auront lu mon long post...

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    c'est parce que vous mettez des liens relatifs dans vos pages jsp, hors vous ygnorez, dans la page jsp "relatif à quoi" (et visiblement c'est variable). dans ce cas, préférez les liens absolue de la forme /<nom de l'application>/<nom de la servlet>.

    Vous n'avez pas besoin de faire plusieurs servlet.
    Pour distinguer entre les boutons, on leur donne des ids, et on regarde lesquels ont été soumis. Exemple: un id "del", un id "add". Ensuite, dans le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (request.getParameter("del")!=null)
        //action delete

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 236
    Points : 133
    Points
    133
    Par défaut
    Ok merci pour la réponse par contre au niveau du mapping dans web.xml je laisse tel quel ou pas ? j'ai eu beau lire plein de doc je comprends pas trop le fonctionnement du mapping encore.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Consultant Télécom
    Inscrit en
    Avril 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Télécom
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2011
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par alexxxx69 Voir le message
    Ok merci pour la réponse par contre au niveau du mapping dans web.xml je laisse tel quel ou pas ? j'ai eu beau lire plein de doc je comprends pas trop le fonctionnement du mapping encore.
    Salut à tous !

    Le mapping permet de donner différents noms à un même élément, selon la personne à laquelle on s'adresse.

    Concrètement, le client voit une URL vers la Servlet dans la page JSP mais n'a aucune idée de l'arborescence réelle des fichiers/dossiers côté serveur. Ce premier nom public est un faux - pour les clients.

    Celui qui déploie peut créer un nom qui n'est connu que de son environnement opérationnel. Ce nom n'est utile qu'au déploiement et il n'est ni lié au nom côté client ni au vrai nom du fichier correspondant.

    La Servlet côté développeur a, elle, un nom bien défini, et un emplacement dans les packages spécifié. Le fichier de la Servlet a bien un nom et un chemin réels qui correspondent aux emplacements réels sur le serveur.

    web.xml permet alors de faire le lien entre tous ces noms, grâce au nom de déploiement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <web-app...>
    	<servlet>
    		<servlet-name>My Deployed Servlet</servlet-name><!-- le nom de la servlet pour le déploiement - nom interne au web.xml -->
    		<servlet-class>com.mvc.example.MyDevelopedJavaServlet</servlet-class> <!-- le vrai nom de la servlet, son véritable chemin (fichier .class) -->
    	</servlet>
    	<servlet-mapping>
    		<servlet-name>My Deployed Servlet</servlet-name>
    		<url-pattern>/MyAction.do</url-pattern><!-- l'url publique, qu'on retrouve dans le jsp-->
    	</servlet-mapping>
    </web-app>
    En fin de compte, si tu développes par exemple sous eclipse et que ton conteneur est Tomcat, quand tu écriras ton web.xml, tu ne te soucieras vraiment que du nom côté client (celui que tu mentionneras dans tes pages html ou JSP) et du nom de ta Servlet. Le nom de déploiement, tu n'y toucheras pas souvent - une fois écrit, tu n'auras plus vraiment besoin de l'utiliser dans d'autres fichiers.

    ---

    De mon côté, j'ai tout de même une question : en termes de "bonnes pratiques" (best practices), que recommandez-vous : la création d'autant de servlets que nécessaire ? ou une voire deux servlets maxi par projet ?

    La première solution, à mes yeux, facilite la lecture isolée du code et l'écriture. En revanche, sur un gros site, on arrive vite à une certaine quantité de servlets, ce qui rend la modification des fonctionalités un peu difficile, pour une équipe qui n'est pas familière du projet.

    La seconde solution, si elle permet la maintenance de manière tout à fait naturelle, ne me semble pas optimisée, puisqu'on parcourt de façon séquentielle toute la servlet à la recherche de la bonne action à déclencher... Est-ce raisonnable, et quel est alors l'intérêt du web.xml ?

    Quelle est votre expérience là-dessus ?

    Merci pour votre aide.

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur Informatique et Réseaux
    Inscrit en
    Avril 2011
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Informatique et Réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 232
    Points : 182
    Points
    182
    Par défaut
    Pour le mapping tout a été dit je crois.


    @Jfufu :

    Le fait d'avoir n servlet de 1 thread ou 1 servlet de n thread revient approximativement au même.

    Je pense qu'il faut trouver un juste milieu pour simplifier la lecture du code et la maintenance, ceci va donc varier pour chaque application.
    Par exemple pour ma part, je suis sur une application Web avec différents types d'utilisateurs (superAdmin, admin, respSection, agent, ...), j'ai fait une servlet par type d'utilisateur, pourquoi? :

    1) le code est très lisible puisqu'il est presque identique d'un servlet à l'autre.
    2) la gestion des droits d'utilisateur est plus simple à gérer: pas besoin de vérifier sur chaque page jsp, il suffit de vérifier au début de la servlet.
    3) la maintenance est plus simple du fait que l'application est structuré de façon claire.

    Donc le nombre de servlet dans une application est à choisir avec précaution pour ne pas être perdu dans le code ou perdu dans le nombre de servlet.


    PS: je ne suis pas dans le java web depuis longtemps donc si je suis complétement à coté de la plaque, dites le moi.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Consultant Télécom
    Inscrit en
    Avril 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Télécom
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2011
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Spiritkill Voir le message
    Je pense qu'il faut trouver un juste milieu pour simplifier la lecture du code et la maintenance, ceci va donc varier pour chaque application.
    Par exemple pour ma part, je suis sur une application Web avec différents types d'utilisateurs (superAdmin, admin, respSection, agent, ...), j'ai fait une servlet par type d'utilisateur, pourquoi? :

    1) le code est très lisible puisqu'il est presque identique d'un servlet à l'autre.
    2) la gestion des droits d'utilisateur est plus simple à gérer: pas besoin de vérifier sur chaque page jsp, il suffit de vérifier au début de la servlet.
    3) la maintenance est plus simple du fait que l'application est structuré de façon claire.

    Donc le nombre de servlet dans une application est à choisir avec précaution pour ne pas être perdu dans le code ou perdu dans le nombre de servlet.
    Entendu ! je suis tout à fait preneur d'avis d'autres personnes également =)
    Ce matin, j'ai eu l'occasion d'en discuter avec un collègue qui avait la même démarche que moi (création d'un nombre de servlets vite incalculable) et qui a pu se faire expliquer une "meilleure" approche entreprise : avoir un xml tout simple, et une servlet qui redirige vers toutes les autres. À ce moment-là, apparemment, on respecte le pattern MVC (je n'ai pas creusé le sujet, donc je reste ouvert aux suggestions).

    J'aime bien ton approche concernant la vérification des rôles

    Merci pour ta réponse et merci aux autres pour les réponses futures.

  7. #7
    Membre confirmé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Points : 558
    Points
    558
    Par défaut
    Bonjour,

    La servlet joue le rôle du controleur dans le paradigme MVC. Une servlet récupère les données utilisateurs requises par le modèle, puis les transmets à la vue.
    Le nombre de servlet est corrélée à la qualité du choix du pattern de conception métier quelle implémente. A mons avis une servlet peut interagir avec une factory dans le pattern DAO pour gérer les différents types d'utilisateurs.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 25/02/2014, 12h43
  2. Programme Servlet Nombres
    Par blind12345 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 07/04/2012, 01h02
  3. Nombre de servlet ?
    Par maxime8n dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 29/03/2012, 16h58
  4. Nombre de fichiers ouverts simultanément
    Par matrixfan dans le forum C++Builder
    Réponses: 3
    Dernier message: 27/05/2002, 18h47
  5. [Kylix] Probleme de nombre flottant!!
    Par yopziggy dans le forum EDI
    Réponses: 5
    Dernier message: 02/05/2002, 11h13

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