我有使用 angular4 开发的后端 Spring Boot 应用程序和前端。由于这两个在部署时在不同的端口(8080,4200)上运行,因此不显示任何 UI。在本地,使用下面的启动 angular 服务器在 localhost:4200 上工作绝对正常并显示 Web 界面:
ng serve --proxy-config proxy.conf.json
其中 proxy.conf.json 有内容:
{
"*": {
"target": "http://localhost:8080",
"secure": false,
"logLevel": "debug"
}
}
但在尝试与 springboot 应用程序(本地主机:8080)集成时则不然。可能,它需要在部署之前烘焙 ng 业务逻辑(节点/npm 安装等)。
所以我使用ng buildwhich 将生成的文件复制到输出目录 - src/main/resources/static ,现在它位于 spring-boot 应用程序路径中。启动 tomcat 在 localhost:8080 上仍然没有显示任何 UI。我确实在 chrome 选项卡上看到了 Angular 符号/图标,但在 html 页面上没有显示任何内容。
我还添加了一个控制器方法来返回 index.html,以便它可以在路径中提供静态文件。
@GetMapping("/")
public String index() {
return "forward:/index.html";
}
但是这样做只会在网页上显示“forward:/index.html”字符串而不是 html 内容。我是否需要更改此 index.html 中的某些内容,以便它可以路由到我创建的 ng 组件?不知道更改 index.html 中的选择器是否重要。由于我的主要组件不是应用程序组件(默认情况下是根组件)而是登录组件,因此在 index.html 中我更改<app-root></app-root>为登录组件的选择器<app-login></app-login>;UI中仍然没有显示任何内容。
似乎 spring-boot 无法理解角度的东西以及如何路由到主要的 ng 组件。
下面是 index.html:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Hello 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>
项目结构:
-src
-main
-java
- backend
- AppController
- AppService
- Main.java
- frontend
- src
- index.html
- app
-login
- login.component.html
- login.component.css
- login.component.ts
etc..
部署时如何让前端与后端服务器一起工作?我是否需要在 application.properties 中添加任何参数或配置,以便应用程序在启动时从 /resources 提供静态内容?我是否添加任何 resourceLocationHandler 为其提供服务?
LEATH
相关分类