2

JAX-RS 実装である Jersey を使用して作成した RESTful Java バックエンドがあります。このバックエンドは、ポート 8084 のグラスフィッシュ サーバーで実行されています。データを表示する HTML5/JS/AJAX ページもいくつか作成したので、REST 実装が機能していることがわかります。

Angular.js フレームワークを使用して、このアプリケーションの HTML5 / JS フロントエンドを開発しようとしていますが、問題が発生しています。ポート80のMicrosoftのIISで実行しているAngularでいくつかの小さなWebアプリケーションを開発することができました.

残念ながら、2 つのアプリケーション間の通信に問題があるようです。私は Angular を初めて使用するので、フロントエンド コードを間違えたのか、それとも CORS の問題が発生したのかわかりません。CORSフィルターを使用してTomcat 7でバックエンドを実行しようとしましたが、何も解決しませんでした。

私のAngularコードは次のようになります:

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 に置き換えられます。

どんな助けでも大歓迎です。

4

2 に答える 2

3

次の簡略化されたコードを試してください。

app.js(テスト目的で、関数を1つの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データを取得するかが興味深いでしょう。

マークに挨拶

于 2013-02-18T16:41:02.630 に答える
2

解決策を見つけました。この問題を解決するには、いくつかの手順がありました。

  1. CORS フィルターを Glassfish の Jersey サーブレットに追加します。
  2. Angular のバージョンを 1.1.x にアップグレードします (現在はまだ不安定です)
  3. リソースにカスタム ヘッダーを設定します。
  4. 実用的なアプリケーションをお楽しみください。

ここで私を助けてくれたマルクバウアに感謝します。

于 2013-02-19T07:48:57.610 に答える