Warum ist das erstellen von Servlets in Eclipse breaking my web.xml?
Etwas faul, ich war ziemlich glücklich, dass ich könnte, erstellen Sie ein neues servlet-Quellcode durch gehen Neuen -> Servlet, anstatt Neues -> Klasse und dann Bearbeiten Sie die Klasse in ein servlet.
Allerdings habe ich entdeckt, dass jedes mal, wenn ich ein neues servlet in Eclipse, Eclipse ändert meine web.xml.
Speziell, es ändert die top-element:
<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">
(Zeilenumbrüche mine.)
Scheint dies nicht unbedingt schlecht sein, aber dann ändert es verschiedene sub-Elemente, indem Sie "Java ee:" vor Ihren Namen, um anzuzeigen, dass diese Elemente gehören in diesem namespace.
Zum Beispiel, es ändert sich
<display-name>ShowLifecycles</display-name>
zu
<javaee:display-name>ShowLifecycles</javaee:display-name>
Nachdem, welche eclipse meckert dann über alle Elemente modifiziert, dass Sie mir Bezeichnungen wie:
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.
Noch schlimmer zu machen, wenn ich mit suchen und ersetzen zu löschen, alle zu "Java ee:" welche Würfe die Datei, Eclipse beschwert sich trotzdem über diese, obwohl Sie nicht mehr da sind. Muss ich kopieren und einfügen die gesamte restliche Datei auf sich selbst um diese Beschwerden gehen Weg.
Ich bin sicher, dass Eclipse versucht, nützlich zu sein, erwarten manche wollen oder brauchen für diesen namespace. Wie kann ich das tun, entweder eines von zwei Dingen:
-
Machen Sie es zu stoppen, dies zu tun?
-
Nutzen was auch immer es ist Sie versuchen zu tun, und es funktioniert für mich, anstatt gegen mich?
- dies ist ein guter Grund, um zu vermeiden, Eclipse wizards
- Können Sie verwenden, servlet 3.0?
- Ich bin ein Neuling, wenn es um servlets. Ich könnte wahrscheinlich verwenden, servlet 3.0, aber ich weiß gar nicht, welche version ich derzeit mit (ich glaube die neuste) oder wie man es sagen, eine andere version verwenden.
- b - Das wäre die einfachste Lösung, aber anstatt es zu vermeiden, würde ich es vorziehen, es zu verstehen. 🙂
- Schnappen Sie Tomcat 7.0 und Verwendung der servlet 3.0. WTP unterstützt es auch, also versuchen Sie es.
- Ich bin bereits mit Tomcat 7.0 ... etwas spezifischer sollte ich tun, um es verwenden servlet 3.0?
- Überprüfen Sie Ihre Projekt-Facetten in Eclipse. Die version von Dynamische Web-Modul 3.0
- Cheers für die info. Für besser oder schlechter, das ist genau die version die ich habe, so das dieses Problem nicht behoben.
- Ihre web.xml Ansprüche, die Sie verwenden 2.4 statt 3.0. Es gibt einige mismatch 😉 Kannst du reinigen?
- Das kann entweder aus dem tutorial habe ich gerade arbeite, über oder vor. Ich werde versuchen, es zu verändern 3.0, um zu sehen, ob es hilft (oder schadet).
- Scheint nicht, etwas zu ändern. Eclipse verhält.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich noch nie gesehen, dies vor, aber dies bedeutet, dass Ihr Eclipse-Projekt ist wirklich Durcheinander. Zumindest die
web.xml
root-Erklärung macht keinen völligen Sinn. Sie sehen aus wie eine Mischung aus Servlet 2.4 und 2.5 Spezifikationen. Vielleicht Eclipse ist immer verwirrt, weil der root-namespace (xmlns
) verweist auf das Servlet 2.4 (mitj2ee
URI), während Sie das web-Projekt selbst ist als Servlet 2.5 oder neuer (die sollten mit den mitjavaee
URI).Auch, wenn Ihr web-Projekt auf Servlet 3.0 während der Erstellung standardmäßig keine
web.xml
generiert von Eclipse, weil die neuen Servlet 3.0-Anmerkungen wie@WebServlet
,@WebFilter
usw.. das macht dieweb.xml
überflüssig. Beim anlegen von neuen servlets durch Neue > Servlet, Eclipse wird bereits autogenerate diese Anmerkungen. Wahrscheinlich haben Sie versucht, dieweb.xml
sich basierend auf Fehlinformationen.Ich würde vorschlagen, um backup-code, wenn nötig, werfen das ganze Projekt entfernt und eine neue erstellen mit den richtigen Einstellungen und berühren Sie nicht die
web.xml
root-Erklärung.Davon aus, dass Sie mit der neuesten Eclipse-version, Helios SR1 for Java EE developers, Eclipse Rechtsklick ist Projekt-Explorer, wählen Sie Neue > Dynamic Web Project und füllen Sie einfach den Namen des Projekts und halten alles Standard. Klicken Sie auf Nächsten bis zum letzten Schritt und dann kreuzen Generieren web.xml deployment-descriptor checkbox zu lassen, Eclipse generieren. Die root-Erklärung sollte dann wie folgt Aussehen:
Ich hatte ein ähnliches Problem. Ich habe eine web app über eine alte Tomcat 6 und Java 6 auf Tomcat 7 und Java 7. Ich kopieren und einfügen vorhandene web.xml Körper in der neuen 3.0 web.xml. Alles war gut, bis ich habe ein servlet, das hatte init-param, display-name, Beschreibung und load-on-startup Parameter. Eclipse markiert diese params als defekt mit einer "Ungültiger Inhalt gefunden...". Dank stackoverflow habe ich festgestellt, dass load-on-startup kommen musste, nach der init-params, sondern nur ein RTFM, wie Sie wusste. Meine anderen params waren noch gekennzeichnet als defekt. Dies ist, was die web.xml header aussah, wenn er gebrochen wurde:
Änderte ich die dtds in ns/j2ee-und web-app_2_5.xsd-und Ecliupse aufgehört, sich zu beschweren. Aber seine 2014 und wir bewegen werden, um Tomcat 8 bald. Also grub ich in den harten und fand die docs für . In der web-app 3.0 die Parameter müssen in dieser Reihenfolge sein:
Sobald ich meine Parameter um, Eclipse war glücklich mit ns/Java ee-und web-app_3_0.xsd.
Bewegen "display-name" als erstes element unter "servlet" - tag, der Validierung Fehler sollte Weg gehen.
Stellen Sie sicher, dass die
web.xml
- Datei beginnt mit dem tag, gefolgt von der tagIn meinem Fall hatte ich den DOCTYPE-tag und entfernen der " DOCTYPE-tag aus der web.xml gelöscht mir diese Fehlermeldung,