Использование стартера с пружинной загрузкой 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.
Отладка, регистрация.
Файлы загружаются из classpath:/templates
НЕ templates
. Это и JSP работают только с файлом WAR, а не с файлом JAR и ограничены.
@ М.Дейнум, ты прав. Вот что устанавливает spring-boot для тимелеафа: docs.spring.io/spring-boot/docs/1.3.0.M1/reference/html/…. Но когда я устанавливаю classpath:/templates
в своем файле свойств (без добавления зависимости от тимлиста), это не работает. Таким образом, единственным (и я уверен, что не самым эффективным) решением, которое я нашел, было добавление зависимости от тимлиста в pom.
хорошо, я исправлю ваш код и запущу в вашей IDE,
@RequestMapping("/hello")
public String index() {
return "hello";
}
Это не вариант. Метод index() вызывается в моем коде правильно. Проблема связана с расположением / путем файла jsp или чем-то еще.
Да, я устал.
попробуйте изменить свои конфигурации и коды, как показано ниже:
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
файлами (это не то, что мне нравится, но пока единственное найденное работающее решение).
Откуда вы знаете, что «метод контроллера входит точно»?