Jetty - Unable to compile class for JSP
问题与分析
在启动公司项目时发现报错如下:
[jetty] 2019-10-07 10:28:28.760:WARN:org.apache.jasper.compiler.Compiler:Error compiling file: D:\lewis.liu\CBX_KME\Program\jetty-temp\main\jsp\org\apache\jsp\invalidatePrevSession_jsp.javanull
[jetty] 2019-10-07 10:28:28.763:WARN::/main/invalidatePrevSession.jsp
[jetty] org.apache.jasper.JasperException: PWC6033: Unable to compile class for JSP||PWC6199: Generated servlet error:|The import com.core.cbx.ui.zk.cul.grid.renderer.FileLinkCellRenderer cannot be resolved||
[jetty] at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:123)
[jetty] at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:296)
[jetty] at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:376)
[jetty] at org.apache.jasper.compiler.Compiler.compile(Compiler.java:437)
[jetty] at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:608)
[jetty] at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:360)
[jetty] at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:486)
[jetty] at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:380)
[jetty] at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
非常直观的错误,在启动项目时,jetty报错,无法编译invalidatePrevSession.jsp
该文件,原因是FileLinkCellRenderer
这个类无法被解析。接着看该jsp文件,可以发现import了不少java类,如下:
<%@page import="com.core.cbx.action.ActionDispatcher"%>
<%@page import="com.core.cbx.action.exception.ActionException"%>
<%@page import="com.core.cbx.action.actionContext.UserRegisterIp"%>
<%@page import="org.apache.commons.lang3.BooleanUtils" %>
<%@page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="com.core.cbx.ui.zk.cul.grid.renderer.FileLinkCellRenderer"%>
<%@page import="com.core.cbx.resource.service.LabelManager"%>
那么问题来了,为什么只有FileLinkCellRenderer
无法被解析?其它类却可以正常导入?继续查看这个无法导入的类,发现使用了Lambda表达式,将这些Lambda表达式注释掉,重新启动项目,发现不再发生上述错误,这说明JSP页面之所以无法被编译,正是由于导入的Java类中使用了Lambda表达式!
Lambda表达式是jdk1.8的新特性,而项目使用使用的是jetty6.1.26,在查询资料后了解到,这和jetty版本有关系。低版本的jetty并不支持jdk1.8,所以在编译JSP时,如果导入了使用到jdk1.8新特性的java文件就会报错。官网上虽然给出了jetty和jdk对应的版本关系,但并不是很准确。根据本人测试,在使用9.2.20.v20161216
的jetty-maven插件时就不会遇到这个问题了。
解决方法
方案一:使用更高版本的支持jdk1.8的jetty
改用至少9.2版本的jetty来启动项目,如果是maven项目,则可以使用如下版本的jetty插件:
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.20.v20161216</version>
<configuration>
</plugin>
方案二:不使用jdk1.8的新特性,譬如Lambda表达式
根据具体报错,将JSP里导入的java文件中有关的jdk1.8的新特性去掉,可以规避低版本jetty无法编译JSP文件的问题。
参考链接
Jetty - Unable to compile class for JSP的更多相关文章
- JSP连接数据库,报Unable to compile class for JSP
先看一下报错原因: HTTP Status 500 - Unable to compile class for JSP: type Exception report message Unable to ...
- org.apache.jasper.JasperException: Unable to compile class for JSP
项目启动时报错 : The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory S ...
- jsp调用javabean出现错误HTTP Status 500 - Unable to compile class for JSP
HTTP Status 500 - Unable to compile class for JSP: type Exception report message Unable to compile ...
- Count:858org.apache.jasper.JasperException: Unable to compile class for JSP
1.错误描述 Count:858org.apache.jasper.JasperException: Unable to compile class for JSP: An error occurre ...
- Servlet.service() for servlet [jsp] in context with path [/Healthy_manager] threw exception [Unable to compile class for JSP] with root cause java.lang.IllegalArgumentException: Page directive: inval
严重: Servlet.service() for servlet [jsp] in context with path [/Healthy_manager] threw exception [Una ...
- Unable to compile class for JSP
https://www.cnblogs.com/mthoutai/p/7136304.html 错误提示: The return type is incompatible with JspSource ...
- tomcat启动后,页面浏览时报错 Unable to compile class for JSP的解决方案【原创】
问题描述: tomcat启动后,console正常,console中语句为: 信息: Server startup in 7291 ms 但浏览器访问首页面http://localhost:808 ...
- JAVA Drp项目实战—— Unable to compile class for JSP 一波三折
交代下背景.电脑系统是64位的,用的是64位的Tomcat.安装是32位的Myeclipse10,java环境也是32位的.Tomcat在開始启动时会报这样一个错误,"Can't load ...
- JSP Unable to compile class for JSP
今天刚弄好MyEclipse环境,试了一下jsp的创建,然后就出现了一个很令人纠结的问题. 文档目录如下: Jsp代码如下: <%@page import="com.pd.Person ...
随机推荐
- SQL查看数据库中每张表的数据量和总数据量
查看所有表对应的数据量 SELECT a.name AS 表名, MAX(b.rows) AS 记录条数 FROM sys.sysobjects AS a INNER JOIN sys.sysinde ...
- 关闭ShowDialog的模态窗口
[DllImport("user32.dll")] private static extern IntPtr FindWindow(string a, string b); [Dl ...
- Java Web-JQuery学习
Java Web-JQuery学习 JQuery概念 是一个JS框架,可以用来简化JS的开发,设计宗旨是"write less,do more",即写更少的代码,做更多的事情.它封 ...
- SQLSEVER 同台服务器下不同表 触发器实现数据实时同步
触发器的使用: 1.首先建立两个相同结构的表,两个表明的列的名称不同. student_01 字段 name ; 字段 age ; 字段 class ; student_02 字段 ...
- SecureCRT和SecureFX的安装和破解
1.SecureCRT & SecureFX 介绍 1.1 SecureCRT SecureCRT 是一款终端仿真软件,和 Putty 的功能类似. 不过相比Putty比较简单的功能,Secu ...
- Android笔记(十三) Android中的基本组件——文本
Android中常用的文本组件有 普通文本框(TextView)和编辑框(EditText)两种 EditText是TextView的子类,作用就是在界面上显示文本,区别是EditText允许用户编辑 ...
- DNS服务——域名解析委派
域名解析委派 域名解析委派和DNS域名解析递归查询很像,举个例子解释域名解析委派 ①假设在.net域名下有台计算机想要访问www.cac.com. ②.net这台DNS服务器不知道www.cac.co ...
- Mysql安装与问题合集
下载mysql https://dev.mysql.com/downloads/mysql/ 下载历史版本 看这篇文章 https://www.cnblogs.com/reyinever/p/8551 ...
- Spring Boot 2发送邮件手把手图文教程
原文:http://www.itmuch.com/spring-boot/send-email/ 本文基于:Spring Boot 2.1.3,理论支持Spring Boot 2.x所有版本. 最近有 ...
- Loadrunner 计算保留两位小数不四舍五入
有时候在测试过程中会截取返回值,当你截取的值不是最终的值,需要进行计算后才能使用并且需要保留两位小数,不进行四舍五入的计算: 此时 我使用了各种办法,但是最终我采用了一种最直接,最暴力的方法就是先乘后 ...