首页 > 解决方案 > 如何在 JSP 文件中运行 Java 8 lambda

问题描述

这是一个带有 Maven 管理的 Java JSP 项目,并在本地运行 Jetty。

尝试在.jspf文件中运行 lambda 时出现此错误:Lambda expressions are allowed only at source level 1.8 or above.

我的设置:

有什么我遗漏的吗,或者 JSP / jspc 根本不可能使用 Java 8

标签: javajsplambdajetty

解决方案


现有的https://github.com/jetty-project/embedded-jetty-jsp有一个设置compilerSourceVMcompilerTargetVM允许您的*.jsp文件使用 Java 8 功能(如 lambda)的示例。

基本上你配置你的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");

我继续添加了一个lambda.jsp,它在 JSP 中使用一个简单的 lambda 来证明这一点。(lambda 与 jsp 的 JspWriter 混合相当复杂,事后看来它不是示例的最佳选择)


推荐阅读