Spring引导在webapp文件夹下找不到index.html

时间:2016-03-13 09:09:22

标签: java angularjs spring spring-mvc spring-boot

我从spring.io阅读了以下文档,它说By default Spring Boot will serve static content from a directory called /static (or /public or /resources or /META-INF/resources) in the classpath但是当我将index.html文件放在/resources下时,字符串index才会被渲染。目前index.html在webapp下,我正在使用AngularJS。

directory

MvcConfiguration

@Configuration
public class MvcConfig {

    @Bean
    InternalResourceViewResolver viewResolver(){

        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/webapp/");
        resolver.setSuffix(".html");

        return resolver;
    }

}

索引页面的Restful Service

@RestController
public class IndexController {

    @RequestMapping("/")
    public String index(){
        System.out.println("Looking in the index controller.........");
        return "index";
    }

}

在我的IDE控制台上,我确实看到从IndexController打印的Looking in the index controller......,在Chrome开发工具的网络下,我只看到localhost 200

的index.html

<body>

  <!--[if lt IE 7]>
      <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
  <![endif]-->

  <div ng-view></div>

  <div>Angular seed app: v<span app-version></span></div>

2 个答案:

答案 0 :(得分:29)

Spring Boot docs也说:

  

如果您的应用程序是,请不要使用src / main / webapp目录   打包成一个罐子。虽然这个目录是一个通用标准,但它   只会与战争包装一起使用,它将被默默地忽略   如果你生成一个jar,大多数构建工具。

Spring Boot非常自以为是,当你不试图抵制默认设置时,它是最好的。我认为您的文件放在/src/main/webapp中没有任何理由。只需使用/src/main/resources/static作为前端资产即可。这是最常见的地方。

它将自动从根URI提供这些静态文件,而无需创建任何根级别Controller。实际上,您的IndexController会阻止从根URI提供静态前端文件。根本不需要为静态文件创建Controller

您的应用也不需要查看解析器。您的应用程序只是单页角度应用程序使用的REST API。所以你的HTML模板是在客户端上。如果您正在进行服务器端HTML模板化(例如使用Thymeleaf或JSP),则需要查看解析器。所以也要删除那件。

答案 1 :(得分:4)

@RestController
public class IndexController {

    @RequestMapping("/")
    public String index(){
        System.out.println("Looking in the index controller.........");
        return "index";
    }

}

问题在这里,你正在使用@RestController,所以在这种情况下,如果你写“return'index';” spring boot将它覆盖为字符串答案。您需要使用@Controller注释。