Tomcat 7 und JSTL
Schrieb ich eine web-Anwendung mit Eclipse, Tomcat und es funktioniert auf meinem lokalen Tomcat 7, wenn ich versuchte, Sie zu veröffentlichen es online auf einem Tomcat 7, hatte ich die folgende Fehlermeldung:
SCHWERWIEGEND: Servlet.service() for servlet [obliquid.- servlet.Index] im Zusammenhang mit path [/cp] warf Ausnahme [Der absolute uri:
http://java.sun.com/jsp/jstl/core
aufgelöst werden können, entweder web.xml oder die jar-Dateien bereitgestellt, die mit dieser Anwendung]
Tomcat 7 hat "Spec-Versionen: Servlet 3.0, JSP 2.2, EL 2.2", so JSTL ist nicht im Lieferumfang enthalten?
Als ich versuchte zum hochladen standard.jar und jstl.jar ich hatte die folgende Fehlermeldung:
org.apache.jasper.JasperException: /jsp/index.jsp (Zeile: 3, Spalte: 62) Nicht in der Lage zu Lesen TLD "META-INF/c.tld" aus der JAR-Datei "jndi:/localhost/cp/WEB-INF/lib/standard.jar": org.apache.jasper.JasperException: konnte nicht geladen oder instanziiert TagLibraryValidator Klasse: org.apache.taglibs.standard.tlv.JstlCoreTLV
Ich habe einige googeln, aber ich konnte nicht klären, einige sagte, es könnte verursacht werden durch widersprüchliche Versionen der jars. Vielleicht sollte ich nicht gehören diese Gläser und verwenden Sie einen anderen JSTL url? Mir ist für die JSTL 1.1, denke ich, ist es eine neue URL für die JSTL 1.2?
Was soll ich tun, um das problem zu lösen und machen Sie diese Anwendung ausführen?
[Tags]
unter der Frage, bis ein Feld erscheint, und klicken Sie anschließend auf die info link. InformationsquelleAutor der Frage stivlo | 2011-05-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tomcat hat nie aufgenommen JSTL.
Sollte man die jstl-Tag-und standard-Gläser in
WEB-INF/lib
(hast du getan), und stellen Sie sicher, dass die Berechtigungen zu Lesen (chmod)Ihre URI ist richtig und es sollte funktionieren (funktioniert hier)
InformationsquelleAutor der Antwort Bozho
Habe ich gekämpft mit dieser für mehrere Stunden.
Hier ist eine komplette Lösung.
Ich bin mit Tomcat 7, der ein Servlet-3.0-kompatible server.
Wenn Sie wünschen, verwenden Sie den Servlet-3.0-Spezifikation, Sie müssen Ihre web.xml wie folgt:
Wenn Sie mit Maven, Ihre pom.xml sollten diese Zeilen.
Diese Abhängigkeiten sind sehr wichtig. JSTL 2.1 + Tomcat 7 + Servlet 3.0 ist sehr gebrochen, es sei denn, Sie beheben es mit Hilfe dieser Linien, vor allem der Ausgrenzung Teil. Was geschieht, ist die JSTL 2.1 Gläser sind tatsächlich ziehen in die falschen Versionen der Servlet spec--2.5. Es sei denn, Sie stoppen, dass aus geschieht, werden Sie in eine ganze Welt der Schmerzen. Einen besonderen Dank an Mr. Murray Todd Williams für diese Einblicke .
Schließlich, im Falle von Maven nicht finden können, diese GLÄSER, können Sie Eclipse glücklich durch die inklusive drei GLÄSER mit Ihrem Projekt und die übliche Projekt--> Properties--> Java Build Path und include Sie auf diese Weise-obwohl Maven kümmern sollte.
Bitte beachten! Diese Belegung gilt nur, wenn Sie die Magische Kombination von:
Einem Servlet-3.0-konformer application server wie Tomcat 7
Ihre web.xml hat den richtigen namespace für die Servlet 3.0 Spezifikation
Du diese drei GLÄSER aus, und keine anderen JSTL oder Servlet-GLÄSER auf Ihren Klassenpfad ein.
Stellen Sie sicher, dass keine Kopien von diesen Gläsern, die in Ihrem WEB-INF/lib-Verzeichnis, da Sie würden in diesem Fall werden an den server gesendet, wodurch LinkageErrors.
In Ihr JSP zu können, müssen Sie diese PRÄZISE Linie, formatiert genau so, wie ich es haben oder sonst Eclipse jammern, dass es nicht erkennt die c:bla tags:
Was für ein danged PITA! Dies ist VIEL schwieriger zu implementieren als jede andere version der JSTL. Dies ist das einzige Beispiel für etwas, das immer viel komplizierter, anstatt einfacher in späteren Iterationen.
InformationsquelleAutor der Antwort Tom Hunter
Ihre uri ist korrekt für JSTL 1.2. Sie müssen zwei Dinge tun :
Ändern Sie Ihre
web.xml
verwenden die neuesten web-app-version.Es sollte in etwa so Aussehen oder eine höhere version;
Zweitens setzen die richtige version der jstl-Gläser in Ihrem code. Für 1.2 Sie können Sie herunterladen hier.
Sollten Sie auf zwei Gläser:
Verwenden Sie diese anstelle von
standard.jar
undjstl.jar
wurden für die Vorherige version.Lassen Sie uns wissen, wie das funktioniert für Sie.
InformationsquelleAutor der Antwort VikC
Für das laufen auf apache tomcat 7 hinzufügen, diese in Ihre POM ist wahrscheinlich angemessen. Diese Gläser keine Referenz javax.servlet-Gläser wie glassfish-do, so gibt es keine Notwendigkeit für Ausnahmen.
InformationsquelleAutor der Antwort K.Nicholas
Für Tomcat, gibt es eine einfachere Abhängigkeit Lösung für JSTL 1.1.2:
Sehen hier für mehr details (persönlicher blog).
REM: Mehr Informationen, wie gefordert, man muss JSTL Abhängigkeiten zur Verfügung zu stellen, die auf Tomcat. Doch, die version 1.2 ist nicht wirklich notwendig, seit der version 1.1.2 (geliefert von Apache, wie Tomcat) tut den job auch. Seine einzige Voraussetzung ist Servlet 2.4 und JSP 2.2, und die OP erwähnen, Servlet 3.0 und JSP 2.0, die ist gut genug.
InformationsquelleAutor der Antwort JVerstry
Gibt es zwei Antworten hier, die sind meist korrekt mit Bezug auf, wie dieses problem zu lösen, bei der Verwendung von Maven beim Umgang mit diesem Thema. Allerdings sind beide nicht zu 100% fertig.
Über AUSSCHLÜSSE pro @Tom Hunter ' s Antwort
Diese Antwort funktioniert. Allerdings wird es noch werden log-Nachrichten von Tomcat über doppelte TLD-Definitionen. Dies ist, weil sowohl die jstl und jstl-impl Artefakte gehören die TLD-Definitionen. Entfernen Sie diese Nachrichten, ich denke, eine bessere Maven-setup ist diese:
Diese enthält nur die jstl-api-Klassen mit den notwendigen AUSSCHLÜSSE zu vermeiden, die Probleme erläutert, die im rest der Antwort.
Mit neuen POM-Versionen pro @George ' s Antwort
Es dauerte eine Weile um es zu realisieren, aber es gibt neuere Versionen der JSTL pom verfügbar. Es ist wirklich verwirrend, weil diese neueren Pakete verwenden ähnliche, aber leicht unterschiedliche Namenskonventionen. Diese neueren Versionen markieren Sie die javax.servlet, javax.jsp, etc Abhängigkeiten vorgesehenen Umfang, so dass Sie nicht brauchen, ausgeschlossen werden. Die version 1.2.1 ist, hängt 1.2.1 version der jstl-api. Und so würde arbeiten, als auch, wie oben, Antwort:
Diese unterscheidet sich geringfügig von George ' s Antwort, weil ich geändert scope zur Laufzeit. George angegeben als Umfang zur Verfügung gestellt. Mit einer zur Verfügung gestellten Rahmen, die Gläser müssten manuell kopiert werden in das Tomcat-lib-Verzeichnis, oder eine andere Abhängigkeit haben würde, um auch den nötigen Umsetzung.
Jedoch konnte ich nicht finden, die 1.2.1 version von der impl in maven central, jboss repo, oder irgendwelche anderen repos. Ich landete im Kreis herum und schließlich nur einen lokalen Datei-basierte repo zum speichern des jar. Die Abhängigkeit und Glas werden hier beschrieben:
InformationsquelleAutor der Antwort kaliatech
Keines dieser arbeitete für mich, ich habe einfach ein Projekt angelegt ist, ohne die Verwendung von Maven und das hinzufügen der JAR-Dateien direkt.
InformationsquelleAutor der Antwort pgonzaleznetwork
Litt ich die Fehlermeldung: SCHWERWIEGEND: Servlet.service() for servlet [obliquid.- servlet.Index] im Zusammenhang mit path [/cp] warf Ausnahme [Der absolute uri: http://java.sun.com/jsp/jstl/core aufgelöst werden können, entweder web.xml oder die jar-Dateien bereitgestellt, die mit dieser Anwendung] auf Tomcat 7
Die Lösung:
kopieren Gläser jstl-1.2.jar und javax.servlet.jsp.jstl-api-1.2.1.jar gerade auf dem Tomcat-Bibliothek-Verzeichnis. Erneutes bereitstellen von Tomcat-Bibliothek in Eclipse wieder.
InformationsquelleAutor der Antwort Tomasz
Folgende Abhängigkeiten in der pom.xml scheint das Problem zu beheben:
War eine seltsame Kombination - zwei verschiedene groupIds - aber es funktioniert :). Meine Erwartung war, um zu sehen, die gleichen Gruppen-ID für beide Gläser. Ich schaffte es erneut bereitstellen, ohne ein problem zu Tomcat 7.
Auch, wenn Sie sehen, "Unkown tag
InformationsquelleAutor der Antwort George