【问题标题】:How to deploy AngularJS app and Spring Restful API service on the same domain/server?如何在同一个域/服务器上部署 AngularJS 应用程序和 Spring Restful API 服务?
【发布时间】:2014-07-18 04:49:59
【问题描述】:

我是 Spring 和 AngularJS 的新手。我按照here 的步骤构建了后端restful API,它会根据请求发送Json。因此,根据指南,当我运行“mvn spring-boot:run”时,tomcat 服务器从 localhost:8080 开始。

然后我使用 Yeoman 角度生成器来构建我的角度应用程序。当我在 Angular 应用程序中运行“grunt serve”时,前端应用程序在 localhost:9000 运行。

我应该怎么做才能让我的 Angular 应用程序与我的 Springboot Tomcat 服务器一起在同一个域上提供服务,比如 localhost:8080 ?

是否有我可以遵循的示例项目?我找到了以下项目,但由于我对 tomcat 没有太多背景,因此仍然无法使其工作。

  1. https://github.com/robharrop/spring-angularjs
  2. https://github.com/GermanoGiudici/angularjs-maven-tomcat-seed
  3. https://github.com/xvitcoder/spring-mvc-angularjs

【问题讨论】:

  • 您要一起部署它们吗?现在(如果您也启动 spring 应用程序),您正在模仿从一台服务器提供静态前端内容和从另一台服务器提供服务。您是否打算从同一个应用服务器一起为它们提供服务?
  • @pherris,是的,这就是我想做的。我想从同一个应用服务器一起部署它们。谢谢!

标签: angularjs spring tomcat spring-boot yeoman


【解决方案1】:

您需要采取以下任一方式:

  • 构建的文件(grunt build 然后基本上是 dist/ 目录中的所有内容)
  • 原始文件(您的 index.html 和所有 JS 原样)

并将它们复制到以下文件夹之一(我推荐 /public/):http://spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boot

Spring Boot 将自动添加位于以下任一目录中的静态 Web 资源:

/META-INF/资源/

/资源/

/静态/

/公共/

这意味着 Spring Boot 不仅提供了一种构建 Java 或 Groovy 应用程序的简单方法,您还可以使用它来轻松部署客户端 JavaScript 代码并在真实的 Web 服务器环境中对其进行测试!

这对开发来说会很痛苦,但是因为每次对前端进行更改时都必须重新复制文件。对于生产,您的目标应该是使用您的 spring 应用程序部署构建文件的版本化副本。

对于开发,您可能需要考虑让 grunt 提供 Angular 内容并同时运行 Tomcat 和您的 grunt 服务器(它是节点吗?)并在前端和后端之间启用跨源请求。或者您可以将整个 angular 目录复制到上述目录之一,但这是一种短期方法。

【讨论】:

  • 非常感谢您的回复!实际上,我现在所做的正是运行两台正在开发 CORS 的服务器。但是对于生产来说,我认为最好在同一台服务器上制作它们。而且我在为 IE 启用 CORS 时遇到了麻烦。我还阅读了您发给我的博客文章。目前我的 java 文件在“myApp/scr/mian/java”下。然后我将 angularApp 文件夹中的所有文件复制到“myApp/src/main/public”,这是正确的方法吗?那我应该去哪个地址获取我的 Angular 应用程序?
  • 听起来你已经让它为开发工作了 - 你是否尝试运行 grunt build 并将 dist/ 目录的内容复制到你的 spring 应用程序中的公共目录?
  • 是的,我将 angularApp 文件夹中的所有文件复制到“myApp/src/main/public”。但我不知道 Angular 应用程序的地址。这是我的 spring restful api 地址“localhost:8080/retrieveDoc?id=xxx”,它仍然可以很好地返回一个 json。但我不知道如何在将它们复制到“src/main/public”文件夹后访问我的 Angular 应用程序。
  • 应该是localhost:8080/index.html(或者你的主HTML文件的名字)
  • 我尝试了 localhost:8080/index.html,但它给了我一个 HTTP 状态 404 错误。 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-21
  • 2016-09-05
  • 2019-08-04
  • 1970-01-01
  • 2020-11-27
相关资源
最近更新 更多