在没有viewresolver的情况下提供静态索引

时间:2017-06-21 17:37:14

标签: spring-boot

我想用两个控制器构建一个基本项目,一个服务器提供静态页面,另一个控制器定义REST端点。我不需要任何视图解析器,以便我将它放在一起:

@SpringBootApplication
@Controller
public class MyAppApplication extends SpringBootServletInitializer {

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

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

我的pom.xml:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

</dependencies>

我的index.html在src / main / resources /下,我试图返回索引,index.html以及完整路径但我仍然得到404错误。

我是否遗漏或误解了什么?

1 个答案:

答案 0 :(得分:2)

Serving static content:

默认情况下,Spring Boot将从类路径中的/ static(或/ public或/ resources或/ META-INF / resources)目录或ServletContext的根目录中提供静态内容。它使用Spring MVC中的ResourceHttpRequestHandler,因此您可以通过添加自己的WebMvcConfigurerAdapter并覆盖addResourceHandlers方法来修改该行为。

在独立的Web应用程序中,还启用了容器中的默认servlet,并充当后备,如果Spring决定不处理它,则从ServletContext的根目录提供内容。大多数情况下,这不会发生(除非您修改默认的MVC配置),因为Spring总是能够通过DispatcherServlet处理请求。

默认情况下,资源映射到/ **,但您可以通过spring.mvc.static-path-pattern调整它。例如,将所有资源重新定位到/ resources / **可以按如下方式实现

spring.mvc.static-path-pattern=/resources/**

您还可以使用 spring.resources.static-locations 自定义静态资源位置(将默认值替换为目录位置列表)。如果您这样做,默认的欢迎页面检测将切换到您的自定义位置,因此如果您在启动时的任何位置都有index.html,它将成为应用程序的主页。

DispatcherServlet 维护默认情况下要使用的实施列表。此信息保存在org.springframework.web.servlet包中的DispatcherServlet.properties文件中。

例如,将InternalResourceViewResolver设置其前缀属性配置到视图文件的父位置是很常见的。

无论细节如何,这里要理解的重要概念是,一旦在WebApplicationContext中配置了一个特殊的bean(例如InternalResourceViewResolver),就会有效地覆盖那些特殊bean类型本来会使用的默认实现列表。例如,如果配置InternalResourceViewResolver,则忽略ViewResolver实现的默认列表。

http://docs.spring.io/spring/docs/5.0.0.RC2/spring-framework-reference/web.html#mvc-servlet-config

请参阅github

中的示例