2

我想创建 Spring Boot Web 应用程序。

我有两个静态 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";
    }
}

项目结构是

在此处输入图像描述

4

4 回答 4

6

请更新您的 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 的答案基于浏览器的重定向。我的解决方案在没有浏览器交互的情况下返回静态。

于 2016-08-17T14:43:09.210 回答
2

如果你不关心额外的浏览器重定向,你可以使用这个:

@Controller
public class OneController {
    @RequestMapping("/one")
    public String one() {
        return "redirect:/static/one.html";
    }
}
于 2016-08-17T14:34:48.440 回答
2

在我的情况下,我想将所有子路径映射到同一个文件,但将浏览器路径保持为原始请求的路径,同时我使用百里香,然后我不想覆盖它的解析器。

@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 文件中读取数据,不会被缓存

于 2018-07-21T17:39:29.977 回答
0

我刚和百里香一起春天,花了一个小时试图弄清楚这一点。

在您的“application.properties”中添加

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

于 2021-04-09T17:31:54.797 回答