Ответ 1
Вы должны использовать более новую версию tomcat, которая поддерживает JDK 8.
Я могу подтвердить, что apache-tomcat-7.0.35 НЕ поддерживает JDK8, я также могу подтвердить, что apache-tomcat-7.0.50 имеют поддержку JDK8.
Я не могу заставить tomcat7 скомпилировать jsps. Он просто запускает пример сервлетов, и сервис работает. Я запускаю 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 an example of
a very basic SimpleTag handler with no body.</p>
<br>
<b><u>Result:</u></b>
<mytag:helloWorld/>
</body>
</html>
Вы должны использовать более новую версию tomcat, которая поддерживает JDK 8.
Я могу подтвердить, что apache-tomcat-7.0.35 НЕ поддерживает JDK8, я также могу подтвердить, что apache-tomcat-7.0.50 имеют поддержку JDK8.
Формат класса JDK8 изменился, и именно поэтому Tomcat не может скомпилировать JSP. Попробуйте получить более новую версию Tomcat.
У меня недавно была та же проблема. Это ошибка в Tomcat, или, скорее, JDK 8 имеет немного отличающийся формат файла классов, чем предыдущие версии JDK8. Это вызывает несогласованность, и Tomcat не может скомпилировать JSP в JDK8.
См. следующие ссылки:
Поскольку мы работаем на 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 и использовать его самостоятельно, как испортить пакеты. Поэтому, пожалуйста, смотрите это только как очень грязный quickhack или обходной путь.
Если вы используете maven, вы можете добавить плагин tomcat7-maven в свой pom.xml, и он будет работать нормально. Этот плагин будет запускать проект на контейнере сервлетов Tomcat версии 7.0.47, который поддерживает JDK 1.8.
<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>
Надеюсь, это полезно! Благодаря
Добавьте этот импорт <%@page import="java.util.Map" %>
Это сработало для меня, но мне также нужно было добавить <% @page import = "java.util.HashMap" % > .
Кажется, что вышеприведенный ответ верен, что если у вас есть новый tomcat, вам может не понадобиться добавлять эти строки, но поскольку я не мог изменить всю свою систему, это сработало.
Спасибо вам
Из базы знаний JIRA:
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, созданные JSP, они используются веб-приложением. Иногда это получается поврежден или не найден. Это может произойти после обновления или обновления который содержит модификации JSP.
Resolution
1.Удалить содержимое рабочей папки при использовании автономной JIRA или/работать при использовании установки EAR/WAR, 2. Убедитесь, что пользователь, выполняющий JARA-приложение, имеет разрешение на чтение/запись в каталоге /work. 3. Перезагрузите контейнер приложения JIRA для восстановления файлов.
Столкнулась с той же проблемой при обновлении моего приложения от java 6 до java 8 на tomcat 7.0.19. После обновления tomcat до 7.0.59 эта проблема будет решена.
Попробуйте добавить <%@page import="java.util.Map.Entry"%>
в файл jsp
Есть много правильных/одинаковых ответов, но для будущих ссылок:
То же самое относится к Tomcat 7. Помните, что обновление только используемых вами фреймворков (как предложено в других подобных вопросах) недостаточно.
Вам также необходимо обновить версию плагина Tomcat. Что работало для меня с использованием Java 7, было обновление до версии 2.2 tomcat7-maven-plugin (= Tomcat 7.0.47).
Недавно я столкнулся с одной и той же проблемой. Я использовал IntelliJx64 с Tomcat7.0.32 с jdk.8.0.102. Тогда не было проблем. Мне удалось напрямую получить доступ к моему развертыванию localhost: [порт] без добавления [mywebapp] или /ROOT.
Когда я попытался перейти на eclipse neon, , я наткнулся на ту же ошибку, что обсуждался, когда я пытался установить путь как пустую строку. Когда я принуждал среду выполнения к Java7 и устанавливал модули для ее удаления, она не решила проблему выхода. Однако, когда я изменил мою установку tomcat на 7.072 и вручную изменил конфигурацию пути контекста на path = "", проблема была решена в eclipse. (Вы можете управлять путём с помощью сервера двойного щелчка и переходить на вкладку модуля.)
Интересно, почему IntelliJ не выдавал никаких проблем с той же ошибкой, которая должна была быть связана с версией установки tomcat?
Также существует связь с используемой IDE.
Я столкнулся с этим раньше, как говорили другие: просто upgrade jetty plugin
если вы используете maven
перейдите в jetty
плагин в pom.xml и обновите его до
<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>
надеюсь, что это поможет вам