也许我误解了Sling servlet中的注释或者它们控制的内容。
我有一个使用以下内容定义的servlet:
@Component(immediate = true, metatype = false, label = "File Processor Servlet")
@Service(serviceFactory = false, value = javax.servlet.Servlet.class)
@Properties(value = {
@org.apache.felix.scr.annotations.Property(name = "sling.servlet.methods", value = { "GET" }),
@org.apache.felix.scr.annotations.Property(name = "sling.servlet.extensions", value = { "json" }),
@org.apache.felix.scr.annotations.Property(name = "sling.servlet.paths", value = { "/bin/FileProcessor" })
现在可以部署并且工作正常(我使用的是CQ5.3环境顺便说一句),这很好,每个人都很高兴。
然而,只有当我通过我的代码接收某人时,才意识到我已经实现了doDelete()
方法也可以正常工作,但是,你可以看到,我尚未将其声明为注释中sling.servlet.methods
属性中的方法。
我原以为在注释中省略DELETE作为方法会导致问题,并且会阻止servlet处理它。
我是否错过了这些注释的重点?
干杯。
答案 0 :(得分:3)
仅当未设置 sling.servlet.paths 属性时,sling.servlet.resourceTypes
,sling.servlet.selectors
,sling.servlet.extensions
和sling.servlet.methods
值才有效。如果设置了paths属性,则忽略所有其他属性。
引用吊索文档。
sling.servlet.methods - servlet支持的请求方法。属性值必须是单个String,字符串数组或字符串Vector。 如果设置了sling.servlet.paths属性,则忽略此属性。如果缺少此属性,则无论servlet实际实现/处理哪些方法,该值都默认为GET。
有关详细信息,请参阅Sling Engine Documentation。
编辑包括@BertrandDelacretaz评论:
在Sling中不推荐BTW在路径上注册servlet,引用相同的文档"在所需路径上创建资源,使用映射到servlet的资源类型,在大多数情况下提供相同的结果更多Sling内置功能的优势"。例如访问控制等功能。