Wie führe ich Java 8 Lambda in JSP-Dateien aus?

Sep 25 2020

Dies ist ein Java JSP-Projekt mit Maven-Management und lokaler Ausführung von Jetty.

Ich habe ein Problem, bei dem dieser Fehler auftritt, wenn ich versuche, Lambda in .jspfDateien auszuführen : Lambda expressions are allowed only at source level 1.8 or above.

Mein Setup:

  • In der Projektstruktur in Intellij IDEA habe ich Project SDK und Project Language auf Java 8 gesetzt.
  • Die Sprachstufe des Moduls beträgt 8 - Lambdas, Typanmerkungen usw.
  • Verwenden von <maven.compiler.source>1.8</maven.compiler.source>und<maven.compiler.target>1.8</maven.compiler.target>
  • Die Projektbytecode-Version ist auf 1.8 eingestellt
  • Neueste Version von Jetty (v9.4.31.x)
  • Das Projekt verwendet das jetty-jspc-maven-pluginPlugin, das ich eingestellt habe, sourceVersionund targetVersionauf 1,8 Zoll<configuration>

Fehlt mir etwas oder ist Java 8 mit JSP / jspc einfach nicht möglich?

Antworten

JoakimErdfelt Sep 25 2020 at 20:59

Die bestehende https://github.com/jetty-project/embedded-jetty-jspHier finden Sie ein Beispiel für die Einrichtung von compilerSourceVMund compilerTargetVM, damit Ihre *.jspDateien Java 8-Funktionen wie Lambda verwenden können.

Grundsätzlich konfigurieren Sie Ihre JettyJspServlet

// Create / Register JSP Servlet (must be named "jsp" per spec)
ServletHolder holderJsp = new ServletHolder("jsp", JettyJspServlet.class);
holderJsp.setInitOrder(0);
holderJsp.setInitParameter("logVerbosityLevel", "DEBUG");
holderJsp.setInitParameter("fork", "false");
holderJsp.setInitParameter("xpoweredBy", "false");
holderJsp.setInitParameter("compilerTargetVM", "1.8");
holderJsp.setInitParameter("compilerSourceVM", "1.8");
holderJsp.setInitParameter("keepgenerated", "true");
servletContextHandler.addServlet(holderJsp, "*.jsp");

Ich habe eine lambda.jsp hinzugefügt , die ein einfaches Lambda in einer JSP verwendet, um dies zu beweisen. (Lambdas gemischt mit JspWriter von jsp ist ziemlich kompliziert, es war im Nachhinein nicht die beste Wahl für ein Beispiel)