无法为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操作可能无法访问
- JIRA可能会在屏幕上抛出exception
- 以下一种或两种情况可能存在:
以下内容出现在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>
希望这对你有所帮助
- 如何将scala.List转换为java.util.List?
- 调用静态java.text.DateFormat的方法不可取?
- 在使用Mockito时,模拟和间谍有什么区别?
- 如何分割字母和数字(或数字和字母之间)的string?
- 如何使Java中的循环增加1以外的增量
- org.hibernate.HibernateException:当“hibernate.dialect”未设置时,对DialectResolutionInfo的访问不能为null
- SwingUtilities.invokeLater()vs EventQueue.invokeLater()
- Tomcat – maxThreads vs maxConnections
- 如何在创build和显示布局时将焦点置于视图上?