[英]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.