Spring загрузочное отображение статического html

Я хочу создать весеннее загрузочное веб-приложение.

У меня есть два статических html файла: one.html, two.html.

Я хочу сопоставить их следующим образом

localhost:8080/one
localhost:8080/two

без использования шаблонизаторов (Thymeleaf).

Как это сделать? Я пробовал много способов сделать это, но у меня есть ошибка 404 или ошибка 500 (круговой путь просмотра [one.html]: будет отправлен обратно на текущий URL-адрес обработчика).

OneController.java:

@Controller
public class OneController {
    @RequestMapping("/one")
    public String one() {
        return "static/one.html";
    }
}

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

введите здесь описание изображения


person megasoch    schedule 17.08.2016    source источник


Ответы (4)


Пожалуйста, обновите ваш WebMvcConfig и включите UrlBasedViewResolver и /static обработчик ресурсов. Мой класс WebConfig выглядит следующим образом:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
        super.addResourceHandlers(registry);
    }

    @Bean
    public ViewResolver viewResolver() {
        UrlBasedViewResolver viewResolver = new UrlBasedViewResolver();
        viewResolver.setViewClass(InternalResourceView.class);
        return viewResolver;
    }

}

Я проверил это и, кажется, работает.

Ответ Maciej основан на перенаправлении браузера. Мое решение возвращает static без взаимодействия с браузером.

person lrother    schedule 17.08.2016
comment
Поскольку Spring 5 WebMvcConfigurerAdapter помечен как Deprecated, вам необходимо реализовать новый интерфейс WebMvcConfigurer! - person wizardInCloud; 18.05.2018
comment
Я думаю, проблема в том, что этот преобразователь является глобальным для всего контекста Spring, а как насчет того, чтобы использовать тимелеаф или JSP и хочу использовать определенный контроллер, обслуживающий статический файл? - person deFreitas; 21.07.2018
comment
Удалите super.addResourceHandlers (реестр) после реализации WebMvcConfigurer. См. ссылку [stackoverflow.com/questions/42393211/ - person ZeroCool; 10.12.2019

В моем случае я хочу сопоставить все дополнительные пути с одним и тем же файлом, но сохранить путь браузера в соответствии с исходным запросом, в то же время я использую тимелеаф, тогда я не хочу переопределять его преобразователь.

@Controller
public class Controller {

    @Value("${:classpath:/hawtio-static/index.html}")
    private Resource index;

    @GetMapping(value = {"/jmx/*", "/jvm/*"}, produces = MediaType.TEXT_HTML_VALUE)
    @ResponseBody
    public ResponseEntity actions() throws IOException {
        return ResponseEntity.ok(new InputStreamResource(index.getInputStream()));
    }
}

Обс. при каждом обращении будут считываться данные из файла index.html, они не будут кэшироваться

person deFreitas    schedule 21.07.2018
comment
InputStreamResource не требуется. ResponseEntity.ok(index) работает нормально. - person Roman K; 08.07.2019

Если вам не нужна дополнительная переадресация браузера, вы можете использовать это:

@Controller
public class OneController {
    @RequestMapping("/one")
    public String one() {
        return "redirect:/static/one.html";
    }
}
person Maciej Marczuk    schedule 17.08.2016

Я новичок в весне вместе с тимелеафом и потратил час, пытаясь понять это.

В вашем application.properties добавьте

spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html

person Mohammad Noman    schedule 09.04.2021