Вот ссылка на сайт, который я разрабатываю
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
Файл 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
Спасибо за обходной путь, отдельное сопоставление для «/» для перенаправления на / index является одним из решений и работает нормально .. но я все еще не мог понять, почему при вызове root «/» объект не передается в jsp view..предположим, я хочу, чтобы панель url выглядела чистой как sitename.com, а не как sitename.com/index каждый раз, когда пользователь посещает мой сайт ..
В своем web.xml проверьте наличие тега <welcome-file-list> и обновите вопрос, добавив его содержимое. Включен ли index.jsp в список? Кроме того, вы используете преобразователь представлений?
@Fabulous Я не создавал файл web.xml, так как это простое приложение для весенней загрузки, так как оно работает без web.xml .. вы можете просто сказать мне, что добавить в атрибут <welcome-file-list> в файл web.xml? index.jsp - это индексное представление для приложения. Я использую преобразователь представлений, я обновил вопрос с помощью файла application.properties.




Поведение вашего веб-сервера по умолчанию (то есть передача всех запросов вроде 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 ... Пожалуйста, посмотрите
Важно, чтобы вы создали папку WEB-INF в webapp и поместили в нее все содержимое. Взгляните на это: blogs.quovantis.com/spring-project-best-practices и vitalflux.com/…
Спасибо @Fabulous, это были отличные ресурсы, перемещение просмотров в WEB-INF решило проблему.
Теперь я наконец понял, в чем проблема, на самом деле все представления находились в корне папки webapps, которые были общедоступными, поэтому я предполагаю, что при вызове сайта project / контроллер индекса не вызывается, вместо этого поведение сервера по умолчанию обслуживает index файл, поэтому объект модели отсутствует в представлении, поскольку метод индекса никогда не вызывался, верно ??
Точно. Вот почему мы должны поместить все содержимое в папку WEB-INF, чтобы запрос после обработки контроллером мог вернуть что-то из WEB-INF.
ну, очевидно,
ModelAndView("index"), это проблема, держу пари, если вы замените"index"на"/", это будет работать наоборот. Не знаю, как это исправить, буду рад узнать сам :) Получите +1. Единственное, что приходит мне в голову, - это создать отдельное отображение для"/"с помощью простого jsp, который перенаправляет на/index. Что, кстати, я считал поведением по умолчанию