Wie kommst du embedded Jetty 9 erfolgreich zu lösen das JSTL-Tag-URI?

Ich bin Verpackung ein Web Application Archive (.Krieg), so dass es gestartet werden kann über java -jar webapp.war in einer shell startet eine eingebettete Kopie der Steg 9 mit diesem code in einer main-Klasse:

int port = Integer.parseInt(System.getProperty("port", "80")); //I know this has implications :)
String contextPath = System.getProperty("contextPath", "");
Server server = new Server(port);
ProtectionDomain domain = Deployer.class.getProtectionDomain();
URL location = domain.getCodeSource().getLocation();
WebAppContext webapp = new WebAppContext();
webapp.setContextPath("/" + contextPath);
webapp.setWar(location.toExternalForm());
server.setHandler(webapp);
server.start();
server.join();

Ich bin allerdings läuft in diesen Fehler, wenn die ersten JSP mit einer JSTL-taglib-Deklaration kompiliert wird:

org.apache.jasper.JasperException: /WEB-INF/html/user/login.jsp(2,62) PWC6188: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:92)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:378)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:172)
at org.apache.jasper.compiler.TagLibraryInfoImpl.generateTLDLocation(TagLibraryInfoImpl.java:431)
at org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:240)
at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:502)
at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:582)
at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1652)
at org.apache.jasper.compiler.Parser.parse(Parser.java:185)
at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:244)
at org.apache.jasper.compiler.ParserController.parse(ParserController.java:145)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:212)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:625)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:492)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:378)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:698)
etc...

Den ersten paar Zeilen, dass JSP sind wie folgt:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" isELIgnored="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

Ist, habe ich mich um einiges (dies scheint nicht zu einem neuen Thema) und haben versucht, die folgenden Lösungen:

  • Abnehmen meine Abhängigkeiten und sucht Konflikte (derzeit bin ich nur abhängig von der jetty-serverjetty-webappund jetty-jsp alle version 9.0.4.v20130625)
  • Die Angabe einer expliziten <taglib> Zuordnung in der webapp ist web.xml Datei, die Punkte zu JSTL direkt (habe diese Idee aus der Lektüre der JSP-spec)
  • Ändern den server-classpath als pro diese Antwort
  • Unter Ausnutzung von Methoden der WebAppContext wie addServerClass und setParentLoaderPriority

Laut Der Jetty-Dokumentationmit JSTL sollte nur arbeiten, aber ich denke, der Kontext eingebettet werden können, verändert die Art, wie JSTL geladen wird und verursacht es zu scheitern.

Würde schätzen, irgendwelche Ideen oder Vorschläge. Dieses setup würde ersetzen ein älteres setup, das hat die gleiche Sache erfolgreich unter Windows, war aber nicht funktionieren auf Linux aufgrund der Aufnahme von einer alten Abhängigkeit brachte, dass Sie in dieser Fehler. Leider, ich habe nicht in der Lage gewesen, einen schnellen Ersatz für die Abhängigkeit (groupId org.mortbay.jetty artifactId jsp-2.1-glassfish version 2.1.v20100127) nicht vorstellen das JSTL-Tag-URI stack-trace erwähnt.

UPDATE: die ich gefunden habe, eine suboptimale Lösung. Ein downgrade auf Jetty 7 inspiriert von dieser thread jetzt hat mich zum laufen. Dies ist eine gute Nachricht, aber es ist entmutigend, dass wenn ich später erforderliche Funktionalität exklusiv für Jetty 8 oder Steg 9, dass ich Schrott diese Bereitstellung der Infrastruktur. Jeder Einblick auf JSTL taglib Problem in Jetty 9 würde immer noch geschätzt werden.

InformationsquelleAutor der Frage William Proffitt | 2013-07-16

Schreibe einen Kommentar