Pourquoi la création de Servlets dans Eclipse me casser web.xml?
Être un peu paresseux, j'étais plutôt heureux de voir que je pouvais créer une nouvelle servlet code source en allant de Nouveau -> Servlet, au lieu d'aller à New -> Classe et puis l'édition de la classe dans une servlet.
Cependant, j'ai découvert que chaque fois que je créer une nouvelle servlet dans Eclipse, Eclipse modifie mon web.xml.
Plus précisément, il modifie le premier élément:
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:javaee="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/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
id="WebApp_ID" version="2.4">
(Retours à la ligne (la mienne.)
Cela ne semble pas nécessairement une mauvaise chose, mais ensuite il modifie les divers sous-éléments en mettant "javaee:" en face de leur nom, pour indiquer que ces éléments appartiennent à cet espace de noms.
Par exemple, les changements de
<display-name>ShowLifecycles</display-name>
à
<javaee:display-name>ShowLifecycles</javaee:display-name>
Après qui éclipse puis se plaint à propos de tous les éléments qu'il a modifié, en me donnant des notes telles que:
cvc-complex-type.2.4.a: Invalid content was found starting with element 'javaee:display-name'. One of '{"http://
java.sun.com/xml/ns/j2ee":description, "http://java.sun.com/xml/ns/j2ee":display-name, "http://java.sun.com/xml/ns/
j2ee":icon, "http://java.sun.com/xml/ns/j2ee":distributable, "http://java.sun.com/xml/ns/j2ee":context-param, "http://
java.sun.com/xml/ns/j2ee":filter, "http://java.sun.com/xml/ns/j2ee":filter-mapping, "http://java.sun.com/xml/ns/
j2ee":listener, "http://java.sun.com/xml/ns/j2ee":servlet, "http://java.sun.com/xml/ns/j2ee":servlet-mapping, "http://
java.sun.com/xml/ns/j2ee":session-config, "http://java.sun.com/xml/ns/j2ee":mime-mapping, "http://java.sun.com/xml/ns/
j2ee":welcome-file-list, "http://java.sun.com/xml/ns/j2ee":error-page, "http://java.sun.com/xml/ns/j2ee":jsp-config, "http://
java.sun.com/xml/ns/j2ee":security-constraint, "http://java.sun.com/xml/ns/j2ee":login-config, "http://java.sun.com/xml/ns/
j2ee":security-role, "http://java.sun.com/xml/ns/j2ee":env-entry, "http://java.sun.com/xml/ns/j2ee":ejb-ref, "http://
java.sun.com/xml/ns/j2ee":ejb-local-ref, "http://java.sun.com/xml/ns/j2ee":service-ref, "http://java.sun.com/xml/ns/
j2ee":resource-ref, "http://java.sun.com/xml/ns/j2ee":resource-env-ref, "http://java.sun.com/xml/ns/j2ee":message-
destination-ref, "http://java.sun.com/xml/ns/j2ee":message-destination, "http://java.sun.com/xml/ns/j2ee":locale-
encoding-mapping-list}' is expected.
Pour aggraver les choses, lorsque j'utilise rechercher et remplacer pour supprimer tous les "javaee:" portées le fichier, Eclipse se plaint toujours à propos de ces même si ils n'y sont plus. Je dois copier et coller la totalité du solde de fichier sur lui-même pour faire ces plaintes en aller.
Je suis sûr que Eclipse est d'essayer d'être utile, d'anticiper certains le désir ou le besoin de cet espace de noms. Comment puis-je faire une de deux choses:
- Faire arrêter de faire cela?
- Profiter de ce qu'il est en train de faire, et le faire fonctionner pour moi plutôt que contre moi?
Pouvez-vous utiliser servlet 3.0?
Je suis un novice quand il s'agit de servlets. Je pourrais sans doute l'utilisation de servlet 3.0, mais je ne sais même pas quelle version je suis en train d'utiliser (je pense que le dernier) ou comment la raconter à utiliser une version différente.
b - Qui serait la solution la plus simple, mais plutôt que de l'éviter, je préfère le comprendre. 🙂
Prenez Tomcat 7.0 et l'utilisation de servlet 3.0. WTP a soutien pour elle aussi, afin de lui donner un essai.
OriginalL'auteur Brian Kessler | 2010-10-24
Vous devez vous connecter pour publier un commentaire.
Je n'ai jamais vu cela avant, mais cela indique que votre projet Eclipse est vraiment foiré. Au moins la
web.xml
racine déclaration ne fait pas de proférer des sens. Il ressemble à un mélange de Servlet 2.4 et 2.5 spécifications. Peut-être que Eclipse est confus parce que l'espace de noms racine (xmlns
) pointe vers la Servlet 2.4 (avecj2ee
URI), tandis que le projet web lui-même est défini en tant que Servlet 2.5 ou plus récente (qui devrait être à l'aide de l'un avecjavaee
URI).Aussi, lorsque votre projet web est mis à Servlet 3.0 lors de la création, par défaut pas
web.xml
sera généré par Eclipse en raison de la nouvelle Servlet 3.0 annotations comme@WebServlet
,@WebFilter
, etc.. ce qui rend leweb.xml
superflu. Lorsque vous créez de nouveaux servlets par Nouveau > Servlet, Eclipse va déjà de générer automatiquement ces annotations. Probablement que vous avez essayé de créer leweb.xml
vous-même basé sur de la désinformation.Je vous suggère de sauvegarder un peu de code si nécessaire, jeter l'ensemble du projet à l'écart et en créer un nouveau avec les paramètres appropriés et ne pas toucher le
web.xml
racine déclaration.En supposant que vous utilisez la dernière Eclipse version, Helios SR1 pour les développeurs Java EE, cliquez avec le bouton droit de l'Éclipse du de l'Explorateur de Projet, choisissez Nouveau > Projet Web Dynamique et il vous suffit de remplir le nom du projet et de garder tout par défaut. Cliquez sur Prochaine jusqu'à la dernière étape et cochez ensuite la case Générer web.xml le descripteur de déploiement de case à cocher Eclipse en générer un. La racine de la déclaration devrait alors ressembler à ceci:
Qui fonctionne, sauf une chose: comment dois-je inclure des servlets dans un <jsp:include> tag? Par exemple, j'ai maintenant un TableServlet, mais si j'ai mis <jsp:include page="/TableServlet" flush="true"> dans la JSP, j'obtiens cette erreur: Plusieurs annotations trouvé à cette ligne: - Fragment "/TableServlet" n'a pas été trouvé à la trajectoire prévue de l' /SamsTeachYourselfJSP_2/ WebContent/TableServlet - Fragment "/TableServlet" n'a pas été trouvé à la trajectoire prévue de l' /SamsTeachYourselfJSP_2/ WebContent/TableServlet
C'est un autre problème. Eclipse du JSP/EL syntaxe validator est un epic fail. Il suffit de les ignorer et de les exécuter. Vous verrez que ça fonctionne, tout simplement. Vous pouvez désactiver cette terrible JSP validateur dans Eclipse, préf. Questions connexes: stackoverflow.com/questions/1790749, stackoverflow.com/questions/2268153, stackoverflow.com/questions/2975168, etc..etc..
Vous avez raison! Elle fonctionne.
Vraiment il fonctionne 🙂 En passant, y compris une servlet dans une JSP est un peu l'odeur. De toute façon, vous êtes encore à apprendre, hein? Puissé-je être si gentil à vous suggérons de lire les jsp et servlets la balise pages d'info pour bien plonger dans les bases? Au bas de l'étiquette des pages d'info, vous pouvez trouver très utile de liens pointant vers une mine d'informations.
OriginalL'auteur BalusC
J'ai eu un problème similaire. J'ai apporté une application web d'un ancien Tomcat 6/la version 6 de Java Tomcat 7/Java 7. Je fais un copier collé existant web.xml corps dans le nouveau 3.0 web.xml. Tout allait bien jusqu'à ce que j'ai ajouté une servlet qui avait init-param, affichez-le nom, la description et load-on-startup paramétrée. Eclipse marqué ces params comme rompu avec un "non valide le contenu...". Grâce à stackoverflow, j'ai trouvé que load-on-startup devait venir après init-params mais seulement un RTFM pour la façon dont ils le savaient. Mes autres params ont été encore signalé comme rompu. C'est ce que l'web.xml l'en-tête ressemblait quand il était cassé:
J'ai changé la dtd ns/j2ee et web-app_2_5.xsd, et Ecliupse cessé de se plaindre. Mais son 2014 et nous nous dirigeons vers Tomcat 8 bientôt. Alors j'ai creusé dans le dur et trouvé les docs . Dans l'application web 3.0 les paramètres doivent être dans cet ordre:
Une fois j'ai mis mes params dans l'ordre, l'Éclipse était heureux avec ns/javaee et web-app_3_0.xsd.
OriginalL'auteur Ed Pike
Déplacer "-nom d'affichage" comme premier élément de sous "servlet" de la balise, l'erreur de validation devraient disparaître.
OriginalL'auteur Vayu
Assurez-vous que le
web.xml
fichier commence par la balise suivie par la baliseDans mon cas, j'ai eu balise DOCTYPE et la suppression de la balise DOCTYPE de la web.xml effacé moi cette erreur,
OriginalL'auteur Lucky