簡體   English   中英

AEM:更改了servlet的URL

[英]AEM: Changed url for servlets

例如:

我有程序組件。 並獲取信息 - 我使用下一個URL為servlet

/bin/dem/services/programs.json?programId=012345

我將此url( /bin/dem/services/programs.json )添加到Apache Sling Servlet/Script Resolver and Error Handler

現在我必須更改為Sling選擇器,以便調度程序可以緩存頁面。 現在將通過以下方式調用servlet:

/bin/dem/services/programId=012345.programs.json

我應該在Apache Sling Servlet/Script Resolver and Error Handler更改一些內容嗎? 或添加更改:

@Properties(value = {
        @org.apache.felix.scr.annotations.Property(name = "sling.servlet.methods", value = {"GET"}),
        @org.apache.felix.scr.annotations.Property(name = "sling.servlet.paths", value = {"/bin/dem/services/programs.json"})
})

選擇器不能以這種方式使用。 選擇器對預定義值很有用。 例如以下 -

/bin/dem/services/programs.012345.json

也無法使用查詢字符串緩存請求。

切換必要信息的另一種方法是使用URL后綴。 在你的情況下,它會

/bin/dem/services/programs.json/012345

在servlet中,您可以使用request.getRequestPathInfo().getSuffix()獲取請求路徑信息中的后綴字符串request.getRequestPathInfo().getSuffix()

另一種方法是使用RESTful URL。 在您的情況下,RESTful URL看起來像/content/path/to/current/page.program.json/012345

如前所述,使用@SlingServlet注釋。 有關如何使用它以及哪些屬性可用的信息可以在https://sling.apache.org/documentation/the-sling-engine/servlets.html上找到

在您的情況下,注釋看起來像

@SlingServlet(
    resourceTypes = { "sling/servlet/default" }, 
    methods = { "GET" }, 
    selectors = { "program" }, 
    extensions = { "json" }
)

如果只有讀取請求(例如GET,HEAD,OPTION)或SlingAllMethodsServlet用於請求更改或添加數據(例如POST,PUT,DELETE),則從SlingSafeMethodsServlet擴展servlet。

對於CQ5和AEM6,我建議一般使用RESTful servlet,因為CQ5 / AEM6使用Sling,這是一個純RESTful框架。 在Sling中,還可以按資源類型注冊servlet。 您可以查看https://docs.adobe.com/docs/en/aem/6-1/develop/platform/sling-cheatsheet.html ,了解Sling的工作原理。

選擇器可用於任意值,您只需要小心。

你可以定義一個約定,url可以包含2個選擇器,第一個是固定的,用於選擇正確的servlet,第二個是你的變量。

例如

HTTP://本地主機:4502 /內容/路徑/到/ node.selector.123.json

將'selector'作為固定值(在servlet中配置),將'123'作為動態值

如果您的路徑固定為/ bin,則更簡單。

您需要注意的是緩存,adobe調度程序將使用不同的URL緩存每個請求,這意味着如果您不小心,您可以累積大量文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM