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 ?
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...
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 ?
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).
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)
Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
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.
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 :
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.
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
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.
Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
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?
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
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.