Spring boot не загружает файл jsp

Использование стартера с пружинной загрузкой 2.4.1 version.

папка ресурсов имеет следующую структуру. Как видно hello.jsp находится в папке с шаблонами. Они включены в application.properties:

  spring.mvc.view.prefix=/templates/
  spring.mvc.view.suffix=.jsp

И простой контроллер:

@Controller
public class HelloController {
    @GetMapping("/hello")
    public String index(){
        return "hello";
    }
}

Но получить 404.

Метод контроллера входит точно.

Пробовал то, что предлагается в следующем ответе, пытался использовать веб-приложение, но не помогло: /WEB-INF вообще не создается внутри цели, кажется, maven игнорирует папки webapp и WEB-INF.

Откуда вы знаете, что «метод контроллера входит точно»?

BeUndead 20.12.2020 01:34

Отладка, регистрация.

Serob_b 20.12.2020 01:42

Файлы загружаются из classpath:/templates НЕ templates. Это и JSP работают только с файлом WAR, а не с файлом JAR и ограничены.

M. Deinum 21.12.2020 14:12

@ М.Дейнум, ты прав. Вот что устанавливает spring-boot для тимелеафа: docs.spring.io/spring-boot/docs/1.3.0.M1/reference/html/…. Но когда я устанавливаю classpath:/templates в своем файле свойств (без добавления зависимости от тимлиста), это не работает. Таким образом, единственным (и я уверен, что не самым эффективным) решением, которое я нашел, было добавление зависимости от тимлиста в pom.

Serob_b 24.12.2020 00:29
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
4
1 101
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

хорошо, я исправлю ваш код и запущу в вашей IDE,

 @RequestMapping("/hello")
public String index() {
    return "hello";
}

Это не вариант. Метод index() вызывается в моем коде правильно. Проблема связана с расположением / путем файла jsp или чем-то еще.

Serob_b 20.12.2020 08:55

Да, я устал.

Serob_b 20.12.2020 09:02

попробуйте изменить свои конфигурации и коды, как показано ниже:

in application.properties put these configs:

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp


LoginForm class:
    public class LoginForm {
        private String email;
        private String password;

        public LoginForm() {}
        public String getEmail() { return email; }
        public void setEmail(String email) { this.email = email; }
        public String getPassword() { return password; }
        public void setPassword(String password) { this.password = password; }
    }

**LoginForm is just a normal bean with a no-arg Constructor and the getters / setters**

Now, we create a LoginHandler Class to coordinate and handle the whole login process.

    @Controller
    @RequestMapping("/login")
    public class LoginHandler {
    private static final String LOGIN_VIEW = "login";
    private static final String LOGOUT_VIEW = "logout";
    }

let’s define some handler methods.

    @GetMapping("/login")
    public String showLoginView(Model model) {
    model.addAttribute("loginForm", new LoginForm());
    return LOGIN_VIEW;
    }
Ответ принят как подходящий

Простой перезапуск Inellij IDEA с инвалидацией кэшей (File | Invalidate Caches / Restart) решил проблему.

На самом деле он начал работать с папкой шаблонов, поэтому шаблоны являются корнем, и если вы что-то поместите в него, вы можете получить доступ из контроллеров без каких-либо настроек prefix.

Но опять же, из веб-приложения ничего не работает, швы maven вообще игнорируют веб-приложение. Возможно, это связано с версией maven или spring-boot.

И добавьте зависимость тимелеафе, и она будет работать с .html файлами (это не то, что мне нравится, но пока единственное найденное работающее решение).

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