【问题标题】:AngularJS and SpringMVC in the same projectAngularJS 和 SpringMVC 在同一个项目中
【发布时间】:2016-02-05 10:59:59
【问题描述】:

我正在编写 Java Web 应用程序并希望在前端使用 AngularJS。 但我不想将路由和安全性委托给 Angular,而是用 spring 处理它。我在项目中的文件层次结构如下所示:

我编写了 Angular 控制器、服务等。然后将它应用到带有一些 init 参数的 jsp 页面上。所有 jsp 都由 Spring 控制器加载,我对这些页面有一些安全规则。 Angular 还使用此应用程序的 REST API。

问题在于这种方法的效率。事实上,我在这里有一些 SPA。每次我加载一个页面时,Angular 都会从头开始初始化(大约有 10 个页面)。

我想留在这个版本的原因是:

  • 已设置(路由、安全)
  • 似乎我不需要加载页面上的所有脚本,而只加载必需的脚本

但我也觉得我做错了... 我是否应该将 Spring 和 Angular 分开,并将 Angular 也用于路由和安全处理,而不仅仅是用于 DOM 操作。

你怎么看?你有什么建议吗?

【问题讨论】:

  • 看来你没有使用路由(使用 Spring),DOM 操作(使用 jsps),那么 Angular 有什么用,你可能想将后端 MVC 与前端 MVC 分开,然后让它们分别运行,并从双方的 MVC 架构中受益。
  • 好吧,我决定使用 Angular 进行 DOM 操作(例如双向绑定和对 REST 的 AJAX 查询等好处),但现在我意识到 Angular 可能不仅仅是这些东西。所以我正在寻找同时使用 Angular 和 Spring 的最佳实践

标签: javascript java angularjs jsp spring-mvc


【解决方案1】:

Angular 不是另一个 jQuery,它的单页应用程序框架。 您可以像查看与后端通信的普通外部应用程序一样查看 SPA。所以服务器上没有视图或呈现层,只有 REST API。

Angular 应用程序应该有自己的路由,将它与 spring MVC 结合是没有意义的。安全性主要基于 REST,您可以像往常一样在其上使用 Spring Security。

最佳实践是将 Angular 应用程序创建为单独的 javascript 应用程序。您可以使用 Angular 生态系统中的许多工具,这使您的工作非常舒适。

在开发过程中,您需要运行后端,并使用 javascript devstack 单独开发 Angular 部分。之后,您可以将这两个部分打包到单个战争中。

我在这里有一个很好的 Spring 和 Angular 集成的小例子:

https://github.com/Angular-cz/java-devstack

不幸的是,自述文件是用捷克语编写的(漂亮的语言:)但如果你有 Java 和 maven 方面的经验,你可能会从代码中得到它,我也会尝试在这里描述它。

可以在这里看到具有良好模块结构和 jwt autentication 的更大应用程序: https://bitbucket.org/angular_cz/beerapp

它们都有相似的架构:

  • 单独的 maven 模块用于前端和单独的后端。
  • javascript 部分使用 npm 作为包管理器
  • 开发人员正在使用 gulp 任务运行程序进行 javascript 开发(它在 gulpfile.js 所在的模块内运行)。
  • 配置了 karma runner 和几个单元测试
  • 应用程序在开发期间使用在 /api 上运行的代理连接到后端,因为应用程序在生产环境中可以具有相同的配置)
  • 在构建 war 时,前端模块使用 frontend-maven-plugin 运行 gulp 构建任务,与 javascript 开发者一样
  • 然后将构建的缩小资产放入资源中
  • 下一部分只是普通的 maven 方式如何将资产放入 /static
  • 还有一件好事 - 在集成测试配置文件下还有集成的 e2e 测试。

如果您对这种架构感兴趣,请随时询问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-13
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2018-12-06
    • 2019-05-13
    相关资源
    最近更新 更多