访问新增JSP页面抛出javax.servlet.ServletException异常求解决方案
SYS_ERR: javax.servlet.ServletException: java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.Compiler.<init>(Lorg/eclipse/jdt/internal/compiler/env/INameEnvironment;Lorg/eclipse/jdt/internal/compiler/IErrorHandlingPolicy;Lorg/eclipse/jdt/internal/compiler/impl/CompilerOptions;Lorg/eclipse/jdt/internal/compiler/ICompilerRequestor;Lorg/eclipse/jdt/internal/compiler/IProblemFactory;)V SYS_ERR: at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:342) SYS_ERR: at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) SYS_ERR: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) SYS_ERR: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) SYS_ERR: at com.adventnet.appmanager.filter.ExtProdIntegFilter.doFilter(ExtProdIntegFilter.java:130) SYS_ERR: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) SYS_ERR: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) SYS_ERR: at com.adventnet.appmanager.filter.AAMFilter.doFilter(AAMFilter.java:118) SYS_ERR: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) ... ... SYS_ERR: Caused by: java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.Compiler.<init>(Lorg/eclipse/jdt/internal/compiler/env/INameEnvironment;Lorg/eclipse/jdt/internal/compiler/IErrorHandlingPolicy;Lorg/eclipse/jdt/internal/compiler/impl/CompilerOptions;Lorg/eclipse/jdt/internal/compiler/ICompilerRequestor;Lorg/eclipse/jdt/internal/compiler/IProblemFactory;)V SYS_ERR: at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:442) SYS_ERR: at org.apache.jasper.compiler.Compiler.compile(Compiler.java:378) SYS_ERR: at org.apache.jasper.compiler.Compiler.compile(Compiler.java:353) SYS_ERR: at org.apache.jasper.compiler.Compiler.compile(Compiler.java:340) SYS_ERR: at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:644) SYS_ERR: at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:358) SYS_ERR: at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389) SYS_ERR: at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333) SYS_ERR: ... 46 more
根因说明
该报错属于依赖版本冲突问题,触发在JSP运行时编译阶段:Tomcat内置的Jasper JSP编译组件调用Eclipse JDT Java编译器的指定构造方法时,当前服务类路径下加载的ecj.jar(Eclipse JDT Core核心包)版本与Jasper要求的版本不匹配,不存在对应入参列表的构造方法,因此抛出NoSuchMethodError。
可用解决方案
- 移除项目内额外引入的ecj依赖:如果你的项目通过Maven/Gradle等包管理工具显式引入了
org.eclipse.jdt:org.eclipse.jdt.core或ecj相关依赖,直接排除该依赖即可,Tomcat自身会携带适配版本的JSP编译依赖,无需项目单独提供。 - 替换为适配版本的ecj包:如果确有需要保留ecj依赖,下载你当前使用的Tomcat版本官方自带的
ecj.jar,替换掉项目WEB-INF/lib目录或服务器全局类路径下不匹配的ecj包即可。 - 调整Tomcat版本适配现有ecj:如果项目必须使用当前版本的ecj包,将Tomcat版本升级或降级到与该ecj版本适配的版本即可解决冲突。
- 预编译JSP规避:测试场景下可以提前将JSP文件预编译为Servlet Class文件放入项目类路径,跳过运行时JSP编译步骤,也可以临时规避该报错。
内容的提问来源于stack exchange,提问作者HackByte
相关产品推荐
相关产品推荐

