0

これは私にとってほとんど新しい分野であるため、私の質問は役立つリソースに関するものです。

ポート 80 で実行されている apache サーバーがあり、単に javascript アプリケーションをホストしています。

この Java アプリケーションは、ポート 8080 の jetty で実行されている Java アプリケーションに対して行われた残りの呼び出しを通じてデータを取得します。

フロントエンドには AngularJS を使用しています。私のリクエストサービスは次のようになります。

(function(ng, app){
    "use strict";
    app.service(
    "questService",
    function( $q, $http, _, categoryService ) {
        function($q, _, $http){
            function getQuestsFromServer(){
                $http({method: 'GET', url: 'http://localhost:8080/worldcraft/quests'}).
                success(function(data, status, headers, config) {
                    console.log("SUCESS!! {status: " + status + " \nData:" + data + "}");
                }).
                error(function(data, status, headers, config) {
                    console.log("FAILURE!! {status: " + status + " \nData:" + data + "}");
                });             
            }
        }
        return getQuestsFromServer : getQuestsFromServer;
    })
})(angular, Worldcraft);

Javaアプリケーションでは、このようなサービスがあります

@Singleton
@Produces(MediaType.APPLICATION_JSON)
@Path("worldcraft/quests")
public class QuestbookService {

    private Questbook questbook;

    @Inject
    public QuestbookService(Questbook questBook) {
        this.questbook = questBook;
    }

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public List<Quest> getQuests() {
        return questbook.getQuests();
    }

}

クロムを使用してこれをテストすると、javascript 例外が発生します: XMLHttpRequest はhttp://www.myserver.com:8080/worldcraft/questsをロードできません。Origin http://www.myserver.comは Access-Control-Allow-Origin で許可されていません。

調査を行った後、正しい解決策は JSONP を使用しているようです。しかし、私が持っているテクノロジーを使ってこれを行う方法を理解するのに本当に役立つものをオンラインで見たことがありません.

Java スタックは、サーブレットをファサード化するために、jetty、jackson、jersy を使用しています。

フロントエンド スタックは、ルーティングを行うために AngularJS を使用しています。

AngularJS プラットフォームは、通常の Apache サーバーを使用してポート 80 でホストされています。

アドバイスやヒントは何でもいいです。研究トピックが優先されます。または、私が間違っている可能性のあることの説明。

4

1 に答える 1

1

ポート 80 で実行されている Java アプリケーションは、応答ストリームに特定のヘッダーを書き込む必要があります。

Access-Control-Allow-Origin: *

:80 サイトでホストされている「静的」コンテンツがあるため、mod_headers を介してこのヘッダーを追加するように Apache に依頼する必要があります。次の内容でルート ディレクトリに .htaccess ファイルを作成します。

<filesmatch ".*">
Header set Access-Control-Allow-Origin "*"
</filesmatch>

このパラメーターは、パイプ (|) 記号またはワイルドカードとしての * で個別に区切られた発信者 URI を定義します。

このエラーが発生する理由は、ブラウザが「同一オリジン ポリシー」を実装しているためです。

この変更は、ソースアプリケーションに実装する必要があります。

ここでヘッダーリファレンスを読むことができます。

于 2013-05-02T22:07:02.533 に答える