JSP загружается вместо рендеринга

avatar
Cole Newman
8 августа 2021 в 21:23
236
1
1

Мое приложение сначала загружало файл jsp, а не отображало его на странице. Я получал код состояния 200 в консоли, но 404 на странице. Я осмотрелся и обнаружил, что должен был добавить зависимости для tomcat-jasper и tomcat-embed, но теперь я получаю исключение приведения класса, говорящее, что jspservlet не может быть преобразован в сервлет javax. Любая помощь приветствуется. Спасибо!

Получение ApplicationContextException:

Caused by: javax.servlet.ServletException: Class [org.apache.jasper.servlet.JspServlet] is not a Servlet
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1054) ~[tomcat-embed-core-9.0.48.jar:9.0.48]
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:989) ~[tomcat-embed-core-9.0.48.jar:9.0.48]
    at org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedContext.load(TomcatEmbeddedContext.java:82) ~[spring-boot-2.5.2.jar:2.5.2]
    ... 32 common frames omitted
Caused by: java.lang.ClassCastException: org.apache.jasper.servlet.JspServlet cannot be cast to javax.servlet.Servlet
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1049) ~[tomcat-embed-core-9.0.48.jar:9.0.48]
    ... 34 common frames omitted

Это происходит, когда у меня в памяти есть это:

    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-jasper</artifactId>
        <version>10.1.0-M2</version>
        <scope>runtime</scope>
    </dependency>

Когда это вынимается из моего pom, все работает нормально, попадает в контроллер и возвращает ModelAndView, но загружает jsp вместо фактического отображения страницы.

Источник
Shivam Puri
8 августа 2021 в 22:03
0

Было бы хорошо, если бы вы добавили больше пояснений к рассматриваемой проблеме. Возможно, какой-то код? Подробнее об ошибке, которую вы получаете?

chrylis -cautiouslyoptimistic-
9 августа 2021 в 01:22
0

Нам также необходимо увидеть вывод вкладки «Сеть» (особенно Content-Type ответа).

Cole Newman
9 августа 2021 в 01:39
0

Это просто страница ошибки WhiteLabel с типом none и статусом 404.

Ответы (1)

avatar
Piotr P. Karwasz
9 августа 2021 в 05:10
1

TL;DR: Использование

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>

Есть несколько проблем с добавленной вами зависимостью:

  • Вам следует использовать tomcat-embed-jasper вместо tomcat-jasper: IT IT <3807203331> : IT IT <3807207207203331> : IT IT <3807203331> : IT IT IT IT <3807207207203331> не используется Spring Boot). Включение последнего вызывает проблемы, как в этом вопросе.
  • Jasper 10.1 реализует JSP 3.0, который несовместим с Servlet 4.0, предоставляемым Tomcat 9.0 (см. этот вопрос). Поскольку spring-boot-parent управляет этими зависимостями, вам следует опустить тег <version> и использовать версию, выбранную Spring Boot (9.0.48 для версии, которую вы используете, но она будет синхронизироваться при обновлении Spring Boot),
  • Если вы развертываете свое приложение в виде файла WAR во внешнем контейнере сервлетов, вы хотите использовать версию механизма JSP, предоставленную контейнером сервлетов, вместо вашей собственной. Поэтому вы должны установить область действия provided.
  • .
Cole Newman
9 августа 2021 в 23:43
0

Благодарю вас! Это исправило это!