You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Tomcat 9遇JasperException:JSP编译失败,配置参数无效

Tomcat 9升级后JSP编译失败:泛型语法不支持问题

问题现象

升级应用到Tomcat 9后,出现org.apache.jasper.JasperException错误,提示无法编译JSP类,具体错误为泛型语法要求源码级别不低于1.5/1.7。

错误日志

05-Feb-2025 13:18:08.986 SEVERE [http-nio-8080-exec-7] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [jsp] in context with path [/clover_portal] threw exception [Unable to compile class for JSP:
 
An error occurred at line: [24] in the generated java file: [C:\Apache_Tomcat_9\apache-tomcat-9.0.98-windows-x64\apache-tomcat-9.0.98_Upgradation\work\Catalina\localhost\clover_portal\org\apache\jsp\export\exportCandidateList_jsp.java]
Syntax error, parameterized types are only available if source level is 1.5 or greater
 
An error occurred at line: [26] in the generated java file: [C:\Apache_Tomcat_9\apache-tomcat-9.0.98-windows-x64\apache-tomcat-9.0.98_Upgradation\work\Catalina\localhost\clover_portal\org\apache\jsp\export\exportCandidateList_jsp.java]
Syntax error, parameterized types are only available if source level is 1.5 or greater
 
An error occurred at line: [28] in the generated java file: [C:\Apache_Tomcat_9\apache-tomcat-9.0.98-windows-x64\apache-tomcat-9.0.98_Upgradation\work\Catalina\localhost\clover_portal\org\apache\jsp\export\exportCandidateList_jsp.java]
Syntax error, parameterized types are only available if source level is 1.5 or greater
 
An error occurred at line: [31] in the generated java file: [C:\Apache_Tomcat_9\apache-tomcat-9.0.98-windows-x64\apache-tomcat-9.0.98_Upgradation\work\Catalina\localhost\clover_portal\org\apache\jsp\export\exportCandidateList_jsp.java]
'<>'' operator is not allowed for source level below 1.7
 
An error occurred at line: [31] in the generated java file: [C:\Apache_Tomcat_9\apache-tomcat-9.0.98-windows-x64\apache-tomcat-9.0.98_Upgradation\work\Catalina\localhost\clover_portal\org\apache\jsp\export\exportCandidateList_jsp.java]
Incorrect number of arguments for type LinkedHashSet<E>; it cannot be parameterized with arguments <>
 
An error occurred at line: [36] in the generated java file: [C:\Apache_Tomcat_9\apache-tomcat-9.0.98-windows-x64\apache-tomcat-9.0.98_Upgradation\work\Catalina\localhost\clover_portal\org\apache\jsp\export\exportCandidateList_jsp.java]
'<>'' operator is not allowed for source level below 1.7
 
An error occurred at line: [36] in the generated java file: [C:\Apache_Tomcat_9\apache-tomcat-9.0.98-windows-x64\apache-tomcat-9.0.98_Upgradation\work\Catalina\localhost\clover_portal\org\apache\jsp\export\exportCandidateList_jsp.java]
Incorrect number of arguments for type LinkedHashSet<E>; it cannot be parameterized with arguments <>
 
An error occurred at line: [43] in the generated java file: [C:\Apache_Tomcat_9\apache-tomcat-9.0.98-windows-x64\apache-tomcat-9.0.98_Upgradation\work\Catalina\localhost\clover_portal\org\apache\jsp\export\exportCandidateList_jsp.java]
Syntax error, parameterized types are only available if source level is 1.5 or greater
 
An error occurred at line: [47] in the generated java file: [C:\Apache_Tomcat_9\apache-tomcat-9.0.98-windows-x64\apache-tomcat-9.0.98_Upgradation\work\Catalina\localhost\clover_portal\org\apache\jsp\export\exportCandidateList_jsp.java]
Syntax error, parameterized types are only available if source level is 1.5 or greater
 
An error occurred at line: [51] in the generated java file: [C:\Apache_Tomcat_9\apache-tomcat-9.0.98-windows-x64\apache-tomcat-9.0.98_Upgradation\work\Catalina\localhost\clover_portal\org\apache\jsp\export\exportCandidateList_jsp.java]
Syntax error, parameterized types are only available if source level is 1.5 or greater
 
Stacktrace:] with root cause
    org.apache.jasper.JasperException: Unable to compile class for JSP:
 
An error occurred at line: [24] in the generated java file: [C:\Apache_Tomcat_9\apache-tomcat-9.0.98-windows-x64\apache-tomcat-9.0.98_Upgradation\work\Catalina\localhost\clover_portal\org\apache\jsp\export\exportCandidateList_jsp.java]
Syntax error, parameterized types are only available if source level is 1.5 or greater
 
An error occurred at line: [26] in the generated java file: [C:\Apache_Tomcat_9\apache-tomcat-9.0.98-windows-x64\apache-tomcat-9.0.98_Upgradation\work\Catalina\localhost\clover_portal\org\apache\jsp\export\exportCandidateList_jsp.java]
Syntax error, parameterized types are only available if source level is 1.5 or greater
 
