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:

  1. Faire arrêter de faire cela?
  2. Profiter de ce qu'il est en train de faire, et le faire fonctionner pour moi plutôt que contre moi?
c'est une bonne raison pour éviter Eclipse assistants
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