注册 Sling Servlet 的方法 - Adobe AEM/CQ
Ways of registering a Sling Servlet - Adobe AEM/CQ
有两种注册 Sling Servlet 的方法
首先是@SlingServlet
@SlingServlet(
resourceTypes = "sling/servlet/default",
selectors = "hello",
extensions = "html",
methods = "GET")
public class MyServlet extends SlingSafeMethodsServlet {
@Override
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
...
}
}
第二次使用@Properties
@Component(metatype = true)
@Service(Servlet.class)
@Properties({
@Property(name = "sling.servlet.resourceTypes", value = "sling/servlet/default"),
@Property(name = "sling.servlet.selectors", value = "hello"),
@Property(name = "sling.servlet.extensions", value = "html"),
@Property(name = "sling.servlet.methods", value = "GET")
})
public class MyServlet extends SlingSafeMethodsServlet {
@Override
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
...
}
}
文档未列出特定方法相对于其他方法的任何优势。我的一位团队成员问过这个问题。我能想到的一件事是 @Properties
允许我们提供可配置的属性,这些属性可以从 OSGi 控制台更改(http://localhost:4502/system/console/components,假设 CQ 在本地端口 4502 上 运行)。使用特定方法有区别或优势吗?
@SlingServlet
减少了创建 servlet 所需的样板文件。您列出的某些属性(例如 methods = "GET"
)已默认设置,因此您无需重新配置。总之,它使注释更加简洁。
在内部,就像所有 SCR 注释一样,注释被翻译成 XML 文件,因此您无法仅通过查看部署了代码的实例来区分 servlet 是如何实现的。
如果您要指定供应商或服务说明,您可以添加额外的 @Property
定义。请注意,后一个实际上在 @SlingServlet
注释中可用,所以再次使用它 - 你会直接从中受益!
我还建议您阅读我的 collegue who described some of the AEM development best practices (including your case of @SlingServlet
). You can find it here
的精彩介绍
首先是@SlingServlet
@SlingServlet(
resourceTypes = "sling/servlet/default",
selectors = "hello",
extensions = "html",
methods = "GET")
public class MyServlet extends SlingSafeMethodsServlet {
@Override
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
...
}
}
第二次使用@Properties
@Component(metatype = true)
@Service(Servlet.class)
@Properties({
@Property(name = "sling.servlet.resourceTypes", value = "sling/servlet/default"),
@Property(name = "sling.servlet.selectors", value = "hello"),
@Property(name = "sling.servlet.extensions", value = "html"),
@Property(name = "sling.servlet.methods", value = "GET")
})
public class MyServlet extends SlingSafeMethodsServlet {
@Override
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
...
}
}
文档未列出特定方法相对于其他方法的任何优势。我的一位团队成员问过这个问题。我能想到的一件事是 @Properties
允许我们提供可配置的属性,这些属性可以从 OSGi 控制台更改(http://localhost:4502/system/console/components,假设 CQ 在本地端口 4502 上 运行)。使用特定方法有区别或优势吗?
@SlingServlet
减少了创建 servlet 所需的样板文件。您列出的某些属性(例如 methods = "GET"
)已默认设置,因此您无需重新配置。总之,它使注释更加简洁。
在内部,就像所有 SCR 注释一样,注释被翻译成 XML 文件,因此您无法仅通过查看部署了代码的实例来区分 servlet 是如何实现的。
如果您要指定供应商或服务说明,您可以添加额外的 @Property
定义。请注意,后一个实际上在 @SlingServlet
注释中可用,所以再次使用它 - 你会直接从中受益!
我还建议您阅读我的 collegue who described some of the AEM development best practices (including your case of @SlingServlet
). You can find it here