1

一部のノードの json 処理に機能を追加しようとしています。SlingSafeMethodsServletそこで、ユーザーが次の URL に対して GET を行ったときに実行する必要がある拡張カスタム サーブレットを作成しました: /data/events/any_sequence/any_sequence.jsonまたは/data/events/any_sequence/any_sequence.infinity.jsonまたは/dataなど/events/any_sequence/any_sequence.2.jsonここで、もちろんany_sequenceは有効なシンボルのシーケンスを意味します。

問題は、このテンプレートを URL のようにマッピングする方法がスリングのドキュメントで見つからないことです。

私はこのようなプロパティを設定しようとしています:

@Component
@Service
@Properties({
    @Property(name = "sling.servlet.resourceTypes", value = "data/events/-/-"),
    @Property(name = "sling.servlet.extensions", value = "json"),
    @Property(name = "sling.servlet.methods", value = "GET"),
    @Property(name = "service.description", value = "JSON advanced renderer")
})

しかし、それは役に立ちませんでした。felix コンソールを確認したところ、サービスが開始されて実行されていることがわかったので、問題は URL マッピングを設定する方法です。私の質問は、カスタム サーブレットの doGet を呼び出すために私の場合に URL マッピングを設定する方法です。

ありがとう。

4

6 に答える 6

5

私が理解している限り、CQ5はカスタムサーブレットをワイルドカードURLにマップする機能を提供していません。私が必要としたものと同様の目標を達成する唯一の方法は、次のようなこのサーブレットセレクターに固有のいくつかを使用することです。

@Component
@Service
@Properties({
    @Property(name = "sling.servlet.resourceTypes", value = "sling/servlet/default"),
    @Property(name = "sling.servlet.extensions", value = "json"),
    @Property(name = "sling.servlet.selectors", value = "advanced"),
    @Property(name = "sling.servlet.methods", value = "GET"),
    @Property(name = "service.description", value = "JSON advanced renderer")
})

このコードは、セレクターと拡張機能を備えたノードでGETを作成しようとすると*.advanced.json、リクエストがカスタムサーブレットに転送されることを意味します。

http://apache-sling.73963.n3.nabble.com/Register-servlet-for-subtree-td84106.htmlを参照してください

于 2012-06-26T05:47:55.027 に答える
0

これは、必要な外部 URI パターンを使用して実現できます。Sling マッピングまたは Apache リライトを作成して、JSON 拡張を URI の「data」の直後に効果的に移動することで、「/data」にある単一のサーブレットが最終的に任意のパスを受け取ることになります。リクエストのサフィックス。セレクターからのデータも使用している場合は、拡張機能と共にそれらを移動する必要があります。

于 2016-03-31T22:57:45.210 に答える
0

これは、同様のタスクを達成するために使用した構文です。

@Component(immediate = true, description = "JSON advanced renderer")
@Service(value = javax.servlet.Servlet.class)
@Properties(value = {
        @Property(name = "sling.servlet.extensions", value = { "json" }),
        @Property(name = "sling.servlet.methods", value = { "GET" }),
        @Property(name = "sling.servlet.paths", value = {
                        "/data/events/any_sequence/any_sequence",
                        "/data/events/any_sequence/any_sequence.infinity",
                        "/data/events/any_sequence/any_sequence.2"
        })
})
于 2012-06-25T22:46:31.030 に答える
0

サーブレットのパスは同じようです。セレクターだけが異なります。パスと一緒に使用すると、SlingServlet ではその他のものは無視されます。したがって、次のようなものを使用すると目的にかなうはずです: @SlingServlet(paths = " /data/events/any_sequence/any_sequence", extensions = "json")

Felix コンソール (/system/console/configMgr) からの実行パスに /data を追加する必要があります。Apache Sling Servlet Resolver プロパティにはデフォルトで存在しないためです。

于 2015-07-17T10:30:07.477 に答える