Невозможно добавить объект модели в представление jsp в "/", но тот же метод работает при вызове / index

Вот ссылка на сайт, который я разрабатываю

35.200.161.123/ShahbazKhan/index

35.200.161.123/ShahbazKhan/ (по проблеме см. Раздел последних новостей)

оба они обрабатываются одним и тем же методом контроллера и возвращают одну и ту же страницу. Проблема в том, что вызов / index работает отлично, как и должно быть, тогда как, когда я захожу на свой веб-сайт, как и 35.200.161.123/ShahbazKhan/, объект 'posts' не передается в jsp. Вот код контроллера индекса

@Autowired
private PostService postService;

@RequestMapping(value = {"/","index"})
public ModelAndView index(HttpServletRequest req){
    HttpSession session = req.getSession();
    List<Post> posts = postService.findLatest3();
    ModelAndView mv = new ModelAndView("index");
    mv.addObject("posts", posts);
    mv.addObject(session);
    return mv;
}

Мне не хватает некоторых конфигураций ?? Проект построен с помощью Spring Boot

img 1

проблема

Структура каталога проекта

Файл Application.properties

spring.datasource.url = jdbc:mysql://xx.xx.xx.xx/shahbazkhan
spring.datasource.driver-class-name = com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password= xxxxxxxxxx
spring.jpa.database-platform=org.hibernate.dialect.MySQL57Dialect
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update 


spring.resources.static-locations=classpath:/static

spring.mvc.view.prefix: /
spring.mvc.view.suffix: .jsp

ну, очевидно, ModelAndView("index"), это проблема, держу пари, если вы замените "index" на "/", это будет работать наоборот. Не знаю, как это исправить, буду рад узнать сам :) Получите +1. Единственное, что приходит мне в голову, - это создать отдельное отображение для "/" с помощью простого jsp, который перенаправляет на /index. Что, кстати, я считал поведением по умолчанию

Jan Ossowski 23.05.2018 12:41

Спасибо за обходной путь, отдельное сопоставление для «/» для перенаправления на / index является одним из решений и работает нормально .. но я все еще не мог понять, почему при вызове root «/» объект не передается в jsp view..предположим, я хочу, чтобы панель url выглядела чистой как sitename.com, а не как sitename.com/index каждый раз, когда пользователь посещает мой сайт ..

Shahbaz Khan 23.05.2018 13:03

В своем web.xml проверьте наличие тега <welcome-file-list> и обновите вопрос, добавив его содержимое. Включен ли index.jsp в список? Кроме того, вы используете преобразователь представлений?

Fabulous 23.05.2018 13:13

@Fabulous Я не создавал файл web.xml, так как это простое приложение для весенней загрузки, так как оно работает без web.xml .. вы можете просто сказать мне, что добавить в атрибут <welcome-file-list> в файл web.xml? index.jsp - это индексное представление для приложения. Я использую преобразователь представлений, я обновил вопрос с помощью файла application.properties.

Shahbaz Khan 23.05.2018 13:36
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
4
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поведение вашего веб-сервера по умолчанию (то есть передача всех запросов вроде 35.200.161.123/ShahbazKhan/ в 35.200.161.123/ShahbazKhan/index) больше не применимо. Все запросы передаются контроллеру и сравниваются с предоставленными вами свойствами преобразователя представлений. Сервер приложений проверяет, доступен ли запрошенный ресурс в папке WEB-INF, и возвращает ресурс после обработки.

Если ресурс не найден, веб-сервер по умолчанию предоставляет статические страницы.

В настоящее время все ваши представления общедоступны в папке webapps, поэтому при вызове сайта project / контроллер индекса не вызывается, и вам предоставляется "index.html" как есть, без объекта jsp.

Важно, чтобы вы поместили все ресурсы Spring, Hibernate и другие java-ресурсы в папку WEB-INF, поскольку эта папка просматривается всякий раз, когда передается запрос. Ссылка: https://vitalflux.com/web-application-folder-structure-spring-mvc-web-projects/, https://blogs.quovantis.com/spring-project-best-practices

Затем вы должны указать серверу приложений префикс всех запросов с помощью /WEB-INF/. Вы должны предоставить это свойство в свой преобразователь представлений, изменив spring.mvc.view.prefix: / на spring.mvc.view.prefix: /WEB-INF/.

Я обновил структуру проекта в вопросе, у меня нет файлов jsp в папке WEB-INF ... Пожалуйста, посмотрите

Shahbaz Khan 23.05.2018 14:21

Важно, чтобы вы создали папку WEB-INF в webapp и поместили в нее все содержимое. Взгляните на это: blogs.quovantis.com/spring-project-best-practices и vitalflux.com/…

Fabulous 23.05.2018 14:31

Спасибо @Fabulous, это были отличные ресурсы, перемещение просмотров в WEB-INF решило проблему.

Shahbaz Khan 23.05.2018 14:58

Теперь я наконец понял, в чем проблема, на самом деле все представления находились в корне папки webapps, которые были общедоступными, поэтому я предполагаю, что при вызове сайта project / контроллер индекса не вызывается, вместо этого поведение сервера по умолчанию обслуживает index файл, поэтому объект модели отсутствует в представлении, поскольку метод индекса никогда не вызывался, верно ??

Shahbaz Khan 23.05.2018 15:01

Точно. Вот почему мы должны поместить все содержимое в папку WEB-INF, чтобы запрос после обработки контроллером мог вернуть что-то из WEB-INF.

Fabulous 23.05.2018 15:02

Другие вопросы по теме