Spring MVC AngularJS将前端与后端分开

时间:2016-08-24 10:45:21

标签: javascript java angularjs spring spring-mvc

我有一个非常大的Spring MVC + AngularJS应用程序。 Spring MVC主要用作REST API,但不完全(安全性,一些路由,Wro4j资源打包) 在我开始开发的时候,在Web项目中没有多少经验。

App部署在Amazon Elasticbeanstalk上。

前端人加入我,我们必须以某种方式分离开发过程。

Qeustions是:

  1. 我将它们分成2个应用程序的基本步骤是什么?

  2. 什么是部署过程?前端/后端必须作为单独的应用程序部署吗?

  3. 关于一般最佳做法的任何建议?

3 个答案:

答案 0 :(得分:2)

我认为,如果您的应用程序非常庞大且后端构建需要花费大量时间(10分钟以上),或者您不希望每次都出于任何正当理由重建所有应用程序,那么将angularJS应用程序单独部署并单独部署的唯一原因。将angularJS应用程序放在spring MVC下即使它只是主页面给你很多优点:你可以使用spring生态系统,集中安全,登录和访问控制,SSO,很多集成,spring社交等。 不确定你真的需要将它们分成2个应用程序。但无论如何。

1)如果你想分离angularJS应用程序,你需要移动任何关于路由器从控制器或jsp文件到angularjs应用程序的逻辑。实现令牌基础身份验证/登录。然后,您可以在常量的角度块中定义 REST_BASE_URL 常量,并在任何地方使用($ http,$ resource)来生成请求URL。如果您基本上在角度部分工作,您可以在远程服务器上设置后端,并使用nginx或任何小型服务器在本地运行角度应用程序,并在Google Crome上工作(确保使用此agruments运行chrome: - args - disable-web-security --user-data-dir~ / )。遗憾的是,您无法在Firefox中禁用CSRF检查。

2)你可以分别构建和部署2个应用程序,这样会很好。

3)您还需要创建自己的 AuthenticationEntryPoint 并返回 SC_UNAUTHORIZED (401)而不是弹簧休息中的登录页面。如果有角度,您可以添加全局拦截器以捕获401并显示登录页面或对话框,如下所示:

.factory('authHttpResponseInterceptor',['$q','$location',function($q,$location){
        return {
            response: function(response){
                if (response.status === 401) {
                    console.log("Response 401");
                }
                return response || $q.when(response);
            },
            responseError: function(rejection) {
                if (rejection.status === 401) {
                    window.location.reload();
                }
                return $q.reject(rejection);
            }
        }
    }])

答案 1 :(得分:0)

你可以在节点或lite服务器或apache上部署前端项目,从运行Spring MVC的tomcat获取/发布数据,你可能有跨域问题,你可以使用

<mvc:cors> <mvc:mapping path="/**" /> </mvc:cors>

解决跨域问题。

答案 2 :(得分:-1)

“MVC”是Spring MVC代表模型视图控制器。 “视图”可以是html或jsp(您可以在servlet中指定视图详细信息)。您不需要单独部署它们。你是如何建立你的项目的? Maven是个好主意。它会将您的所有前端和后端代码包装到war / jar文件中,然后您必须将其部署在服务器上。

您的AngularJS代码将合并到您的春季“视图”中,其中的JS部分将位于您的app.js.所以没有必要将它们分开。您的前端人员可以编写前端代码,您只需在构建和部署之前将其集成到项目中。

但是,如果你绝对必须将它们分开,那么我只能想到一个选项。将所有UI代码(HTML,CSS,JS)放在Tomcat的“webapp”文件夹中的文件夹中(我们称之为“项目”)以及war文件(让我们称之为项目war.war )。部署后,您只需确保正确映射您的URL。例如,如果app.js(驻留在project / js / app.js中)想要调用/controller/action的Java服务,则URL必须为../../../project-war/controller/action