首页 > 解决方案 > Spring Boot不提供静态内容(angular-cli)以在tomcat上提供应用程序

问题描述

我正在努力解决一个问题,即 spring-boot 没有在 8080 上提供前端文件(通过 angular 创建)。我ng build将转换的 .ts ng 组件文件运行到 .js 并在 outputPath:/resource/static 文件夹中生成(我在 angular.json 文件中设置 outputPath)。创建了一个控制器来提供来自资源/静态的内容。

    @Controller
    public class AppController {
        @GetMapping("/")
        public String index() {
            return "index";
        }
     }

主类(src/mainjava/webapp/app):

@Configuration
@EnableAutoConfiguration
@ComponentScan({"webapp"})
public class Application extends WebMvcAutoConfiguration {

    public static void main(String[] args) {
    SpringApplication app = new SpringApplication(Application.class);
    app.run(args);
}
}

Ranng build --base-href .生成文件,如下图所示。

索引.html:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Welcome app</title>
  <base href="/">

  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
  <app-root></app-root>
<script type="text/javascript" src="runtime.js"></script><script type="text/javascript" src="polyfills.js"></script><script type="text/javascript" src="styles.js"></script><script type="text/javascript" src="vendor.js"></script><script type="text/javascript" src="main.js"></script></body>
</html>

注意:这是一个 gradle 项目。前端代码位于:src/main/java/webapp/frontend dir

/resources 中的 Application.yml

server:
  servlet:
    context-path: /
  port: 8080

在tomcat启动时:

Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-09-13 12:45:34.372  INFO 96027 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-09-13 12:45:34.384  INFO 96027 --- [           main] .m.m.a.ExceptionHandlerExceptionResolver : Detected @ExceptionHandler methods in exceptionHandle
2018-09-13 12:45:34.405  INFO 96027 --- [           main] o.s.b.a.w.s.WelcomePageHandlerMapping    : Adding welcome page: class path resource [static/index.html]
2018-09-13 12:45:34.566  INFO 96027 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2018-09-13 12:45:34.568  INFO 96027 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Bean with name 'dataSource' has been autodetected for JMX exposure
2018-09-13 12:45:34.575  INFO 96027 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Located MBean 'dataSource': registering with JMX server as MBean [com.zaxxer.hikari:name=dataSource,type=HikariDataSource]
2018-09-13 12:45:34.620  INFO 96027 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''

我什至尝试在 /resources 下添加 html 文件,以查看 tomcat 是否提供此文件夹中的任何内容。我也无法访问 page1.html,因此不确定 angular/ng 内容会有何不同,以至于当 tomcat 启动并运行时它无法提供服务。

资源/静态

我是否需要任何其他配置才能让 spring-boot 提供角度前端代码?任何建议表示赞赏。

@DavidT 回答您的问题:

拒绝从 '' 执行脚本,因为它的 MIME 类型 ('text/html') 不可执行,并且启用了严格的 MIME 类型检查。

替换会从检查中删除这些错误,但在http://localhost:8080/<script type to "text/html"上仍然没有 UI 。

奇怪的是,当我将该演示项目中的相同 index.html 文件粘贴到我的静态文件夹中时,浏览到http://localhost:8080时它不显示任何内容。但注意到从 IntellijIdea 中的浏览器选项打开此文件时(浏览器中的此 URI:http://localhost:63342/MY-PROJ/MY-PROJ-WEB-main/static/index.html,然后显示内容

<base href="/">问题还是脚本标签?

标签: javaspringspring-mvcspring-boottomcat

解决方案


成功的步骤,而不像上面的链接那样复杂:

  1. 去了https://start.spring.io/
  2. 选择了一个gradle项目
  3. 添加了网络依赖
  4. 下载并取消归档结果(没有从 更改名称demo
  5. 创建:demo/src/main/resources/static/index.html,内容如下:
    <html><body>你在里面!</body></html>
  6. 在目录中发出以下demo命令以运行您的应用程序:./gradlew bootRun
  7. 打开浏览器并转到http://localhost:8080/

您现在有证据表明将某些内容放入其中MY PROJECT/src/main/resources/static/会生成 HTML 文件的内容。

所以我有以下问题:

  • 您是否使用类似的方法将 SpringMVC 添加到您的 Spring Boot 项目中compile('org.springframework.boot:spring-boot-starter-web')

  • 您是否将静态内容放入 MY PROJECT/src/main/resources/static/ 中?

  • 如果为您提供了一个控制器,为什么您需要一个控制器来提供静态内容?尤其是映射到/?
  • 角度是否将*.html文件放入MY PROJECT/src/main/resources/static/
  • javascript 控制台说什么?找到了吗runtime.js

请参阅https://spring.io/guides/gs/serving-web-content/添加主页部分

https://stackoverflow.com/questions/24661289/spring-boot-not-serving-static-content有关不该做什么(以及为什么)的其他想法,请参阅内容。

这最初发布于https://www.quora.com/How-can-spring-boot-serve-angular-static-files/answer/David-Talalayevsky


推荐阅读