An error occurred at line: [28] in the generated java file: [C:\Apache_Tomcat_9\apache-tomcat-9.0.98-windows-x64\apache-tomcat-9.0.98_Upgradation\work\Catalina\localhost\clover_portal\org\apache\jsp\export\exportCandidateList_jsp.java]
Syntax error, parameterized types are only available if source level is 1.5 or greater
 
An error occurred at line: [31] in the generated java file: [C:\Apache_Tomcat_9\apache-tomcat-9.0.98-windows-x64\apache-tomcat-9.0.98_Upgradation\work\Catalina\localhost\clover_portal\org\apache\jsp\export\exportCandidateList_jsp.java]
'<>'' operator is not allowed for source level below 1.7
 
An error occurred at line: [31] in the generated java file: [C:\Apache_Tomcat_9\apache-tomcat-9.0.98-windows-x64\apache-tomcat-9.0.98_Upgradation\work\Catalina\localhost\clover_portal\org\apache\jsp\export\exportCandidateList_jsp.java]
Incorrect number of arguments for type LinkedHashSet<E>; it cannot be parameterized with arguments <>
 
An error occurred at line: [36] in the generated java file: [C:\Apache_Tomcat_9\apache-tomcat-9.0.98-windows-x64\apache-tomcat-9.0.98_Upgradation\work\Catalina\localhost\clover_portal\org\apache\jsp\export\exportCandidateList_jsp.java]
'<>'' operator is not allowed for source level below 1.7
 
An error occurred at line: [36] in the generated java file: [C:\Apache_Tomcat_9\apache-tomcat-9.0.98-windows-x64\apache-tomcat-9.0.98_Upgradation\work\Catalina\localhost\clover_portal\org\apache\jsp\export\exportCandidateList_jsp.java]
Incorrect number of arguments for type LinkedHashSet<E>; it cannot be parameterized with arguments <>
 
An error occurred at line: [43] in the generated java file: [C:\Apache_Tomcat_9\apache-tomcat-9.0.98-windows-x64\apache-tomcat-9.0.98_Upgradation\work\Catalina\localhost\clover_portal\org\apache\jsp\export\exportCandidateList_jsp.java]
Syntax error, parameterized types are only available if source level is 1.5 or greater
 
An error occurred at line: [47] in the generated java file: [C:\Apache_Tomcat_9\apache-tomcat-9.0.98-windows-x64\apache-tomcat-9.0.98_Upgradation\work\Catalina\localhost\clover_portal\org\apache\jsp\export\exportCandidateList_jsp.java]
Syntax error, parameterized types are only available if source level is 1.5 or greater
 
An error occurred at line: [51] in the generated java file: [C:\Apache_Tomcat_9\apache-tomcat-9.0.98-windows-x64\apache-tomcat-9.0.98_Upgradation\work\Catalina\localhost\clover_portal\org\apache\jsp\export\exportCandidateList_jsp.java]
Syntax error, parameterized types are only available if source level is 1.5 or greater
 
Stacktrace:
        at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:72)
        at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:192)
        at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:542)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:371)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:343)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:329)
        at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:603)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:399)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:376)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:324)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:199)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:660)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:396)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:937)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
        at java.lang.Thread.run(Thread.java:748)

已尝试方案

修改Tomcat全局web.xml中的JspServlet配置,添加compilerSourceVM和compilerTargetVM参数并设置为1.8,但问题未解决:

<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>compilerSourceVM</param-name>
<param-value>1.8</param-value>
</init-param>
<init-param>
<param-name>compilerTargetVM</param-name>
<param-value>1.8</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>

解决方案

1. 清理Tomcat工作目录

Tomcat会缓存JSP编译后的class文件,旧缓存可能未使用新的编译参数。找到Tomcat的work目录,删除对应应用的缓存文件夹(例如C:\Apache_Tomcat_9\...\work\Catalina\localhost\clover_portal),重启Tomcat后JSP会重新编译。

2. 检查应用本地web.xml配置

如果应用自身的WEB-INF/web.xml中也配置了<servlet-name>jsp</servlet-name>,会覆盖Tomcat全局配置。需在应用的web.xml中添加相同的compilerSourceVM和compilerTargetVM参数,或者删除应用内的JspServlet配置,让全局配置生效。

3. 确认Tomcat使用的JDK版本

Tomcat 9要求运行环境为JDK 8及以上。检查系统JAVA_HOME环境变量,或Tomcat启动脚本(startup.bat/startup.sh)中指定的JDK路径,确保指向JDK 8或更高版本。低版本JDK无法支持Java 8语法,即使设置编译参数也无效。

4. 检查JSP文件的page指令

部分JSP可能在page指令中指定了源码版本,例如:

<%@ page language="java" source="1.4" %>

这种局部设置会覆盖全局配置,需将source属性修改为1.8,或直接删除该属性。

5. 使用system.properties配置

若修改web.xml无效,可在Tomcat的conf/system.properties文件中添加以下配置:

org.apache.jasper.compiler.source=1.8
org.apache.jasper.compiler.target=1.8

保存后重启Tomcat,该配置会强制JSP编译器使用指定的Java版本。


内容的提问来源于stack exchange,提问作者Jeganth R R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 15:52:02