无法为JSP编译类:无法parsingtypesjava.util.Map $ Entry。 它是从所需的.class文件间接引用的

我不能让tomcat7编译jsps。 直到运行示例servlet就好了,服务已经启动并正在运行。 我运行的是oracle java 8。

任何人都可以指向正确的方向吗?

这里是堆栈跟踪:

type Exception report message Unable to compile class for JSP: description The server encountered an internal error that prevented it from fulfilling this request. exception org.apache.jasper.JasperException: Unable to compile class for JSP: An error occurred at line: 1 in the generated java file The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from required .class files Stacktrace: org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:102) org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:331) org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:468) org.apache.jasper.compiler.Compiler.compile(Compiler.java:378) org.apache.jasper.compiler.Compiler.compile(Compiler.java:353) org.apache.jasper.compiler.Compiler.compile(Compiler.java:340) org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) note The full stack trace of the root cause is available in the Apache Tomcat/7.0.35 logs. 

代码看起来像这样,这是从tomcat7的示例代码,所以我的猜测是,这是正确的。

 <%@ taglib prefix="mytag" uri="/WEB-INF/jsp2/jsp2-example-taglib.tld" %> <html> <head> <title>JSP 2.0 Examples - Hello World SimpleTag Handler</title> </head> <body> <h1>JSP 2.0 Examples - Hello World SimpleTag Handler</h1> <hr> <p>This tag handler simply echos "Hello, World!" It's an example of a very basic SimpleTag handler with no body.</p> <br> <b><u>Result:</u></b> <mytag:helloWorld/> </body> </html> 

您必须使用支持JDK 8的更新版本的Tomcat。

我可以确认apache-tomcat-7.0.35不支持JDK8,我也可以确认apache-tomcat-7.0.50是否支持JDK8。

JDK8的类格式已经改变,这就是Tomcat无法编译JSP的原因。 尝试获得更新版本的Tomcat。

我最近有同样的问题。 这是Tomcat中的一个bug,或者更确切地说,JDK 8与以前的JDK8版本有稍微不同的类文件格式。 这会导致不一致,并且Tomcat无法在JDK8中编译JSP。

请参阅以下参考:

  • 在Tomcat 8中使用JDK 1.8编译JSP
  • 编译成功在java7中,但在java8中失败

因为我们在Ubuntu 12.04 LTS上运行,而最新的官方支持的tomcat7包是7.0.26,所以我们不能轻易更新整个tomcat。

我为了用jdk8来testing,我能够通过改变一些瓶子来对付他们最新的7.0 *版本来解决这个问题。

我将jasper.jar,jasper-el和tomcat-util切换到7.0.53版本,并添加了ecj-4.3.1.jar。 这使应用程序重新联机。

但是…我也用这个改变了打包的内容,所以也许最好是下载整个tomcat,并使用它自己安装作为搞乱包。 所以请看到这只是一个非常肮脏quickhack或解决方法。

如果您使用的是maven,那么您可以将tomcat7-maven-plugin添加到您的pom.xml中,并且运行良好。 这个插件将运行在支持JDK 1.8的Tomcat servlet容器版本7.0.47上的项目。

  <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <!-- Include context file for Datasource configuration --> <contextFile>./src/main/webapp/META-INF/context.xml</contextFile> <port>8080</port> </configuration> <dependencies> <!-- Include jdbc driver dependency if using datasource (in my case oracle) --> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.4.0</version> </dependency> </dependencies> </plugin> </plugins> 

希望这是有用的! 谢谢

从JIRA知识库 :

 Symptoms 

工作stream操作可能无法访问

  1. JIRA可能会在屏幕上抛出exception
  2. 以下一种或两种情况可能存在:

以下内容出现在atlassian-jira.log中:

  2007-12-06 10:55:05,327 http-8080-Processor20 ERROR [500ErrorPage] Exception caught in500 page Unable to compile class for JSP org.apache.jasper.JasperException: Unable to compile class for JSP at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:572) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:305) 

_

 Cause: 

Tomcat容器高速caching由JSPparsing器生成的.java和.class文件,它们被Web应用程序使用。 有时这些会被损坏或无法find。 这可能发生在包含对JSP的修改的修补程序或升级之后。

 Resolution 

1.如果使用独立的JIRA,则删除/ work文件夹的内容;如果使用EAR / WAR安装,则删除/ work的内容。 2.validation运行JIRA应用程序进程的用户是否具有对/ work目录的读/写权限。 3.重新启动JIRA应用程序容器以重build文件。

添加此导入<%@page import="java.util.Map" %>

这工作对我来说,但我也需要添加<%@页面导入=“java.util.HashMap”%>。 看来上面的答案是真实的,如果你有更新的tomcat你可能不需要添加这些行,但是因为我不能改变我的整个系统,所以这个工作。
谢谢

面对完全相同的问题,同时升级我的应用程序从Java 6到Tomcat 7.0.19上的Java 8。 将tomcat升级到7.0.59之后,这个问题就解决了。

尝试添加<%@page import="java.util.Map.Entry"%>到您的jsp文件

有很多正确/相同的答案,但为了将来的参考:

同样的意思是Tomcat 7.请注意,只更新您使用的框架版本(正如其他类似问题中提出的)是不够的。

您还必须更新Tomcat插件的版本。 对我来说,使用Java 7的工作是升级到tomcat7-maven-plugin(= Tomcat 7.0.47)的2.2版本。

我最近遇到同样的问题。 我使用IntelliJx64与Tomcat7.0.32与jdk.8.0.102 。 那么没有问题。 我能够直接访问我的部署localhost:[端口],而无需添加[mywebapp]/ ROOT

我试图迁移到eclipse霓虹灯时遇到了同样的错误,当我尝试将path设置为空string时,这个问题就被讨论了 。 当我将执行环境强制执行到Java7并将模块设置为空时,它没有解决脚趾问题。 但是,当我将我的tomcat安装更改为7.072,并手动将上下文pathconfiguration更改为path =“”问题已在eclipse中解决。 (您可以通过双击服务器来操作path,也可以切换到模块选项卡。)

我的惊讶是,IntelliJ怎么没有提供与Tomcat安装版本相关的错误呢?

这似乎也与使用中的IDE有关系。

我之前遇到过这个,正如其他人所说:只是upgrade jetty plugin

如果你正在使用maven

去pom.xml中的jetty插件并将其更新为

 <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.3.0.v20150612</version> <configuration> <scanIntervalSeconds>3</scanIntervalSeconds> <httpConnector> <port>${jetty.port}</port> <idleTimeout>60000</idleTimeout> </httpConnector> <stopKey>foo</stopKey> <stopPort>${jetty.stop.port}</stopPort> </configuration> </plugin> 

希望这对你有所帮助