Bagaimana cara menjalankan Java 8 lambda di file JSP
Ini adalah proyek Java JSP dengan manajemen Maven, dan menjalankan Jetty secara lokal.
Aku punya masalah di mana saya mendapatkan error ini ketika mencoba untuk menjalankan lambda di .jspffile: Lambda expressions are allowed only at source level 1.8 or above.
Setup saya:
- Dalam struktur proyek di Intellij IDEA saya telah menetapkan SDK Proyek dan bahasa Proyek ke Java 8.
- Tingkat bahasa modul adalah 8 - Lambdas, jenis anotasi, dll.
- Menggunakan
<maven.compiler.source>1.8</maven.compiler.source>dan<maven.compiler.target>1.8</maven.compiler.target> - Versi bytecode proyek disetel ke 1.8
- Versi terbaru Jetty (v9.4.31.x)
- Proyek ini menggunakan
jetty-jspc-maven-pluginplugin yang sudah saya setelsourceVersiondantargetVersionke 1.8 in<configuration>
Apakah ada sesuatu yang saya lewatkan, atau apakah Java 8 sama sekali tidak mungkin dengan JSP / jspc
Jawaban
Yang ada https://github.com/jetty-project/embedded-jetty-jspmemiliki contoh menyiapkan compilerSourceVMdan compilerTargetVMmengizinkan *.jspfile Anda menggunakan fitur Java 8, seperti lambda's.
Pada dasarnya Anda mengkonfigurasi file 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");
Saya melanjutkan dan menambahkan lambda.jsp yang menggunakan lambda sederhana dalam JSP untuk membuktikannya. (lambda's dicampur dengan jsp's JspWriter agak rumit, itu bukan pilihan terbaik dari contoh di belakang)