【问题标题】:tomcat fail to compile jsp [duplicate]tomcat无法编译jsp [重复]
【发布时间】:2013-11-10 06:14:54
【问题描述】:

我似乎无法让 tomcat 编译它应该提供的 jsp 文件。它将完美地运行 .war 文件和 servlet。但在任何 jsp 页面上都会失败。我的印象是它没有找到常规的 java 包含。

我正在尝试使用此文件(或包含的任何其他 jsp 测试文件)

<%@ page  language="java" import="java.util.*" errorPage="" %>
<html>
<body>
Current Date time: <%=new java.util.Date()%>
</body>
</html>


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)

注意 Apache Tomcat/7.0.35 日志中提供了根本原因的完整堆栈跟踪。

日志:

Oct 30, 2013 4:56:12 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [jsp] in context with path [/tomcat-demo] threw    exception [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:] with root cause
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:
at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:102)
at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:331)
at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:468)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:378)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at  org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:200)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:724)



This is the ps axf for this process.
 9277 ?        Sl     0:23 /usr/lib/jvm/java-8-oracle/bin/java -
 Djava.util.logging.config.file=/var/lib/tomcat7/conf/logging.properties -
 Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC -Dbuild.compiler=javac -
 Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -
 Djava.endorsed.dirs=/usr/share/tomcat7/endorsed -classpath 
 /usr/share/tomcat7/bin/bootstrap.jar:/usr/share/tomcat7/bin/tomcat-juli.jar -
 Dcatalina.base=/var/lib/tomcat7 -Dcatalina.home=/usr/share/tomcat7 -
 Djava.io.tmpdir=/tmp/tomcat7-tomcat7-tmp org.apache.catalina.startup.Bootstrap start

【问题讨论】:

  • 您是否需要导入(如果您使用的是 list(或)arraylist 等)?
  • 检查日志文件夹中的日志文件,看看有没有线索。
  • 添加了有关测试文件和 catalina.out 部分的信息。您还需要其他日志信息吗?
  • 如果不使用任何IDE,为什么日志中有eclipse插件的详细信息?
  • 我想指出这很可能是 Tomcat 7 和 Java 8 的问题,正如这里所解释的 stackoverflow.com/questions/19243458/…

标签: java jsp tomcat


【解决方案1】:

Tomcat 7.0.35 和 java 8 不能很好地配合使用,所以使用最新版本的 Tomcat 和 ECJ 模块,该错误现在已修复。

Tomcat 版本 7.0.50 和 ECJ 4.3.1(或更高版本)应该可以工作。请参阅 @AtliB 在 cmets 中提到的 JBoss Ticket。

【讨论】:

  • 这并没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
  • 答案是“使用最新版本的 Tomcat,您遇到了一个现已修复的错误。”...无需澄清。
  • 在 ubuntu 12.04 上使用 ubuntu 14.04 的软件包,即使使用 tomcat 7.0.52,我仍然会收到此错误。
  • 我正在使用带有 Java 8 的 Tomcat 7.0.54,我也得到了这个
  • 我在使用 Java 8 的 Tomcat 7.0.54 时遇到了这个错误。原来我在 lib 文件夹(来自较旧的安装)中有一个旧的 ecj-3.7.1.jar(编译器 tomcat 使用)。删除该 .jar 文件为我解决了这个问题(tomcat 使用 ecj-P20140317-1600.jar 代替)。
【解决方案2】:

对我来说,这是@AtliB 提供的答案。 问题出在 jar 编译器中。 我通过将一个文件夹放入另一个文件夹来安装 Tomcat。相同的文件名被覆盖,但没有版本号的文件名:(。所以我有多个 ecj-x.x 文件。Tomcat 只加载它看到的第一个文件。 删除旧的给我留下了 ecj-4.4.jar,它在 java 8 上就像一个魅力!

【讨论】:

    【解决方案3】:

    我只是在为一个非常相似的问题而苦苦挣扎。对我来说,事实证明我使用“tomcat7”用户运行 Tomcat,但“root”是许多 tomcat 文件和目录的所有者。在我将“tomcat7”更改为拥有 tomcat 目录中的所有内容(递归)后,它开始为我工作。

    【讨论】:

      猜你喜欢
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多