我无法让tomcat7编译jsps。直到运行示例servlet就好了,服务启动并运行。我正在运行oracle java 8。
有人能指出我正确的方向吗?
这是stacktrace:
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>
答案 0 :(得分:93)
您必须使用支持JDK 8的更新版本的tomcat。
我可以确认apache-tomcat-7.0.35不支持JDK8,我也可以确认apache-tomcat-7.0.50是否支持JDK8。
答案 1 :(得分:13)
JDK8的类格式已经改变,这就是Tomcat无法编译JSP的原因。尝试获取更新版本的Tomcat。
我最近遇到了同样的问题。这是Tomcat中的一个错误,或者更确切地说,JDK 8的类文件格式与之前的JDK8版本略有不同。这会导致不一致,并且Tomcat无法在JDK8中编译JSP。
参见以下参考文献:
答案 2 :(得分:2)
因为我们在Ubuntu 12.04 LTS上运行,并且最新官方支持的tomcat7包是7.0.26,所以我们不能轻易更新整个tomcat。
为了测试jdk8,我能够通过更改一些罐子来解决这个问题,而不是最新的7.0。*版本。
我将jasper.jar,jasper-el和tomcat-util切换到版本7.0.53并添加了ecj-4.3.1.jar。这使应用程序重新上线。
但是我也用这个改变了打包内容,所以也许最好下载整个tomcat并将它自己安装为搞乱软件包。因此,请将此视为非常脏的快速解决方法或解决方法。
答案 3 :(得分:2)
如果您正在使用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>
希望这很有用! 感谢
答案 4 :(得分:0)
添加此导入<%@page import="java.util.Map" %>
这对我有用,但我还需要添加&lt;%@ page import =“java.util.HashMap”%&gt;。
似乎上面的答案是正确的,如果你有更新的tomcat,你可能不需要添加这些行,但由于我无法改变我的整个系统,这是有效的。
谢谢
答案 5 :(得分:0)
Symptoms
工作流程操作可能无法访问
- JIRA可能会在屏幕上抛出异常
- 可能存在以下一种或两种情况:
醇>以下内容出现在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容器缓存由。生成的.java和.class文件 它们由Web应用程序使用的JSP解析器。有时这些得到 已损坏或无法找到。修补程序或升级后可能会发生这种情况 包含对JSP的修改。
Resolution
1.如果使用独立的JIRA或/ work,如果使用EAR / WAR安装,请删除/ work文件夹的内容 。 2.验证运行JIRA应用程序进程的用户是否具有/ work目录的读/写权限。 3.重新启动JIRA应用程序容器以重建文件。
答案 6 :(得分:0)
在tomcat 7.0.19上将我的应用程序从java 6升级到java 8时面临完全相同的问题。 将tomcat升级到7.0.59后,此问题已解决。
答案 7 :(得分:0)
尝试将<%@page import="java.util.Map.Entry"%>
添加到您的jsp文件
答案 8 :(得分:0)
有很多正确/相同的答案,但对于将来的参考:
同样代表Tomcat 7.请注意,仅更新已使用的框架版本(如其他类似问题中所提出的)是不够的。
您还必须更新Tomcat插件的版本。 使用Java 7对我有用的是升级到tomcat7-maven-plugin(= Tomcat 7.0.47)的2.2版。
答案 9 :(得分:0)
我最近遇到了同样的问题。我是使用IntelliJx64与Tomcat7.0.32和jdk.8.0.102 。那时没有问题。我能够直接访问我的部署 localhost:[port] ,而无需添加 [mywebapp] 或 / ROOT 。
当我尝试迁移到eclipse neon 时, 我遇到了当我尝试将路径设置为空字符串时讨论的相同错误 。当我对Java7强制执行环境并将模块设置为空时,它没有解决脚趾问题。但是,当我将我的tomcat安装更改为7.072并手动将上下文路径配置更改为path =“”时,问题在eclipse中得到了解决。 (您可以通过双击服务器操作路径并切换到模块选项卡。)
我很奇怪IntelliJ是如何解决与tomcat安装版本相关的相同错误的任何问题?
似乎与使用中的IDE有关系。
答案 10 :(得分:0)
我之前碰到过这个,正如其他人所说:只是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>
希望这能帮到你