我必须从Java 7& tomcat 7.0.57的执行环境切换到java 8& tomcat 8.0.15。为此,我正在测试一个在J7/TOMCAT7 7上运行良好的webapp。我使用的是maven,它被配置为使用java 8,并且部署进行得很好。同时,当我试图加载我的主页时,我在执行期间得到了这个异常:
jsp文件中的line427发生错误: /index.jsp类型的proprietaryEvaluate方法(String、Class、PageContext、ProtectedFunctionMapper、PageContextImpl )不适用于参数(String、Class、PageContext、null)
完全堆栈跟踪:
斯塔克斯迹:在org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103) at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:199) at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:450) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:361) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:在org.apache.jasper.compiler.Compiler.compile(Compiler.java:323) at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)在javax.servlet.http.HttpServlet.service(HttpServlet.java:725) at ev.resourceManager.easyvols.InnerJSPServlet.service(InnerJSPServlet.java:91) at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) atorg.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085)在org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658) at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1556) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1513) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source).util.concurrent.ThreadPoolExecutor$Worker.run(Unknown源)在org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(未知源)
请注意,我没有使用任何框架,如Struts或Spring。
解决这一异常的解决方案是什么?
发布于 2015-03-30 13:44:26
在升级时,我也遇到了同样的问题,问题是我部署的WAR包括jasper,它不应该这样做。我删除了它,因为Tomcat提供了自己的jar ( TC8中的方法签名不同于TC7中的版本),而且它现在起作用了。
发布于 2016-10-30 16:20:32
我确认了@Toby的解决方案,我只是添加了一些可能有助于诊断的上下文元素。
我的web应用程序是用Tomcat8.0.35和Oracle 1.8.0_91开发的。
为了说明部署测试的意义,我们选择在使用Tomcat 8.0.14和Oracle的RaspberryPi (Raspbian发行版:2016-09-23-RaspbianJessie)上运行该应用程序。
为了与RasPi软件兼容,我们不得不“降级”这个应用程序,但是我们经历了许多困难,每个困难都指向了以前工作过的JSP。我们首先考虑的是taglib JSTL Core,它是所有带有错误的JSP行的常见元素,但我可以保证,除了Jasper包之外,没有必要在库中更改任何内容并构建项目的路径。
通过解决所有问题来清除POM的这个元素。
发布于 2021-02-12 14:12:58
确保Tomcat工作目录被刷新,因为这将保存缓存的文件。要做到这一点,只需删除工作目录并重新启动Tomcat。
在我们的例子中,当从Tomcat 7迁移到8.5时,工作目录也会被复制,从而导致给定的异常。我们删除并更新了lib文件夹中的多个jars,并在进程中多次重新启动Tomcat,但没有成功。清理工作目录是唯一有效的方法。
https://stackoverflow.com/questions/27924711
复制相似问题