javascript - AngularJS 和 SpringMVC 在同一个项目中

标签 javascript java angularjs jsp spring-mvc

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

hierarchy

我编写了 Angular Controller 、服务等。只需将它应用到带有一些初始化参数的 jsp 页面上。所有 jsp 都由 Spring Controller 加载,我对这些页面有一些安全规则。 Angular 还使用来自该应用程序的 REST API。

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

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

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

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

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

最佳答案

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

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

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

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

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

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

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

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

它们都有相似的架构:

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

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

关于javascript - AngularJS 和 SpringMVC 在同一个项目中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33530508/

相关文章:

AngularJS:由于服务和模块依赖而未捕获的对象

AngularJS 异步验证器 - 来自服务器响应的 UI 验证消息

asp.net - 从 ASP.Net Web 服务 json 输出中删除 "d"对象

javascript - 如何在 spidermonkey JavaScript 中获取控制台输入?

javascript - 什么是javascript中的正则表达式

java - 异步 Servlet 不在单独的线程中执行异步任务

java - xvfb 与 Selenium 。显示已在使用错误

javascript - 在 $http 之后更新多个 Controller 中的范围

javascript - Uncaught TypeError : google. maps.StamenMapType 不是函数

java - Jython 没有名为 random 的模块