Невозможно отобразить HTML-файл с приложением Spring Boot - PullRequest
0 голосов
/ 27 апреля 2018

Я создал приложение Spring Boot с Intellij. Он создает образец веб-приложения с контроллером и пустой HTML-страницей.

Но проблема в том, что этот пример приложения возвращает «Страница ошибки Whitelabel», когда я захожу на «http://localhost:8080/info/aa". Я думаю, что он не может найти файл info.html. Есть ли способ исправить это?

Вот пример контроллера;

@Controller
@RequestMapping("/info")
public class InfoController {

    @RequestMapping("/aa")
    public String getServerInfo(Map<String, Object> model){

        model.put("message", "server info");
        return "info";

    }

}

Мой каталог проектов;

enter image description here

РЕДАКТИРОВАТЬ: Мой HTML-файл info.html;

<!DOCTYPE html>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html lang="en">
<head>

</head>
<body>

</body>

</html>

РЕДАКТИРОВАТЬ 2: Я обновляю свой html-каталог на templates / info.html

enter image description here

Класс DemoApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

И файл application.properties пуст.

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

Вам не нужно помещать вашу info.html в папку static/info внутри ваших ресурсов, вместо этого поместите ее в templates. @RequestMapping поверх вашего InfoController класса не указывает, где найти запрошенные html файлы, это всего лишь отображение для вашего запроса.

Если вы хотите иметь отдельную папку для разных страниц html, вы можете иметь папку info внутри вашей папки templates, но вам все равно придется ссылаться на ваш контроллер как info/info:

@RequestMapping("/aa")
public String getServerInfo(Map<String, Object> model){

    model.put("message", "server info");
    return "info/info";

}
0 голосов
/ 27 апреля 2018

Если вы хотите использовать JSP (как я вижу, вы хотите), прежде всего переместите html-файлы в папку:

/src/java/webapp/

и измените расширение на .jsp. Тогда у вас будет файл представления в:

/src/java/webapp/info/info.jsp

Во-вторых, вы должны добавить конфигурацию для разрешения вида:

@Configuration
@EnableWebMvc
public class WebConfiguration {
    @Bean
    public ViewResolver getViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/templates/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
}

И в контроллере запомните, чтобы вернуть путь к файлу - вы настроили заголовок для ... / templates и вам нужно вернуть info / info :

@RequestMapping("/info")
public String info() {
    return "info/info";
}
0 голосов
/ 27 апреля 2018

Если ваш info.html на самом деле является файлом шаблона, то он, очевидно, не должен находиться в статическом содержимом, он должен находиться в папке templates, поскольку он не является статическим.

Вот пример: https://spring.io/guides/gs/serving-web-content/

В папке static у вас есть все статическое содержимое, которое не изменится, когда вы его обслуживаете, например изображения, сценарии css, js и т. Д.

В папке templates хранятся шаблоны, из которых spring + окончание шаблона (например, thymeleaf) будут генерировать фактический html, используя ваш model, который будет передан клиенту.

Также, если у вас есть подпапка в шаблонах, таких как templates/info/info.html, вы должны вернуть info/info в качестве имени шаблона из вашего контроллера, а не просто info.

Однако, если вы используете jsp, то это нечто иное, и вы не должны использовать папку template, вы должны создать папки webapp/WEB-INF/jsp/ и поместить их туда, а затем вы должны назвать свой шаблон info.jsp вместо info.html

Пример здесь: https://www.mkyong.com/spring-boot/spring-boot-hello-world-example-jsp/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...