带有JAX-RS后端的Angular前端

时间:2013-02-18 13:43:42

标签: iis glassfish angularjs jax-rs cors

我有一个RESTful Java后端,我使用Jersey,一个JAX-RS实现。这个后端在端口8084上的glassfish服务器上运行。我还制作了一些显示数据的HTML5 / JS / AJAX页面,所以我知道我的REST实现正在运行。

我正在尝试使用Angular.js框架为此应用程序开发HTML5 / JS前端,但我遇到了一些麻烦。我已经设法开发了一些角度很小的webapps,我在80端口的Microsoft IIS上运行。

不幸的是,这两个应用程序之间的通信似乎存在问题。由于我是Angular的新手,我不确定我的前端代码是否犯了错误,或者我是否遇到了CORS问题。我已经尝试使用CORS过滤器在Tomcat 7上运行后端但是没有解决任何问题。

我的角度代码如下所示:

services.js

var serviceModule = angular.module('ServiceModule', ['ngResource']);
serviceModule.factory('NodeService', function($resource) {
var NodeService = $resource('http://localhost:port/HtmlJerseyJava/service/node/get/3',{},
    {
        'get' : { method: 'GET',params:{port:':8084'}}
    }
)
return NodeService; 

});

controllers.js

function NodeDetailCtrl($scope, NodeService){
    var node3 = NodeService.get();
    $scope.data = JSON.stringify(node3) ;
}

我现在硬编码ID 3,因为我还需要弄清楚如何将输入字段的值从视图传递到控制器然后传递给服务。最终,服务URL中的3将被变量:nodeId

替换

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

尝试以下简化代码:

app.js(出于测试目的,我建议你将函数放在一个js文件中)

var serviceModule = angular.module('ServiceModule', ['ngResource']);
serviceModule.factory('Node', function($resource) {
return $resource('http://localhost:port/HtmlJerseyJava/service/node/get/3',{port:':8084'},
    {
        get {method:'GET'}
    });
});

serviceModule.controller('NodeDetailCtrl', function($scope, Node){
    $scope.data = Node.get();
}

现在,客户端从REST调用获取的JSON数据会很有趣。

Greets Marc

答案 1 :(得分:2)

我找到了解决方案。有几个步骤可以解决这个问题:

  1. 将一个CORS过滤器添加到Glassfish上的Jersey servlet。
  2. 将Angular版本升级到1.1.x(目前仍然不稳定)
  3. 在资源中设置自定义标题。
  4. 享受工作申请。
  5. 非常感谢Marcbaur在这里帮助我。