Обновление до Java 1.8 вызывает проблемы

Я пытаюсь обновить свой текущий Java-проект, работающий на 1.6, до 1.8, но программа все равно отлично компилируется, когда я иду http://localhost:8080/MyProject/login.jsp- Я получаю сообщения об ошибках.

Я использую eclipse luna, изменил java_HOME на 1.8 и аспекты проекта eclipse на 1.8 и обновил javax.servlet-api=3.1.0.

Трассировка стека

springframework.web.util.NestedServletException: Request processing failed; nested exception is org.apache.tiles.impl.CannotRenderException: ServletException including path '/WEB-INF/jsp/template/noLayout.jsp'.
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:943) ~[spring-webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:822) ~[spring-webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:735) ~[servlet-api-3.0.jar:na]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:807) ~[spri

Caused by: org.apache.tiles.impl.CannotRenderException: ServletException including path '/WEB-INF/jsp/template/noLayout.jsp'.
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:692) ~[tiles-core-2.2.2.jar:2.2.2]
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:644) ~[tiles-core-2.2.2.jar:2.2.2]
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:627) ~[tiles-core-2.2.2.jar:2.2.2]
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:321) ~[tiles-core-2.2.2.jar:2.2.2]
at org.springframework.web.servlet.view.tiles2.TilesView.renderMergedOutputModel(TilesView.java:88) ~[spring-webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:266) ~[spring-webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1225) ~[spring-webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1012) ~[spring-webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) ~[spring-webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876) ~[spring-webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:931) ~[spring-webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE]
... 65 common frames omitted
Caused by: org.apache.tiles.util.TilesIOException: ServletException including path '/WEB-INF/jsp/template/noLayout.jsp'.
at org.apache.tiles.servlet.context.ServletUtil.wrapServletException(ServletUtil.java:243) ~[tiles-servlet-2.2.2.jar:2.2.2]
at org.apache.tiles.servlet.context.ServletTilesRequestContext.forward(ServletTilesRequestContext.java:243) ~[tiles-servlet-2.2.2.jar:2.2.2]
at org.apache.tiles.servlet.context.ServletTilesRequestContext.dispatch(ServletTilesRequestContext.java:222) ~[tiles-servlet-2.2.2.jar:2.2.2]
at org.apache.tiles.renderer.impl.TemplateAttributeRenderer.write(TemplateAttributeRenderer.java:44) ~[tiles-core-2.2.2.jar:2.2.2]
at org.apache.tiles.renderer.impl.AbstractBaseAttributeRenderer.render(AbstractBaseAttributeRenderer.java:106) ~[tiles-core-2.2.2.jar:2.2.2]
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:670) ~[tiles-core-2.2.2.jar:2.2.2]
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:690) ~[tiles-core-2.2.2.jar:2.2.2]
... 75 common frames omitted
Caused by: org.apache.jasper.JasperException: PWC6033: Error in Javac compilation for JSP

PWC6199: Generated servlet error:
string:///noLayout_jsp.java:7: cannot access java.lang.Object
bad class file: java\lang\Object.class(java\lang:Object.class)
class file has wrong version 52.0, should be 50.0
Please remove or make sure it appears in the correct subdirectory of the classpath*.

noLayout.jsp

  <% response.setHeader("Cache-Control", "no-store, private, must-revalidate, max-stale=0, post-check=0, pre-check=0"); //Forces caches to obtain a new copy of the page from the origin server
response.setHeader("Pragma", "no-cache"); //HTTP 1.0 backward compatibility 
response.setDateHeader("Expires", 0); //Causes the proxy cache to see the page as "stale"
%><%@ page isELIgnored="false"%><!doctype html>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<html>
 <head>  
  <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">  
<link href="${pageContext.request.contextPath}/css/base.css" rel="stylesheet" type="text/css">

Я использую Ivy для управления зависимостями

я изменился с

Плитка версии 2.2, весна 4.0 и пристань


person Jose KP    schedule 07.09.2017    source источник
comment
Я попытался обновить плитки и пружину до последней версии, но все равно получаю ошибки.   -  person Jose KP    schedule 07.09.2017
comment
Похоже, что-то (возможно, Джаспер?) работает со старой версией Java. Это может быть связано.   -  person Turing85    schedule 07.09.2017
comment
Спасибо @ Turing85, я тоже обновил jasper до последней версии, все та же ошибка. Он отлично работает с java 6   -  person Jose KP    schedule 07.09.2017
comment
Джаспер как есть - это не проблема, кажется, что конфигурация Джаспера ошибочна: Caused by: org.apache.jasper.JasperException: PWC6033: Error in Javac compilation for JSP. Сообщение class has wrong version указывает на некоторую несовместимость версий, т. е. Jasper пытается скомпилировать некоторые классы с более старой версией, а ваше приложение пытается загрузить эти классы в систему (т. е. ваш веб-сервер), работающую с более новой версией.   -  person Turing85    schedule 07.09.2017


Ответы (2)


Одним из возможных решений является определение compilerSourceVM и compilerTargetVM для org.apache.jasper.servlet.JspServlet (tomcat-home/conf/web.xml)

Так:

 <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>                                   
            <param-name>compilerSourceVM</param-name>
            <param-value>1.8</param-value>
        </init-param>
        <init-param>
            <param-name>compilerTargetVM</param-name>
            <param-value>1.8</param-value>
        </init-param>                                   
    </servlet>

Эта конфигурация определяет версию компилятора jasper.

Для получения дополнительной информации см. свойства конфигурации вашей реализации tomcat, например справочный документ по Tomcat 7

Также вы можете прочитать этот пост с соответствующей информацией о том, как определить версию компилятора jasper Jasper Конфигурация версии компилятора

person Daniel C.    schedule 07.09.2017

string:///noLayout_jsp.java:7: cannot access java.lang.Object
bad class file: java\lang\Object.class(java\lang:Object.class)
class file has wrong version 52.0, should be 50.0

компилятор, используемый для обработки JSP, кажется, по-прежнему является Java 6, но его кормят системными jar-файлами Java 8. Вы запускаете свое приложение из Eclipse или запускаете его как отдельное приложение? Если это первое, убедитесь, что вы также установили для системной библиотеки JRE (Свойства проекта -> Путь сборки Java -> Системная библиотека JRE) значение Java 8. Просто установить все на Java 8 в настройках компилятора Java недостаточно. Если это буква, проверьте свою конфигурацию JSP, не осталось ли еще что-то от старой, что указывает на двоичные файлы Java 6.

person Lothar    schedule 07.09.2017