Partage
  • Partager sur Facebook
  • Partager sur Twitter

Java EE TP1 : servlet fantôme

Sujet résolu
    24 juillet 2016 à 16:44:37

    Bonjour, je suis au premier TP du cours de @Coyote sur Java EE, et je suis perdu ! J'ai commencé à créer les JSP, puis le fichier web.xml, mais lorsque j'ai créé la première servlet, le serveur Tomcat a planté. J'ai donc supprimé la servlet, pour tout refaire, mais lorsque je recrée ma Servlet CreationClient, Eclipse me dit qu''il existe déjà une servlet avec ce nom. J'ai donc supprimé le projet entier, (en cochant l'option "effacer définitivement le projet du disque").

    J'ai refait le projet depuis zéro, une JSP, puis la deuxième, puis le fichier web.xml, et lorsque je veux créer la Servlet CreationClient, elle me dit toujours qu'il existe déjà une servlet à ce nom. Mais où est-elle ? Je ne la trouve pas.

    J'ai même effacé un fichier que j'ai trouvé "CreationClient.launch" !! Mais Eclipse persiste à dire qu'il y a une servlet qui s'appelle "CreationClient", mais je ne la vois pas !!

     Quelqu'un peut-il m'aider à comprendre ce qui se passe et ce que je dois faire ? :colere:

    Merci de votre aide.

    • Partager sur Facebook
    • Partager sur Twitter
    Ex-prof, développeur "Junior" (Haha !).
    Anonyme
      25 juillet 2016 à 8:45:03

      Regardes dans web.xml s'il n'y a pas déjà un fichier du même nom.

      Sinon, recherche (ctrl + H sur eclipse) dans ton projet un fichier portant ce nom.

      -
      Edité par Anonyme 25 juillet 2016 à 8:45:53

      • Partager sur Facebook
      • Partager sur Twitter
        25 juillet 2016 à 10:55:34

        Bonjour @JohnSpawn,

        Non, je n'ai aucun fichier du même nom. Je pensais qu'une Servlet était une classe, qu'elle se créait comme une classe. Or, à présent, lorsque je veux créer une nouvelle Servlet, je remplis tous les champs, mais Eclipse ne veut pas me le valider :

        Tout se passe comme si je n'avais pas bien compris comment sont référencés les différents composants de mon projet, de quoi se compose ma servlet, comment web.xml les référence-t-il... ?

        J'avoue que je suis un peu perdu... La seule différence depuis tout à l'heure, c'est que j'ai supprimé le corps de web.xml, au cas où c'était ce qui m'empêchait de créer ma servlet...

        -
        Edité par Markos 25 juillet 2016 à 10:58:21

        • Partager sur Facebook
        • Partager sur Twitter
        Ex-prof, développeur "Junior" (Haha !).
          25 juillet 2016 à 11:09:04

          Bonjour.

          En décembre 2009, il y a plus de 6 ans, est sorti la version 3.0 de l'API Servlet introduisant les annotations pour les servlets.

          Plus besoin de tortiller du cul pour chier droit.

          Une Servlet se déclare ainsi, sans toucher aux fichiers de configuration :

          @WebServlet(urlPatterns = { "/myUrl" })
          public class MyServlet extends HttpServlet { ... }
          • Partager sur Facebook
          • Partager sur Twitter
          Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
            25 juillet 2016 à 11:36:05

            Ca, le tuto de Coyote ne nous l'explique pas. Est-ce que ça remplace le servlet-mapping du fichier web-xml ?
            • Partager sur Facebook
            • Partager sur Twitter
            Ex-prof, développeur "Junior" (Haha !).
              25 juillet 2016 à 11:38:33

              C'est le problème des cours : ils datent d'il y a 10ans...

              Tu remplaces les 8 lignes du web.xml par 1 annotation.

              • Partager sur Facebook
              • Partager sur Twitter
              Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
                25 juillet 2016 à 11:39:19

                En fait, j'ai réussi à créer ma Servlet en effaçant provisoirement le contenu de mon fichier web.xml : cela signifie que web.xml crée une référence qui empêche la création de la classe. Comme s'il fallait créer le fichier web.xml après avoir créé les servlets.

                Mais ce n'est pas fini... Lorsque je valide le formulaire, il ne trouve pas encore ma page afficherClient.jsp... Il y a quelque chose de confus dans l'enchaînement et le référencement des différents fichiers.

                Au fait, @Pinguet62 : bonjour (excuse-moi),

                Est-ce que cela signifie qu'on se passe complètement du fichier web.xml ? Quel est son rôle, exactement ?

                Merci de ton aide

                -
                Edité par Markos 25 juillet 2016 à 11:42:35

                • Partager sur Facebook
                • Partager sur Twitter
                Ex-prof, développeur "Junior" (Haha !).
                  25 juillet 2016 à 11:49:14

                  Tu ne te passera pas totalement du fichier web.xml, mais toutes les Servlet, Filter, et autres déclarations, ont leur équivalent en annotation.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
                    25 juillet 2016 à 11:49:57

                    Hahaha !

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Ex-prof, développeur "Junior" (Haha !).
                      25 juillet 2016 à 16:45:42

                      Ton serveur tourne déjà je pense donc eclipse n'a pas réussi à le lancer.

                      Pour ce qui est des annotations, je pense que c'est une bonne chose de savoir comment se passe les choses via un fichier de conf avant d'utiliser des annotations à tout va.

                      Après, c'est aussi une question de goût... pour moi mélanger du code avec de la conf, j'ai du mal

                      Le cours est donc pas si mal malgré son age. On y apprend les bases (même si elles sont loin du standard pro).

                      • Partager sur Facebook
                      • Partager sur Twitter
                        25 juillet 2016 à 17:04:33

                        ukusan a écrit:

                        Pour ce qui est des annotations, je pense que c'est une bonne chose de savoir comment se passe les choses via un fichier de conf avant d'utiliser des annotations à tout va.

                        Après, c'est aussi une question de goût... pour moi mélanger du code avec de la conf, j'ai du mal

                        Le cours est donc pas si mal malgré son age. On y apprend les bases (même si elles sont loin du standard pro).

                        Si les développeurs du JDK ont mis en place cela, c'est surement parce que c'est plus simple.
                        La configuration par annotation se faire de la même manière pour le mapping JPA, pour le mapping des URL et paramètres des webservices JAX-RS ou JAXB, idem dans certaines bibliothèque CSV, ... bref dans quasiment toutes les API/bibliothèques de mapping.
                        Est-ce que pour les exemples précédemment cités tu définies encore le mapping dans du XML ?

                        Concernant l'apprentissage par les vieilles techniques bas niveau, c'est une question de point de vue.
                        Je vois énormément (99%) des débutants galérer pour lire un fichier de manière incorrecte avec 50 lignes de code (parce que le cours est faux, et qu'il n'explique pas comment le faire correctement), alors que ça se fait en 1 ligne...
                        Après seulement on apprendra comment ça fonctionne en interne pour faire du custom.
                        (on n'apprend pas comment fonctionne un injecteur de moteur de voiture avant de conduire)

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
                          25 juillet 2016 à 17:13:47

                          Je comprends ton point de vue même si je le ne partage pas. J'espère que ceux qui passeront par ici sauront se forger leur propre avis.

                          -
                          Edité par ukusan 25 juillet 2016 à 17:15:54

                          • Partager sur Facebook
                          • Partager sur Twitter
                            31 juillet 2016 à 9:16:59

                            Pinguet62 a écrit:

                            C'est le problème des cours : ils datent d'il y a 10ans...

                            Tu remplaces les 8 lignes du web.xml par 1 annotation.


                            En fait, le cours de @Coyote est bizarrement construit : les annotations dont tu parles sont expliquées dans la 6ème et dernière partie. L'ancienneté du cours n'est donc pas en cause. C'est la façon de procéder de Coyote qui est particulière : proposer une méthode pour des raisons purement pédagogiques, et expliquer bien plus tard qu'on doit faire autrement.

                            D'ailleurs, dans le même sens, pendant une bonne partie du cours, @Coyote donne des exemples et des exercices tout en disant qu'il ne faut pas coder comme ça, parce que ce n'est pas conforme aux bonnes pratiques du modèle MVC.

                            Cette pédagogie est défendable, je n'ai pas d'opinion tranchée là-dessus. Mais le résultat, c'est qu'on se trouve tout au long du tuto avec des manières de coder qui ne sont pas conformes, ou qui sont obsolètes, comme celle-ci.

                            A+

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Ex-prof, développeur "Junior" (Haha !).
                              1 août 2016 à 15:39:46

                              Re-bonjour !

                              J'ai eu bien des déboires avec mes chemins, mes redirections et les noms de mes servlets. Ça m'a permis de découvrir certaines subtilités, que je voudrais partager avec @Pinguet62, parce qu'elles contredisent ses propos : en effet, l'instruction @WebServlet('...') ne remplace pas la balise servlet-mapping du fichier web.xml. Je m'en suis rendu compte par moi-même. Voici comment :

                              Dans mon projet de formulaire d'inscription, je fais un servlet-mapping sur ma servlet "Inscription.java", en la rebaptisant "accueil" comme ceci :

                              <?xml version="1.0" encoding="UTF-8"?>
                              <web-app>
                               <servlet>
                              		<servlet-name>Inscription</servlet-name>
                              		<servlet-class>servlets.Inscription</servlet-class>
                              	</servlet>
                              
                              	<servlet-mapping>
                              		<servlet-name>Inscription</servlet-name>
                              		<url-pattern>/accueil</url-pattern>
                              	</servlet-mapping>
                              </web-app>

                              C'est donc ce qui s'affichera dans l'url au lancement de l'application. Pourtant, cette même servlet commence de cette façon :

                              @WebServlet("/adhesion")
                              public class Inscription extends HttpServlet {
                              ...

                              Quant au formulaire, dans ma page inscription.jsp, il commence ainsi :

                                <form method="post" action="adhesion">
                              

                              Il renvoie donc à ma servlet sous le nom figurant dans son entête @WebServlet ! C'est donc bien ce dernier nom qui s'affiche dans l'url lorsque le formulaire est validé. Le formulaire apparait donc bien sous deux noms différents, comme s'il s'agissait de deux pages différentes, "accueil" avant validation du formulaire, puis "adhésion" après.

                              Les deux notions ne se recoupent donc pas complètement.

                              Merci toutefois pour tes précieuses remarques.C'est toujours un plaisir de lire tes interventions, claires, détaillées et bienveillantes.

                              A bientôt.



                              -
                              Edité par Markos 1 août 2016 à 15:42:03

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Ex-prof, développeur "Junior" (Haha !).
                                1 août 2016 à 16:15:10

                                Hello,

                                Je ne pense pas qu'il ai parlé d'un remplacement de valeur. Tu peux mapper X URL vers une même servlet sans problème. Dans ton cas, ta config xml relie ton url /accueil tandis que l'annotation y relie /adhesion.

                                La théorie voudrait qu'on ne mélange pas les deux dans un souci d'homogénéité.

                                PS: ne désespère pas pour ton apprentissage. Tous tes soucis de serveurs, d'erreur de mapping, etc,  participent à ta formation

                                Après, ne t'attarde pas trop sur J2EE pure, il me semble que ce n'est plus trop utilisé de nos jours, le framework Spring ayant pris sa place

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  1 août 2016 à 16:25:22

                                  ukusan a écrit:

                                  Après, ne t'attarde pas trop sur J2EE pure, il me semble que ce n'est plus trop utilisé de nos jours, le framework Spring ayant pris sa place

                                  Le cours je traite à aucun moment de Java EE (injection de dépendance, inversion de contrôle, ...) !

                                  JSP n'est qu'un framework web, qui n'est quasiment plus utilisé pour les nouveaux projets (sortie avant 1999).
                                  JSF est son successeur (sorti en 2004).
                                  Les framework purement front-end (type Angular (sorti en 2010) ou React) ont pris la relève depuis quelques années.

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
                                    1 août 2016 à 16:34:31

                                    Pinguet62 a écrit:

                                    ukusan a écrit:

                                    Après, ne t'attarde pas trop sur J2EE pure, il me semble que ce n'est plus trop utilisé de nos jours, le framework Spring ayant pris sa place

                                    Le cours je traite à aucun moment de Java EE (injection de dépendance, inversion de contrôle, ...) !

                                    JSP n'est qu'un framework web, qui n'est quasiment plus utilisé pour les nouveaux projets (sortie avant 1999).
                                    JSF est son successeur (sorti en 2004).
                                    Les framework purement front-end (type Angular (sorti en 2010) ou React) ont pris la relève depuis quelques années.


                                    Merci de prendre le temps de répondre à mon petit commentaire personnel, mais ça nous éloigne du sujet non?
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      2 août 2016 à 9:01:48

                                      ukusan a écrit:

                                      Après, ne t'attarde pas trop sur J2EE pure, il me semble que ce n'est plus trop utilisé de nos jours, le framework Spring ayant pris sa place

                                      Intéressant. Je vais en parler à mes formateurs, au stage que je suis actuellement pour ma reconversion professionnelle. Cela dit, Spring est un framework J2EE, et il n'est donc pas inutile d'aborder J2EE pur (ou plutôt Java EE, devrait-on dire), avant d'étudier le framework.

                                      Quant à s'attarder, en tant qu'apprenant, je préfère bien assimiler chaque étape et résoudre les plantages que je rencontre, c'est naturel. Et cela ne m'empêche pas de "ne pas m'attarder" sur ce qui me semble plus facile, ou plus secondaire. Ou d'accélérer ma lecture. Ou d'aller voir quelques chapitres plus loin pour apprendre quelque chose qui m'intéresse... Bref, de "ne pas m'attarder"...

                                      ...

                                      Bref, le problème de la servlet fantôme est résolu : la servlet est considérée comme existante lorsqu'elle est déclarée dans le fichier web.xml. Une fois la balise <servlet> de ce fichier supprimée, avec son contenu, j'ai pu créer sans problème ma servlet. Il importe donc de construire le fichier web.xml après avoir créé la servlet.

                                      Bonne chance à tous ! ;-)

                                      A+

                                      -
                                      Edité par Markos 2 août 2016 à 11:26:04

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Ex-prof, développeur "Junior" (Haha !).

                                      Java EE TP1 : servlet fantôme

                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                      • Editeur
                                      • Markdown